Name: series-workflow586pk Phase: Succeeded StartedAt: 2026-07-25 16:25:36 +0000 UTC FinishedAt: 2026-07-25 17:45:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow586pk[0] Phase: Succeeded StartedAt: 2026-07-25 16:25:36 +0000 UTC FinishedAt: 2026-07-25 16:44:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow586pk[0].run-triage Phase: Succeeded StartedAt: 2026-07-25 16:25:36 +0000 UTC FinishedAt: 2026-07-25 16:44:57 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "9eebf259d5352b87080d67758f483583d9e763d7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NTFS3_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "9eebf259d5352b87080d67758f483583d9e763d7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NTFS3_FS" ], "series_id": "acab1807-3a53-4739-84c2-55ab0f46bf38" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "indx_find_sort", "ntfs_insert_security" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE2OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05URlMzX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW5keF9maW5kX3NvcnQmIzM0OywKICAgICYjMzQ7bnRmc19pbnNlcnRfc2VjdXJpdHkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiBgaW5keF9maW5kX3NvcnRgIHdpdGhpbiB0aGUgTlRGUzMgZmlsZXN5c3RlbSBkcml2ZXIgYnkgZnJlZWluZyBgbi1cdTAwM2VpbmRleGAgYmVmb3JlIGBuYCB3aGVuIHBvcHBpbmcgYSBsZXZlbCBmcm9tIHRoZSBmaW5kIHN0YXRlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgZmlsZXN5c3RlbSBsb2dpYywgc3BlY2lmaWNhbGx5IGR1cmluZyBpbmRleCBsb29rdXBzIGFuZCBzZWN1cml0eSBkZXNjcmlwdG9yIGluc2VydGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNjo0MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGFjMjYwYWE4ZTgxYzVmYzE4MzA3NGExYmZiOTUzNDExNTUwNTE4MzBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAyNSAxNjo0Mjo1MiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9udGZzMy9pbmRleC5jIGIvZnMvbnRmczMvaW5kZXguY1xuaW5kZXggNGFmYWNmYzZmZjg5MzAuLjY4OTcxMmQzNDYzZDQxIDEwMDY0NFxuLS0tIGEvZnMvbnRmczMvaW5kZXguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbnRmczMvaW5kZXguY1xuQEAgLTEzMjUsNiAmIzQzOzEzMjUsNyBAQCBpbnQgaW5keF9maW5kX3NvcnQoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcbiBcdFx0LyogUG9wIG9uZSBsZXZlbC4gKi9cbiBcdFx0aWYgKG4pIHtcbiBcdFx0XHRmbmRfcG9wKGZuZCk7XG4mIzQzO1x0XHRcdGtmcmVlKG4tXHUwMDNlaW5kZXgpO1xuIFx0XHRcdGtmcmVlKG4pO1xuIFx0XHR9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTY6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05URlMzX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW5keF9maW5kX3NvcnQmIzM0OywKICAgICYjMzQ7bnRmc19pbnNlcnRfc2VjdXJpdHkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiBgaW5keF9maW5kX3NvcnRgIHdpdGhpbiB0aGUgTlRGUzMgZmlsZXN5c3RlbSBkcml2ZXIgYnkgZnJlZWluZyBgbi1cdTAwM2VpbmRleGAgYmVmb3JlIGBuYCB3aGVuIHBvcHBpbmcgYSBsZXZlbCBmcm9tIHRoZSBmaW5kIHN0YXRlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgZmlsZXN5c3RlbSBsb2dpYywgc3BlY2lmaWNhbGx5IGR1cmluZyBpbmRleCBsb29rdXBzIGFuZCBzZWN1cml0eSBkZXNjcmlwdG9yIGluc2VydGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGFjMjYwYWE4ZTgxYzVmYzE4MzA3NGExYmZiOTUzNDExNTUwNTE4MzAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1bCAyNSAxNjo0Mjo1MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL250ZnMzL2luZGV4LmMgYi9mcy9udGZzMy9pbmRleC5jCmluZGV4IDRhZmFjZmM2ZmY4OTMwLi42ODk3MTJkMzQ2M2Q0MSAxMDA2NDQKLS0tIGEvZnMvbnRmczMvaW5kZXguYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9udGZzMy9pbmRleC5jCkBAIC0xMzI1LDYgJiM0MzsxMzI1LDcgQEAgaW50IGluZHhfZmluZF9zb3J0KHN0cnVjdCBudGZzX2luZGV4ICppbmR4LCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksCiAJCS8qIFBvcCBvbmUgbGV2ZWwuICovCiAJCWlmIChuKSB7CiAJCQlmbmRfcG9wKGZuZCk7CiYjNDM7CQkJa2ZyZWUobi0mZ3Q7aW5kZXgpOwogCQkJa2ZyZWUobik7CiAJCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDE5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOVEZTMyBJbmRleCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0YXJnZXRpbmcgYGZzL250ZnMzL2luZGV4LmNgLiBTcGVjaWZpY2FsbHksIHRoZSBtb2RpZmljYXRpb24gaW4gYGluZHhfZmluZF9zb3J0YCBjYXVnaHQgbXkgZXllLiBJdCBhcHBlYXJzIHRoZXkmIzM5O3ZlIGFkZGVkIGBrZnJlZShuLSZndDtpbmRleCk7YCByaWdodCBiZWZvcmUgdGhlIGBrZnJlZShuKTtgIGNhbGwuIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtBaCwgdGhleSYjMzk7cmUgbGlrZWx5IGRlYWxpbmcgd2l0aCBhIG1lbW9yeSBsZWFrIG9yIGEgZGFuZ2xpbmcgcG9pbnRlciBpc3N1ZS4mIzM0OyBUaGlzIGltcGxpZXMgdGhhdCBgbi0mZ3Q7aW5kZXhgIGlzIGxpa2VseSBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBidWZmZXIgd2l0aGluIHRoZSBgbmAgc3RydWN0dXJlIGFuZCBpcyBiZWluZyB1c2VkIHRvIHN0b3JlIGluZGV4IGRhdGEuIFRoZSBpbnRlbnQgaGVyZSBpcyB0byBleHBsaWNpdGx5IGRlYWxsb2NhdGUgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIGluZGV4IGRhdGEgYmVmb3JlIGZyZWVpbmcgdGhlIG5vZGUgaXRzZWxmLCB3aGljaCBpcyBzdGFuZGFyZCBwcmFjdGljZSB0byBwcmV2ZW50IG1lbW9yeSBjb3JydXB0aW9uLiBJIG5lZWQgdG8gZGl2ZSBkZWVwZXIgaW50byBgaW5keF9maW5kX3NvcnRgIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2UgYmV0dGVyLCB3aGF0IGBuYCBhbmQgYG4tJmd0O2luZGV4YCBhcmUsIGFuZCB3aHkgdGhpcyBhZGRpdGlvbmFsIGBrZnJlZWAgd2FzIGRlZW1lZCBuZWNlc3NhcnkuIFRoaXMgY291bGQgYmUgYSBnb29kIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5keF9maW5kX3NvcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzMy9pbmRleC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMzL2luZGV4LmM9MTE2OT1pbnQgaW5keF9maW5kKHN0cnVjdCBudGZzX2luZGV4ICppbmR4LCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXG4tLVxuZnMvbnRmczMvaW5kZXguYy0xMjQzLVxuZnMvbnRmczMvaW5kZXguYzoxMjQ0OmludCBpbmR4X2ZpbmRfc29ydChzdHJ1Y3QgbnRmc19pbmRleCAqaW5keCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxuZnMvbnRmczMvaW5kZXguYy0xMjQ1LVx0XHQgICBjb25zdCBzdHJ1Y3QgSU5ERVhfUk9PVCAqcm9vdCwgc3RydWN0IE5URlNfREUgKiplbnRyeSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDczCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgYGluZHhfZmluZF9zb3J0YCBmdW5jdGlvbiwga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3RlZXBlZCBpbiB0aGlzIHNvcnQgb2Ygd29yazoKCioqRGVjb25zdHJ1Y3RpbmcgYGluZHhfZmluZF9zb3J0YCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBpbmR4X2ZpbmRfc29ydGAgd2l0aGluIGBmcy9udGZzMy9pbmRleC5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gaW5kZXhpbmcsIHBhcnRpY3VsYXJseSBob3cgaXQgaGFuZGxlcyB0aGUgY3J1Y2lhbCB0YXNrIG9mIHNvcnRpbmcgd2l0aGluIHRoZSBOVEZTMyBmaWxlIHN5c3RlbS4gSSBhbnRpY2lwYXRlIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkIGluIHRlcm1zIG9mIGluZGV4IG1hbmFnZW1lbnQ6IGxpa2VseSBpbnZvbHZlcyBjb21wYXJpc29ucyBvZiBrZXkgYXR0cmlidXRlcywgcGVyaGFwcyBhIGJpbmFyeSBzZWFyY2ggZm9yIGVmZmljaWVuY3ksIGFuZCBvZiBjb3Vyc2UsIHByb3BlciBoYW5kbGluZyBvZiBjb2xsaXNpb25zIG9yIGR1cGxpY2F0ZSBlbnRyaWVzIHdpdGhpbiB0aGUgaW5kZXggc3RydWN0dXJlcy4gSSBpbWFnaW5lIGl0JiMzOTtzIGNydWNpYWwgZm9yIGxvb2t1cHMsIGluc2VydGlvbnMsIGFuZCBkZWxldGlvbnMuIEkgc2hvdWxkIGJlIGFibGUgdG8gZGVkdWNlIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcywgcHJvYmFibHkgQi10cmVlcyBvciBzaW1pbGFyIGJhbGFuY2VkIHN0cnVjdHVyZXMsIGJ5IHRyYWNpbmcgaXRzIGV4ZWN1dGlvbiBmbG93LiBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoaXMgZnVuY3Rpb24gYXMgaXQgaXMga2V5IHRvIG92ZXJhbGwgZmlsZXN5c3RlbSBzdGFiaWxpdHkuIEkmIzM5O20ga2VlbiB0byBzZWUgaWYgaXQgbWFrZXMgdXNlIG9mIGFueSBvcHRpbWl6YXRpb25zLCBtYXliZSBjYWNoaW5nIHRlY2huaXF1ZXMsIG9yIGRlZmVycmVkIHdyaXRlcy4gSSBhbnRpY2lwYXRlIGl0IHdpbGwgYmUgaW52b2x2ZWQgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIHRvIG1hbmFnZSB0aGUgaW5kZXggZGF0YS4gTGV0JiMzOTtzIHNlZSBob3cgd2VsbCBpdCYjMzk7cyB3cml0dGVuIGFuZCBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgYm90dGxlbmVja3Mgb3Igb3Bwb3J0dW5pdGllcyBmb3IgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE2OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvbnRmczMvaW5kZXguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyNDQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyNDQ6XHRpbnQgaW5keF9maW5kX3NvcnQoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcbjEyNDU6XHRcdFx0ICAgY29uc3Qgc3RydWN0IElOREVYX1JPT1QgKnJvb3QsIHN0cnVjdCBOVEZTX0RFICoqZW50cnksXG4xMjQ2Olx0XHRcdCAgIHN0cnVjdCBudGZzX2ZuZCAqZm5kKVxuMTI0NzpcdHtcbjEyNDg6XHRcdGludCBlcnI7XG4xMjQ5Olx0XHRzdHJ1Y3QgaW5keF9ub2RlICpuID0gTlVMTDtcbjEyNTA6XHRcdHN0cnVjdCBOVEZTX0RFICplO1xuMTI1MTpcdFx0c2l6ZV90IGl0ZXIgPSAwO1xuMTI1MjpcdFx0aW50IGxldmVsID0gZm5kLVx1MDAzZWxldmVsO1xuMTI1MzpcdFxuMTI1NDpcdFx0aWYgKCEqZW50cnkpIHtcbjEyNTU6XHRcdFx0LyogU3RhcnQgZmluZC4gKi9cbjEyNTY6XHRcdFx0ZSA9IGhkcl9maXJzdF9kZShcdTAwMjZyb290LVx1MDAzZWloZHIpO1xuMTI1NzpcdFx0XHRpZiAoIWUpXG4xMjU4Olx0XHRcdFx0cmV0dXJuIDA7XG4xMjU5Olx0XHRcdGZuZF9jbGVhcihmbmQpO1xuMTI2MDpcdFx0XHRmbmQtXHUwMDNlcm9vdF9kZSA9IGU7XG4xMjYxOlx0XHR9IGVsc2UgaWYgKCFsZXZlbCkge1xuMTI2MjpcdFx0XHRpZiAoZGVfaXNfbGFzdChmbmQtXHUwMDNlcm9vdF9kZSkpIHtcbjEyNjM6XHRcdFx0XHQqZW50cnkgPSBOVUxMO1xuMTI2NDpcdFx0XHRcdHJldHVybiAwO1xuMTI2NTpcdFx0XHR9XG4xMjY2Olx0XG4xMjY3Olx0XHRcdGUgPSBoZHJfbmV4dF9kZShcdTAwMjZyb290LVx1MDAzZWloZHIsIGZuZC1cdTAwM2Vyb290X2RlKTtcbjEyNjg6XHRcdFx0aWYgKCFlKVxuMTI2OTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTI3MDpcdFx0XHRmbmQtXHUwMDNlcm9vdF9kZSA9IGU7XG4xMjcxOlx0XHR9IGVsc2Uge1xuMTI3MjpcdFx0XHRuID0gZm5kLVx1MDAzZW5vZGVzW2xldmVsIC0gMV07XG4xMjczOlx0XHRcdGUgPSBmbmQtXHUwMDNlZGVbbGV2ZWwgLSAxXTtcbjEyNzQ6XHRcbjEyNzU6XHRcdFx0aWYgKGRlX2lzX2xhc3QoZSkpXG4xMjc2Olx0XHRcdFx0Z290byBwb3BfbGV2ZWw7XG4xMjc3Olx0XG4xMjc4Olx0XHRcdGUgPSBoZHJfbmV4dF9kZShcdTAwMjZuLVx1MDAzZWluZGV4LVx1MDAzZWloZHIsIGUpO1xuMTI3OTpcdFx0XHRpZiAoIWUpXG4xMjgwOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMjgxOlx0XG4xMjgyOlx0XHRcdGZuZC1cdTAwM2VkZVtsZXZlbCAtIDFdID0gZTtcbjEyODM6XHRcdH1cbjEyODQ6XHRcbjEyODU6XHRcdC8qIEp1c3QgdG8gYXZvaWQgdHJlZSBjeWNsZS4gKi9cbjEyODY6XHRuZXh0X2l0ZXI6XG4xMjg3Olx0XHRpZiAoaXRlciYjNDM7JiM0MzsgXHUwMDNlPSAxMDAwKVxuMTI4ODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjEyODk6XHRcbjEyOTA6XHRcdHdoaWxlIChkZV9oYXNfdmNuX2V4KGUpKSB7XG4xMjkxOlx0XHRcdGlmIChsZTE2X3RvX2NwdShlLVx1MDAzZXNpemUpIFx1MDAzY1xuMTI5MjpcdFx0XHQgICAgc2l6ZW9mKHN0cnVjdCBOVEZTX0RFKSAmIzQzOyBzaXplb2YodTY0KSkge1xuMTI5MzpcdFx0XHRcdGlmIChuKSB7XG4xMjk0Olx0XHRcdFx0XHRmbmRfcG9wKGZuZCk7XG4xMjk1Olx0XHRcdFx0XHRrZnJlZShuKTtcbjEyOTY6XHRcdFx0XHR9XG4xMjk3Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMjk4Olx0XHRcdH1cbjEyOTk6XHRcbjEzMDA6XHRcdFx0LyogUmVhZCBuZXh0IGxldmVsLiAqL1xuMTMwMTpcdFx0XHRlcnIgPSBpbmR4X3JlYWQoaW5keCwgbmksIGRlX2dldF92Ym4oZSksIFx1MDAyNm4pO1xuMTMwMjpcdFx0XHRpZiAoZXJyKVxuMTMwMzpcdFx0XHRcdHJldHVybiBlcnI7XG4xMzA0Olx0XG4xMzA1Olx0XHRcdC8qIFRyeSBuZXh0IGxldmVsLiAqL1xuMTMwNjpcdFx0XHRlID0gaGRyX2ZpcnN0X2RlKFx1MDAyNm4tXHUwMDNlaW5kZXgtXHUwMDNlaWhkcik7XG4xMzA3Olx0XHRcdGlmICghZSkge1xuMTMwODpcdFx0XHRcdGtmcmVlKG4pO1xuMTMwOTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTMxMDpcdFx0XHR9XG4xMzExOlx0XG4xMzEyOlx0XHRcdGZuZF9wdXNoKGZuZCwgbiwgZSk7XG4xMzEzOlx0XHR9XG4xMzE0Olx0XG4xMzE1Olx0XHRpZiAobGUxNl90b19jcHUoZS1cdTAwM2VzaXplKSBcdTAwM2Ugc2l6ZW9mKHN0cnVjdCBOVEZTX0RFKSkge1xuMTMxNjpcdFx0XHQqZW50cnkgPSBlO1xuMTMxNzpcdFx0XHRyZXR1cm4gMDtcbjEzMTg6XHRcdH1cbjEzMTk6XHRcbjEzMjA6XHRwb3BfbGV2ZWw6XG4xMzIxOlx0XHRmb3IgKDs7KSB7XG4xMzIyOlx0XHRcdGlmICghZGVfaXNfbGFzdChlKSlcbjEzMjM6XHRcdFx0XHRnb3RvIG5leHRfaXRlcjtcbjEzMjQ6XHRcbjEzMjU6XHRcdFx0LyogUG9wIG9uZSBsZXZlbC4gKi9cbjEzMjY6XHRcdFx0aWYgKG4pIHtcbjEzMjc6XHRcdFx0XHRmbmRfcG9wKGZuZCk7XG4xMzI4Olx0XHRcdFx0a2ZyZWUobi1cdTAwM2VpbmRleCk7XG4xMzI5Olx0XHRcdFx0a2ZyZWUobik7XG4xMzMwOlx0XHRcdH1cbjEzMzE6XHRcbjEzMzI6XHRcdFx0bGV2ZWwgPSBmbmQtXHUwMDNlbGV2ZWw7XG4xMzMzOlx0XG4xMzM0Olx0XHRcdGlmIChsZXZlbCkge1xuMTMzNTpcdFx0XHRcdG4gPSBmbmQtXHUwMDNlbm9kZXNbbGV2ZWwgLSAxXTtcbjEzMzY6XHRcdFx0XHRlID0gZm5kLVx1MDAzZWRlW2xldmVsIC0gMV07XG4xMzM3Olx0XHRcdH0gZWxzZSBpZiAoZm5kLVx1MDAzZXJvb3RfZGUpIHtcbjEzMzg6XHRcdFx0XHRuID0gTlVMTDtcbjEzMzk6XHRcdFx0XHRlID0gZm5kLVx1MDAzZXJvb3RfZGU7XG4xMzQwOlx0XHRcdFx0Zm5kLVx1MDAzZXJvb3RfZGUgPSBOVUxMO1xuMTM0MTpcdFx0XHR9IGVsc2Uge1xuMTM0MjpcdFx0XHRcdCplbnRyeSA9IE5VTEw7XG4xMzQzOlx0XHRcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTY6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE1OAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBhIFBvdGVudGlhbCBNZW1vcnkgTGVhayBGaXggaW4gYGluZHhfZmluZF9zb3J0YCoqCgpBbHJpZ2h0LCBzbyB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIGBrZnJlZShuLSZndDtpbmRleCk7YCBjYWxsIGJlZm9yZSB0aGUgYGtmcmVlKG4pO2AgaW4gYGluZHhfZmluZF9zb3J0YC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2FpdCBhIG1pbnV0ZSwgaXMgdGhhdCAqcmVhbGx5KiBuZWVkZWQ/JiMzNDsuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGJhY2suIFRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0IGBuLSZndDtpbmRleGAgaXMgYSBzZXBhcmF0ZWx5IGFsbG9jYXRlZCBwaWVjZSBvZiBtZW1vcnkuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneSBoZXJlLiBBaCwgcmlnaHQsIGBpbmR4X3JlYWRgIGlzIHRoZSBrZXkgZnVuY3Rpb24gdG8gZXhhbWluZS4gVGhhdCYjMzk7cyB3aGVyZSBgbmAgYW5kLCBzcGVjaWZpY2FsbHksIGBuLSZndDtpbmRleGAgc2hvdWxkIGJlIGFsbG9jYXRlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGFzc3VtcHRpb24gaG9sZHMgdHJ1ZS4gSSBoYXZlIHRvIGNoZWNrIHRoZSBjYWxsIGNoYWluIGFuZCB2ZXJpZnkgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5LiBMZXQgbWUganVtcCBpbnRvIGBpbmR4X3JlYWRgIGFuZCBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbi4uLiBJIG5lZWQgdG8gc2VlIGlmIGl0IGFsbG9jYXRlcyBib3RoIGBuYCBhbmQgYG4tJmd0O2luZGV4YC4gVGhpcyB3aWxsIGRldGVybWluZSBpZiB0aGUgcGF0Y2ggaXMgYSB2YWxpZCBmaXggb3IgYSByZWR1bmRhbnQsIG9yIGV2ZW4sIHBvdGVudGlhbGx5LCBkYW5nZXJvdXMgY2hhbmdlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgYGluZHhfcmVhZGAgaXMgZG9pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTY6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5keF9yZWFkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmczMvaW5kZXguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzMy9pbmRleC5jPTEwNTM9c3RhdGljIGludCBpbmR4X3dyaXRlKHN0cnVjdCBudGZzX2luZGV4ICppbmR4LCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXG4tLVxuZnMvbnRmczMvaW5kZXguYy0xMDYxLS8qXG5mcy9udGZzMy9pbmRleC5jOjEwNjI6ICogaW5keF9yZWFkX3JhXG5mcy9udGZzMy9pbmRleC5jLTEwNjMtICpcbi0tXG5mcy9udGZzMy9pbmRleC5jLTEwNjctICovXG5mcy9udGZzMy9pbmRleC5jOjEwNjg6aW50IGluZHhfcmVhZF9yYShzdHJ1Y3QgbnRmc19pbmRleCAqaW5keCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBDTFNUIHZibixcbmZzL250ZnMzL2luZGV4LmMtMTA2OS1cdFx0IHN0cnVjdCBpbmR4X25vZGUgKipub2RlLCBzdHJ1Y3QgZmlsZV9yYV9zdGF0ZSAqcmEpXG4tLVxuZnMvbnRmczMvaW5kZXguYz0xMTY5PWludCBpbmR4X2ZpbmQoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcbi0tXG5mcy9udGZzMy9pbmRleC5jLTEyMTctXHRcdC8qIFJlYWQgbmV4dCBsZXZlbC4gKi9cbmZzL250ZnMzL2luZGV4LmM6MTIxODpcdFx0ZXJyID0gaW5keF9yZWFkKGluZHgsIG5pLCBkZV9nZXRfdmJuKGUpLCBcdTAwMjZub2RlKTtcbmZzL250ZnMzL2luZGV4LmMtMTIxOS1cdFx0aWYgKGVycikge1xuLS1cbmZzL250ZnMzL2luZGV4LmM9MTI0ND1pbnQgaW5keF9maW5kX3NvcnQoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcbi0tXG5mcy9udGZzMy9pbmRleC5jLTEzMDAtXHRcdC8qIFJlYWQgbmV4dCBsZXZlbC4gKi9cbmZzL250ZnMzL2luZGV4LmM6MTMwMTpcdFx0ZXJyID0gaW5keF9yZWFkKGluZHgsIG5pLCBkZV9nZXRfdmJuKGUpLCBcdTAwMjZuKTtcbmZzL250ZnMzL2luZGV4LmMtMTMwMi1cdFx0aWYgKGVycilcbi0tXG5mcy9udGZzMy9pbmRleC5jPTEzNTU9aW50IGluZHhfZmluZF9yYXcoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcbi0tXG5mcy9udGZzMy9pbmRleC5jLTE0NDUtXHRcdC8qIFJlYWQgYnVmZmVyIGludG8gbWVtb3J5LiAqL1xuZnMvbnRmczMvaW5kZXguYzoxNDQ2Olx0XHRlcnIgPSBpbmR4X3JlYWQoaW5keCwgbmksIG5leHRfdXNlZF92Ym4sIFx1MDAyNm4pO1xuZnMvbnRmczMvaW5kZXguYy0xNDQ3LVx0XHRpZiAoZXJyKVxuLS1cbmZzL250ZnMzL2luZGV4LmM9MjA5Nz1zdGF0aWMgc3RydWN0IGluZHhfbm9kZSAqaW5keF9maW5kX2J1ZmZlcihzdHJ1Y3QgbnRmc19pbmRleCAqaW5keCxcbi0tXG5mcy9udGZzMy9pbmRleC5jLTIxMzAtXHRcdGlmIChkZV9oYXNfdmNuX2V4KGUpKSB7XG5mcy9udGZzMy9pbmRleC5jOjIxMzE6XHRcdFx0ZXJyID0gaW5keF9yZWFkKGluZHgsIG5pLCBkZV9nZXRfdmJuKGUpLCBcdTAwMjZuKTtcbmZzL250ZnMzL2luZGV4LmMtMjEzMi1cdFx0XHRpZiAoZXJyKVxuLS1cbmZzL250ZnMzL2luZGV4LmM9MjIxNj1zdGF0aWMgaW50IGluZHhfZnJlZV9jaGlsZHJlbihzdHJ1Y3QgbnRmc19pbmRleCAqaW5keCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxuLS1cbmZzL250ZnMzL2luZGV4LmMtMjIyNC1cbmZzL250ZnMzL2luZGV4LmM6MjIyNTpcdGVyciA9IGluZHhfcmVhZChpbmR4LCBuaSwgdmJuLCBcdTAwMjZuKTtcbmZzL250ZnMzL2luZGV4LmMtMjIyNi1cdGlmIChlcnIpXG4tLVxuZnMvbnRmczMvaW5kZXguYz0yMjY2PXN0YXRpYyBpbnQgaW5keF9nZXRfZW50cnlfdG9fcmVwbGFjZShzdHJ1Y3QgbnRmc19pbmRleCAqaW5keCxcbi0tXG5mcy9udGZzMy9pbmRleC5jLTIyODQtXHRcdG4gPSBOVUxMO1xuZnMvbnRmczMvaW5kZXguYzoyMjg1Olx0XHRlcnIgPSBpbmR4X3JlYWQoaW5keCwgbmksIHZibiwgXHUwMDI2bik7XG5mcy9udGZzMy9pbmRleC5jLTIyODYtXHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTY6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ1MwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyB0aGUgYGluZHhfcmVhZGAgU291cmNlKioKCk9rYXksIGxldCYjMzk7cyB0cmFjZSB0aGlzIGBpbmR4X3JlYWRgIGZ1bmN0aW9uLiBCYXNlZCBvbiB0aGUgY29udGV4dCwgSSBzdXNwZWN0IGl0JiMzOTtzIG5vdCBhIHN0YW5kYXJkIGxpYnJhcnkgZnVuY3Rpb24uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gcGlucG9pbnQgaXRzIGRlZmluaXRpb24uIElzIHRoaXMgbGlrZWx5IGEgbWFjcm8sIG9yIHBlcmhhcHMgZGVmaW5lZCBpbiBhbiBpbmNsdWRlZCBoZWFkZXIgZmlsZT8gVGhlIG5hbWluZyBjb252ZW50aW9uIHN1Z2dlc3RzIGl0IG1pZ2h0IGJlIGludGVybmFsIHRvIHRoZSBwcm9qZWN0IG9yIGxpYnJhcnkgSSYjMzk7bSB3b3JraW5nIHdpdGgsIHNvIGRpZ2dpbmcgaW50byB0aGUgcHJvamVjdCYjMzk7cyBpbmNsdWRlIHBhdGhzIHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgaG93IHRoaXMgaXMgYmVpbmcgdXNlZCB0byBlZmZlY3RpdmVseSBkZWJ1ZyBpdHMgYmVoYXZpb3VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbmR4X3JlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzMy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmczMvZGlyLmM9NDA0PXN0YXRpYyBpbnQgbnRmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcbi0tXG5mcy9udGZzMy9kaXIuYy01NDItXG5mcy9udGZzMy9kaXIuYzo1NDM6XHRcdGVyciA9IGluZHhfcmVhZF9yYShcdTAwMjZuaS1cdTAwM2VkaXIsIG5pLCBiaXQgXHUwMDNjXHUwMDNjIG5pLVx1MDAzZWRpci5pZHgydmJuX2JpdHMsXG5mcy9udGZzMy9kaXIuYy01NDQtXHRcdFx0XHQgICBcdTAwMjZub2RlLCBcdTAwMjZmaWxlLVx1MDAzZWZfcmEpO1xuLS1cbmZzL250ZnMzL2Rpci5jPTYwMD1zdGF0aWMgaW50IG50ZnNfZGlyX2NvdW50KHN0cnVjdCBpbm9kZSAqZGlyLCBib29sICppc19lbXB0eSwgc2l6ZV90ICpkaXJzLFxuLS1cbmZzL250ZnMzL2Rpci5jLTY2Ny1cbmZzL250ZnMzL2Rpci5jOjY2ODpcdFx0ZXJyID0gaW5keF9yZWFkKFx1MDAyNm5pLVx1MDAzZWRpciwgbmksIGJpdCBcdTAwM2NcdTAwM2MgbmktXHUwMDNlZGlyLmlkeDJ2Ym5fYml0cyxcbmZzL250ZnMzL2Rpci5jLTY2OS1cdFx0XHRcdFx1MDAyNm5vZGUpO1xuLS1cbmZzL250ZnMzL2luZGV4LmM9MTA1Mz1zdGF0aWMgaW50IGluZHhfd3JpdGUoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcbi0tXG5mcy9udGZzMy9pbmRleC5jLTEwNjEtLypcbmZzL250ZnMzL2luZGV4LmM6MTA2MjogKiBpbmR4X3JlYWRfcmFcbmZzL250ZnMzL2luZGV4LmMtMTA2My0gKlxuLS1cbmZzL250ZnMzL2luZGV4LmMtMTA2Ny0gKi9cbmZzL250ZnMzL2luZGV4LmM6MTA2ODppbnQgaW5keF9yZWFkX3JhKHN0cnVjdCBudGZzX2luZGV4ICppbmR4LCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIENMU1QgdmJuLFxuZnMvbnRmczMvaW5kZXguYy0xMDY5LVx0XHQgc3RydWN0IGluZHhfbm9kZSAqKm5vZGUsIHN0cnVjdCBmaWxlX3JhX3N0YXRlICpyYSlcbi0tXG5mcy9udGZzMy9pbmRleC5jPTExNjk9aW50IGluZHhfZmluZChzdHJ1Y3QgbnRmc19pbmRleCAqaW5keCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxuLS1cbmZzL250ZnMzL2luZGV4LmMtMTIxNy1cdFx0LyogUmVhZCBuZXh0IGxldmVsLiAqL1xuZnMvbnRmczMvaW5kZXguYzoxMjE4Olx0XHRlcnIgPSBpbmR4X3JlYWQoaW5keCwgbmksIGRlX2dldF92Ym4oZSksIFx1MDAyNm5vZGUpO1xuZnMvbnRmczMvaW5kZXguYy0xMjE5LVx0XHRpZiAoZXJyKSB7XG4tLVxuZnMvbnRmczMvaW5kZXguYz0xMjQ0PWludCBpbmR4X2ZpbmRfc29ydChzdHJ1Y3QgbnRmc19pbmRleCAqaW5keCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxuLS1cbmZzL250ZnMzL2luZGV4LmMtMTMwMC1cdFx0LyogUmVhZCBuZXh0IGxldmVsLiAqL1xuZnMvbnRmczMvaW5kZXguYzoxMzAxOlx0XHRlcnIgPSBpbmR4X3JlYWQoaW5keCwgbmksIGRlX2dldF92Ym4oZSksIFx1MDAyNm4pO1xuZnMvbnRmczMvaW5kZXguYy0xMzAyLVx0XHRpZiAoZXJyKVxuLS1cbmZzL250ZnMzL2luZGV4LmM9MTM1NT1pbnQgaW5keF9maW5kX3JhdyhzdHJ1Y3QgbnRmc19pbmRleCAqaW5keCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxuLS1cbmZzL250ZnMzL2luZGV4LmMtMTQ0NS1cdFx0LyogUmVhZCBidWZmZXIgaW50byBtZW1vcnkuICovXG5mcy9udGZzMy9pbmRleC5jOjE0NDY6XHRcdGVyciA9IGluZHhfcmVhZChpbmR4LCBuaSwgbmV4dF91c2VkX3ZibiwgXHUwMDI2bik7XG5mcy9udGZzMy9pbmRleC5jLTE0NDctXHRcdGlmIChlcnIpXG4tLVxuZnMvbnRmczMvaW5kZXguYz0yMDk3PXN0YXRpYyBzdHJ1Y3QgaW5keF9ub2RlICppbmR4X2ZpbmRfYnVmZmVyKHN0cnVjdCBudGZzX2luZGV4ICppbmR4LFxuLS1cbmZzL250ZnMzL2luZGV4LmMtMjEzMC1cdFx0aWYgKGRlX2hhc192Y25fZXgoZSkpIHtcbmZzL250ZnMzL2luZGV4LmM6MjEzMTpcdFx0XHRlcnIgPSBpbmR4X3JlYWQoaW5keCwgbmksIGRlX2dldF92Ym4oZSksIFx1MDAyNm4pO1xuZnMvbnRmczMvaW5kZXguYy0yMTMyLVx0XHRcdGlmIChlcnIpXG4tLVxuZnMvbnRmczMvaW5kZXguYz0yMjE2PXN0YXRpYyBpbnQgaW5keF9mcmVlX2NoaWxkcmVuKHN0cnVjdCBudGZzX2luZGV4ICppbmR4LCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXG4tLVxuZnMvbnRmczMvaW5kZXguYy0yMjI0LVxuZnMvbnRmczMvaW5kZXguYzoyMjI1Olx0ZXJyID0gaW5keF9yZWFkKGluZHgsIG5pLCB2Ym4sIFx1MDAyNm4pO1xuZnMvbnRmczMvaW5kZXguYy0yMjI2LVx0aWYgKGVycilcbi0tXG5mcy9udGZzMy9pbmRleC5jPTIyNjY9c3RhdGljIGludCBpbmR4X2dldF9lbnRyeV90b19yZXBsYWNlKHN0cnVjdCBudGZzX2luZGV4ICppbmR4LFxuLS1cbmZzL250ZnMzL2luZGV4LmMtMjI4NC1cdFx0biA9IE5VTEw7XG5mcy9udGZzMy9pbmRleC5jOjIyODU6XHRcdGVyciA9IGluZHhfcmVhZChpbmR4LCBuaSwgdmJuLCBcdTAwMjZuKTtcbmZzL250ZnMzL2luZGV4LmMtMjI4Ni1cdFx0aWYgKGVycilcbi0tXG5mcy9udGZzMy9udGZzX2ZzLmg9NzQ2PXN0cnVjdCBJTkRFWF9ST09UICppbmR4X2dldF9yb290KHN0cnVjdCBudGZzX2luZGV4ICppbmR4LCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXG5mcy9udGZzMy9udGZzX2ZzLmgtNzQ3LVx0XHRcdFx0IHN0cnVjdCBBVFRSSUIgKiphdHRyLCBzdHJ1Y3QgbWZ0X2lub2RlICoqbWkpO1xuZnMvbnRmczMvbnRmc19mcy5oOjc0ODppbnQgaW5keF9yZWFkX3JhKHN0cnVjdCBudGZzX2luZGV4ICppZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSwgQ0xTVCB2Ym4sXG5mcy9udGZzMy9udGZzX2ZzLmgtNzQ5LVx0XHQgc3RydWN0IGluZHhfbm9kZSAqKm5vZGUsIHN0cnVjdCBmaWxlX3JhX3N0YXRlICpyYSk7XG5mcy9udGZzMy9udGZzX2ZzLmg6NzUwOnN0YXRpYyBpbmxpbmUgaW50IGluZHhfcmVhZChzdHJ1Y3QgbnRmc19pbmRleCAqaWR4LCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXG5mcy9udGZzMy9udGZzX2ZzLmgtNzUxLVx0XHRcdCAgICBDTFNUIHZibiwgc3RydWN0IGluZHhfbm9kZSAqKm5vZGUpXG5mcy9udGZzMy9udGZzX2ZzLmgtNzUyLXtcbmZzL250ZnMzL250ZnNfZnMuaDo3NTM6XHRyZXR1cm4gaW5keF9yZWFkX3JhKGlkeCwgbmksIHZibiwgbm9kZSwgTlVMTCk7XG5mcy9udGZzMy9udGZzX2ZzLmgtNzU0LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTY6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE1OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgSW5kZXggUmVhZCBGdW5jdGlvbiBDYWxsKioKClJpZ2h0LCBzbyBgaW5keF9yZWFkYCBpcyBjbGVhcmx5IGFuIGlubGluZSBmdW5jdGlvbi4gTWFrZXMgc2Vuc2Ug4oCTIHByb2JhYmx5IG9wdGltaXplZCBmb3IgZnJlcXVlbnQgY2FsbHMsIG1heWJlPyBJdCYjMzk7cyBpbW1lZGlhdGVseSBldmlkZW50IHRoYXQgYGluZHhfcmVhZGAgaXMganVzdCBhIHdyYXBwZXIgZm9yIGBpbmR4X3JlYWRfcmFgLiBPa2F5LCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIGBpbmR4X3JlYWRfcmFgIHRoZW4uIEdpdmVuIHRoZSBjb250ZXh0LCBteSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZmluZCBpdHMgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBOVEZTMyBmaWxlc3lzdGVtIGRyaXZlci4gVGhhdCBzaG91bGQgYmUgd2l0aGluIGBmcy9udGZzMy9pbmRleC5jYCDigJMgdGhhdCYjMzk7cyB3aGVyZSBJIHdvdWxkIGV4cGVjdCBhbGwgdGhlIGluZGV4LXJlbGF0ZWQgZnVuY3Rpb25hbGl0eSB0byByZXNpZGUuIFRpbWUgdG8gb3BlbiB0aGF0IGZpbGUgYW5kIGdldCB0byB0aGUgYm90dG9tIG9mIHRoZSByZWFkLWFoZWFkIG1lY2hhbmlzbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTY6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9udGZzMy9pbmRleC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA2OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA2ODpcdGludCBpbmR4X3JlYWRfcmEoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSwgQ0xTVCB2Ym4sXG4xMDY5Olx0XHRcdCBzdHJ1Y3QgaW5keF9ub2RlICoqbm9kZSwgc3RydWN0IGZpbGVfcmFfc3RhdGUgKnJhKVxuMTA3MDpcdHtcbjEwNzE6XHRcdGludCBlcnI7XG4xMDcyOlx0XHRzdHJ1Y3QgSU5ERVhfQlVGRkVSICppYjtcbjEwNzM6XHRcdHN0cnVjdCBudGZzX3NiX2luZm8gKnNiaSA9IG5pLVx1MDAzZW1pLnNiaTtcbjEwNzQ6XHRcdHN0cnVjdCBydW5zX3RyZWUgKnJ1biA9IFx1MDAyNmluZHgtXHUwMDNlYWxsb2NfcnVuO1xuMTA3NTpcdFx0c3RydWN0IHJ3X3NlbWFwaG9yZSAqbG9jayA9IFx1MDAyNmluZHgtXHUwMDNlcnVuX2xvY2s7XG4xMDc2Olx0XHR1NjQgdmJvID0gKHU2NCl2Ym4gXHUwMDNjXHUwMDNjIGluZHgtXHUwMDNldmJuMnZib19iaXRzO1xuMTA3NzpcdFx0dTMyIGJ5dGVzID0gMXUgXHUwMDNjXHUwMDNjIGluZHgtXHUwMDNlaW5kZXhfYml0cztcbjEwNzg6XHRcdHN0cnVjdCBpbmR4X25vZGUgKmluID0gKm5vZGU7XG4xMDc5Olx0XHRjb25zdCBzdHJ1Y3QgSU5ERVhfTkFNRVMgKm5hbWU7XG4xMDgwOlx0XG4xMDgxOlx0XHRpZiAoIWluKSB7XG4xMDgyOlx0XHRcdGluID0ga3phbGxvY19vYmooc3RydWN0IGluZHhfbm9kZSwgR0ZQX05PRlMpO1xuMTA4MzpcdFx0XHRpZiAoIWluKVxuMTA4NDpcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTA4NTpcdFx0fSBlbHNlIHtcbjEwODY6XHRcdFx0bmJfcHV0KFx1MDAyNmluLVx1MDAzZW5iKTtcbjEwODc6XHRcdH1cbjEwODg6XHRcbjEwODk6XHRcdGliID0gaW4tXHUwMDNlaW5kZXg7XG4xMDkwOlx0XHRpZiAoIWliKSB7XG4xMDkxOlx0XHRcdGliID0ga21hbGxvYyhieXRlcywgR0ZQX05PRlMpO1xuMTA5MjpcdFx0XHRpZiAoIWliKSB7XG4xMDkzOlx0XHRcdFx0ZXJyID0gLUVOT01FTTtcbjEwOTQ6XHRcdFx0XHRnb3RvIG91dDtcbjEwOTU6XHRcdFx0fVxuMTA5NjpcdFx0fVxuMTA5NzpcdFxuMTA5ODpcdFx0ZG93bl9yZWFkKGxvY2spO1xuMTA5OTpcdFx0ZXJyID0gbnRmc19yZWFkX2JoX3JhKHNiaSwgcnVuLCB2Ym8sIFx1MDAyNmliLVx1MDAzZXJoZHIsIGJ5dGVzLCBcdTAwMjZpbi1cdTAwM2VuYiwgcmEpO1xuMTEwMDpcdFx0dXBfcmVhZChsb2NrKTtcbjExMDE6XHRcdGlmICghZXJyKVxuMTEwMjpcdFx0XHRnb3RvIG9rO1xuMTEwMzpcdFxuMTEwNDpcdFx0aWYgKGVyciA9PSAtRV9OVEZTX0ZJWFVQKVxuMTEwNTpcdFx0XHRnb3RvIG9rO1xuMTEwNjpcdFxuMTEwNzpcdFx0aWYgKGVyciAhPSAtRU5PRU5UKVxuMTEwODpcdFx0XHRnb3RvIG91dDtcbjExMDk6XHRcbjExMTA6XHRcdG5hbWUgPSBcdTAwMjZzX2luZGV4X25hbWVzW2luZHgtXHUwMDNldHlwZV07XG4xMTExOlx0XHRkb3duX3dyaXRlKGxvY2spO1xuMTExMjpcdFx0ZXJyID0gYXR0cl9sb2FkX3J1bnNfcmFuZ2UobmksIEFUVFJfQUxMT0MsIG5hbWUtXHUwMDNlbmFtZSwgbmFtZS1cdTAwM2VuYW1lX2xlbixcbjExMTM6XHRcdFx0XHRcdCAgIHJ1biwgdmJvLCB2Ym8gJiM0MzsgYnl0ZXMpO1xuMTExNDpcdFx0dXBfd3JpdGUobG9jayk7XG4xMTE1Olx0XHRpZiAoZXJyKVxuMTExNjpcdFx0XHRnb3RvIG91dDtcbjExMTc6XHRcbjExMTg6XHRcdGRvd25fcmVhZChsb2NrKTtcbjExMTk6XHRcdGVyciA9IG50ZnNfcmVhZF9iaF9yYShzYmksIHJ1biwgdmJvLCBcdTAwMjZpYi1cdTAwM2VyaGRyLCBieXRlcywgXHUwMDI2aW4tXHUwMDNlbmIsIHJhKTtcbjExMjA6XHRcdHVwX3JlYWQobG9jayk7XG4xMTIxOlx0XHRpZiAoZXJyID09IC1FX05URlNfRklYVVApXG4xMTIyOlx0XHRcdGdvdG8gb2s7XG4xMTIzOlx0XG4xMTI0Olx0XHRpZiAoZXJyKVxuMTEyNTpcdFx0XHRnb3RvIG91dDtcbjExMjY6XHRcbjExMjc6XHRvazpcbjExMjg6XHRcdGlmICghaW5kZXhfYnVmX2NoZWNrKGliLCBieXRlcywgXHUwMDI2dmJuKSkge1xuMTEyOTpcdFx0XHRfbnRmc19iYWRfaW5vZGUoXHUwMDI2bmktXHUwMDNldmZzX2lub2RlKTtcbjExMzA6XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjExMzE6XHRcdFx0Z290byBvdXQ7XG4xMTMyOlx0XHR9XG4xMTMzOlx0XG4xMTM0Olx0XHRpZiAoZXJyID09IC1FX05URlNfRklYVVApIHtcbjExMzU6XHRcdFx0bnRmc193cml0ZV9iaChzYmksIFx1MDAyNmliLVx1MDAzZXJoZHIsIFx1MDAyNmluLVx1MDAzZW5iLCAwKTtcbjExMzY6XHRcdFx0ZXJyID0gMDtcbjExMzc6XHRcdH1cbjExMzg6XHRcbjExMzk6XHRcdC8qIGNoZWNrIGZvciBpbmRleCBoZWFkZXIgbGVuZ3RoICovXG4xMTQwOlx0XHRpZiAob2Zmc2V0b2Yoc3RydWN0IElOREVYX0JVRkZFUiwgaWhkcikgJiM0MzsgbGUzMl90b19jcHUoaWItXHUwMDNlaWhkci51c2VkKSBcdTAwM2VcbjExNDE6XHRcdCAgICBieXRlcykge1xuMTE0MjpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMTE0MzpcdFx0XHRnb3RvIG91dDtcbjExNDQ6XHRcdH1cbjExNDU6XHRcbjExNDY6XHRcdGluLVx1MDAzZWluZGV4ID0gaWI7XG4xMTQ3Olx0XHQqbm9kZSA9IGluO1xuMTE0ODpcdFxuMTE0OTpcdG91dDpcbjExNTA6XHRcdGlmIChlcnIgPT0gLUVfTlRGU19DT1JSVVBUKSB7XG4xMTUxOlx0XHRcdF9udGZzX2JhZF9pbm9kZShcdTAwMjZuaS1cdTAwM2V2ZnNfaW5vZGUpO1xuMTE1MjpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMTE1MzpcdFx0fVxuMTE1NDpcdFxuMTE1NTpcdFx0aWYgKGliICE9IGluLVx1MDAzZWluZGV4KVxuMTE1NjpcdFx0XHRrZnJlZShpYik7XG4xMTU3Olx0XG4xMTU4Olx0XHRpZiAoKm5vZGUgIT0gaW4pIHtcbjExNTk6XHRcdFx0bmJfcHV0KFx1MDAyNmluLVx1MDAzZW5iKTtcbjExNjA6XHRcdFx0a2ZyZWUoaW4pO1xuMTE2MTpcdFx0fVxuMTE2MjpcdFxuMTE2MzpcdFx0cmV0dXJuIGVycjtcbjExNjQ6XHR9XG4xMTY1Olx0XG4xMTY2Olx0LypcbjExNjc6XHQgKiBpbmR4X2ZpbmQgLSBTY2FuIE5URlMgZGlyZWN0b3J5IGZvciBnaXZlbiBlbnRyeS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTY6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODgyMwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERhdGEgSW5kZXhpbmcgUHJvY2VzcyoqCgpPa2F5LCBzbyBgaW5keF9yZWFkX3JhYCBpcyByZXNwb25zaWJsZSBmb3IgYWxsb2NhdGluZyBib3RoIGBpbmAgYW5kIGBpYmAsIHdpdGggYGliYCBnZXR0aW5nIGFzc2lnbmVkIHRvIGBpbi0mZ3Q7aW5kZXhgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgc28gZmFyLiBJZiBgaW5keF9yZWFkYCBpcyBzdWNjZXNzZnVsLCB0aGUgYCpub2RlYCBwb2ludGVyIEkmIzM5O20gd29ya2luZyB3aXRoIGlzIHNldCB0byBgaW5gLCBhbmQgY3J1Y2lhbGx5LCBgaW4tJmd0O2luZGV4YCBub3cgcG9pbnRzIHRvIHRoYXQgYWxsb2NhdGVkIGBpYmAuIEkgbmVlZCB0byByZW1lbWJlciB0aGlzIHN0cnVjdHVyZSwgYXMgaXQmIzM5O3MgdGhlIGZvdW5kYXRpb24gb2YgdGhlIG9wZXJhdGlvbi4KCk5vdywgbG9va2luZyBhdCBgaW5keF9maW5kX3NvcnRgLCBpZiBgZGVfaGFzX3Zjbl9leChlKWAgZXZhbHVhdGVzIHRvIHRydWUsIGl0IGNhbGxzIGBpbmR4X3JlYWRgIChzbyBzZXR0aW5nIHRoaW5ncyB1cCkgYW5kIHRoZW4gY2FsbHMgYGZuZF9wdXNoYC4gSSB1bmRlcnN0YW5kIHRoZSBpbnRlbnRpb24gaGVyZS4KCkJ1dCwgSSYjMzk7bSBjb25jZXJuZWQgYWJvdXQgdGhlIHNpemUgY2hlY2suIElmIGBsZTE2X3RvX2NwdShlLSZndDtzaXplKWAgaXMgbGVzcyB0aGFuIGEgY2VydGFpbiBkZWZpbmVkIHNpemUsIGl0IGZyZWVzIGBuYC4gSXQgZmVlbHMgbGlrZSB0aGVyZSBpcyBhbiBvdmVyc2lnaHQuIFRoaXMgZnJlZXMgYG5gLCB3aGljaCBpcyBmaW5lLCBidXQgaXQgKm1pc3NlcyogZnJlZWluZyBgbi0mZ3Q7aW5kZXhgLiBOb3csIGhhbmcgb24gYSBzZWNvbmQsIHdhc24mIzM5O3QgYG5gIHN1cHBvc2VkIHRvIGJlIHBvcHBlZCBmcm9tIHRoZSBgZm5kYCBzdGFjayB1c2luZyBgZm5kX3BvcChmbmQpYD8gSXQgbG9va3MgbGlrZSBJIGFtIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBpbnRvIGBmbmRfcG9wYCBhbmQgZmlndXJlIG91dCB3aGF0IGl0JiMzOTtzIGRvaW5nIHdpdGggdGhhdCBgbmAgdmFsdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE2OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZuZF9wb3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzMy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmczMvaW5kZXguYz03MDY9c3RhdGljIGludCBmbmRfcHVzaChzdHJ1Y3QgbnRmc19mbmQgKmZuZCwgc3RydWN0IGluZHhfbm9kZSAqbixcbi0tXG5mcy9udGZzMy9pbmRleC5jLTcxOC1cbmZzL250ZnMzL2luZGV4LmM6NzE5OnN0YXRpYyBzdHJ1Y3QgaW5keF9ub2RlICpmbmRfcG9wKHN0cnVjdCBudGZzX2ZuZCAqZm5kKVxuZnMvbnRmczMvaW5kZXguYy03MjAte1xuLS1cbmZzL250ZnMzL2luZGV4LmM9MTI0ND1pbnQgaW5keF9maW5kX3NvcnQoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcbi0tXG5mcy9udGZzMy9pbmRleC5jLTEyOTMtXHRcdFx0aWYgKG4pIHtcbmZzL250ZnMzL2luZGV4LmM6MTI5NDpcdFx0XHRcdGZuZF9wb3AoZm5kKTtcbmZzL250ZnMzL2luZGV4LmMtMTI5NS1cdFx0XHRcdGtmcmVlKG4pO1xuLS1cbmZzL250ZnMzL2luZGV4LmMtMTMyNi1cdFx0aWYgKG4pIHtcbmZzL250ZnMzL2luZGV4LmM6MTMyNzpcdFx0XHRmbmRfcG9wKGZuZCk7XG5mcy9udGZzMy9pbmRleC5jLTEzMjgtXHRcdFx0a2ZyZWUobi1cdTAwM2VpbmRleCk7XG4tLVxuZnMvbnRmczMvaW5kZXguYz0xMzU1PWludCBpbmR4X2ZpbmRfcmF3KHN0cnVjdCBudGZzX2luZGV4ICppbmR4LCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXG4tLVxuZnMvbnRmczMvaW5kZXguYy0xNDI4LVx0XHRpZiAobikge1xuZnMvbnRmczMvaW5kZXguYzoxNDI5Olx0XHRcdGZuZF9wb3AoZm5kKTtcbmZzL250ZnMzL2luZGV4LmMtMTQzMC1cdFx0XHRwdXRfaW5keF9ub2RlKG4pO1xuLS1cbmZzL250ZnMzL2luZGV4LmM9MjM2OT1pbnQgaW5keF9kZWxldGVfZW50cnkoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcbi0tXG5mcy9udGZzMy9pbmRleC5jLTI0NTYtXHRcdGlmIChpYiBcdTAwMjZcdTAwMjYgaWJfaXNfbGVhZihpYikgXHUwMDI2XHUwMDI2IGliX2lzX2VtcHR5KGliKSkge1xuZnMvbnRmczMvaW5kZXguYzoyNDU3Olx0XHRcdGZuZF9wb3AoZm5kKTtcbmZzL250ZnMzL2luZGV4LmMtMjQ1OC1cdFx0XHRmbmRfcHVzaChmbmQyLCBuLCBlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTY6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg4OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGVjb25zdHJ1Y3RpbmcgYGZuZF9wb3BgJiMzOTtzIFJldHVybiBWYWx1ZSoqCgpBbHJpZ2h0LCBoYW5nIG9uIGEgc2Vjb25kLiBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgYGZuZF9wb3BgIG5vdywgYW5kIEkgc2VlIGl0JiMzOTtzIHJldHVybmluZyBhIGBzdHJ1Y3QgaW5keF9ub2RlICpgLiBUaGF0IG1lYW5zIGl0JiMzOTtzIGhhbmRpbmcgYmFjayBhIHBvaW50ZXIgdG8gYSBzcGVjaWZpYyBub2RlIHdpdGhpbiB0aGF0IGBpbmR4X25vZGVgIHN0cnVjdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdC4gSSBuZWVkIHRvIGltbWVkaWF0ZWx5IHB1bGwgdXAgdGhlIGRlZmluaXRpb24gb2YgYGZuZF9wb3BgIHRvIHZlcmlmeSB3aGF0JiMzOTtzIGdvaW5nIG9uOyBJIG5lZWQgdG8ga25vdyBob3cgdGhhdCBub2RlIGlzIGNob3NlbiBhbmQgd2hhdCBjb250ZXh0IHRvIHVuZGVyc3RhbmQgdGhhdCBzdHJ1Y3R1cmUgd2l0aGluLiBHb3R0YSBrZWVwIHRoZXNlIHBvaW50ZXJzIHN0cmFpZ2h0OyBJJiMzOTttIGFzc3VtaW5nIHRoYXQgaXQgaXMgbGlua2VkIHRvIG90aGVyIHZhbHVlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTY6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9udGZzMy9pbmRleC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzE5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MTk6XHRzdGF0aWMgc3RydWN0IGluZHhfbm9kZSAqZm5kX3BvcChzdHJ1Y3QgbnRmc19mbmQgKmZuZClcbiA3MjA6XHR7XG4gNzIxOlx0XHRzdHJ1Y3QgaW5keF9ub2RlICpuO1xuIDcyMjpcdFx0aW50IGkgPSBmbmQtXHUwMDNlbGV2ZWw7XG4gNzIzOlx0XG4gNzI0Olx0XHRpIC09IDE7XG4gNzI1Olx0XHRuID0gZm5kLVx1MDAzZW5vZGVzW2ldO1xuIDcyNjpcdFx0Zm5kLVx1MDAzZW5vZGVzW2ldID0gTlVMTDtcbiA3Mjc6XHRcdGZuZC1cdTAwM2VsZXZlbCA9IGk7XG4gNzI4Olx0XG4gNzI5Olx0XHRyZXR1cm4gbjtcbiA3MzA6XHR9XG4gNzMxOlx0XG4gNzMyOlx0c3RhdGljIGJvb2wgZm5kX2lzX2VtcHR5KHN0cnVjdCBudGZzX2ZuZCAqZm5kKVxuIDczMzpcdHtcbiA3MzQ6XHRcdGlmICghZm5kLVx1MDAzZWxldmVsKVxuIDczNTpcdFx0XHRyZXR1cm4gIWZuZC1cdTAwM2Vyb290X2RlO1xuIDczNjpcdFxuIDczNzpcdFx0cmV0dXJuICFmbmQtXHUwMDNlZGVbZm5kLVx1MDAzZWxldmVsIC0gMV07XG4gNzM4Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDM5NgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBSZWNlbnQgUGF0Y2ggaW4gYGluZHhfZmluZF9zb3J0YCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGluZHhfZmluZF9zb3J0YCBhbmQgc29tZXRoaW5nIGltbWVkaWF0ZWx5IGp1bXBzIG91dC4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggYWRkZWQgYGtmcmVlKG4tJmd0O2luZGV4KTtgICpiZWZvcmUqIHRoZSBga2ZyZWUobik7YCBjYWxsIHdpdGhpbiB0aGUgYmxvY2sgdGhhdCBwb3BzIGEgbGV2ZWwuIFRoYXQgbWFrZXMgc2Vuc2UsIGZyZWVpbmcgdGhlIGFsbG9jYXRlZCBpbmRleCBkYXRhIGJlZm9yZSBmcmVlaW5nIHRoZSBub2RlIGl0c2VsZiwgc3RhbmRhcmQgcHJhY3RpY2UuIEJ1dCB3YWl0LCBJJiMzOTttIHByZXR0eSBzdXJlIHRoZXJlJiMzOTtzIGFub3RoZXIgaW5zdGFuY2Ugb2YgYGtmcmVlKG4pYCBpbiB0aGlzIHNhbWUgZnVuY3Rpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBzYW1lIG1vZGlmaWNhdGlvbiB3YXMgbWFkZSB0aGVyZS4gTGV0IG1lIGdvIGJhY2sgYW5kIGRvdWJsZS1jaGVjayB0aGF0IGJsb2NrIG9mIGNvZGUuCgpPa2F5LCBoZXJlIGl0IGlzOgoKYGBgYwoJCXdoaWxlIChkZV9oYXNfdmNuX2V4KGUpKSB7CgkJCWlmIChsZTE2X3RvX2NwdShlLSZndDtzaXplKSAmbHQ7CgkJCSAgICBzaXplb2Yoc3RydWN0IE5URlNfREUpICYjNDM7IHNpemVvZih1NjQpKSB7CgkJCQlpZiAobikgewoJCQkJCWZuZF9wb3AoZm5kKTsKCQkJCQlrZnJlZShuKTsKCQkJCX0KCQkJCXJldHVybiAtRUlOVkFMOwoJCQl9CmBgYAoKVGhlIHRoaW5nIGlzLCBJIGRvbiYjMzk7dCBzZWUgYGtmcmVlKG4tJmd0O2luZGV4KWAgaW4gdGhlIGRpZmYgZm9yIHRoYXQgbG9jYXRpb24uIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBtZW1vcnkgbGVhayB3YXMgbm90IGludHJvZHVjZWQuIExldCBtZSBjaGVjayB0aGUgZGlmZiBhZ2FpbiwgY2FyZWZ1bGx5LCBsaW5lIGJ5IGxpbmUuCgoqICAgU2lnaCouLi4geWVwLCB0aGUgZGlmZiAqb25seSogc2hvd3MgdGhlIGNoYW5nZSBpbiB0aGUgZmlyc3QgbG9jYXRpb24uIFRoYXQgbWVhbnMgdGhlIGBrZnJlZShuLSZndDtpbmRleClgIGlzICpub3QqIHByZXNlbnQgaW4gdGhlIHNlY29uZCBga2ZyZWUobilgIGluc3RhbmNlLiBUaGlzIGlzIGEgcG90ZW50aWFsIG1lbW9yeSBsZWFrLiBCYWNrIHRvIHRoZSBjb2RlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL250ZnMzL2luZGV4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyOTA6XHRcdHdoaWxlIChkZV9oYXNfdmNuX2V4KGUpKSB7XG4xMjkxOlx0XHRcdGlmIChsZTE2X3RvX2NwdShlLVx1MDAzZXNpemUpIFx1MDAzY1xuMTI5MjpcdFx0XHQgICAgc2l6ZW9mKHN0cnVjdCBOVEZTX0RFKSAmIzQzOyBzaXplb2YodTY0KSkge1xuMTI5MzpcdFx0XHRcdGlmIChuKSB7XG4xMjk0Olx0XHRcdFx0XHRmbmRfcG9wKGZuZCk7XG4xMjk1Olx0XHRcdFx0XHRrZnJlZShuKTtcbjEyOTY6XHRcdFx0XHR9XG4xMjk3Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMjk4Olx0XHRcdH1cbjEyOTk6XHRcbjEzMDA6XHRcdFx0LyogUmVhZCBuZXh0IGxldmVsLiAqL1xuMTMwMTpcdFx0XHRlcnIgPSBpbmR4X3JlYWQoaW5keCwgbmksIGRlX2dldF92Ym4oZSksIFx1MDAyNm4pO1xuMTMwMjpcdFx0XHRpZiAoZXJyKVxuMTMwMzpcdFx0XHRcdHJldHVybiBlcnI7XG4xMzA0Olx0XG4xMzA1Olx0XHRcdC8qIFRyeSBuZXh0IGxldmVsLiAqL1xuMTMwNjpcdFx0XHRlID0gaGRyX2ZpcnN0X2RlKFx1MDAyNm4tXHUwMDNlaW5kZXgtXHUwMDNlaWhkcik7XG4xMzA3Olx0XHRcdGlmICghZSkge1xuMTMwODpcdFx0XHRcdGtmcmVlKG4pO1xuMTMwOTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTMxMDpcdFx0XHR9XG4xMzExOlx0XG4xMzEyOlx0XHRcdGZuZF9wdXNoKGZuZCwgbiwgZSk7XG4xMzEzOlx0XHR9XG4xMzE0Olx0XG4xMzE1Olx0XHRpZiAobGUxNl90b19jcHUoZS1cdTAwM2VzaXplKSBcdTAwM2Ugc2l6ZW9mKHN0cnVjdCBOVEZTX0RFKSkge1xuMTMxNjpcdFx0XHQqZW50cnkgPSBlO1xuMTMxNzpcdFx0XHRyZXR1cm4gMDtcbjEzMTg6XHRcdH1cbjEzMTk6XHRcbjEzMjA6XHRwb3BfbGV2ZWw6XG4xMzIxOlx0XHRmb3IgKDs7KSB7XG4xMzIyOlx0XHRcdGlmICghZGVfaXNfbGFzdChlKSlcbjEzMjM6XHRcdFx0XHRnb3RvIG5leHRfaXRlcjtcbjEzMjQ6XHRcbjEzMjU6XHRcdFx0LyogUG9wIG9uZSBsZXZlbC4gKi9cbjEzMjY6XHRcdFx0aWYgKG4pIHtcbjEzMjc6XHRcdFx0XHRmbmRfcG9wKGZuZCk7XG4xMzI4Olx0XHRcdFx0a2ZyZWUobi1cdTAwM2VpbmRleCk7XG4xMzI5Olx0XHRcdFx0a2ZyZWUobik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE2OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjc1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlYnVnZ2luZyBNZW1vcnkgTWFuYWdlbWVudCBpbiBgaW5keF9yZWFkYCoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLi4uIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBga2ZyZWUobilgIGNhbGxzLCBhbmQgaXQgbG9va3MgbGlrZSBga2ZyZWUobi0mZ3Q7aW5kZXgpYCBpcyBtaXNzaW5nIGZyb20gc2V2ZXJhbCBvZiB0aGVtLiBUaGF0JiMzOTtzIGEgcG90ZW50aWFsIG1lbW9yeSBsZWFrISBCdXQgd2FpdCwgbGV0IG1lIGJhY2t0cmFjay4gVGhlIGBpbmR4X3JlYWRgIGZ1bmN0aW9uIGFsbG9jYXRlcyAqYm90aCogYG5gIGFuZCBgbi0mZ3Q7aW5kZXhgLiBSaWdodCwgb2theS4gQnV0IGBuLSZndDtpbmRleGAuLi4gaXQgY291bGQgYmUgYSBidWZmZXIgaGVhZCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHkuIExldCYjMzk7cyBzZWUuLi4gbG9va2luZyBhdCBgaW5keF9yZWFkX3JhYCwgeWVzLCB0aGVyZSBpdCBpczogYGliID0gaW4tJmd0O2luZGV4OyBpZiAoIWliKSB7IGliID0ga21hbGxvYyhieXRlcywgR0ZQX05PRlMpO2AgT2theSwgc28gYG4tJmd0O2luZGV4YCBpcywgaW5kZWVkLCBhIGBrbWFsbG9jYCYjMzk7ZCBidWZmZXIuIEl0JiMzOTtzIG5vdCBhIGBidWZmZXJfaGVhZGAsIGl0JiMzOTtzIGp1c3QgYSByZWd1bGFyIGNodW5rIG9mIG1lbW9yeS4KCk5vdywgSSBzZWVtIHRvIHJlbWVtYmVyIGBwdXRfaW5keF9ub2RlYCBiZWluZyB0aGUgcGxhY2Ugd2hlcmUgYm90aCBgbmAgYW5kIGBuLSZndDtpbmRleGAgYXJlIGZyZWVkLiBMZXQgbWUganVzdCBjb25maXJtIHRoYXQgYnkgcXVpY2tseSBleGFtaW5pbmcgdGhlIGBwdXRfaW5keF9ub2RlYCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTY6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHV0X2luZHhfbm9kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzMy9kaXIuYz00MDQ9c3RhdGljIGludCBudGZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4KVxuLS1cbmZzL250ZnMzL2Rpci5jLTU2Mi1cdGtmcmVlKG5hbWUpO1xuZnMvbnRmczMvZGlyLmM6NTYzOlx0cHV0X2luZHhfbm9kZShub2RlKTtcbmZzL250ZnMzL2Rpci5jLTU2NC1cbi0tXG5mcy9udGZzMy9kaXIuYz02MDA9c3RhdGljIGludCBudGZzX2Rpcl9jb3VudChzdHJ1Y3QgaW5vZGUgKmRpciwgYm9vbCAqaXNfZW1wdHksIHNpemVfdCAqZGlycyxcbi0tXG5mcy9udGZzMy9kaXIuYy02Nzctb3V0OlxuZnMvbnRmczMvZGlyLmM6Njc4Olx0cHV0X2luZHhfbm9kZShub2RlKTtcbmZzL250ZnMzL2Rpci5jLTY3OS1cdGlmIChkaXJzKVxuLS1cbmZzL250ZnMzL2luZGV4LmM9Njg5PXZvaWQgZm5kX2NsZWFyKHN0cnVjdCBudGZzX2ZuZCAqZm5kKVxuLS1cbmZzL250ZnMzL2luZGV4LmMtNjk4LVxuZnMvbnRmczMvaW5kZXguYzo2OTk6XHRcdHB1dF9pbmR4X25vZGUobik7XG5mcy9udGZzMy9pbmRleC5jLTcwMC1cdFx0Zm5kLVx1MDAzZW5vZGVzW2ldID0gTlVMTDtcbi0tXG5mcy9udGZzMy9pbmRleC5jPTExNjk9aW50IGluZHhfZmluZChzdHJ1Y3QgbnRmc19pbmRleCAqaW5keCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxuLS1cbmZzL250ZnMzL2luZGV4LmMtMTIyNy1cdFx0aWYgKCFlKSB7XG5mcy9udGZzMy9pbmRleC5jOjEyMjg6XHRcdFx0cHV0X2luZHhfbm9kZShub2RlKTtcbmZzL250ZnMzL2luZGV4LmMtMTIyOS1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5mcy9udGZzMy9pbmRleC5jLTEyMzQtXHRcdGlmIChlcnIpIHtcbmZzL250ZnMzL2luZGV4LmM6MTIzNTpcdFx0XHRwdXRfaW5keF9ub2RlKG5vZGUpO1xuZnMvbnRmczMvaW5kZXguYy0xMjM2LVx0XHRcdHJldHVybiBlcnI7XG4tLVxuZnMvbnRmczMvaW5kZXguYz0xMzU1PWludCBpbmR4X2ZpbmRfcmF3KHN0cnVjdCBudGZzX2luZGV4ICppbmR4LCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXG4tLVxuZnMvbnRmczMvaW5kZXguYy0xNDI5LVx0XHRcdGZuZF9wb3AoZm5kKTtcbmZzL250ZnMzL2luZGV4LmM6MTQzMDpcdFx0XHRwdXRfaW5keF9ub2RlKG4pO1xuZnMvbnRmczMvaW5kZXguYy0xNDMxLVx0XHRcdG4gPSBOVUxMO1xuLS1cbmZzL250ZnMzL2luZGV4LmM9MTYyOD1zdGF0aWMgaW50IGluZHhfaW5zZXJ0X2ludG9fcm9vdChzdHJ1Y3QgbnRmc19pbmRleCAqaW5keCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxuLS1cbmZzL250ZnMzL2luZGV4LmMtMTgxOS1cbmZzL250ZnMzL2luZGV4LmM6MTgyMDpcdFx0cHV0X2luZHhfbm9kZShuKTtcbmZzL250ZnMzL2luZGV4LmMtMTgyMS1cdFx0Zm5kX2NsZWFyKGZuZCk7XG4tLVxuZnMvbnRmczMvaW5kZXguYy0xODQyLW91dF9wdXRfbjpcbmZzL250ZnMzL2luZGV4LmM6MTg0MzpcdHB1dF9pbmR4X25vZGUobik7XG5mcy9udGZzMy9pbmRleC5jLTE4NDQtb3V0X2ZyZWVfcmU6XG4tLVxuZnMvbnRmczMvaW5kZXguYz0xODU3PXN0YXRpYyBpbnQgaW5keF9pbnNlcnRfaW50b19idWZmZXIoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsXG4tLVxuZnMvbnRmczMvaW5kZXguYy0xOTgwLVxuZnMvbnRmczMvaW5kZXguYzoxOTgxOlx0cHV0X2luZHhfbm9kZShuMik7XG5mcy9udGZzMy9pbmRleC5jLTE5ODItXG4tLVxuZnMvbnRmczMvaW5kZXguYz0yMjE2PXN0YXRpYyBpbnQgaW5keF9mcmVlX2NoaWxkcmVuKHN0cnVjdCBudGZzX2luZGV4ICppbmR4LCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXG4tLVxuZnMvbnRmczMvaW5kZXguYy0yMjM4LVxuZnMvbnRmczMvaW5kZXguYzoyMjM5Olx0cHV0X2luZHhfbm9kZShuKTtcbmZzL250ZnMzL2luZGV4LmMtMjI0MC1cbi0tXG5mcy9udGZzMy9udGZzX2ZzLmg9MTE5MT1zdGF0aWMgaW5saW5lIHZvaWQgbmJfcHV0KHN0cnVjdCBudGZzX2J1ZmZlcnMgKm5iKVxuLS1cbmZzL250ZnMzL250ZnNfZnMuaC0xMjAyLVxuZnMvbnRmczMvbnRmc19mcy5oOjEyMDM6c3RhdGljIGlubGluZSB2b2lkIHB1dF9pbmR4X25vZGUoc3RydWN0IGluZHhfbm9kZSAqaW4pXG5mcy9udGZzMy9udGZzX2ZzLmgtMTIwNC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE2OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjEwCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEZWVwIERpdmUgaW50byBgcHV0X2luZHhfbm9kZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIGFuZCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHB1dF9pbmR4X25vZGVgLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgYW5kIHBvdGVudGlhbCBlZGdlIGNhc2VzLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byBldmFsdWF0ZToKCiogICAqKkNvcmUgZnVuY3Rpb25hbGl0eToqKiBXaGF0JiMzOTtzIGl0ICphY3R1YWxseSogZG9pbmc/IElzIGl0IHdyaXRpbmcgZGlyZWN0bHksIG9yIGlzIGl0IGdvaW5nIHRocm91Z2ggc29tZSBraW5kIG9mIGluZGlyZWN0aW9uIG9yIGJ1ZmZlcmluZz8gSSBuZWVkIHRvIGNsYXJpZnkgdGhhdCBiZWZvcmUgSSBzdGFydCBsb29raW5nIGF0IGVkZ2UgY2FzZXMuCiogICAqKkRhdGEgc3RydWN0dXJlczoqKiBXaGF0JiMzOTtzIHRoZSB0YXJnZXQgZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoZSBpbnNlcnRpb24/IElzIGl0IGEgQi10cmVlLCBhIGhhc2ggdGFibGUsIG9yIHNvbWV0aGluZyBtb3JlIGJlc3Bva2U/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb21wbGV4aXR5IGFuZCBhY2Nlc3MgcGF0dGVybnMuIEkgYXNzdW1lIHRoYXQgaXQgcmVsYXRlcyB0byBhIHN0b3JhZ2Ugc29sdXRpb24uCiogICAqKkVycm9yIGhhbmRsaW5nOioqIEhvdyByb2J1c3QgaXMgaXQ/IFdoYXQgZXhjZXB0aW9ucyBvciBlcnJvciBjb2RlcyBtaWdodCBpdCB0aHJvdz8gQXJlIHRoZXJlIGNoZWNrcyBmb3IgZnVsbCBjb25kaXRpb25zIG9yIGNvbmZsaWN0aW5nIHdyaXRlcz8gSSBuZWVkIHRvIGFuYWx5emUgaG93IHdlbGwgaXQgZGVhbHMgd2l0aCBjb25jdXJyZW50IHNpdHVhdGlvbnMuCiogICAqKlBlcmZvcm1hbmNlIGltcGxpY2F0aW9uczoqKiBXaGVyZSBhcmUgdGhlIHBvdGVudGlhbCBib3R0bGVuZWNrcz8gTWVtb3J5IGFsbG9jYXRpb24/IERpc2sgSS9PPyBMb2NrIGNvbnRlbnRpb24/IFVuZGVyc3RhbmRpbmcgdGhpcyBpcyB2aXRhbCBmb3Igb3B0aW1pemluZyB0aGUgY29kZSBvciBldmVuIHRoZSBhcmNoaXRlY3R1cmUgaXQgc3VwcG9ydHMuCiogICAqKkNvbmN1cnJlbmN5OioqIEhvdyBkb2VzIHRoaXMgZnVuY3Rpb24gaW50ZXJhY3Qgd2l0aCBvdGhlciB0aHJlYWRzIG9yIHByb2Nlc3Nlcz8gQXJlIHRoZXJlIGFueSBsb2NraW5nIG1lY2hhbmlzbXM/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgaWYgSSB1c2UgYHB1dF9pbmR4X25vZGVgIGNvbmN1cnJlbnRseSBmcm9tIGRpZmZlcmVudCBwbGFjZXM/CiogICAqKkFzc3VtcHRpb25zKio6IFdoYXQgZG9lcyBpdCBhc3N1bWUgYWJvdXQgdGhlIGVudmlyb25tZW50IGl0IGlzIGJlaW5nIGNhbGxlZCBpbj8gQXJlIHRoZXJlIHNpemUgY29uc3RyYWludHMgb24gdGhlIGRhdGEgYmVpbmcgd3JpdHRlbj8KKiAgICoqUG90ZW50aWFsIGlzc3VlcyoqOiBXaGF0IGFyZSB0aGUgY2FzZXMgSSBuZWVkIHRvIGNoZWNrIHRvIGJlIHN1cmUgaXQgZG9lcyB3aGF0IGl0IGlzIHN1cHBvc2VkIHRvPwpJIGFtIGdvaW5nIHRvIGV2YWx1YXRlIHRoZSBjb2RlIHBhdGguIEkgd2FudCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2Ygd2hhdCBpcyBnb2luZyBvbiwgYW5kIHRoZW4sIEkgY2FuIHN0YXJ0IGxvb2tpbmcgZm9yIGFueSBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE2OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvbnRmczMvbnRmc19mcy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIwMywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjAzOlx0c3RhdGljIGlubGluZSB2b2lkIHB1dF9pbmR4X25vZGUoc3RydWN0IGluZHhfbm9kZSAqaW4pXG4xMjA0Olx0e1xuMTIwNTpcdFx0aWYgKCFpbilcbjEyMDY6XHRcdFx0cmV0dXJuO1xuMTIwNzpcdFxuMTIwODpcdFx0a2ZyZWUoaW4tXHUwMDNlaW5kZXgpO1xuMTIwOTpcdFx0bmJfcHV0KFx1MDAyNmluLVx1MDAzZW5iKTtcbjEyMTA6XHRcdGtmcmVlKGluKTtcbjEyMTE6XHR9XG4xMjEyOlx0XG4xMjEzOlx0c3RhdGljIGlubGluZSB2b2lkIG1pX2NsZWFyKHN0cnVjdCBtZnRfaW5vZGUgKm1pKVxuMTIxNDpcdHtcbjEyMTU6XHRcdG5iX3B1dChcdTAwMjZtaS1cdTAwM2VuYik7XG4xMjE2Olx0XHRrZnJlZShtaS1cdTAwM2VtcmVjKTtcbjEyMTc6XHRcdG1pLVx1MDAzZW1yZWMgPSBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg2NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgaW4gSW5kZXggU3RydWN0dXJlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgaW5kZXggbm9kZXMuIEkgc2VlIHRoYXQgYHB1dF9pbmR4X25vZGVgIGlzIGRvaW5nIGEgY2xlYW4tdXA6IGBrZnJlZShpbi0mZ3Q7aW5kZXgpOyBuYl9wdXQoJmFtcDtpbi0mZ3Q7bmIpOyBrZnJlZShpbik7YC4gVGhhdCYjMzk7cyBzdGFuZGFyZCAtIGZyZWVpbmcgdGhlIGluZGV4IGRhdGEsIHJlbGVhc2luZyBhIGNvdW50ZXIsIGFuZCB0aGVuIGZyZWVpbmcgdGhlIG5vZGUgaXRzZWxmLiBNYWtlcyBwZXJmZWN0IHNlbnNlLgoKQnV0IHRoZW4gSSYjMzk7bSBpbiBgaW5keF9maW5kX3NvcnRgLCBhbmQgSSYjMzk7bSBzZWVpbmcgdGhpczoKCmBgYGMKCQkJLyogUG9wIG9uZSBsZXZlbC4gKi8KCQkJaWYgKG4pIHsKCQkJCWZuZF9wb3AoZm5kKTsKCQkJCWtmcmVlKG4tJmd0O2luZGV4KTsKCQkJCWtmcmVlKG4pOwoJCQl9CmBgYAoKV2FpdCBhIHNlY29uZC4gV2h5IGFyZW4mIzM5O3QgdGhleSBqdXN0IGNhbGxpbmcgYHB1dF9pbmR4X25vZGUobilgIGhlcmU/IEl0IHNlZW1zIGxpa2UgdGhpcyBpcyBkdXBsaWNhdGluZyB0aGUgY2xlYW4tdXAgbG9naWMuIEkmIzM5O20gdXNlZCB0byBzZWVpbmcgY29kZSByZXVzZSB0byBhdm9pZCByZWR1bmRhbmN5IGFuZCBwb3RlbnRpYWwgYnVncy4gSXQmIzM5O3MgY2xlYW5lciwgYW5kIGVhc2llciB0byBtYWludGFpbi4gVGhpcyBkdXBsaWNhdGlvbiBpcyBhIGJpdCBvZiBhIHJlZCBmbGFnLgoKSSBuZWVkIHRvIHNlZSBpZiB0aGlzIHBhdHRlcm4gaXMgcmVwZWF0ZWQgZWxzZXdoZXJlIGluIGBpbmR4X2ZpbmRfc29ydGAuIExldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGluc3RhbmNlcyBvZiBga2ZyZWUobilgIGluIHRoaXMgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGZ1bmN0aW9uIGlzbiYjMzk7dCB1c2luZyB0aGUgYWxyZWFkeSBlc3RhYmxpc2hlZCBgcHV0X2luZHhfbm9kZWAgYW5kIHBvdGVudGlhbGx5IHJlZmFjdG9yIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE2OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvbnRmczMvaW5kZXguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTI5MDpcdFx0d2hpbGUgKGRlX2hhc192Y25fZXgoZSkpIHtcbjEyOTE6XHRcdFx0aWYgKGxlMTZfdG9fY3B1KGUtXHUwMDNlc2l6ZSkgXHUwMDNjXG4xMjkyOlx0XHRcdCAgICBzaXplb2Yoc3RydWN0IE5URlNfREUpICYjNDM7IHNpemVvZih1NjQpKSB7XG4xMjkzOlx0XHRcdFx0aWYgKG4pIHtcbjEyOTQ6XHRcdFx0XHRcdGZuZF9wb3AoZm5kKTtcbjEyOTU6XHRcdFx0XHRcdGtmcmVlKG4pO1xuMTI5NjpcdFx0XHRcdH1cbjEyOTc6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjEyOTg6XHRcdFx0fVxuMTI5OTpcdFxuMTMwMDpcdFx0XHQvKiBSZWFkIG5leHQgbGV2ZWwuICovXG4xMzAxOlx0XHRcdGVyciA9IGluZHhfcmVhZChpbmR4LCBuaSwgZGVfZ2V0X3ZibihlKSwgXHUwMDI2bik7XG4xMzAyOlx0XHRcdGlmIChlcnIpXG4xMzAzOlx0XHRcdFx0cmV0dXJuIGVycjtcbjEzMDQ6XHRcbjEzMDU6XHRcdFx0LyogVHJ5IG5leHQgbGV2ZWwuICovXG4xMzA2Olx0XHRcdGUgPSBoZHJfZmlyc3RfZGUoXHUwMDI2bi1cdTAwM2VpbmRleC1cdTAwM2VpaGRyKTtcbjEzMDc6XHRcdFx0aWYgKCFlKSB7XG4xMzA4Olx0XHRcdFx0a2ZyZWUobik7XG4xMzA5Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMzEwOlx0XHRcdH1cbjEzMTE6XHRcbjEzMTI6XHRcdFx0Zm5kX3B1c2goZm5kLCBuLCBlKTtcbjEzMTM6XHRcdH1cbjEzMTQ6XHRcbjEzMTU6XHRcdGlmIChsZTE2X3RvX2NwdShlLVx1MDAzZXNpemUpIFx1MDAzZSBzaXplb2Yoc3RydWN0IE5URlNfREUpKSB7XG4xMzE2Olx0XHRcdCplbnRyeSA9IGU7XG4xMzE3Olx0XHRcdHJldHVybiAwO1xuMTMxODpcdFx0fVxuMTMxOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDc1MQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDUwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgTWVtb3J5IExlYWsgaW4gYGluZHhfZmluZF9zb3J0YCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgaW5keF9maW5kX3NvcnRgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgdGhpcyBzZWN0aW9uIG9mIGNvZGU6CgpgYGBjCgkJd2hpbGUgKGRlX2hhc192Y25fZXgoZSkpIHsKCQkJaWYgKGxlMTZfdG9fY3B1KGUtJmd0O3NpemUpICZsdDsKCQkJICAgIHNpemVvZihzdHJ1Y3QgTlRGU19ERSkgJiM0Mzsgc2l6ZW9mKHU2NCkpIHsKCQkJCWlmIChuKSB7CgkJCQkJZm5kX3BvcChmbmQpOwoJCQkJCWtmcmVlKG4pOwoJCQkJfQoJCQkJcmV0dXJuIC1FSU5WQUw7CgkJCX0KYGBgCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpZiBgbmAgaXMgcG9wcGVkIGZyb20gYGZuZGAsIGl0ICpoYWQqIHRvIGhhdmUgYmVlbiBwdXNoZWQgdGhlcmUgZWFybGllci4gQW5kIGlmIGl0IHdhcyBwdXNoZWQgdGhlcmUsIGl0IHdhcyBhbGxvY2F0ZWQgYnkgYGluZHhfcmVhZGAuIElmIGl0IHdhcyBmcm9tIGBpbmR4X3JlYWRgLCBpdCAqc2hvdWxkKiBoYXZlIGBuLSZndDtpbmRleGAgYW5kIGBuLSZndDtuYmAgbWVtYmVycy4gQnV0LCB0aGlzIGNvZGUganVzdCBkb2VzIGEgYGtmcmVlKG4pYC4gVGhhdCBsb29rcyBsaWtlIGEgcG90ZW50aWFsIG1lbW9yeSBsZWFrIG9mIGJvdGggYG4tJmd0O2luZGV4YCBhbmQgYG4tJmd0O25iYC4gV2FpdCBhIHNlY29uZCB0aG91Z2gsIGBuYl9wdXRgIHJlbGVhc2VzIGJ1ZmZlciBoZWFkcy4gU28sIGlmIGBrZnJlZShuKWAgaXMgY2FsbGVkIHdpdGhvdXQgYSBjYWxsIHRvIGBuYl9wdXRgIGZpcnN0LCB3ZSYjMzk7cmUgZGVmaW5pdGVseSBsZWFraW5nIGJ1ZmZlciBoZWFkcyEKCkkgcmVtZW1iZXIgdGhhdCBgbmAgaXMgcG9wcGVkIGZyb20gYGZuZGAgaW4gYGluZHhfZmluZF9zb3J0YCBhbmQgdGhhdCBgZm5kX3B1c2hgIHB1c2hlcyBgbmAgKmFuZCogYGVgIHRvIGBmbmRgLgoKT2theSwgc28gSSB3b25kZXIgaWYgYGZuZF9jbGVhcmAgd2hpY2ggc2hvdWxkIGNhbGwgYHB1dF9pbmR4X25vZGVgIGZvciBhbGwgbm9kZXMgaW4gYGZuZGAgaXMgZG9pbmcgc29tZXRoaW5nLiBZZXAsIGBmbmRfY2xlYXJgIGRvZXMgaW5kZWVkIGNhbGwgYHB1dF9pbmR4X25vZGVgIGZvciBhbGwgdGhlIG5vZGVzIGluIGBmbmRgLiBTbywgd2h5IGlzIGBpbmR4X2ZpbmRfc29ydGAgY2FsbGluZyBga2ZyZWUobilgIGluc3RlYWQgb2YgYHB1dF9pbmR4X25vZGUobilgPyBNYWtlcyBubyBzZW5zZSEgSSBuZWVkIHRvIHNlZSBpZiBgaW5keF9maW5kX3NvcnRgIGFjdHVhbGx5ICp1c2VzKiBgcHV0X2luZHhfbm9kZWAuIE9rYXksIGl0IGRvZXNuJiMzOTt0IHNlZW0gdG8sIGZyb20gYSBxdWljayBjaGVjay4KCkFscmlnaHQsIGxvb2tpbmcgYXQgdGhlIHBhdGNoLCBJIHNlZSB0aGF0IHRoZSBwYXRjaCAqb25seSogYWRkZWQgYGtmcmVlKG4tJmd0O2luZGV4KTtgIGluIGEgc2luZ2xlIHNwb3Q6CgpgYGBjCiAJCS8qIFBvcCBvbmUgbGV2ZWwuICovCiAJCWlmIChuKSB7CiAJCQlmbmRfcG9wKGZuZCk7CiYjNDM7CQkJa2ZyZWUobi0mZ3Q7aW5kZXgpOwogCQkJa2ZyZWUobik7CiAJCX0KYGBgCgpXYWl0IGEgc2Vjb25kLi4uIHdoZXJlIGlzIHRoZSBjYWxsIHRvIGBuYl9wdXQoJmFtcDtuLSZndDtuYilgPyBJdCYjMzk7cyBtaXNzaW5nIGVudGlyZWx5ISBBbmQgYG4tJmd0O25iYCAqaXMqIGEgYHN0cnVjdCBudGZzX2J1ZmZlcnNgLiBJIG5lZWQgdG8gY2hlY2sgYG5iX3B1dGAgdG8gYmUgc3VyZS4gSXQgbG9va3MgbGlrZSBpdC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgYnVnIGFuZCBhIHBvdGVudGlhbCBtZW1vcnkgbGVhay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTY6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9udGZzMy9udGZzX2ZzLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTkxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExOTE6XHRzdGF0aWMgaW5saW5lIHZvaWQgbmJfcHV0KHN0cnVjdCBudGZzX2J1ZmZlcnMgKm5iKVxuMTE5MjpcdHtcbjExOTM6XHRcdHUzMiBpLCBuYnVmcyA9IG5iLVx1MDAzZW5idWZzO1xuMTE5NDpcdFxuMTE5NTpcdFx0aWYgKCFuYnVmcylcbjExOTY6XHRcdFx0cmV0dXJuO1xuMTE5NzpcdFxuMTE5ODpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbmJ1ZnM7IGkmIzQzOyYjNDM7KVxuMTE5OTpcdFx0XHRwdXRfYmgobmItXHUwMDNlYmhbaV0pO1xuMTIwMDpcdFx0bmItXHUwMDNlbmJ1ZnMgPSAwO1xuMTIwMTpcdH1cbjEyMDI6XHRcbjEyMDM6XHRzdGF0aWMgaW5saW5lIHZvaWQgcHV0X2luZHhfbm9kZShzdHJ1Y3QgaW5keF9ub2RlICppbilcbjEyMDQ6XHR7XG4xMjA1Olx0XHRpZiAoIWluKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjEyMwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIEJ1ZmZlciBIZWFkIExlYWsgaW4gYSBGaWxlc3lzdGVtIE1vZHVsZSoqCgpSaWdodCwgc28gYG5iX3B1dGAgZXhwbGljaXRseSByZWxlYXNlcyBidWZmZXIgaGVhZHMuIFRoYXQgbXVjaCBpcyBjbGVhci4gVGhlIHByb2JsZW0gKmFwcGVhcnMqIHRvIHN0ZW0gZnJvbSBob3cgYGluZHhfZmluZF9zb3J0YCBjbGVhbnMgdXAuIEl0JiMzOTtzIGRvaW5nIGEgc2ltcGxlIGBrZnJlZWAgb2YgdGhlIGBuLSZndDtpbmRleGAgYW5kIGBuYCBzdHJ1Y3R1cmVzLiBJZiBgbmItJmd0O25idWZzYCBpcyBncmVhdGVyIHRoYW4gemVybywgdGhvc2UgYnVmZmVyIGhlYWRzIGFyZSAqbm90KiBiZWluZyByZWxlYXNlZCBpbiBgaW5keF9maW5kX3NvcnRgLCBtZWFuaW5nIHdlIGhhdmUgYSBtZW1vcnkgbGVhayEKCkJ1dCBob2xkIG9uLi4uIEFtIEkgbWlzc2luZyBzb21ldGhpbmc/IERvZXMgYGluZHhfcmVhZGAgZXZlbiBzZXQgYG5iLSZndDtuYnVmc2A/IElmIGBpbmR4X3JlYWRgIG5ldmVyIHNldHMgaXQsIHRoZW4gdGhpcyBpcyBub3QgYW4gaXNzdWUuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxpbmcgZnVuY3Rpb24gaW4gb3JkZXIgdG8gY29uZmlybSB3aGV0aGVyIHRoZXJlIGFyZSBidWZmZXIgaGVhZHMgaW52b2x2ZWQuCgpPa2F5LCBteSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBob3cgYGluZHhfcmVhZF9yYWAgd29ya3MuIFRoYXQgd2lsbCBiZSB3aGVyZSBJIGZvY3VzIG15IGF0dGVudGlvbiBuZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL250ZnMzL2luZGV4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDk4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwOTg6XHRcdGRvd25fcmVhZChsb2NrKTtcbjEwOTk6XHRcdGVyciA9IG50ZnNfcmVhZF9iaF9yYShzYmksIHJ1biwgdmJvLCBcdTAwMjZpYi1cdTAwM2VyaGRyLCBieXRlcywgXHUwMDI2aW4tXHUwMDNlbmIsIHJhKTtcbjExMDA6XHRcdHVwX3JlYWQobG9jayk7XG4xMTAxOlx0XHRpZiAoIWVycilcbjExMDI6XHRcdFx0Z290byBvaztcbjExMDM6XHRcbjExMDQ6XHRcdGlmIChlcnIgPT0gLUVfTlRGU19GSVhVUClcbjExMDU6XHRcdFx0Z290byBvaztcbjExMDY6XHRcbjExMDc6XHRcdGlmIChlcnIgIT0gLUVOT0VOVClcbjExMDg6XHRcdFx0Z290byBvdXQ7XG4xMTA5Olx0XG4xMTEwOlx0XHRuYW1lID0gXHUwMDI2c19pbmRleF9uYW1lc1tpbmR4LVx1MDAzZXR5cGVdO1xuMTExMTpcdFx0ZG93bl93cml0ZShsb2NrKTtcbjExMTI6XHRcdGVyciA9IGF0dHJfbG9hZF9ydW5zX3JhbmdlKG5pLCBBVFRSX0FMTE9DLCBuYW1lLVx1MDAzZW5hbWUsIG5hbWUtXHUwMDNlbmFtZV9sZW4sXG4xMTEzOlx0XHRcdFx0XHQgICBydW4sIHZibywgdmJvICYjNDM7IGJ5dGVzKTtcbjExMTQ6XHRcdHVwX3dyaXRlKGxvY2spO1xuMTExNTpcdFx0aWYgKGVycilcbjExMTY6XHRcdFx0Z290byBvdXQ7XG4xMTE3Olx0XG4xMTE4Olx0XHRkb3duX3JlYWQobG9jayk7XG4xMTE5Olx0XHRlcnIgPSBudGZzX3JlYWRfYmhfcmEoc2JpLCBydW4sIHZibywgXHUwMDI2aWItXHUwMDNlcmhkciwgYnl0ZXMsIFx1MDAyNmluLVx1MDAzZW5iLCByYSk7XG4xMTIwOlx0XHR1cF9yZWFkKGxvY2spO1xuMTEyMTpcdFx0aWYgKGVyciA9PSAtRV9OVEZTX0ZJWFVQKVxuMTEyMjpcdFx0XHRnb3RvIG9rO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjg1MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDU5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgQnVmZmVyIEhlYWQgTGVhayBpbiB0aGUgTlRGUzMgRmlsZXN5c3RlbSBEcml2ZXIqKgoKT2theSwgc28gYG50ZnNfcmVhZF9iaF9yYWAgZGVmaW5pdGVseSByZWFkcyBidWZmZXIgaGVhZHMgaW50byBgaW4tJmd0O25iYC4gVGhhdCBtZWFucyBgaW4tJmd0O25iYCB3aWxsIGhvbGQgYnVmZmVyIGhlYWRzLiBOb3csIGlmIGBpbmR4X2ZpbmRfc29ydGAgZG9lc24mIzM5O3QgY2FsbCBgbmJfcHV0YCwgd2UmIzM5O3ZlIGdvdCBhIHBvdGVudGlhbCBsZWFrIHJpZ2h0IHRoZXJlLiBCdXQgd2FpdCwgd2h5IGRpZCB0aGUgcGF0Y2ggb25seSBpbmNsdWRlIGBrZnJlZShuLSZndDtpbmRleClgPyBDb3VsZCBpdCBiZSB0aGF0IGBuLSZndDtuYmAgaXMgc29tZXRpbWVzIGVtcHR5PwoKSG9sZCBvbi4uLiBwZXJoYXBzIGBudGZzX3JlYWRfYmhfcmFgIGlzbiYjMzk7dCBldmVuIGNhbGxlZCBpZiBgaW5keF9yZWFkYCBmYWlscz8gQnV0IG5vLCBgbmAgaXMgcG9wcGVkIGZyb20gYGZuZGAgaW4gYGluZHhfZmluZF9zb3J0YC4gSWYgaXQmIzM5O3MgaW4gYGZuZGAsIGl0IHdhcyBwdXNoZWQgdGhlcmUgYnkgYGZuZF9wdXNoYC4gYGZuZF9wdXNoYCBnZXRzIGNhbGxlZCBhZnRlciBgaW5keF9yZWFkYCBzdWNjZWVkcy4gU28sIHdlICprbm93KiBgbmAgd2FzIHJlYWQgc3VjY2Vzc2Z1bGx5LCBhbmQgYGluLSZndDtuYmAgKnNob3VsZCogY29udGFpbiBidWZmZXIgaGVhZHMuCgpBaGEhIElmIGBpbmR4X2ZpbmRfc29ydGAgb25seSBkb2VzIGBrZnJlZShuLSZndDtpbmRleCk7IGtmcmVlKG4pO2AsIHRoYXQmIzM5O3MgYSBkZWZpbml0ZSBidWZmZXIgaGVhZCBsZWFrISBMZXQmIzM5O3MganVzdCBkb3VibGUtY2hlY2sgdGhlIHBhdGNoIHRvIG1ha2Ugc3VyZSB0aGUgYXV0aG9yIGRpZG4mIzM5O3QgaW50ZW5kIHNvbWV0aGluZyBlbHNlLgoKWWVwLCB0aGUgcGF0Y2ggaXMgZXhhY3RseSBhcyBkZXNjcmliZWQsIGV4cGxpY2l0bHkgYWRkaW5nIGBrZnJlZShuLSZndDtpbmRleClgIGFuZCBga2ZyZWUobilgLCB3aGljaCBpcyBzaG93biBiZWxvdzoKCmBgYGRpZmYKQEAgLTEzMjUsNiAmIzQzOzEzMjUsNyBAQCBpbnQgaW5keF9maW5kX3NvcnQoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSwKIAkJLyogUG9wIG9uZSBsZXZlbC4gKi8KIAkJaWYgKG4pIHsKIAkJCWZuZF9wb3AoZm5kKTsKJiM0MzsJCQlrZnJlZShuLSZndDtpbmRleCk7CiAJCQlrZnJlZShuKTsKIAkJfQpgYGAKCldhaXQgYSBzZWNvbmQsIHdoeSBkaWRuJiMzOTt0IHRoZXkgdXNlIGBwdXRfaW5keF9ub2RlKG4pYD8gTGV0JiMzOTtzIHJlZnJlc2ggb3VyIG1lbW9yeSBvbiB3aGF0IHRoYXQgZnVuY3Rpb24gZG9lcy4KCmBgYGMKc3RhdGljIGlubGluZSB2b2lkIHB1dF9pbmR4X25vZGUoc3RydWN0IGluZHhfbm9kZSAqaW4pCnsKCWlmICghaW4pCgkJcmV0dXJuOwoKCWtmcmVlKGluLSZndDtpbmRleCk7CgluYl9wdXQoJmFtcDtpbi0mZ3Q7bmIpOwoJa2ZyZWUoaW4pOwp9CmBgYAoKSWYgYHB1dF9pbmR4X25vZGUobilgIHdhcyB1c2VkLCBpdCB3b3VsZCBmcmVlIGBpbi0mZ3Q7aW5kZXhgLCBwdXQgYGluLSZndDtuYmAsICphbmQqIGZyZWUgYGluYC4gQnV0IGl0IGRvZXNuJiMzOTt0LiBUaGV5IHNwZWNpZmljYWxseSBhZGRlZCBga2ZyZWUobi0mZ3Q7aW5kZXgpYCAqYW5kKiBrZXB0IGBrZnJlZShuKWAuIFNvIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQgaXMgcG9zc2libGUgdGhhdCBgbi0mZ3Q7bmJgIGlzIGFscmVhZHkgcHV0PyBOby4gVGhlIHBhdGNoIGxvb2tzIGJ1Z2d5LCBkb2VzbiYjMzk7dCBpdD8KClJlZ2FyZGxlc3MsIHRoZSBwYXRjaCB0b3VjaGVzIGBmcy9udGZzMy9pbmRleC5jYCwgdGhlIE5URlMzIGZpbGVzeXN0ZW0gZHJpdmVyLiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhaW1lZCBhdCBmaXhpbmcgYSBtZW1vcnkgbGVhayAob2YgYG4tJmd0O2luZGV4YCksIGJ1dCBpdCBsb29rcyBsaWtlIGl0IGRvZXMgaXQgaW5jb3JyZWN0bHkuIElzIHRoaXMgcmVhY2hhYmxlIGNvZGU/IERlZmluaXRlbHkuIGBpbmR4X2ZpbmRfc29ydGAgZ2V0cyBjYWxsZWQgZHVyaW5nIGRpcmVjdG9yeSBvcGVyYXRpb25zIG9yIGluZGV4IGxvb2t1cHMuIE5vdyBJIG5lZWQgdG8gY2hlY2sgd2hlcmUgYGluZHhfZmluZF9zb3J0YCBpcyBjYWxsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE2OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luZHhfZmluZF9zb3J0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmczMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMzL2ZzbnRmcy5jPTIwODE9aW50IG50ZnNfaW5zZXJ0X3NlY3VyaXR5KHN0cnVjdCBudGZzX3NiX2luZm8gKnNiaSxcbi0tXG5mcy9udGZzMy9mc250ZnMuYy0yMTY0LVxuZnMvbnRmczMvZnNudGZzLmM6MjE2NTpcdFx0ZXJyID0gaW5keF9maW5kX3NvcnQoaW5keF9zZGgsIG5pLCByb290X3NkaCxcbmZzL250ZnMzL2ZzbnRmcy5jLTIxNjYtXHRcdFx0XHQgICAgIChzdHJ1Y3QgTlRGU19ERSAqKilcdTAwMjZlLCBmbmRfc2RoKTtcbi0tXG5mcy9udGZzMy9pbmRleC5jPTExNjk9aW50IGluZHhfZmluZChzdHJ1Y3QgbnRmc19pbmRleCAqaW5keCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxuLS1cbmZzL250ZnMzL2luZGV4LmMtMTI0My1cbmZzL250ZnMzL2luZGV4LmM6MTI0NDppbnQgaW5keF9maW5kX3NvcnQoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcbmZzL250ZnMzL2luZGV4LmMtMTI0NS1cdFx0ICAgY29uc3Qgc3RydWN0IElOREVYX1JPT1QgKnJvb3QsIHN0cnVjdCBOVEZTX0RFICoqZW50cnksXG4tLVxuZnMvbnRmczMvbnRmc19mcy5oPTc1NT1pbnQgaW5keF9maW5kKHN0cnVjdCBudGZzX2luZGV4ICppbmR4LCBzdHJ1Y3QgbnRmc19pbm9kZSAqZGlyLFxuLS1cbmZzL250ZnMzL250ZnNfZnMuaC03NTgtXHQgICAgICBzdHJ1Y3QgbnRmc19mbmQgKmZuZCk7XG5mcy9udGZzMy9udGZzX2ZzLmg6NzU5OmludCBpbmR4X2ZpbmRfc29ydChzdHJ1Y3QgbnRmc19pbmRleCAqaW5keCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxuZnMvbnRmczMvbnRmc19mcy5oLTc2MC1cdFx0ICAgY29uc3Qgc3RydWN0IElOREVYX1JPT1QgKnJvb3QsIHN0cnVjdCBOVEZTX0RFICoqZW50cnksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE2OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NTk3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRpdmluZyBpbnRvIHRoZSBgbnRmc19pbnNlcnRfc2VjdXJpdHlgIEZ1bmN0aW9uKioKCkFscmlnaHQsIHRoZSBzeXN0ZW0gaXMgY2FsbGluZyBgbnRmc19pbnNlcnRfc2VjdXJpdHlgLiBUaGF0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGZvciBtYW5hZ2luZyBzZWN1cml0eSBkZXNjcmlwdG9ycyB3aXRoaW4gdGhlIE5URlMgZmlsZSBzeXN0ZW0uIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSBleGFjdGx5IHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aGluIGBudGZzX2luc2VydF9zZWN1cml0eWAuIEl0JiMzOTtzIHRpbWUgdG8gdW5kZXJzdGFuZCBob3cgc2VjdXJpdHkgYXR0cmlidXRlcyBhcmUgYmVpbmcgYXBwbGllZCBhdCB0aGlzIHBvaW50LiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBleGFjdCBsb2dpYyB1c2VkIGFuZCBwb3RlbnRpYWwgcGl0ZmFsbHMgdG8gbG9vayBmb3IgaW4gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE2OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O250ZnNfaW5zZXJ0X3NlY3VyaXR5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmczMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMzL2ZzbnRmcy5jPTE5ODE9aW50IG50ZnNfZ2V0X3NlY3VyaXR5X2J5X2lkKHN0cnVjdCBudGZzX3NiX2luZm8gKnNiaSwgX19sZTMyIHNlY3VyaXR5X2lkLFxuLS1cbmZzL250ZnMzL2ZzbnRmcy5jLTIwNzAtLypcbmZzL250ZnMzL2ZzbnRmcy5jOjIwNzE6ICogbnRmc19pbnNlcnRfc2VjdXJpdHkgLSBJbnNlcnQgc2VjdXJpdHkgZGVzY3JpcHRvciBpbnRvICRTZWN1cmU6OlNEUy5cbmZzL250ZnMzL2ZzbnRmcy5jLTIwNzItICpcbi0tXG5mcy9udGZzMy9mc250ZnMuYy0yMDgwLSAqL1xuZnMvbnRmczMvZnNudGZzLmM6MjA4MTppbnQgbnRmc19pbnNlcnRfc2VjdXJpdHkoc3RydWN0IG50ZnNfc2JfaW5mbyAqc2JpLFxuZnMvbnRmczMvZnNudGZzLmMtMjA4Mi1cdFx0XHQgY29uc3Qgc3RydWN0IFNFQ1VSSVRZX0RFU0NSSVBUT1JfUkVMQVRJVkUgKnNkLFxuLS1cbmZzL250ZnMzL2lub2RlLmM9MTE4Mz1pbnQgbnRmc19jcmVhdGVfaW5vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL250ZnMzL2lub2RlLmMtMTMzNS1cdFx0XHRpZiAoc2VjdXJpdHlfaWQgPT0gU0VDVVJJVFlfSURfSU5WQUxJRCBcdTAwMjZcdTAwMjZcbmZzL250ZnMzL2lub2RlLmM6MTMzNjpcdFx0XHQgICAgIW50ZnNfaW5zZXJ0X3NlY3VyaXR5KHNiaSwgc2QsIHNkX3NpemUsXG5mcy9udGZzMy9pbm9kZS5jLTEzMzctXHRcdFx0XHRcdFx0ICBcdTAwMjZzZWN1cml0eV9pZCwgTlVMTCkpXG4tLVxuZnMvbnRmczMvbnRmc19mcy5oPTcxMD1pbnQgbnRmc19nZXRfc2VjdXJpdHlfYnlfaWQoc3RydWN0IG50ZnNfc2JfaW5mbyAqc2JpLCBfX2xlMzIgc2VjdXJpdHlfaWQsXG4tLVxuZnMvbnRmczMvbnRmc19mcy5oLTcxMi1cdFx0XHQgICAgc2l6ZV90ICpzaXplKTtcbmZzL250ZnMzL250ZnNfZnMuaDo3MTM6aW50IG50ZnNfaW5zZXJ0X3NlY3VyaXR5KHN0cnVjdCBudGZzX3NiX2luZm8gKnNiaSxcbmZzL250ZnMzL250ZnNfZnMuaC03MTQtXHRcdFx0IGNvbnN0IHN0cnVjdCBTRUNVUklUWV9ERVNDUklQVE9SX1JFTEFUSVZFICpzZCxcbi0tXG5mcy9udGZzMy94YXR0ci5jPTg2Mj1zdGF0aWMgbm9pbmxpbmUgaW50IG50ZnNfc2V0eGF0dHIoY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsXG4tLVxuZnMvbnRmczMveGF0dHIuYy05NDUtXG5mcy9udGZzMy94YXR0ci5jOjk0NjpcdFx0ZXJyID0gbnRmc19pbnNlcnRfc2VjdXJpdHkobmktXHUwMDNlbWkuc2JpLCB2YWx1ZSwgc2l6ZSxcbmZzL250ZnMzL3hhdHRyLmMtOTQ3LVx0XHRcdFx0XHQgICBcdTAwMjZzZWN1cml0eV9pZCwgXHUwMDI2aW5zZXJ0ZWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQwMQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqRGVidWdnaW5nIHRoZSBOVEZTMyBNb2R1bGUqKgoKUmlnaHQsIHNvIHRoaXMgaXMgdHJpZ2dlcmVkIHdpdGhpbiBgbnRmc19jcmVhdGVfaW5vZGVgIGFuZCBgbnRmc19zZXR4YXR0cmAuIEdvb2QsIHRoYXQgbmFycm93cyBkb3duIHRoZSBzY29wZSBjb25zaWRlcmFibHkuIEkgY2FuIHNlZSB0aGF0IHRoaXMgaXMgZGVmaW5pdGVseSBhbiBhY3RpdmUgY29kZSBwYXRoOyBpdCYjMzk7cyByZWFjaGFibGUgYW5kIHdvcmtpbmcgYXMgZXhwZWN0ZWQgd2l0aGluIHRoZSBmaWxlIHN5c3RlbSBvcGVyYXRpb25zLiBUaGUgcGF0Y2ggYWltcyB0byBhZGRyZXNzIGEgbWVtb3J5IGxlYWsgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGluZHhfZmluZF9zb3J0YCBmdW5jdGlvbi4KCk5vdywgdGhhdCBuYW1lIHJpbmdzIGEgYmVsbC4uLiBgaW5keF9maW5kX3NvcnRgLiBBbmQgaXQganVzdCBjbGlja2VkLCBgaW5keF9maW5kX3NvcnRgIGlzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nISBBIGZ1bmN0aW9uIHdpdGggJiMzNDtzb3J0JiMzNDsgaW4gaXRzIG5hbWUgc3VnZ2VzdHMgZGF0YSBtYW5pcHVsYXRpb24sIGFuZCB0aG9zZSBhcmUgb2Z0ZW4gcHJvbmUgdG8gb2ZmLWJ5LW9uZSBlcnJvcnMgb3IgaW5jb3JyZWN0IG1lbW9yeSBoYW5kbGluZywgd2hpY2ggaXMgYSBncmVhdCBwbGFjZSB0byBzdGFydCBsb29raW5nIHdoZW4gd3JpdGluZyBhIGZ1enplci4gSXQmIzM5O3MgdGltZSB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBOVEZTMyB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IGV2ZXJ5dGhpbmcgZW5hYmxlZCBmb3IgZWZmZWN0aXZlIHRlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE2OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOVEZTM19GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzMy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9udGZzMy9LY29uZmlnOjI6Y29uZmlnIE5URlMzX0ZTXG5mcy9udGZzMy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtOVEZTIFJlYWQtV3JpdGUgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuLS1cbmZzL250ZnMzL0tjb25maWc9Mjg9Y29uZmlnIE5URlMzX0xaWF9YUFJFU1Ncbi0tXG5mcy9udGZzMy9LY29uZmlnLTM3LVxuZnMvbnRmczMvS2NvbmZpZzozODpjb25maWcgTlRGUzNfRlNfUE9TSVhfQUNMXG5mcy9udGZzMy9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtOVEZTIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE2OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5ODg1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBOVEZTMyBDb25maWd1cmF0aW9uIE9wdGlvbnMgZm9yIFhhdHRyIGFuZCBTZWN1cml0eSBEZXNjcmlwdG9yIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYE5URlMzX0ZTYCBjb25maWcsIHRoYXQmIzM5O3MgdGhlIGJhc2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBleHRlbmRlZCBhdHRyaWJ1dGVzICh4YXR0cikgYW5kIHNlY3VyaXR5IGRlc2NyaXB0b3JzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgTlRGUzMgZmlsZXN5c3RlbS4gVGhlIGtleSBoZXJlIGlzIHRvIGRldGVybWluZSB3aGljaCBjb25maWd1cmF0aW9ucyBpbmZsdWVuY2UgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5LgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGFyZSB0aGVyZSAqYW55KiBvdGhlciBjb25maWcgb3B0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50PyBUaGUgZmlyc3QgdGhhdCBqdW1wcyBvdXQgaXMgYE5URlMzX0ZTX1BPU0lYX0FDTGAuIFRoYXQgY291bGQgZGVmaW5pdGVseSBiZSB0aWVkIGluOyBJIG5lZWQgdG8gc2VlIGlmIGl0IHBsYXlzIGFueSByb2xlIGluIGhvdyB4YXR0ciBvciBzZWN1cml0eSBkZXNjcmlwdG9ycyBhcmUgbWFuYWdlZCwgc3BlY2lmaWNhbGx5LgoKTm93LCBhIGNydWNpYWwgY29ubmVjdGlvbjogSSByZW1lbWJlciBzZWVpbmcgYG50ZnNfaW5zZXJ0X3NlY3VyaXR5YCBiZWluZyBjYWxsZWQgZnJvbSBgbnRmc19zZXR4YXR0cmAuIFRoYXQmIzM5O3MgYSBzdHJvbmcgaW5kaWNhdGlvbiB0aGF0IGFueSBjb25maWcgYWZmZWN0aW5nIGBudGZzX3NldHhhdHRyYCB3aWxsIGhhdmUgYW4gaW1wYWN0LgoKUmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLiBJJiMzOTtsbCBjaGVjayBgZnMvbnRmczMveGF0dHIuY2AgYmVjYXVzZSB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRoZSBgbnRmc19zZXR4YXR0cmAgZnVuY3Rpb24gdG8gYmUgZGVmaW5lZC4gSSB3YW50IHRvIHNlZSBpZiBgbnRmc19zZXR4YXR0cmAgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCBvciBndWFyZGVkIGJ5IGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBjbGVhcmVzdCBwaWN0dXJlIG9mIGhvdyB0aGVzZSBjb25maWdzIGludGVyYWN0IHdpdGggeGF0dHIgYW5kIHNlY3VyaXR5IGRlc2NyaXB0b3IgbWFuYWdlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTY6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnRmc19zZXR4YXR0ciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMzL3hhdHRyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmczMveGF0dHIuYz04NTM9c3RhdGljIGJvb2wgbnRmc19pc19yZXNlcnZlZF9seGF0dHIoY29uc3QgY2hhciAqbmFtZSlcbi0tXG5mcy9udGZzMy94YXR0ci5jLTg1OS0vKlxuZnMvbnRmczMveGF0dHIuYzo4NjA6ICogbnRmc19zZXR4YXR0ciAtIGlub2RlX29wZXJhdGlvbnM6OnNldHhhdHRyXG5mcy9udGZzMy94YXR0ci5jLTg2MS0gKi9cbmZzL250ZnMzL3hhdHRyLmM6ODYyOnN0YXRpYyBub2lubGluZSBpbnQgbnRmc19zZXR4YXR0cihjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlcixcbmZzL250ZnMzL3hhdHRyLmMtODYzLVx0XHRcdFx0ICBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGUsXG4tLVxuZnMvbnRmczMveGF0dHIuYz0xMDYxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBudGZzX290aGVyX3hhdHRyX2hhbmRsZXIgPSB7XG4tLVxuZnMvbnRmczMveGF0dHIuYy0xMDYzLVx0LmdldFx0PSBudGZzX2dldHhhdHRyLFxuZnMvbnRmczMveGF0dHIuYzoxMDY0Olx0LnNldFx0PSBudGZzX3NldHhhdHRyLFxuZnMvbnRmczMveGF0dHIuYy0xMDY1LVx0Lmxpc3RcdD0gbnRmc194YXR0cl91c2VyX2xpc3QsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE2OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjIxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYnJlYWtkb3duIG9mIHdoYXQmIzM5O3MgZ29pbmcgb24sIHRoaW5raW5nIHRocm91Z2ggdGhpcyBsaWtlIEkgd291bGQgaW4gbXkgb3duIHdvcms6CgoqKkludmVzdGlnYXRpbmcgdGhlIE5URlMzIEZpbGVzeXN0ZW0gQ29uZmlndXJhdGlvbiBSZXF1aXJlbWVudCoqCgpBbHJpZ2h0LCBzbyB0aGUgY2x1ZSBoZXJlIGlzIHRoYXQgdGhlIGZ1bmN0aW9uIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBpc24mIzM5O3QgcHJvdGVjdGVkIGJ5IGEgc3BlY2lmaWMsIGRldGFpbGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9uIOKAkyBpdCYjMzk7cyBqdXN0IHRpZWQgdG8gYE5URlMzX0ZTYC4gVGhhdCB0ZWxscyBtZSAqdGhhdCogaXMgdGhlIHJlcXVpcmVkIGNvbmZpZy4gUHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBzbyBmYXIuCgpOb3csIGxldCYjMzk7cyBjaXJjbGUgYmFjayB0byBgaW5keF9maW5kX3NvcnRgLiBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmc6IGlzIHRoaXMgYSBzdGF0aWMgZnVuY3Rpb24sIG9yIGlzIGl0IHZpc2libGUgb3V0c2lkZSBvZiBpdHMgaW1tZWRpYXRlIHNjb3BlPyBRdWlja2x5LCBJIHNlZSB0aGF0IGl0IGlzIGV4cG9ydGVkIG9yIGF0IGxlYXN0IG5vbi1zdGF0aWMuCgpPa2F5LCBsZXQmIzM5O3MgZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZS4gVGhlIGZpbGUgYGZzL250ZnMzL2luZGV4LmNgIGlzIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gZXhhbWluZSB0aGUgY29kZSBmb3IgYGluZHhfZmluZF9zb3J0YC4gSSYjMzk7bGwgb3BlbiB0aGF0IHVwIGFuZCB0YWtlIGEgbG9vay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTY6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IGluZHhfZmluZF9zb3J0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmczMvaW5kZXguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzMy9pbmRleC5jPTExNjk9aW50IGluZHhfZmluZChzdHJ1Y3QgbnRmc19pbmRleCAqaW5keCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxuLS1cbmZzL250ZnMzL2luZGV4LmMtMTI0My1cbmZzL250ZnMzL2luZGV4LmM6MTI0NDppbnQgaW5keF9maW5kX3NvcnQoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcbmZzL250ZnMzL2luZGV4LmMtMTI0NS1cdFx0ICAgY29uc3Qgc3RydWN0IElOREVYX1JPT1QgKnJvb3QsIHN0cnVjdCBOVEZTX0RFICoqZW50cnksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE2OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMDg5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgZm9yIEVuaGFuY2VtZW50cyBpbiBGb2N1c1N5bWJvbHMqKgoKQWxyaWdodCwgc28gdGhlIGluaXRpYWwgYXNzZXNzbWVudCBpcyBjb25maXJtZWQ6IGl0JiMzOTtzIG5vdCBhIHN0YXRpYyBpbXBsZW1lbnRhdGlvbi4gVGhhdCBvcGVucyB1cCBzb21lIGludGVyZXN0aW5nIHBvc3NpYmlsaXRpZXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0NhbiB3ZSBsZXZlcmFnZSB0aGlzIG5vbi1zdGF0aWMgbmF0dXJlPyYjMzQ7IFRoZSBvYnZpb3VzIG5leHQgc3RlcCBpcyB0byBjb25zaWRlciBhZGRpbmcgYGluZHhfZmluZF9zb3J0YCBhbmQgYG50ZnNfaW5zZXJ0X3NlY3VyaXR5YCB0byBgRm9jdXNTeW1ib2xzYC4gVGhhdCBmZWVscyBsaWtlIGEgbG9naWNhbCBwcm9ncmVzc2lvbiwgcG90ZW50aWFsbHkgaW1wcm92aW5nIGl0cyBjYXBhYmlsaXRpZXMuIEJlZm9yZSBJIGdldCB0b28gZmFyIGRvd24gdGhhdCBwYXRoLCBJIG5lZWQgdG8gdmVyaWZ5IGEgY3JpdGljYWwgYXNzdW1wdGlvbiwgc3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgaWYgYG50ZnNfaW5zZXJ0X3NlY3VyaXR5YCBpcyBhbHNvICpub24tc3RhdGljKi4gSWYgaXQgKmlzKiBzdGF0aWMsIHRoZW4gdGhpcyB3aG9sZSBsaW5lIG9mIHRoaW5raW5nIGlzIHByb2JhYmx5IHVucHJvZHVjdGl2ZS4gSSYjMzk7bSBnb2luZyB0byBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBjb25maXJtIGl0cyBpbXBsZW1lbnRhdGlvbiBiZWZvcmUgcHJvY2VlZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTY6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IG50ZnNfaW5zZXJ0X3NlY3VyaXR5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmczMvZnNudGZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmczMvZnNudGZzLmM9MTk4MT1pbnQgbnRmc19nZXRfc2VjdXJpdHlfYnlfaWQoc3RydWN0IG50ZnNfc2JfaW5mbyAqc2JpLCBfX2xlMzIgc2VjdXJpdHlfaWQsXG4tLVxuZnMvbnRmczMvZnNudGZzLmMtMjA4MC0gKi9cbmZzL250ZnMzL2ZzbnRmcy5jOjIwODE6aW50IG50ZnNfaW5zZXJ0X3NlY3VyaXR5KHN0cnVjdCBudGZzX3NiX2luZm8gKnNiaSxcbmZzL250ZnMzL2ZzbnRmcy5jLTIwODItXHRcdFx0IGNvbnN0IHN0cnVjdCBTRUNVUklUWV9ERVNDUklQVE9SX1JFTEFUSVZFICpzZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTY6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE1MTMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRoaXMgUGF0Y2g6IEEgRnVuY3Rpb25hbCBDaGFuZ2UgV29ydGggRnV6emluZyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGNsZWFybHkgdGFyZ2V0cyBub24tc3RhdGljIGNvZGUg4oCTIHRoYXQmIzM5O3MgdGhlIGZpcnN0IHRoaW5nIEkgbm90aWNlZC4gTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBhbmQgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgYmVpbmcgbW9kaWZpZWQuIEl0IGxvb2tzIGxpa2UgdGhlIHByaW1hcnkgZnVuY3Rpb24gdW5kZXIgc2NydXRpbnkgaXMgYGluZHhfZmluZF9zb3J0YC4gQW5kIHllcywgdGhlIHBhdGNoIGV4cGxpY2l0bHkgYWRkcmVzc2VzIGEgbWVtb3J5IGxlYWsgaW4gYGluZHhfZmluZF9zb3J0YCByZWxhdGVkIHRvIGBuLSZndDtpbmRleGAuIFNwZWNpZmljYWxseSwgaXQgYXBwZWFycyB0aGUgZml4IGludm9sdmVzIGZyZWVpbmcgYG4tJmd0O2luZGV4YCBiZWZvcmUgYG5gIHdoZW4gYSBsZXZlbCBpcyBwb3BwZWQgZnJvbSB0aGUgZmluZCBzdGF0ZS4KClRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBhIGNvcmUgYXNwZWN0IG9mIGhvdyB0aGUgZmlsZXN5c3RlbSBoYW5kbGVzIGluZGV4IGxvb2t1cHMuIEdpdmVuIHRoYXQsIGFuZCBjb25zaWRlcmluZyBpdCBpbnZvbHZlcyByZWFjaGFibGUgY29yZSBmaWxlc3lzdGVtIGxvZ2ljIOKAkyBzcGVjaWZpY2FsbHkgd2hlbiB0aGUgZnVuY3Rpb24gaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHNlY3VyaXR5IGRlc2NyaXB0b3IgaW5zZXJ0aW9uIOKAkyBhbmQgY29uc2lkZXJpbmcgYE5URlMzX0ZTYCBpcyBlbmFibGVkLCBJJiMzOTttIGdvaW5nIHRvIGZsYWcgdGhpcyBhcyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy4gSSBtZWFuLCBtZW1vcnkgbGVha3MgaW4gaW5kZXggbWFuYWdlbWVudD8gVGhhdCYjMzk7cyBwcmltZSBmdXp6aW5nIHRlcnJpdG9yeS4gSnVzdCB0byBiZSBjb21wbGV0ZWx5IHN1cmUsIEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0byBtYWtlIHN1cmUgYGluZHhfZmluZF9zb3J0YCBpcyB0aGUgKm9ubHkqIGZ1bmN0aW9uIGltcGFjdGVkLCBidXQgSSYjMzk7bSBmZWVsaW5nIGNvbmZpZGVudCBhYm91dCB0aGlzIG9uZS4gTXkgY2FsbCBpcyBgV29ydGhGdXp6aW5nPXRydWVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrZnJlZVxcKG4tXHUwMDNlaW5kZXhcXCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzMy9pbmRleC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMzL2luZGV4LmM9MTI0ND1pbnQgaW5keF9maW5kX3NvcnQoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcbi0tXG5mcy9udGZzMy9pbmRleC5jLTEzMjctXHRcdFx0Zm5kX3BvcChmbmQpO1xuZnMvbnRmczMvaW5kZXguYzoxMzI4Olx0XHRcdGtmcmVlKG4tXHUwMDNlaW5kZXgpO1xuZnMvbnRmczMvaW5kZXguYy0xMzI5LVx0XHRcdGtmcmVlKG4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjEzMQoJCQkJCQkJb3V0cHV0OiAxMTUKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIE1vZGlmaWNhdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgZm9jdXMgaXMgcmVhbGx5IG9uIGBpbmR4X2ZpbmRfc29ydGAuIFRoYXQmIzM5O3MgdGhlIG9ubHkgZnVuY3Rpb24gdW5kZXJnb2luZyBhIGNoYW5nZS4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3csIGtlZXBzIHRoZSBzY29wZSBvZiBpbnZlc3RpZ2F0aW9uIHRpZ2h0ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCYjMzk7cyBiZWluZyBkb25lIHdpdGhpbiBgaW5keF9maW5kX3NvcnRgLCBidXQgYXQgbGVhc3QgSSYjMzk7bSBub3QgZGVhbGluZyB3aXRoIGEgcmlwcGxlIGVmZmVjdCBhY3Jvc3MgbXVsdGlwbGUgbW9kdWxlcy4gSSBzaG91bGQgcHJvYmFibHkgbGFiZWwgdGhlIG91dHB1dCBmcm9tIHRoZSBmdW5jdGlvbiBhcyBgc2V0LXJlc3VsdHNgLCBvciBzb21ldGhpbmcgZXF1YWxseSBkZXNjcmlwdGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTY6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05URlMzX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW5keF9maW5kX3NvcnQmIzM0OywKICAgICYjMzQ7bnRmc19pbnNlcnRfc2VjdXJpdHkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiBgaW5keF9maW5kX3NvcnRgIHdpdGhpbiB0aGUgTlRGUzMgZmlsZXN5c3RlbSBkcml2ZXIgYnkgZnJlZWluZyBgbi1cdTAwM2VpbmRleGAgYmVmb3JlIGBuYCB3aGVuIHBvcHBpbmcgYSBsZXZlbCBmcm9tIHRoZSBmaW5kIHN0YXRlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgZmlsZXN5c3RlbSBsb2dpYywgc3BlY2lmaWNhbGx5IGR1cmluZyBpbmRleCBsb29rdXBzIGFuZCBzZWN1cml0eSBkZXNjcmlwdG9yIGluc2VydGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlRGUzNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpbmR4X2ZpbmRfc29ydCYjMzQ7LAogICAgJiMzNDtudGZzX2luc2VydF9zZWN1cml0eSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIGBpbmR4X2ZpbmRfc29ydGAgd2l0aGluIHRoZSBOVEZTMyBmaWxlc3lzdGVtIGRyaXZlciBieSBmcmVlaW5nIGBuLVx1MDAzZWluZGV4YCBiZWZvcmUgYG5gIHdoZW4gcG9wcGluZyBhIGxldmVsIGZyb20gdGhlIGZpbmQgc3RhdGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBmaWxlc3lzdGVtIGxvZ2ljLCBzcGVjaWZpY2FsbHkgZHVyaW5nIGluZGV4IGxvb2t1cHMgYW5kIHNlY3VyaXR5IGRlc2NyaXB0b3IgaW5zZXJ0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjVUMTY6NDI6NTQuNjAxNTAwOTM5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwMTg1OTI3NDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5URlMzX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW5keF9maW5kX3NvcnRcIixcbiAgICBcIm50ZnNfaW5zZXJ0X3NlY3VyaXR5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiBgaW5keF9maW5kX3NvcnRgIHdpdGhpbiB0aGUgTlRGUzMgZmlsZXN5c3RlbSBkcml2ZXIgYnkgZnJlZWluZyBgbi1cXHUwMDNlaW5kZXhgIGJlZm9yZSBgbmAgd2hlbiBwb3BwaW5nIGEgbGV2ZWwgZnJvbSB0aGUgZmluZCBzdGF0ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGZpbGVzeXN0ZW0gbG9naWMsIHNwZWNpZmljYWxseSBkdXJpbmcgaW5kZXggbG9va3VwcyBhbmQgc2VjdXJpdHkgZGVzY3JpcHRvciBpbnNlcnRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE2OjQyOjU0LjYwMTUwODAwOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc1NjUwNTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYWMyNjBhYThlODFjNWZjMTgzMDc0YTFiZmI5NTM0MTE1NTA1MTgzMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCAyNSAxNjo0Mjo1MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9udGZzMy9pbmRleC5jIGIvZnMvbnRmczMvaW5kZXguY1xcbmluZGV4IDRhZmFjZmM2ZmY4OTMwLi42ODk3MTJkMzQ2M2Q0MSAxMDA2NDRcXG4tLS0gYS9mcy9udGZzMy9pbmRleC5jXFxuKysrIGIvZnMvbnRmczMvaW5kZXguY1xcbkBAIC0xMzI1LDYgKzEzMjUsNyBAQCBpbnQgaW5keF9maW5kX3NvcnQoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcXG4gXFx0XFx0LyogUG9wIG9uZSBsZXZlbC4gKi9cXG4gXFx0XFx0aWYgKG4pIHtcXG4gXFx0XFx0XFx0Zm5kX3BvcChmbmQpO1xcbitcXHRcXHRcXHRrZnJlZShuLVxcdTAwM2VpbmRleCk7XFxuIFxcdFxcdFxcdGtmcmVlKG4pO1xcbiBcXHRcXHR9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNjo0Mjo1NS4yODAwOTkyMzNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDk1MDczMTUyMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlRGUzNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpbmR4X2ZpbmRfc29ydFwiLFxuICAgIFwibnRmc19pbnNlcnRfc2VjdXJpdHlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIGBpbmR4X2ZpbmRfc29ydGAgd2l0aGluIHRoZSBOVEZTMyBmaWxlc3lzdGVtIGRyaXZlciBieSBmcmVlaW5nIGBuLVxcdTAwM2VpbmRleGAgYmVmb3JlIGBuYCB3aGVuIHBvcHBpbmcgYSBsZXZlbCBmcm9tIHRoZSBmaW5kIHN0YXRlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgZmlsZXN5c3RlbSBsb2dpYywgc3BlY2lmaWNhbGx5IGR1cmluZyBpbmRleCBsb29rdXBzIGFuZCBzZWN1cml0eSBkZXNjcmlwdG9yIGluc2VydGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYWMyNjBhYThlODFjNWZjMTgzMDc0YTFiZmI5NTM0MTE1NTA1MTgzMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDI1IDE2OjQyOjUyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvbnRmczMvaW5kZXguYyBiL2ZzL250ZnMzL2luZGV4LmNcbmluZGV4IDRhZmFjZmM2ZmY4OTMwLi42ODk3MTJkMzQ2M2Q0MSAxMDA2NDRcbi0tLSBhL2ZzL250ZnMzL2luZGV4LmNcbisrKyBiL2ZzL250ZnMzL2luZGV4LmNcbkBAIC0xMzI1LDYgKzEzMjUsNyBAQCBpbnQgaW5keF9maW5kX3NvcnQoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcbiBcdFx0LyogUG9wIG9uZSBsZXZlbC4gKi9cbiBcdFx0aWYgKG4pIHtcbiBcdFx0XHRmbmRfcG9wKGZuZCk7XG4rXHRcdFx0a2ZyZWUobi1cdTAwM2VpbmRleCk7XG4gXHRcdFx0a2ZyZWUobik7XG4gXHRcdH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE2OjQyOjU1LjI4MDEwMjA0M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NjI2Mzg1NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOVEZTMyBJbmRleCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGFyZ2V0aW5nIGBmcy9udGZzMy9pbmRleC5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgbW9kaWZpY2F0aW9uIGluIGBpbmR4X2ZpbmRfc29ydGAgY2F1Z2h0IG15IGV5ZS4gSXQgYXBwZWFycyB0aGV5J3ZlIGFkZGVkIGBrZnJlZShuLVx1MDAzZWluZGV4KTtgIHJpZ2h0IGJlZm9yZSB0aGUgYGtmcmVlKG4pO2AgY2FsbC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkFoLCB0aGV5J3JlIGxpa2VseSBkZWFsaW5nIHdpdGggYSBtZW1vcnkgbGVhayBvciBhIGRhbmdsaW5nIHBvaW50ZXIgaXNzdWUuXCIgVGhpcyBpbXBsaWVzIHRoYXQgYG4tXHUwMDNlaW5kZXhgIGlzIGxpa2VseSBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBidWZmZXIgd2l0aGluIHRoZSBgbmAgc3RydWN0dXJlIGFuZCBpcyBiZWluZyB1c2VkIHRvIHN0b3JlIGluZGV4IGRhdGEuIFRoZSBpbnRlbnQgaGVyZSBpcyB0byBleHBsaWNpdGx5IGRlYWxsb2NhdGUgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIGluZGV4IGRhdGEgYmVmb3JlIGZyZWVpbmcgdGhlIG5vZGUgaXRzZWxmLCB3aGljaCBpcyBzdGFuZGFyZCBwcmFjdGljZSB0byBwcmV2ZW50IG1lbW9yeSBjb3JydXB0aW9uLiBJIG5lZWQgdG8gZGl2ZSBkZWVwZXIgaW50byBgaW5keF9maW5kX3NvcnRgIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2UgYmV0dGVyLCB3aGF0IGBuYCBhbmQgYG4tXHUwMDNlaW5kZXhgIGFyZSwgYW5kIHdoeSB0aGlzIGFkZGl0aW9uYWwgYGtmcmVlYCB3YXMgZGVlbWVkIG5lY2Vzc2FyeS4gVGhpcyBjb3VsZCBiZSBhIGdvb2QgZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxOSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTY6NDI6NTguNzQyNzQ0MDdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI4Mzc2MDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluZHhfZmluZF9zb3J0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMzL2luZGV4LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmczMvaW5kZXguYz0xMTY5PWludCBpbmR4X2ZpbmQoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcXG4tLVxcbmZzL250ZnMzL2luZGV4LmMtMTI0My1cXG5mcy9udGZzMy9pbmRleC5jOjEyNDQ6aW50IGluZHhfZmluZF9zb3J0KHN0cnVjdCBudGZzX2luZGV4ICppbmR4LCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXFxuZnMvbnRmczMvaW5kZXguYy0xMjQ1LVxcdFxcdCAgIGNvbnN0IHN0cnVjdCBJTkRFWF9ST09UICpyb290LCBzdHJ1Y3QgTlRGU19ERSAqKmVudHJ5LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNjo0Mjo1OS4zNzExMjYyNTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzkxMTg0NzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgYGluZHhfZmluZF9zb3J0YCBmdW5jdGlvbiwga2VlcGluZyBpbiBtaW5kIEknbSBzdGVlcGVkIGluIHRoaXMgc29ydCBvZiB3b3JrOlxuXG4qKkRlY29uc3RydWN0aW5nIGBpbmR4X2ZpbmRfc29ydGAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBpbmR4X2ZpbmRfc29ydGAgd2l0aGluIGBmcy9udGZzMy9pbmRleC5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gaW5kZXhpbmcsIHBhcnRpY3VsYXJseSBob3cgaXQgaGFuZGxlcyB0aGUgY3J1Y2lhbCB0YXNrIG9mIHNvcnRpbmcgd2l0aGluIHRoZSBOVEZTMyBmaWxlIHN5c3RlbS4gSSBhbnRpY2lwYXRlIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkIGluIHRlcm1zIG9mIGluZGV4IG1hbmFnZW1lbnQ6IGxpa2VseSBpbnZvbHZlcyBjb21wYXJpc29ucyBvZiBrZXkgYXR0cmlidXRlcywgcGVyaGFwcyBhIGJpbmFyeSBzZWFyY2ggZm9yIGVmZmljaWVuY3ksIGFuZCBvZiBjb3Vyc2UsIHByb3BlciBoYW5kbGluZyBvZiBjb2xsaXNpb25zIG9yIGR1cGxpY2F0ZSBlbnRyaWVzIHdpdGhpbiB0aGUgaW5kZXggc3RydWN0dXJlcy4gSSBpbWFnaW5lIGl0J3MgY3J1Y2lhbCBmb3IgbG9va3VwcywgaW5zZXJ0aW9ucywgYW5kIGRlbGV0aW9ucy4gSSBzaG91bGQgYmUgYWJsZSB0byBkZWR1Y2UgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzLCBwcm9iYWJseSBCLXRyZWVzIG9yIHNpbWlsYXIgYmFsYW5jZWQgc3RydWN0dXJlcywgYnkgdHJhY2luZyBpdHMgZXhlY3V0aW9uIGZsb3cuIEkgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhpcyBmdW5jdGlvbiBhcyBpdCBpcyBrZXkgdG8gb3ZlcmFsbCBmaWxlc3lzdGVtIHN0YWJpbGl0eS4gSSdtIGtlZW4gdG8gc2VlIGlmIGl0IG1ha2VzIHVzZSBvZiBhbnkgb3B0aW1pemF0aW9ucywgbWF5YmUgY2FjaGluZyB0ZWNobmlxdWVzLCBvciBkZWZlcnJlZCB3cml0ZXMuIEkgYW50aWNpcGF0ZSBpdCB3aWxsIGJlIGludm9sdmVkIHdpdGggbWVtb3J5IGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiB0byBtYW5hZ2UgdGhlIGluZGV4IGRhdGEuIExldCdzIHNlZSBob3cgd2VsbCBpdCdzIHdyaXR0ZW4gYW5kIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBib3R0bGVuZWNrcyBvciBvcHBvcnR1bml0aWVzIGZvciBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NzMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNjo0MzowMi43NjIzMTM3ODhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODE0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvbnRmczMvaW5kZXguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjQ0LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI0NDpcXHRpbnQgaW5keF9maW5kX3NvcnQoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcXG4xMjQ1OlxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBJTkRFWF9ST09UICpyb290LCBzdHJ1Y3QgTlRGU19ERSAqKmVudHJ5LFxcbjEyNDY6XFx0XFx0XFx0ICAgc3RydWN0IG50ZnNfZm5kICpmbmQpXFxuMTI0NzpcXHR7XFxuMTI0ODpcXHRcXHRpbnQgZXJyO1xcbjEyNDk6XFx0XFx0c3RydWN0IGluZHhfbm9kZSAqbiA9IE5VTEw7XFxuMTI1MDpcXHRcXHRzdHJ1Y3QgTlRGU19ERSAqZTtcXG4xMjUxOlxcdFxcdHNpemVfdCBpdGVyID0gMDtcXG4xMjUyOlxcdFxcdGludCBsZXZlbCA9IGZuZC1cXHUwMDNlbGV2ZWw7XFxuMTI1MzpcXHRcXG4xMjU0OlxcdFxcdGlmICghKmVudHJ5KSB7XFxuMTI1NTpcXHRcXHRcXHQvKiBTdGFydCBmaW5kLiAqL1xcbjEyNTY6XFx0XFx0XFx0ZSA9IGhkcl9maXJzdF9kZShcXHUwMDI2cm9vdC1cXHUwMDNlaWhkcik7XFxuMTI1NzpcXHRcXHRcXHRpZiAoIWUpXFxuMTI1ODpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4xMjU5OlxcdFxcdFxcdGZuZF9jbGVhcihmbmQpO1xcbjEyNjA6XFx0XFx0XFx0Zm5kLVxcdTAwM2Vyb290X2RlID0gZTtcXG4xMjYxOlxcdFxcdH0gZWxzZSBpZiAoIWxldmVsKSB7XFxuMTI2MjpcXHRcXHRcXHRpZiAoZGVfaXNfbGFzdChmbmQtXFx1MDAzZXJvb3RfZGUpKSB7XFxuMTI2MzpcXHRcXHRcXHRcXHQqZW50cnkgPSBOVUxMO1xcbjEyNjQ6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTI2NTpcXHRcXHRcXHR9XFxuMTI2NjpcXHRcXG4xMjY3OlxcdFxcdFxcdGUgPSBoZHJfbmV4dF9kZShcXHUwMDI2cm9vdC1cXHUwMDNlaWhkciwgZm5kLVxcdTAwM2Vyb290X2RlKTtcXG4xMjY4OlxcdFxcdFxcdGlmICghZSlcXG4xMjY5OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEyNzA6XFx0XFx0XFx0Zm5kLVxcdTAwM2Vyb290X2RlID0gZTtcXG4xMjcxOlxcdFxcdH0gZWxzZSB7XFxuMTI3MjpcXHRcXHRcXHRuID0gZm5kLVxcdTAwM2Vub2Rlc1tsZXZlbCAtIDFdO1xcbjEyNzM6XFx0XFx0XFx0ZSA9IGZuZC1cXHUwMDNlZGVbbGV2ZWwgLSAxXTtcXG4xMjc0OlxcdFxcbjEyNzU6XFx0XFx0XFx0aWYgKGRlX2lzX2xhc3QoZSkpXFxuMTI3NjpcXHRcXHRcXHRcXHRnb3RvIHBvcF9sZXZlbDtcXG4xMjc3OlxcdFxcbjEyNzg6XFx0XFx0XFx0ZSA9IGhkcl9uZXh0X2RlKFxcdTAwMjZuLVxcdTAwM2VpbmRleC1cXHUwMDNlaWhkciwgZSk7XFxuMTI3OTpcXHRcXHRcXHRpZiAoIWUpXFxuMTI4MDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMjgxOlxcdFxcbjEyODI6XFx0XFx0XFx0Zm5kLVxcdTAwM2VkZVtsZXZlbCAtIDFdID0gZTtcXG4xMjgzOlxcdFxcdH1cXG4xMjg0OlxcdFxcbjEyODU6XFx0XFx0LyogSnVzdCB0byBhdm9pZCB0cmVlIGN5Y2xlLiAqL1xcbjEyODY6XFx0bmV4dF9pdGVyOlxcbjEyODc6XFx0XFx0aWYgKGl0ZXIrKyBcXHUwMDNlPSAxMDAwKVxcbjEyODg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTI4OTpcXHRcXG4xMjkwOlxcdFxcdHdoaWxlIChkZV9oYXNfdmNuX2V4KGUpKSB7XFxuMTI5MTpcXHRcXHRcXHRpZiAobGUxNl90b19jcHUoZS1cXHUwMDNlc2l6ZSkgXFx1MDAzY1xcbjEyOTI6XFx0XFx0XFx0ICAgIHNpemVvZihzdHJ1Y3QgTlRGU19ERSkgKyBzaXplb2YodTY0KSkge1xcbjEyOTM6XFx0XFx0XFx0XFx0aWYgKG4pIHtcXG4xMjk0OlxcdFxcdFxcdFxcdFxcdGZuZF9wb3AoZm5kKTtcXG4xMjk1OlxcdFxcdFxcdFxcdFxcdGtmcmVlKG4pO1xcbjEyOTY6XFx0XFx0XFx0XFx0fVxcbjEyOTc6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTI5ODpcXHRcXHRcXHR9XFxuMTI5OTpcXHRcXG4xMzAwOlxcdFxcdFxcdC8qIFJlYWQgbmV4dCBsZXZlbC4gKi9cXG4xMzAxOlxcdFxcdFxcdGVyciA9IGluZHhfcmVhZChpbmR4LCBuaSwgZGVfZ2V0X3ZibihlKSwgXFx1MDAyNm4pO1xcbjEzMDI6XFx0XFx0XFx0aWYgKGVycilcXG4xMzAzOlxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTMwNDpcXHRcXG4xMzA1OlxcdFxcdFxcdC8qIFRyeSBuZXh0IGxldmVsLiAqL1xcbjEzMDY6XFx0XFx0XFx0ZSA9IGhkcl9maXJzdF9kZShcXHUwMDI2bi1cXHUwMDNlaW5kZXgtXFx1MDAzZWloZHIpO1xcbjEzMDc6XFx0XFx0XFx0aWYgKCFlKSB7XFxuMTMwODpcXHRcXHRcXHRcXHRrZnJlZShuKTtcXG4xMzA5OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEzMTA6XFx0XFx0XFx0fVxcbjEzMTE6XFx0XFxuMTMxMjpcXHRcXHRcXHRmbmRfcHVzaChmbmQsIG4sIGUpO1xcbjEzMTM6XFx0XFx0fVxcbjEzMTQ6XFx0XFxuMTMxNTpcXHRcXHRpZiAobGUxNl90b19jcHUoZS1cXHUwMDNlc2l6ZSkgXFx1MDAzZSBzaXplb2Yoc3RydWN0IE5URlNfREUpKSB7XFxuMTMxNjpcXHRcXHRcXHQqZW50cnkgPSBlO1xcbjEzMTc6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTMxODpcXHRcXHR9XFxuMTMxOTpcXHRcXG4xMzIwOlxcdHBvcF9sZXZlbDpcXG4xMzIxOlxcdFxcdGZvciAoOzspIHtcXG4xMzIyOlxcdFxcdFxcdGlmICghZGVfaXNfbGFzdChlKSlcXG4xMzIzOlxcdFxcdFxcdFxcdGdvdG8gbmV4dF9pdGVyO1xcbjEzMjQ6XFx0XFxuMTMyNTpcXHRcXHRcXHQvKiBQb3Agb25lIGxldmVsLiAqL1xcbjEzMjY6XFx0XFx0XFx0aWYgKG4pIHtcXG4xMzI3OlxcdFxcdFxcdFxcdGZuZF9wb3AoZm5kKTtcXG4xMzI4OlxcdFxcdFxcdFxcdGtmcmVlKG4tXFx1MDAzZWluZGV4KTtcXG4xMzI5OlxcdFxcdFxcdFxcdGtmcmVlKG4pO1xcbjEzMzA6XFx0XFx0XFx0fVxcbjEzMzE6XFx0XFxuMTMzMjpcXHRcXHRcXHRsZXZlbCA9IGZuZC1cXHUwMDNlbGV2ZWw7XFxuMTMzMzpcXHRcXG4xMzM0OlxcdFxcdFxcdGlmIChsZXZlbCkge1xcbjEzMzU6XFx0XFx0XFx0XFx0biA9IGZuZC1cXHUwMDNlbm9kZXNbbGV2ZWwgLSAxXTtcXG4xMzM2OlxcdFxcdFxcdFxcdGUgPSBmbmQtXFx1MDAzZWRlW2xldmVsIC0gMV07XFxuMTMzNzpcXHRcXHRcXHR9IGVsc2UgaWYgKGZuZC1cXHUwMDNlcm9vdF9kZSkge1xcbjEzMzg6XFx0XFx0XFx0XFx0biA9IE5VTEw7XFxuMTMzOTpcXHRcXHRcXHRcXHRlID0gZm5kLVxcdTAwM2Vyb290X2RlO1xcbjEzNDA6XFx0XFx0XFx0XFx0Zm5kLVxcdTAwM2Vyb290X2RlID0gTlVMTDtcXG4xMzQxOlxcdFxcdFxcdH0gZWxzZSB7XFxuMTM0MjpcXHRcXHRcXHRcXHQqZW50cnkgPSBOVUxMO1xcbjEzNDM6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE2OjQzOjAyLjc2MjYxOTk2OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNTA3NzU1MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBNZW1vcnkgTGVhayBGaXggaW4gYGluZHhfZmluZF9zb3J0YCoqXG5cbkFscmlnaHQsIHNvIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYGtmcmVlKG4tXHUwMDNlaW5kZXgpO2AgY2FsbCBiZWZvcmUgdGhlIGBrZnJlZShuKTtgIGluIGBpbmR4X2ZpbmRfc29ydGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldhaXQgYSBtaW51dGUsIGlzIHRoYXQgKnJlYWxseSogbmVlZGVkP1wiLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrLiBUaGUgaW1wbGljYXRpb24gaXMgdGhhdCBgbi1cdTAwM2VpbmRleGAgaXMgYSBzZXBhcmF0ZWx5IGFsbG9jYXRlZCBwaWVjZSBvZiBtZW1vcnkuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneSBoZXJlLiBBaCwgcmlnaHQsIGBpbmR4X3JlYWRgIGlzIHRoZSBrZXkgZnVuY3Rpb24gdG8gZXhhbWluZS4gVGhhdCdzIHdoZXJlIGBuYCBhbmQsIHNwZWNpZmljYWxseSwgYG4tXHUwMDNlaW5kZXhgIHNob3VsZCBiZSBhbGxvY2F0ZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBhc3N1bXB0aW9uIGhvbGRzIHRydWUuIEkgaGF2ZSB0byBjaGVjayB0aGUgY2FsbCBjaGFpbiBhbmQgdmVyaWZ5IHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneS4gTGV0IG1lIGp1bXAgaW50byBgaW5keF9yZWFkYCBhbmQgc2VlIHdoYXQncyBnb2luZyBvbi4uLiBJIG5lZWQgdG8gc2VlIGlmIGl0IGFsbG9jYXRlcyBib3RoIGBuYCBhbmQgYG4tXHUwMDNlaW5kZXhgLiBUaGlzIHdpbGwgZGV0ZXJtaW5lIGlmIHRoZSBwYXRjaCBpcyBhIHZhbGlkIGZpeCBvciBhIHJlZHVuZGFudCwgb3IgZXZlbiwgcG90ZW50aWFsbHksIGRhbmdlcm91cyBjaGFuZ2UuIExldCdzIHNlZSB3aGF0IGBpbmR4X3JlYWRgIGlzIGRvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTU4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNjo0MzowNi4xMTMzOTc5NzFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1ODcyMzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluZHhfcmVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzMy9pbmRleC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMzL2luZGV4LmM9MTA1Mz1zdGF0aWMgaW50IGluZHhfd3JpdGUoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcXG4tLVxcbmZzL250ZnMzL2luZGV4LmMtMTA2MS0vKlxcbmZzL250ZnMzL2luZGV4LmM6MTA2MjogKiBpbmR4X3JlYWRfcmFcXG5mcy9udGZzMy9pbmRleC5jLTEwNjMtICpcXG4tLVxcbmZzL250ZnMzL2luZGV4LmMtMTA2Ny0gKi9cXG5mcy9udGZzMy9pbmRleC5jOjEwNjg6aW50IGluZHhfcmVhZF9yYShzdHJ1Y3QgbnRmc19pbmRleCAqaW5keCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBDTFNUIHZibixcXG5mcy9udGZzMy9pbmRleC5jLTEwNjktXFx0XFx0IHN0cnVjdCBpbmR4X25vZGUgKipub2RlLCBzdHJ1Y3QgZmlsZV9yYV9zdGF0ZSAqcmEpXFxuLS1cXG5mcy9udGZzMy9pbmRleC5jPTExNjk9aW50IGluZHhfZmluZChzdHJ1Y3QgbnRmc19pbmRleCAqaW5keCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxcbi0tXFxuZnMvbnRmczMvaW5kZXguYy0xMjE3LVxcdFxcdC8qIFJlYWQgbmV4dCBsZXZlbC4gKi9cXG5mcy9udGZzMy9pbmRleC5jOjEyMTg6XFx0XFx0ZXJyID0gaW5keF9yZWFkKGluZHgsIG5pLCBkZV9nZXRfdmJuKGUpLCBcXHUwMDI2bm9kZSk7XFxuZnMvbnRmczMvaW5kZXguYy0xMjE5LVxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbmZzL250ZnMzL2luZGV4LmM9MTI0ND1pbnQgaW5keF9maW5kX3NvcnQoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcXG4tLVxcbmZzL250ZnMzL2luZGV4LmMtMTMwMC1cXHRcXHQvKiBSZWFkIG5leHQgbGV2ZWwuICovXFxuZnMvbnRmczMvaW5kZXguYzoxMzAxOlxcdFxcdGVyciA9IGluZHhfcmVhZChpbmR4LCBuaSwgZGVfZ2V0X3ZibihlKSwgXFx1MDAyNm4pO1xcbmZzL250ZnMzL2luZGV4LmMtMTMwMi1cXHRcXHRpZiAoZXJyKVxcbi0tXFxuZnMvbnRmczMvaW5kZXguYz0xMzU1PWludCBpbmR4X2ZpbmRfcmF3KHN0cnVjdCBudGZzX2luZGV4ICppbmR4LCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXFxuLS1cXG5mcy9udGZzMy9pbmRleC5jLTE0NDUtXFx0XFx0LyogUmVhZCBidWZmZXIgaW50byBtZW1vcnkuICovXFxuZnMvbnRmczMvaW5kZXguYzoxNDQ2OlxcdFxcdGVyciA9IGluZHhfcmVhZChpbmR4LCBuaSwgbmV4dF91c2VkX3ZibiwgXFx1MDAyNm4pO1xcbmZzL250ZnMzL2luZGV4LmMtMTQ0Ny1cXHRcXHRpZiAoZXJyKVxcbi0tXFxuZnMvbnRmczMvaW5kZXguYz0yMDk3PXN0YXRpYyBzdHJ1Y3QgaW5keF9ub2RlICppbmR4X2ZpbmRfYnVmZmVyKHN0cnVjdCBudGZzX2luZGV4ICppbmR4LFxcbi0tXFxuZnMvbnRmczMvaW5kZXguYy0yMTMwLVxcdFxcdGlmIChkZV9oYXNfdmNuX2V4KGUpKSB7XFxuZnMvbnRmczMvaW5kZXguYzoyMTMxOlxcdFxcdFxcdGVyciA9IGluZHhfcmVhZChpbmR4LCBuaSwgZGVfZ2V0X3ZibihlKSwgXFx1MDAyNm4pO1xcbmZzL250ZnMzL2luZGV4LmMtMjEzMi1cXHRcXHRcXHRpZiAoZXJyKVxcbi0tXFxuZnMvbnRmczMvaW5kZXguYz0yMjE2PXN0YXRpYyBpbnQgaW5keF9mcmVlX2NoaWxkcmVuKHN0cnVjdCBudGZzX2luZGV4ICppbmR4LCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXFxuLS1cXG5mcy9udGZzMy9pbmRleC5jLTIyMjQtXFxuZnMvbnRmczMvaW5kZXguYzoyMjI1OlxcdGVyciA9IGluZHhfcmVhZChpbmR4LCBuaSwgdmJuLCBcXHUwMDI2bik7XFxuZnMvbnRmczMvaW5kZXguYy0yMjI2LVxcdGlmIChlcnIpXFxuLS1cXG5mcy9udGZzMy9pbmRleC5jPTIyNjY9c3RhdGljIGludCBpbmR4X2dldF9lbnRyeV90b19yZXBsYWNlKHN0cnVjdCBudGZzX2luZGV4ICppbmR4LFxcbi0tXFxuZnMvbnRmczMvaW5kZXguYy0yMjg0LVxcdFxcdG4gPSBOVUxMO1xcbmZzL250ZnMzL2luZGV4LmM6MjI4NTpcXHRcXHRlcnIgPSBpbmR4X3JlYWQoaW5keCwgbmksIHZibiwgXFx1MDAyNm4pO1xcbmZzL250ZnMzL2luZGV4LmMtMjI4Ni1cXHRcXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNjo0MzowNi4yODkyNzU4MDJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzYzODYyNDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBpbmR4X3JlYWRgIFNvdXJjZSoqXG5cbk9rYXksIGxldCdzIHRyYWNlIHRoaXMgYGluZHhfcmVhZGAgZnVuY3Rpb24uIEJhc2VkIG9uIHRoZSBjb250ZXh0LCBJIHN1c3BlY3QgaXQncyBub3QgYSBzdGFuZGFyZCBsaWJyYXJ5IGZ1bmN0aW9uLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHBpbnBvaW50IGl0cyBkZWZpbml0aW9uLiBJcyB0aGlzIGxpa2VseSBhIG1hY3JvLCBvciBwZXJoYXBzIGRlZmluZWQgaW4gYW4gaW5jbHVkZWQgaGVhZGVyIGZpbGU/IFRoZSBuYW1pbmcgY29udmVudGlvbiBzdWdnZXN0cyBpdCBtaWdodCBiZSBpbnRlcm5hbCB0byB0aGUgcHJvamVjdCBvciBsaWJyYXJ5IEknbSB3b3JraW5nIHdpdGgsIHNvIGRpZ2dpbmcgaW50byB0aGUgcHJvamVjdCdzIGluY2x1ZGUgcGF0aHMgc2VlbXMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IGhvdyB0aGlzIGlzIGJlaW5nIHVzZWQgdG8gZWZmZWN0aXZlbHkgZGVidWcgaXRzIGJlaGF2aW91ci5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ1MywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE2OjQzOjA5LjA1MzE0MDkxNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0NjAyNDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluZHhfcmVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzMy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmczMvZGlyLmM9NDA0PXN0YXRpYyBpbnQgbnRmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcXG4tLVxcbmZzL250ZnMzL2Rpci5jLTU0Mi1cXG5mcy9udGZzMy9kaXIuYzo1NDM6XFx0XFx0ZXJyID0gaW5keF9yZWFkX3JhKFxcdTAwMjZuaS1cXHUwMDNlZGlyLCBuaSwgYml0IFxcdTAwM2NcXHUwMDNjIG5pLVxcdTAwM2VkaXIuaWR4MnZibl9iaXRzLFxcbmZzL250ZnMzL2Rpci5jLTU0NC1cXHRcXHRcXHRcXHQgICBcXHUwMDI2bm9kZSwgXFx1MDAyNmZpbGUtXFx1MDAzZWZfcmEpO1xcbi0tXFxuZnMvbnRmczMvZGlyLmM9NjAwPXN0YXRpYyBpbnQgbnRmc19kaXJfY291bnQoc3RydWN0IGlub2RlICpkaXIsIGJvb2wgKmlzX2VtcHR5LCBzaXplX3QgKmRpcnMsXFxuLS1cXG5mcy9udGZzMy9kaXIuYy02NjctXFxuZnMvbnRmczMvZGlyLmM6NjY4OlxcdFxcdGVyciA9IGluZHhfcmVhZChcXHUwMDI2bmktXFx1MDAzZWRpciwgbmksIGJpdCBcXHUwMDNjXFx1MDAzYyBuaS1cXHUwMDNlZGlyLmlkeDJ2Ym5fYml0cyxcXG5mcy9udGZzMy9kaXIuYy02NjktXFx0XFx0XFx0XFx0XFx1MDAyNm5vZGUpO1xcbi0tXFxuZnMvbnRmczMvaW5kZXguYz0xMDUzPXN0YXRpYyBpbnQgaW5keF93cml0ZShzdHJ1Y3QgbnRmc19pbmRleCAqaW5keCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxcbi0tXFxuZnMvbnRmczMvaW5kZXguYy0xMDYxLS8qXFxuZnMvbnRmczMvaW5kZXguYzoxMDYyOiAqIGluZHhfcmVhZF9yYVxcbmZzL250ZnMzL2luZGV4LmMtMTA2My0gKlxcbi0tXFxuZnMvbnRmczMvaW5kZXguYy0xMDY3LSAqL1xcbmZzL250ZnMzL2luZGV4LmM6MTA2ODppbnQgaW5keF9yZWFkX3JhKHN0cnVjdCBudGZzX2luZGV4ICppbmR4LCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIENMU1QgdmJuLFxcbmZzL250ZnMzL2luZGV4LmMtMTA2OS1cXHRcXHQgc3RydWN0IGluZHhfbm9kZSAqKm5vZGUsIHN0cnVjdCBmaWxlX3JhX3N0YXRlICpyYSlcXG4tLVxcbmZzL250ZnMzL2luZGV4LmM9MTE2OT1pbnQgaW5keF9maW5kKHN0cnVjdCBudGZzX2luZGV4ICppbmR4LCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXFxuLS1cXG5mcy9udGZzMy9pbmRleC5jLTEyMTctXFx0XFx0LyogUmVhZCBuZXh0IGxldmVsLiAqL1xcbmZzL250ZnMzL2luZGV4LmM6MTIxODpcXHRcXHRlcnIgPSBpbmR4X3JlYWQoaW5keCwgbmksIGRlX2dldF92Ym4oZSksIFxcdTAwMjZub2RlKTtcXG5mcy9udGZzMy9pbmRleC5jLTEyMTktXFx0XFx0aWYgKGVycikge1xcbi0tXFxuZnMvbnRmczMvaW5kZXguYz0xMjQ0PWludCBpbmR4X2ZpbmRfc29ydChzdHJ1Y3QgbnRmc19pbmRleCAqaW5keCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxcbi0tXFxuZnMvbnRmczMvaW5kZXguYy0xMzAwLVxcdFxcdC8qIFJlYWQgbmV4dCBsZXZlbC4gKi9cXG5mcy9udGZzMy9pbmRleC5jOjEzMDE6XFx0XFx0ZXJyID0gaW5keF9yZWFkKGluZHgsIG5pLCBkZV9nZXRfdmJuKGUpLCBcXHUwMDI2bik7XFxuZnMvbnRmczMvaW5kZXguYy0xMzAyLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5mcy9udGZzMy9pbmRleC5jPTEzNTU9aW50IGluZHhfZmluZF9yYXcoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcXG4tLVxcbmZzL250ZnMzL2luZGV4LmMtMTQ0NS1cXHRcXHQvKiBSZWFkIGJ1ZmZlciBpbnRvIG1lbW9yeS4gKi9cXG5mcy9udGZzMy9pbmRleC5jOjE0NDY6XFx0XFx0ZXJyID0gaW5keF9yZWFkKGluZHgsIG5pLCBuZXh0X3VzZWRfdmJuLCBcXHUwMDI2bik7XFxuZnMvbnRmczMvaW5kZXguYy0xNDQ3LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5mcy9udGZzMy9pbmRleC5jPTIwOTc9c3RhdGljIHN0cnVjdCBpbmR4X25vZGUgKmluZHhfZmluZF9idWZmZXIoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsXFxuLS1cXG5mcy9udGZzMy9pbmRleC5jLTIxMzAtXFx0XFx0aWYgKGRlX2hhc192Y25fZXgoZSkpIHtcXG5mcy9udGZzMy9pbmRleC5jOjIxMzE6XFx0XFx0XFx0ZXJyID0gaW5keF9yZWFkKGluZHgsIG5pLCBkZV9nZXRfdmJuKGUpLCBcXHUwMDI2bik7XFxuZnMvbnRmczMvaW5kZXguYy0yMTMyLVxcdFxcdFxcdGlmIChlcnIpXFxuLS1cXG5mcy9udGZzMy9pbmRleC5jPTIyMTY9c3RhdGljIGludCBpbmR4X2ZyZWVfY2hpbGRyZW4oc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcXG4tLVxcbmZzL250ZnMzL2luZGV4LmMtMjIyNC1cXG5mcy9udGZzMy9pbmRleC5jOjIyMjU6XFx0ZXJyID0gaW5keF9yZWFkKGluZHgsIG5pLCB2Ym4sIFxcdTAwMjZuKTtcXG5mcy9udGZzMy9pbmRleC5jLTIyMjYtXFx0aWYgKGVycilcXG4tLVxcbmZzL250ZnMzL2luZGV4LmM9MjI2Nj1zdGF0aWMgaW50IGluZHhfZ2V0X2VudHJ5X3RvX3JlcGxhY2Uoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsXFxuLS1cXG5mcy9udGZzMy9pbmRleC5jLTIyODQtXFx0XFx0biA9IE5VTEw7XFxuZnMvbnRmczMvaW5kZXguYzoyMjg1OlxcdFxcdGVyciA9IGluZHhfcmVhZChpbmR4LCBuaSwgdmJuLCBcXHUwMDI2bik7XFxuZnMvbnRmczMvaW5kZXguYy0yMjg2LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5mcy9udGZzMy9udGZzX2ZzLmg9NzQ2PXN0cnVjdCBJTkRFWF9ST09UICppbmR4X2dldF9yb290KHN0cnVjdCBudGZzX2luZGV4ICppbmR4LCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXFxuZnMvbnRmczMvbnRmc19mcy5oLTc0Ny1cXHRcXHRcXHRcXHQgc3RydWN0IEFUVFJJQiAqKmF0dHIsIHN0cnVjdCBtZnRfaW5vZGUgKiptaSk7XFxuZnMvbnRmczMvbnRmc19mcy5oOjc0ODppbnQgaW5keF9yZWFkX3JhKHN0cnVjdCBudGZzX2luZGV4ICppZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSwgQ0xTVCB2Ym4sXFxuZnMvbnRmczMvbnRmc19mcy5oLTc0OS1cXHRcXHQgc3RydWN0IGluZHhfbm9kZSAqKm5vZGUsIHN0cnVjdCBmaWxlX3JhX3N0YXRlICpyYSk7XFxuZnMvbnRmczMvbnRmc19mcy5oOjc1MDpzdGF0aWMgaW5saW5lIGludCBpbmR4X3JlYWQoc3RydWN0IG50ZnNfaW5kZXggKmlkeCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxcbmZzL250ZnMzL250ZnNfZnMuaC03NTEtXFx0XFx0XFx0ICAgIENMU1QgdmJuLCBzdHJ1Y3QgaW5keF9ub2RlICoqbm9kZSlcXG5mcy9udGZzMy9udGZzX2ZzLmgtNzUyLXtcXG5mcy9udGZzMy9udGZzX2ZzLmg6NzUzOlxcdHJldHVybiBpbmR4X3JlYWRfcmEoaWR4LCBuaSwgdmJuLCBub2RlLCBOVUxMKTtcXG5mcy9udGZzMy9udGZzX2ZzLmgtNzU0LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTY6NDM6MDkuMTg3NzUwMDc5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNzE0NDY1OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgSW5kZXggUmVhZCBGdW5jdGlvbiBDYWxsKipcblxuUmlnaHQsIHNvIGBpbmR4X3JlYWRgIGlzIGNsZWFybHkgYW4gaW5saW5lIGZ1bmN0aW9uLiBNYWtlcyBzZW5zZSDigJMgcHJvYmFibHkgb3B0aW1pemVkIGZvciBmcmVxdWVudCBjYWxscywgbWF5YmU/IEl0J3MgaW1tZWRpYXRlbHkgZXZpZGVudCB0aGF0IGBpbmR4X3JlYWRgIGlzIGp1c3QgYSB3cmFwcGVyIGZvciBgaW5keF9yZWFkX3JhYC4gT2theSwgbGV0J3MgZHJpbGwgZG93biBpbnRvIGBpbmR4X3JlYWRfcmFgIHRoZW4uIEdpdmVuIHRoZSBjb250ZXh0LCBteSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZmluZCBpdHMgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBOVEZTMyBmaWxlc3lzdGVtIGRyaXZlci4gVGhhdCBzaG91bGQgYmUgd2l0aGluIGBmcy9udGZzMy9pbmRleC5jYCDigJMgdGhhdCdzIHdoZXJlIEkgd291bGQgZXhwZWN0IGFsbCB0aGUgaW5kZXgtcmVsYXRlZCBmdW5jdGlvbmFsaXR5IHRvIHJlc2lkZS4gVGltZSB0byBvcGVuIHRoYXQgZmlsZSBhbmQgZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhlIHJlYWQtYWhlYWQgbWVjaGFuaXNtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTU5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTY6NDM6MTIuNTU5MTk5NjMxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNjgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9udGZzMy9pbmRleC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNjgsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDY4OlxcdGludCBpbmR4X3JlYWRfcmEoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSwgQ0xTVCB2Ym4sXFxuMTA2OTpcXHRcXHRcXHQgc3RydWN0IGluZHhfbm9kZSAqKm5vZGUsIHN0cnVjdCBmaWxlX3JhX3N0YXRlICpyYSlcXG4xMDcwOlxcdHtcXG4xMDcxOlxcdFxcdGludCBlcnI7XFxuMTA3MjpcXHRcXHRzdHJ1Y3QgSU5ERVhfQlVGRkVSICppYjtcXG4xMDczOlxcdFxcdHN0cnVjdCBudGZzX3NiX2luZm8gKnNiaSA9IG5pLVxcdTAwM2VtaS5zYmk7XFxuMTA3NDpcXHRcXHRzdHJ1Y3QgcnVuc190cmVlICpydW4gPSBcXHUwMDI2aW5keC1cXHUwMDNlYWxsb2NfcnVuO1xcbjEwNzU6XFx0XFx0c3RydWN0IHJ3X3NlbWFwaG9yZSAqbG9jayA9IFxcdTAwMjZpbmR4LVxcdTAwM2VydW5fbG9jaztcXG4xMDc2OlxcdFxcdHU2NCB2Ym8gPSAodTY0KXZibiBcXHUwMDNjXFx1MDAzYyBpbmR4LVxcdTAwM2V2Ym4ydmJvX2JpdHM7XFxuMTA3NzpcXHRcXHR1MzIgYnl0ZXMgPSAxdSBcXHUwMDNjXFx1MDAzYyBpbmR4LVxcdTAwM2VpbmRleF9iaXRzO1xcbjEwNzg6XFx0XFx0c3RydWN0IGluZHhfbm9kZSAqaW4gPSAqbm9kZTtcXG4xMDc5OlxcdFxcdGNvbnN0IHN0cnVjdCBJTkRFWF9OQU1FUyAqbmFtZTtcXG4xMDgwOlxcdFxcbjEwODE6XFx0XFx0aWYgKCFpbikge1xcbjEwODI6XFx0XFx0XFx0aW4gPSBremFsbG9jX29iaihzdHJ1Y3QgaW5keF9ub2RlLCBHRlBfTk9GUyk7XFxuMTA4MzpcXHRcXHRcXHRpZiAoIWluKVxcbjEwODQ6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTA4NTpcXHRcXHR9IGVsc2Uge1xcbjEwODY6XFx0XFx0XFx0bmJfcHV0KFxcdTAwMjZpbi1cXHUwMDNlbmIpO1xcbjEwODc6XFx0XFx0fVxcbjEwODg6XFx0XFxuMTA4OTpcXHRcXHRpYiA9IGluLVxcdTAwM2VpbmRleDtcXG4xMDkwOlxcdFxcdGlmICghaWIpIHtcXG4xMDkxOlxcdFxcdFxcdGliID0ga21hbGxvYyhieXRlcywgR0ZQX05PRlMpO1xcbjEwOTI6XFx0XFx0XFx0aWYgKCFpYikge1xcbjEwOTM6XFx0XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4xMDk0OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjEwOTU6XFx0XFx0XFx0fVxcbjEwOTY6XFx0XFx0fVxcbjEwOTc6XFx0XFxuMTA5ODpcXHRcXHRkb3duX3JlYWQobG9jayk7XFxuMTA5OTpcXHRcXHRlcnIgPSBudGZzX3JlYWRfYmhfcmEoc2JpLCBydW4sIHZibywgXFx1MDAyNmliLVxcdTAwM2VyaGRyLCBieXRlcywgXFx1MDAyNmluLVxcdTAwM2VuYiwgcmEpO1xcbjExMDA6XFx0XFx0dXBfcmVhZChsb2NrKTtcXG4xMTAxOlxcdFxcdGlmICghZXJyKVxcbjExMDI6XFx0XFx0XFx0Z290byBvaztcXG4xMTAzOlxcdFxcbjExMDQ6XFx0XFx0aWYgKGVyciA9PSAtRV9OVEZTX0ZJWFVQKVxcbjExMDU6XFx0XFx0XFx0Z290byBvaztcXG4xMTA2OlxcdFxcbjExMDc6XFx0XFx0aWYgKGVyciAhPSAtRU5PRU5UKVxcbjExMDg6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTEwOTpcXHRcXG4xMTEwOlxcdFxcdG5hbWUgPSBcXHUwMDI2c19pbmRleF9uYW1lc1tpbmR4LVxcdTAwM2V0eXBlXTtcXG4xMTExOlxcdFxcdGRvd25fd3JpdGUobG9jayk7XFxuMTExMjpcXHRcXHRlcnIgPSBhdHRyX2xvYWRfcnVuc19yYW5nZShuaSwgQVRUUl9BTExPQywgbmFtZS1cXHUwMDNlbmFtZSwgbmFtZS1cXHUwMDNlbmFtZV9sZW4sXFxuMTExMzpcXHRcXHRcXHRcXHRcXHQgICBydW4sIHZibywgdmJvICsgYnl0ZXMpO1xcbjExMTQ6XFx0XFx0dXBfd3JpdGUobG9jayk7XFxuMTExNTpcXHRcXHRpZiAoZXJyKVxcbjExMTY6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTExNzpcXHRcXG4xMTE4OlxcdFxcdGRvd25fcmVhZChsb2NrKTtcXG4xMTE5OlxcdFxcdGVyciA9IG50ZnNfcmVhZF9iaF9yYShzYmksIHJ1biwgdmJvLCBcXHUwMDI2aWItXFx1MDAzZXJoZHIsIGJ5dGVzLCBcXHUwMDI2aW4tXFx1MDAzZW5iLCByYSk7XFxuMTEyMDpcXHRcXHR1cF9yZWFkKGxvY2spO1xcbjExMjE6XFx0XFx0aWYgKGVyciA9PSAtRV9OVEZTX0ZJWFVQKVxcbjExMjI6XFx0XFx0XFx0Z290byBvaztcXG4xMTIzOlxcdFxcbjExMjQ6XFx0XFx0aWYgKGVycilcXG4xMTI1OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjExMjY6XFx0XFxuMTEyNzpcXHRvazpcXG4xMTI4OlxcdFxcdGlmICghaW5kZXhfYnVmX2NoZWNrKGliLCBieXRlcywgXFx1MDAyNnZibikpIHtcXG4xMTI5OlxcdFxcdFxcdF9udGZzX2JhZF9pbm9kZShcXHUwMDI2bmktXFx1MDAzZXZmc19pbm9kZSk7XFxuMTEzMDpcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjExMzE6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTEzMjpcXHRcXHR9XFxuMTEzMzpcXHRcXG4xMTM0OlxcdFxcdGlmIChlcnIgPT0gLUVfTlRGU19GSVhVUCkge1xcbjExMzU6XFx0XFx0XFx0bnRmc193cml0ZV9iaChzYmksIFxcdTAwMjZpYi1cXHUwMDNlcmhkciwgXFx1MDAyNmluLVxcdTAwM2VuYiwgMCk7XFxuMTEzNjpcXHRcXHRcXHRlcnIgPSAwO1xcbjExMzc6XFx0XFx0fVxcbjExMzg6XFx0XFxuMTEzOTpcXHRcXHQvKiBjaGVjayBmb3IgaW5kZXggaGVhZGVyIGxlbmd0aCAqL1xcbjExNDA6XFx0XFx0aWYgKG9mZnNldG9mKHN0cnVjdCBJTkRFWF9CVUZGRVIsIGloZHIpICsgbGUzMl90b19jcHUoaWItXFx1MDAzZWloZHIudXNlZCkgXFx1MDAzZVxcbjExNDE6XFx0XFx0ICAgIGJ5dGVzKSB7XFxuMTE0MjpcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjExNDM6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTE0NDpcXHRcXHR9XFxuMTE0NTpcXHRcXG4xMTQ2OlxcdFxcdGluLVxcdTAwM2VpbmRleCA9IGliO1xcbjExNDc6XFx0XFx0Km5vZGUgPSBpbjtcXG4xMTQ4OlxcdFxcbjExNDk6XFx0b3V0OlxcbjExNTA6XFx0XFx0aWYgKGVyciA9PSAtRV9OVEZTX0NPUlJVUFQpIHtcXG4xMTUxOlxcdFxcdFxcdF9udGZzX2JhZF9pbm9kZShcXHUwMDI2bmktXFx1MDAzZXZmc19pbm9kZSk7XFxuMTE1MjpcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjExNTM6XFx0XFx0fVxcbjExNTQ6XFx0XFxuMTE1NTpcXHRcXHRpZiAoaWIgIT0gaW4tXFx1MDAzZWluZGV4KVxcbjExNTY6XFx0XFx0XFx0a2ZyZWUoaWIpO1xcbjExNTc6XFx0XFxuMTE1ODpcXHRcXHRpZiAoKm5vZGUgIT0gaW4pIHtcXG4xMTU5OlxcdFxcdFxcdG5iX3B1dChcXHUwMDI2aW4tXFx1MDAzZW5iKTtcXG4xMTYwOlxcdFxcdFxcdGtmcmVlKGluKTtcXG4xMTYxOlxcdFxcdH1cXG4xMTYyOlxcdFxcbjExNjM6XFx0XFx0cmV0dXJuIGVycjtcXG4xMTY0OlxcdH1cXG4xMTY1OlxcdFxcbjExNjY6XFx0LypcXG4xMTY3OlxcdCAqIGluZHhfZmluZCAtIFNjYW4gTlRGUyBkaXJlY3RvcnkgZm9yIGdpdmVuIGVudHJ5LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNjo0MzoxMi41NTk1MDkzNTFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMxNzU3MTc5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERhdGEgSW5kZXhpbmcgUHJvY2VzcyoqXG5cbk9rYXksIHNvIGBpbmR4X3JlYWRfcmFgIGlzIHJlc3BvbnNpYmxlIGZvciBhbGxvY2F0aW5nIGJvdGggYGluYCBhbmQgYGliYCwgd2l0aCBgaWJgIGdldHRpbmcgYXNzaWduZWQgdG8gYGluLVx1MDAzZWluZGV4YC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIHNvIGZhci4gSWYgYGluZHhfcmVhZGAgaXMgc3VjY2Vzc2Z1bCwgdGhlIGAqbm9kZWAgcG9pbnRlciBJJ20gd29ya2luZyB3aXRoIGlzIHNldCB0byBgaW5gLCBhbmQgY3J1Y2lhbGx5LCBgaW4tXHUwMDNlaW5kZXhgIG5vdyBwb2ludHMgdG8gdGhhdCBhbGxvY2F0ZWQgYGliYC4gSSBuZWVkIHRvIHJlbWVtYmVyIHRoaXMgc3RydWN0dXJlLCBhcyBpdCdzIHRoZSBmb3VuZGF0aW9uIG9mIHRoZSBvcGVyYXRpb24uXG5cbk5vdywgbG9va2luZyBhdCBgaW5keF9maW5kX3NvcnRgLCBpZiBgZGVfaGFzX3Zjbl9leChlKWAgZXZhbHVhdGVzIHRvIHRydWUsIGl0IGNhbGxzIGBpbmR4X3JlYWRgIChzbyBzZXR0aW5nIHRoaW5ncyB1cCkgYW5kIHRoZW4gY2FsbHMgYGZuZF9wdXNoYC4gSSB1bmRlcnN0YW5kIHRoZSBpbnRlbnRpb24gaGVyZS5cblxuQnV0LCBJJ20gY29uY2VybmVkIGFib3V0IHRoZSBzaXplIGNoZWNrLiBJZiBgbGUxNl90b19jcHUoZS1cdTAwM2VzaXplKWAgaXMgbGVzcyB0aGFuIGEgY2VydGFpbiBkZWZpbmVkIHNpemUsIGl0IGZyZWVzIGBuYC4gSXQgZmVlbHMgbGlrZSB0aGVyZSBpcyBhbiBvdmVyc2lnaHQuIFRoaXMgZnJlZXMgYG5gLCB3aGljaCBpcyBmaW5lLCBidXQgaXQgKm1pc3NlcyogZnJlZWluZyBgbi1cdTAwM2VpbmRleGAuIE5vdywgaGFuZyBvbiBhIHNlY29uZCwgd2Fzbid0IGBuYCBzdXBwb3NlZCB0byBiZSBwb3BwZWQgZnJvbSB0aGUgYGZuZGAgc3RhY2sgdXNpbmcgYGZuZF9wb3AoZm5kKWA/IEl0IGxvb2tzIGxpa2UgSSBhbSBnb2luZyB0byBoYXZlIHRvIGRpdmUgaW50byBgZm5kX3BvcGAgYW5kIGZpZ3VyZSBvdXQgd2hhdCBpdCdzIGRvaW5nIHdpdGggdGhhdCBgbmAgdmFsdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4MjMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNjo0MzoxNy44NzcwODQyOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3MTM2NDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZuZF9wb3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmczMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMzL2luZGV4LmM9NzA2PXN0YXRpYyBpbnQgZm5kX3B1c2goc3RydWN0IG50ZnNfZm5kICpmbmQsIHN0cnVjdCBpbmR4X25vZGUgKm4sXFxuLS1cXG5mcy9udGZzMy9pbmRleC5jLTcxOC1cXG5mcy9udGZzMy9pbmRleC5jOjcxOTpzdGF0aWMgc3RydWN0IGluZHhfbm9kZSAqZm5kX3BvcChzdHJ1Y3QgbnRmc19mbmQgKmZuZClcXG5mcy9udGZzMy9pbmRleC5jLTcyMC17XFxuLS1cXG5mcy9udGZzMy9pbmRleC5jPTEyNDQ9aW50IGluZHhfZmluZF9zb3J0KHN0cnVjdCBudGZzX2luZGV4ICppbmR4LCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXFxuLS1cXG5mcy9udGZzMy9pbmRleC5jLTEyOTMtXFx0XFx0XFx0aWYgKG4pIHtcXG5mcy9udGZzMy9pbmRleC5jOjEyOTQ6XFx0XFx0XFx0XFx0Zm5kX3BvcChmbmQpO1xcbmZzL250ZnMzL2luZGV4LmMtMTI5NS1cXHRcXHRcXHRcXHRrZnJlZShuKTtcXG4tLVxcbmZzL250ZnMzL2luZGV4LmMtMTMyNi1cXHRcXHRpZiAobikge1xcbmZzL250ZnMzL2luZGV4LmM6MTMyNzpcXHRcXHRcXHRmbmRfcG9wKGZuZCk7XFxuZnMvbnRmczMvaW5kZXguYy0xMzI4LVxcdFxcdFxcdGtmcmVlKG4tXFx1MDAzZWluZGV4KTtcXG4tLVxcbmZzL250ZnMzL2luZGV4LmM9MTM1NT1pbnQgaW5keF9maW5kX3JhdyhzdHJ1Y3QgbnRmc19pbmRleCAqaW5keCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxcbi0tXFxuZnMvbnRmczMvaW5kZXguYy0xNDI4LVxcdFxcdGlmIChuKSB7XFxuZnMvbnRmczMvaW5kZXguYzoxNDI5OlxcdFxcdFxcdGZuZF9wb3AoZm5kKTtcXG5mcy9udGZzMy9pbmRleC5jLTE0MzAtXFx0XFx0XFx0cHV0X2luZHhfbm9kZShuKTtcXG4tLVxcbmZzL250ZnMzL2luZGV4LmM9MjM2OT1pbnQgaW5keF9kZWxldGVfZW50cnkoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcXG4tLVxcbmZzL250ZnMzL2luZGV4LmMtMjQ1Ni1cXHRcXHRpZiAoaWIgXFx1MDAyNlxcdTAwMjYgaWJfaXNfbGVhZihpYikgXFx1MDAyNlxcdTAwMjYgaWJfaXNfZW1wdHkoaWIpKSB7XFxuZnMvbnRmczMvaW5kZXguYzoyNDU3OlxcdFxcdFxcdGZuZF9wb3AoZm5kKTtcXG5mcy9udGZzMy9pbmRleC5jLTI0NTgtXFx0XFx0XFx0Zm5kX3B1c2goZm5kMiwgbiwgZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE2OjQzOjE4LjA4NDIyNjM5OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjA1Mzc3OTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYGZuZF9wb3BgJ3MgUmV0dXJuIFZhbHVlKipcblxuQWxyaWdodCwgaGFuZyBvbiBhIHNlY29uZC4gSSdtIHRha2luZyBhIGxvb2sgYXQgYGZuZF9wb3BgIG5vdywgYW5kIEkgc2VlIGl0J3MgcmV0dXJuaW5nIGEgYHN0cnVjdCBpbmR4X25vZGUgKmAuIFRoYXQgbWVhbnMgaXQncyBoYW5kaW5nIGJhY2sgYSBwb2ludGVyIHRvIGEgc3BlY2lmaWMgbm9kZSB3aXRoaW4gdGhhdCBgaW5keF9ub2RlYCBzdHJ1Y3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQuIEkgbmVlZCB0byBpbW1lZGlhdGVseSBwdWxsIHVwIHRoZSBkZWZpbml0aW9uIG9mIGBmbmRfcG9wYCB0byB2ZXJpZnkgd2hhdCdzIGdvaW5nIG9uOyBJIG5lZWQgdG8ga25vdyBob3cgdGhhdCBub2RlIGlzIGNob3NlbiBhbmQgd2hhdCBjb250ZXh0IHRvIHVuZGVyc3RhbmQgdGhhdCBzdHJ1Y3R1cmUgd2l0aGluLiBHb3R0YSBrZWVwIHRoZXNlIHBvaW50ZXJzIHN0cmFpZ2h0OyBJJ20gYXNzdW1pbmcgdGhhdCBpdCBpcyBsaW5rZWQgdG8gb3RoZXIgdmFsdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODg5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTY6NDM6MjEuMjg5NjA3MTNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL250ZnMzL2luZGV4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzE5LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzE5OlxcdHN0YXRpYyBzdHJ1Y3QgaW5keF9ub2RlICpmbmRfcG9wKHN0cnVjdCBudGZzX2ZuZCAqZm5kKVxcbiA3MjA6XFx0e1xcbiA3MjE6XFx0XFx0c3RydWN0IGluZHhfbm9kZSAqbjtcXG4gNzIyOlxcdFxcdGludCBpID0gZm5kLVxcdTAwM2VsZXZlbDtcXG4gNzIzOlxcdFxcbiA3MjQ6XFx0XFx0aSAtPSAxO1xcbiA3MjU6XFx0XFx0biA9IGZuZC1cXHUwMDNlbm9kZXNbaV07XFxuIDcyNjpcXHRcXHRmbmQtXFx1MDAzZW5vZGVzW2ldID0gTlVMTDtcXG4gNzI3OlxcdFxcdGZuZC1cXHUwMDNlbGV2ZWwgPSBpO1xcbiA3Mjg6XFx0XFxuIDcyOTpcXHRcXHRyZXR1cm4gbjtcXG4gNzMwOlxcdH1cXG4gNzMxOlxcdFxcbiA3MzI6XFx0c3RhdGljIGJvb2wgZm5kX2lzX2VtcHR5KHN0cnVjdCBudGZzX2ZuZCAqZm5kKVxcbiA3MzM6XFx0e1xcbiA3MzQ6XFx0XFx0aWYgKCFmbmQtXFx1MDAzZWxldmVsKVxcbiA3MzU6XFx0XFx0XFx0cmV0dXJuICFmbmQtXFx1MDAzZXJvb3RfZGU7XFxuIDczNjpcXHRcXG4gNzM3OlxcdFxcdHJldHVybiAhZm5kLVxcdTAwM2VkZVtmbmQtXFx1MDAzZWxldmVsIC0gMV07XFxuIDczODpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE2OjQzOjIxLjI4OTc4NDI2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyMzcyODEwMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUmVjZW50IFBhdGNoIGluIGBpbmR4X2ZpbmRfc29ydGAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgaW5keF9maW5kX3NvcnRgIGFuZCBzb21ldGhpbmcgaW1tZWRpYXRlbHkganVtcHMgb3V0LiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBhZGRlZCBga2ZyZWUobi1cdTAwM2VpbmRleCk7YCAqYmVmb3JlKiB0aGUgYGtmcmVlKG4pO2AgY2FsbCB3aXRoaW4gdGhlIGJsb2NrIHRoYXQgcG9wcyBhIGxldmVsLiBUaGF0IG1ha2VzIHNlbnNlLCBmcmVlaW5nIHRoZSBhbGxvY2F0ZWQgaW5kZXggZGF0YSBiZWZvcmUgZnJlZWluZyB0aGUgbm9kZSBpdHNlbGYsIHN0YW5kYXJkIHByYWN0aWNlLiBCdXQgd2FpdCwgSSdtIHByZXR0eSBzdXJlIHRoZXJlJ3MgYW5vdGhlciBpbnN0YW5jZSBvZiBga2ZyZWUobilgIGluIHRoaXMgc2FtZSBmdW5jdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIHNhbWUgbW9kaWZpY2F0aW9uIHdhcyBtYWRlIHRoZXJlLiBMZXQgbWUgZ28gYmFjayBhbmQgZG91YmxlLWNoZWNrIHRoYXQgYmxvY2sgb2YgY29kZS5cblxuT2theSwgaGVyZSBpdCBpczpcblxuYGBgY1xuXHRcdHdoaWxlIChkZV9oYXNfdmNuX2V4KGUpKSB7XG5cdFx0XHRpZiAobGUxNl90b19jcHUoZS1cdTAwM2VzaXplKSBcdTAwM2Ncblx0XHRcdCAgICBzaXplb2Yoc3RydWN0IE5URlNfREUpICsgc2l6ZW9mKHU2NCkpIHtcblx0XHRcdFx0aWYgKG4pIHtcblx0XHRcdFx0XHRmbmRfcG9wKGZuZCk7XG5cdFx0XHRcdFx0a2ZyZWUobik7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5cdFx0XHR9XG5gYGBcblxuVGhlIHRoaW5nIGlzLCBJIGRvbid0IHNlZSBga2ZyZWUobi1cdTAwM2VpbmRleClgIGluIHRoZSBkaWZmIGZvciB0aGF0IGxvY2F0aW9uLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgbWVtb3J5IGxlYWsgd2FzIG5vdCBpbnRyb2R1Y2VkLiBMZXQgbWUgY2hlY2sgdGhlIGRpZmYgYWdhaW4sIGNhcmVmdWxseSwgbGluZSBieSBsaW5lLlxuXG4qICAgU2lnaCouLi4geWVwLCB0aGUgZGlmZiAqb25seSogc2hvd3MgdGhlIGNoYW5nZSBpbiB0aGUgZmlyc3QgbG9jYXRpb24uIFRoYXQgbWVhbnMgdGhlIGBrZnJlZShuLVx1MDAzZWluZGV4KWAgaXMgKm5vdCogcHJlc2VudCBpbiB0aGUgc2Vjb25kIGBrZnJlZShuKWAgaW5zdGFuY2UuIFRoaXMgaXMgYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWsuIEJhY2sgdG8gdGhlIGNvZGUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzk2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTY6NDM6MjcuNTI3MDY4MDYxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzODI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9udGZzMy9pbmRleC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyOTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyOTA6XFx0XFx0d2hpbGUgKGRlX2hhc192Y25fZXgoZSkpIHtcXG4xMjkxOlxcdFxcdFxcdGlmIChsZTE2X3RvX2NwdShlLVxcdTAwM2VzaXplKSBcXHUwMDNjXFxuMTI5MjpcXHRcXHRcXHQgICAgc2l6ZW9mKHN0cnVjdCBOVEZTX0RFKSArIHNpemVvZih1NjQpKSB7XFxuMTI5MzpcXHRcXHRcXHRcXHRpZiAobikge1xcbjEyOTQ6XFx0XFx0XFx0XFx0XFx0Zm5kX3BvcChmbmQpO1xcbjEyOTU6XFx0XFx0XFx0XFx0XFx0a2ZyZWUobik7XFxuMTI5NjpcXHRcXHRcXHRcXHR9XFxuMTI5NzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMjk4OlxcdFxcdFxcdH1cXG4xMjk5OlxcdFxcbjEzMDA6XFx0XFx0XFx0LyogUmVhZCBuZXh0IGxldmVsLiAqL1xcbjEzMDE6XFx0XFx0XFx0ZXJyID0gaW5keF9yZWFkKGluZHgsIG5pLCBkZV9nZXRfdmJuKGUpLCBcXHUwMDI2bik7XFxuMTMwMjpcXHRcXHRcXHRpZiAoZXJyKVxcbjEzMDM6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xMzA0OlxcdFxcbjEzMDU6XFx0XFx0XFx0LyogVHJ5IG5leHQgbGV2ZWwuICovXFxuMTMwNjpcXHRcXHRcXHRlID0gaGRyX2ZpcnN0X2RlKFxcdTAwMjZuLVxcdTAwM2VpbmRleC1cXHUwMDNlaWhkcik7XFxuMTMwNzpcXHRcXHRcXHRpZiAoIWUpIHtcXG4xMzA4OlxcdFxcdFxcdFxcdGtmcmVlKG4pO1xcbjEzMDk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTMxMDpcXHRcXHRcXHR9XFxuMTMxMTpcXHRcXG4xMzEyOlxcdFxcdFxcdGZuZF9wdXNoKGZuZCwgbiwgZSk7XFxuMTMxMzpcXHRcXHR9XFxuMTMxNDpcXHRcXG4xMzE1OlxcdFxcdGlmIChsZTE2X3RvX2NwdShlLVxcdTAwM2VzaXplKSBcXHUwMDNlIHNpemVvZihzdHJ1Y3QgTlRGU19ERSkpIHtcXG4xMzE2OlxcdFxcdFxcdCplbnRyeSA9IGU7XFxuMTMxNzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xMzE4OlxcdFxcdH1cXG4xMzE5OlxcdFxcbjEzMjA6XFx0cG9wX2xldmVsOlxcbjEzMjE6XFx0XFx0Zm9yICg7Oykge1xcbjEzMjI6XFx0XFx0XFx0aWYgKCFkZV9pc19sYXN0KGUpKVxcbjEzMjM6XFx0XFx0XFx0XFx0Z290byBuZXh0X2l0ZXI7XFxuMTMyNDpcXHRcXG4xMzI1OlxcdFxcdFxcdC8qIFBvcCBvbmUgbGV2ZWwuICovXFxuMTMyNjpcXHRcXHRcXHRpZiAobikge1xcbjEzMjc6XFx0XFx0XFx0XFx0Zm5kX3BvcChmbmQpO1xcbjEzMjg6XFx0XFx0XFx0XFx0a2ZyZWUobi1cXHUwMDNlaW5kZXgpO1xcbjEzMjk6XFx0XFx0XFx0XFx0a2ZyZWUobik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE2OjQzOjI3LjUyNzMxMDU0MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjAzNTExOTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlYnVnZ2luZyBNZW1vcnkgTWFuYWdlbWVudCBpbiBgaW5keF9yZWFkYCoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuLi4gSSdtIGxvb2tpbmcgYXQgdGhlc2UgYGtmcmVlKG4pYCBjYWxscywgYW5kIGl0IGxvb2tzIGxpa2UgYGtmcmVlKG4tXHUwMDNlaW5kZXgpYCBpcyBtaXNzaW5nIGZyb20gc2V2ZXJhbCBvZiB0aGVtLiBUaGF0J3MgYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWshIEJ1dCB3YWl0LCBsZXQgbWUgYmFja3RyYWNrLiBUaGUgYGluZHhfcmVhZGAgZnVuY3Rpb24gYWxsb2NhdGVzICpib3RoKiBgbmAgYW5kIGBuLVx1MDAzZWluZGV4YC4gUmlnaHQsIG9rYXkuIEJ1dCBgbi1cdTAwM2VpbmRleGAuLi4gaXQgY291bGQgYmUgYSBidWZmZXIgaGVhZCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHkuIExldCdzIHNlZS4uLiBsb29raW5nIGF0IGBpbmR4X3JlYWRfcmFgLCB5ZXMsIHRoZXJlIGl0IGlzOiBgaWIgPSBpbi1cdTAwM2VpbmRleDsgaWYgKCFpYikgeyBpYiA9IGttYWxsb2MoYnl0ZXMsIEdGUF9OT0ZTKTtgIE9rYXksIHNvIGBuLVx1MDAzZWluZGV4YCBpcywgaW5kZWVkLCBhIGBrbWFsbG9jYCdkIGJ1ZmZlci4gSXQncyBub3QgYSBgYnVmZmVyX2hlYWRgLCBpdCdzIGp1c3QgYSByZWd1bGFyIGNodW5rIG9mIG1lbW9yeS5cblxuTm93LCBJIHNlZW0gdG8gcmVtZW1iZXIgYHB1dF9pbmR4X25vZGVgIGJlaW5nIHRoZSBwbGFjZSB3aGVyZSBib3RoIGBuYCBhbmQgYG4tXHUwMDNlaW5kZXhgIGFyZSBmcmVlZC4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IGJ5IHF1aWNrbHkgZXhhbWluaW5nIHRoZSBgcHV0X2luZHhfbm9kZWAgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjc1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTY6NDM6MzEuNzMwODI1MzI5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODAzMzM0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHV0X2luZHhfbm9kZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzMy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmczMvZGlyLmM9NDA0PXN0YXRpYyBpbnQgbnRmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcXG4tLVxcbmZzL250ZnMzL2Rpci5jLTU2Mi1cXHRrZnJlZShuYW1lKTtcXG5mcy9udGZzMy9kaXIuYzo1NjM6XFx0cHV0X2luZHhfbm9kZShub2RlKTtcXG5mcy9udGZzMy9kaXIuYy01NjQtXFxuLS1cXG5mcy9udGZzMy9kaXIuYz02MDA9c3RhdGljIGludCBudGZzX2Rpcl9jb3VudChzdHJ1Y3QgaW5vZGUgKmRpciwgYm9vbCAqaXNfZW1wdHksIHNpemVfdCAqZGlycyxcXG4tLVxcbmZzL250ZnMzL2Rpci5jLTY3Ny1vdXQ6XFxuZnMvbnRmczMvZGlyLmM6Njc4OlxcdHB1dF9pbmR4X25vZGUobm9kZSk7XFxuZnMvbnRmczMvZGlyLmMtNjc5LVxcdGlmIChkaXJzKVxcbi0tXFxuZnMvbnRmczMvaW5kZXguYz02ODk9dm9pZCBmbmRfY2xlYXIoc3RydWN0IG50ZnNfZm5kICpmbmQpXFxuLS1cXG5mcy9udGZzMy9pbmRleC5jLTY5OC1cXG5mcy9udGZzMy9pbmRleC5jOjY5OTpcXHRcXHRwdXRfaW5keF9ub2RlKG4pO1xcbmZzL250ZnMzL2luZGV4LmMtNzAwLVxcdFxcdGZuZC1cXHUwMDNlbm9kZXNbaV0gPSBOVUxMO1xcbi0tXFxuZnMvbnRmczMvaW5kZXguYz0xMTY5PWludCBpbmR4X2ZpbmQoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcXG4tLVxcbmZzL250ZnMzL2luZGV4LmMtMTIyNy1cXHRcXHRpZiAoIWUpIHtcXG5mcy9udGZzMy9pbmRleC5jOjEyMjg6XFx0XFx0XFx0cHV0X2luZHhfbm9kZShub2RlKTtcXG5mcy9udGZzMy9pbmRleC5jLTEyMjktXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5mcy9udGZzMy9pbmRleC5jLTEyMzQtXFx0XFx0aWYgKGVycikge1xcbmZzL250ZnMzL2luZGV4LmM6MTIzNTpcXHRcXHRcXHRwdXRfaW5keF9ub2RlKG5vZGUpO1xcbmZzL250ZnMzL2luZGV4LmMtMTIzNi1cXHRcXHRcXHRyZXR1cm4gZXJyO1xcbi0tXFxuZnMvbnRmczMvaW5kZXguYz0xMzU1PWludCBpbmR4X2ZpbmRfcmF3KHN0cnVjdCBudGZzX2luZGV4ICppbmR4LCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXFxuLS1cXG5mcy9udGZzMy9pbmRleC5jLTE0MjktXFx0XFx0XFx0Zm5kX3BvcChmbmQpO1xcbmZzL250ZnMzL2luZGV4LmM6MTQzMDpcXHRcXHRcXHRwdXRfaW5keF9ub2RlKG4pO1xcbmZzL250ZnMzL2luZGV4LmMtMTQzMS1cXHRcXHRcXHRuID0gTlVMTDtcXG4tLVxcbmZzL250ZnMzL2luZGV4LmM9MTYyOD1zdGF0aWMgaW50IGluZHhfaW5zZXJ0X2ludG9fcm9vdChzdHJ1Y3QgbnRmc19pbmRleCAqaW5keCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxcbi0tXFxuZnMvbnRmczMvaW5kZXguYy0xODE5LVxcbmZzL250ZnMzL2luZGV4LmM6MTgyMDpcXHRcXHRwdXRfaW5keF9ub2RlKG4pO1xcbmZzL250ZnMzL2luZGV4LmMtMTgyMS1cXHRcXHRmbmRfY2xlYXIoZm5kKTtcXG4tLVxcbmZzL250ZnMzL2luZGV4LmMtMTg0Mi1vdXRfcHV0X246XFxuZnMvbnRmczMvaW5kZXguYzoxODQzOlxcdHB1dF9pbmR4X25vZGUobik7XFxuZnMvbnRmczMvaW5kZXguYy0xODQ0LW91dF9mcmVlX3JlOlxcbi0tXFxuZnMvbnRmczMvaW5kZXguYz0xODU3PXN0YXRpYyBpbnQgaW5keF9pbnNlcnRfaW50b19idWZmZXIoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsXFxuLS1cXG5mcy9udGZzMy9pbmRleC5jLTE5ODAtXFxuZnMvbnRmczMvaW5kZXguYzoxOTgxOlxcdHB1dF9pbmR4X25vZGUobjIpO1xcbmZzL250ZnMzL2luZGV4LmMtMTk4Mi1cXG4tLVxcbmZzL250ZnMzL2luZGV4LmM9MjIxNj1zdGF0aWMgaW50IGluZHhfZnJlZV9jaGlsZHJlbihzdHJ1Y3QgbnRmc19pbmRleCAqaW5keCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxcbi0tXFxuZnMvbnRmczMvaW5kZXguYy0yMjM4LVxcbmZzL250ZnMzL2luZGV4LmM6MjIzOTpcXHRwdXRfaW5keF9ub2RlKG4pO1xcbmZzL250ZnMzL2luZGV4LmMtMjI0MC1cXG4tLVxcbmZzL250ZnMzL250ZnNfZnMuaD0xMTkxPXN0YXRpYyBpbmxpbmUgdm9pZCBuYl9wdXQoc3RydWN0IG50ZnNfYnVmZmVycyAqbmIpXFxuLS1cXG5mcy9udGZzMy9udGZzX2ZzLmgtMTIwMi1cXG5mcy9udGZzMy9udGZzX2ZzLmg6MTIwMzpzdGF0aWMgaW5saW5lIHZvaWQgcHV0X2luZHhfbm9kZShzdHJ1Y3QgaW5keF9ub2RlICppbilcXG5mcy9udGZzMy9udGZzX2ZzLmgtMTIwNC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE2OjQzOjMxLjkxMTE2NDA1OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDUzODI2MDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRlZXAgRGl2ZSBpbnRvIGBwdXRfaW5keF9ub2RlYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIGFuZCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHB1dF9pbmR4X25vZGVgLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgYW5kIHBvdGVudGlhbCBlZGdlIGNhc2VzLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byBldmFsdWF0ZTpcblxuKiAgICoqQ29yZSBmdW5jdGlvbmFsaXR5OioqIFdoYXQncyBpdCAqYWN0dWFsbHkqIGRvaW5nPyBJcyBpdCB3cml0aW5nIGRpcmVjdGx5LCBvciBpcyBpdCBnb2luZyB0aHJvdWdoIHNvbWUga2luZCBvZiBpbmRpcmVjdGlvbiBvciBidWZmZXJpbmc/IEkgbmVlZCB0byBjbGFyaWZ5IHRoYXQgYmVmb3JlIEkgc3RhcnQgbG9va2luZyBhdCBlZGdlIGNhc2VzLlxuKiAgICoqRGF0YSBzdHJ1Y3R1cmVzOioqIFdoYXQncyB0aGUgdGFyZ2V0IGRhdGEgc3RydWN0dXJlIGZvciB0aGUgaW5zZXJ0aW9uPyBJcyBpdCBhIEItdHJlZSwgYSBoYXNoIHRhYmxlLCBvciBzb21ldGhpbmcgbW9yZSBiZXNwb2tlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29tcGxleGl0eSBhbmQgYWNjZXNzIHBhdHRlcm5zLiBJIGFzc3VtZSB0aGF0IGl0IHJlbGF0ZXMgdG8gYSBzdG9yYWdlIHNvbHV0aW9uLlxuKiAgICoqRXJyb3IgaGFuZGxpbmc6KiogSG93IHJvYnVzdCBpcyBpdD8gV2hhdCBleGNlcHRpb25zIG9yIGVycm9yIGNvZGVzIG1pZ2h0IGl0IHRocm93PyBBcmUgdGhlcmUgY2hlY2tzIGZvciBmdWxsIGNvbmRpdGlvbnMgb3IgY29uZmxpY3Rpbmcgd3JpdGVzPyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgd2VsbCBpdCBkZWFscyB3aXRoIGNvbmN1cnJlbnQgc2l0dWF0aW9ucy5cbiogICAqKlBlcmZvcm1hbmNlIGltcGxpY2F0aW9uczoqKiBXaGVyZSBhcmUgdGhlIHBvdGVudGlhbCBib3R0bGVuZWNrcz8gTWVtb3J5IGFsbG9jYXRpb24/IERpc2sgSS9PPyBMb2NrIGNvbnRlbnRpb24/IFVuZGVyc3RhbmRpbmcgdGhpcyBpcyB2aXRhbCBmb3Igb3B0aW1pemluZyB0aGUgY29kZSBvciBldmVuIHRoZSBhcmNoaXRlY3R1cmUgaXQgc3VwcG9ydHMuXG4qICAgKipDb25jdXJyZW5jeToqKiBIb3cgZG9lcyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0IHdpdGggb3RoZXIgdGhyZWFkcyBvciBwcm9jZXNzZXM/IEFyZSB0aGVyZSBhbnkgbG9ja2luZyBtZWNoYW5pc21zPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGlmIEkgdXNlIGBwdXRfaW5keF9ub2RlYCBjb25jdXJyZW50bHkgZnJvbSBkaWZmZXJlbnQgcGxhY2VzP1xuKiAgICoqQXNzdW1wdGlvbnMqKjogV2hhdCBkb2VzIGl0IGFzc3VtZSBhYm91dCB0aGUgZW52aXJvbm1lbnQgaXQgaXMgYmVpbmcgY2FsbGVkIGluPyBBcmUgdGhlcmUgc2l6ZSBjb25zdHJhaW50cyBvbiB0aGUgZGF0YSBiZWluZyB3cml0dGVuP1xuKiAgICoqUG90ZW50aWFsIGlzc3VlcyoqOiBXaGF0IGFyZSB0aGUgY2FzZXMgSSBuZWVkIHRvIGNoZWNrIHRvIGJlIHN1cmUgaXQgZG9lcyB3aGF0IGl0IGlzIHN1cHBvc2VkIHRvP1xuSSBhbSBnb2luZyB0byBldmFsdWF0ZSB0aGUgY29kZSBwYXRoLiBJIHdhbnQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHdoYXQgaXMgZ29pbmcgb24sIGFuZCB0aGVuLCBJIGNhbiBzdGFydCBsb29raW5nIGZvciBhbnkgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzIxMCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE2OjQzOjM2LjM2NDk5MjkzNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzY0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvbnRmczMvbnRmc19mcy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMDMsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMDM6XFx0c3RhdGljIGlubGluZSB2b2lkIHB1dF9pbmR4X25vZGUoc3RydWN0IGluZHhfbm9kZSAqaW4pXFxuMTIwNDpcXHR7XFxuMTIwNTpcXHRcXHRpZiAoIWluKVxcbjEyMDY6XFx0XFx0XFx0cmV0dXJuO1xcbjEyMDc6XFx0XFxuMTIwODpcXHRcXHRrZnJlZShpbi1cXHUwMDNlaW5kZXgpO1xcbjEyMDk6XFx0XFx0bmJfcHV0KFxcdTAwMjZpbi1cXHUwMDNlbmIpO1xcbjEyMTA6XFx0XFx0a2ZyZWUoaW4pO1xcbjEyMTE6XFx0fVxcbjEyMTI6XFx0XFxuMTIxMzpcXHRzdGF0aWMgaW5saW5lIHZvaWQgbWlfY2xlYXIoc3RydWN0IG1mdF9pbm9kZSAqbWkpXFxuMTIxNDpcXHR7XFxuMTIxNTpcXHRcXHRuYl9wdXQoXFx1MDAyNm1pLVxcdTAwM2VuYik7XFxuMTIxNjpcXHRcXHRrZnJlZShtaS1cXHUwMDNlbXJlYyk7XFxuMTIxNzpcXHRcXHRtaS1cXHUwMDNlbXJlYyA9IE5VTEw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE2OjQzOjM2LjM2NTEzMTM0NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODQ3MjI2MjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgTWFuYWdlbWVudCBpbiBJbmRleCBTdHJ1Y3R1cmVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgaW5kZXggbm9kZXMuIEkgc2VlIHRoYXQgYHB1dF9pbmR4X25vZGVgIGlzIGRvaW5nIGEgY2xlYW4tdXA6IGBrZnJlZShpbi1cdTAwM2VpbmRleCk7IG5iX3B1dChcdTAwMjZpbi1cdTAwM2VuYik7IGtmcmVlKGluKTtgLiBUaGF0J3Mgc3RhbmRhcmQgLSBmcmVlaW5nIHRoZSBpbmRleCBkYXRhLCByZWxlYXNpbmcgYSBjb3VudGVyLCBhbmQgdGhlbiBmcmVlaW5nIHRoZSBub2RlIGl0c2VsZi4gTWFrZXMgcGVyZmVjdCBzZW5zZS5cblxuQnV0IHRoZW4gSSdtIGluIGBpbmR4X2ZpbmRfc29ydGAsIGFuZCBJJ20gc2VlaW5nIHRoaXM6XG5cbmBgYGNcblx0XHRcdC8qIFBvcCBvbmUgbGV2ZWwuICovXG5cdFx0XHRpZiAobikge1xuXHRcdFx0XHRmbmRfcG9wKGZuZCk7XG5cdFx0XHRcdGtmcmVlKG4tXHUwMDNlaW5kZXgpO1xuXHRcdFx0XHRrZnJlZShuKTtcblx0XHRcdH1cbmBgYFxuXG5XYWl0IGEgc2Vjb25kLiBXaHkgYXJlbid0IHRoZXkganVzdCBjYWxsaW5nIGBwdXRfaW5keF9ub2RlKG4pYCBoZXJlPyBJdCBzZWVtcyBsaWtlIHRoaXMgaXMgZHVwbGljYXRpbmcgdGhlIGNsZWFuLXVwIGxvZ2ljLiBJJ20gdXNlZCB0byBzZWVpbmcgY29kZSByZXVzZSB0byBhdm9pZCByZWR1bmRhbmN5IGFuZCBwb3RlbnRpYWwgYnVncy4gSXQncyBjbGVhbmVyLCBhbmQgZWFzaWVyIHRvIG1haW50YWluLiBUaGlzIGR1cGxpY2F0aW9uIGlzIGEgYml0IG9mIGEgcmVkIGZsYWcuXG5cbkkgbmVlZCB0byBzZWUgaWYgdGhpcyBwYXR0ZXJuIGlzIHJlcGVhdGVkIGVsc2V3aGVyZSBpbiBgaW5keF9maW5kX3NvcnRgLiBMZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGluc3RhbmNlcyBvZiBga2ZyZWUobilgIGluIHRoaXMgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGZ1bmN0aW9uIGlzbid0IHVzaW5nIHRoZSBhbHJlYWR5IGVzdGFibGlzaGVkIGBwdXRfaW5keF9ub2RlYCBhbmQgcG90ZW50aWFsbHkgcmVmYWN0b3IgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4NjQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNjo0Mzo0MS4yMTIzNjk4NjhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk4NjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL250ZnMzL2luZGV4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTI5MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI5MDpcXHRcXHR3aGlsZSAoZGVfaGFzX3Zjbl9leChlKSkge1xcbjEyOTE6XFx0XFx0XFx0aWYgKGxlMTZfdG9fY3B1KGUtXFx1MDAzZXNpemUpIFxcdTAwM2NcXG4xMjkyOlxcdFxcdFxcdCAgICBzaXplb2Yoc3RydWN0IE5URlNfREUpICsgc2l6ZW9mKHU2NCkpIHtcXG4xMjkzOlxcdFxcdFxcdFxcdGlmIChuKSB7XFxuMTI5NDpcXHRcXHRcXHRcXHRcXHRmbmRfcG9wKGZuZCk7XFxuMTI5NTpcXHRcXHRcXHRcXHRcXHRrZnJlZShuKTtcXG4xMjk2OlxcdFxcdFxcdFxcdH1cXG4xMjk3OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEyOTg6XFx0XFx0XFx0fVxcbjEyOTk6XFx0XFxuMTMwMDpcXHRcXHRcXHQvKiBSZWFkIG5leHQgbGV2ZWwuICovXFxuMTMwMTpcXHRcXHRcXHRlcnIgPSBpbmR4X3JlYWQoaW5keCwgbmksIGRlX2dldF92Ym4oZSksIFxcdTAwMjZuKTtcXG4xMzAyOlxcdFxcdFxcdGlmIChlcnIpXFxuMTMwMzpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjEzMDQ6XFx0XFxuMTMwNTpcXHRcXHRcXHQvKiBUcnkgbmV4dCBsZXZlbC4gKi9cXG4xMzA2OlxcdFxcdFxcdGUgPSBoZHJfZmlyc3RfZGUoXFx1MDAyNm4tXFx1MDAzZWluZGV4LVxcdTAwM2VpaGRyKTtcXG4xMzA3OlxcdFxcdFxcdGlmICghZSkge1xcbjEzMDg6XFx0XFx0XFx0XFx0a2ZyZWUobik7XFxuMTMwOTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMzEwOlxcdFxcdFxcdH1cXG4xMzExOlxcdFxcbjEzMTI6XFx0XFx0XFx0Zm5kX3B1c2goZm5kLCBuLCBlKTtcXG4xMzEzOlxcdFxcdH1cXG4xMzE0OlxcdFxcbjEzMTU6XFx0XFx0aWYgKGxlMTZfdG9fY3B1KGUtXFx1MDAzZXNpemUpIFxcdTAwM2Ugc2l6ZW9mKHN0cnVjdCBOVEZTX0RFKSkge1xcbjEzMTY6XFx0XFx0XFx0KmVudHJ5ID0gZTtcXG4xMzE3OlxcdFxcdFxcdHJldHVybiAwO1xcbjEzMTg6XFx0XFx0fVxcbjEzMTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE2OjQzOjQxLjIxMjY3MTIyOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NjMyMzczNzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBNZW1vcnkgTGVhayBpbiBgaW5keF9maW5kX3NvcnRgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgaW5keF9maW5kX3NvcnRgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgdGhpcyBzZWN0aW9uIG9mIGNvZGU6XG5cbmBgYGNcblx0XHR3aGlsZSAoZGVfaGFzX3Zjbl9leChlKSkge1xuXHRcdFx0aWYgKGxlMTZfdG9fY3B1KGUtXHUwMDNlc2l6ZSkgXHUwMDNjXG5cdFx0XHQgICAgc2l6ZW9mKHN0cnVjdCBOVEZTX0RFKSArIHNpemVvZih1NjQpKSB7XG5cdFx0XHRcdGlmIChuKSB7XG5cdFx0XHRcdFx0Zm5kX3BvcChmbmQpO1xuXHRcdFx0XHRcdGtmcmVlKG4pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuXHRcdFx0fVxuYGBgXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGlmIGBuYCBpcyBwb3BwZWQgZnJvbSBgZm5kYCwgaXQgKmhhZCogdG8gaGF2ZSBiZWVuIHB1c2hlZCB0aGVyZSBlYXJsaWVyLiBBbmQgaWYgaXQgd2FzIHB1c2hlZCB0aGVyZSwgaXQgd2FzIGFsbG9jYXRlZCBieSBgaW5keF9yZWFkYC4gSWYgaXQgd2FzIGZyb20gYGluZHhfcmVhZGAsIGl0ICpzaG91bGQqIGhhdmUgYG4tXHUwMDNlaW5kZXhgIGFuZCBgbi1cdTAwM2VuYmAgbWVtYmVycy4gQnV0LCB0aGlzIGNvZGUganVzdCBkb2VzIGEgYGtmcmVlKG4pYC4gVGhhdCBsb29rcyBsaWtlIGEgcG90ZW50aWFsIG1lbW9yeSBsZWFrIG9mIGJvdGggYG4tXHUwMDNlaW5kZXhgIGFuZCBgbi1cdTAwM2VuYmAuIFdhaXQgYSBzZWNvbmQgdGhvdWdoLCBgbmJfcHV0YCByZWxlYXNlcyBidWZmZXIgaGVhZHMuIFNvLCBpZiBga2ZyZWUobilgIGlzIGNhbGxlZCB3aXRob3V0IGEgY2FsbCB0byBgbmJfcHV0YCBmaXJzdCwgd2UncmUgZGVmaW5pdGVseSBsZWFraW5nIGJ1ZmZlciBoZWFkcyFcblxuSSByZW1lbWJlciB0aGF0IGBuYCBpcyBwb3BwZWQgZnJvbSBgZm5kYCBpbiBgaW5keF9maW5kX3NvcnRgIGFuZCB0aGF0IGBmbmRfcHVzaGAgcHVzaGVzIGBuYCAqYW5kKiBgZWAgdG8gYGZuZGAuXG5cbk9rYXksIHNvIEkgd29uZGVyIGlmIGBmbmRfY2xlYXJgIHdoaWNoIHNob3VsZCBjYWxsIGBwdXRfaW5keF9ub2RlYCBmb3IgYWxsIG5vZGVzIGluIGBmbmRgIGlzIGRvaW5nIHNvbWV0aGluZy4gWWVwLCBgZm5kX2NsZWFyYCBkb2VzIGluZGVlZCBjYWxsIGBwdXRfaW5keF9ub2RlYCBmb3IgYWxsIHRoZSBub2RlcyBpbiBgZm5kYC4gU28sIHdoeSBpcyBgaW5keF9maW5kX3NvcnRgIGNhbGxpbmcgYGtmcmVlKG4pYCBpbnN0ZWFkIG9mIGBwdXRfaW5keF9ub2RlKG4pYD8gTWFrZXMgbm8gc2Vuc2UhIEkgbmVlZCB0byBzZWUgaWYgYGluZHhfZmluZF9zb3J0YCBhY3R1YWxseSAqdXNlcyogYHB1dF9pbmR4X25vZGVgLiBPa2F5LCBpdCBkb2Vzbid0IHNlZW0gdG8sIGZyb20gYSBxdWljayBjaGVjay5cblxuQWxyaWdodCwgbG9va2luZyBhdCB0aGUgcGF0Y2gsIEkgc2VlIHRoYXQgdGhlIHBhdGNoICpvbmx5KiBhZGRlZCBga2ZyZWUobi1cdTAwM2VpbmRleCk7YCBpbiBhIHNpbmdsZSBzcG90OlxuXG5gYGBjXG4gXHRcdC8qIFBvcCBvbmUgbGV2ZWwuICovXG4gXHRcdGlmIChuKSB7XG4gXHRcdFx0Zm5kX3BvcChmbmQpO1xuK1x0XHRcdGtmcmVlKG4tXHUwMDNlaW5kZXgpO1xuIFx0XHRcdGtmcmVlKG4pO1xuIFx0XHR9XG5gYGBcblxuV2FpdCBhIHNlY29uZC4uLiB3aGVyZSBpcyB0aGUgY2FsbCB0byBgbmJfcHV0KFx1MDAyNm4tXHUwMDNlbmIpYD8gSXQncyBtaXNzaW5nIGVudGlyZWx5ISBBbmQgYG4tXHUwMDNlbmJgICppcyogYSBgc3RydWN0IG50ZnNfYnVmZmVyc2AuIEkgbmVlZCB0byBjaGVjayBgbmJfcHV0YCB0byBiZSBzdXJlLiBJdCBsb29rcyBsaWtlIGl0LiBUaGlzIGlzIGRlZmluaXRlbHkgYSBidWcgYW5kIGEgcG90ZW50aWFsIG1lbW9yeSBsZWFrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDc1MSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE2OjQzOjQ5Ljg0NTA0ODAyMloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjQ5NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvbnRmczMvbnRmc19mcy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExOTEsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExOTE6XFx0c3RhdGljIGlubGluZSB2b2lkIG5iX3B1dChzdHJ1Y3QgbnRmc19idWZmZXJzICpuYilcXG4xMTkyOlxcdHtcXG4xMTkzOlxcdFxcdHUzMiBpLCBuYnVmcyA9IG5iLVxcdTAwM2VuYnVmcztcXG4xMTk0OlxcdFxcbjExOTU6XFx0XFx0aWYgKCFuYnVmcylcXG4xMTk2OlxcdFxcdFxcdHJldHVybjtcXG4xMTk3OlxcdFxcbjExOTg6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5idWZzOyBpKyspXFxuMTE5OTpcXHRcXHRcXHRwdXRfYmgobmItXFx1MDAzZWJoW2ldKTtcXG4xMjAwOlxcdFxcdG5iLVxcdTAwM2VuYnVmcyA9IDA7XFxuMTIwMTpcXHR9XFxuMTIwMjpcXHRcXG4xMjAzOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfaW5keF9ub2RlKHN0cnVjdCBpbmR4X25vZGUgKmluKVxcbjEyMDQ6XFx0e1xcbjEyMDU6XFx0XFx0aWYgKCFpbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTY6NDM6NDkuODQ1MzMxMDMzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMjgzOTQzODc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgQnVmZmVyIEhlYWQgTGVhayBpbiBhIEZpbGVzeXN0ZW0gTW9kdWxlKipcblxuUmlnaHQsIHNvIGBuYl9wdXRgIGV4cGxpY2l0bHkgcmVsZWFzZXMgYnVmZmVyIGhlYWRzLiBUaGF0IG11Y2ggaXMgY2xlYXIuIFRoZSBwcm9ibGVtICphcHBlYXJzKiB0byBzdGVtIGZyb20gaG93IGBpbmR4X2ZpbmRfc29ydGAgY2xlYW5zIHVwLiBJdCdzIGRvaW5nIGEgc2ltcGxlIGBrZnJlZWAgb2YgdGhlIGBuLVx1MDAzZWluZGV4YCBhbmQgYG5gIHN0cnVjdHVyZXMuIElmIGBuYi1cdTAwM2VuYnVmc2AgaXMgZ3JlYXRlciB0aGFuIHplcm8sIHRob3NlIGJ1ZmZlciBoZWFkcyBhcmUgKm5vdCogYmVpbmcgcmVsZWFzZWQgaW4gYGluZHhfZmluZF9zb3J0YCwgbWVhbmluZyB3ZSBoYXZlIGEgbWVtb3J5IGxlYWshXG5cbkJ1dCBob2xkIG9uLi4uIEFtIEkgbWlzc2luZyBzb21ldGhpbmc/IERvZXMgYGluZHhfcmVhZGAgZXZlbiBzZXQgYG5iLVx1MDAzZW5idWZzYD8gSWYgYGluZHhfcmVhZGAgbmV2ZXIgc2V0cyBpdCwgdGhlbiB0aGlzIGlzIG5vdCBhbiBpc3N1ZS4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGluIG9yZGVyIHRvIGNvbmZpcm0gd2hldGhlciB0aGVyZSBhcmUgYnVmZmVyIGhlYWRzIGludm9sdmVkLlxuXG5Pa2F5LCBteSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBob3cgYGluZHhfcmVhZF9yYWAgd29ya3MuIFRoYXQgd2lsbCBiZSB3aGVyZSBJIGZvY3VzIG15IGF0dGVudGlvbiBuZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjEyMywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTY6NDQ6MDAuMTI5Mjc4NDdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk5OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL250ZnMzL2luZGV4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA5OCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA5ODpcXHRcXHRkb3duX3JlYWQobG9jayk7XFxuMTA5OTpcXHRcXHRlcnIgPSBudGZzX3JlYWRfYmhfcmEoc2JpLCBydW4sIHZibywgXFx1MDAyNmliLVxcdTAwM2VyaGRyLCBieXRlcywgXFx1MDAyNmluLVxcdTAwM2VuYiwgcmEpO1xcbjExMDA6XFx0XFx0dXBfcmVhZChsb2NrKTtcXG4xMTAxOlxcdFxcdGlmICghZXJyKVxcbjExMDI6XFx0XFx0XFx0Z290byBvaztcXG4xMTAzOlxcdFxcbjExMDQ6XFx0XFx0aWYgKGVyciA9PSAtRV9OVEZTX0ZJWFVQKVxcbjExMDU6XFx0XFx0XFx0Z290byBvaztcXG4xMTA2OlxcdFxcbjExMDc6XFx0XFx0aWYgKGVyciAhPSAtRU5PRU5UKVxcbjExMDg6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTEwOTpcXHRcXG4xMTEwOlxcdFxcdG5hbWUgPSBcXHUwMDI2c19pbmRleF9uYW1lc1tpbmR4LVxcdTAwM2V0eXBlXTtcXG4xMTExOlxcdFxcdGRvd25fd3JpdGUobG9jayk7XFxuMTExMjpcXHRcXHRlcnIgPSBhdHRyX2xvYWRfcnVuc19yYW5nZShuaSwgQVRUUl9BTExPQywgbmFtZS1cXHUwMDNlbmFtZSwgbmFtZS1cXHUwMDNlbmFtZV9sZW4sXFxuMTExMzpcXHRcXHRcXHRcXHRcXHQgICBydW4sIHZibywgdmJvICsgYnl0ZXMpO1xcbjExMTQ6XFx0XFx0dXBfd3JpdGUobG9jayk7XFxuMTExNTpcXHRcXHRpZiAoZXJyKVxcbjExMTY6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTExNzpcXHRcXG4xMTE4OlxcdFxcdGRvd25fcmVhZChsb2NrKTtcXG4xMTE5OlxcdFxcdGVyciA9IG50ZnNfcmVhZF9iaF9yYShzYmksIHJ1biwgdmJvLCBcXHUwMDI2aWItXFx1MDAzZXJoZHIsIGJ5dGVzLCBcXHUwMDI2aW4tXFx1MDAzZW5iLCByYSk7XFxuMTEyMDpcXHRcXHR1cF9yZWFkKGxvY2spO1xcbjExMjE6XFx0XFx0aWYgKGVyciA9PSAtRV9OVEZTX0ZJWFVQKVxcbjExMjI6XFx0XFx0XFx0Z290byBvaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTY6NDQ6MDAuMTI5NDgwNDhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTEwMzkwNjYxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgQnVmZmVyIEhlYWQgTGVhayBpbiB0aGUgTlRGUzMgRmlsZXN5c3RlbSBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBgbnRmc19yZWFkX2JoX3JhYCBkZWZpbml0ZWx5IHJlYWRzIGJ1ZmZlciBoZWFkcyBpbnRvIGBpbi1cdTAwM2VuYmAuIFRoYXQgbWVhbnMgYGluLVx1MDAzZW5iYCB3aWxsIGhvbGQgYnVmZmVyIGhlYWRzLiBOb3csIGlmIGBpbmR4X2ZpbmRfc29ydGAgZG9lc24ndCBjYWxsIGBuYl9wdXRgLCB3ZSd2ZSBnb3QgYSBwb3RlbnRpYWwgbGVhayByaWdodCB0aGVyZS4gQnV0IHdhaXQsIHdoeSBkaWQgdGhlIHBhdGNoIG9ubHkgaW5jbHVkZSBga2ZyZWUobi1cdTAwM2VpbmRleClgPyBDb3VsZCBpdCBiZSB0aGF0IGBuLVx1MDAzZW5iYCBpcyBzb21ldGltZXMgZW1wdHk/XG5cbkhvbGQgb24uLi4gcGVyaGFwcyBgbnRmc19yZWFkX2JoX3JhYCBpc24ndCBldmVuIGNhbGxlZCBpZiBgaW5keF9yZWFkYCBmYWlscz8gQnV0IG5vLCBgbmAgaXMgcG9wcGVkIGZyb20gYGZuZGAgaW4gYGluZHhfZmluZF9zb3J0YC4gSWYgaXQncyBpbiBgZm5kYCwgaXQgd2FzIHB1c2hlZCB0aGVyZSBieSBgZm5kX3B1c2hgLiBgZm5kX3B1c2hgIGdldHMgY2FsbGVkIGFmdGVyIGBpbmR4X3JlYWRgIHN1Y2NlZWRzLiBTbywgd2UgKmtub3cqIGBuYCB3YXMgcmVhZCBzdWNjZXNzZnVsbHksIGFuZCBgaW4tXHUwMDNlbmJgICpzaG91bGQqIGNvbnRhaW4gYnVmZmVyIGhlYWRzLlxuXG5BaGEhIElmIGBpbmR4X2ZpbmRfc29ydGAgb25seSBkb2VzIGBrZnJlZShuLVx1MDAzZWluZGV4KTsga2ZyZWUobik7YCwgdGhhdCdzIGEgZGVmaW5pdGUgYnVmZmVyIGhlYWQgbGVhayEgTGV0J3MganVzdCBkb3VibGUtY2hlY2sgdGhlIHBhdGNoIHRvIG1ha2Ugc3VyZSB0aGUgYXV0aG9yIGRpZG4ndCBpbnRlbmQgc29tZXRoaW5nIGVsc2UuXG5cblllcCwgdGhlIHBhdGNoIGlzIGV4YWN0bHkgYXMgZGVzY3JpYmVkLCBleHBsaWNpdGx5IGFkZGluZyBga2ZyZWUobi1cdTAwM2VpbmRleClgIGFuZCBga2ZyZWUobilgLCB3aGljaCBpcyBzaG93biBiZWxvdzpcblxuYGBgZGlmZlxuQEAgLTEzMjUsNiArMTMyNSw3IEBAIGludCBpbmR4X2ZpbmRfc29ydChzdHJ1Y3QgbnRmc19pbmRleCAqaW5keCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxuIFx0XHQvKiBQb3Agb25lIGxldmVsLiAqL1xuIFx0XHRpZiAobikge1xuIFx0XHRcdGZuZF9wb3AoZm5kKTtcbitcdFx0XHRrZnJlZShuLVx1MDAzZWluZGV4KTtcbiBcdFx0XHRrZnJlZShuKTtcbiBcdFx0fVxuYGBgXG5cbldhaXQgYSBzZWNvbmQsIHdoeSBkaWRuJ3QgdGhleSB1c2UgYHB1dF9pbmR4X25vZGUobilgPyBMZXQncyByZWZyZXNoIG91ciBtZW1vcnkgb24gd2hhdCB0aGF0IGZ1bmN0aW9uIGRvZXMuXG5cbmBgYGNcbnN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfaW5keF9ub2RlKHN0cnVjdCBpbmR4X25vZGUgKmluKVxue1xuXHRpZiAoIWluKVxuXHRcdHJldHVybjtcblxuXHRrZnJlZShpbi1cdTAwM2VpbmRleCk7XG5cdG5iX3B1dChcdTAwMjZpbi1cdTAwM2VuYik7XG5cdGtmcmVlKGluKTtcbn1cbmBgYFxuXG5JZiBgcHV0X2luZHhfbm9kZShuKWAgd2FzIHVzZWQsIGl0IHdvdWxkIGZyZWUgYGluLVx1MDAzZWluZGV4YCwgcHV0IGBpbi1cdTAwM2VuYmAsICphbmQqIGZyZWUgYGluYC4gQnV0IGl0IGRvZXNuJ3QuIFRoZXkgc3BlY2lmaWNhbGx5IGFkZGVkIGBrZnJlZShuLVx1MDAzZWluZGV4KWAgKmFuZCoga2VwdCBga2ZyZWUobilgLiBTbyBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIHBvc3NpYmxlIHRoYXQgYG4tXHUwMDNlbmJgIGlzIGFscmVhZHkgcHV0PyBOby4gVGhlIHBhdGNoIGxvb2tzIGJ1Z2d5LCBkb2Vzbid0IGl0P1xuXG5SZWdhcmRsZXNzLCB0aGUgcGF0Y2ggdG91Y2hlcyBgZnMvbnRmczMvaW5kZXguY2AsIHRoZSBOVEZTMyBmaWxlc3lzdGVtIGRyaXZlci4gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhaW1lZCBhdCBmaXhpbmcgYSBtZW1vcnkgbGVhayAob2YgYG4tXHUwMDNlaW5kZXhgKSwgYnV0IGl0IGxvb2tzIGxpa2UgaXQgZG9lcyBpdCBpbmNvcnJlY3RseS4gSXMgdGhpcyByZWFjaGFibGUgY29kZT8gRGVmaW5pdGVseS4gYGluZHhfZmluZF9zb3J0YCBnZXRzIGNhbGxlZCBkdXJpbmcgZGlyZWN0b3J5IG9wZXJhdGlvbnMgb3IgaW5kZXggbG9va3Vwcy4gTm93IEkgbmVlZCB0byBjaGVjayB3aGVyZSBgaW5keF9maW5kX3NvcnRgIGlzIGNhbGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4NTIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNjo0NDowOS4yMzMzOTE0ODlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTg0NjQzNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5keF9maW5kX3NvcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmczMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMzL2ZzbnRmcy5jPTIwODE9aW50IG50ZnNfaW5zZXJ0X3NlY3VyaXR5KHN0cnVjdCBudGZzX3NiX2luZm8gKnNiaSxcXG4tLVxcbmZzL250ZnMzL2ZzbnRmcy5jLTIxNjQtXFxuZnMvbnRmczMvZnNudGZzLmM6MjE2NTpcXHRcXHRlcnIgPSBpbmR4X2ZpbmRfc29ydChpbmR4X3NkaCwgbmksIHJvb3Rfc2RoLFxcbmZzL250ZnMzL2ZzbnRmcy5jLTIxNjYtXFx0XFx0XFx0XFx0ICAgICAoc3RydWN0IE5URlNfREUgKiopXFx1MDAyNmUsIGZuZF9zZGgpO1xcbi0tXFxuZnMvbnRmczMvaW5kZXguYz0xMTY5PWludCBpbmR4X2ZpbmQoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcXG4tLVxcbmZzL250ZnMzL2luZGV4LmMtMTI0My1cXG5mcy9udGZzMy9pbmRleC5jOjEyNDQ6aW50IGluZHhfZmluZF9zb3J0KHN0cnVjdCBudGZzX2luZGV4ICppbmR4LCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXFxuZnMvbnRmczMvaW5kZXguYy0xMjQ1LVxcdFxcdCAgIGNvbnN0IHN0cnVjdCBJTkRFWF9ST09UICpyb290LCBzdHJ1Y3QgTlRGU19ERSAqKmVudHJ5LFxcbi0tXFxuZnMvbnRmczMvbnRmc19mcy5oPTc1NT1pbnQgaW5keF9maW5kKHN0cnVjdCBudGZzX2luZGV4ICppbmR4LCBzdHJ1Y3QgbnRmc19pbm9kZSAqZGlyLFxcbi0tXFxuZnMvbnRmczMvbnRmc19mcy5oLTc1OC1cXHQgICAgICBzdHJ1Y3QgbnRmc19mbmQgKmZuZCk7XFxuZnMvbnRmczMvbnRmc19mcy5oOjc1OTppbnQgaW5keF9maW5kX3NvcnQoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcXG5mcy9udGZzMy9udGZzX2ZzLmgtNzYwLVxcdFxcdCAgIGNvbnN0IHN0cnVjdCBJTkRFWF9ST09UICpyb290LCBzdHJ1Y3QgTlRGU19ERSAqKmVudHJ5LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNjo0NDoxMS4xNTE4NjA2NTdaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk1NDA1NTM2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRGl2aW5nIGludG8gdGhlIGBudGZzX2luc2VydF9zZWN1cml0eWAgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCB0aGUgc3lzdGVtIGlzIGNhbGxpbmcgYG50ZnNfaW5zZXJ0X3NlY3VyaXR5YC4gVGhhdCdzIGEga2V5IGZ1bmN0aW9uIGZvciBtYW5hZ2luZyBzZWN1cml0eSBkZXNjcmlwdG9ycyB3aXRoaW4gdGhlIE5URlMgZmlsZSBzeXN0ZW0uIExldCdzIGRpZyBpbiBhbmQgc2VlIGV4YWN0bHkgd2hhdCdzIGdvaW5nIG9uIHdpdGhpbiBgbnRmc19pbnNlcnRfc2VjdXJpdHlgLiBJdCdzIHRpbWUgdG8gdW5kZXJzdGFuZCBob3cgc2VjdXJpdHkgYXR0cmlidXRlcyBhcmUgYmVpbmcgYXBwbGllZCBhdCB0aGlzIHBvaW50LiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBleGFjdCBsb2dpYyB1c2VkIGFuZCBwb3RlbnRpYWwgcGl0ZmFsbHMgdG8gbG9vayBmb3IgaW4gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NTk3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTY6NDQ6MTQuMTA1OTIwOTk5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjQxNTg5NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnRmc19pbnNlcnRfc2VjdXJpdHlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmczMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMzL2ZzbnRmcy5jPTE5ODE9aW50IG50ZnNfZ2V0X3NlY3VyaXR5X2J5X2lkKHN0cnVjdCBudGZzX3NiX2luZm8gKnNiaSwgX19sZTMyIHNlY3VyaXR5X2lkLFxcbi0tXFxuZnMvbnRmczMvZnNudGZzLmMtMjA3MC0vKlxcbmZzL250ZnMzL2ZzbnRmcy5jOjIwNzE6ICogbnRmc19pbnNlcnRfc2VjdXJpdHkgLSBJbnNlcnQgc2VjdXJpdHkgZGVzY3JpcHRvciBpbnRvICRTZWN1cmU6OlNEUy5cXG5mcy9udGZzMy9mc250ZnMuYy0yMDcyLSAqXFxuLS1cXG5mcy9udGZzMy9mc250ZnMuYy0yMDgwLSAqL1xcbmZzL250ZnMzL2ZzbnRmcy5jOjIwODE6aW50IG50ZnNfaW5zZXJ0X3NlY3VyaXR5KHN0cnVjdCBudGZzX3NiX2luZm8gKnNiaSxcXG5mcy9udGZzMy9mc250ZnMuYy0yMDgyLVxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgU0VDVVJJVFlfREVTQ1JJUFRPUl9SRUxBVElWRSAqc2QsXFxuLS1cXG5mcy9udGZzMy9pbm9kZS5jPTExODM9aW50IG50ZnNfY3JlYXRlX2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL250ZnMzL2lub2RlLmMtMTMzNS1cXHRcXHRcXHRpZiAoc2VjdXJpdHlfaWQgPT0gU0VDVVJJVFlfSURfSU5WQUxJRCBcXHUwMDI2XFx1MDAyNlxcbmZzL250ZnMzL2lub2RlLmM6MTMzNjpcXHRcXHRcXHQgICAgIW50ZnNfaW5zZXJ0X3NlY3VyaXR5KHNiaSwgc2QsIHNkX3NpemUsXFxuZnMvbnRmczMvaW5vZGUuYy0xMzM3LVxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnNlY3VyaXR5X2lkLCBOVUxMKSlcXG4tLVxcbmZzL250ZnMzL250ZnNfZnMuaD03MTA9aW50IG50ZnNfZ2V0X3NlY3VyaXR5X2J5X2lkKHN0cnVjdCBudGZzX3NiX2luZm8gKnNiaSwgX19sZTMyIHNlY3VyaXR5X2lkLFxcbi0tXFxuZnMvbnRmczMvbnRmc19mcy5oLTcxMi1cXHRcXHRcXHQgICAgc2l6ZV90ICpzaXplKTtcXG5mcy9udGZzMy9udGZzX2ZzLmg6NzEzOmludCBudGZzX2luc2VydF9zZWN1cml0eShzdHJ1Y3QgbnRmc19zYl9pbmZvICpzYmksXFxuZnMvbnRmczMvbnRmc19mcy5oLTcxNC1cXHRcXHRcXHQgY29uc3Qgc3RydWN0IFNFQ1VSSVRZX0RFU0NSSVBUT1JfUkVMQVRJVkUgKnNkLFxcbi0tXFxuZnMvbnRmczMveGF0dHIuYz04NjI9c3RhdGljIG5vaW5saW5lIGludCBudGZzX3NldHhhdHRyKGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLFxcbi0tXFxuZnMvbnRmczMveGF0dHIuYy05NDUtXFxuZnMvbnRmczMveGF0dHIuYzo5NDY6XFx0XFx0ZXJyID0gbnRmc19pbnNlcnRfc2VjdXJpdHkobmktXFx1MDAzZW1pLnNiaSwgdmFsdWUsIHNpemUsXFxuZnMvbnRmczMveGF0dHIuYy05NDctXFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNnNlY3VyaXR5X2lkLCBcXHUwMDI2aW5zZXJ0ZWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNjo0NDoxNC43NzAwODU3NzRaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwMjM3NjA1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipEZWJ1Z2dpbmcgdGhlIE5URlMzIE1vZHVsZSoqXG5cblJpZ2h0LCBzbyB0aGlzIGlzIHRyaWdnZXJlZCB3aXRoaW4gYG50ZnNfY3JlYXRlX2lub2RlYCBhbmQgYG50ZnNfc2V0eGF0dHJgLiBHb29kLCB0aGF0IG5hcnJvd3MgZG93biB0aGUgc2NvcGUgY29uc2lkZXJhYmx5LiBJIGNhbiBzZWUgdGhhdCB0aGlzIGlzIGRlZmluaXRlbHkgYW4gYWN0aXZlIGNvZGUgcGF0aDsgaXQncyByZWFjaGFibGUgYW5kIHdvcmtpbmcgYXMgZXhwZWN0ZWQgd2l0aGluIHRoZSBmaWxlIHN5c3RlbSBvcGVyYXRpb25zLiBUaGUgcGF0Y2ggYWltcyB0byBhZGRyZXNzIGEgbWVtb3J5IGxlYWsgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGluZHhfZmluZF9zb3J0YCBmdW5jdGlvbi5cblxuTm93LCB0aGF0IG5hbWUgcmluZ3MgYSBiZWxsLi4uIGBpbmR4X2ZpbmRfc29ydGAuIEFuZCBpdCBqdXN0IGNsaWNrZWQsIGBpbmR4X2ZpbmRfc29ydGAgaXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmchIEEgZnVuY3Rpb24gd2l0aCBcInNvcnRcIiBpbiBpdHMgbmFtZSBzdWdnZXN0cyBkYXRhIG1hbmlwdWxhdGlvbiwgYW5kIHRob3NlIGFyZSBvZnRlbiBwcm9uZSB0byBvZmYtYnktb25lIGVycm9ycyBvciBpbmNvcnJlY3QgbWVtb3J5IGhhbmRsaW5nLCB3aGljaCBpcyBhIGdyZWF0IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgd2hlbiB3cml0aW5nIGEgZnV6emVyLiBJdCdzIHRpbWUgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgTlRGUzMgdG8gbWFrZSBzdXJlIEkndmUgZ290IGV2ZXJ5dGhpbmcgZW5hYmxlZCBmb3IgZWZmZWN0aXZlIHRlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NDAxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTY6NDQ6MTguNjcyNDY0NDk1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTU2ODkxODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5URlMzX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzMy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvbnRmczMvS2NvbmZpZzoyOmNvbmZpZyBOVEZTM19GU1xcbmZzL250ZnMzL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiTlRGUyBSZWFkLVdyaXRlIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9udGZzMy9LY29uZmlnPTI4PWNvbmZpZyBOVEZTM19MWlhfWFBSRVNTXFxuLS1cXG5mcy9udGZzMy9LY29uZmlnLTM3LVxcbmZzL250ZnMzL0tjb25maWc6Mzg6Y29uZmlnIE5URlMzX0ZTX1BPU0lYX0FDTFxcbmZzL250ZnMzL0tjb25maWctMzktXFx0Ym9vbCBcXFwiTlRGUyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTY6NDQ6MTguOTI4MTYyMDgxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MTAxOTgwMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5URlMzIENvbmZpZ3VyYXRpb24gT3B0aW9ucyBmb3IgWGF0dHIgYW5kIFNlY3VyaXR5IERlc2NyaXB0b3IgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgYE5URlMzX0ZTYCBjb25maWcsIHRoYXQncyB0aGUgYmFzZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGV4dGVuZGVkIGF0dHJpYnV0ZXMgKHhhdHRyKSBhbmQgc2VjdXJpdHkgZGVzY3JpcHRvcnMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBOVEZTMyBmaWxlc3lzdGVtLiBUaGUga2V5IGhlcmUgaXMgdG8gZGV0ZXJtaW5lIHdoaWNoIGNvbmZpZ3VyYXRpb25zIGluZmx1ZW5jZSB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBhcmUgdGhlcmUgKmFueSogb3RoZXIgY29uZmlnIG9wdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudD8gVGhlIGZpcnN0IHRoYXQganVtcHMgb3V0IGlzIGBOVEZTM19GU19QT1NJWF9BQ0xgLiBUaGF0IGNvdWxkIGRlZmluaXRlbHkgYmUgdGllZCBpbjsgSSBuZWVkIHRvIHNlZSBpZiBpdCBwbGF5cyBhbnkgcm9sZSBpbiBob3cgeGF0dHIgb3Igc2VjdXJpdHkgZGVzY3JpcHRvcnMgYXJlIG1hbmFnZWQsIHNwZWNpZmljYWxseS5cblxuTm93LCBhIGNydWNpYWwgY29ubmVjdGlvbjogSSByZW1lbWJlciBzZWVpbmcgYG50ZnNfaW5zZXJ0X3NlY3VyaXR5YCBiZWluZyBjYWxsZWQgZnJvbSBgbnRmc19zZXR4YXR0cmAuIFRoYXQncyBhIHN0cm9uZyBpbmRpY2F0aW9uIHRoYXQgYW55IGNvbmZpZyBhZmZlY3RpbmcgYG50ZnNfc2V0eGF0dHJgIHdpbGwgaGF2ZSBhbiBpbXBhY3QuXG5cblJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS4gSSdsbCBjaGVjayBgZnMvbnRmczMveGF0dHIuY2AgYmVjYXVzZSB0aGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0aGUgYG50ZnNfc2V0eGF0dHJgIGZ1bmN0aW9uIHRvIGJlIGRlZmluZWQuIEkgd2FudCB0byBzZWUgaWYgYG50ZnNfc2V0eGF0dHJgIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgb3IgZ3VhcmRlZCBieSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgY2xlYXJlc3QgcGljdHVyZSBvZiBob3cgdGhlc2UgY29uZmlncyBpbnRlcmFjdCB3aXRoIHhhdHRyIGFuZCBzZWN1cml0eSBkZXNjcmlwdG9yIG1hbmFnZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODg1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE2OjQ0OjIzLjMzODM2MjkxNVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEyOTA1NzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm50ZnNfc2V0eGF0dHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmczMveGF0dHIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzMy94YXR0ci5jPTg1Mz1zdGF0aWMgYm9vbCBudGZzX2lzX3Jlc2VydmVkX2x4YXR0cihjb25zdCBjaGFyICpuYW1lKVxcbi0tXFxuZnMvbnRmczMveGF0dHIuYy04NTktLypcXG5mcy9udGZzMy94YXR0ci5jOjg2MDogKiBudGZzX3NldHhhdHRyIC0gaW5vZGVfb3BlcmF0aW9uczo6c2V0eGF0dHJcXG5mcy9udGZzMy94YXR0ci5jLTg2MS0gKi9cXG5mcy9udGZzMy94YXR0ci5jOjg2MjpzdGF0aWMgbm9pbmxpbmUgaW50IG50ZnNfc2V0eGF0dHIoY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsXFxuZnMvbnRmczMveGF0dHIuYy04NjMtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGUsXFxuLS1cXG5mcy9udGZzMy94YXR0ci5jPTEwNjE9c3RhdGljIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIG50ZnNfb3RoZXJfeGF0dHJfaGFuZGxlciA9IHtcXG4tLVxcbmZzL250ZnMzL3hhdHRyLmMtMTA2My1cXHQuZ2V0XFx0PSBudGZzX2dldHhhdHRyLFxcbmZzL250ZnMzL3hhdHRyLmM6MTA2NDpcXHQuc2V0XFx0PSBudGZzX3NldHhhdHRyLFxcbmZzL250ZnMzL3hhdHRyLmMtMTA2NS1cXHQubGlzdFxcdD0gbnRmc194YXR0cl91c2VyX2xpc3QsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE2OjQ0OjIzLjg1MTI3NDMzOFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTc1NDA5NDIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYnJlYWtkb3duIG9mIHdoYXQncyBnb2luZyBvbiwgdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGxpa2UgSSB3b3VsZCBpbiBteSBvd24gd29yazpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBOVEZTMyBGaWxlc3lzdGVtIENvbmZpZ3VyYXRpb24gUmVxdWlyZW1lbnQqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY2x1ZSBoZXJlIGlzIHRoYXQgdGhlIGZ1bmN0aW9uIEknbSBpbnRlcmVzdGVkIGluIGlzbid0IHByb3RlY3RlZCBieSBhIHNwZWNpZmljLCBkZXRhaWxlZCBjb25maWd1cmF0aW9uIG9wdGlvbiDigJMgaXQncyBqdXN0IHRpZWQgdG8gYE5URlMzX0ZTYC4gVGhhdCB0ZWxscyBtZSAqdGhhdCogaXMgdGhlIHJlcXVpcmVkIGNvbmZpZy4gUHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBzbyBmYXIuXG5cbk5vdywgbGV0J3MgY2lyY2xlIGJhY2sgdG8gYGluZHhfZmluZF9zb3J0YC4gSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nOiBpcyB0aGlzIGEgc3RhdGljIGZ1bmN0aW9uLCBvciBpcyBpdCB2aXNpYmxlIG91dHNpZGUgb2YgaXRzIGltbWVkaWF0ZSBzY29wZT8gUXVpY2tseSwgSSBzZWUgdGhhdCBpdCBpcyBleHBvcnRlZCBvciBhdCBsZWFzdCBub24tc3RhdGljLlxuXG5Pa2F5LCBsZXQncyBnbyBkaXJlY3RseSB0byB0aGUgc291cmNlLiBUaGUgZmlsZSBgZnMvbnRmczMvaW5kZXguY2AgaXMgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBleGFtaW5lIHRoZSBjb2RlIGZvciBgaW5keF9maW5kX3NvcnRgLiBJJ2xsIG9wZW4gdGhhdCB1cCBhbmQgdGFrZSBhIGxvb2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjIxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTY6NDQ6MjguODI2Njg3NjExWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjcwNTA2OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IGluZHhfZmluZF9zb3J0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMzL2luZGV4LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmczMvaW5kZXguYz0xMTY5PWludCBpbmR4X2ZpbmQoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcXG4tLVxcbmZzL250ZnMzL2luZGV4LmMtMTI0My1cXG5mcy9udGZzMy9pbmRleC5jOjEyNDQ6aW50IGluZHhfZmluZF9zb3J0KHN0cnVjdCBudGZzX2luZGV4ICppbmR4LCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXFxuZnMvbnRmczMvaW5kZXguYy0xMjQ1LVxcdFxcdCAgIGNvbnN0IHN0cnVjdCBJTkRFWF9ST09UICpyb290LCBzdHJ1Y3QgTlRGU19ERSAqKmVudHJ5LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNjo0NDoyOS4wNTM3NDQzMzlaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQwNjU4NjQ3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgZm9yIEVuaGFuY2VtZW50cyBpbiBGb2N1c1N5bWJvbHMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGNvbmZpcm1lZDogaXQncyBub3QgYSBzdGF0aWMgaW1wbGVtZW50YXRpb24uIFRoYXQgb3BlbnMgdXAgc29tZSBpbnRlcmVzdGluZyBwb3NzaWJpbGl0aWVzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJDYW4gd2UgbGV2ZXJhZ2UgdGhpcyBub24tc3RhdGljIG5hdHVyZT9cIiBUaGUgb2J2aW91cyBuZXh0IHN0ZXAgaXMgdG8gY29uc2lkZXIgYWRkaW5nIGBpbmR4X2ZpbmRfc29ydGAgYW5kIGBudGZzX2luc2VydF9zZWN1cml0eWAgdG8gYEZvY3VzU3ltYm9sc2AuIFRoYXQgZmVlbHMgbGlrZSBhIGxvZ2ljYWwgcHJvZ3Jlc3Npb24sIHBvdGVudGlhbGx5IGltcHJvdmluZyBpdHMgY2FwYWJpbGl0aWVzLiBCZWZvcmUgSSBnZXQgdG9vIGZhciBkb3duIHRoYXQgcGF0aCwgSSBuZWVkIHRvIHZlcmlmeSBhIGNyaXRpY2FsIGFzc3VtcHRpb24sIHNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIGlmIGBudGZzX2luc2VydF9zZWN1cml0eWAgaXMgYWxzbyAqbm9uLXN0YXRpYyouIElmIGl0ICppcyogc3RhdGljLCB0aGVuIHRoaXMgd2hvbGUgbGluZSBvZiB0aGlua2luZyBpcyBwcm9iYWJseSB1bnByb2R1Y3RpdmUuIEknbSBnb2luZyB0byBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBjb25maXJtIGl0cyBpbXBsZW1lbnRhdGlvbiBiZWZvcmUgcHJvY2VlZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwODksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNjo0NDozNS40NjAzMzQ4OTZaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5Njc1MzcyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgbnRmc19pbnNlcnRfc2VjdXJpdHlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmczMvZnNudGZzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmczMvZnNudGZzLmM9MTk4MT1pbnQgbnRmc19nZXRfc2VjdXJpdHlfYnlfaWQoc3RydWN0IG50ZnNfc2JfaW5mbyAqc2JpLCBfX2xlMzIgc2VjdXJpdHlfaWQsXFxuLS1cXG5mcy9udGZzMy9mc250ZnMuYy0yMDgwLSAqL1xcbmZzL250ZnMzL2ZzbnRmcy5jOjIwODE6aW50IG50ZnNfaW5zZXJ0X3NlY3VyaXR5KHN0cnVjdCBudGZzX3NiX2luZm8gKnNiaSxcXG5mcy9udGZzMy9mc250ZnMuYy0yMDgyLVxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgU0VDVVJJVFlfREVTQ1JJUFRPUl9SRUxBVElWRSAqc2QsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE2OjQ0OjM2LjA1NzA5NzkxNFoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDQ5NjQzNDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUaGlzIFBhdGNoOiBBIEZ1bmN0aW9uYWwgQ2hhbmdlIFdvcnRoIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGNsZWFybHkgdGFyZ2V0cyBub24tc3RhdGljIGNvZGUg4oCTIHRoYXQncyB0aGUgZmlyc3QgdGhpbmcgSSBub3RpY2VkLiBOb3csIGxldCdzIGRyaWxsIGRvd24gYW5kIHNlZSB3aGF0J3MgYWN0dWFsbHkgYmVpbmcgbW9kaWZpZWQuIEl0IGxvb2tzIGxpa2UgdGhlIHByaW1hcnkgZnVuY3Rpb24gdW5kZXIgc2NydXRpbnkgaXMgYGluZHhfZmluZF9zb3J0YC4gQW5kIHllcywgdGhlIHBhdGNoIGV4cGxpY2l0bHkgYWRkcmVzc2VzIGEgbWVtb3J5IGxlYWsgaW4gYGluZHhfZmluZF9zb3J0YCByZWxhdGVkIHRvIGBuLVx1MDAzZWluZGV4YC4gU3BlY2lmaWNhbGx5LCBpdCBhcHBlYXJzIHRoZSBmaXggaW52b2x2ZXMgZnJlZWluZyBgbi1cdTAwM2VpbmRleGAgYmVmb3JlIGBuYCB3aGVuIGEgbGV2ZWwgaXMgcG9wcGVkIGZyb20gdGhlIGZpbmQgc3RhdGUuXG5cblRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBhIGNvcmUgYXNwZWN0IG9mIGhvdyB0aGUgZmlsZXN5c3RlbSBoYW5kbGVzIGluZGV4IGxvb2t1cHMuIEdpdmVuIHRoYXQsIGFuZCBjb25zaWRlcmluZyBpdCBpbnZvbHZlcyByZWFjaGFibGUgY29yZSBmaWxlc3lzdGVtIGxvZ2ljIOKAkyBzcGVjaWZpY2FsbHkgd2hlbiB0aGUgZnVuY3Rpb24gaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHNlY3VyaXR5IGRlc2NyaXB0b3IgaW5zZXJ0aW9uIOKAkyBhbmQgY29uc2lkZXJpbmcgYE5URlMzX0ZTYCBpcyBlbmFibGVkLCBJJ20gZ29pbmcgdG8gZmxhZyB0aGlzIGFzICpkZWZpbml0ZWx5KiB3b3J0aCBmdXp6aW5nLiBJIG1lYW4sIG1lbW9yeSBsZWFrcyBpbiBpbmRleCBtYW5hZ2VtZW50PyBUaGF0J3MgcHJpbWUgZnV6emluZyB0ZXJyaXRvcnkuIEp1c3QgdG8gYmUgY29tcGxldGVseSBzdXJlLCBJJ2xsIGRvdWJsZS1jaGVjayB0byBtYWtlIHN1cmUgYGluZHhfZmluZF9zb3J0YCBpcyB0aGUgKm9ubHkqIGZ1bmN0aW9uIGltcGFjdGVkLCBidXQgSSdtIGZlZWxpbmcgY29uZmlkZW50IGFib3V0IHRoaXMgb25lLiBNeSBjYWxsIGlzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTEzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE2OjQ0OjQxLjEwNjc0NDQ2NFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4MzM0OTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtmcmVlXFxcXChuLVxcdTAwM2VpbmRleFxcXFwpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMzL2luZGV4LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmczMvaW5kZXguYz0xMjQ0PWludCBpbmR4X2ZpbmRfc29ydChzdHJ1Y3QgbnRmc19pbmRleCAqaW5keCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxcbi0tXFxuZnMvbnRmczMvaW5kZXguYy0xMzI3LVxcdFxcdFxcdGZuZF9wb3AoZm5kKTtcXG5mcy9udGZzMy9pbmRleC5jOjEzMjg6XFx0XFx0XFx0a2ZyZWUobi1cXHUwMDNlaW5kZXgpO1xcbmZzL250ZnMzL2luZGV4LmMtMTMyOS1cXHRcXHRcXHRrZnJlZShuKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTY6NDQ6NDEuMjQ1MDg1MzM3WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyOTkzNjA5NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgTW9kaWZpY2F0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGZvY3VzIGlzIHJlYWxseSBvbiBgaW5keF9maW5kX3NvcnRgLiBUaGF0J3MgdGhlIG9ubHkgZnVuY3Rpb24gdW5kZXJnb2luZyBhIGNoYW5nZS4gVGhhdCdzIGdvb2QgdG8ga25vdywga2VlcHMgdGhlIHNjb3BlIG9mIGludmVzdGlnYXRpb24gdGlnaHRlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0J3MgYmVpbmcgZG9uZSB3aXRoaW4gYGluZHhfZmluZF9zb3J0YCwgYnV0IGF0IGxlYXN0IEknbSBub3QgZGVhbGluZyB3aXRoIGEgcmlwcGxlIGVmZmVjdCBhY3Jvc3MgbXVsdGlwbGUgbW9kdWxlcy4gSSBzaG91bGQgcHJvYmFibHkgbGFiZWwgdGhlIG91dHB1dCBmcm9tIHRoZSBmdW5jdGlvbiBhcyBgc2V0LXJlc3VsdHNgLCBvciBzb21ldGhpbmcgZXF1YWxseSBkZXNjcmlwdGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIxMzEsIk91dHB1dFRva2VucyI6MTE1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTY6NDQ6NDQuNTQ0NDUwNDlaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDI5NTkwNDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5URlMzX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW5keF9maW5kX3NvcnRcIixcbiAgICBcIm50ZnNfaW5zZXJ0X3NlY3VyaXR5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiBgaW5keF9maW5kX3NvcnRgIHdpdGhpbiB0aGUgTlRGUzMgZmlsZXN5c3RlbSBkcml2ZXIgYnkgZnJlZWluZyBgbi1cXHUwMDNlaW5kZXhgIGJlZm9yZSBgbmAgd2hlbiBwb3BwaW5nIGEgbGV2ZWwgZnJvbSB0aGUgZmluZCBzdGF0ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGZpbGVzeXN0ZW0gbG9naWMsIHNwZWNpZmljYWxseSBkdXJpbmcgaW5kZXggbG9va3VwcyBhbmQgc2VjdXJpdHkgZGVzY3JpcHRvciBpbnNlcnRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlRGUzNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpbmR4X2ZpbmRfc29ydFwiLFxuICAgIFwibnRmc19pbnNlcnRfc2VjdXJpdHlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIGBpbmR4X2ZpbmRfc29ydGAgd2l0aGluIHRoZSBOVEZTMyBmaWxlc3lzdGVtIGRyaXZlciBieSBmcmVlaW5nIGBuLVxcdTAwM2VpbmRleGAgYmVmb3JlIGBuYCB3aGVuIHBvcHBpbmcgYSBsZXZlbCBmcm9tIHRoZSBmaW5kIHN0YXRlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgZmlsZXN5c3RlbSBsb2dpYywgc3BlY2lmaWNhbGx5IGR1cmluZyBpbmRleCBsb29rdXBzIGFuZCBzZWN1cml0eSBkZXNjcmlwdG9yIGluc2VydGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow586pk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-25 16:25:36 +0000 UTC FinishedAt: 2026-07-25 16:44:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "9eebf259d5352b87080d67758f483583d9e763d7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NTFS3_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "9eebf259d5352b87080d67758f483583d9e763d7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NTFS3_FS" ], "series_id": "acab1807-3a53-4739-84c2-55ab0f46bf38" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "indx_find_sort", "ntfs_insert_security" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE2OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05URlMzX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW5keF9maW5kX3NvcnQmIzM0OywKICAgICYjMzQ7bnRmc19pbnNlcnRfc2VjdXJpdHkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiBgaW5keF9maW5kX3NvcnRgIHdpdGhpbiB0aGUgTlRGUzMgZmlsZXN5c3RlbSBkcml2ZXIgYnkgZnJlZWluZyBgbi1cdTAwM2VpbmRleGAgYmVmb3JlIGBuYCB3aGVuIHBvcHBpbmcgYSBsZXZlbCBmcm9tIHRoZSBmaW5kIHN0YXRlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgZmlsZXN5c3RlbSBsb2dpYywgc3BlY2lmaWNhbGx5IGR1cmluZyBpbmRleCBsb29rdXBzIGFuZCBzZWN1cml0eSBkZXNjcmlwdG9yIGluc2VydGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNjo0MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGFjMjYwYWE4ZTgxYzVmYzE4MzA3NGExYmZiOTUzNDExNTUwNTE4MzBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAyNSAxNjo0Mjo1MiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9udGZzMy9pbmRleC5jIGIvZnMvbnRmczMvaW5kZXguY1xuaW5kZXggNGFmYWNmYzZmZjg5MzAuLjY4OTcxMmQzNDYzZDQxIDEwMDY0NFxuLS0tIGEvZnMvbnRmczMvaW5kZXguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbnRmczMvaW5kZXguY1xuQEAgLTEzMjUsNiAmIzQzOzEzMjUsNyBAQCBpbnQgaW5keF9maW5kX3NvcnQoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcbiBcdFx0LyogUG9wIG9uZSBsZXZlbC4gKi9cbiBcdFx0aWYgKG4pIHtcbiBcdFx0XHRmbmRfcG9wKGZuZCk7XG4mIzQzO1x0XHRcdGtmcmVlKG4tXHUwMDNlaW5kZXgpO1xuIFx0XHRcdGtmcmVlKG4pO1xuIFx0XHR9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTY6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05URlMzX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW5keF9maW5kX3NvcnQmIzM0OywKICAgICYjMzQ7bnRmc19pbnNlcnRfc2VjdXJpdHkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiBgaW5keF9maW5kX3NvcnRgIHdpdGhpbiB0aGUgTlRGUzMgZmlsZXN5c3RlbSBkcml2ZXIgYnkgZnJlZWluZyBgbi1cdTAwM2VpbmRleGAgYmVmb3JlIGBuYCB3aGVuIHBvcHBpbmcgYSBsZXZlbCBmcm9tIHRoZSBmaW5kIHN0YXRlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgZmlsZXN5c3RlbSBsb2dpYywgc3BlY2lmaWNhbGx5IGR1cmluZyBpbmRleCBsb29rdXBzIGFuZCBzZWN1cml0eSBkZXNjcmlwdG9yIGluc2VydGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGFjMjYwYWE4ZTgxYzVmYzE4MzA3NGExYmZiOTUzNDExNTUwNTE4MzAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1bCAyNSAxNjo0Mjo1MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL250ZnMzL2luZGV4LmMgYi9mcy9udGZzMy9pbmRleC5jCmluZGV4IDRhZmFjZmM2ZmY4OTMwLi42ODk3MTJkMzQ2M2Q0MSAxMDA2NDQKLS0tIGEvZnMvbnRmczMvaW5kZXguYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9udGZzMy9pbmRleC5jCkBAIC0xMzI1LDYgJiM0MzsxMzI1LDcgQEAgaW50IGluZHhfZmluZF9zb3J0KHN0cnVjdCBudGZzX2luZGV4ICppbmR4LCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksCiAJCS8qIFBvcCBvbmUgbGV2ZWwuICovCiAJCWlmIChuKSB7CiAJCQlmbmRfcG9wKGZuZCk7CiYjNDM7CQkJa2ZyZWUobi0mZ3Q7aW5kZXgpOwogCQkJa2ZyZWUobik7CiAJCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDE5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOVEZTMyBJbmRleCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0YXJnZXRpbmcgYGZzL250ZnMzL2luZGV4LmNgLiBTcGVjaWZpY2FsbHksIHRoZSBtb2RpZmljYXRpb24gaW4gYGluZHhfZmluZF9zb3J0YCBjYXVnaHQgbXkgZXllLiBJdCBhcHBlYXJzIHRoZXkmIzM5O3ZlIGFkZGVkIGBrZnJlZShuLSZndDtpbmRleCk7YCByaWdodCBiZWZvcmUgdGhlIGBrZnJlZShuKTtgIGNhbGwuIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtBaCwgdGhleSYjMzk7cmUgbGlrZWx5IGRlYWxpbmcgd2l0aCBhIG1lbW9yeSBsZWFrIG9yIGEgZGFuZ2xpbmcgcG9pbnRlciBpc3N1ZS4mIzM0OyBUaGlzIGltcGxpZXMgdGhhdCBgbi0mZ3Q7aW5kZXhgIGlzIGxpa2VseSBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBidWZmZXIgd2l0aGluIHRoZSBgbmAgc3RydWN0dXJlIGFuZCBpcyBiZWluZyB1c2VkIHRvIHN0b3JlIGluZGV4IGRhdGEuIFRoZSBpbnRlbnQgaGVyZSBpcyB0byBleHBsaWNpdGx5IGRlYWxsb2NhdGUgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIGluZGV4IGRhdGEgYmVmb3JlIGZyZWVpbmcgdGhlIG5vZGUgaXRzZWxmLCB3aGljaCBpcyBzdGFuZGFyZCBwcmFjdGljZSB0byBwcmV2ZW50IG1lbW9yeSBjb3JydXB0aW9uLiBJIG5lZWQgdG8gZGl2ZSBkZWVwZXIgaW50byBgaW5keF9maW5kX3NvcnRgIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2UgYmV0dGVyLCB3aGF0IGBuYCBhbmQgYG4tJmd0O2luZGV4YCBhcmUsIGFuZCB3aHkgdGhpcyBhZGRpdGlvbmFsIGBrZnJlZWAgd2FzIGRlZW1lZCBuZWNlc3NhcnkuIFRoaXMgY291bGQgYmUgYSBnb29kIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5keF9maW5kX3NvcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzMy9pbmRleC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMzL2luZGV4LmM9MTE2OT1pbnQgaW5keF9maW5kKHN0cnVjdCBudGZzX2luZGV4ICppbmR4LCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXG4tLVxuZnMvbnRmczMvaW5kZXguYy0xMjQzLVxuZnMvbnRmczMvaW5kZXguYzoxMjQ0OmludCBpbmR4X2ZpbmRfc29ydChzdHJ1Y3QgbnRmc19pbmRleCAqaW5keCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxuZnMvbnRmczMvaW5kZXguYy0xMjQ1LVx0XHQgICBjb25zdCBzdHJ1Y3QgSU5ERVhfUk9PVCAqcm9vdCwgc3RydWN0IE5URlNfREUgKiplbnRyeSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDczCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgYGluZHhfZmluZF9zb3J0YCBmdW5jdGlvbiwga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3RlZXBlZCBpbiB0aGlzIHNvcnQgb2Ygd29yazoKCioqRGVjb25zdHJ1Y3RpbmcgYGluZHhfZmluZF9zb3J0YCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBpbmR4X2ZpbmRfc29ydGAgd2l0aGluIGBmcy9udGZzMy9pbmRleC5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gaW5kZXhpbmcsIHBhcnRpY3VsYXJseSBob3cgaXQgaGFuZGxlcyB0aGUgY3J1Y2lhbCB0YXNrIG9mIHNvcnRpbmcgd2l0aGluIHRoZSBOVEZTMyBmaWxlIHN5c3RlbS4gSSBhbnRpY2lwYXRlIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkIGluIHRlcm1zIG9mIGluZGV4IG1hbmFnZW1lbnQ6IGxpa2VseSBpbnZvbHZlcyBjb21wYXJpc29ucyBvZiBrZXkgYXR0cmlidXRlcywgcGVyaGFwcyBhIGJpbmFyeSBzZWFyY2ggZm9yIGVmZmljaWVuY3ksIGFuZCBvZiBjb3Vyc2UsIHByb3BlciBoYW5kbGluZyBvZiBjb2xsaXNpb25zIG9yIGR1cGxpY2F0ZSBlbnRyaWVzIHdpdGhpbiB0aGUgaW5kZXggc3RydWN0dXJlcy4gSSBpbWFnaW5lIGl0JiMzOTtzIGNydWNpYWwgZm9yIGxvb2t1cHMsIGluc2VydGlvbnMsIGFuZCBkZWxldGlvbnMuIEkgc2hvdWxkIGJlIGFibGUgdG8gZGVkdWNlIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcywgcHJvYmFibHkgQi10cmVlcyBvciBzaW1pbGFyIGJhbGFuY2VkIHN0cnVjdHVyZXMsIGJ5IHRyYWNpbmcgaXRzIGV4ZWN1dGlvbiBmbG93LiBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoaXMgZnVuY3Rpb24gYXMgaXQgaXMga2V5IHRvIG92ZXJhbGwgZmlsZXN5c3RlbSBzdGFiaWxpdHkuIEkmIzM5O20ga2VlbiB0byBzZWUgaWYgaXQgbWFrZXMgdXNlIG9mIGFueSBvcHRpbWl6YXRpb25zLCBtYXliZSBjYWNoaW5nIHRlY2huaXF1ZXMsIG9yIGRlZmVycmVkIHdyaXRlcy4gSSBhbnRpY2lwYXRlIGl0IHdpbGwgYmUgaW52b2x2ZWQgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIHRvIG1hbmFnZSB0aGUgaW5kZXggZGF0YS4gTGV0JiMzOTtzIHNlZSBob3cgd2VsbCBpdCYjMzk7cyB3cml0dGVuIGFuZCBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgYm90dGxlbmVja3Mgb3Igb3Bwb3J0dW5pdGllcyBmb3IgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE2OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvbnRmczMvaW5kZXguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyNDQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyNDQ6XHRpbnQgaW5keF9maW5kX3NvcnQoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcbjEyNDU6XHRcdFx0ICAgY29uc3Qgc3RydWN0IElOREVYX1JPT1QgKnJvb3QsIHN0cnVjdCBOVEZTX0RFICoqZW50cnksXG4xMjQ2Olx0XHRcdCAgIHN0cnVjdCBudGZzX2ZuZCAqZm5kKVxuMTI0NzpcdHtcbjEyNDg6XHRcdGludCBlcnI7XG4xMjQ5Olx0XHRzdHJ1Y3QgaW5keF9ub2RlICpuID0gTlVMTDtcbjEyNTA6XHRcdHN0cnVjdCBOVEZTX0RFICplO1xuMTI1MTpcdFx0c2l6ZV90IGl0ZXIgPSAwO1xuMTI1MjpcdFx0aW50IGxldmVsID0gZm5kLVx1MDAzZWxldmVsO1xuMTI1MzpcdFxuMTI1NDpcdFx0aWYgKCEqZW50cnkpIHtcbjEyNTU6XHRcdFx0LyogU3RhcnQgZmluZC4gKi9cbjEyNTY6XHRcdFx0ZSA9IGhkcl9maXJzdF9kZShcdTAwMjZyb290LVx1MDAzZWloZHIpO1xuMTI1NzpcdFx0XHRpZiAoIWUpXG4xMjU4Olx0XHRcdFx0cmV0dXJuIDA7XG4xMjU5Olx0XHRcdGZuZF9jbGVhcihmbmQpO1xuMTI2MDpcdFx0XHRmbmQtXHUwMDNlcm9vdF9kZSA9IGU7XG4xMjYxOlx0XHR9IGVsc2UgaWYgKCFsZXZlbCkge1xuMTI2MjpcdFx0XHRpZiAoZGVfaXNfbGFzdChmbmQtXHUwMDNlcm9vdF9kZSkpIHtcbjEyNjM6XHRcdFx0XHQqZW50cnkgPSBOVUxMO1xuMTI2NDpcdFx0XHRcdHJldHVybiAwO1xuMTI2NTpcdFx0XHR9XG4xMjY2Olx0XG4xMjY3Olx0XHRcdGUgPSBoZHJfbmV4dF9kZShcdTAwMjZyb290LVx1MDAzZWloZHIsIGZuZC1cdTAwM2Vyb290X2RlKTtcbjEyNjg6XHRcdFx0aWYgKCFlKVxuMTI2OTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTI3MDpcdFx0XHRmbmQtXHUwMDNlcm9vdF9kZSA9IGU7XG4xMjcxOlx0XHR9IGVsc2Uge1xuMTI3MjpcdFx0XHRuID0gZm5kLVx1MDAzZW5vZGVzW2xldmVsIC0gMV07XG4xMjczOlx0XHRcdGUgPSBmbmQtXHUwMDNlZGVbbGV2ZWwgLSAxXTtcbjEyNzQ6XHRcbjEyNzU6XHRcdFx0aWYgKGRlX2lzX2xhc3QoZSkpXG4xMjc2Olx0XHRcdFx0Z290byBwb3BfbGV2ZWw7XG4xMjc3Olx0XG4xMjc4Olx0XHRcdGUgPSBoZHJfbmV4dF9kZShcdTAwMjZuLVx1MDAzZWluZGV4LVx1MDAzZWloZHIsIGUpO1xuMTI3OTpcdFx0XHRpZiAoIWUpXG4xMjgwOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMjgxOlx0XG4xMjgyOlx0XHRcdGZuZC1cdTAwM2VkZVtsZXZlbCAtIDFdID0gZTtcbjEyODM6XHRcdH1cbjEyODQ6XHRcbjEyODU6XHRcdC8qIEp1c3QgdG8gYXZvaWQgdHJlZSBjeWNsZS4gKi9cbjEyODY6XHRuZXh0X2l0ZXI6XG4xMjg3Olx0XHRpZiAoaXRlciYjNDM7JiM0MzsgXHUwMDNlPSAxMDAwKVxuMTI4ODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjEyODk6XHRcbjEyOTA6XHRcdHdoaWxlIChkZV9oYXNfdmNuX2V4KGUpKSB7XG4xMjkxOlx0XHRcdGlmIChsZTE2X3RvX2NwdShlLVx1MDAzZXNpemUpIFx1MDAzY1xuMTI5MjpcdFx0XHQgICAgc2l6ZW9mKHN0cnVjdCBOVEZTX0RFKSAmIzQzOyBzaXplb2YodTY0KSkge1xuMTI5MzpcdFx0XHRcdGlmIChuKSB7XG4xMjk0Olx0XHRcdFx0XHRmbmRfcG9wKGZuZCk7XG4xMjk1Olx0XHRcdFx0XHRrZnJlZShuKTtcbjEyOTY6XHRcdFx0XHR9XG4xMjk3Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMjk4Olx0XHRcdH1cbjEyOTk6XHRcbjEzMDA6XHRcdFx0LyogUmVhZCBuZXh0IGxldmVsLiAqL1xuMTMwMTpcdFx0XHRlcnIgPSBpbmR4X3JlYWQoaW5keCwgbmksIGRlX2dldF92Ym4oZSksIFx1MDAyNm4pO1xuMTMwMjpcdFx0XHRpZiAoZXJyKVxuMTMwMzpcdFx0XHRcdHJldHVybiBlcnI7XG4xMzA0Olx0XG4xMzA1Olx0XHRcdC8qIFRyeSBuZXh0IGxldmVsLiAqL1xuMTMwNjpcdFx0XHRlID0gaGRyX2ZpcnN0X2RlKFx1MDAyNm4tXHUwMDNlaW5kZXgtXHUwMDNlaWhkcik7XG4xMzA3Olx0XHRcdGlmICghZSkge1xuMTMwODpcdFx0XHRcdGtmcmVlKG4pO1xuMTMwOTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTMxMDpcdFx0XHR9XG4xMzExOlx0XG4xMzEyOlx0XHRcdGZuZF9wdXNoKGZuZCwgbiwgZSk7XG4xMzEzOlx0XHR9XG4xMzE0Olx0XG4xMzE1Olx0XHRpZiAobGUxNl90b19jcHUoZS1cdTAwM2VzaXplKSBcdTAwM2Ugc2l6ZW9mKHN0cnVjdCBOVEZTX0RFKSkge1xuMTMxNjpcdFx0XHQqZW50cnkgPSBlO1xuMTMxNzpcdFx0XHRyZXR1cm4gMDtcbjEzMTg6XHRcdH1cbjEzMTk6XHRcbjEzMjA6XHRwb3BfbGV2ZWw6XG4xMzIxOlx0XHRmb3IgKDs7KSB7XG4xMzIyOlx0XHRcdGlmICghZGVfaXNfbGFzdChlKSlcbjEzMjM6XHRcdFx0XHRnb3RvIG5leHRfaXRlcjtcbjEzMjQ6XHRcbjEzMjU6XHRcdFx0LyogUG9wIG9uZSBsZXZlbC4gKi9cbjEzMjY6XHRcdFx0aWYgKG4pIHtcbjEzMjc6XHRcdFx0XHRmbmRfcG9wKGZuZCk7XG4xMzI4Olx0XHRcdFx0a2ZyZWUobi1cdTAwM2VpbmRleCk7XG4xMzI5Olx0XHRcdFx0a2ZyZWUobik7XG4xMzMwOlx0XHRcdH1cbjEzMzE6XHRcbjEzMzI6XHRcdFx0bGV2ZWwgPSBmbmQtXHUwMDNlbGV2ZWw7XG4xMzMzOlx0XG4xMzM0Olx0XHRcdGlmIChsZXZlbCkge1xuMTMzNTpcdFx0XHRcdG4gPSBmbmQtXHUwMDNlbm9kZXNbbGV2ZWwgLSAxXTtcbjEzMzY6XHRcdFx0XHRlID0gZm5kLVx1MDAzZWRlW2xldmVsIC0gMV07XG4xMzM3Olx0XHRcdH0gZWxzZSBpZiAoZm5kLVx1MDAzZXJvb3RfZGUpIHtcbjEzMzg6XHRcdFx0XHRuID0gTlVMTDtcbjEzMzk6XHRcdFx0XHRlID0gZm5kLVx1MDAzZXJvb3RfZGU7XG4xMzQwOlx0XHRcdFx0Zm5kLVx1MDAzZXJvb3RfZGUgPSBOVUxMO1xuMTM0MTpcdFx0XHR9IGVsc2Uge1xuMTM0MjpcdFx0XHRcdCplbnRyeSA9IE5VTEw7XG4xMzQzOlx0XHRcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTY6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE1OAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBhIFBvdGVudGlhbCBNZW1vcnkgTGVhayBGaXggaW4gYGluZHhfZmluZF9zb3J0YCoqCgpBbHJpZ2h0LCBzbyB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIGBrZnJlZShuLSZndDtpbmRleCk7YCBjYWxsIGJlZm9yZSB0aGUgYGtmcmVlKG4pO2AgaW4gYGluZHhfZmluZF9zb3J0YC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2FpdCBhIG1pbnV0ZSwgaXMgdGhhdCAqcmVhbGx5KiBuZWVkZWQ/JiMzNDsuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGJhY2suIFRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0IGBuLSZndDtpbmRleGAgaXMgYSBzZXBhcmF0ZWx5IGFsbG9jYXRlZCBwaWVjZSBvZiBtZW1vcnkuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneSBoZXJlLiBBaCwgcmlnaHQsIGBpbmR4X3JlYWRgIGlzIHRoZSBrZXkgZnVuY3Rpb24gdG8gZXhhbWluZS4gVGhhdCYjMzk7cyB3aGVyZSBgbmAgYW5kLCBzcGVjaWZpY2FsbHksIGBuLSZndDtpbmRleGAgc2hvdWxkIGJlIGFsbG9jYXRlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGFzc3VtcHRpb24gaG9sZHMgdHJ1ZS4gSSBoYXZlIHRvIGNoZWNrIHRoZSBjYWxsIGNoYWluIGFuZCB2ZXJpZnkgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5LiBMZXQgbWUganVtcCBpbnRvIGBpbmR4X3JlYWRgIGFuZCBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbi4uLiBJIG5lZWQgdG8gc2VlIGlmIGl0IGFsbG9jYXRlcyBib3RoIGBuYCBhbmQgYG4tJmd0O2luZGV4YC4gVGhpcyB3aWxsIGRldGVybWluZSBpZiB0aGUgcGF0Y2ggaXMgYSB2YWxpZCBmaXggb3IgYSByZWR1bmRhbnQsIG9yIGV2ZW4sIHBvdGVudGlhbGx5LCBkYW5nZXJvdXMgY2hhbmdlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgYGluZHhfcmVhZGAgaXMgZG9pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTY6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5keF9yZWFkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmczMvaW5kZXguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzMy9pbmRleC5jPTEwNTM9c3RhdGljIGludCBpbmR4X3dyaXRlKHN0cnVjdCBudGZzX2luZGV4ICppbmR4LCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXG4tLVxuZnMvbnRmczMvaW5kZXguYy0xMDYxLS8qXG5mcy9udGZzMy9pbmRleC5jOjEwNjI6ICogaW5keF9yZWFkX3JhXG5mcy9udGZzMy9pbmRleC5jLTEwNjMtICpcbi0tXG5mcy9udGZzMy9pbmRleC5jLTEwNjctICovXG5mcy9udGZzMy9pbmRleC5jOjEwNjg6aW50IGluZHhfcmVhZF9yYShzdHJ1Y3QgbnRmc19pbmRleCAqaW5keCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBDTFNUIHZibixcbmZzL250ZnMzL2luZGV4LmMtMTA2OS1cdFx0IHN0cnVjdCBpbmR4X25vZGUgKipub2RlLCBzdHJ1Y3QgZmlsZV9yYV9zdGF0ZSAqcmEpXG4tLVxuZnMvbnRmczMvaW5kZXguYz0xMTY5PWludCBpbmR4X2ZpbmQoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcbi0tXG5mcy9udGZzMy9pbmRleC5jLTEyMTctXHRcdC8qIFJlYWQgbmV4dCBsZXZlbC4gKi9cbmZzL250ZnMzL2luZGV4LmM6MTIxODpcdFx0ZXJyID0gaW5keF9yZWFkKGluZHgsIG5pLCBkZV9nZXRfdmJuKGUpLCBcdTAwMjZub2RlKTtcbmZzL250ZnMzL2luZGV4LmMtMTIxOS1cdFx0aWYgKGVycikge1xuLS1cbmZzL250ZnMzL2luZGV4LmM9MTI0ND1pbnQgaW5keF9maW5kX3NvcnQoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcbi0tXG5mcy9udGZzMy9pbmRleC5jLTEzMDAtXHRcdC8qIFJlYWQgbmV4dCBsZXZlbC4gKi9cbmZzL250ZnMzL2luZGV4LmM6MTMwMTpcdFx0ZXJyID0gaW5keF9yZWFkKGluZHgsIG5pLCBkZV9nZXRfdmJuKGUpLCBcdTAwMjZuKTtcbmZzL250ZnMzL2luZGV4LmMtMTMwMi1cdFx0aWYgKGVycilcbi0tXG5mcy9udGZzMy9pbmRleC5jPTEzNTU9aW50IGluZHhfZmluZF9yYXcoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcbi0tXG5mcy9udGZzMy9pbmRleC5jLTE0NDUtXHRcdC8qIFJlYWQgYnVmZmVyIGludG8gbWVtb3J5LiAqL1xuZnMvbnRmczMvaW5kZXguYzoxNDQ2Olx0XHRlcnIgPSBpbmR4X3JlYWQoaW5keCwgbmksIG5leHRfdXNlZF92Ym4sIFx1MDAyNm4pO1xuZnMvbnRmczMvaW5kZXguYy0xNDQ3LVx0XHRpZiAoZXJyKVxuLS1cbmZzL250ZnMzL2luZGV4LmM9MjA5Nz1zdGF0aWMgc3RydWN0IGluZHhfbm9kZSAqaW5keF9maW5kX2J1ZmZlcihzdHJ1Y3QgbnRmc19pbmRleCAqaW5keCxcbi0tXG5mcy9udGZzMy9pbmRleC5jLTIxMzAtXHRcdGlmIChkZV9oYXNfdmNuX2V4KGUpKSB7XG5mcy9udGZzMy9pbmRleC5jOjIxMzE6XHRcdFx0ZXJyID0gaW5keF9yZWFkKGluZHgsIG5pLCBkZV9nZXRfdmJuKGUpLCBcdTAwMjZuKTtcbmZzL250ZnMzL2luZGV4LmMtMjEzMi1cdFx0XHRpZiAoZXJyKVxuLS1cbmZzL250ZnMzL2luZGV4LmM9MjIxNj1zdGF0aWMgaW50IGluZHhfZnJlZV9jaGlsZHJlbihzdHJ1Y3QgbnRmc19pbmRleCAqaW5keCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxuLS1cbmZzL250ZnMzL2luZGV4LmMtMjIyNC1cbmZzL250ZnMzL2luZGV4LmM6MjIyNTpcdGVyciA9IGluZHhfcmVhZChpbmR4LCBuaSwgdmJuLCBcdTAwMjZuKTtcbmZzL250ZnMzL2luZGV4LmMtMjIyNi1cdGlmIChlcnIpXG4tLVxuZnMvbnRmczMvaW5kZXguYz0yMjY2PXN0YXRpYyBpbnQgaW5keF9nZXRfZW50cnlfdG9fcmVwbGFjZShzdHJ1Y3QgbnRmc19pbmRleCAqaW5keCxcbi0tXG5mcy9udGZzMy9pbmRleC5jLTIyODQtXHRcdG4gPSBOVUxMO1xuZnMvbnRmczMvaW5kZXguYzoyMjg1Olx0XHRlcnIgPSBpbmR4X3JlYWQoaW5keCwgbmksIHZibiwgXHUwMDI2bik7XG5mcy9udGZzMy9pbmRleC5jLTIyODYtXHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTY6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ1MwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyB0aGUgYGluZHhfcmVhZGAgU291cmNlKioKCk9rYXksIGxldCYjMzk7cyB0cmFjZSB0aGlzIGBpbmR4X3JlYWRgIGZ1bmN0aW9uLiBCYXNlZCBvbiB0aGUgY29udGV4dCwgSSBzdXNwZWN0IGl0JiMzOTtzIG5vdCBhIHN0YW5kYXJkIGxpYnJhcnkgZnVuY3Rpb24uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gcGlucG9pbnQgaXRzIGRlZmluaXRpb24uIElzIHRoaXMgbGlrZWx5IGEgbWFjcm8sIG9yIHBlcmhhcHMgZGVmaW5lZCBpbiBhbiBpbmNsdWRlZCBoZWFkZXIgZmlsZT8gVGhlIG5hbWluZyBjb252ZW50aW9uIHN1Z2dlc3RzIGl0IG1pZ2h0IGJlIGludGVybmFsIHRvIHRoZSBwcm9qZWN0IG9yIGxpYnJhcnkgSSYjMzk7bSB3b3JraW5nIHdpdGgsIHNvIGRpZ2dpbmcgaW50byB0aGUgcHJvamVjdCYjMzk7cyBpbmNsdWRlIHBhdGhzIHNlZW1zIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgaG93IHRoaXMgaXMgYmVpbmcgdXNlZCB0byBlZmZlY3RpdmVseSBkZWJ1ZyBpdHMgYmVoYXZpb3VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbmR4X3JlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzMy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmczMvZGlyLmM9NDA0PXN0YXRpYyBpbnQgbnRmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcbi0tXG5mcy9udGZzMy9kaXIuYy01NDItXG5mcy9udGZzMy9kaXIuYzo1NDM6XHRcdGVyciA9IGluZHhfcmVhZF9yYShcdTAwMjZuaS1cdTAwM2VkaXIsIG5pLCBiaXQgXHUwMDNjXHUwMDNjIG5pLVx1MDAzZWRpci5pZHgydmJuX2JpdHMsXG5mcy9udGZzMy9kaXIuYy01NDQtXHRcdFx0XHQgICBcdTAwMjZub2RlLCBcdTAwMjZmaWxlLVx1MDAzZWZfcmEpO1xuLS1cbmZzL250ZnMzL2Rpci5jPTYwMD1zdGF0aWMgaW50IG50ZnNfZGlyX2NvdW50KHN0cnVjdCBpbm9kZSAqZGlyLCBib29sICppc19lbXB0eSwgc2l6ZV90ICpkaXJzLFxuLS1cbmZzL250ZnMzL2Rpci5jLTY2Ny1cbmZzL250ZnMzL2Rpci5jOjY2ODpcdFx0ZXJyID0gaW5keF9yZWFkKFx1MDAyNm5pLVx1MDAzZWRpciwgbmksIGJpdCBcdTAwM2NcdTAwM2MgbmktXHUwMDNlZGlyLmlkeDJ2Ym5fYml0cyxcbmZzL250ZnMzL2Rpci5jLTY2OS1cdFx0XHRcdFx1MDAyNm5vZGUpO1xuLS1cbmZzL250ZnMzL2luZGV4LmM9MTA1Mz1zdGF0aWMgaW50IGluZHhfd3JpdGUoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcbi0tXG5mcy9udGZzMy9pbmRleC5jLTEwNjEtLypcbmZzL250ZnMzL2luZGV4LmM6MTA2MjogKiBpbmR4X3JlYWRfcmFcbmZzL250ZnMzL2luZGV4LmMtMTA2My0gKlxuLS1cbmZzL250ZnMzL2luZGV4LmMtMTA2Ny0gKi9cbmZzL250ZnMzL2luZGV4LmM6MTA2ODppbnQgaW5keF9yZWFkX3JhKHN0cnVjdCBudGZzX2luZGV4ICppbmR4LCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIENMU1QgdmJuLFxuZnMvbnRmczMvaW5kZXguYy0xMDY5LVx0XHQgc3RydWN0IGluZHhfbm9kZSAqKm5vZGUsIHN0cnVjdCBmaWxlX3JhX3N0YXRlICpyYSlcbi0tXG5mcy9udGZzMy9pbmRleC5jPTExNjk9aW50IGluZHhfZmluZChzdHJ1Y3QgbnRmc19pbmRleCAqaW5keCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxuLS1cbmZzL250ZnMzL2luZGV4LmMtMTIxNy1cdFx0LyogUmVhZCBuZXh0IGxldmVsLiAqL1xuZnMvbnRmczMvaW5kZXguYzoxMjE4Olx0XHRlcnIgPSBpbmR4X3JlYWQoaW5keCwgbmksIGRlX2dldF92Ym4oZSksIFx1MDAyNm5vZGUpO1xuZnMvbnRmczMvaW5kZXguYy0xMjE5LVx0XHRpZiAoZXJyKSB7XG4tLVxuZnMvbnRmczMvaW5kZXguYz0xMjQ0PWludCBpbmR4X2ZpbmRfc29ydChzdHJ1Y3QgbnRmc19pbmRleCAqaW5keCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxuLS1cbmZzL250ZnMzL2luZGV4LmMtMTMwMC1cdFx0LyogUmVhZCBuZXh0IGxldmVsLiAqL1xuZnMvbnRmczMvaW5kZXguYzoxMzAxOlx0XHRlcnIgPSBpbmR4X3JlYWQoaW5keCwgbmksIGRlX2dldF92Ym4oZSksIFx1MDAyNm4pO1xuZnMvbnRmczMvaW5kZXguYy0xMzAyLVx0XHRpZiAoZXJyKVxuLS1cbmZzL250ZnMzL2luZGV4LmM9MTM1NT1pbnQgaW5keF9maW5kX3JhdyhzdHJ1Y3QgbnRmc19pbmRleCAqaW5keCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxuLS1cbmZzL250ZnMzL2luZGV4LmMtMTQ0NS1cdFx0LyogUmVhZCBidWZmZXIgaW50byBtZW1vcnkuICovXG5mcy9udGZzMy9pbmRleC5jOjE0NDY6XHRcdGVyciA9IGluZHhfcmVhZChpbmR4LCBuaSwgbmV4dF91c2VkX3ZibiwgXHUwMDI2bik7XG5mcy9udGZzMy9pbmRleC5jLTE0NDctXHRcdGlmIChlcnIpXG4tLVxuZnMvbnRmczMvaW5kZXguYz0yMDk3PXN0YXRpYyBzdHJ1Y3QgaW5keF9ub2RlICppbmR4X2ZpbmRfYnVmZmVyKHN0cnVjdCBudGZzX2luZGV4ICppbmR4LFxuLS1cbmZzL250ZnMzL2luZGV4LmMtMjEzMC1cdFx0aWYgKGRlX2hhc192Y25fZXgoZSkpIHtcbmZzL250ZnMzL2luZGV4LmM6MjEzMTpcdFx0XHRlcnIgPSBpbmR4X3JlYWQoaW5keCwgbmksIGRlX2dldF92Ym4oZSksIFx1MDAyNm4pO1xuZnMvbnRmczMvaW5kZXguYy0yMTMyLVx0XHRcdGlmIChlcnIpXG4tLVxuZnMvbnRmczMvaW5kZXguYz0yMjE2PXN0YXRpYyBpbnQgaW5keF9mcmVlX2NoaWxkcmVuKHN0cnVjdCBudGZzX2luZGV4ICppbmR4LCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXG4tLVxuZnMvbnRmczMvaW5kZXguYy0yMjI0LVxuZnMvbnRmczMvaW5kZXguYzoyMjI1Olx0ZXJyID0gaW5keF9yZWFkKGluZHgsIG5pLCB2Ym4sIFx1MDAyNm4pO1xuZnMvbnRmczMvaW5kZXguYy0yMjI2LVx0aWYgKGVycilcbi0tXG5mcy9udGZzMy9pbmRleC5jPTIyNjY9c3RhdGljIGludCBpbmR4X2dldF9lbnRyeV90b19yZXBsYWNlKHN0cnVjdCBudGZzX2luZGV4ICppbmR4LFxuLS1cbmZzL250ZnMzL2luZGV4LmMtMjI4NC1cdFx0biA9IE5VTEw7XG5mcy9udGZzMy9pbmRleC5jOjIyODU6XHRcdGVyciA9IGluZHhfcmVhZChpbmR4LCBuaSwgdmJuLCBcdTAwMjZuKTtcbmZzL250ZnMzL2luZGV4LmMtMjI4Ni1cdFx0aWYgKGVycilcbi0tXG5mcy9udGZzMy9udGZzX2ZzLmg9NzQ2PXN0cnVjdCBJTkRFWF9ST09UICppbmR4X2dldF9yb290KHN0cnVjdCBudGZzX2luZGV4ICppbmR4LCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXG5mcy9udGZzMy9udGZzX2ZzLmgtNzQ3LVx0XHRcdFx0IHN0cnVjdCBBVFRSSUIgKiphdHRyLCBzdHJ1Y3QgbWZ0X2lub2RlICoqbWkpO1xuZnMvbnRmczMvbnRmc19mcy5oOjc0ODppbnQgaW5keF9yZWFkX3JhKHN0cnVjdCBudGZzX2luZGV4ICppZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSwgQ0xTVCB2Ym4sXG5mcy9udGZzMy9udGZzX2ZzLmgtNzQ5LVx0XHQgc3RydWN0IGluZHhfbm9kZSAqKm5vZGUsIHN0cnVjdCBmaWxlX3JhX3N0YXRlICpyYSk7XG5mcy9udGZzMy9udGZzX2ZzLmg6NzUwOnN0YXRpYyBpbmxpbmUgaW50IGluZHhfcmVhZChzdHJ1Y3QgbnRmc19pbmRleCAqaWR4LCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXG5mcy9udGZzMy9udGZzX2ZzLmgtNzUxLVx0XHRcdCAgICBDTFNUIHZibiwgc3RydWN0IGluZHhfbm9kZSAqKm5vZGUpXG5mcy9udGZzMy9udGZzX2ZzLmgtNzUyLXtcbmZzL250ZnMzL250ZnNfZnMuaDo3NTM6XHRyZXR1cm4gaW5keF9yZWFkX3JhKGlkeCwgbmksIHZibiwgbm9kZSwgTlVMTCk7XG5mcy9udGZzMy9udGZzX2ZzLmgtNzU0LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTY6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE1OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgSW5kZXggUmVhZCBGdW5jdGlvbiBDYWxsKioKClJpZ2h0LCBzbyBgaW5keF9yZWFkYCBpcyBjbGVhcmx5IGFuIGlubGluZSBmdW5jdGlvbi4gTWFrZXMgc2Vuc2Ug4oCTIHByb2JhYmx5IG9wdGltaXplZCBmb3IgZnJlcXVlbnQgY2FsbHMsIG1heWJlPyBJdCYjMzk7cyBpbW1lZGlhdGVseSBldmlkZW50IHRoYXQgYGluZHhfcmVhZGAgaXMganVzdCBhIHdyYXBwZXIgZm9yIGBpbmR4X3JlYWRfcmFgLiBPa2F5LCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIGBpbmR4X3JlYWRfcmFgIHRoZW4uIEdpdmVuIHRoZSBjb250ZXh0LCBteSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZmluZCBpdHMgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBOVEZTMyBmaWxlc3lzdGVtIGRyaXZlci4gVGhhdCBzaG91bGQgYmUgd2l0aGluIGBmcy9udGZzMy9pbmRleC5jYCDigJMgdGhhdCYjMzk7cyB3aGVyZSBJIHdvdWxkIGV4cGVjdCBhbGwgdGhlIGluZGV4LXJlbGF0ZWQgZnVuY3Rpb25hbGl0eSB0byByZXNpZGUuIFRpbWUgdG8gb3BlbiB0aGF0IGZpbGUgYW5kIGdldCB0byB0aGUgYm90dG9tIG9mIHRoZSByZWFkLWFoZWFkIG1lY2hhbmlzbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTY6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9udGZzMy9pbmRleC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA2OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA2ODpcdGludCBpbmR4X3JlYWRfcmEoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSwgQ0xTVCB2Ym4sXG4xMDY5Olx0XHRcdCBzdHJ1Y3QgaW5keF9ub2RlICoqbm9kZSwgc3RydWN0IGZpbGVfcmFfc3RhdGUgKnJhKVxuMTA3MDpcdHtcbjEwNzE6XHRcdGludCBlcnI7XG4xMDcyOlx0XHRzdHJ1Y3QgSU5ERVhfQlVGRkVSICppYjtcbjEwNzM6XHRcdHN0cnVjdCBudGZzX3NiX2luZm8gKnNiaSA9IG5pLVx1MDAzZW1pLnNiaTtcbjEwNzQ6XHRcdHN0cnVjdCBydW5zX3RyZWUgKnJ1biA9IFx1MDAyNmluZHgtXHUwMDNlYWxsb2NfcnVuO1xuMTA3NTpcdFx0c3RydWN0IHJ3X3NlbWFwaG9yZSAqbG9jayA9IFx1MDAyNmluZHgtXHUwMDNlcnVuX2xvY2s7XG4xMDc2Olx0XHR1NjQgdmJvID0gKHU2NCl2Ym4gXHUwMDNjXHUwMDNjIGluZHgtXHUwMDNldmJuMnZib19iaXRzO1xuMTA3NzpcdFx0dTMyIGJ5dGVzID0gMXUgXHUwMDNjXHUwMDNjIGluZHgtXHUwMDNlaW5kZXhfYml0cztcbjEwNzg6XHRcdHN0cnVjdCBpbmR4X25vZGUgKmluID0gKm5vZGU7XG4xMDc5Olx0XHRjb25zdCBzdHJ1Y3QgSU5ERVhfTkFNRVMgKm5hbWU7XG4xMDgwOlx0XG4xMDgxOlx0XHRpZiAoIWluKSB7XG4xMDgyOlx0XHRcdGluID0ga3phbGxvY19vYmooc3RydWN0IGluZHhfbm9kZSwgR0ZQX05PRlMpO1xuMTA4MzpcdFx0XHRpZiAoIWluKVxuMTA4NDpcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTA4NTpcdFx0fSBlbHNlIHtcbjEwODY6XHRcdFx0bmJfcHV0KFx1MDAyNmluLVx1MDAzZW5iKTtcbjEwODc6XHRcdH1cbjEwODg6XHRcbjEwODk6XHRcdGliID0gaW4tXHUwMDNlaW5kZXg7XG4xMDkwOlx0XHRpZiAoIWliKSB7XG4xMDkxOlx0XHRcdGliID0ga21hbGxvYyhieXRlcywgR0ZQX05PRlMpO1xuMTA5MjpcdFx0XHRpZiAoIWliKSB7XG4xMDkzOlx0XHRcdFx0ZXJyID0gLUVOT01FTTtcbjEwOTQ6XHRcdFx0XHRnb3RvIG91dDtcbjEwOTU6XHRcdFx0fVxuMTA5NjpcdFx0fVxuMTA5NzpcdFxuMTA5ODpcdFx0ZG93bl9yZWFkKGxvY2spO1xuMTA5OTpcdFx0ZXJyID0gbnRmc19yZWFkX2JoX3JhKHNiaSwgcnVuLCB2Ym8sIFx1MDAyNmliLVx1MDAzZXJoZHIsIGJ5dGVzLCBcdTAwMjZpbi1cdTAwM2VuYiwgcmEpO1xuMTEwMDpcdFx0dXBfcmVhZChsb2NrKTtcbjExMDE6XHRcdGlmICghZXJyKVxuMTEwMjpcdFx0XHRnb3RvIG9rO1xuMTEwMzpcdFxuMTEwNDpcdFx0aWYgKGVyciA9PSAtRV9OVEZTX0ZJWFVQKVxuMTEwNTpcdFx0XHRnb3RvIG9rO1xuMTEwNjpcdFxuMTEwNzpcdFx0aWYgKGVyciAhPSAtRU5PRU5UKVxuMTEwODpcdFx0XHRnb3RvIG91dDtcbjExMDk6XHRcbjExMTA6XHRcdG5hbWUgPSBcdTAwMjZzX2luZGV4X25hbWVzW2luZHgtXHUwMDNldHlwZV07XG4xMTExOlx0XHRkb3duX3dyaXRlKGxvY2spO1xuMTExMjpcdFx0ZXJyID0gYXR0cl9sb2FkX3J1bnNfcmFuZ2UobmksIEFUVFJfQUxMT0MsIG5hbWUtXHUwMDNlbmFtZSwgbmFtZS1cdTAwM2VuYW1lX2xlbixcbjExMTM6XHRcdFx0XHRcdCAgIHJ1biwgdmJvLCB2Ym8gJiM0MzsgYnl0ZXMpO1xuMTExNDpcdFx0dXBfd3JpdGUobG9jayk7XG4xMTE1Olx0XHRpZiAoZXJyKVxuMTExNjpcdFx0XHRnb3RvIG91dDtcbjExMTc6XHRcbjExMTg6XHRcdGRvd25fcmVhZChsb2NrKTtcbjExMTk6XHRcdGVyciA9IG50ZnNfcmVhZF9iaF9yYShzYmksIHJ1biwgdmJvLCBcdTAwMjZpYi1cdTAwM2VyaGRyLCBieXRlcywgXHUwMDI2aW4tXHUwMDNlbmIsIHJhKTtcbjExMjA6XHRcdHVwX3JlYWQobG9jayk7XG4xMTIxOlx0XHRpZiAoZXJyID09IC1FX05URlNfRklYVVApXG4xMTIyOlx0XHRcdGdvdG8gb2s7XG4xMTIzOlx0XG4xMTI0Olx0XHRpZiAoZXJyKVxuMTEyNTpcdFx0XHRnb3RvIG91dDtcbjExMjY6XHRcbjExMjc6XHRvazpcbjExMjg6XHRcdGlmICghaW5kZXhfYnVmX2NoZWNrKGliLCBieXRlcywgXHUwMDI2dmJuKSkge1xuMTEyOTpcdFx0XHRfbnRmc19iYWRfaW5vZGUoXHUwMDI2bmktXHUwMDNldmZzX2lub2RlKTtcbjExMzA6XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjExMzE6XHRcdFx0Z290byBvdXQ7XG4xMTMyOlx0XHR9XG4xMTMzOlx0XG4xMTM0Olx0XHRpZiAoZXJyID09IC1FX05URlNfRklYVVApIHtcbjExMzU6XHRcdFx0bnRmc193cml0ZV9iaChzYmksIFx1MDAyNmliLVx1MDAzZXJoZHIsIFx1MDAyNmluLVx1MDAzZW5iLCAwKTtcbjExMzY6XHRcdFx0ZXJyID0gMDtcbjExMzc6XHRcdH1cbjExMzg6XHRcbjExMzk6XHRcdC8qIGNoZWNrIGZvciBpbmRleCBoZWFkZXIgbGVuZ3RoICovXG4xMTQwOlx0XHRpZiAob2Zmc2V0b2Yoc3RydWN0IElOREVYX0JVRkZFUiwgaWhkcikgJiM0MzsgbGUzMl90b19jcHUoaWItXHUwMDNlaWhkci51c2VkKSBcdTAwM2VcbjExNDE6XHRcdCAgICBieXRlcykge1xuMTE0MjpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMTE0MzpcdFx0XHRnb3RvIG91dDtcbjExNDQ6XHRcdH1cbjExNDU6XHRcbjExNDY6XHRcdGluLVx1MDAzZWluZGV4ID0gaWI7XG4xMTQ3Olx0XHQqbm9kZSA9IGluO1xuMTE0ODpcdFxuMTE0OTpcdG91dDpcbjExNTA6XHRcdGlmIChlcnIgPT0gLUVfTlRGU19DT1JSVVBUKSB7XG4xMTUxOlx0XHRcdF9udGZzX2JhZF9pbm9kZShcdTAwMjZuaS1cdTAwM2V2ZnNfaW5vZGUpO1xuMTE1MjpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMTE1MzpcdFx0fVxuMTE1NDpcdFxuMTE1NTpcdFx0aWYgKGliICE9IGluLVx1MDAzZWluZGV4KVxuMTE1NjpcdFx0XHRrZnJlZShpYik7XG4xMTU3Olx0XG4xMTU4Olx0XHRpZiAoKm5vZGUgIT0gaW4pIHtcbjExNTk6XHRcdFx0bmJfcHV0KFx1MDAyNmluLVx1MDAzZW5iKTtcbjExNjA6XHRcdFx0a2ZyZWUoaW4pO1xuMTE2MTpcdFx0fVxuMTE2MjpcdFxuMTE2MzpcdFx0cmV0dXJuIGVycjtcbjExNjQ6XHR9XG4xMTY1Olx0XG4xMTY2Olx0LypcbjExNjc6XHQgKiBpbmR4X2ZpbmQgLSBTY2FuIE5URlMgZGlyZWN0b3J5IGZvciBnaXZlbiBlbnRyeS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTY6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODgyMwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERhdGEgSW5kZXhpbmcgUHJvY2VzcyoqCgpPa2F5LCBzbyBgaW5keF9yZWFkX3JhYCBpcyByZXNwb25zaWJsZSBmb3IgYWxsb2NhdGluZyBib3RoIGBpbmAgYW5kIGBpYmAsIHdpdGggYGliYCBnZXR0aW5nIGFzc2lnbmVkIHRvIGBpbi0mZ3Q7aW5kZXhgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgc28gZmFyLiBJZiBgaW5keF9yZWFkYCBpcyBzdWNjZXNzZnVsLCB0aGUgYCpub2RlYCBwb2ludGVyIEkmIzM5O20gd29ya2luZyB3aXRoIGlzIHNldCB0byBgaW5gLCBhbmQgY3J1Y2lhbGx5LCBgaW4tJmd0O2luZGV4YCBub3cgcG9pbnRzIHRvIHRoYXQgYWxsb2NhdGVkIGBpYmAuIEkgbmVlZCB0byByZW1lbWJlciB0aGlzIHN0cnVjdHVyZSwgYXMgaXQmIzM5O3MgdGhlIGZvdW5kYXRpb24gb2YgdGhlIG9wZXJhdGlvbi4KCk5vdywgbG9va2luZyBhdCBgaW5keF9maW5kX3NvcnRgLCBpZiBgZGVfaGFzX3Zjbl9leChlKWAgZXZhbHVhdGVzIHRvIHRydWUsIGl0IGNhbGxzIGBpbmR4X3JlYWRgIChzbyBzZXR0aW5nIHRoaW5ncyB1cCkgYW5kIHRoZW4gY2FsbHMgYGZuZF9wdXNoYC4gSSB1bmRlcnN0YW5kIHRoZSBpbnRlbnRpb24gaGVyZS4KCkJ1dCwgSSYjMzk7bSBjb25jZXJuZWQgYWJvdXQgdGhlIHNpemUgY2hlY2suIElmIGBsZTE2X3RvX2NwdShlLSZndDtzaXplKWAgaXMgbGVzcyB0aGFuIGEgY2VydGFpbiBkZWZpbmVkIHNpemUsIGl0IGZyZWVzIGBuYC4gSXQgZmVlbHMgbGlrZSB0aGVyZSBpcyBhbiBvdmVyc2lnaHQuIFRoaXMgZnJlZXMgYG5gLCB3aGljaCBpcyBmaW5lLCBidXQgaXQgKm1pc3NlcyogZnJlZWluZyBgbi0mZ3Q7aW5kZXhgLiBOb3csIGhhbmcgb24gYSBzZWNvbmQsIHdhc24mIzM5O3QgYG5gIHN1cHBvc2VkIHRvIGJlIHBvcHBlZCBmcm9tIHRoZSBgZm5kYCBzdGFjayB1c2luZyBgZm5kX3BvcChmbmQpYD8gSXQgbG9va3MgbGlrZSBJIGFtIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBpbnRvIGBmbmRfcG9wYCBhbmQgZmlndXJlIG91dCB3aGF0IGl0JiMzOTtzIGRvaW5nIHdpdGggdGhhdCBgbmAgdmFsdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE2OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZuZF9wb3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzMy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmczMvaW5kZXguYz03MDY9c3RhdGljIGludCBmbmRfcHVzaChzdHJ1Y3QgbnRmc19mbmQgKmZuZCwgc3RydWN0IGluZHhfbm9kZSAqbixcbi0tXG5mcy9udGZzMy9pbmRleC5jLTcxOC1cbmZzL250ZnMzL2luZGV4LmM6NzE5OnN0YXRpYyBzdHJ1Y3QgaW5keF9ub2RlICpmbmRfcG9wKHN0cnVjdCBudGZzX2ZuZCAqZm5kKVxuZnMvbnRmczMvaW5kZXguYy03MjAte1xuLS1cbmZzL250ZnMzL2luZGV4LmM9MTI0ND1pbnQgaW5keF9maW5kX3NvcnQoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcbi0tXG5mcy9udGZzMy9pbmRleC5jLTEyOTMtXHRcdFx0aWYgKG4pIHtcbmZzL250ZnMzL2luZGV4LmM6MTI5NDpcdFx0XHRcdGZuZF9wb3AoZm5kKTtcbmZzL250ZnMzL2luZGV4LmMtMTI5NS1cdFx0XHRcdGtmcmVlKG4pO1xuLS1cbmZzL250ZnMzL2luZGV4LmMtMTMyNi1cdFx0aWYgKG4pIHtcbmZzL250ZnMzL2luZGV4LmM6MTMyNzpcdFx0XHRmbmRfcG9wKGZuZCk7XG5mcy9udGZzMy9pbmRleC5jLTEzMjgtXHRcdFx0a2ZyZWUobi1cdTAwM2VpbmRleCk7XG4tLVxuZnMvbnRmczMvaW5kZXguYz0xMzU1PWludCBpbmR4X2ZpbmRfcmF3KHN0cnVjdCBudGZzX2luZGV4ICppbmR4LCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXG4tLVxuZnMvbnRmczMvaW5kZXguYy0xNDI4LVx0XHRpZiAobikge1xuZnMvbnRmczMvaW5kZXguYzoxNDI5Olx0XHRcdGZuZF9wb3AoZm5kKTtcbmZzL250ZnMzL2luZGV4LmMtMTQzMC1cdFx0XHRwdXRfaW5keF9ub2RlKG4pO1xuLS1cbmZzL250ZnMzL2luZGV4LmM9MjM2OT1pbnQgaW5keF9kZWxldGVfZW50cnkoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcbi0tXG5mcy9udGZzMy9pbmRleC5jLTI0NTYtXHRcdGlmIChpYiBcdTAwMjZcdTAwMjYgaWJfaXNfbGVhZihpYikgXHUwMDI2XHUwMDI2IGliX2lzX2VtcHR5KGliKSkge1xuZnMvbnRmczMvaW5kZXguYzoyNDU3Olx0XHRcdGZuZF9wb3AoZm5kKTtcbmZzL250ZnMzL2luZGV4LmMtMjQ1OC1cdFx0XHRmbmRfcHVzaChmbmQyLCBuLCBlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTY6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg4OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGVjb25zdHJ1Y3RpbmcgYGZuZF9wb3BgJiMzOTtzIFJldHVybiBWYWx1ZSoqCgpBbHJpZ2h0LCBoYW5nIG9uIGEgc2Vjb25kLiBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgYGZuZF9wb3BgIG5vdywgYW5kIEkgc2VlIGl0JiMzOTtzIHJldHVybmluZyBhIGBzdHJ1Y3QgaW5keF9ub2RlICpgLiBUaGF0IG1lYW5zIGl0JiMzOTtzIGhhbmRpbmcgYmFjayBhIHBvaW50ZXIgdG8gYSBzcGVjaWZpYyBub2RlIHdpdGhpbiB0aGF0IGBpbmR4X25vZGVgIHN0cnVjdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdC4gSSBuZWVkIHRvIGltbWVkaWF0ZWx5IHB1bGwgdXAgdGhlIGRlZmluaXRpb24gb2YgYGZuZF9wb3BgIHRvIHZlcmlmeSB3aGF0JiMzOTtzIGdvaW5nIG9uOyBJIG5lZWQgdG8ga25vdyBob3cgdGhhdCBub2RlIGlzIGNob3NlbiBhbmQgd2hhdCBjb250ZXh0IHRvIHVuZGVyc3RhbmQgdGhhdCBzdHJ1Y3R1cmUgd2l0aGluLiBHb3R0YSBrZWVwIHRoZXNlIHBvaW50ZXJzIHN0cmFpZ2h0OyBJJiMzOTttIGFzc3VtaW5nIHRoYXQgaXQgaXMgbGlua2VkIHRvIG90aGVyIHZhbHVlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTY6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9udGZzMy9pbmRleC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzE5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MTk6XHRzdGF0aWMgc3RydWN0IGluZHhfbm9kZSAqZm5kX3BvcChzdHJ1Y3QgbnRmc19mbmQgKmZuZClcbiA3MjA6XHR7XG4gNzIxOlx0XHRzdHJ1Y3QgaW5keF9ub2RlICpuO1xuIDcyMjpcdFx0aW50IGkgPSBmbmQtXHUwMDNlbGV2ZWw7XG4gNzIzOlx0XG4gNzI0Olx0XHRpIC09IDE7XG4gNzI1Olx0XHRuID0gZm5kLVx1MDAzZW5vZGVzW2ldO1xuIDcyNjpcdFx0Zm5kLVx1MDAzZW5vZGVzW2ldID0gTlVMTDtcbiA3Mjc6XHRcdGZuZC1cdTAwM2VsZXZlbCA9IGk7XG4gNzI4Olx0XG4gNzI5Olx0XHRyZXR1cm4gbjtcbiA3MzA6XHR9XG4gNzMxOlx0XG4gNzMyOlx0c3RhdGljIGJvb2wgZm5kX2lzX2VtcHR5KHN0cnVjdCBudGZzX2ZuZCAqZm5kKVxuIDczMzpcdHtcbiA3MzQ6XHRcdGlmICghZm5kLVx1MDAzZWxldmVsKVxuIDczNTpcdFx0XHRyZXR1cm4gIWZuZC1cdTAwM2Vyb290X2RlO1xuIDczNjpcdFxuIDczNzpcdFx0cmV0dXJuICFmbmQtXHUwMDNlZGVbZm5kLVx1MDAzZWxldmVsIC0gMV07XG4gNzM4Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDM5NgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBSZWNlbnQgUGF0Y2ggaW4gYGluZHhfZmluZF9zb3J0YCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGluZHhfZmluZF9zb3J0YCBhbmQgc29tZXRoaW5nIGltbWVkaWF0ZWx5IGp1bXBzIG91dC4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggYWRkZWQgYGtmcmVlKG4tJmd0O2luZGV4KTtgICpiZWZvcmUqIHRoZSBga2ZyZWUobik7YCBjYWxsIHdpdGhpbiB0aGUgYmxvY2sgdGhhdCBwb3BzIGEgbGV2ZWwuIFRoYXQgbWFrZXMgc2Vuc2UsIGZyZWVpbmcgdGhlIGFsbG9jYXRlZCBpbmRleCBkYXRhIGJlZm9yZSBmcmVlaW5nIHRoZSBub2RlIGl0c2VsZiwgc3RhbmRhcmQgcHJhY3RpY2UuIEJ1dCB3YWl0LCBJJiMzOTttIHByZXR0eSBzdXJlIHRoZXJlJiMzOTtzIGFub3RoZXIgaW5zdGFuY2Ugb2YgYGtmcmVlKG4pYCBpbiB0aGlzIHNhbWUgZnVuY3Rpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBzYW1lIG1vZGlmaWNhdGlvbiB3YXMgbWFkZSB0aGVyZS4gTGV0IG1lIGdvIGJhY2sgYW5kIGRvdWJsZS1jaGVjayB0aGF0IGJsb2NrIG9mIGNvZGUuCgpPa2F5LCBoZXJlIGl0IGlzOgoKYGBgYwoJCXdoaWxlIChkZV9oYXNfdmNuX2V4KGUpKSB7CgkJCWlmIChsZTE2X3RvX2NwdShlLSZndDtzaXplKSAmbHQ7CgkJCSAgICBzaXplb2Yoc3RydWN0IE5URlNfREUpICYjNDM7IHNpemVvZih1NjQpKSB7CgkJCQlpZiAobikgewoJCQkJCWZuZF9wb3AoZm5kKTsKCQkJCQlrZnJlZShuKTsKCQkJCX0KCQkJCXJldHVybiAtRUlOVkFMOwoJCQl9CmBgYAoKVGhlIHRoaW5nIGlzLCBJIGRvbiYjMzk7dCBzZWUgYGtmcmVlKG4tJmd0O2luZGV4KWAgaW4gdGhlIGRpZmYgZm9yIHRoYXQgbG9jYXRpb24uIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBtZW1vcnkgbGVhayB3YXMgbm90IGludHJvZHVjZWQuIExldCBtZSBjaGVjayB0aGUgZGlmZiBhZ2FpbiwgY2FyZWZ1bGx5LCBsaW5lIGJ5IGxpbmUuCgoqICAgU2lnaCouLi4geWVwLCB0aGUgZGlmZiAqb25seSogc2hvd3MgdGhlIGNoYW5nZSBpbiB0aGUgZmlyc3QgbG9jYXRpb24uIFRoYXQgbWVhbnMgdGhlIGBrZnJlZShuLSZndDtpbmRleClgIGlzICpub3QqIHByZXNlbnQgaW4gdGhlIHNlY29uZCBga2ZyZWUobilgIGluc3RhbmNlLiBUaGlzIGlzIGEgcG90ZW50aWFsIG1lbW9yeSBsZWFrLiBCYWNrIHRvIHRoZSBjb2RlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL250ZnMzL2luZGV4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyOTA6XHRcdHdoaWxlIChkZV9oYXNfdmNuX2V4KGUpKSB7XG4xMjkxOlx0XHRcdGlmIChsZTE2X3RvX2NwdShlLVx1MDAzZXNpemUpIFx1MDAzY1xuMTI5MjpcdFx0XHQgICAgc2l6ZW9mKHN0cnVjdCBOVEZTX0RFKSAmIzQzOyBzaXplb2YodTY0KSkge1xuMTI5MzpcdFx0XHRcdGlmIChuKSB7XG4xMjk0Olx0XHRcdFx0XHRmbmRfcG9wKGZuZCk7XG4xMjk1Olx0XHRcdFx0XHRrZnJlZShuKTtcbjEyOTY6XHRcdFx0XHR9XG4xMjk3Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMjk4Olx0XHRcdH1cbjEyOTk6XHRcbjEzMDA6XHRcdFx0LyogUmVhZCBuZXh0IGxldmVsLiAqL1xuMTMwMTpcdFx0XHRlcnIgPSBpbmR4X3JlYWQoaW5keCwgbmksIGRlX2dldF92Ym4oZSksIFx1MDAyNm4pO1xuMTMwMjpcdFx0XHRpZiAoZXJyKVxuMTMwMzpcdFx0XHRcdHJldHVybiBlcnI7XG4xMzA0Olx0XG4xMzA1Olx0XHRcdC8qIFRyeSBuZXh0IGxldmVsLiAqL1xuMTMwNjpcdFx0XHRlID0gaGRyX2ZpcnN0X2RlKFx1MDAyNm4tXHUwMDNlaW5kZXgtXHUwMDNlaWhkcik7XG4xMzA3Olx0XHRcdGlmICghZSkge1xuMTMwODpcdFx0XHRcdGtmcmVlKG4pO1xuMTMwOTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTMxMDpcdFx0XHR9XG4xMzExOlx0XG4xMzEyOlx0XHRcdGZuZF9wdXNoKGZuZCwgbiwgZSk7XG4xMzEzOlx0XHR9XG4xMzE0Olx0XG4xMzE1Olx0XHRpZiAobGUxNl90b19jcHUoZS1cdTAwM2VzaXplKSBcdTAwM2Ugc2l6ZW9mKHN0cnVjdCBOVEZTX0RFKSkge1xuMTMxNjpcdFx0XHQqZW50cnkgPSBlO1xuMTMxNzpcdFx0XHRyZXR1cm4gMDtcbjEzMTg6XHRcdH1cbjEzMTk6XHRcbjEzMjA6XHRwb3BfbGV2ZWw6XG4xMzIxOlx0XHRmb3IgKDs7KSB7XG4xMzIyOlx0XHRcdGlmICghZGVfaXNfbGFzdChlKSlcbjEzMjM6XHRcdFx0XHRnb3RvIG5leHRfaXRlcjtcbjEzMjQ6XHRcbjEzMjU6XHRcdFx0LyogUG9wIG9uZSBsZXZlbC4gKi9cbjEzMjY6XHRcdFx0aWYgKG4pIHtcbjEzMjc6XHRcdFx0XHRmbmRfcG9wKGZuZCk7XG4xMzI4Olx0XHRcdFx0a2ZyZWUobi1cdTAwM2VpbmRleCk7XG4xMzI5Olx0XHRcdFx0a2ZyZWUobik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE2OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjc1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlYnVnZ2luZyBNZW1vcnkgTWFuYWdlbWVudCBpbiBgaW5keF9yZWFkYCoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLi4uIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBga2ZyZWUobilgIGNhbGxzLCBhbmQgaXQgbG9va3MgbGlrZSBga2ZyZWUobi0mZ3Q7aW5kZXgpYCBpcyBtaXNzaW5nIGZyb20gc2V2ZXJhbCBvZiB0aGVtLiBUaGF0JiMzOTtzIGEgcG90ZW50aWFsIG1lbW9yeSBsZWFrISBCdXQgd2FpdCwgbGV0IG1lIGJhY2t0cmFjay4gVGhlIGBpbmR4X3JlYWRgIGZ1bmN0aW9uIGFsbG9jYXRlcyAqYm90aCogYG5gIGFuZCBgbi0mZ3Q7aW5kZXhgLiBSaWdodCwgb2theS4gQnV0IGBuLSZndDtpbmRleGAuLi4gaXQgY291bGQgYmUgYSBidWZmZXIgaGVhZCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHkuIExldCYjMzk7cyBzZWUuLi4gbG9va2luZyBhdCBgaW5keF9yZWFkX3JhYCwgeWVzLCB0aGVyZSBpdCBpczogYGliID0gaW4tJmd0O2luZGV4OyBpZiAoIWliKSB7IGliID0ga21hbGxvYyhieXRlcywgR0ZQX05PRlMpO2AgT2theSwgc28gYG4tJmd0O2luZGV4YCBpcywgaW5kZWVkLCBhIGBrbWFsbG9jYCYjMzk7ZCBidWZmZXIuIEl0JiMzOTtzIG5vdCBhIGBidWZmZXJfaGVhZGAsIGl0JiMzOTtzIGp1c3QgYSByZWd1bGFyIGNodW5rIG9mIG1lbW9yeS4KCk5vdywgSSBzZWVtIHRvIHJlbWVtYmVyIGBwdXRfaW5keF9ub2RlYCBiZWluZyB0aGUgcGxhY2Ugd2hlcmUgYm90aCBgbmAgYW5kIGBuLSZndDtpbmRleGAgYXJlIGZyZWVkLiBMZXQgbWUganVzdCBjb25maXJtIHRoYXQgYnkgcXVpY2tseSBleGFtaW5pbmcgdGhlIGBwdXRfaW5keF9ub2RlYCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTY6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHV0X2luZHhfbm9kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzMy9kaXIuYz00MDQ9c3RhdGljIGludCBudGZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4KVxuLS1cbmZzL250ZnMzL2Rpci5jLTU2Mi1cdGtmcmVlKG5hbWUpO1xuZnMvbnRmczMvZGlyLmM6NTYzOlx0cHV0X2luZHhfbm9kZShub2RlKTtcbmZzL250ZnMzL2Rpci5jLTU2NC1cbi0tXG5mcy9udGZzMy9kaXIuYz02MDA9c3RhdGljIGludCBudGZzX2Rpcl9jb3VudChzdHJ1Y3QgaW5vZGUgKmRpciwgYm9vbCAqaXNfZW1wdHksIHNpemVfdCAqZGlycyxcbi0tXG5mcy9udGZzMy9kaXIuYy02Nzctb3V0OlxuZnMvbnRmczMvZGlyLmM6Njc4Olx0cHV0X2luZHhfbm9kZShub2RlKTtcbmZzL250ZnMzL2Rpci5jLTY3OS1cdGlmIChkaXJzKVxuLS1cbmZzL250ZnMzL2luZGV4LmM9Njg5PXZvaWQgZm5kX2NsZWFyKHN0cnVjdCBudGZzX2ZuZCAqZm5kKVxuLS1cbmZzL250ZnMzL2luZGV4LmMtNjk4LVxuZnMvbnRmczMvaW5kZXguYzo2OTk6XHRcdHB1dF9pbmR4X25vZGUobik7XG5mcy9udGZzMy9pbmRleC5jLTcwMC1cdFx0Zm5kLVx1MDAzZW5vZGVzW2ldID0gTlVMTDtcbi0tXG5mcy9udGZzMy9pbmRleC5jPTExNjk9aW50IGluZHhfZmluZChzdHJ1Y3QgbnRmc19pbmRleCAqaW5keCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxuLS1cbmZzL250ZnMzL2luZGV4LmMtMTIyNy1cdFx0aWYgKCFlKSB7XG5mcy9udGZzMy9pbmRleC5jOjEyMjg6XHRcdFx0cHV0X2luZHhfbm9kZShub2RlKTtcbmZzL250ZnMzL2luZGV4LmMtMTIyOS1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5mcy9udGZzMy9pbmRleC5jLTEyMzQtXHRcdGlmIChlcnIpIHtcbmZzL250ZnMzL2luZGV4LmM6MTIzNTpcdFx0XHRwdXRfaW5keF9ub2RlKG5vZGUpO1xuZnMvbnRmczMvaW5kZXguYy0xMjM2LVx0XHRcdHJldHVybiBlcnI7XG4tLVxuZnMvbnRmczMvaW5kZXguYz0xMzU1PWludCBpbmR4X2ZpbmRfcmF3KHN0cnVjdCBudGZzX2luZGV4ICppbmR4LCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXG4tLVxuZnMvbnRmczMvaW5kZXguYy0xNDI5LVx0XHRcdGZuZF9wb3AoZm5kKTtcbmZzL250ZnMzL2luZGV4LmM6MTQzMDpcdFx0XHRwdXRfaW5keF9ub2RlKG4pO1xuZnMvbnRmczMvaW5kZXguYy0xNDMxLVx0XHRcdG4gPSBOVUxMO1xuLS1cbmZzL250ZnMzL2luZGV4LmM9MTYyOD1zdGF0aWMgaW50IGluZHhfaW5zZXJ0X2ludG9fcm9vdChzdHJ1Y3QgbnRmc19pbmRleCAqaW5keCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxuLS1cbmZzL250ZnMzL2luZGV4LmMtMTgxOS1cbmZzL250ZnMzL2luZGV4LmM6MTgyMDpcdFx0cHV0X2luZHhfbm9kZShuKTtcbmZzL250ZnMzL2luZGV4LmMtMTgyMS1cdFx0Zm5kX2NsZWFyKGZuZCk7XG4tLVxuZnMvbnRmczMvaW5kZXguYy0xODQyLW91dF9wdXRfbjpcbmZzL250ZnMzL2luZGV4LmM6MTg0MzpcdHB1dF9pbmR4X25vZGUobik7XG5mcy9udGZzMy9pbmRleC5jLTE4NDQtb3V0X2ZyZWVfcmU6XG4tLVxuZnMvbnRmczMvaW5kZXguYz0xODU3PXN0YXRpYyBpbnQgaW5keF9pbnNlcnRfaW50b19idWZmZXIoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsXG4tLVxuZnMvbnRmczMvaW5kZXguYy0xOTgwLVxuZnMvbnRmczMvaW5kZXguYzoxOTgxOlx0cHV0X2luZHhfbm9kZShuMik7XG5mcy9udGZzMy9pbmRleC5jLTE5ODItXG4tLVxuZnMvbnRmczMvaW5kZXguYz0yMjE2PXN0YXRpYyBpbnQgaW5keF9mcmVlX2NoaWxkcmVuKHN0cnVjdCBudGZzX2luZGV4ICppbmR4LCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXG4tLVxuZnMvbnRmczMvaW5kZXguYy0yMjM4LVxuZnMvbnRmczMvaW5kZXguYzoyMjM5Olx0cHV0X2luZHhfbm9kZShuKTtcbmZzL250ZnMzL2luZGV4LmMtMjI0MC1cbi0tXG5mcy9udGZzMy9udGZzX2ZzLmg9MTE5MT1zdGF0aWMgaW5saW5lIHZvaWQgbmJfcHV0KHN0cnVjdCBudGZzX2J1ZmZlcnMgKm5iKVxuLS1cbmZzL250ZnMzL250ZnNfZnMuaC0xMjAyLVxuZnMvbnRmczMvbnRmc19mcy5oOjEyMDM6c3RhdGljIGlubGluZSB2b2lkIHB1dF9pbmR4X25vZGUoc3RydWN0IGluZHhfbm9kZSAqaW4pXG5mcy9udGZzMy9udGZzX2ZzLmgtMTIwNC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE2OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjEwCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEZWVwIERpdmUgaW50byBgcHV0X2luZHhfbm9kZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIGFuZCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHB1dF9pbmR4X25vZGVgLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgYW5kIHBvdGVudGlhbCBlZGdlIGNhc2VzLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byBldmFsdWF0ZToKCiogICAqKkNvcmUgZnVuY3Rpb25hbGl0eToqKiBXaGF0JiMzOTtzIGl0ICphY3R1YWxseSogZG9pbmc/IElzIGl0IHdyaXRpbmcgZGlyZWN0bHksIG9yIGlzIGl0IGdvaW5nIHRocm91Z2ggc29tZSBraW5kIG9mIGluZGlyZWN0aW9uIG9yIGJ1ZmZlcmluZz8gSSBuZWVkIHRvIGNsYXJpZnkgdGhhdCBiZWZvcmUgSSBzdGFydCBsb29raW5nIGF0IGVkZ2UgY2FzZXMuCiogICAqKkRhdGEgc3RydWN0dXJlczoqKiBXaGF0JiMzOTtzIHRoZSB0YXJnZXQgZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoZSBpbnNlcnRpb24/IElzIGl0IGEgQi10cmVlLCBhIGhhc2ggdGFibGUsIG9yIHNvbWV0aGluZyBtb3JlIGJlc3Bva2U/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb21wbGV4aXR5IGFuZCBhY2Nlc3MgcGF0dGVybnMuIEkgYXNzdW1lIHRoYXQgaXQgcmVsYXRlcyB0byBhIHN0b3JhZ2Ugc29sdXRpb24uCiogICAqKkVycm9yIGhhbmRsaW5nOioqIEhvdyByb2J1c3QgaXMgaXQ/IFdoYXQgZXhjZXB0aW9ucyBvciBlcnJvciBjb2RlcyBtaWdodCBpdCB0aHJvdz8gQXJlIHRoZXJlIGNoZWNrcyBmb3IgZnVsbCBjb25kaXRpb25zIG9yIGNvbmZsaWN0aW5nIHdyaXRlcz8gSSBuZWVkIHRvIGFuYWx5emUgaG93IHdlbGwgaXQgZGVhbHMgd2l0aCBjb25jdXJyZW50IHNpdHVhdGlvbnMuCiogICAqKlBlcmZvcm1hbmNlIGltcGxpY2F0aW9uczoqKiBXaGVyZSBhcmUgdGhlIHBvdGVudGlhbCBib3R0bGVuZWNrcz8gTWVtb3J5IGFsbG9jYXRpb24/IERpc2sgSS9PPyBMb2NrIGNvbnRlbnRpb24/IFVuZGVyc3RhbmRpbmcgdGhpcyBpcyB2aXRhbCBmb3Igb3B0aW1pemluZyB0aGUgY29kZSBvciBldmVuIHRoZSBhcmNoaXRlY3R1cmUgaXQgc3VwcG9ydHMuCiogICAqKkNvbmN1cnJlbmN5OioqIEhvdyBkb2VzIHRoaXMgZnVuY3Rpb24gaW50ZXJhY3Qgd2l0aCBvdGhlciB0aHJlYWRzIG9yIHByb2Nlc3Nlcz8gQXJlIHRoZXJlIGFueSBsb2NraW5nIG1lY2hhbmlzbXM/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgaWYgSSB1c2UgYHB1dF9pbmR4X25vZGVgIGNvbmN1cnJlbnRseSBmcm9tIGRpZmZlcmVudCBwbGFjZXM/CiogICAqKkFzc3VtcHRpb25zKio6IFdoYXQgZG9lcyBpdCBhc3N1bWUgYWJvdXQgdGhlIGVudmlyb25tZW50IGl0IGlzIGJlaW5nIGNhbGxlZCBpbj8gQXJlIHRoZXJlIHNpemUgY29uc3RyYWludHMgb24gdGhlIGRhdGEgYmVpbmcgd3JpdHRlbj8KKiAgICoqUG90ZW50aWFsIGlzc3VlcyoqOiBXaGF0IGFyZSB0aGUgY2FzZXMgSSBuZWVkIHRvIGNoZWNrIHRvIGJlIHN1cmUgaXQgZG9lcyB3aGF0IGl0IGlzIHN1cHBvc2VkIHRvPwpJIGFtIGdvaW5nIHRvIGV2YWx1YXRlIHRoZSBjb2RlIHBhdGguIEkgd2FudCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2Ygd2hhdCBpcyBnb2luZyBvbiwgYW5kIHRoZW4sIEkgY2FuIHN0YXJ0IGxvb2tpbmcgZm9yIGFueSBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE2OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvbnRmczMvbnRmc19mcy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIwMywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjAzOlx0c3RhdGljIGlubGluZSB2b2lkIHB1dF9pbmR4X25vZGUoc3RydWN0IGluZHhfbm9kZSAqaW4pXG4xMjA0Olx0e1xuMTIwNTpcdFx0aWYgKCFpbilcbjEyMDY6XHRcdFx0cmV0dXJuO1xuMTIwNzpcdFxuMTIwODpcdFx0a2ZyZWUoaW4tXHUwMDNlaW5kZXgpO1xuMTIwOTpcdFx0bmJfcHV0KFx1MDAyNmluLVx1MDAzZW5iKTtcbjEyMTA6XHRcdGtmcmVlKGluKTtcbjEyMTE6XHR9XG4xMjEyOlx0XG4xMjEzOlx0c3RhdGljIGlubGluZSB2b2lkIG1pX2NsZWFyKHN0cnVjdCBtZnRfaW5vZGUgKm1pKVxuMTIxNDpcdHtcbjEyMTU6XHRcdG5iX3B1dChcdTAwMjZtaS1cdTAwM2VuYik7XG4xMjE2Olx0XHRrZnJlZShtaS1cdTAwM2VtcmVjKTtcbjEyMTc6XHRcdG1pLVx1MDAzZW1yZWMgPSBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg2NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgaW4gSW5kZXggU3RydWN0dXJlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgaW5kZXggbm9kZXMuIEkgc2VlIHRoYXQgYHB1dF9pbmR4X25vZGVgIGlzIGRvaW5nIGEgY2xlYW4tdXA6IGBrZnJlZShpbi0mZ3Q7aW5kZXgpOyBuYl9wdXQoJmFtcDtpbi0mZ3Q7bmIpOyBrZnJlZShpbik7YC4gVGhhdCYjMzk7cyBzdGFuZGFyZCAtIGZyZWVpbmcgdGhlIGluZGV4IGRhdGEsIHJlbGVhc2luZyBhIGNvdW50ZXIsIGFuZCB0aGVuIGZyZWVpbmcgdGhlIG5vZGUgaXRzZWxmLiBNYWtlcyBwZXJmZWN0IHNlbnNlLgoKQnV0IHRoZW4gSSYjMzk7bSBpbiBgaW5keF9maW5kX3NvcnRgLCBhbmQgSSYjMzk7bSBzZWVpbmcgdGhpczoKCmBgYGMKCQkJLyogUG9wIG9uZSBsZXZlbC4gKi8KCQkJaWYgKG4pIHsKCQkJCWZuZF9wb3AoZm5kKTsKCQkJCWtmcmVlKG4tJmd0O2luZGV4KTsKCQkJCWtmcmVlKG4pOwoJCQl9CmBgYAoKV2FpdCBhIHNlY29uZC4gV2h5IGFyZW4mIzM5O3QgdGhleSBqdXN0IGNhbGxpbmcgYHB1dF9pbmR4X25vZGUobilgIGhlcmU/IEl0IHNlZW1zIGxpa2UgdGhpcyBpcyBkdXBsaWNhdGluZyB0aGUgY2xlYW4tdXAgbG9naWMuIEkmIzM5O20gdXNlZCB0byBzZWVpbmcgY29kZSByZXVzZSB0byBhdm9pZCByZWR1bmRhbmN5IGFuZCBwb3RlbnRpYWwgYnVncy4gSXQmIzM5O3MgY2xlYW5lciwgYW5kIGVhc2llciB0byBtYWludGFpbi4gVGhpcyBkdXBsaWNhdGlvbiBpcyBhIGJpdCBvZiBhIHJlZCBmbGFnLgoKSSBuZWVkIHRvIHNlZSBpZiB0aGlzIHBhdHRlcm4gaXMgcmVwZWF0ZWQgZWxzZXdoZXJlIGluIGBpbmR4X2ZpbmRfc29ydGAuIExldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGluc3RhbmNlcyBvZiBga2ZyZWUobilgIGluIHRoaXMgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGZ1bmN0aW9uIGlzbiYjMzk7dCB1c2luZyB0aGUgYWxyZWFkeSBlc3RhYmxpc2hlZCBgcHV0X2luZHhfbm9kZWAgYW5kIHBvdGVudGlhbGx5IHJlZmFjdG9yIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE2OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvbnRmczMvaW5kZXguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTI5MDpcdFx0d2hpbGUgKGRlX2hhc192Y25fZXgoZSkpIHtcbjEyOTE6XHRcdFx0aWYgKGxlMTZfdG9fY3B1KGUtXHUwMDNlc2l6ZSkgXHUwMDNjXG4xMjkyOlx0XHRcdCAgICBzaXplb2Yoc3RydWN0IE5URlNfREUpICYjNDM7IHNpemVvZih1NjQpKSB7XG4xMjkzOlx0XHRcdFx0aWYgKG4pIHtcbjEyOTQ6XHRcdFx0XHRcdGZuZF9wb3AoZm5kKTtcbjEyOTU6XHRcdFx0XHRcdGtmcmVlKG4pO1xuMTI5NjpcdFx0XHRcdH1cbjEyOTc6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjEyOTg6XHRcdFx0fVxuMTI5OTpcdFxuMTMwMDpcdFx0XHQvKiBSZWFkIG5leHQgbGV2ZWwuICovXG4xMzAxOlx0XHRcdGVyciA9IGluZHhfcmVhZChpbmR4LCBuaSwgZGVfZ2V0X3ZibihlKSwgXHUwMDI2bik7XG4xMzAyOlx0XHRcdGlmIChlcnIpXG4xMzAzOlx0XHRcdFx0cmV0dXJuIGVycjtcbjEzMDQ6XHRcbjEzMDU6XHRcdFx0LyogVHJ5IG5leHQgbGV2ZWwuICovXG4xMzA2Olx0XHRcdGUgPSBoZHJfZmlyc3RfZGUoXHUwMDI2bi1cdTAwM2VpbmRleC1cdTAwM2VpaGRyKTtcbjEzMDc6XHRcdFx0aWYgKCFlKSB7XG4xMzA4Olx0XHRcdFx0a2ZyZWUobik7XG4xMzA5Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMzEwOlx0XHRcdH1cbjEzMTE6XHRcbjEzMTI6XHRcdFx0Zm5kX3B1c2goZm5kLCBuLCBlKTtcbjEzMTM6XHRcdH1cbjEzMTQ6XHRcbjEzMTU6XHRcdGlmIChsZTE2X3RvX2NwdShlLVx1MDAzZXNpemUpIFx1MDAzZSBzaXplb2Yoc3RydWN0IE5URlNfREUpKSB7XG4xMzE2Olx0XHRcdCplbnRyeSA9IGU7XG4xMzE3Olx0XHRcdHJldHVybiAwO1xuMTMxODpcdFx0fVxuMTMxOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDc1MQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDUwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgTWVtb3J5IExlYWsgaW4gYGluZHhfZmluZF9zb3J0YCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgaW5keF9maW5kX3NvcnRgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgdGhpcyBzZWN0aW9uIG9mIGNvZGU6CgpgYGBjCgkJd2hpbGUgKGRlX2hhc192Y25fZXgoZSkpIHsKCQkJaWYgKGxlMTZfdG9fY3B1KGUtJmd0O3NpemUpICZsdDsKCQkJICAgIHNpemVvZihzdHJ1Y3QgTlRGU19ERSkgJiM0Mzsgc2l6ZW9mKHU2NCkpIHsKCQkJCWlmIChuKSB7CgkJCQkJZm5kX3BvcChmbmQpOwoJCQkJCWtmcmVlKG4pOwoJCQkJfQoJCQkJcmV0dXJuIC1FSU5WQUw7CgkJCX0KYGBgCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpZiBgbmAgaXMgcG9wcGVkIGZyb20gYGZuZGAsIGl0ICpoYWQqIHRvIGhhdmUgYmVlbiBwdXNoZWQgdGhlcmUgZWFybGllci4gQW5kIGlmIGl0IHdhcyBwdXNoZWQgdGhlcmUsIGl0IHdhcyBhbGxvY2F0ZWQgYnkgYGluZHhfcmVhZGAuIElmIGl0IHdhcyBmcm9tIGBpbmR4X3JlYWRgLCBpdCAqc2hvdWxkKiBoYXZlIGBuLSZndDtpbmRleGAgYW5kIGBuLSZndDtuYmAgbWVtYmVycy4gQnV0LCB0aGlzIGNvZGUganVzdCBkb2VzIGEgYGtmcmVlKG4pYC4gVGhhdCBsb29rcyBsaWtlIGEgcG90ZW50aWFsIG1lbW9yeSBsZWFrIG9mIGJvdGggYG4tJmd0O2luZGV4YCBhbmQgYG4tJmd0O25iYC4gV2FpdCBhIHNlY29uZCB0aG91Z2gsIGBuYl9wdXRgIHJlbGVhc2VzIGJ1ZmZlciBoZWFkcy4gU28sIGlmIGBrZnJlZShuKWAgaXMgY2FsbGVkIHdpdGhvdXQgYSBjYWxsIHRvIGBuYl9wdXRgIGZpcnN0LCB3ZSYjMzk7cmUgZGVmaW5pdGVseSBsZWFraW5nIGJ1ZmZlciBoZWFkcyEKCkkgcmVtZW1iZXIgdGhhdCBgbmAgaXMgcG9wcGVkIGZyb20gYGZuZGAgaW4gYGluZHhfZmluZF9zb3J0YCBhbmQgdGhhdCBgZm5kX3B1c2hgIHB1c2hlcyBgbmAgKmFuZCogYGVgIHRvIGBmbmRgLgoKT2theSwgc28gSSB3b25kZXIgaWYgYGZuZF9jbGVhcmAgd2hpY2ggc2hvdWxkIGNhbGwgYHB1dF9pbmR4X25vZGVgIGZvciBhbGwgbm9kZXMgaW4gYGZuZGAgaXMgZG9pbmcgc29tZXRoaW5nLiBZZXAsIGBmbmRfY2xlYXJgIGRvZXMgaW5kZWVkIGNhbGwgYHB1dF9pbmR4X25vZGVgIGZvciBhbGwgdGhlIG5vZGVzIGluIGBmbmRgLiBTbywgd2h5IGlzIGBpbmR4X2ZpbmRfc29ydGAgY2FsbGluZyBga2ZyZWUobilgIGluc3RlYWQgb2YgYHB1dF9pbmR4X25vZGUobilgPyBNYWtlcyBubyBzZW5zZSEgSSBuZWVkIHRvIHNlZSBpZiBgaW5keF9maW5kX3NvcnRgIGFjdHVhbGx5ICp1c2VzKiBgcHV0X2luZHhfbm9kZWAuIE9rYXksIGl0IGRvZXNuJiMzOTt0IHNlZW0gdG8sIGZyb20gYSBxdWljayBjaGVjay4KCkFscmlnaHQsIGxvb2tpbmcgYXQgdGhlIHBhdGNoLCBJIHNlZSB0aGF0IHRoZSBwYXRjaCAqb25seSogYWRkZWQgYGtmcmVlKG4tJmd0O2luZGV4KTtgIGluIGEgc2luZ2xlIHNwb3Q6CgpgYGBjCiAJCS8qIFBvcCBvbmUgbGV2ZWwuICovCiAJCWlmIChuKSB7CiAJCQlmbmRfcG9wKGZuZCk7CiYjNDM7CQkJa2ZyZWUobi0mZ3Q7aW5kZXgpOwogCQkJa2ZyZWUobik7CiAJCX0KYGBgCgpXYWl0IGEgc2Vjb25kLi4uIHdoZXJlIGlzIHRoZSBjYWxsIHRvIGBuYl9wdXQoJmFtcDtuLSZndDtuYilgPyBJdCYjMzk7cyBtaXNzaW5nIGVudGlyZWx5ISBBbmQgYG4tJmd0O25iYCAqaXMqIGEgYHN0cnVjdCBudGZzX2J1ZmZlcnNgLiBJIG5lZWQgdG8gY2hlY2sgYG5iX3B1dGAgdG8gYmUgc3VyZS4gSXQgbG9va3MgbGlrZSBpdC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgYnVnIGFuZCBhIHBvdGVudGlhbCBtZW1vcnkgbGVhay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTY6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9udGZzMy9udGZzX2ZzLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTkxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExOTE6XHRzdGF0aWMgaW5saW5lIHZvaWQgbmJfcHV0KHN0cnVjdCBudGZzX2J1ZmZlcnMgKm5iKVxuMTE5MjpcdHtcbjExOTM6XHRcdHUzMiBpLCBuYnVmcyA9IG5iLVx1MDAzZW5idWZzO1xuMTE5NDpcdFxuMTE5NTpcdFx0aWYgKCFuYnVmcylcbjExOTY6XHRcdFx0cmV0dXJuO1xuMTE5NzpcdFxuMTE5ODpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbmJ1ZnM7IGkmIzQzOyYjNDM7KVxuMTE5OTpcdFx0XHRwdXRfYmgobmItXHUwMDNlYmhbaV0pO1xuMTIwMDpcdFx0bmItXHUwMDNlbmJ1ZnMgPSAwO1xuMTIwMTpcdH1cbjEyMDI6XHRcbjEyMDM6XHRzdGF0aWMgaW5saW5lIHZvaWQgcHV0X2luZHhfbm9kZShzdHJ1Y3QgaW5keF9ub2RlICppbilcbjEyMDQ6XHR7XG4xMjA1Olx0XHRpZiAoIWluKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjEyMwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIEJ1ZmZlciBIZWFkIExlYWsgaW4gYSBGaWxlc3lzdGVtIE1vZHVsZSoqCgpSaWdodCwgc28gYG5iX3B1dGAgZXhwbGljaXRseSByZWxlYXNlcyBidWZmZXIgaGVhZHMuIFRoYXQgbXVjaCBpcyBjbGVhci4gVGhlIHByb2JsZW0gKmFwcGVhcnMqIHRvIHN0ZW0gZnJvbSBob3cgYGluZHhfZmluZF9zb3J0YCBjbGVhbnMgdXAuIEl0JiMzOTtzIGRvaW5nIGEgc2ltcGxlIGBrZnJlZWAgb2YgdGhlIGBuLSZndDtpbmRleGAgYW5kIGBuYCBzdHJ1Y3R1cmVzLiBJZiBgbmItJmd0O25idWZzYCBpcyBncmVhdGVyIHRoYW4gemVybywgdGhvc2UgYnVmZmVyIGhlYWRzIGFyZSAqbm90KiBiZWluZyByZWxlYXNlZCBpbiBgaW5keF9maW5kX3NvcnRgLCBtZWFuaW5nIHdlIGhhdmUgYSBtZW1vcnkgbGVhayEKCkJ1dCBob2xkIG9uLi4uIEFtIEkgbWlzc2luZyBzb21ldGhpbmc/IERvZXMgYGluZHhfcmVhZGAgZXZlbiBzZXQgYG5iLSZndDtuYnVmc2A/IElmIGBpbmR4X3JlYWRgIG5ldmVyIHNldHMgaXQsIHRoZW4gdGhpcyBpcyBub3QgYW4gaXNzdWUuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxpbmcgZnVuY3Rpb24gaW4gb3JkZXIgdG8gY29uZmlybSB3aGV0aGVyIHRoZXJlIGFyZSBidWZmZXIgaGVhZHMgaW52b2x2ZWQuCgpPa2F5LCBteSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBob3cgYGluZHhfcmVhZF9yYWAgd29ya3MuIFRoYXQgd2lsbCBiZSB3aGVyZSBJIGZvY3VzIG15IGF0dGVudGlvbiBuZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL250ZnMzL2luZGV4LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDk4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwOTg6XHRcdGRvd25fcmVhZChsb2NrKTtcbjEwOTk6XHRcdGVyciA9IG50ZnNfcmVhZF9iaF9yYShzYmksIHJ1biwgdmJvLCBcdTAwMjZpYi1cdTAwM2VyaGRyLCBieXRlcywgXHUwMDI2aW4tXHUwMDNlbmIsIHJhKTtcbjExMDA6XHRcdHVwX3JlYWQobG9jayk7XG4xMTAxOlx0XHRpZiAoIWVycilcbjExMDI6XHRcdFx0Z290byBvaztcbjExMDM6XHRcbjExMDQ6XHRcdGlmIChlcnIgPT0gLUVfTlRGU19GSVhVUClcbjExMDU6XHRcdFx0Z290byBvaztcbjExMDY6XHRcbjExMDc6XHRcdGlmIChlcnIgIT0gLUVOT0VOVClcbjExMDg6XHRcdFx0Z290byBvdXQ7XG4xMTA5Olx0XG4xMTEwOlx0XHRuYW1lID0gXHUwMDI2c19pbmRleF9uYW1lc1tpbmR4LVx1MDAzZXR5cGVdO1xuMTExMTpcdFx0ZG93bl93cml0ZShsb2NrKTtcbjExMTI6XHRcdGVyciA9IGF0dHJfbG9hZF9ydW5zX3JhbmdlKG5pLCBBVFRSX0FMTE9DLCBuYW1lLVx1MDAzZW5hbWUsIG5hbWUtXHUwMDNlbmFtZV9sZW4sXG4xMTEzOlx0XHRcdFx0XHQgICBydW4sIHZibywgdmJvICYjNDM7IGJ5dGVzKTtcbjExMTQ6XHRcdHVwX3dyaXRlKGxvY2spO1xuMTExNTpcdFx0aWYgKGVycilcbjExMTY6XHRcdFx0Z290byBvdXQ7XG4xMTE3Olx0XG4xMTE4Olx0XHRkb3duX3JlYWQobG9jayk7XG4xMTE5Olx0XHRlcnIgPSBudGZzX3JlYWRfYmhfcmEoc2JpLCBydW4sIHZibywgXHUwMDI2aWItXHUwMDNlcmhkciwgYnl0ZXMsIFx1MDAyNmluLVx1MDAzZW5iLCByYSk7XG4xMTIwOlx0XHR1cF9yZWFkKGxvY2spO1xuMTEyMTpcdFx0aWYgKGVyciA9PSAtRV9OVEZTX0ZJWFVQKVxuMTEyMjpcdFx0XHRnb3RvIG9rO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjg1MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDU5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgQnVmZmVyIEhlYWQgTGVhayBpbiB0aGUgTlRGUzMgRmlsZXN5c3RlbSBEcml2ZXIqKgoKT2theSwgc28gYG50ZnNfcmVhZF9iaF9yYWAgZGVmaW5pdGVseSByZWFkcyBidWZmZXIgaGVhZHMgaW50byBgaW4tJmd0O25iYC4gVGhhdCBtZWFucyBgaW4tJmd0O25iYCB3aWxsIGhvbGQgYnVmZmVyIGhlYWRzLiBOb3csIGlmIGBpbmR4X2ZpbmRfc29ydGAgZG9lc24mIzM5O3QgY2FsbCBgbmJfcHV0YCwgd2UmIzM5O3ZlIGdvdCBhIHBvdGVudGlhbCBsZWFrIHJpZ2h0IHRoZXJlLiBCdXQgd2FpdCwgd2h5IGRpZCB0aGUgcGF0Y2ggb25seSBpbmNsdWRlIGBrZnJlZShuLSZndDtpbmRleClgPyBDb3VsZCBpdCBiZSB0aGF0IGBuLSZndDtuYmAgaXMgc29tZXRpbWVzIGVtcHR5PwoKSG9sZCBvbi4uLiBwZXJoYXBzIGBudGZzX3JlYWRfYmhfcmFgIGlzbiYjMzk7dCBldmVuIGNhbGxlZCBpZiBgaW5keF9yZWFkYCBmYWlscz8gQnV0IG5vLCBgbmAgaXMgcG9wcGVkIGZyb20gYGZuZGAgaW4gYGluZHhfZmluZF9zb3J0YC4gSWYgaXQmIzM5O3MgaW4gYGZuZGAsIGl0IHdhcyBwdXNoZWQgdGhlcmUgYnkgYGZuZF9wdXNoYC4gYGZuZF9wdXNoYCBnZXRzIGNhbGxlZCBhZnRlciBgaW5keF9yZWFkYCBzdWNjZWVkcy4gU28sIHdlICprbm93KiBgbmAgd2FzIHJlYWQgc3VjY2Vzc2Z1bGx5LCBhbmQgYGluLSZndDtuYmAgKnNob3VsZCogY29udGFpbiBidWZmZXIgaGVhZHMuCgpBaGEhIElmIGBpbmR4X2ZpbmRfc29ydGAgb25seSBkb2VzIGBrZnJlZShuLSZndDtpbmRleCk7IGtmcmVlKG4pO2AsIHRoYXQmIzM5O3MgYSBkZWZpbml0ZSBidWZmZXIgaGVhZCBsZWFrISBMZXQmIzM5O3MganVzdCBkb3VibGUtY2hlY2sgdGhlIHBhdGNoIHRvIG1ha2Ugc3VyZSB0aGUgYXV0aG9yIGRpZG4mIzM5O3QgaW50ZW5kIHNvbWV0aGluZyBlbHNlLgoKWWVwLCB0aGUgcGF0Y2ggaXMgZXhhY3RseSBhcyBkZXNjcmliZWQsIGV4cGxpY2l0bHkgYWRkaW5nIGBrZnJlZShuLSZndDtpbmRleClgIGFuZCBga2ZyZWUobilgLCB3aGljaCBpcyBzaG93biBiZWxvdzoKCmBgYGRpZmYKQEAgLTEzMjUsNiAmIzQzOzEzMjUsNyBAQCBpbnQgaW5keF9maW5kX3NvcnQoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSwKIAkJLyogUG9wIG9uZSBsZXZlbC4gKi8KIAkJaWYgKG4pIHsKIAkJCWZuZF9wb3AoZm5kKTsKJiM0MzsJCQlrZnJlZShuLSZndDtpbmRleCk7CiAJCQlrZnJlZShuKTsKIAkJfQpgYGAKCldhaXQgYSBzZWNvbmQsIHdoeSBkaWRuJiMzOTt0IHRoZXkgdXNlIGBwdXRfaW5keF9ub2RlKG4pYD8gTGV0JiMzOTtzIHJlZnJlc2ggb3VyIG1lbW9yeSBvbiB3aGF0IHRoYXQgZnVuY3Rpb24gZG9lcy4KCmBgYGMKc3RhdGljIGlubGluZSB2b2lkIHB1dF9pbmR4X25vZGUoc3RydWN0IGluZHhfbm9kZSAqaW4pCnsKCWlmICghaW4pCgkJcmV0dXJuOwoKCWtmcmVlKGluLSZndDtpbmRleCk7CgluYl9wdXQoJmFtcDtpbi0mZ3Q7bmIpOwoJa2ZyZWUoaW4pOwp9CmBgYAoKSWYgYHB1dF9pbmR4X25vZGUobilgIHdhcyB1c2VkLCBpdCB3b3VsZCBmcmVlIGBpbi0mZ3Q7aW5kZXhgLCBwdXQgYGluLSZndDtuYmAsICphbmQqIGZyZWUgYGluYC4gQnV0IGl0IGRvZXNuJiMzOTt0LiBUaGV5IHNwZWNpZmljYWxseSBhZGRlZCBga2ZyZWUobi0mZ3Q7aW5kZXgpYCAqYW5kKiBrZXB0IGBrZnJlZShuKWAuIFNvIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQgaXMgcG9zc2libGUgdGhhdCBgbi0mZ3Q7bmJgIGlzIGFscmVhZHkgcHV0PyBOby4gVGhlIHBhdGNoIGxvb2tzIGJ1Z2d5LCBkb2VzbiYjMzk7dCBpdD8KClJlZ2FyZGxlc3MsIHRoZSBwYXRjaCB0b3VjaGVzIGBmcy9udGZzMy9pbmRleC5jYCwgdGhlIE5URlMzIGZpbGVzeXN0ZW0gZHJpdmVyLiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhaW1lZCBhdCBmaXhpbmcgYSBtZW1vcnkgbGVhayAob2YgYG4tJmd0O2luZGV4YCksIGJ1dCBpdCBsb29rcyBsaWtlIGl0IGRvZXMgaXQgaW5jb3JyZWN0bHkuIElzIHRoaXMgcmVhY2hhYmxlIGNvZGU/IERlZmluaXRlbHkuIGBpbmR4X2ZpbmRfc29ydGAgZ2V0cyBjYWxsZWQgZHVyaW5nIGRpcmVjdG9yeSBvcGVyYXRpb25zIG9yIGluZGV4IGxvb2t1cHMuIE5vdyBJIG5lZWQgdG8gY2hlY2sgd2hlcmUgYGluZHhfZmluZF9zb3J0YCBpcyBjYWxsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE2OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luZHhfZmluZF9zb3J0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmczMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMzL2ZzbnRmcy5jPTIwODE9aW50IG50ZnNfaW5zZXJ0X3NlY3VyaXR5KHN0cnVjdCBudGZzX3NiX2luZm8gKnNiaSxcbi0tXG5mcy9udGZzMy9mc250ZnMuYy0yMTY0LVxuZnMvbnRmczMvZnNudGZzLmM6MjE2NTpcdFx0ZXJyID0gaW5keF9maW5kX3NvcnQoaW5keF9zZGgsIG5pLCByb290X3NkaCxcbmZzL250ZnMzL2ZzbnRmcy5jLTIxNjYtXHRcdFx0XHQgICAgIChzdHJ1Y3QgTlRGU19ERSAqKilcdTAwMjZlLCBmbmRfc2RoKTtcbi0tXG5mcy9udGZzMy9pbmRleC5jPTExNjk9aW50IGluZHhfZmluZChzdHJ1Y3QgbnRmc19pbmRleCAqaW5keCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxuLS1cbmZzL250ZnMzL2luZGV4LmMtMTI0My1cbmZzL250ZnMzL2luZGV4LmM6MTI0NDppbnQgaW5keF9maW5kX3NvcnQoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcbmZzL250ZnMzL2luZGV4LmMtMTI0NS1cdFx0ICAgY29uc3Qgc3RydWN0IElOREVYX1JPT1QgKnJvb3QsIHN0cnVjdCBOVEZTX0RFICoqZW50cnksXG4tLVxuZnMvbnRmczMvbnRmc19mcy5oPTc1NT1pbnQgaW5keF9maW5kKHN0cnVjdCBudGZzX2luZGV4ICppbmR4LCBzdHJ1Y3QgbnRmc19pbm9kZSAqZGlyLFxuLS1cbmZzL250ZnMzL250ZnNfZnMuaC03NTgtXHQgICAgICBzdHJ1Y3QgbnRmc19mbmQgKmZuZCk7XG5mcy9udGZzMy9udGZzX2ZzLmg6NzU5OmludCBpbmR4X2ZpbmRfc29ydChzdHJ1Y3QgbnRmc19pbmRleCAqaW5keCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxuZnMvbnRmczMvbnRmc19mcy5oLTc2MC1cdFx0ICAgY29uc3Qgc3RydWN0IElOREVYX1JPT1QgKnJvb3QsIHN0cnVjdCBOVEZTX0RFICoqZW50cnksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE2OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NTk3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRpdmluZyBpbnRvIHRoZSBgbnRmc19pbnNlcnRfc2VjdXJpdHlgIEZ1bmN0aW9uKioKCkFscmlnaHQsIHRoZSBzeXN0ZW0gaXMgY2FsbGluZyBgbnRmc19pbnNlcnRfc2VjdXJpdHlgLiBUaGF0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGZvciBtYW5hZ2luZyBzZWN1cml0eSBkZXNjcmlwdG9ycyB3aXRoaW4gdGhlIE5URlMgZmlsZSBzeXN0ZW0uIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSBleGFjdGx5IHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aGluIGBudGZzX2luc2VydF9zZWN1cml0eWAuIEl0JiMzOTtzIHRpbWUgdG8gdW5kZXJzdGFuZCBob3cgc2VjdXJpdHkgYXR0cmlidXRlcyBhcmUgYmVpbmcgYXBwbGllZCBhdCB0aGlzIHBvaW50LiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBleGFjdCBsb2dpYyB1c2VkIGFuZCBwb3RlbnRpYWwgcGl0ZmFsbHMgdG8gbG9vayBmb3IgaW4gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE2OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O250ZnNfaW5zZXJ0X3NlY3VyaXR5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmczMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMzL2ZzbnRmcy5jPTE5ODE9aW50IG50ZnNfZ2V0X3NlY3VyaXR5X2J5X2lkKHN0cnVjdCBudGZzX3NiX2luZm8gKnNiaSwgX19sZTMyIHNlY3VyaXR5X2lkLFxuLS1cbmZzL250ZnMzL2ZzbnRmcy5jLTIwNzAtLypcbmZzL250ZnMzL2ZzbnRmcy5jOjIwNzE6ICogbnRmc19pbnNlcnRfc2VjdXJpdHkgLSBJbnNlcnQgc2VjdXJpdHkgZGVzY3JpcHRvciBpbnRvICRTZWN1cmU6OlNEUy5cbmZzL250ZnMzL2ZzbnRmcy5jLTIwNzItICpcbi0tXG5mcy9udGZzMy9mc250ZnMuYy0yMDgwLSAqL1xuZnMvbnRmczMvZnNudGZzLmM6MjA4MTppbnQgbnRmc19pbnNlcnRfc2VjdXJpdHkoc3RydWN0IG50ZnNfc2JfaW5mbyAqc2JpLFxuZnMvbnRmczMvZnNudGZzLmMtMjA4Mi1cdFx0XHQgY29uc3Qgc3RydWN0IFNFQ1VSSVRZX0RFU0NSSVBUT1JfUkVMQVRJVkUgKnNkLFxuLS1cbmZzL250ZnMzL2lub2RlLmM9MTE4Mz1pbnQgbnRmc19jcmVhdGVfaW5vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL250ZnMzL2lub2RlLmMtMTMzNS1cdFx0XHRpZiAoc2VjdXJpdHlfaWQgPT0gU0VDVVJJVFlfSURfSU5WQUxJRCBcdTAwMjZcdTAwMjZcbmZzL250ZnMzL2lub2RlLmM6MTMzNjpcdFx0XHQgICAgIW50ZnNfaW5zZXJ0X3NlY3VyaXR5KHNiaSwgc2QsIHNkX3NpemUsXG5mcy9udGZzMy9pbm9kZS5jLTEzMzctXHRcdFx0XHRcdFx0ICBcdTAwMjZzZWN1cml0eV9pZCwgTlVMTCkpXG4tLVxuZnMvbnRmczMvbnRmc19mcy5oPTcxMD1pbnQgbnRmc19nZXRfc2VjdXJpdHlfYnlfaWQoc3RydWN0IG50ZnNfc2JfaW5mbyAqc2JpLCBfX2xlMzIgc2VjdXJpdHlfaWQsXG4tLVxuZnMvbnRmczMvbnRmc19mcy5oLTcxMi1cdFx0XHQgICAgc2l6ZV90ICpzaXplKTtcbmZzL250ZnMzL250ZnNfZnMuaDo3MTM6aW50IG50ZnNfaW5zZXJ0X3NlY3VyaXR5KHN0cnVjdCBudGZzX3NiX2luZm8gKnNiaSxcbmZzL250ZnMzL250ZnNfZnMuaC03MTQtXHRcdFx0IGNvbnN0IHN0cnVjdCBTRUNVUklUWV9ERVNDUklQVE9SX1JFTEFUSVZFICpzZCxcbi0tXG5mcy9udGZzMy94YXR0ci5jPTg2Mj1zdGF0aWMgbm9pbmxpbmUgaW50IG50ZnNfc2V0eGF0dHIoY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsXG4tLVxuZnMvbnRmczMveGF0dHIuYy05NDUtXG5mcy9udGZzMy94YXR0ci5jOjk0NjpcdFx0ZXJyID0gbnRmc19pbnNlcnRfc2VjdXJpdHkobmktXHUwMDNlbWkuc2JpLCB2YWx1ZSwgc2l6ZSxcbmZzL250ZnMzL3hhdHRyLmMtOTQ3LVx0XHRcdFx0XHQgICBcdTAwMjZzZWN1cml0eV9pZCwgXHUwMDI2aW5zZXJ0ZWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQwMQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqRGVidWdnaW5nIHRoZSBOVEZTMyBNb2R1bGUqKgoKUmlnaHQsIHNvIHRoaXMgaXMgdHJpZ2dlcmVkIHdpdGhpbiBgbnRmc19jcmVhdGVfaW5vZGVgIGFuZCBgbnRmc19zZXR4YXR0cmAuIEdvb2QsIHRoYXQgbmFycm93cyBkb3duIHRoZSBzY29wZSBjb25zaWRlcmFibHkuIEkgY2FuIHNlZSB0aGF0IHRoaXMgaXMgZGVmaW5pdGVseSBhbiBhY3RpdmUgY29kZSBwYXRoOyBpdCYjMzk7cyByZWFjaGFibGUgYW5kIHdvcmtpbmcgYXMgZXhwZWN0ZWQgd2l0aGluIHRoZSBmaWxlIHN5c3RlbSBvcGVyYXRpb25zLiBUaGUgcGF0Y2ggYWltcyB0byBhZGRyZXNzIGEgbWVtb3J5IGxlYWsgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGluZHhfZmluZF9zb3J0YCBmdW5jdGlvbi4KCk5vdywgdGhhdCBuYW1lIHJpbmdzIGEgYmVsbC4uLiBgaW5keF9maW5kX3NvcnRgLiBBbmQgaXQganVzdCBjbGlja2VkLCBgaW5keF9maW5kX3NvcnRgIGlzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nISBBIGZ1bmN0aW9uIHdpdGggJiMzNDtzb3J0JiMzNDsgaW4gaXRzIG5hbWUgc3VnZ2VzdHMgZGF0YSBtYW5pcHVsYXRpb24sIGFuZCB0aG9zZSBhcmUgb2Z0ZW4gcHJvbmUgdG8gb2ZmLWJ5LW9uZSBlcnJvcnMgb3IgaW5jb3JyZWN0IG1lbW9yeSBoYW5kbGluZywgd2hpY2ggaXMgYSBncmVhdCBwbGFjZSB0byBzdGFydCBsb29raW5nIHdoZW4gd3JpdGluZyBhIGZ1enplci4gSXQmIzM5O3MgdGltZSB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBOVEZTMyB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IGV2ZXJ5dGhpbmcgZW5hYmxlZCBmb3IgZWZmZWN0aXZlIHRlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE2OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOVEZTM19GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzMy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9udGZzMy9LY29uZmlnOjI6Y29uZmlnIE5URlMzX0ZTXG5mcy9udGZzMy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtOVEZTIFJlYWQtV3JpdGUgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuLS1cbmZzL250ZnMzL0tjb25maWc9Mjg9Y29uZmlnIE5URlMzX0xaWF9YUFJFU1Ncbi0tXG5mcy9udGZzMy9LY29uZmlnLTM3LVxuZnMvbnRmczMvS2NvbmZpZzozODpjb25maWcgTlRGUzNfRlNfUE9TSVhfQUNMXG5mcy9udGZzMy9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtOVEZTIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE2OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5ODg1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBOVEZTMyBDb25maWd1cmF0aW9uIE9wdGlvbnMgZm9yIFhhdHRyIGFuZCBTZWN1cml0eSBEZXNjcmlwdG9yIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYE5URlMzX0ZTYCBjb25maWcsIHRoYXQmIzM5O3MgdGhlIGJhc2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBleHRlbmRlZCBhdHRyaWJ1dGVzICh4YXR0cikgYW5kIHNlY3VyaXR5IGRlc2NyaXB0b3JzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgTlRGUzMgZmlsZXN5c3RlbS4gVGhlIGtleSBoZXJlIGlzIHRvIGRldGVybWluZSB3aGljaCBjb25maWd1cmF0aW9ucyBpbmZsdWVuY2UgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5LgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGFyZSB0aGVyZSAqYW55KiBvdGhlciBjb25maWcgb3B0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50PyBUaGUgZmlyc3QgdGhhdCBqdW1wcyBvdXQgaXMgYE5URlMzX0ZTX1BPU0lYX0FDTGAuIFRoYXQgY291bGQgZGVmaW5pdGVseSBiZSB0aWVkIGluOyBJIG5lZWQgdG8gc2VlIGlmIGl0IHBsYXlzIGFueSByb2xlIGluIGhvdyB4YXR0ciBvciBzZWN1cml0eSBkZXNjcmlwdG9ycyBhcmUgbWFuYWdlZCwgc3BlY2lmaWNhbGx5LgoKTm93LCBhIGNydWNpYWwgY29ubmVjdGlvbjogSSByZW1lbWJlciBzZWVpbmcgYG50ZnNfaW5zZXJ0X3NlY3VyaXR5YCBiZWluZyBjYWxsZWQgZnJvbSBgbnRmc19zZXR4YXR0cmAuIFRoYXQmIzM5O3MgYSBzdHJvbmcgaW5kaWNhdGlvbiB0aGF0IGFueSBjb25maWcgYWZmZWN0aW5nIGBudGZzX3NldHhhdHRyYCB3aWxsIGhhdmUgYW4gaW1wYWN0LgoKUmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLiBJJiMzOTtsbCBjaGVjayBgZnMvbnRmczMveGF0dHIuY2AgYmVjYXVzZSB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRoZSBgbnRmc19zZXR4YXR0cmAgZnVuY3Rpb24gdG8gYmUgZGVmaW5lZC4gSSB3YW50IHRvIHNlZSBpZiBgbnRmc19zZXR4YXR0cmAgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCBvciBndWFyZGVkIGJ5IGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBjbGVhcmVzdCBwaWN0dXJlIG9mIGhvdyB0aGVzZSBjb25maWdzIGludGVyYWN0IHdpdGggeGF0dHIgYW5kIHNlY3VyaXR5IGRlc2NyaXB0b3IgbWFuYWdlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTY6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnRmc19zZXR4YXR0ciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMzL3hhdHRyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmczMveGF0dHIuYz04NTM9c3RhdGljIGJvb2wgbnRmc19pc19yZXNlcnZlZF9seGF0dHIoY29uc3QgY2hhciAqbmFtZSlcbi0tXG5mcy9udGZzMy94YXR0ci5jLTg1OS0vKlxuZnMvbnRmczMveGF0dHIuYzo4NjA6ICogbnRmc19zZXR4YXR0ciAtIGlub2RlX29wZXJhdGlvbnM6OnNldHhhdHRyXG5mcy9udGZzMy94YXR0ci5jLTg2MS0gKi9cbmZzL250ZnMzL3hhdHRyLmM6ODYyOnN0YXRpYyBub2lubGluZSBpbnQgbnRmc19zZXR4YXR0cihjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlcixcbmZzL250ZnMzL3hhdHRyLmMtODYzLVx0XHRcdFx0ICBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGUsXG4tLVxuZnMvbnRmczMveGF0dHIuYz0xMDYxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBudGZzX290aGVyX3hhdHRyX2hhbmRsZXIgPSB7XG4tLVxuZnMvbnRmczMveGF0dHIuYy0xMDYzLVx0LmdldFx0PSBudGZzX2dldHhhdHRyLFxuZnMvbnRmczMveGF0dHIuYzoxMDY0Olx0LnNldFx0PSBudGZzX3NldHhhdHRyLFxuZnMvbnRmczMveGF0dHIuYy0xMDY1LVx0Lmxpc3RcdD0gbnRmc194YXR0cl91c2VyX2xpc3QsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE2OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjIxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYnJlYWtkb3duIG9mIHdoYXQmIzM5O3MgZ29pbmcgb24sIHRoaW5raW5nIHRocm91Z2ggdGhpcyBsaWtlIEkgd291bGQgaW4gbXkgb3duIHdvcms6CgoqKkludmVzdGlnYXRpbmcgdGhlIE5URlMzIEZpbGVzeXN0ZW0gQ29uZmlndXJhdGlvbiBSZXF1aXJlbWVudCoqCgpBbHJpZ2h0LCBzbyB0aGUgY2x1ZSBoZXJlIGlzIHRoYXQgdGhlIGZ1bmN0aW9uIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBpc24mIzM5O3QgcHJvdGVjdGVkIGJ5IGEgc3BlY2lmaWMsIGRldGFpbGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9uIOKAkyBpdCYjMzk7cyBqdXN0IHRpZWQgdG8gYE5URlMzX0ZTYC4gVGhhdCB0ZWxscyBtZSAqdGhhdCogaXMgdGhlIHJlcXVpcmVkIGNvbmZpZy4gUHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBzbyBmYXIuCgpOb3csIGxldCYjMzk7cyBjaXJjbGUgYmFjayB0byBgaW5keF9maW5kX3NvcnRgLiBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmc6IGlzIHRoaXMgYSBzdGF0aWMgZnVuY3Rpb24sIG9yIGlzIGl0IHZpc2libGUgb3V0c2lkZSBvZiBpdHMgaW1tZWRpYXRlIHNjb3BlPyBRdWlja2x5LCBJIHNlZSB0aGF0IGl0IGlzIGV4cG9ydGVkIG9yIGF0IGxlYXN0IG5vbi1zdGF0aWMuCgpPa2F5LCBsZXQmIzM5O3MgZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZS4gVGhlIGZpbGUgYGZzL250ZnMzL2luZGV4LmNgIGlzIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gZXhhbWluZSB0aGUgY29kZSBmb3IgYGluZHhfZmluZF9zb3J0YC4gSSYjMzk7bGwgb3BlbiB0aGF0IHVwIGFuZCB0YWtlIGEgbG9vay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTY6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IGluZHhfZmluZF9zb3J0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmczMvaW5kZXguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzMy9pbmRleC5jPTExNjk9aW50IGluZHhfZmluZChzdHJ1Y3QgbnRmc19pbmRleCAqaW5keCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxuLS1cbmZzL250ZnMzL2luZGV4LmMtMTI0My1cbmZzL250ZnMzL2luZGV4LmM6MTI0NDppbnQgaW5keF9maW5kX3NvcnQoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcbmZzL250ZnMzL2luZGV4LmMtMTI0NS1cdFx0ICAgY29uc3Qgc3RydWN0IElOREVYX1JPT1QgKnJvb3QsIHN0cnVjdCBOVEZTX0RFICoqZW50cnksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE2OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMDg5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgZm9yIEVuaGFuY2VtZW50cyBpbiBGb2N1c1N5bWJvbHMqKgoKQWxyaWdodCwgc28gdGhlIGluaXRpYWwgYXNzZXNzbWVudCBpcyBjb25maXJtZWQ6IGl0JiMzOTtzIG5vdCBhIHN0YXRpYyBpbXBsZW1lbnRhdGlvbi4gVGhhdCBvcGVucyB1cCBzb21lIGludGVyZXN0aW5nIHBvc3NpYmlsaXRpZXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0NhbiB3ZSBsZXZlcmFnZSB0aGlzIG5vbi1zdGF0aWMgbmF0dXJlPyYjMzQ7IFRoZSBvYnZpb3VzIG5leHQgc3RlcCBpcyB0byBjb25zaWRlciBhZGRpbmcgYGluZHhfZmluZF9zb3J0YCBhbmQgYG50ZnNfaW5zZXJ0X3NlY3VyaXR5YCB0byBgRm9jdXNTeW1ib2xzYC4gVGhhdCBmZWVscyBsaWtlIGEgbG9naWNhbCBwcm9ncmVzc2lvbiwgcG90ZW50aWFsbHkgaW1wcm92aW5nIGl0cyBjYXBhYmlsaXRpZXMuIEJlZm9yZSBJIGdldCB0b28gZmFyIGRvd24gdGhhdCBwYXRoLCBJIG5lZWQgdG8gdmVyaWZ5IGEgY3JpdGljYWwgYXNzdW1wdGlvbiwgc3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgaWYgYG50ZnNfaW5zZXJ0X3NlY3VyaXR5YCBpcyBhbHNvICpub24tc3RhdGljKi4gSWYgaXQgKmlzKiBzdGF0aWMsIHRoZW4gdGhpcyB3aG9sZSBsaW5lIG9mIHRoaW5raW5nIGlzIHByb2JhYmx5IHVucHJvZHVjdGl2ZS4gSSYjMzk7bSBnb2luZyB0byBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBjb25maXJtIGl0cyBpbXBsZW1lbnRhdGlvbiBiZWZvcmUgcHJvY2VlZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTY6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IG50ZnNfaW5zZXJ0X3NlY3VyaXR5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmczMvZnNudGZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmczMvZnNudGZzLmM9MTk4MT1pbnQgbnRmc19nZXRfc2VjdXJpdHlfYnlfaWQoc3RydWN0IG50ZnNfc2JfaW5mbyAqc2JpLCBfX2xlMzIgc2VjdXJpdHlfaWQsXG4tLVxuZnMvbnRmczMvZnNudGZzLmMtMjA4MC0gKi9cbmZzL250ZnMzL2ZzbnRmcy5jOjIwODE6aW50IG50ZnNfaW5zZXJ0X3NlY3VyaXR5KHN0cnVjdCBudGZzX3NiX2luZm8gKnNiaSxcbmZzL250ZnMzL2ZzbnRmcy5jLTIwODItXHRcdFx0IGNvbnN0IHN0cnVjdCBTRUNVUklUWV9ERVNDUklQVE9SX1JFTEFUSVZFICpzZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTY6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE1MTMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRoaXMgUGF0Y2g6IEEgRnVuY3Rpb25hbCBDaGFuZ2UgV29ydGggRnV6emluZyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGNsZWFybHkgdGFyZ2V0cyBub24tc3RhdGljIGNvZGUg4oCTIHRoYXQmIzM5O3MgdGhlIGZpcnN0IHRoaW5nIEkgbm90aWNlZC4gTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBhbmQgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgYmVpbmcgbW9kaWZpZWQuIEl0IGxvb2tzIGxpa2UgdGhlIHByaW1hcnkgZnVuY3Rpb24gdW5kZXIgc2NydXRpbnkgaXMgYGluZHhfZmluZF9zb3J0YC4gQW5kIHllcywgdGhlIHBhdGNoIGV4cGxpY2l0bHkgYWRkcmVzc2VzIGEgbWVtb3J5IGxlYWsgaW4gYGluZHhfZmluZF9zb3J0YCByZWxhdGVkIHRvIGBuLSZndDtpbmRleGAuIFNwZWNpZmljYWxseSwgaXQgYXBwZWFycyB0aGUgZml4IGludm9sdmVzIGZyZWVpbmcgYG4tJmd0O2luZGV4YCBiZWZvcmUgYG5gIHdoZW4gYSBsZXZlbCBpcyBwb3BwZWQgZnJvbSB0aGUgZmluZCBzdGF0ZS4KClRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBhIGNvcmUgYXNwZWN0IG9mIGhvdyB0aGUgZmlsZXN5c3RlbSBoYW5kbGVzIGluZGV4IGxvb2t1cHMuIEdpdmVuIHRoYXQsIGFuZCBjb25zaWRlcmluZyBpdCBpbnZvbHZlcyByZWFjaGFibGUgY29yZSBmaWxlc3lzdGVtIGxvZ2ljIOKAkyBzcGVjaWZpY2FsbHkgd2hlbiB0aGUgZnVuY3Rpb24gaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHNlY3VyaXR5IGRlc2NyaXB0b3IgaW5zZXJ0aW9uIOKAkyBhbmQgY29uc2lkZXJpbmcgYE5URlMzX0ZTYCBpcyBlbmFibGVkLCBJJiMzOTttIGdvaW5nIHRvIGZsYWcgdGhpcyBhcyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy4gSSBtZWFuLCBtZW1vcnkgbGVha3MgaW4gaW5kZXggbWFuYWdlbWVudD8gVGhhdCYjMzk7cyBwcmltZSBmdXp6aW5nIHRlcnJpdG9yeS4gSnVzdCB0byBiZSBjb21wbGV0ZWx5IHN1cmUsIEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0byBtYWtlIHN1cmUgYGluZHhfZmluZF9zb3J0YCBpcyB0aGUgKm9ubHkqIGZ1bmN0aW9uIGltcGFjdGVkLCBidXQgSSYjMzk7bSBmZWVsaW5nIGNvbmZpZGVudCBhYm91dCB0aGlzIG9uZS4gTXkgY2FsbCBpcyBgV29ydGhGdXp6aW5nPXRydWVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrZnJlZVxcKG4tXHUwMDNlaW5kZXhcXCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzMy9pbmRleC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMzL2luZGV4LmM9MTI0ND1pbnQgaW5keF9maW5kX3NvcnQoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcbi0tXG5mcy9udGZzMy9pbmRleC5jLTEzMjctXHRcdFx0Zm5kX3BvcChmbmQpO1xuZnMvbnRmczMvaW5kZXguYzoxMzI4Olx0XHRcdGtmcmVlKG4tXHUwMDNlaW5kZXgpO1xuZnMvbnRmczMvaW5kZXguYy0xMzI5LVx0XHRcdGtmcmVlKG4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjEzMQoJCQkJCQkJb3V0cHV0OiAxMTUKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIE1vZGlmaWNhdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgZm9jdXMgaXMgcmVhbGx5IG9uIGBpbmR4X2ZpbmRfc29ydGAuIFRoYXQmIzM5O3MgdGhlIG9ubHkgZnVuY3Rpb24gdW5kZXJnb2luZyBhIGNoYW5nZS4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3csIGtlZXBzIHRoZSBzY29wZSBvZiBpbnZlc3RpZ2F0aW9uIHRpZ2h0ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCYjMzk7cyBiZWluZyBkb25lIHdpdGhpbiBgaW5keF9maW5kX3NvcnRgLCBidXQgYXQgbGVhc3QgSSYjMzk7bSBub3QgZGVhbGluZyB3aXRoIGEgcmlwcGxlIGVmZmVjdCBhY3Jvc3MgbXVsdGlwbGUgbW9kdWxlcy4gSSBzaG91bGQgcHJvYmFibHkgbGFiZWwgdGhlIG91dHB1dCBmcm9tIHRoZSBmdW5jdGlvbiBhcyBgc2V0LXJlc3VsdHNgLCBvciBzb21ldGhpbmcgZXF1YWxseSBkZXNjcmlwdGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTY6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05URlMzX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW5keF9maW5kX3NvcnQmIzM0OywKICAgICYjMzQ7bnRmc19pbnNlcnRfc2VjdXJpdHkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiBgaW5keF9maW5kX3NvcnRgIHdpdGhpbiB0aGUgTlRGUzMgZmlsZXN5c3RlbSBkcml2ZXIgYnkgZnJlZWluZyBgbi1cdTAwM2VpbmRleGAgYmVmb3JlIGBuYCB3aGVuIHBvcHBpbmcgYSBsZXZlbCBmcm9tIHRoZSBmaW5kIHN0YXRlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgZmlsZXN5c3RlbSBsb2dpYywgc3BlY2lmaWNhbGx5IGR1cmluZyBpbmRleCBsb29rdXBzIGFuZCBzZWN1cml0eSBkZXNjcmlwdG9yIGluc2VydGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlRGUzNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpbmR4X2ZpbmRfc29ydCYjMzQ7LAogICAgJiMzNDtudGZzX2luc2VydF9zZWN1cml0eSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIGBpbmR4X2ZpbmRfc29ydGAgd2l0aGluIHRoZSBOVEZTMyBmaWxlc3lzdGVtIGRyaXZlciBieSBmcmVlaW5nIGBuLVx1MDAzZWluZGV4YCBiZWZvcmUgYG5gIHdoZW4gcG9wcGluZyBhIGxldmVsIGZyb20gdGhlIGZpbmQgc3RhdGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBmaWxlc3lzdGVtIGxvZ2ljLCBzcGVjaWZpY2FsbHkgZHVyaW5nIGluZGV4IGxvb2t1cHMgYW5kIHNlY3VyaXR5IGRlc2NyaXB0b3IgaW5zZXJ0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjVUMTY6NDI6NTQuNjAxNTAwOTM5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwMTg1OTI3NDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5URlMzX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW5keF9maW5kX3NvcnRcIixcbiAgICBcIm50ZnNfaW5zZXJ0X3NlY3VyaXR5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiBgaW5keF9maW5kX3NvcnRgIHdpdGhpbiB0aGUgTlRGUzMgZmlsZXN5c3RlbSBkcml2ZXIgYnkgZnJlZWluZyBgbi1cXHUwMDNlaW5kZXhgIGJlZm9yZSBgbmAgd2hlbiBwb3BwaW5nIGEgbGV2ZWwgZnJvbSB0aGUgZmluZCBzdGF0ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGZpbGVzeXN0ZW0gbG9naWMsIHNwZWNpZmljYWxseSBkdXJpbmcgaW5kZXggbG9va3VwcyBhbmQgc2VjdXJpdHkgZGVzY3JpcHRvciBpbnNlcnRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE2OjQyOjU0LjYwMTUwODAwOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc1NjUwNTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYWMyNjBhYThlODFjNWZjMTgzMDc0YTFiZmI5NTM0MTE1NTA1MTgzMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCAyNSAxNjo0Mjo1MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9udGZzMy9pbmRleC5jIGIvZnMvbnRmczMvaW5kZXguY1xcbmluZGV4IDRhZmFjZmM2ZmY4OTMwLi42ODk3MTJkMzQ2M2Q0MSAxMDA2NDRcXG4tLS0gYS9mcy9udGZzMy9pbmRleC5jXFxuKysrIGIvZnMvbnRmczMvaW5kZXguY1xcbkBAIC0xMzI1LDYgKzEzMjUsNyBAQCBpbnQgaW5keF9maW5kX3NvcnQoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcXG4gXFx0XFx0LyogUG9wIG9uZSBsZXZlbC4gKi9cXG4gXFx0XFx0aWYgKG4pIHtcXG4gXFx0XFx0XFx0Zm5kX3BvcChmbmQpO1xcbitcXHRcXHRcXHRrZnJlZShuLVxcdTAwM2VpbmRleCk7XFxuIFxcdFxcdFxcdGtmcmVlKG4pO1xcbiBcXHRcXHR9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNjo0Mjo1NS4yODAwOTkyMzNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDk1MDczMTUyMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlRGUzNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpbmR4X2ZpbmRfc29ydFwiLFxuICAgIFwibnRmc19pbnNlcnRfc2VjdXJpdHlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIGBpbmR4X2ZpbmRfc29ydGAgd2l0aGluIHRoZSBOVEZTMyBmaWxlc3lzdGVtIGRyaXZlciBieSBmcmVlaW5nIGBuLVxcdTAwM2VpbmRleGAgYmVmb3JlIGBuYCB3aGVuIHBvcHBpbmcgYSBsZXZlbCBmcm9tIHRoZSBmaW5kIHN0YXRlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgZmlsZXN5c3RlbSBsb2dpYywgc3BlY2lmaWNhbGx5IGR1cmluZyBpbmRleCBsb29rdXBzIGFuZCBzZWN1cml0eSBkZXNjcmlwdG9yIGluc2VydGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYWMyNjBhYThlODFjNWZjMTgzMDc0YTFiZmI5NTM0MTE1NTA1MTgzMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDI1IDE2OjQyOjUyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvbnRmczMvaW5kZXguYyBiL2ZzL250ZnMzL2luZGV4LmNcbmluZGV4IDRhZmFjZmM2ZmY4OTMwLi42ODk3MTJkMzQ2M2Q0MSAxMDA2NDRcbi0tLSBhL2ZzL250ZnMzL2luZGV4LmNcbisrKyBiL2ZzL250ZnMzL2luZGV4LmNcbkBAIC0xMzI1LDYgKzEzMjUsNyBAQCBpbnQgaW5keF9maW5kX3NvcnQoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcbiBcdFx0LyogUG9wIG9uZSBsZXZlbC4gKi9cbiBcdFx0aWYgKG4pIHtcbiBcdFx0XHRmbmRfcG9wKGZuZCk7XG4rXHRcdFx0a2ZyZWUobi1cdTAwM2VpbmRleCk7XG4gXHRcdFx0a2ZyZWUobik7XG4gXHRcdH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE2OjQyOjU1LjI4MDEwMjA0M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NjI2Mzg1NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOVEZTMyBJbmRleCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGFyZ2V0aW5nIGBmcy9udGZzMy9pbmRleC5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgbW9kaWZpY2F0aW9uIGluIGBpbmR4X2ZpbmRfc29ydGAgY2F1Z2h0IG15IGV5ZS4gSXQgYXBwZWFycyB0aGV5J3ZlIGFkZGVkIGBrZnJlZShuLVx1MDAzZWluZGV4KTtgIHJpZ2h0IGJlZm9yZSB0aGUgYGtmcmVlKG4pO2AgY2FsbC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkFoLCB0aGV5J3JlIGxpa2VseSBkZWFsaW5nIHdpdGggYSBtZW1vcnkgbGVhayBvciBhIGRhbmdsaW5nIHBvaW50ZXIgaXNzdWUuXCIgVGhpcyBpbXBsaWVzIHRoYXQgYG4tXHUwMDNlaW5kZXhgIGlzIGxpa2VseSBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBidWZmZXIgd2l0aGluIHRoZSBgbmAgc3RydWN0dXJlIGFuZCBpcyBiZWluZyB1c2VkIHRvIHN0b3JlIGluZGV4IGRhdGEuIFRoZSBpbnRlbnQgaGVyZSBpcyB0byBleHBsaWNpdGx5IGRlYWxsb2NhdGUgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIGluZGV4IGRhdGEgYmVmb3JlIGZyZWVpbmcgdGhlIG5vZGUgaXRzZWxmLCB3aGljaCBpcyBzdGFuZGFyZCBwcmFjdGljZSB0byBwcmV2ZW50IG1lbW9yeSBjb3JydXB0aW9uLiBJIG5lZWQgdG8gZGl2ZSBkZWVwZXIgaW50byBgaW5keF9maW5kX3NvcnRgIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2UgYmV0dGVyLCB3aGF0IGBuYCBhbmQgYG4tXHUwMDNlaW5kZXhgIGFyZSwgYW5kIHdoeSB0aGlzIGFkZGl0aW9uYWwgYGtmcmVlYCB3YXMgZGVlbWVkIG5lY2Vzc2FyeS4gVGhpcyBjb3VsZCBiZSBhIGdvb2QgZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxOSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTY6NDI6NTguNzQyNzQ0MDdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI4Mzc2MDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluZHhfZmluZF9zb3J0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMzL2luZGV4LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmczMvaW5kZXguYz0xMTY5PWludCBpbmR4X2ZpbmQoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcXG4tLVxcbmZzL250ZnMzL2luZGV4LmMtMTI0My1cXG5mcy9udGZzMy9pbmRleC5jOjEyNDQ6aW50IGluZHhfZmluZF9zb3J0KHN0cnVjdCBudGZzX2luZGV4ICppbmR4LCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXFxuZnMvbnRmczMvaW5kZXguYy0xMjQ1LVxcdFxcdCAgIGNvbnN0IHN0cnVjdCBJTkRFWF9ST09UICpyb290LCBzdHJ1Y3QgTlRGU19ERSAqKmVudHJ5LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNjo0Mjo1OS4zNzExMjYyNTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzkxMTg0NzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgYGluZHhfZmluZF9zb3J0YCBmdW5jdGlvbiwga2VlcGluZyBpbiBtaW5kIEknbSBzdGVlcGVkIGluIHRoaXMgc29ydCBvZiB3b3JrOlxuXG4qKkRlY29uc3RydWN0aW5nIGBpbmR4X2ZpbmRfc29ydGAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBpbmR4X2ZpbmRfc29ydGAgd2l0aGluIGBmcy9udGZzMy9pbmRleC5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gaW5kZXhpbmcsIHBhcnRpY3VsYXJseSBob3cgaXQgaGFuZGxlcyB0aGUgY3J1Y2lhbCB0YXNrIG9mIHNvcnRpbmcgd2l0aGluIHRoZSBOVEZTMyBmaWxlIHN5c3RlbS4gSSBhbnRpY2lwYXRlIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkIGluIHRlcm1zIG9mIGluZGV4IG1hbmFnZW1lbnQ6IGxpa2VseSBpbnZvbHZlcyBjb21wYXJpc29ucyBvZiBrZXkgYXR0cmlidXRlcywgcGVyaGFwcyBhIGJpbmFyeSBzZWFyY2ggZm9yIGVmZmljaWVuY3ksIGFuZCBvZiBjb3Vyc2UsIHByb3BlciBoYW5kbGluZyBvZiBjb2xsaXNpb25zIG9yIGR1cGxpY2F0ZSBlbnRyaWVzIHdpdGhpbiB0aGUgaW5kZXggc3RydWN0dXJlcy4gSSBpbWFnaW5lIGl0J3MgY3J1Y2lhbCBmb3IgbG9va3VwcywgaW5zZXJ0aW9ucywgYW5kIGRlbGV0aW9ucy4gSSBzaG91bGQgYmUgYWJsZSB0byBkZWR1Y2UgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzLCBwcm9iYWJseSBCLXRyZWVzIG9yIHNpbWlsYXIgYmFsYW5jZWQgc3RydWN0dXJlcywgYnkgdHJhY2luZyBpdHMgZXhlY3V0aW9uIGZsb3cuIEkgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhpcyBmdW5jdGlvbiBhcyBpdCBpcyBrZXkgdG8gb3ZlcmFsbCBmaWxlc3lzdGVtIHN0YWJpbGl0eS4gSSdtIGtlZW4gdG8gc2VlIGlmIGl0IG1ha2VzIHVzZSBvZiBhbnkgb3B0aW1pemF0aW9ucywgbWF5YmUgY2FjaGluZyB0ZWNobmlxdWVzLCBvciBkZWZlcnJlZCB3cml0ZXMuIEkgYW50aWNpcGF0ZSBpdCB3aWxsIGJlIGludm9sdmVkIHdpdGggbWVtb3J5IGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiB0byBtYW5hZ2UgdGhlIGluZGV4IGRhdGEuIExldCdzIHNlZSBob3cgd2VsbCBpdCdzIHdyaXR0ZW4gYW5kIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBib3R0bGVuZWNrcyBvciBvcHBvcnR1bml0aWVzIGZvciBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NzMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNjo0MzowMi43NjIzMTM3ODhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODE0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvbnRmczMvaW5kZXguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjQ0LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI0NDpcXHRpbnQgaW5keF9maW5kX3NvcnQoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcXG4xMjQ1OlxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBJTkRFWF9ST09UICpyb290LCBzdHJ1Y3QgTlRGU19ERSAqKmVudHJ5LFxcbjEyNDY6XFx0XFx0XFx0ICAgc3RydWN0IG50ZnNfZm5kICpmbmQpXFxuMTI0NzpcXHR7XFxuMTI0ODpcXHRcXHRpbnQgZXJyO1xcbjEyNDk6XFx0XFx0c3RydWN0IGluZHhfbm9kZSAqbiA9IE5VTEw7XFxuMTI1MDpcXHRcXHRzdHJ1Y3QgTlRGU19ERSAqZTtcXG4xMjUxOlxcdFxcdHNpemVfdCBpdGVyID0gMDtcXG4xMjUyOlxcdFxcdGludCBsZXZlbCA9IGZuZC1cXHUwMDNlbGV2ZWw7XFxuMTI1MzpcXHRcXG4xMjU0OlxcdFxcdGlmICghKmVudHJ5KSB7XFxuMTI1NTpcXHRcXHRcXHQvKiBTdGFydCBmaW5kLiAqL1xcbjEyNTY6XFx0XFx0XFx0ZSA9IGhkcl9maXJzdF9kZShcXHUwMDI2cm9vdC1cXHUwMDNlaWhkcik7XFxuMTI1NzpcXHRcXHRcXHRpZiAoIWUpXFxuMTI1ODpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4xMjU5OlxcdFxcdFxcdGZuZF9jbGVhcihmbmQpO1xcbjEyNjA6XFx0XFx0XFx0Zm5kLVxcdTAwM2Vyb290X2RlID0gZTtcXG4xMjYxOlxcdFxcdH0gZWxzZSBpZiAoIWxldmVsKSB7XFxuMTI2MjpcXHRcXHRcXHRpZiAoZGVfaXNfbGFzdChmbmQtXFx1MDAzZXJvb3RfZGUpKSB7XFxuMTI2MzpcXHRcXHRcXHRcXHQqZW50cnkgPSBOVUxMO1xcbjEyNjQ6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTI2NTpcXHRcXHRcXHR9XFxuMTI2NjpcXHRcXG4xMjY3OlxcdFxcdFxcdGUgPSBoZHJfbmV4dF9kZShcXHUwMDI2cm9vdC1cXHUwMDNlaWhkciwgZm5kLVxcdTAwM2Vyb290X2RlKTtcXG4xMjY4OlxcdFxcdFxcdGlmICghZSlcXG4xMjY5OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEyNzA6XFx0XFx0XFx0Zm5kLVxcdTAwM2Vyb290X2RlID0gZTtcXG4xMjcxOlxcdFxcdH0gZWxzZSB7XFxuMTI3MjpcXHRcXHRcXHRuID0gZm5kLVxcdTAwM2Vub2Rlc1tsZXZlbCAtIDFdO1xcbjEyNzM6XFx0XFx0XFx0ZSA9IGZuZC1cXHUwMDNlZGVbbGV2ZWwgLSAxXTtcXG4xMjc0OlxcdFxcbjEyNzU6XFx0XFx0XFx0aWYgKGRlX2lzX2xhc3QoZSkpXFxuMTI3NjpcXHRcXHRcXHRcXHRnb3RvIHBvcF9sZXZlbDtcXG4xMjc3OlxcdFxcbjEyNzg6XFx0XFx0XFx0ZSA9IGhkcl9uZXh0X2RlKFxcdTAwMjZuLVxcdTAwM2VpbmRleC1cXHUwMDNlaWhkciwgZSk7XFxuMTI3OTpcXHRcXHRcXHRpZiAoIWUpXFxuMTI4MDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMjgxOlxcdFxcbjEyODI6XFx0XFx0XFx0Zm5kLVxcdTAwM2VkZVtsZXZlbCAtIDFdID0gZTtcXG4xMjgzOlxcdFxcdH1cXG4xMjg0OlxcdFxcbjEyODU6XFx0XFx0LyogSnVzdCB0byBhdm9pZCB0cmVlIGN5Y2xlLiAqL1xcbjEyODY6XFx0bmV4dF9pdGVyOlxcbjEyODc6XFx0XFx0aWYgKGl0ZXIrKyBcXHUwMDNlPSAxMDAwKVxcbjEyODg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTI4OTpcXHRcXG4xMjkwOlxcdFxcdHdoaWxlIChkZV9oYXNfdmNuX2V4KGUpKSB7XFxuMTI5MTpcXHRcXHRcXHRpZiAobGUxNl90b19jcHUoZS1cXHUwMDNlc2l6ZSkgXFx1MDAzY1xcbjEyOTI6XFx0XFx0XFx0ICAgIHNpemVvZihzdHJ1Y3QgTlRGU19ERSkgKyBzaXplb2YodTY0KSkge1xcbjEyOTM6XFx0XFx0XFx0XFx0aWYgKG4pIHtcXG4xMjk0OlxcdFxcdFxcdFxcdFxcdGZuZF9wb3AoZm5kKTtcXG4xMjk1OlxcdFxcdFxcdFxcdFxcdGtmcmVlKG4pO1xcbjEyOTY6XFx0XFx0XFx0XFx0fVxcbjEyOTc6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTI5ODpcXHRcXHRcXHR9XFxuMTI5OTpcXHRcXG4xMzAwOlxcdFxcdFxcdC8qIFJlYWQgbmV4dCBsZXZlbC4gKi9cXG4xMzAxOlxcdFxcdFxcdGVyciA9IGluZHhfcmVhZChpbmR4LCBuaSwgZGVfZ2V0X3ZibihlKSwgXFx1MDAyNm4pO1xcbjEzMDI6XFx0XFx0XFx0aWYgKGVycilcXG4xMzAzOlxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTMwNDpcXHRcXG4xMzA1OlxcdFxcdFxcdC8qIFRyeSBuZXh0IGxldmVsLiAqL1xcbjEzMDY6XFx0XFx0XFx0ZSA9IGhkcl9maXJzdF9kZShcXHUwMDI2bi1cXHUwMDNlaW5kZXgtXFx1MDAzZWloZHIpO1xcbjEzMDc6XFx0XFx0XFx0aWYgKCFlKSB7XFxuMTMwODpcXHRcXHRcXHRcXHRrZnJlZShuKTtcXG4xMzA5OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEzMTA6XFx0XFx0XFx0fVxcbjEzMTE6XFx0XFxuMTMxMjpcXHRcXHRcXHRmbmRfcHVzaChmbmQsIG4sIGUpO1xcbjEzMTM6XFx0XFx0fVxcbjEzMTQ6XFx0XFxuMTMxNTpcXHRcXHRpZiAobGUxNl90b19jcHUoZS1cXHUwMDNlc2l6ZSkgXFx1MDAzZSBzaXplb2Yoc3RydWN0IE5URlNfREUpKSB7XFxuMTMxNjpcXHRcXHRcXHQqZW50cnkgPSBlO1xcbjEzMTc6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTMxODpcXHRcXHR9XFxuMTMxOTpcXHRcXG4xMzIwOlxcdHBvcF9sZXZlbDpcXG4xMzIxOlxcdFxcdGZvciAoOzspIHtcXG4xMzIyOlxcdFxcdFxcdGlmICghZGVfaXNfbGFzdChlKSlcXG4xMzIzOlxcdFxcdFxcdFxcdGdvdG8gbmV4dF9pdGVyO1xcbjEzMjQ6XFx0XFxuMTMyNTpcXHRcXHRcXHQvKiBQb3Agb25lIGxldmVsLiAqL1xcbjEzMjY6XFx0XFx0XFx0aWYgKG4pIHtcXG4xMzI3OlxcdFxcdFxcdFxcdGZuZF9wb3AoZm5kKTtcXG4xMzI4OlxcdFxcdFxcdFxcdGtmcmVlKG4tXFx1MDAzZWluZGV4KTtcXG4xMzI5OlxcdFxcdFxcdFxcdGtmcmVlKG4pO1xcbjEzMzA6XFx0XFx0XFx0fVxcbjEzMzE6XFx0XFxuMTMzMjpcXHRcXHRcXHRsZXZlbCA9IGZuZC1cXHUwMDNlbGV2ZWw7XFxuMTMzMzpcXHRcXG4xMzM0OlxcdFxcdFxcdGlmIChsZXZlbCkge1xcbjEzMzU6XFx0XFx0XFx0XFx0biA9IGZuZC1cXHUwMDNlbm9kZXNbbGV2ZWwgLSAxXTtcXG4xMzM2OlxcdFxcdFxcdFxcdGUgPSBmbmQtXFx1MDAzZWRlW2xldmVsIC0gMV07XFxuMTMzNzpcXHRcXHRcXHR9IGVsc2UgaWYgKGZuZC1cXHUwMDNlcm9vdF9kZSkge1xcbjEzMzg6XFx0XFx0XFx0XFx0biA9IE5VTEw7XFxuMTMzOTpcXHRcXHRcXHRcXHRlID0gZm5kLVxcdTAwM2Vyb290X2RlO1xcbjEzNDA6XFx0XFx0XFx0XFx0Zm5kLVxcdTAwM2Vyb290X2RlID0gTlVMTDtcXG4xMzQxOlxcdFxcdFxcdH0gZWxzZSB7XFxuMTM0MjpcXHRcXHRcXHRcXHQqZW50cnkgPSBOVUxMO1xcbjEzNDM6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE2OjQzOjAyLjc2MjYxOTk2OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNTA3NzU1MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBNZW1vcnkgTGVhayBGaXggaW4gYGluZHhfZmluZF9zb3J0YCoqXG5cbkFscmlnaHQsIHNvIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYGtmcmVlKG4tXHUwMDNlaW5kZXgpO2AgY2FsbCBiZWZvcmUgdGhlIGBrZnJlZShuKTtgIGluIGBpbmR4X2ZpbmRfc29ydGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldhaXQgYSBtaW51dGUsIGlzIHRoYXQgKnJlYWxseSogbmVlZGVkP1wiLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrLiBUaGUgaW1wbGljYXRpb24gaXMgdGhhdCBgbi1cdTAwM2VpbmRleGAgaXMgYSBzZXBhcmF0ZWx5IGFsbG9jYXRlZCBwaWVjZSBvZiBtZW1vcnkuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneSBoZXJlLiBBaCwgcmlnaHQsIGBpbmR4X3JlYWRgIGlzIHRoZSBrZXkgZnVuY3Rpb24gdG8gZXhhbWluZS4gVGhhdCdzIHdoZXJlIGBuYCBhbmQsIHNwZWNpZmljYWxseSwgYG4tXHUwMDNlaW5kZXhgIHNob3VsZCBiZSBhbGxvY2F0ZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBhc3N1bXB0aW9uIGhvbGRzIHRydWUuIEkgaGF2ZSB0byBjaGVjayB0aGUgY2FsbCBjaGFpbiBhbmQgdmVyaWZ5IHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneS4gTGV0IG1lIGp1bXAgaW50byBgaW5keF9yZWFkYCBhbmQgc2VlIHdoYXQncyBnb2luZyBvbi4uLiBJIG5lZWQgdG8gc2VlIGlmIGl0IGFsbG9jYXRlcyBib3RoIGBuYCBhbmQgYG4tXHUwMDNlaW5kZXhgLiBUaGlzIHdpbGwgZGV0ZXJtaW5lIGlmIHRoZSBwYXRjaCBpcyBhIHZhbGlkIGZpeCBvciBhIHJlZHVuZGFudCwgb3IgZXZlbiwgcG90ZW50aWFsbHksIGRhbmdlcm91cyBjaGFuZ2UuIExldCdzIHNlZSB3aGF0IGBpbmR4X3JlYWRgIGlzIGRvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTU4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNjo0MzowNi4xMTMzOTc5NzFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1ODcyMzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluZHhfcmVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzMy9pbmRleC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMzL2luZGV4LmM9MTA1Mz1zdGF0aWMgaW50IGluZHhfd3JpdGUoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcXG4tLVxcbmZzL250ZnMzL2luZGV4LmMtMTA2MS0vKlxcbmZzL250ZnMzL2luZGV4LmM6MTA2MjogKiBpbmR4X3JlYWRfcmFcXG5mcy9udGZzMy9pbmRleC5jLTEwNjMtICpcXG4tLVxcbmZzL250ZnMzL2luZGV4LmMtMTA2Ny0gKi9cXG5mcy9udGZzMy9pbmRleC5jOjEwNjg6aW50IGluZHhfcmVhZF9yYShzdHJ1Y3QgbnRmc19pbmRleCAqaW5keCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBDTFNUIHZibixcXG5mcy9udGZzMy9pbmRleC5jLTEwNjktXFx0XFx0IHN0cnVjdCBpbmR4X25vZGUgKipub2RlLCBzdHJ1Y3QgZmlsZV9yYV9zdGF0ZSAqcmEpXFxuLS1cXG5mcy9udGZzMy9pbmRleC5jPTExNjk9aW50IGluZHhfZmluZChzdHJ1Y3QgbnRmc19pbmRleCAqaW5keCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxcbi0tXFxuZnMvbnRmczMvaW5kZXguYy0xMjE3LVxcdFxcdC8qIFJlYWQgbmV4dCBsZXZlbC4gKi9cXG5mcy9udGZzMy9pbmRleC5jOjEyMTg6XFx0XFx0ZXJyID0gaW5keF9yZWFkKGluZHgsIG5pLCBkZV9nZXRfdmJuKGUpLCBcXHUwMDI2bm9kZSk7XFxuZnMvbnRmczMvaW5kZXguYy0xMjE5LVxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbmZzL250ZnMzL2luZGV4LmM9MTI0ND1pbnQgaW5keF9maW5kX3NvcnQoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcXG4tLVxcbmZzL250ZnMzL2luZGV4LmMtMTMwMC1cXHRcXHQvKiBSZWFkIG5leHQgbGV2ZWwuICovXFxuZnMvbnRmczMvaW5kZXguYzoxMzAxOlxcdFxcdGVyciA9IGluZHhfcmVhZChpbmR4LCBuaSwgZGVfZ2V0X3ZibihlKSwgXFx1MDAyNm4pO1xcbmZzL250ZnMzL2luZGV4LmMtMTMwMi1cXHRcXHRpZiAoZXJyKVxcbi0tXFxuZnMvbnRmczMvaW5kZXguYz0xMzU1PWludCBpbmR4X2ZpbmRfcmF3KHN0cnVjdCBudGZzX2luZGV4ICppbmR4LCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXFxuLS1cXG5mcy9udGZzMy9pbmRleC5jLTE0NDUtXFx0XFx0LyogUmVhZCBidWZmZXIgaW50byBtZW1vcnkuICovXFxuZnMvbnRmczMvaW5kZXguYzoxNDQ2OlxcdFxcdGVyciA9IGluZHhfcmVhZChpbmR4LCBuaSwgbmV4dF91c2VkX3ZibiwgXFx1MDAyNm4pO1xcbmZzL250ZnMzL2luZGV4LmMtMTQ0Ny1cXHRcXHRpZiAoZXJyKVxcbi0tXFxuZnMvbnRmczMvaW5kZXguYz0yMDk3PXN0YXRpYyBzdHJ1Y3QgaW5keF9ub2RlICppbmR4X2ZpbmRfYnVmZmVyKHN0cnVjdCBudGZzX2luZGV4ICppbmR4LFxcbi0tXFxuZnMvbnRmczMvaW5kZXguYy0yMTMwLVxcdFxcdGlmIChkZV9oYXNfdmNuX2V4KGUpKSB7XFxuZnMvbnRmczMvaW5kZXguYzoyMTMxOlxcdFxcdFxcdGVyciA9IGluZHhfcmVhZChpbmR4LCBuaSwgZGVfZ2V0X3ZibihlKSwgXFx1MDAyNm4pO1xcbmZzL250ZnMzL2luZGV4LmMtMjEzMi1cXHRcXHRcXHRpZiAoZXJyKVxcbi0tXFxuZnMvbnRmczMvaW5kZXguYz0yMjE2PXN0YXRpYyBpbnQgaW5keF9mcmVlX2NoaWxkcmVuKHN0cnVjdCBudGZzX2luZGV4ICppbmR4LCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXFxuLS1cXG5mcy9udGZzMy9pbmRleC5jLTIyMjQtXFxuZnMvbnRmczMvaW5kZXguYzoyMjI1OlxcdGVyciA9IGluZHhfcmVhZChpbmR4LCBuaSwgdmJuLCBcXHUwMDI2bik7XFxuZnMvbnRmczMvaW5kZXguYy0yMjI2LVxcdGlmIChlcnIpXFxuLS1cXG5mcy9udGZzMy9pbmRleC5jPTIyNjY9c3RhdGljIGludCBpbmR4X2dldF9lbnRyeV90b19yZXBsYWNlKHN0cnVjdCBudGZzX2luZGV4ICppbmR4LFxcbi0tXFxuZnMvbnRmczMvaW5kZXguYy0yMjg0LVxcdFxcdG4gPSBOVUxMO1xcbmZzL250ZnMzL2luZGV4LmM6MjI4NTpcXHRcXHRlcnIgPSBpbmR4X3JlYWQoaW5keCwgbmksIHZibiwgXFx1MDAyNm4pO1xcbmZzL250ZnMzL2luZGV4LmMtMjI4Ni1cXHRcXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNjo0MzowNi4yODkyNzU4MDJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzYzODYyNDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBpbmR4X3JlYWRgIFNvdXJjZSoqXG5cbk9rYXksIGxldCdzIHRyYWNlIHRoaXMgYGluZHhfcmVhZGAgZnVuY3Rpb24uIEJhc2VkIG9uIHRoZSBjb250ZXh0LCBJIHN1c3BlY3QgaXQncyBub3QgYSBzdGFuZGFyZCBsaWJyYXJ5IGZ1bmN0aW9uLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHBpbnBvaW50IGl0cyBkZWZpbml0aW9uLiBJcyB0aGlzIGxpa2VseSBhIG1hY3JvLCBvciBwZXJoYXBzIGRlZmluZWQgaW4gYW4gaW5jbHVkZWQgaGVhZGVyIGZpbGU/IFRoZSBuYW1pbmcgY29udmVudGlvbiBzdWdnZXN0cyBpdCBtaWdodCBiZSBpbnRlcm5hbCB0byB0aGUgcHJvamVjdCBvciBsaWJyYXJ5IEknbSB3b3JraW5nIHdpdGgsIHNvIGRpZ2dpbmcgaW50byB0aGUgcHJvamVjdCdzIGluY2x1ZGUgcGF0aHMgc2VlbXMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IGhvdyB0aGlzIGlzIGJlaW5nIHVzZWQgdG8gZWZmZWN0aXZlbHkgZGVidWcgaXRzIGJlaGF2aW91ci5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ1MywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE2OjQzOjA5LjA1MzE0MDkxNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0NjAyNDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluZHhfcmVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzMy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmczMvZGlyLmM9NDA0PXN0YXRpYyBpbnQgbnRmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcXG4tLVxcbmZzL250ZnMzL2Rpci5jLTU0Mi1cXG5mcy9udGZzMy9kaXIuYzo1NDM6XFx0XFx0ZXJyID0gaW5keF9yZWFkX3JhKFxcdTAwMjZuaS1cXHUwMDNlZGlyLCBuaSwgYml0IFxcdTAwM2NcXHUwMDNjIG5pLVxcdTAwM2VkaXIuaWR4MnZibl9iaXRzLFxcbmZzL250ZnMzL2Rpci5jLTU0NC1cXHRcXHRcXHRcXHQgICBcXHUwMDI2bm9kZSwgXFx1MDAyNmZpbGUtXFx1MDAzZWZfcmEpO1xcbi0tXFxuZnMvbnRmczMvZGlyLmM9NjAwPXN0YXRpYyBpbnQgbnRmc19kaXJfY291bnQoc3RydWN0IGlub2RlICpkaXIsIGJvb2wgKmlzX2VtcHR5LCBzaXplX3QgKmRpcnMsXFxuLS1cXG5mcy9udGZzMy9kaXIuYy02NjctXFxuZnMvbnRmczMvZGlyLmM6NjY4OlxcdFxcdGVyciA9IGluZHhfcmVhZChcXHUwMDI2bmktXFx1MDAzZWRpciwgbmksIGJpdCBcXHUwMDNjXFx1MDAzYyBuaS1cXHUwMDNlZGlyLmlkeDJ2Ym5fYml0cyxcXG5mcy9udGZzMy9kaXIuYy02NjktXFx0XFx0XFx0XFx0XFx1MDAyNm5vZGUpO1xcbi0tXFxuZnMvbnRmczMvaW5kZXguYz0xMDUzPXN0YXRpYyBpbnQgaW5keF93cml0ZShzdHJ1Y3QgbnRmc19pbmRleCAqaW5keCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxcbi0tXFxuZnMvbnRmczMvaW5kZXguYy0xMDYxLS8qXFxuZnMvbnRmczMvaW5kZXguYzoxMDYyOiAqIGluZHhfcmVhZF9yYVxcbmZzL250ZnMzL2luZGV4LmMtMTA2My0gKlxcbi0tXFxuZnMvbnRmczMvaW5kZXguYy0xMDY3LSAqL1xcbmZzL250ZnMzL2luZGV4LmM6MTA2ODppbnQgaW5keF9yZWFkX3JhKHN0cnVjdCBudGZzX2luZGV4ICppbmR4LCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIENMU1QgdmJuLFxcbmZzL250ZnMzL2luZGV4LmMtMTA2OS1cXHRcXHQgc3RydWN0IGluZHhfbm9kZSAqKm5vZGUsIHN0cnVjdCBmaWxlX3JhX3N0YXRlICpyYSlcXG4tLVxcbmZzL250ZnMzL2luZGV4LmM9MTE2OT1pbnQgaW5keF9maW5kKHN0cnVjdCBudGZzX2luZGV4ICppbmR4LCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXFxuLS1cXG5mcy9udGZzMy9pbmRleC5jLTEyMTctXFx0XFx0LyogUmVhZCBuZXh0IGxldmVsLiAqL1xcbmZzL250ZnMzL2luZGV4LmM6MTIxODpcXHRcXHRlcnIgPSBpbmR4X3JlYWQoaW5keCwgbmksIGRlX2dldF92Ym4oZSksIFxcdTAwMjZub2RlKTtcXG5mcy9udGZzMy9pbmRleC5jLTEyMTktXFx0XFx0aWYgKGVycikge1xcbi0tXFxuZnMvbnRmczMvaW5kZXguYz0xMjQ0PWludCBpbmR4X2ZpbmRfc29ydChzdHJ1Y3QgbnRmc19pbmRleCAqaW5keCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxcbi0tXFxuZnMvbnRmczMvaW5kZXguYy0xMzAwLVxcdFxcdC8qIFJlYWQgbmV4dCBsZXZlbC4gKi9cXG5mcy9udGZzMy9pbmRleC5jOjEzMDE6XFx0XFx0ZXJyID0gaW5keF9yZWFkKGluZHgsIG5pLCBkZV9nZXRfdmJuKGUpLCBcXHUwMDI2bik7XFxuZnMvbnRmczMvaW5kZXguYy0xMzAyLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5mcy9udGZzMy9pbmRleC5jPTEzNTU9aW50IGluZHhfZmluZF9yYXcoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcXG4tLVxcbmZzL250ZnMzL2luZGV4LmMtMTQ0NS1cXHRcXHQvKiBSZWFkIGJ1ZmZlciBpbnRvIG1lbW9yeS4gKi9cXG5mcy9udGZzMy9pbmRleC5jOjE0NDY6XFx0XFx0ZXJyID0gaW5keF9yZWFkKGluZHgsIG5pLCBuZXh0X3VzZWRfdmJuLCBcXHUwMDI2bik7XFxuZnMvbnRmczMvaW5kZXguYy0xNDQ3LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5mcy9udGZzMy9pbmRleC5jPTIwOTc9c3RhdGljIHN0cnVjdCBpbmR4X25vZGUgKmluZHhfZmluZF9idWZmZXIoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsXFxuLS1cXG5mcy9udGZzMy9pbmRleC5jLTIxMzAtXFx0XFx0aWYgKGRlX2hhc192Y25fZXgoZSkpIHtcXG5mcy9udGZzMy9pbmRleC5jOjIxMzE6XFx0XFx0XFx0ZXJyID0gaW5keF9yZWFkKGluZHgsIG5pLCBkZV9nZXRfdmJuKGUpLCBcXHUwMDI2bik7XFxuZnMvbnRmczMvaW5kZXguYy0yMTMyLVxcdFxcdFxcdGlmIChlcnIpXFxuLS1cXG5mcy9udGZzMy9pbmRleC5jPTIyMTY9c3RhdGljIGludCBpbmR4X2ZyZWVfY2hpbGRyZW4oc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcXG4tLVxcbmZzL250ZnMzL2luZGV4LmMtMjIyNC1cXG5mcy9udGZzMy9pbmRleC5jOjIyMjU6XFx0ZXJyID0gaW5keF9yZWFkKGluZHgsIG5pLCB2Ym4sIFxcdTAwMjZuKTtcXG5mcy9udGZzMy9pbmRleC5jLTIyMjYtXFx0aWYgKGVycilcXG4tLVxcbmZzL250ZnMzL2luZGV4LmM9MjI2Nj1zdGF0aWMgaW50IGluZHhfZ2V0X2VudHJ5X3RvX3JlcGxhY2Uoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsXFxuLS1cXG5mcy9udGZzMy9pbmRleC5jLTIyODQtXFx0XFx0biA9IE5VTEw7XFxuZnMvbnRmczMvaW5kZXguYzoyMjg1OlxcdFxcdGVyciA9IGluZHhfcmVhZChpbmR4LCBuaSwgdmJuLCBcXHUwMDI2bik7XFxuZnMvbnRmczMvaW5kZXguYy0yMjg2LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5mcy9udGZzMy9udGZzX2ZzLmg9NzQ2PXN0cnVjdCBJTkRFWF9ST09UICppbmR4X2dldF9yb290KHN0cnVjdCBudGZzX2luZGV4ICppbmR4LCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXFxuZnMvbnRmczMvbnRmc19mcy5oLTc0Ny1cXHRcXHRcXHRcXHQgc3RydWN0IEFUVFJJQiAqKmF0dHIsIHN0cnVjdCBtZnRfaW5vZGUgKiptaSk7XFxuZnMvbnRmczMvbnRmc19mcy5oOjc0ODppbnQgaW5keF9yZWFkX3JhKHN0cnVjdCBudGZzX2luZGV4ICppZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSwgQ0xTVCB2Ym4sXFxuZnMvbnRmczMvbnRmc19mcy5oLTc0OS1cXHRcXHQgc3RydWN0IGluZHhfbm9kZSAqKm5vZGUsIHN0cnVjdCBmaWxlX3JhX3N0YXRlICpyYSk7XFxuZnMvbnRmczMvbnRmc19mcy5oOjc1MDpzdGF0aWMgaW5saW5lIGludCBpbmR4X3JlYWQoc3RydWN0IG50ZnNfaW5kZXggKmlkeCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxcbmZzL250ZnMzL250ZnNfZnMuaC03NTEtXFx0XFx0XFx0ICAgIENMU1QgdmJuLCBzdHJ1Y3QgaW5keF9ub2RlICoqbm9kZSlcXG5mcy9udGZzMy9udGZzX2ZzLmgtNzUyLXtcXG5mcy9udGZzMy9udGZzX2ZzLmg6NzUzOlxcdHJldHVybiBpbmR4X3JlYWRfcmEoaWR4LCBuaSwgdmJuLCBub2RlLCBOVUxMKTtcXG5mcy9udGZzMy9udGZzX2ZzLmgtNzU0LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTY6NDM6MDkuMTg3NzUwMDc5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNzE0NDY1OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgSW5kZXggUmVhZCBGdW5jdGlvbiBDYWxsKipcblxuUmlnaHQsIHNvIGBpbmR4X3JlYWRgIGlzIGNsZWFybHkgYW4gaW5saW5lIGZ1bmN0aW9uLiBNYWtlcyBzZW5zZSDigJMgcHJvYmFibHkgb3B0aW1pemVkIGZvciBmcmVxdWVudCBjYWxscywgbWF5YmU/IEl0J3MgaW1tZWRpYXRlbHkgZXZpZGVudCB0aGF0IGBpbmR4X3JlYWRgIGlzIGp1c3QgYSB3cmFwcGVyIGZvciBgaW5keF9yZWFkX3JhYC4gT2theSwgbGV0J3MgZHJpbGwgZG93biBpbnRvIGBpbmR4X3JlYWRfcmFgIHRoZW4uIEdpdmVuIHRoZSBjb250ZXh0LCBteSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZmluZCBpdHMgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBOVEZTMyBmaWxlc3lzdGVtIGRyaXZlci4gVGhhdCBzaG91bGQgYmUgd2l0aGluIGBmcy9udGZzMy9pbmRleC5jYCDigJMgdGhhdCdzIHdoZXJlIEkgd291bGQgZXhwZWN0IGFsbCB0aGUgaW5kZXgtcmVsYXRlZCBmdW5jdGlvbmFsaXR5IHRvIHJlc2lkZS4gVGltZSB0byBvcGVuIHRoYXQgZmlsZSBhbmQgZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhlIHJlYWQtYWhlYWQgbWVjaGFuaXNtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTU5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTY6NDM6MTIuNTU5MTk5NjMxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNjgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9udGZzMy9pbmRleC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNjgsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDY4OlxcdGludCBpbmR4X3JlYWRfcmEoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSwgQ0xTVCB2Ym4sXFxuMTA2OTpcXHRcXHRcXHQgc3RydWN0IGluZHhfbm9kZSAqKm5vZGUsIHN0cnVjdCBmaWxlX3JhX3N0YXRlICpyYSlcXG4xMDcwOlxcdHtcXG4xMDcxOlxcdFxcdGludCBlcnI7XFxuMTA3MjpcXHRcXHRzdHJ1Y3QgSU5ERVhfQlVGRkVSICppYjtcXG4xMDczOlxcdFxcdHN0cnVjdCBudGZzX3NiX2luZm8gKnNiaSA9IG5pLVxcdTAwM2VtaS5zYmk7XFxuMTA3NDpcXHRcXHRzdHJ1Y3QgcnVuc190cmVlICpydW4gPSBcXHUwMDI2aW5keC1cXHUwMDNlYWxsb2NfcnVuO1xcbjEwNzU6XFx0XFx0c3RydWN0IHJ3X3NlbWFwaG9yZSAqbG9jayA9IFxcdTAwMjZpbmR4LVxcdTAwM2VydW5fbG9jaztcXG4xMDc2OlxcdFxcdHU2NCB2Ym8gPSAodTY0KXZibiBcXHUwMDNjXFx1MDAzYyBpbmR4LVxcdTAwM2V2Ym4ydmJvX2JpdHM7XFxuMTA3NzpcXHRcXHR1MzIgYnl0ZXMgPSAxdSBcXHUwMDNjXFx1MDAzYyBpbmR4LVxcdTAwM2VpbmRleF9iaXRzO1xcbjEwNzg6XFx0XFx0c3RydWN0IGluZHhfbm9kZSAqaW4gPSAqbm9kZTtcXG4xMDc5OlxcdFxcdGNvbnN0IHN0cnVjdCBJTkRFWF9OQU1FUyAqbmFtZTtcXG4xMDgwOlxcdFxcbjEwODE6XFx0XFx0aWYgKCFpbikge1xcbjEwODI6XFx0XFx0XFx0aW4gPSBremFsbG9jX29iaihzdHJ1Y3QgaW5keF9ub2RlLCBHRlBfTk9GUyk7XFxuMTA4MzpcXHRcXHRcXHRpZiAoIWluKVxcbjEwODQ6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTA4NTpcXHRcXHR9IGVsc2Uge1xcbjEwODY6XFx0XFx0XFx0bmJfcHV0KFxcdTAwMjZpbi1cXHUwMDNlbmIpO1xcbjEwODc6XFx0XFx0fVxcbjEwODg6XFx0XFxuMTA4OTpcXHRcXHRpYiA9IGluLVxcdTAwM2VpbmRleDtcXG4xMDkwOlxcdFxcdGlmICghaWIpIHtcXG4xMDkxOlxcdFxcdFxcdGliID0ga21hbGxvYyhieXRlcywgR0ZQX05PRlMpO1xcbjEwOTI6XFx0XFx0XFx0aWYgKCFpYikge1xcbjEwOTM6XFx0XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4xMDk0OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjEwOTU6XFx0XFx0XFx0fVxcbjEwOTY6XFx0XFx0fVxcbjEwOTc6XFx0XFxuMTA5ODpcXHRcXHRkb3duX3JlYWQobG9jayk7XFxuMTA5OTpcXHRcXHRlcnIgPSBudGZzX3JlYWRfYmhfcmEoc2JpLCBydW4sIHZibywgXFx1MDAyNmliLVxcdTAwM2VyaGRyLCBieXRlcywgXFx1MDAyNmluLVxcdTAwM2VuYiwgcmEpO1xcbjExMDA6XFx0XFx0dXBfcmVhZChsb2NrKTtcXG4xMTAxOlxcdFxcdGlmICghZXJyKVxcbjExMDI6XFx0XFx0XFx0Z290byBvaztcXG4xMTAzOlxcdFxcbjExMDQ6XFx0XFx0aWYgKGVyciA9PSAtRV9OVEZTX0ZJWFVQKVxcbjExMDU6XFx0XFx0XFx0Z290byBvaztcXG4xMTA2OlxcdFxcbjExMDc6XFx0XFx0aWYgKGVyciAhPSAtRU5PRU5UKVxcbjExMDg6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTEwOTpcXHRcXG4xMTEwOlxcdFxcdG5hbWUgPSBcXHUwMDI2c19pbmRleF9uYW1lc1tpbmR4LVxcdTAwM2V0eXBlXTtcXG4xMTExOlxcdFxcdGRvd25fd3JpdGUobG9jayk7XFxuMTExMjpcXHRcXHRlcnIgPSBhdHRyX2xvYWRfcnVuc19yYW5nZShuaSwgQVRUUl9BTExPQywgbmFtZS1cXHUwMDNlbmFtZSwgbmFtZS1cXHUwMDNlbmFtZV9sZW4sXFxuMTExMzpcXHRcXHRcXHRcXHRcXHQgICBydW4sIHZibywgdmJvICsgYnl0ZXMpO1xcbjExMTQ6XFx0XFx0dXBfd3JpdGUobG9jayk7XFxuMTExNTpcXHRcXHRpZiAoZXJyKVxcbjExMTY6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTExNzpcXHRcXG4xMTE4OlxcdFxcdGRvd25fcmVhZChsb2NrKTtcXG4xMTE5OlxcdFxcdGVyciA9IG50ZnNfcmVhZF9iaF9yYShzYmksIHJ1biwgdmJvLCBcXHUwMDI2aWItXFx1MDAzZXJoZHIsIGJ5dGVzLCBcXHUwMDI2aW4tXFx1MDAzZW5iLCByYSk7XFxuMTEyMDpcXHRcXHR1cF9yZWFkKGxvY2spO1xcbjExMjE6XFx0XFx0aWYgKGVyciA9PSAtRV9OVEZTX0ZJWFVQKVxcbjExMjI6XFx0XFx0XFx0Z290byBvaztcXG4xMTIzOlxcdFxcbjExMjQ6XFx0XFx0aWYgKGVycilcXG4xMTI1OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjExMjY6XFx0XFxuMTEyNzpcXHRvazpcXG4xMTI4OlxcdFxcdGlmICghaW5kZXhfYnVmX2NoZWNrKGliLCBieXRlcywgXFx1MDAyNnZibikpIHtcXG4xMTI5OlxcdFxcdFxcdF9udGZzX2JhZF9pbm9kZShcXHUwMDI2bmktXFx1MDAzZXZmc19pbm9kZSk7XFxuMTEzMDpcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjExMzE6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTEzMjpcXHRcXHR9XFxuMTEzMzpcXHRcXG4xMTM0OlxcdFxcdGlmIChlcnIgPT0gLUVfTlRGU19GSVhVUCkge1xcbjExMzU6XFx0XFx0XFx0bnRmc193cml0ZV9iaChzYmksIFxcdTAwMjZpYi1cXHUwMDNlcmhkciwgXFx1MDAyNmluLVxcdTAwM2VuYiwgMCk7XFxuMTEzNjpcXHRcXHRcXHRlcnIgPSAwO1xcbjExMzc6XFx0XFx0fVxcbjExMzg6XFx0XFxuMTEzOTpcXHRcXHQvKiBjaGVjayBmb3IgaW5kZXggaGVhZGVyIGxlbmd0aCAqL1xcbjExNDA6XFx0XFx0aWYgKG9mZnNldG9mKHN0cnVjdCBJTkRFWF9CVUZGRVIsIGloZHIpICsgbGUzMl90b19jcHUoaWItXFx1MDAzZWloZHIudXNlZCkgXFx1MDAzZVxcbjExNDE6XFx0XFx0ICAgIGJ5dGVzKSB7XFxuMTE0MjpcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjExNDM6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTE0NDpcXHRcXHR9XFxuMTE0NTpcXHRcXG4xMTQ2OlxcdFxcdGluLVxcdTAwM2VpbmRleCA9IGliO1xcbjExNDc6XFx0XFx0Km5vZGUgPSBpbjtcXG4xMTQ4OlxcdFxcbjExNDk6XFx0b3V0OlxcbjExNTA6XFx0XFx0aWYgKGVyciA9PSAtRV9OVEZTX0NPUlJVUFQpIHtcXG4xMTUxOlxcdFxcdFxcdF9udGZzX2JhZF9pbm9kZShcXHUwMDI2bmktXFx1MDAzZXZmc19pbm9kZSk7XFxuMTE1MjpcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjExNTM6XFx0XFx0fVxcbjExNTQ6XFx0XFxuMTE1NTpcXHRcXHRpZiAoaWIgIT0gaW4tXFx1MDAzZWluZGV4KVxcbjExNTY6XFx0XFx0XFx0a2ZyZWUoaWIpO1xcbjExNTc6XFx0XFxuMTE1ODpcXHRcXHRpZiAoKm5vZGUgIT0gaW4pIHtcXG4xMTU5OlxcdFxcdFxcdG5iX3B1dChcXHUwMDI2aW4tXFx1MDAzZW5iKTtcXG4xMTYwOlxcdFxcdFxcdGtmcmVlKGluKTtcXG4xMTYxOlxcdFxcdH1cXG4xMTYyOlxcdFxcbjExNjM6XFx0XFx0cmV0dXJuIGVycjtcXG4xMTY0OlxcdH1cXG4xMTY1OlxcdFxcbjExNjY6XFx0LypcXG4xMTY3OlxcdCAqIGluZHhfZmluZCAtIFNjYW4gTlRGUyBkaXJlY3RvcnkgZm9yIGdpdmVuIGVudHJ5LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNjo0MzoxMi41NTk1MDkzNTFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMxNzU3MTc5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERhdGEgSW5kZXhpbmcgUHJvY2VzcyoqXG5cbk9rYXksIHNvIGBpbmR4X3JlYWRfcmFgIGlzIHJlc3BvbnNpYmxlIGZvciBhbGxvY2F0aW5nIGJvdGggYGluYCBhbmQgYGliYCwgd2l0aCBgaWJgIGdldHRpbmcgYXNzaWduZWQgdG8gYGluLVx1MDAzZWluZGV4YC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIHNvIGZhci4gSWYgYGluZHhfcmVhZGAgaXMgc3VjY2Vzc2Z1bCwgdGhlIGAqbm9kZWAgcG9pbnRlciBJJ20gd29ya2luZyB3aXRoIGlzIHNldCB0byBgaW5gLCBhbmQgY3J1Y2lhbGx5LCBgaW4tXHUwMDNlaW5kZXhgIG5vdyBwb2ludHMgdG8gdGhhdCBhbGxvY2F0ZWQgYGliYC4gSSBuZWVkIHRvIHJlbWVtYmVyIHRoaXMgc3RydWN0dXJlLCBhcyBpdCdzIHRoZSBmb3VuZGF0aW9uIG9mIHRoZSBvcGVyYXRpb24uXG5cbk5vdywgbG9va2luZyBhdCBgaW5keF9maW5kX3NvcnRgLCBpZiBgZGVfaGFzX3Zjbl9leChlKWAgZXZhbHVhdGVzIHRvIHRydWUsIGl0IGNhbGxzIGBpbmR4X3JlYWRgIChzbyBzZXR0aW5nIHRoaW5ncyB1cCkgYW5kIHRoZW4gY2FsbHMgYGZuZF9wdXNoYC4gSSB1bmRlcnN0YW5kIHRoZSBpbnRlbnRpb24gaGVyZS5cblxuQnV0LCBJJ20gY29uY2VybmVkIGFib3V0IHRoZSBzaXplIGNoZWNrLiBJZiBgbGUxNl90b19jcHUoZS1cdTAwM2VzaXplKWAgaXMgbGVzcyB0aGFuIGEgY2VydGFpbiBkZWZpbmVkIHNpemUsIGl0IGZyZWVzIGBuYC4gSXQgZmVlbHMgbGlrZSB0aGVyZSBpcyBhbiBvdmVyc2lnaHQuIFRoaXMgZnJlZXMgYG5gLCB3aGljaCBpcyBmaW5lLCBidXQgaXQgKm1pc3NlcyogZnJlZWluZyBgbi1cdTAwM2VpbmRleGAuIE5vdywgaGFuZyBvbiBhIHNlY29uZCwgd2Fzbid0IGBuYCBzdXBwb3NlZCB0byBiZSBwb3BwZWQgZnJvbSB0aGUgYGZuZGAgc3RhY2sgdXNpbmcgYGZuZF9wb3AoZm5kKWA/IEl0IGxvb2tzIGxpa2UgSSBhbSBnb2luZyB0byBoYXZlIHRvIGRpdmUgaW50byBgZm5kX3BvcGAgYW5kIGZpZ3VyZSBvdXQgd2hhdCBpdCdzIGRvaW5nIHdpdGggdGhhdCBgbmAgdmFsdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4MjMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNjo0MzoxNy44NzcwODQyOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3MTM2NDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZuZF9wb3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmczMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMzL2luZGV4LmM9NzA2PXN0YXRpYyBpbnQgZm5kX3B1c2goc3RydWN0IG50ZnNfZm5kICpmbmQsIHN0cnVjdCBpbmR4X25vZGUgKm4sXFxuLS1cXG5mcy9udGZzMy9pbmRleC5jLTcxOC1cXG5mcy9udGZzMy9pbmRleC5jOjcxOTpzdGF0aWMgc3RydWN0IGluZHhfbm9kZSAqZm5kX3BvcChzdHJ1Y3QgbnRmc19mbmQgKmZuZClcXG5mcy9udGZzMy9pbmRleC5jLTcyMC17XFxuLS1cXG5mcy9udGZzMy9pbmRleC5jPTEyNDQ9aW50IGluZHhfZmluZF9zb3J0KHN0cnVjdCBudGZzX2luZGV4ICppbmR4LCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXFxuLS1cXG5mcy9udGZzMy9pbmRleC5jLTEyOTMtXFx0XFx0XFx0aWYgKG4pIHtcXG5mcy9udGZzMy9pbmRleC5jOjEyOTQ6XFx0XFx0XFx0XFx0Zm5kX3BvcChmbmQpO1xcbmZzL250ZnMzL2luZGV4LmMtMTI5NS1cXHRcXHRcXHRcXHRrZnJlZShuKTtcXG4tLVxcbmZzL250ZnMzL2luZGV4LmMtMTMyNi1cXHRcXHRpZiAobikge1xcbmZzL250ZnMzL2luZGV4LmM6MTMyNzpcXHRcXHRcXHRmbmRfcG9wKGZuZCk7XFxuZnMvbnRmczMvaW5kZXguYy0xMzI4LVxcdFxcdFxcdGtmcmVlKG4tXFx1MDAzZWluZGV4KTtcXG4tLVxcbmZzL250ZnMzL2luZGV4LmM9MTM1NT1pbnQgaW5keF9maW5kX3JhdyhzdHJ1Y3QgbnRmc19pbmRleCAqaW5keCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxcbi0tXFxuZnMvbnRmczMvaW5kZXguYy0xNDI4LVxcdFxcdGlmIChuKSB7XFxuZnMvbnRmczMvaW5kZXguYzoxNDI5OlxcdFxcdFxcdGZuZF9wb3AoZm5kKTtcXG5mcy9udGZzMy9pbmRleC5jLTE0MzAtXFx0XFx0XFx0cHV0X2luZHhfbm9kZShuKTtcXG4tLVxcbmZzL250ZnMzL2luZGV4LmM9MjM2OT1pbnQgaW5keF9kZWxldGVfZW50cnkoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcXG4tLVxcbmZzL250ZnMzL2luZGV4LmMtMjQ1Ni1cXHRcXHRpZiAoaWIgXFx1MDAyNlxcdTAwMjYgaWJfaXNfbGVhZihpYikgXFx1MDAyNlxcdTAwMjYgaWJfaXNfZW1wdHkoaWIpKSB7XFxuZnMvbnRmczMvaW5kZXguYzoyNDU3OlxcdFxcdFxcdGZuZF9wb3AoZm5kKTtcXG5mcy9udGZzMy9pbmRleC5jLTI0NTgtXFx0XFx0XFx0Zm5kX3B1c2goZm5kMiwgbiwgZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE2OjQzOjE4LjA4NDIyNjM5OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjA1Mzc3OTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYGZuZF9wb3BgJ3MgUmV0dXJuIFZhbHVlKipcblxuQWxyaWdodCwgaGFuZyBvbiBhIHNlY29uZC4gSSdtIHRha2luZyBhIGxvb2sgYXQgYGZuZF9wb3BgIG5vdywgYW5kIEkgc2VlIGl0J3MgcmV0dXJuaW5nIGEgYHN0cnVjdCBpbmR4X25vZGUgKmAuIFRoYXQgbWVhbnMgaXQncyBoYW5kaW5nIGJhY2sgYSBwb2ludGVyIHRvIGEgc3BlY2lmaWMgbm9kZSB3aXRoaW4gdGhhdCBgaW5keF9ub2RlYCBzdHJ1Y3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQuIEkgbmVlZCB0byBpbW1lZGlhdGVseSBwdWxsIHVwIHRoZSBkZWZpbml0aW9uIG9mIGBmbmRfcG9wYCB0byB2ZXJpZnkgd2hhdCdzIGdvaW5nIG9uOyBJIG5lZWQgdG8ga25vdyBob3cgdGhhdCBub2RlIGlzIGNob3NlbiBhbmQgd2hhdCBjb250ZXh0IHRvIHVuZGVyc3RhbmQgdGhhdCBzdHJ1Y3R1cmUgd2l0aGluLiBHb3R0YSBrZWVwIHRoZXNlIHBvaW50ZXJzIHN0cmFpZ2h0OyBJJ20gYXNzdW1pbmcgdGhhdCBpdCBpcyBsaW5rZWQgdG8gb3RoZXIgdmFsdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODg5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTY6NDM6MjEuMjg5NjA3MTNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL250ZnMzL2luZGV4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzE5LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzE5OlxcdHN0YXRpYyBzdHJ1Y3QgaW5keF9ub2RlICpmbmRfcG9wKHN0cnVjdCBudGZzX2ZuZCAqZm5kKVxcbiA3MjA6XFx0e1xcbiA3MjE6XFx0XFx0c3RydWN0IGluZHhfbm9kZSAqbjtcXG4gNzIyOlxcdFxcdGludCBpID0gZm5kLVxcdTAwM2VsZXZlbDtcXG4gNzIzOlxcdFxcbiA3MjQ6XFx0XFx0aSAtPSAxO1xcbiA3MjU6XFx0XFx0biA9IGZuZC1cXHUwMDNlbm9kZXNbaV07XFxuIDcyNjpcXHRcXHRmbmQtXFx1MDAzZW5vZGVzW2ldID0gTlVMTDtcXG4gNzI3OlxcdFxcdGZuZC1cXHUwMDNlbGV2ZWwgPSBpO1xcbiA3Mjg6XFx0XFxuIDcyOTpcXHRcXHRyZXR1cm4gbjtcXG4gNzMwOlxcdH1cXG4gNzMxOlxcdFxcbiA3MzI6XFx0c3RhdGljIGJvb2wgZm5kX2lzX2VtcHR5KHN0cnVjdCBudGZzX2ZuZCAqZm5kKVxcbiA3MzM6XFx0e1xcbiA3MzQ6XFx0XFx0aWYgKCFmbmQtXFx1MDAzZWxldmVsKVxcbiA3MzU6XFx0XFx0XFx0cmV0dXJuICFmbmQtXFx1MDAzZXJvb3RfZGU7XFxuIDczNjpcXHRcXG4gNzM3OlxcdFxcdHJldHVybiAhZm5kLVxcdTAwM2VkZVtmbmQtXFx1MDAzZWxldmVsIC0gMV07XFxuIDczODpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE2OjQzOjIxLjI4OTc4NDI2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyMzcyODEwMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUmVjZW50IFBhdGNoIGluIGBpbmR4X2ZpbmRfc29ydGAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgaW5keF9maW5kX3NvcnRgIGFuZCBzb21ldGhpbmcgaW1tZWRpYXRlbHkganVtcHMgb3V0LiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBhZGRlZCBga2ZyZWUobi1cdTAwM2VpbmRleCk7YCAqYmVmb3JlKiB0aGUgYGtmcmVlKG4pO2AgY2FsbCB3aXRoaW4gdGhlIGJsb2NrIHRoYXQgcG9wcyBhIGxldmVsLiBUaGF0IG1ha2VzIHNlbnNlLCBmcmVlaW5nIHRoZSBhbGxvY2F0ZWQgaW5kZXggZGF0YSBiZWZvcmUgZnJlZWluZyB0aGUgbm9kZSBpdHNlbGYsIHN0YW5kYXJkIHByYWN0aWNlLiBCdXQgd2FpdCwgSSdtIHByZXR0eSBzdXJlIHRoZXJlJ3MgYW5vdGhlciBpbnN0YW5jZSBvZiBga2ZyZWUobilgIGluIHRoaXMgc2FtZSBmdW5jdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIHNhbWUgbW9kaWZpY2F0aW9uIHdhcyBtYWRlIHRoZXJlLiBMZXQgbWUgZ28gYmFjayBhbmQgZG91YmxlLWNoZWNrIHRoYXQgYmxvY2sgb2YgY29kZS5cblxuT2theSwgaGVyZSBpdCBpczpcblxuYGBgY1xuXHRcdHdoaWxlIChkZV9oYXNfdmNuX2V4KGUpKSB7XG5cdFx0XHRpZiAobGUxNl90b19jcHUoZS1cdTAwM2VzaXplKSBcdTAwM2Ncblx0XHRcdCAgICBzaXplb2Yoc3RydWN0IE5URlNfREUpICsgc2l6ZW9mKHU2NCkpIHtcblx0XHRcdFx0aWYgKG4pIHtcblx0XHRcdFx0XHRmbmRfcG9wKGZuZCk7XG5cdFx0XHRcdFx0a2ZyZWUobik7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5cdFx0XHR9XG5gYGBcblxuVGhlIHRoaW5nIGlzLCBJIGRvbid0IHNlZSBga2ZyZWUobi1cdTAwM2VpbmRleClgIGluIHRoZSBkaWZmIGZvciB0aGF0IGxvY2F0aW9uLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgbWVtb3J5IGxlYWsgd2FzIG5vdCBpbnRyb2R1Y2VkLiBMZXQgbWUgY2hlY2sgdGhlIGRpZmYgYWdhaW4sIGNhcmVmdWxseSwgbGluZSBieSBsaW5lLlxuXG4qICAgU2lnaCouLi4geWVwLCB0aGUgZGlmZiAqb25seSogc2hvd3MgdGhlIGNoYW5nZSBpbiB0aGUgZmlyc3QgbG9jYXRpb24uIFRoYXQgbWVhbnMgdGhlIGBrZnJlZShuLVx1MDAzZWluZGV4KWAgaXMgKm5vdCogcHJlc2VudCBpbiB0aGUgc2Vjb25kIGBrZnJlZShuKWAgaW5zdGFuY2UuIFRoaXMgaXMgYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWsuIEJhY2sgdG8gdGhlIGNvZGUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzk2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTY6NDM6MjcuNTI3MDY4MDYxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzODI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9udGZzMy9pbmRleC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyOTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyOTA6XFx0XFx0d2hpbGUgKGRlX2hhc192Y25fZXgoZSkpIHtcXG4xMjkxOlxcdFxcdFxcdGlmIChsZTE2X3RvX2NwdShlLVxcdTAwM2VzaXplKSBcXHUwMDNjXFxuMTI5MjpcXHRcXHRcXHQgICAgc2l6ZW9mKHN0cnVjdCBOVEZTX0RFKSArIHNpemVvZih1NjQpKSB7XFxuMTI5MzpcXHRcXHRcXHRcXHRpZiAobikge1xcbjEyOTQ6XFx0XFx0XFx0XFx0XFx0Zm5kX3BvcChmbmQpO1xcbjEyOTU6XFx0XFx0XFx0XFx0XFx0a2ZyZWUobik7XFxuMTI5NjpcXHRcXHRcXHRcXHR9XFxuMTI5NzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMjk4OlxcdFxcdFxcdH1cXG4xMjk5OlxcdFxcbjEzMDA6XFx0XFx0XFx0LyogUmVhZCBuZXh0IGxldmVsLiAqL1xcbjEzMDE6XFx0XFx0XFx0ZXJyID0gaW5keF9yZWFkKGluZHgsIG5pLCBkZV9nZXRfdmJuKGUpLCBcXHUwMDI2bik7XFxuMTMwMjpcXHRcXHRcXHRpZiAoZXJyKVxcbjEzMDM6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xMzA0OlxcdFxcbjEzMDU6XFx0XFx0XFx0LyogVHJ5IG5leHQgbGV2ZWwuICovXFxuMTMwNjpcXHRcXHRcXHRlID0gaGRyX2ZpcnN0X2RlKFxcdTAwMjZuLVxcdTAwM2VpbmRleC1cXHUwMDNlaWhkcik7XFxuMTMwNzpcXHRcXHRcXHRpZiAoIWUpIHtcXG4xMzA4OlxcdFxcdFxcdFxcdGtmcmVlKG4pO1xcbjEzMDk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTMxMDpcXHRcXHRcXHR9XFxuMTMxMTpcXHRcXG4xMzEyOlxcdFxcdFxcdGZuZF9wdXNoKGZuZCwgbiwgZSk7XFxuMTMxMzpcXHRcXHR9XFxuMTMxNDpcXHRcXG4xMzE1OlxcdFxcdGlmIChsZTE2X3RvX2NwdShlLVxcdTAwM2VzaXplKSBcXHUwMDNlIHNpemVvZihzdHJ1Y3QgTlRGU19ERSkpIHtcXG4xMzE2OlxcdFxcdFxcdCplbnRyeSA9IGU7XFxuMTMxNzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xMzE4OlxcdFxcdH1cXG4xMzE5OlxcdFxcbjEzMjA6XFx0cG9wX2xldmVsOlxcbjEzMjE6XFx0XFx0Zm9yICg7Oykge1xcbjEzMjI6XFx0XFx0XFx0aWYgKCFkZV9pc19sYXN0KGUpKVxcbjEzMjM6XFx0XFx0XFx0XFx0Z290byBuZXh0X2l0ZXI7XFxuMTMyNDpcXHRcXG4xMzI1OlxcdFxcdFxcdC8qIFBvcCBvbmUgbGV2ZWwuICovXFxuMTMyNjpcXHRcXHRcXHRpZiAobikge1xcbjEzMjc6XFx0XFx0XFx0XFx0Zm5kX3BvcChmbmQpO1xcbjEzMjg6XFx0XFx0XFx0XFx0a2ZyZWUobi1cXHUwMDNlaW5kZXgpO1xcbjEzMjk6XFx0XFx0XFx0XFx0a2ZyZWUobik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE2OjQzOjI3LjUyNzMxMDU0MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjAzNTExOTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlYnVnZ2luZyBNZW1vcnkgTWFuYWdlbWVudCBpbiBgaW5keF9yZWFkYCoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuLi4gSSdtIGxvb2tpbmcgYXQgdGhlc2UgYGtmcmVlKG4pYCBjYWxscywgYW5kIGl0IGxvb2tzIGxpa2UgYGtmcmVlKG4tXHUwMDNlaW5kZXgpYCBpcyBtaXNzaW5nIGZyb20gc2V2ZXJhbCBvZiB0aGVtLiBUaGF0J3MgYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWshIEJ1dCB3YWl0LCBsZXQgbWUgYmFja3RyYWNrLiBUaGUgYGluZHhfcmVhZGAgZnVuY3Rpb24gYWxsb2NhdGVzICpib3RoKiBgbmAgYW5kIGBuLVx1MDAzZWluZGV4YC4gUmlnaHQsIG9rYXkuIEJ1dCBgbi1cdTAwM2VpbmRleGAuLi4gaXQgY291bGQgYmUgYSBidWZmZXIgaGVhZCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHkuIExldCdzIHNlZS4uLiBsb29raW5nIGF0IGBpbmR4X3JlYWRfcmFgLCB5ZXMsIHRoZXJlIGl0IGlzOiBgaWIgPSBpbi1cdTAwM2VpbmRleDsgaWYgKCFpYikgeyBpYiA9IGttYWxsb2MoYnl0ZXMsIEdGUF9OT0ZTKTtgIE9rYXksIHNvIGBuLVx1MDAzZWluZGV4YCBpcywgaW5kZWVkLCBhIGBrbWFsbG9jYCdkIGJ1ZmZlci4gSXQncyBub3QgYSBgYnVmZmVyX2hlYWRgLCBpdCdzIGp1c3QgYSByZWd1bGFyIGNodW5rIG9mIG1lbW9yeS5cblxuTm93LCBJIHNlZW0gdG8gcmVtZW1iZXIgYHB1dF9pbmR4X25vZGVgIGJlaW5nIHRoZSBwbGFjZSB3aGVyZSBib3RoIGBuYCBhbmQgYG4tXHUwMDNlaW5kZXhgIGFyZSBmcmVlZC4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IGJ5IHF1aWNrbHkgZXhhbWluaW5nIHRoZSBgcHV0X2luZHhfbm9kZWAgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjc1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTY6NDM6MzEuNzMwODI1MzI5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODAzMzM0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHV0X2luZHhfbm9kZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzMy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmczMvZGlyLmM9NDA0PXN0YXRpYyBpbnQgbnRmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcXG4tLVxcbmZzL250ZnMzL2Rpci5jLTU2Mi1cXHRrZnJlZShuYW1lKTtcXG5mcy9udGZzMy9kaXIuYzo1NjM6XFx0cHV0X2luZHhfbm9kZShub2RlKTtcXG5mcy9udGZzMy9kaXIuYy01NjQtXFxuLS1cXG5mcy9udGZzMy9kaXIuYz02MDA9c3RhdGljIGludCBudGZzX2Rpcl9jb3VudChzdHJ1Y3QgaW5vZGUgKmRpciwgYm9vbCAqaXNfZW1wdHksIHNpemVfdCAqZGlycyxcXG4tLVxcbmZzL250ZnMzL2Rpci5jLTY3Ny1vdXQ6XFxuZnMvbnRmczMvZGlyLmM6Njc4OlxcdHB1dF9pbmR4X25vZGUobm9kZSk7XFxuZnMvbnRmczMvZGlyLmMtNjc5LVxcdGlmIChkaXJzKVxcbi0tXFxuZnMvbnRmczMvaW5kZXguYz02ODk9dm9pZCBmbmRfY2xlYXIoc3RydWN0IG50ZnNfZm5kICpmbmQpXFxuLS1cXG5mcy9udGZzMy9pbmRleC5jLTY5OC1cXG5mcy9udGZzMy9pbmRleC5jOjY5OTpcXHRcXHRwdXRfaW5keF9ub2RlKG4pO1xcbmZzL250ZnMzL2luZGV4LmMtNzAwLVxcdFxcdGZuZC1cXHUwMDNlbm9kZXNbaV0gPSBOVUxMO1xcbi0tXFxuZnMvbnRmczMvaW5kZXguYz0xMTY5PWludCBpbmR4X2ZpbmQoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcXG4tLVxcbmZzL250ZnMzL2luZGV4LmMtMTIyNy1cXHRcXHRpZiAoIWUpIHtcXG5mcy9udGZzMy9pbmRleC5jOjEyMjg6XFx0XFx0XFx0cHV0X2luZHhfbm9kZShub2RlKTtcXG5mcy9udGZzMy9pbmRleC5jLTEyMjktXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5mcy9udGZzMy9pbmRleC5jLTEyMzQtXFx0XFx0aWYgKGVycikge1xcbmZzL250ZnMzL2luZGV4LmM6MTIzNTpcXHRcXHRcXHRwdXRfaW5keF9ub2RlKG5vZGUpO1xcbmZzL250ZnMzL2luZGV4LmMtMTIzNi1cXHRcXHRcXHRyZXR1cm4gZXJyO1xcbi0tXFxuZnMvbnRmczMvaW5kZXguYz0xMzU1PWludCBpbmR4X2ZpbmRfcmF3KHN0cnVjdCBudGZzX2luZGV4ICppbmR4LCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXFxuLS1cXG5mcy9udGZzMy9pbmRleC5jLTE0MjktXFx0XFx0XFx0Zm5kX3BvcChmbmQpO1xcbmZzL250ZnMzL2luZGV4LmM6MTQzMDpcXHRcXHRcXHRwdXRfaW5keF9ub2RlKG4pO1xcbmZzL250ZnMzL2luZGV4LmMtMTQzMS1cXHRcXHRcXHRuID0gTlVMTDtcXG4tLVxcbmZzL250ZnMzL2luZGV4LmM9MTYyOD1zdGF0aWMgaW50IGluZHhfaW5zZXJ0X2ludG9fcm9vdChzdHJ1Y3QgbnRmc19pbmRleCAqaW5keCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxcbi0tXFxuZnMvbnRmczMvaW5kZXguYy0xODE5LVxcbmZzL250ZnMzL2luZGV4LmM6MTgyMDpcXHRcXHRwdXRfaW5keF9ub2RlKG4pO1xcbmZzL250ZnMzL2luZGV4LmMtMTgyMS1cXHRcXHRmbmRfY2xlYXIoZm5kKTtcXG4tLVxcbmZzL250ZnMzL2luZGV4LmMtMTg0Mi1vdXRfcHV0X246XFxuZnMvbnRmczMvaW5kZXguYzoxODQzOlxcdHB1dF9pbmR4X25vZGUobik7XFxuZnMvbnRmczMvaW5kZXguYy0xODQ0LW91dF9mcmVlX3JlOlxcbi0tXFxuZnMvbnRmczMvaW5kZXguYz0xODU3PXN0YXRpYyBpbnQgaW5keF9pbnNlcnRfaW50b19idWZmZXIoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsXFxuLS1cXG5mcy9udGZzMy9pbmRleC5jLTE5ODAtXFxuZnMvbnRmczMvaW5kZXguYzoxOTgxOlxcdHB1dF9pbmR4X25vZGUobjIpO1xcbmZzL250ZnMzL2luZGV4LmMtMTk4Mi1cXG4tLVxcbmZzL250ZnMzL2luZGV4LmM9MjIxNj1zdGF0aWMgaW50IGluZHhfZnJlZV9jaGlsZHJlbihzdHJ1Y3QgbnRmc19pbmRleCAqaW5keCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxcbi0tXFxuZnMvbnRmczMvaW5kZXguYy0yMjM4LVxcbmZzL250ZnMzL2luZGV4LmM6MjIzOTpcXHRwdXRfaW5keF9ub2RlKG4pO1xcbmZzL250ZnMzL2luZGV4LmMtMjI0MC1cXG4tLVxcbmZzL250ZnMzL250ZnNfZnMuaD0xMTkxPXN0YXRpYyBpbmxpbmUgdm9pZCBuYl9wdXQoc3RydWN0IG50ZnNfYnVmZmVycyAqbmIpXFxuLS1cXG5mcy9udGZzMy9udGZzX2ZzLmgtMTIwMi1cXG5mcy9udGZzMy9udGZzX2ZzLmg6MTIwMzpzdGF0aWMgaW5saW5lIHZvaWQgcHV0X2luZHhfbm9kZShzdHJ1Y3QgaW5keF9ub2RlICppbilcXG5mcy9udGZzMy9udGZzX2ZzLmgtMTIwNC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE2OjQzOjMxLjkxMTE2NDA1OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDUzODI2MDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRlZXAgRGl2ZSBpbnRvIGBwdXRfaW5keF9ub2RlYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIGFuZCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHB1dF9pbmR4X25vZGVgLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgYW5kIHBvdGVudGlhbCBlZGdlIGNhc2VzLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byBldmFsdWF0ZTpcblxuKiAgICoqQ29yZSBmdW5jdGlvbmFsaXR5OioqIFdoYXQncyBpdCAqYWN0dWFsbHkqIGRvaW5nPyBJcyBpdCB3cml0aW5nIGRpcmVjdGx5LCBvciBpcyBpdCBnb2luZyB0aHJvdWdoIHNvbWUga2luZCBvZiBpbmRpcmVjdGlvbiBvciBidWZmZXJpbmc/IEkgbmVlZCB0byBjbGFyaWZ5IHRoYXQgYmVmb3JlIEkgc3RhcnQgbG9va2luZyBhdCBlZGdlIGNhc2VzLlxuKiAgICoqRGF0YSBzdHJ1Y3R1cmVzOioqIFdoYXQncyB0aGUgdGFyZ2V0IGRhdGEgc3RydWN0dXJlIGZvciB0aGUgaW5zZXJ0aW9uPyBJcyBpdCBhIEItdHJlZSwgYSBoYXNoIHRhYmxlLCBvciBzb21ldGhpbmcgbW9yZSBiZXNwb2tlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29tcGxleGl0eSBhbmQgYWNjZXNzIHBhdHRlcm5zLiBJIGFzc3VtZSB0aGF0IGl0IHJlbGF0ZXMgdG8gYSBzdG9yYWdlIHNvbHV0aW9uLlxuKiAgICoqRXJyb3IgaGFuZGxpbmc6KiogSG93IHJvYnVzdCBpcyBpdD8gV2hhdCBleGNlcHRpb25zIG9yIGVycm9yIGNvZGVzIG1pZ2h0IGl0IHRocm93PyBBcmUgdGhlcmUgY2hlY2tzIGZvciBmdWxsIGNvbmRpdGlvbnMgb3IgY29uZmxpY3Rpbmcgd3JpdGVzPyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgd2VsbCBpdCBkZWFscyB3aXRoIGNvbmN1cnJlbnQgc2l0dWF0aW9ucy5cbiogICAqKlBlcmZvcm1hbmNlIGltcGxpY2F0aW9uczoqKiBXaGVyZSBhcmUgdGhlIHBvdGVudGlhbCBib3R0bGVuZWNrcz8gTWVtb3J5IGFsbG9jYXRpb24/IERpc2sgSS9PPyBMb2NrIGNvbnRlbnRpb24/IFVuZGVyc3RhbmRpbmcgdGhpcyBpcyB2aXRhbCBmb3Igb3B0aW1pemluZyB0aGUgY29kZSBvciBldmVuIHRoZSBhcmNoaXRlY3R1cmUgaXQgc3VwcG9ydHMuXG4qICAgKipDb25jdXJyZW5jeToqKiBIb3cgZG9lcyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0IHdpdGggb3RoZXIgdGhyZWFkcyBvciBwcm9jZXNzZXM/IEFyZSB0aGVyZSBhbnkgbG9ja2luZyBtZWNoYW5pc21zPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGlmIEkgdXNlIGBwdXRfaW5keF9ub2RlYCBjb25jdXJyZW50bHkgZnJvbSBkaWZmZXJlbnQgcGxhY2VzP1xuKiAgICoqQXNzdW1wdGlvbnMqKjogV2hhdCBkb2VzIGl0IGFzc3VtZSBhYm91dCB0aGUgZW52aXJvbm1lbnQgaXQgaXMgYmVpbmcgY2FsbGVkIGluPyBBcmUgdGhlcmUgc2l6ZSBjb25zdHJhaW50cyBvbiB0aGUgZGF0YSBiZWluZyB3cml0dGVuP1xuKiAgICoqUG90ZW50aWFsIGlzc3VlcyoqOiBXaGF0IGFyZSB0aGUgY2FzZXMgSSBuZWVkIHRvIGNoZWNrIHRvIGJlIHN1cmUgaXQgZG9lcyB3aGF0IGl0IGlzIHN1cHBvc2VkIHRvP1xuSSBhbSBnb2luZyB0byBldmFsdWF0ZSB0aGUgY29kZSBwYXRoLiBJIHdhbnQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHdoYXQgaXMgZ29pbmcgb24sIGFuZCB0aGVuLCBJIGNhbiBzdGFydCBsb29raW5nIGZvciBhbnkgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzIxMCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE2OjQzOjM2LjM2NDk5MjkzNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzY0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvbnRmczMvbnRmc19mcy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMDMsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMDM6XFx0c3RhdGljIGlubGluZSB2b2lkIHB1dF9pbmR4X25vZGUoc3RydWN0IGluZHhfbm9kZSAqaW4pXFxuMTIwNDpcXHR7XFxuMTIwNTpcXHRcXHRpZiAoIWluKVxcbjEyMDY6XFx0XFx0XFx0cmV0dXJuO1xcbjEyMDc6XFx0XFxuMTIwODpcXHRcXHRrZnJlZShpbi1cXHUwMDNlaW5kZXgpO1xcbjEyMDk6XFx0XFx0bmJfcHV0KFxcdTAwMjZpbi1cXHUwMDNlbmIpO1xcbjEyMTA6XFx0XFx0a2ZyZWUoaW4pO1xcbjEyMTE6XFx0fVxcbjEyMTI6XFx0XFxuMTIxMzpcXHRzdGF0aWMgaW5saW5lIHZvaWQgbWlfY2xlYXIoc3RydWN0IG1mdF9pbm9kZSAqbWkpXFxuMTIxNDpcXHR7XFxuMTIxNTpcXHRcXHRuYl9wdXQoXFx1MDAyNm1pLVxcdTAwM2VuYik7XFxuMTIxNjpcXHRcXHRrZnJlZShtaS1cXHUwMDNlbXJlYyk7XFxuMTIxNzpcXHRcXHRtaS1cXHUwMDNlbXJlYyA9IE5VTEw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE2OjQzOjM2LjM2NTEzMTM0NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODQ3MjI2MjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgTWFuYWdlbWVudCBpbiBJbmRleCBTdHJ1Y3R1cmVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgaW5kZXggbm9kZXMuIEkgc2VlIHRoYXQgYHB1dF9pbmR4X25vZGVgIGlzIGRvaW5nIGEgY2xlYW4tdXA6IGBrZnJlZShpbi1cdTAwM2VpbmRleCk7IG5iX3B1dChcdTAwMjZpbi1cdTAwM2VuYik7IGtmcmVlKGluKTtgLiBUaGF0J3Mgc3RhbmRhcmQgLSBmcmVlaW5nIHRoZSBpbmRleCBkYXRhLCByZWxlYXNpbmcgYSBjb3VudGVyLCBhbmQgdGhlbiBmcmVlaW5nIHRoZSBub2RlIGl0c2VsZi4gTWFrZXMgcGVyZmVjdCBzZW5zZS5cblxuQnV0IHRoZW4gSSdtIGluIGBpbmR4X2ZpbmRfc29ydGAsIGFuZCBJJ20gc2VlaW5nIHRoaXM6XG5cbmBgYGNcblx0XHRcdC8qIFBvcCBvbmUgbGV2ZWwuICovXG5cdFx0XHRpZiAobikge1xuXHRcdFx0XHRmbmRfcG9wKGZuZCk7XG5cdFx0XHRcdGtmcmVlKG4tXHUwMDNlaW5kZXgpO1xuXHRcdFx0XHRrZnJlZShuKTtcblx0XHRcdH1cbmBgYFxuXG5XYWl0IGEgc2Vjb25kLiBXaHkgYXJlbid0IHRoZXkganVzdCBjYWxsaW5nIGBwdXRfaW5keF9ub2RlKG4pYCBoZXJlPyBJdCBzZWVtcyBsaWtlIHRoaXMgaXMgZHVwbGljYXRpbmcgdGhlIGNsZWFuLXVwIGxvZ2ljLiBJJ20gdXNlZCB0byBzZWVpbmcgY29kZSByZXVzZSB0byBhdm9pZCByZWR1bmRhbmN5IGFuZCBwb3RlbnRpYWwgYnVncy4gSXQncyBjbGVhbmVyLCBhbmQgZWFzaWVyIHRvIG1haW50YWluLiBUaGlzIGR1cGxpY2F0aW9uIGlzIGEgYml0IG9mIGEgcmVkIGZsYWcuXG5cbkkgbmVlZCB0byBzZWUgaWYgdGhpcyBwYXR0ZXJuIGlzIHJlcGVhdGVkIGVsc2V3aGVyZSBpbiBgaW5keF9maW5kX3NvcnRgLiBMZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGluc3RhbmNlcyBvZiBga2ZyZWUobilgIGluIHRoaXMgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGZ1bmN0aW9uIGlzbid0IHVzaW5nIHRoZSBhbHJlYWR5IGVzdGFibGlzaGVkIGBwdXRfaW5keF9ub2RlYCBhbmQgcG90ZW50aWFsbHkgcmVmYWN0b3IgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4NjQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNjo0Mzo0MS4yMTIzNjk4NjhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk4NjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL250ZnMzL2luZGV4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTI5MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI5MDpcXHRcXHR3aGlsZSAoZGVfaGFzX3Zjbl9leChlKSkge1xcbjEyOTE6XFx0XFx0XFx0aWYgKGxlMTZfdG9fY3B1KGUtXFx1MDAzZXNpemUpIFxcdTAwM2NcXG4xMjkyOlxcdFxcdFxcdCAgICBzaXplb2Yoc3RydWN0IE5URlNfREUpICsgc2l6ZW9mKHU2NCkpIHtcXG4xMjkzOlxcdFxcdFxcdFxcdGlmIChuKSB7XFxuMTI5NDpcXHRcXHRcXHRcXHRcXHRmbmRfcG9wKGZuZCk7XFxuMTI5NTpcXHRcXHRcXHRcXHRcXHRrZnJlZShuKTtcXG4xMjk2OlxcdFxcdFxcdFxcdH1cXG4xMjk3OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEyOTg6XFx0XFx0XFx0fVxcbjEyOTk6XFx0XFxuMTMwMDpcXHRcXHRcXHQvKiBSZWFkIG5leHQgbGV2ZWwuICovXFxuMTMwMTpcXHRcXHRcXHRlcnIgPSBpbmR4X3JlYWQoaW5keCwgbmksIGRlX2dldF92Ym4oZSksIFxcdTAwMjZuKTtcXG4xMzAyOlxcdFxcdFxcdGlmIChlcnIpXFxuMTMwMzpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjEzMDQ6XFx0XFxuMTMwNTpcXHRcXHRcXHQvKiBUcnkgbmV4dCBsZXZlbC4gKi9cXG4xMzA2OlxcdFxcdFxcdGUgPSBoZHJfZmlyc3RfZGUoXFx1MDAyNm4tXFx1MDAzZWluZGV4LVxcdTAwM2VpaGRyKTtcXG4xMzA3OlxcdFxcdFxcdGlmICghZSkge1xcbjEzMDg6XFx0XFx0XFx0XFx0a2ZyZWUobik7XFxuMTMwOTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMzEwOlxcdFxcdFxcdH1cXG4xMzExOlxcdFxcbjEzMTI6XFx0XFx0XFx0Zm5kX3B1c2goZm5kLCBuLCBlKTtcXG4xMzEzOlxcdFxcdH1cXG4xMzE0OlxcdFxcbjEzMTU6XFx0XFx0aWYgKGxlMTZfdG9fY3B1KGUtXFx1MDAzZXNpemUpIFxcdTAwM2Ugc2l6ZW9mKHN0cnVjdCBOVEZTX0RFKSkge1xcbjEzMTY6XFx0XFx0XFx0KmVudHJ5ID0gZTtcXG4xMzE3OlxcdFxcdFxcdHJldHVybiAwO1xcbjEzMTg6XFx0XFx0fVxcbjEzMTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE2OjQzOjQxLjIxMjY3MTIyOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NjMyMzczNzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBNZW1vcnkgTGVhayBpbiBgaW5keF9maW5kX3NvcnRgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgaW5keF9maW5kX3NvcnRgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgdGhpcyBzZWN0aW9uIG9mIGNvZGU6XG5cbmBgYGNcblx0XHR3aGlsZSAoZGVfaGFzX3Zjbl9leChlKSkge1xuXHRcdFx0aWYgKGxlMTZfdG9fY3B1KGUtXHUwMDNlc2l6ZSkgXHUwMDNjXG5cdFx0XHQgICAgc2l6ZW9mKHN0cnVjdCBOVEZTX0RFKSArIHNpemVvZih1NjQpKSB7XG5cdFx0XHRcdGlmIChuKSB7XG5cdFx0XHRcdFx0Zm5kX3BvcChmbmQpO1xuXHRcdFx0XHRcdGtmcmVlKG4pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuXHRcdFx0fVxuYGBgXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGlmIGBuYCBpcyBwb3BwZWQgZnJvbSBgZm5kYCwgaXQgKmhhZCogdG8gaGF2ZSBiZWVuIHB1c2hlZCB0aGVyZSBlYXJsaWVyLiBBbmQgaWYgaXQgd2FzIHB1c2hlZCB0aGVyZSwgaXQgd2FzIGFsbG9jYXRlZCBieSBgaW5keF9yZWFkYC4gSWYgaXQgd2FzIGZyb20gYGluZHhfcmVhZGAsIGl0ICpzaG91bGQqIGhhdmUgYG4tXHUwMDNlaW5kZXhgIGFuZCBgbi1cdTAwM2VuYmAgbWVtYmVycy4gQnV0LCB0aGlzIGNvZGUganVzdCBkb2VzIGEgYGtmcmVlKG4pYC4gVGhhdCBsb29rcyBsaWtlIGEgcG90ZW50aWFsIG1lbW9yeSBsZWFrIG9mIGJvdGggYG4tXHUwMDNlaW5kZXhgIGFuZCBgbi1cdTAwM2VuYmAuIFdhaXQgYSBzZWNvbmQgdGhvdWdoLCBgbmJfcHV0YCByZWxlYXNlcyBidWZmZXIgaGVhZHMuIFNvLCBpZiBga2ZyZWUobilgIGlzIGNhbGxlZCB3aXRob3V0IGEgY2FsbCB0byBgbmJfcHV0YCBmaXJzdCwgd2UncmUgZGVmaW5pdGVseSBsZWFraW5nIGJ1ZmZlciBoZWFkcyFcblxuSSByZW1lbWJlciB0aGF0IGBuYCBpcyBwb3BwZWQgZnJvbSBgZm5kYCBpbiBgaW5keF9maW5kX3NvcnRgIGFuZCB0aGF0IGBmbmRfcHVzaGAgcHVzaGVzIGBuYCAqYW5kKiBgZWAgdG8gYGZuZGAuXG5cbk9rYXksIHNvIEkgd29uZGVyIGlmIGBmbmRfY2xlYXJgIHdoaWNoIHNob3VsZCBjYWxsIGBwdXRfaW5keF9ub2RlYCBmb3IgYWxsIG5vZGVzIGluIGBmbmRgIGlzIGRvaW5nIHNvbWV0aGluZy4gWWVwLCBgZm5kX2NsZWFyYCBkb2VzIGluZGVlZCBjYWxsIGBwdXRfaW5keF9ub2RlYCBmb3IgYWxsIHRoZSBub2RlcyBpbiBgZm5kYC4gU28sIHdoeSBpcyBgaW5keF9maW5kX3NvcnRgIGNhbGxpbmcgYGtmcmVlKG4pYCBpbnN0ZWFkIG9mIGBwdXRfaW5keF9ub2RlKG4pYD8gTWFrZXMgbm8gc2Vuc2UhIEkgbmVlZCB0byBzZWUgaWYgYGluZHhfZmluZF9zb3J0YCBhY3R1YWxseSAqdXNlcyogYHB1dF9pbmR4X25vZGVgLiBPa2F5LCBpdCBkb2Vzbid0IHNlZW0gdG8sIGZyb20gYSBxdWljayBjaGVjay5cblxuQWxyaWdodCwgbG9va2luZyBhdCB0aGUgcGF0Y2gsIEkgc2VlIHRoYXQgdGhlIHBhdGNoICpvbmx5KiBhZGRlZCBga2ZyZWUobi1cdTAwM2VpbmRleCk7YCBpbiBhIHNpbmdsZSBzcG90OlxuXG5gYGBjXG4gXHRcdC8qIFBvcCBvbmUgbGV2ZWwuICovXG4gXHRcdGlmIChuKSB7XG4gXHRcdFx0Zm5kX3BvcChmbmQpO1xuK1x0XHRcdGtmcmVlKG4tXHUwMDNlaW5kZXgpO1xuIFx0XHRcdGtmcmVlKG4pO1xuIFx0XHR9XG5gYGBcblxuV2FpdCBhIHNlY29uZC4uLiB3aGVyZSBpcyB0aGUgY2FsbCB0byBgbmJfcHV0KFx1MDAyNm4tXHUwMDNlbmIpYD8gSXQncyBtaXNzaW5nIGVudGlyZWx5ISBBbmQgYG4tXHUwMDNlbmJgICppcyogYSBgc3RydWN0IG50ZnNfYnVmZmVyc2AuIEkgbmVlZCB0byBjaGVjayBgbmJfcHV0YCB0byBiZSBzdXJlLiBJdCBsb29rcyBsaWtlIGl0LiBUaGlzIGlzIGRlZmluaXRlbHkgYSBidWcgYW5kIGEgcG90ZW50aWFsIG1lbW9yeSBsZWFrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDc1MSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE2OjQzOjQ5Ljg0NTA0ODAyMloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjQ5NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvbnRmczMvbnRmc19mcy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExOTEsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExOTE6XFx0c3RhdGljIGlubGluZSB2b2lkIG5iX3B1dChzdHJ1Y3QgbnRmc19idWZmZXJzICpuYilcXG4xMTkyOlxcdHtcXG4xMTkzOlxcdFxcdHUzMiBpLCBuYnVmcyA9IG5iLVxcdTAwM2VuYnVmcztcXG4xMTk0OlxcdFxcbjExOTU6XFx0XFx0aWYgKCFuYnVmcylcXG4xMTk2OlxcdFxcdFxcdHJldHVybjtcXG4xMTk3OlxcdFxcbjExOTg6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5idWZzOyBpKyspXFxuMTE5OTpcXHRcXHRcXHRwdXRfYmgobmItXFx1MDAzZWJoW2ldKTtcXG4xMjAwOlxcdFxcdG5iLVxcdTAwM2VuYnVmcyA9IDA7XFxuMTIwMTpcXHR9XFxuMTIwMjpcXHRcXG4xMjAzOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfaW5keF9ub2RlKHN0cnVjdCBpbmR4X25vZGUgKmluKVxcbjEyMDQ6XFx0e1xcbjEyMDU6XFx0XFx0aWYgKCFpbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTY6NDM6NDkuODQ1MzMxMDMzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMjgzOTQzODc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgQnVmZmVyIEhlYWQgTGVhayBpbiBhIEZpbGVzeXN0ZW0gTW9kdWxlKipcblxuUmlnaHQsIHNvIGBuYl9wdXRgIGV4cGxpY2l0bHkgcmVsZWFzZXMgYnVmZmVyIGhlYWRzLiBUaGF0IG11Y2ggaXMgY2xlYXIuIFRoZSBwcm9ibGVtICphcHBlYXJzKiB0byBzdGVtIGZyb20gaG93IGBpbmR4X2ZpbmRfc29ydGAgY2xlYW5zIHVwLiBJdCdzIGRvaW5nIGEgc2ltcGxlIGBrZnJlZWAgb2YgdGhlIGBuLVx1MDAzZWluZGV4YCBhbmQgYG5gIHN0cnVjdHVyZXMuIElmIGBuYi1cdTAwM2VuYnVmc2AgaXMgZ3JlYXRlciB0aGFuIHplcm8sIHRob3NlIGJ1ZmZlciBoZWFkcyBhcmUgKm5vdCogYmVpbmcgcmVsZWFzZWQgaW4gYGluZHhfZmluZF9zb3J0YCwgbWVhbmluZyB3ZSBoYXZlIGEgbWVtb3J5IGxlYWshXG5cbkJ1dCBob2xkIG9uLi4uIEFtIEkgbWlzc2luZyBzb21ldGhpbmc/IERvZXMgYGluZHhfcmVhZGAgZXZlbiBzZXQgYG5iLVx1MDAzZW5idWZzYD8gSWYgYGluZHhfcmVhZGAgbmV2ZXIgc2V0cyBpdCwgdGhlbiB0aGlzIGlzIG5vdCBhbiBpc3N1ZS4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGluIG9yZGVyIHRvIGNvbmZpcm0gd2hldGhlciB0aGVyZSBhcmUgYnVmZmVyIGhlYWRzIGludm9sdmVkLlxuXG5Pa2F5LCBteSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBob3cgYGluZHhfcmVhZF9yYWAgd29ya3MuIFRoYXQgd2lsbCBiZSB3aGVyZSBJIGZvY3VzIG15IGF0dGVudGlvbiBuZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjEyMywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTY6NDQ6MDAuMTI5Mjc4NDdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk5OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL250ZnMzL2luZGV4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA5OCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA5ODpcXHRcXHRkb3duX3JlYWQobG9jayk7XFxuMTA5OTpcXHRcXHRlcnIgPSBudGZzX3JlYWRfYmhfcmEoc2JpLCBydW4sIHZibywgXFx1MDAyNmliLVxcdTAwM2VyaGRyLCBieXRlcywgXFx1MDAyNmluLVxcdTAwM2VuYiwgcmEpO1xcbjExMDA6XFx0XFx0dXBfcmVhZChsb2NrKTtcXG4xMTAxOlxcdFxcdGlmICghZXJyKVxcbjExMDI6XFx0XFx0XFx0Z290byBvaztcXG4xMTAzOlxcdFxcbjExMDQ6XFx0XFx0aWYgKGVyciA9PSAtRV9OVEZTX0ZJWFVQKVxcbjExMDU6XFx0XFx0XFx0Z290byBvaztcXG4xMTA2OlxcdFxcbjExMDc6XFx0XFx0aWYgKGVyciAhPSAtRU5PRU5UKVxcbjExMDg6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTEwOTpcXHRcXG4xMTEwOlxcdFxcdG5hbWUgPSBcXHUwMDI2c19pbmRleF9uYW1lc1tpbmR4LVxcdTAwM2V0eXBlXTtcXG4xMTExOlxcdFxcdGRvd25fd3JpdGUobG9jayk7XFxuMTExMjpcXHRcXHRlcnIgPSBhdHRyX2xvYWRfcnVuc19yYW5nZShuaSwgQVRUUl9BTExPQywgbmFtZS1cXHUwMDNlbmFtZSwgbmFtZS1cXHUwMDNlbmFtZV9sZW4sXFxuMTExMzpcXHRcXHRcXHRcXHRcXHQgICBydW4sIHZibywgdmJvICsgYnl0ZXMpO1xcbjExMTQ6XFx0XFx0dXBfd3JpdGUobG9jayk7XFxuMTExNTpcXHRcXHRpZiAoZXJyKVxcbjExMTY6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTExNzpcXHRcXG4xMTE4OlxcdFxcdGRvd25fcmVhZChsb2NrKTtcXG4xMTE5OlxcdFxcdGVyciA9IG50ZnNfcmVhZF9iaF9yYShzYmksIHJ1biwgdmJvLCBcXHUwMDI2aWItXFx1MDAzZXJoZHIsIGJ5dGVzLCBcXHUwMDI2aW4tXFx1MDAzZW5iLCByYSk7XFxuMTEyMDpcXHRcXHR1cF9yZWFkKGxvY2spO1xcbjExMjE6XFx0XFx0aWYgKGVyciA9PSAtRV9OVEZTX0ZJWFVQKVxcbjExMjI6XFx0XFx0XFx0Z290byBvaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTY6NDQ6MDAuMTI5NDgwNDhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTEwMzkwNjYxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgQnVmZmVyIEhlYWQgTGVhayBpbiB0aGUgTlRGUzMgRmlsZXN5c3RlbSBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBgbnRmc19yZWFkX2JoX3JhYCBkZWZpbml0ZWx5IHJlYWRzIGJ1ZmZlciBoZWFkcyBpbnRvIGBpbi1cdTAwM2VuYmAuIFRoYXQgbWVhbnMgYGluLVx1MDAzZW5iYCB3aWxsIGhvbGQgYnVmZmVyIGhlYWRzLiBOb3csIGlmIGBpbmR4X2ZpbmRfc29ydGAgZG9lc24ndCBjYWxsIGBuYl9wdXRgLCB3ZSd2ZSBnb3QgYSBwb3RlbnRpYWwgbGVhayByaWdodCB0aGVyZS4gQnV0IHdhaXQsIHdoeSBkaWQgdGhlIHBhdGNoIG9ubHkgaW5jbHVkZSBga2ZyZWUobi1cdTAwM2VpbmRleClgPyBDb3VsZCBpdCBiZSB0aGF0IGBuLVx1MDAzZW5iYCBpcyBzb21ldGltZXMgZW1wdHk/XG5cbkhvbGQgb24uLi4gcGVyaGFwcyBgbnRmc19yZWFkX2JoX3JhYCBpc24ndCBldmVuIGNhbGxlZCBpZiBgaW5keF9yZWFkYCBmYWlscz8gQnV0IG5vLCBgbmAgaXMgcG9wcGVkIGZyb20gYGZuZGAgaW4gYGluZHhfZmluZF9zb3J0YC4gSWYgaXQncyBpbiBgZm5kYCwgaXQgd2FzIHB1c2hlZCB0aGVyZSBieSBgZm5kX3B1c2hgLiBgZm5kX3B1c2hgIGdldHMgY2FsbGVkIGFmdGVyIGBpbmR4X3JlYWRgIHN1Y2NlZWRzLiBTbywgd2UgKmtub3cqIGBuYCB3YXMgcmVhZCBzdWNjZXNzZnVsbHksIGFuZCBgaW4tXHUwMDNlbmJgICpzaG91bGQqIGNvbnRhaW4gYnVmZmVyIGhlYWRzLlxuXG5BaGEhIElmIGBpbmR4X2ZpbmRfc29ydGAgb25seSBkb2VzIGBrZnJlZShuLVx1MDAzZWluZGV4KTsga2ZyZWUobik7YCwgdGhhdCdzIGEgZGVmaW5pdGUgYnVmZmVyIGhlYWQgbGVhayEgTGV0J3MganVzdCBkb3VibGUtY2hlY2sgdGhlIHBhdGNoIHRvIG1ha2Ugc3VyZSB0aGUgYXV0aG9yIGRpZG4ndCBpbnRlbmQgc29tZXRoaW5nIGVsc2UuXG5cblllcCwgdGhlIHBhdGNoIGlzIGV4YWN0bHkgYXMgZGVzY3JpYmVkLCBleHBsaWNpdGx5IGFkZGluZyBga2ZyZWUobi1cdTAwM2VpbmRleClgIGFuZCBga2ZyZWUobilgLCB3aGljaCBpcyBzaG93biBiZWxvdzpcblxuYGBgZGlmZlxuQEAgLTEzMjUsNiArMTMyNSw3IEBAIGludCBpbmR4X2ZpbmRfc29ydChzdHJ1Y3QgbnRmc19pbmRleCAqaW5keCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxuIFx0XHQvKiBQb3Agb25lIGxldmVsLiAqL1xuIFx0XHRpZiAobikge1xuIFx0XHRcdGZuZF9wb3AoZm5kKTtcbitcdFx0XHRrZnJlZShuLVx1MDAzZWluZGV4KTtcbiBcdFx0XHRrZnJlZShuKTtcbiBcdFx0fVxuYGBgXG5cbldhaXQgYSBzZWNvbmQsIHdoeSBkaWRuJ3QgdGhleSB1c2UgYHB1dF9pbmR4X25vZGUobilgPyBMZXQncyByZWZyZXNoIG91ciBtZW1vcnkgb24gd2hhdCB0aGF0IGZ1bmN0aW9uIGRvZXMuXG5cbmBgYGNcbnN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfaW5keF9ub2RlKHN0cnVjdCBpbmR4X25vZGUgKmluKVxue1xuXHRpZiAoIWluKVxuXHRcdHJldHVybjtcblxuXHRrZnJlZShpbi1cdTAwM2VpbmRleCk7XG5cdG5iX3B1dChcdTAwMjZpbi1cdTAwM2VuYik7XG5cdGtmcmVlKGluKTtcbn1cbmBgYFxuXG5JZiBgcHV0X2luZHhfbm9kZShuKWAgd2FzIHVzZWQsIGl0IHdvdWxkIGZyZWUgYGluLVx1MDAzZWluZGV4YCwgcHV0IGBpbi1cdTAwM2VuYmAsICphbmQqIGZyZWUgYGluYC4gQnV0IGl0IGRvZXNuJ3QuIFRoZXkgc3BlY2lmaWNhbGx5IGFkZGVkIGBrZnJlZShuLVx1MDAzZWluZGV4KWAgKmFuZCoga2VwdCBga2ZyZWUobilgLiBTbyBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIHBvc3NpYmxlIHRoYXQgYG4tXHUwMDNlbmJgIGlzIGFscmVhZHkgcHV0PyBOby4gVGhlIHBhdGNoIGxvb2tzIGJ1Z2d5LCBkb2Vzbid0IGl0P1xuXG5SZWdhcmRsZXNzLCB0aGUgcGF0Y2ggdG91Y2hlcyBgZnMvbnRmczMvaW5kZXguY2AsIHRoZSBOVEZTMyBmaWxlc3lzdGVtIGRyaXZlci4gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhaW1lZCBhdCBmaXhpbmcgYSBtZW1vcnkgbGVhayAob2YgYG4tXHUwMDNlaW5kZXhgKSwgYnV0IGl0IGxvb2tzIGxpa2UgaXQgZG9lcyBpdCBpbmNvcnJlY3RseS4gSXMgdGhpcyByZWFjaGFibGUgY29kZT8gRGVmaW5pdGVseS4gYGluZHhfZmluZF9zb3J0YCBnZXRzIGNhbGxlZCBkdXJpbmcgZGlyZWN0b3J5IG9wZXJhdGlvbnMgb3IgaW5kZXggbG9va3Vwcy4gTm93IEkgbmVlZCB0byBjaGVjayB3aGVyZSBgaW5keF9maW5kX3NvcnRgIGlzIGNhbGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4NTIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNjo0NDowOS4yMzMzOTE0ODlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTg0NjQzNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5keF9maW5kX3NvcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmczMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMzL2ZzbnRmcy5jPTIwODE9aW50IG50ZnNfaW5zZXJ0X3NlY3VyaXR5KHN0cnVjdCBudGZzX3NiX2luZm8gKnNiaSxcXG4tLVxcbmZzL250ZnMzL2ZzbnRmcy5jLTIxNjQtXFxuZnMvbnRmczMvZnNudGZzLmM6MjE2NTpcXHRcXHRlcnIgPSBpbmR4X2ZpbmRfc29ydChpbmR4X3NkaCwgbmksIHJvb3Rfc2RoLFxcbmZzL250ZnMzL2ZzbnRmcy5jLTIxNjYtXFx0XFx0XFx0XFx0ICAgICAoc3RydWN0IE5URlNfREUgKiopXFx1MDAyNmUsIGZuZF9zZGgpO1xcbi0tXFxuZnMvbnRmczMvaW5kZXguYz0xMTY5PWludCBpbmR4X2ZpbmQoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcXG4tLVxcbmZzL250ZnMzL2luZGV4LmMtMTI0My1cXG5mcy9udGZzMy9pbmRleC5jOjEyNDQ6aW50IGluZHhfZmluZF9zb3J0KHN0cnVjdCBudGZzX2luZGV4ICppbmR4LCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXFxuZnMvbnRmczMvaW5kZXguYy0xMjQ1LVxcdFxcdCAgIGNvbnN0IHN0cnVjdCBJTkRFWF9ST09UICpyb290LCBzdHJ1Y3QgTlRGU19ERSAqKmVudHJ5LFxcbi0tXFxuZnMvbnRmczMvbnRmc19mcy5oPTc1NT1pbnQgaW5keF9maW5kKHN0cnVjdCBudGZzX2luZGV4ICppbmR4LCBzdHJ1Y3QgbnRmc19pbm9kZSAqZGlyLFxcbi0tXFxuZnMvbnRmczMvbnRmc19mcy5oLTc1OC1cXHQgICAgICBzdHJ1Y3QgbnRmc19mbmQgKmZuZCk7XFxuZnMvbnRmczMvbnRmc19mcy5oOjc1OTppbnQgaW5keF9maW5kX3NvcnQoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcXG5mcy9udGZzMy9udGZzX2ZzLmgtNzYwLVxcdFxcdCAgIGNvbnN0IHN0cnVjdCBJTkRFWF9ST09UICpyb290LCBzdHJ1Y3QgTlRGU19ERSAqKmVudHJ5LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNjo0NDoxMS4xNTE4NjA2NTdaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk1NDA1NTM2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRGl2aW5nIGludG8gdGhlIGBudGZzX2luc2VydF9zZWN1cml0eWAgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCB0aGUgc3lzdGVtIGlzIGNhbGxpbmcgYG50ZnNfaW5zZXJ0X3NlY3VyaXR5YC4gVGhhdCdzIGEga2V5IGZ1bmN0aW9uIGZvciBtYW5hZ2luZyBzZWN1cml0eSBkZXNjcmlwdG9ycyB3aXRoaW4gdGhlIE5URlMgZmlsZSBzeXN0ZW0uIExldCdzIGRpZyBpbiBhbmQgc2VlIGV4YWN0bHkgd2hhdCdzIGdvaW5nIG9uIHdpdGhpbiBgbnRmc19pbnNlcnRfc2VjdXJpdHlgLiBJdCdzIHRpbWUgdG8gdW5kZXJzdGFuZCBob3cgc2VjdXJpdHkgYXR0cmlidXRlcyBhcmUgYmVpbmcgYXBwbGllZCBhdCB0aGlzIHBvaW50LiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBleGFjdCBsb2dpYyB1c2VkIGFuZCBwb3RlbnRpYWwgcGl0ZmFsbHMgdG8gbG9vayBmb3IgaW4gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NTk3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTY6NDQ6MTQuMTA1OTIwOTk5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjQxNTg5NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnRmc19pbnNlcnRfc2VjdXJpdHlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmczMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMzL2ZzbnRmcy5jPTE5ODE9aW50IG50ZnNfZ2V0X3NlY3VyaXR5X2J5X2lkKHN0cnVjdCBudGZzX3NiX2luZm8gKnNiaSwgX19sZTMyIHNlY3VyaXR5X2lkLFxcbi0tXFxuZnMvbnRmczMvZnNudGZzLmMtMjA3MC0vKlxcbmZzL250ZnMzL2ZzbnRmcy5jOjIwNzE6ICogbnRmc19pbnNlcnRfc2VjdXJpdHkgLSBJbnNlcnQgc2VjdXJpdHkgZGVzY3JpcHRvciBpbnRvICRTZWN1cmU6OlNEUy5cXG5mcy9udGZzMy9mc250ZnMuYy0yMDcyLSAqXFxuLS1cXG5mcy9udGZzMy9mc250ZnMuYy0yMDgwLSAqL1xcbmZzL250ZnMzL2ZzbnRmcy5jOjIwODE6aW50IG50ZnNfaW5zZXJ0X3NlY3VyaXR5KHN0cnVjdCBudGZzX3NiX2luZm8gKnNiaSxcXG5mcy9udGZzMy9mc250ZnMuYy0yMDgyLVxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgU0VDVVJJVFlfREVTQ1JJUFRPUl9SRUxBVElWRSAqc2QsXFxuLS1cXG5mcy9udGZzMy9pbm9kZS5jPTExODM9aW50IG50ZnNfY3JlYXRlX2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL250ZnMzL2lub2RlLmMtMTMzNS1cXHRcXHRcXHRpZiAoc2VjdXJpdHlfaWQgPT0gU0VDVVJJVFlfSURfSU5WQUxJRCBcXHUwMDI2XFx1MDAyNlxcbmZzL250ZnMzL2lub2RlLmM6MTMzNjpcXHRcXHRcXHQgICAgIW50ZnNfaW5zZXJ0X3NlY3VyaXR5KHNiaSwgc2QsIHNkX3NpemUsXFxuZnMvbnRmczMvaW5vZGUuYy0xMzM3LVxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnNlY3VyaXR5X2lkLCBOVUxMKSlcXG4tLVxcbmZzL250ZnMzL250ZnNfZnMuaD03MTA9aW50IG50ZnNfZ2V0X3NlY3VyaXR5X2J5X2lkKHN0cnVjdCBudGZzX3NiX2luZm8gKnNiaSwgX19sZTMyIHNlY3VyaXR5X2lkLFxcbi0tXFxuZnMvbnRmczMvbnRmc19mcy5oLTcxMi1cXHRcXHRcXHQgICAgc2l6ZV90ICpzaXplKTtcXG5mcy9udGZzMy9udGZzX2ZzLmg6NzEzOmludCBudGZzX2luc2VydF9zZWN1cml0eShzdHJ1Y3QgbnRmc19zYl9pbmZvICpzYmksXFxuZnMvbnRmczMvbnRmc19mcy5oLTcxNC1cXHRcXHRcXHQgY29uc3Qgc3RydWN0IFNFQ1VSSVRZX0RFU0NSSVBUT1JfUkVMQVRJVkUgKnNkLFxcbi0tXFxuZnMvbnRmczMveGF0dHIuYz04NjI9c3RhdGljIG5vaW5saW5lIGludCBudGZzX3NldHhhdHRyKGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLFxcbi0tXFxuZnMvbnRmczMveGF0dHIuYy05NDUtXFxuZnMvbnRmczMveGF0dHIuYzo5NDY6XFx0XFx0ZXJyID0gbnRmc19pbnNlcnRfc2VjdXJpdHkobmktXFx1MDAzZW1pLnNiaSwgdmFsdWUsIHNpemUsXFxuZnMvbnRmczMveGF0dHIuYy05NDctXFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNnNlY3VyaXR5X2lkLCBcXHUwMDI2aW5zZXJ0ZWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNjo0NDoxNC43NzAwODU3NzRaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwMjM3NjA1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipEZWJ1Z2dpbmcgdGhlIE5URlMzIE1vZHVsZSoqXG5cblJpZ2h0LCBzbyB0aGlzIGlzIHRyaWdnZXJlZCB3aXRoaW4gYG50ZnNfY3JlYXRlX2lub2RlYCBhbmQgYG50ZnNfc2V0eGF0dHJgLiBHb29kLCB0aGF0IG5hcnJvd3MgZG93biB0aGUgc2NvcGUgY29uc2lkZXJhYmx5LiBJIGNhbiBzZWUgdGhhdCB0aGlzIGlzIGRlZmluaXRlbHkgYW4gYWN0aXZlIGNvZGUgcGF0aDsgaXQncyByZWFjaGFibGUgYW5kIHdvcmtpbmcgYXMgZXhwZWN0ZWQgd2l0aGluIHRoZSBmaWxlIHN5c3RlbSBvcGVyYXRpb25zLiBUaGUgcGF0Y2ggYWltcyB0byBhZGRyZXNzIGEgbWVtb3J5IGxlYWsgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGluZHhfZmluZF9zb3J0YCBmdW5jdGlvbi5cblxuTm93LCB0aGF0IG5hbWUgcmluZ3MgYSBiZWxsLi4uIGBpbmR4X2ZpbmRfc29ydGAuIEFuZCBpdCBqdXN0IGNsaWNrZWQsIGBpbmR4X2ZpbmRfc29ydGAgaXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmchIEEgZnVuY3Rpb24gd2l0aCBcInNvcnRcIiBpbiBpdHMgbmFtZSBzdWdnZXN0cyBkYXRhIG1hbmlwdWxhdGlvbiwgYW5kIHRob3NlIGFyZSBvZnRlbiBwcm9uZSB0byBvZmYtYnktb25lIGVycm9ycyBvciBpbmNvcnJlY3QgbWVtb3J5IGhhbmRsaW5nLCB3aGljaCBpcyBhIGdyZWF0IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgd2hlbiB3cml0aW5nIGEgZnV6emVyLiBJdCdzIHRpbWUgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgTlRGUzMgdG8gbWFrZSBzdXJlIEkndmUgZ290IGV2ZXJ5dGhpbmcgZW5hYmxlZCBmb3IgZWZmZWN0aXZlIHRlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NDAxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTY6NDQ6MTguNjcyNDY0NDk1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTU2ODkxODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5URlMzX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzMy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvbnRmczMvS2NvbmZpZzoyOmNvbmZpZyBOVEZTM19GU1xcbmZzL250ZnMzL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiTlRGUyBSZWFkLVdyaXRlIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9udGZzMy9LY29uZmlnPTI4PWNvbmZpZyBOVEZTM19MWlhfWFBSRVNTXFxuLS1cXG5mcy9udGZzMy9LY29uZmlnLTM3LVxcbmZzL250ZnMzL0tjb25maWc6Mzg6Y29uZmlnIE5URlMzX0ZTX1BPU0lYX0FDTFxcbmZzL250ZnMzL0tjb25maWctMzktXFx0Ym9vbCBcXFwiTlRGUyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTY6NDQ6MTguOTI4MTYyMDgxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MTAxOTgwMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5URlMzIENvbmZpZ3VyYXRpb24gT3B0aW9ucyBmb3IgWGF0dHIgYW5kIFNlY3VyaXR5IERlc2NyaXB0b3IgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgYE5URlMzX0ZTYCBjb25maWcsIHRoYXQncyB0aGUgYmFzZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGV4dGVuZGVkIGF0dHJpYnV0ZXMgKHhhdHRyKSBhbmQgc2VjdXJpdHkgZGVzY3JpcHRvcnMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBOVEZTMyBmaWxlc3lzdGVtLiBUaGUga2V5IGhlcmUgaXMgdG8gZGV0ZXJtaW5lIHdoaWNoIGNvbmZpZ3VyYXRpb25zIGluZmx1ZW5jZSB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBhcmUgdGhlcmUgKmFueSogb3RoZXIgY29uZmlnIG9wdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudD8gVGhlIGZpcnN0IHRoYXQganVtcHMgb3V0IGlzIGBOVEZTM19GU19QT1NJWF9BQ0xgLiBUaGF0IGNvdWxkIGRlZmluaXRlbHkgYmUgdGllZCBpbjsgSSBuZWVkIHRvIHNlZSBpZiBpdCBwbGF5cyBhbnkgcm9sZSBpbiBob3cgeGF0dHIgb3Igc2VjdXJpdHkgZGVzY3JpcHRvcnMgYXJlIG1hbmFnZWQsIHNwZWNpZmljYWxseS5cblxuTm93LCBhIGNydWNpYWwgY29ubmVjdGlvbjogSSByZW1lbWJlciBzZWVpbmcgYG50ZnNfaW5zZXJ0X3NlY3VyaXR5YCBiZWluZyBjYWxsZWQgZnJvbSBgbnRmc19zZXR4YXR0cmAuIFRoYXQncyBhIHN0cm9uZyBpbmRpY2F0aW9uIHRoYXQgYW55IGNvbmZpZyBhZmZlY3RpbmcgYG50ZnNfc2V0eGF0dHJgIHdpbGwgaGF2ZSBhbiBpbXBhY3QuXG5cblJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS4gSSdsbCBjaGVjayBgZnMvbnRmczMveGF0dHIuY2AgYmVjYXVzZSB0aGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0aGUgYG50ZnNfc2V0eGF0dHJgIGZ1bmN0aW9uIHRvIGJlIGRlZmluZWQuIEkgd2FudCB0byBzZWUgaWYgYG50ZnNfc2V0eGF0dHJgIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgb3IgZ3VhcmRlZCBieSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgY2xlYXJlc3QgcGljdHVyZSBvZiBob3cgdGhlc2UgY29uZmlncyBpbnRlcmFjdCB3aXRoIHhhdHRyIGFuZCBzZWN1cml0eSBkZXNjcmlwdG9yIG1hbmFnZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODg1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE2OjQ0OjIzLjMzODM2MjkxNVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEyOTA1NzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm50ZnNfc2V0eGF0dHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmczMveGF0dHIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzMy94YXR0ci5jPTg1Mz1zdGF0aWMgYm9vbCBudGZzX2lzX3Jlc2VydmVkX2x4YXR0cihjb25zdCBjaGFyICpuYW1lKVxcbi0tXFxuZnMvbnRmczMveGF0dHIuYy04NTktLypcXG5mcy9udGZzMy94YXR0ci5jOjg2MDogKiBudGZzX3NldHhhdHRyIC0gaW5vZGVfb3BlcmF0aW9uczo6c2V0eGF0dHJcXG5mcy9udGZzMy94YXR0ci5jLTg2MS0gKi9cXG5mcy9udGZzMy94YXR0ci5jOjg2MjpzdGF0aWMgbm9pbmxpbmUgaW50IG50ZnNfc2V0eGF0dHIoY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsXFxuZnMvbnRmczMveGF0dHIuYy04NjMtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGUsXFxuLS1cXG5mcy9udGZzMy94YXR0ci5jPTEwNjE9c3RhdGljIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIG50ZnNfb3RoZXJfeGF0dHJfaGFuZGxlciA9IHtcXG4tLVxcbmZzL250ZnMzL3hhdHRyLmMtMTA2My1cXHQuZ2V0XFx0PSBudGZzX2dldHhhdHRyLFxcbmZzL250ZnMzL3hhdHRyLmM6MTA2NDpcXHQuc2V0XFx0PSBudGZzX3NldHhhdHRyLFxcbmZzL250ZnMzL3hhdHRyLmMtMTA2NS1cXHQubGlzdFxcdD0gbnRmc194YXR0cl91c2VyX2xpc3QsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE2OjQ0OjIzLjg1MTI3NDMzOFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTc1NDA5NDIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYnJlYWtkb3duIG9mIHdoYXQncyBnb2luZyBvbiwgdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGxpa2UgSSB3b3VsZCBpbiBteSBvd24gd29yazpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBOVEZTMyBGaWxlc3lzdGVtIENvbmZpZ3VyYXRpb24gUmVxdWlyZW1lbnQqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY2x1ZSBoZXJlIGlzIHRoYXQgdGhlIGZ1bmN0aW9uIEknbSBpbnRlcmVzdGVkIGluIGlzbid0IHByb3RlY3RlZCBieSBhIHNwZWNpZmljLCBkZXRhaWxlZCBjb25maWd1cmF0aW9uIG9wdGlvbiDigJMgaXQncyBqdXN0IHRpZWQgdG8gYE5URlMzX0ZTYC4gVGhhdCB0ZWxscyBtZSAqdGhhdCogaXMgdGhlIHJlcXVpcmVkIGNvbmZpZy4gUHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBzbyBmYXIuXG5cbk5vdywgbGV0J3MgY2lyY2xlIGJhY2sgdG8gYGluZHhfZmluZF9zb3J0YC4gSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nOiBpcyB0aGlzIGEgc3RhdGljIGZ1bmN0aW9uLCBvciBpcyBpdCB2aXNpYmxlIG91dHNpZGUgb2YgaXRzIGltbWVkaWF0ZSBzY29wZT8gUXVpY2tseSwgSSBzZWUgdGhhdCBpdCBpcyBleHBvcnRlZCBvciBhdCBsZWFzdCBub24tc3RhdGljLlxuXG5Pa2F5LCBsZXQncyBnbyBkaXJlY3RseSB0byB0aGUgc291cmNlLiBUaGUgZmlsZSBgZnMvbnRmczMvaW5kZXguY2AgaXMgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBleGFtaW5lIHRoZSBjb2RlIGZvciBgaW5keF9maW5kX3NvcnRgLiBJJ2xsIG9wZW4gdGhhdCB1cCBhbmQgdGFrZSBhIGxvb2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjIxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTY6NDQ6MjguODI2Njg3NjExWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjcwNTA2OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IGluZHhfZmluZF9zb3J0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMzL2luZGV4LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmczMvaW5kZXguYz0xMTY5PWludCBpbmR4X2ZpbmQoc3RydWN0IG50ZnNfaW5kZXggKmluZHgsIHN0cnVjdCBudGZzX2lub2RlICpuaSxcXG4tLVxcbmZzL250ZnMzL2luZGV4LmMtMTI0My1cXG5mcy9udGZzMy9pbmRleC5jOjEyNDQ6aW50IGluZHhfZmluZF9zb3J0KHN0cnVjdCBudGZzX2luZGV4ICppbmR4LCBzdHJ1Y3QgbnRmc19pbm9kZSAqbmksXFxuZnMvbnRmczMvaW5kZXguYy0xMjQ1LVxcdFxcdCAgIGNvbnN0IHN0cnVjdCBJTkRFWF9ST09UICpyb290LCBzdHJ1Y3QgTlRGU19ERSAqKmVudHJ5LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNjo0NDoyOS4wNTM3NDQzMzlaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQwNjU4NjQ3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgZm9yIEVuaGFuY2VtZW50cyBpbiBGb2N1c1N5bWJvbHMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGNvbmZpcm1lZDogaXQncyBub3QgYSBzdGF0aWMgaW1wbGVtZW50YXRpb24uIFRoYXQgb3BlbnMgdXAgc29tZSBpbnRlcmVzdGluZyBwb3NzaWJpbGl0aWVzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJDYW4gd2UgbGV2ZXJhZ2UgdGhpcyBub24tc3RhdGljIG5hdHVyZT9cIiBUaGUgb2J2aW91cyBuZXh0IHN0ZXAgaXMgdG8gY29uc2lkZXIgYWRkaW5nIGBpbmR4X2ZpbmRfc29ydGAgYW5kIGBudGZzX2luc2VydF9zZWN1cml0eWAgdG8gYEZvY3VzU3ltYm9sc2AuIFRoYXQgZmVlbHMgbGlrZSBhIGxvZ2ljYWwgcHJvZ3Jlc3Npb24sIHBvdGVudGlhbGx5IGltcHJvdmluZyBpdHMgY2FwYWJpbGl0aWVzLiBCZWZvcmUgSSBnZXQgdG9vIGZhciBkb3duIHRoYXQgcGF0aCwgSSBuZWVkIHRvIHZlcmlmeSBhIGNyaXRpY2FsIGFzc3VtcHRpb24sIHNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIGlmIGBudGZzX2luc2VydF9zZWN1cml0eWAgaXMgYWxzbyAqbm9uLXN0YXRpYyouIElmIGl0ICppcyogc3RhdGljLCB0aGVuIHRoaXMgd2hvbGUgbGluZSBvZiB0aGlua2luZyBpcyBwcm9iYWJseSB1bnByb2R1Y3RpdmUuIEknbSBnb2luZyB0byBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBjb25maXJtIGl0cyBpbXBsZW1lbnRhdGlvbiBiZWZvcmUgcHJvY2VlZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwODksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNjo0NDozNS40NjAzMzQ4OTZaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5Njc1MzcyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgbnRmc19pbnNlcnRfc2VjdXJpdHlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmczMvZnNudGZzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmczMvZnNudGZzLmM9MTk4MT1pbnQgbnRmc19nZXRfc2VjdXJpdHlfYnlfaWQoc3RydWN0IG50ZnNfc2JfaW5mbyAqc2JpLCBfX2xlMzIgc2VjdXJpdHlfaWQsXFxuLS1cXG5mcy9udGZzMy9mc250ZnMuYy0yMDgwLSAqL1xcbmZzL250ZnMzL2ZzbnRmcy5jOjIwODE6aW50IG50ZnNfaW5zZXJ0X3NlY3VyaXR5KHN0cnVjdCBudGZzX3NiX2luZm8gKnNiaSxcXG5mcy9udGZzMy9mc250ZnMuYy0yMDgyLVxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgU0VDVVJJVFlfREVTQ1JJUFRPUl9SRUxBVElWRSAqc2QsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE2OjQ0OjM2LjA1NzA5NzkxNFoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDQ5NjQzNDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUaGlzIFBhdGNoOiBBIEZ1bmN0aW9uYWwgQ2hhbmdlIFdvcnRoIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGNsZWFybHkgdGFyZ2V0cyBub24tc3RhdGljIGNvZGUg4oCTIHRoYXQncyB0aGUgZmlyc3QgdGhpbmcgSSBub3RpY2VkLiBOb3csIGxldCdzIGRyaWxsIGRvd24gYW5kIHNlZSB3aGF0J3MgYWN0dWFsbHkgYmVpbmcgbW9kaWZpZWQuIEl0IGxvb2tzIGxpa2UgdGhlIHByaW1hcnkgZnVuY3Rpb24gdW5kZXIgc2NydXRpbnkgaXMgYGluZHhfZmluZF9zb3J0YC4gQW5kIHllcywgdGhlIHBhdGNoIGV4cGxpY2l0bHkgYWRkcmVzc2VzIGEgbWVtb3J5IGxlYWsgaW4gYGluZHhfZmluZF9zb3J0YCByZWxhdGVkIHRvIGBuLVx1MDAzZWluZGV4YC4gU3BlY2lmaWNhbGx5LCBpdCBhcHBlYXJzIHRoZSBmaXggaW52b2x2ZXMgZnJlZWluZyBgbi1cdTAwM2VpbmRleGAgYmVmb3JlIGBuYCB3aGVuIGEgbGV2ZWwgaXMgcG9wcGVkIGZyb20gdGhlIGZpbmQgc3RhdGUuXG5cblRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBhIGNvcmUgYXNwZWN0IG9mIGhvdyB0aGUgZmlsZXN5c3RlbSBoYW5kbGVzIGluZGV4IGxvb2t1cHMuIEdpdmVuIHRoYXQsIGFuZCBjb25zaWRlcmluZyBpdCBpbnZvbHZlcyByZWFjaGFibGUgY29yZSBmaWxlc3lzdGVtIGxvZ2ljIOKAkyBzcGVjaWZpY2FsbHkgd2hlbiB0aGUgZnVuY3Rpb24gaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHNlY3VyaXR5IGRlc2NyaXB0b3IgaW5zZXJ0aW9uIOKAkyBhbmQgY29uc2lkZXJpbmcgYE5URlMzX0ZTYCBpcyBlbmFibGVkLCBJJ20gZ29pbmcgdG8gZmxhZyB0aGlzIGFzICpkZWZpbml0ZWx5KiB3b3J0aCBmdXp6aW5nLiBJIG1lYW4sIG1lbW9yeSBsZWFrcyBpbiBpbmRleCBtYW5hZ2VtZW50PyBUaGF0J3MgcHJpbWUgZnV6emluZyB0ZXJyaXRvcnkuIEp1c3QgdG8gYmUgY29tcGxldGVseSBzdXJlLCBJJ2xsIGRvdWJsZS1jaGVjayB0byBtYWtlIHN1cmUgYGluZHhfZmluZF9zb3J0YCBpcyB0aGUgKm9ubHkqIGZ1bmN0aW9uIGltcGFjdGVkLCBidXQgSSdtIGZlZWxpbmcgY29uZmlkZW50IGFib3V0IHRoaXMgb25lLiBNeSBjYWxsIGlzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTEzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE2OjQ0OjQxLjEwNjc0NDQ2NFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4MzM0OTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtmcmVlXFxcXChuLVxcdTAwM2VpbmRleFxcXFwpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMzL2luZGV4LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmczMvaW5kZXguYz0xMjQ0PWludCBpbmR4X2ZpbmRfc29ydChzdHJ1Y3QgbnRmc19pbmRleCAqaW5keCwgc3RydWN0IG50ZnNfaW5vZGUgKm5pLFxcbi0tXFxuZnMvbnRmczMvaW5kZXguYy0xMzI3LVxcdFxcdFxcdGZuZF9wb3AoZm5kKTtcXG5mcy9udGZzMy9pbmRleC5jOjEzMjg6XFx0XFx0XFx0a2ZyZWUobi1cXHUwMDNlaW5kZXgpO1xcbmZzL250ZnMzL2luZGV4LmMtMTMyOS1cXHRcXHRcXHRrZnJlZShuKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTY6NDQ6NDEuMjQ1MDg1MzM3WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyOTkzNjA5NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgTW9kaWZpY2F0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGZvY3VzIGlzIHJlYWxseSBvbiBgaW5keF9maW5kX3NvcnRgLiBUaGF0J3MgdGhlIG9ubHkgZnVuY3Rpb24gdW5kZXJnb2luZyBhIGNoYW5nZS4gVGhhdCdzIGdvb2QgdG8ga25vdywga2VlcHMgdGhlIHNjb3BlIG9mIGludmVzdGlnYXRpb24gdGlnaHRlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0J3MgYmVpbmcgZG9uZSB3aXRoaW4gYGluZHhfZmluZF9zb3J0YCwgYnV0IGF0IGxlYXN0IEknbSBub3QgZGVhbGluZyB3aXRoIGEgcmlwcGxlIGVmZmVjdCBhY3Jvc3MgbXVsdGlwbGUgbW9kdWxlcy4gSSBzaG91bGQgcHJvYmFibHkgbGFiZWwgdGhlIG91dHB1dCBmcm9tIHRoZSBmdW5jdGlvbiBhcyBgc2V0LXJlc3VsdHNgLCBvciBzb21ldGhpbmcgZXF1YWxseSBkZXNjcmlwdGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIxMzEsIk91dHB1dFRva2VucyI6MTE1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTY6NDQ6NDQuNTQ0NDUwNDlaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDI5NTkwNDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5URlMzX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW5keF9maW5kX3NvcnRcIixcbiAgICBcIm50ZnNfaW5zZXJ0X3NlY3VyaXR5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiBgaW5keF9maW5kX3NvcnRgIHdpdGhpbiB0aGUgTlRGUzMgZmlsZXN5c3RlbSBkcml2ZXIgYnkgZnJlZWluZyBgbi1cXHUwMDNlaW5kZXhgIGJlZm9yZSBgbmAgd2hlbiBwb3BwaW5nIGEgbGV2ZWwgZnJvbSB0aGUgZmluZCBzdGF0ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGZpbGVzeXN0ZW0gbG9naWMsIHNwZWNpZmljYWxseSBkdXJpbmcgaW5kZXggbG9va3VwcyBhbmQgc2VjdXJpdHkgZGVzY3JpcHRvciBpbnNlcnRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlRGUzNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpbmR4X2ZpbmRfc29ydFwiLFxuICAgIFwibnRmc19pbnNlcnRfc2VjdXJpdHlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIGBpbmR4X2ZpbmRfc29ydGAgd2l0aGluIHRoZSBOVEZTMyBmaWxlc3lzdGVtIGRyaXZlciBieSBmcmVlaW5nIGBuLVxcdTAwM2VpbmRleGAgYmVmb3JlIGBuYCB3aGVuIHBvcHBpbmcgYSBsZXZlbCBmcm9tIHRoZSBmaW5kIHN0YXRlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgZmlsZXN5c3RlbSBsb2dpYywgc3BlY2lmaWNhbGx5IGR1cmluZyBpbmRleCBsb29rdXBzIGFuZCBzZWN1cml0eSBkZXNjcmlwdG9yIGluc2VydGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow586pk[1] Phase: Succeeded StartedAt: 2026-07-25 16:44:57 +0000 UTC FinishedAt: 2026-07-25 16:44:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow586pk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-25 16:44:57 +0000 UTC FinishedAt: 2026-07-25 16:44:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow586pk[2] Phase: Succeeded StartedAt: 2026-07-25 16:44:57 +0000 UTC FinishedAt: 2026-07-25 17:45:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow586pk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eebf259d5352b87080d67758f483583d9e763d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["indx_find_sort","ntfs_insert_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eebf259d5352b87080d67758f483583d9e763d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"acab1807-3a53-4739-84c2-55ab0f46bf38","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-07-25 16:44:58 +0000 UTC FinishedAt: 2026-07-25 17:45:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"9eebf259d5352b87080d67758f483583d9e763d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["indx_find_sort","ntfs_insert_security"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"9eebf259d5352b87080d67758f483583d9e763d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"acab1807-3a53-4739-84c2-55ab0f46bf38","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow586pk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eebf259d5352b87080d67758f483583d9e763d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["indx_find_sort","ntfs_insert_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eebf259d5352b87080d67758f483583d9e763d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"acab1807-3a53-4739-84c2-55ab0f46bf38","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-25 16:44:58 +0000 UTC FinishedAt: 2026-07-25 16:45:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow586pk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eebf259d5352b87080d67758f483583d9e763d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["indx_find_sort","ntfs_insert_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eebf259d5352b87080d67758f483583d9e763d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"acab1807-3a53-4739-84c2-55ab0f46bf38","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-25 16:44:58 +0000 UTC FinishedAt: 2026-07-25 16:45:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9eebf259d5352b87080d67758f483583d9e763d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow586pk/series-workflow586pk-convert-artifact-1161690929/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow586pk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eebf259d5352b87080d67758f483583d9e763d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["indx_find_sort","ntfs_insert_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eebf259d5352b87080d67758f483583d9e763d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"acab1807-3a53-4739-84c2-55ab0f46bf38","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-25 16:45:40 +0000 UTC FinishedAt: 2026-07-25 17:13:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow586pk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eebf259d5352b87080d67758f483583d9e763d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["indx_find_sort","ntfs_insert_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eebf259d5352b87080d67758f483583d9e763d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"acab1807-3a53-4739-84c2-55ab0f46bf38","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-25 16:45:40 +0000 UTC FinishedAt: 2026-07-25 17:13:14 +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:*c0329867-714b-40ef-a0fc-8dcaa57e44fa,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-workflow586pk/series-workflow586pk-convert-artifact-1161690929/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": "341ba59b-15a6-4cf6-bf88-b5ceb294eb89", "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-workflow586pk/series-workflow586pk-build-action-1429380447/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow586pk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eebf259d5352b87080d67758f483583d9e763d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["indx_find_sort","ntfs_insert_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eebf259d5352b87080d67758f483583d9e763d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"acab1807-3a53-4739-84c2-55ab0f46bf38","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-25 16:45:40 +0000 UTC FinishedAt: 2026-07-25 17:12:55 +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:*c0329867-714b-40ef-a0fc-8dcaa57e44fa,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-workflow586pk/series-workflow586pk-convert-artifact-1161690929/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": "341ba59b-15a6-4cf6-bf88-b5ceb294eb89", "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-workflow586pk/series-workflow586pk-build-action-1429380447/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow586pk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eebf259d5352b87080d67758f483583d9e763d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["indx_find_sort","ntfs_insert_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eebf259d5352b87080d67758f483583d9e763d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"acab1807-3a53-4739-84c2-55ab0f46bf38","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-25 17:13:14 +0000 UTC FinishedAt: 2026-07-25 17:13:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow586pk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eebf259d5352b87080d67758f483583d9e763d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["indx_find_sort","ntfs_insert_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eebf259d5352b87080d67758f483583d9e763d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"acab1807-3a53-4739-84c2-55ab0f46bf38","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-25 17:13:14 +0000 UTC FinishedAt: 2026-07-25 17:13:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow586pk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eebf259d5352b87080d67758f483583d9e763d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["indx_find_sort","ntfs_insert_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eebf259d5352b87080d67758f483583d9e763d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"acab1807-3a53-4739-84c2-55ab0f46bf38","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-25 17:13:14 +0000 UTC FinishedAt: 2026-07-25 17:13:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow586pk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eebf259d5352b87080d67758f483583d9e763d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["indx_find_sort","ntfs_insert_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eebf259d5352b87080d67758f483583d9e763d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"acab1807-3a53-4739-84c2-55ab0f46bf38","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-25 17:13:14 +0000 UTC FinishedAt: 2026-07-25 17:13:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9eebf259d5352b87080d67758f483583d9e763d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"acab1807-3a53-4739-84c2-55ab0f46bf38","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow586pk/series-workflow586pk-convert-artifact-1686249604/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow586pk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eebf259d5352b87080d67758f483583d9e763d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["indx_find_sort","ntfs_insert_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eebf259d5352b87080d67758f483583d9e763d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"acab1807-3a53-4739-84c2-55ab0f46bf38","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-25 17:13:24 +0000 UTC FinishedAt: 2026-07-25 17:44:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow586pk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eebf259d5352b87080d67758f483583d9e763d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["indx_find_sort","ntfs_insert_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eebf259d5352b87080d67758f483583d9e763d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"acab1807-3a53-4739-84c2-55ab0f46bf38","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-25 17:13:24 +0000 UTC FinishedAt: 2026-07-25 17:44:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*341ba59b-15a6-4cf6-bf88-b5ceb294eb89,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-workflow586pk/series-workflow586pk-build-action-1429380447/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": false },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow586pk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eebf259d5352b87080d67758f483583d9e763d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["indx_find_sort","ntfs_insert_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eebf259d5352b87080d67758f483583d9e763d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"acab1807-3a53-4739-84c2-55ab0f46bf38","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Failed StartedAt: 2026-07-25 17:44:36 +0000 UTC FinishedAt: 2026-07-25 17:45:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow586pk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9eebf259d5352b87080d67758f483583d9e763d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["indx_find_sort","ntfs_insert_security"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"9eebf259d5352b87080d67758f483583d9e763d7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS"],"series_id":"acab1807-3a53-4739-84c2-55ab0f46bf38","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Failed StartedAt: 2026-07-25 17:44:36 +0000 UTC FinishedAt: 2026-07-25 17:45:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}