Name: series-workflows8w2p Phase: Succeeded StartedAt: 2026-08-20 20:00:04 +0000 UTC FinishedAt: 2026-08-20 21:27:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8w2p[0] Phase: Succeeded StartedAt: 2026-08-20 20:00:04 +0000 UTC FinishedAt: 2026-08-20 20:42:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8w2p[0].run-triage Phase: Succeeded StartedAt: 2026-08-20 20:00:04 +0000 UTC FinishedAt: 2026-08-20 20:42:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "RMNET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "RMNET" ], "series_id": "2d894e0c-27e7-4a02-aa67-53312333f671" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rmnet_map_deaggregate" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIwOjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JNTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cm1uZXRfbWFwX2RlYWdncmVnYXRlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVnLiBJbiBgcm1uZXRfbWFwX2RlYWdncmVnYXRlKClgLCBhIG5ldyBgc2tfYnVmZmAgKGBza2JuYCkgaXMgYWxsb2NhdGVkIHVzaW5nIGBhbGxvY19za2IoKWAsIHdoaWNoIGluaXRpYWxpemVzIHRoZSBgZGV2YCBmaWVsZCB0byBOVUxMLiBMYXRlciwgaWYgdGhlIHBhY2tldCBjb250YWlucyBhIE1BUCBjb21tYW5kLCBgcm1uZXRfbWFwX3NlbmRfYWNrKClgIGlzIGNhbGxlZCwgd2hpY2ggYWNjZXNzZXMgYHNrYi1cdTAwM2VkZXZgIGFuZCBkZXJlZmVyZW5jZXMgaXQgKGBkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fc3RhcnRfeG1pdChza2IsIGRldilgKS4gU2luY2UgYHNrYm4tXHUwMDNlZGV2YCB3YXMgTlVMTCwgdGhpcyBjYXVzZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFRoZSBwYXRjaCBmaXhlcyB0aGlzIGJ5IGNvcHlpbmcgYHNrYi1cdTAwM2VkZXZgIHRvIGBza2JuLVx1MDAzZWRldmAuIFRoaXMgaXMgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLCBhcyB0aGUgYGRldmAgZmllbGQgd2FzIGV4cGxpY2l0bHkgemVyb2VkIGR1cmluZyBhbGxvY2F0aW9uLiBTdGFuZGFyZCBrZXJuZWwgdGVzdGluZyBvciBLQVNBTiB3aWxsIGVhc2lseSBjYXRjaCB0aGlzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZGVhZ2dyZWdhdGlvbiBsb2dpYyBpbiB0aGUgUXVhbGNvbW0gUk1ORVQgZHJpdmVyLCB3aGljaCBpcyBhIHZpcnR1YWwgbmV0d29yayBkZXZpY2UgdGhhdCBjYW4gYmUgYXR0YWNoZWQgdG8gb3RoZXIgbmV0d29yayBpbnRlcmZhY2VzLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSBjcmVhdGluZyBhbiBybW5ldCBpbnRlcmZhY2UgdmlhIHJ0bmV0bGluayBhbmQgc2VuZGluZyBwYWNrZXRzIHRvIGl0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIwOjQwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjMxM2ZmYjZiNDk4M2RlMDRmMzZiNzI5YzM2MjA1Y2FiOGE5MWVkMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDIwIDIwOjQwOjM5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXBfZGF0YS5jXG5pbmRleCAzMDVhZTE1YWU4ZjM5Li5lNmY0OGRjOWZlNjRkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuY1xuQEAgLTM5NCw2ICYjNDM7Mzk0LDcgQEAgc3RydWN0IHNrX2J1ZmYgKnJtbmV0X21hcF9kZWFnZ3JlZ2F0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKCFza2JuKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbiYjNDM7XHRza2JuLVx1MDAzZWRldiA9IHNrYi1cdTAwM2VkZXY7XG4gXHRza2JfcmVzZXJ2ZShza2JuLCBSTU5FVF9NQVBfREVBR0dSX0hFQURST09NKTtcbiBcdHNrYl9wdXQoc2tibiwgcGFja2V0X2xlbik7XG4gXHRtZW1jcHkoc2tibi1cdTAwM2VkYXRhLCBza2ItXHUwMDNlZGF0YSwgcGFja2V0X2xlbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjA6NDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JNTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cm1uZXRfbWFwX2RlYWdncmVnYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBkZWFnZ3JlZ2F0aW9uIGxvZ2ljIGluIHRoZSBRdWFsY29tbSBSTU5FVCBkcml2ZXIsIHdoaWNoIGlzIGEgdmlydHVhbCBuZXR3b3JrIGRldmljZSB0aGF0IGNhbiBiZSBhdHRhY2hlZCB0byBvdGhlciBuZXR3b3JrIGludGVyZmFjZXMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGNyZWF0aW5nIGFuIHJtbmV0IGludGVyZmFjZSB2aWEgcnRuZXRsaW5rIGFuZCBzZW5kaW5nIHBhY2tldHMgdG8gaXQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiMzEzZmZiNmI0OTgzZGUwNGYzNmI3MjljMzYyMDVjYWI4YTkxZWQyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMjAgMjA6NDA6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXBfZGF0YS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuYwppbmRleCAzMDVhZTE1YWU4ZjM5Li5lNmY0OGRjOWZlNjRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXBfZGF0YS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmMKQEAgLTM5NCw2ICYjNDM7Mzk0LDcgQEAgc3RydWN0IHNrX2J1ZmYgKnJtbmV0X21hcF9kZWFnZ3JlZ2F0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlmICghc2tibikKIAkJcmV0dXJuIE5VTEw7CiAKJiM0MzsJc2tibi0mZ3Q7ZGV2ID0gc2tiLSZndDtkZXY7CiAJc2tiX3Jlc2VydmUoc2tibiwgUk1ORVRfTUFQX0RFQUdHUl9IRUFEUk9PTSk7CiAJc2tiX3B1dChza2JuLCBwYWNrZXRfbGVuKTsKIAltZW1jcHkoc2tibi0mZ3Q7ZGF0YSwgc2tiLSZndDtkYXRhLCBwYWNrZXRfbGVuKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzMwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXR3b3JrIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCDigJMgaXQgbG9va3MgbGlrZSBhIGZhaXJseSBzdHJhaWdodGZvcndhcmQgYWRkaXRpb24sIGBza2JuLSZndDtkZXYgPSBza2ItJmd0O2RldjtgLCBpbnNpZGUgdGhlIGBybW5ldF9tYXBfZGVhZ2dyZWdhdGUoKWAgZnVuY3Rpb24gaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGF0JiMzOTtzIHRoZSBjb250ZXh0IGhlcmU/JiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgcm1uZXRgIGFjdHVhbGx5ICppcyogYmVmb3JlIEkgY2FuIHByb3Blcmx5IGFzc2VzcyB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLgoKRmlyc3QgdGhpbmdzIGZpcnN0LCBhIHF1aWNrIGxvb2sgYXQgdGhlIGZpbGUgcGF0aCB0ZWxscyBtZSB0aGlzIGlzIHJlbGF0ZWQgdG8gUXVhbGNvbW0mIzM5O3MgUk1ORVQgZHJpdmVyLiBSaWdodCwgUk1ORVQuLi4gSSBrbm93IGl0JiMzOTtzIGEgUXVhbGNvbW0gc3BlY2lmaWMgaW1wbGVtZW50YXRpb24sIGJ1dCBpcyB0aGlzIGEgdmlydHVhbCBkcml2ZXIsIG9yIGlzIGl0IHRpZWQgdG8gcGFydGljdWxhciBRdWFsY29tbSBoYXJkd2FyZT8gVGhlIGltcGxpY2F0aW9ucyBhcmUgaHVnZS4gSWYgaXQmIzM5O3MgaGFyZHdhcmUtZGVwZW5kZW50LCB0aGVuIHRoZSB0ZXN0aW5nIHNjb3BlIGJyb2FkZW5zIHNpZ25pZmljYW50bHkuIElmIGl0JiMzOTtzIHZpcnR1YWwsIGFuZCBjb3VsZCBiZSByZXBsaWNhdGVkIGluIGEgY29udGFpbmVyLCB0aGVuIHRlc3Rpbmcgd2lsbCBiZSBzbGlnaHRseSBzaW1wbGVyLgoKVG8gY2xhcmlmeSB0aGlzLCBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkcml2ZXImIzM5O3MgS2NvbmZpZyBmaWxlcy4gTGV0JiMzOTtzIHNlZS4uLiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvS2NvbmZpZ2Agb3IgcG9zc2libHkgZXZlbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vS2NvbmZpZ2Agc2hvdWxkIGdpdmUgbWUgdGhlIGNvbmZpZ3VyYXRpb24gZGV0YWlscyBJJiMzOTttIGFmdGVyLiBUaGF0IHNob3VsZCB0ZWxsIG1lIHdoZXRoZXIgaXQmIzM5O3MgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiBoYXJkd2FyZSBmbGFncywgb3IgaWYgaXQmIzM5O3MgZGVzaWduZWQgdG8gYmUgbW9yZSBwbGF0Zm9ybS1hZ25vc3RpYy4gVGhhdCYjMzk7cyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHJlYWwgbmF0dXJlIG9mIHRoaXMgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBSTU5FVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9LY29uZmlnLTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9LY29uZmlnOjY6bWVudWNvbmZpZyBSTU5FVFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7Um1OZXQgTUFQIGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIwOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MTMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhhdCBLY29uZmlnIGZpbGU6CgoqKkRpdmluZyBpbnRvIHRoZSBSTU5FVCBLY29uZmlnIEZpbGUqKgoKT2theSwgbGV0JiMzOTtzIHB1bGwgdXAgdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9LY29uZmlnYCBmaWxlLiBSaWdodCwgUk1ORVQuLi4gdGhhdCYjMzk7cyBRdWFsY29tbSYjMzk7cyBSZW1vdGUgTmV0d29yayBJbnRlcmZhY2UsIGxpa2VseSBoYW5kbGluZyBjZWxsdWxhciBkYXRhIGNvbm5lY3Rpdml0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIFJNTkVUIGZlYXR1cmVzIGFyZSBiZWluZyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gVGhlIEtjb25maWcgZmlsZSBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFzcGVjdHMg4oCTIHRoZSBkZXBlbmRlbmNpZXMsIG9wdGlvbnMsIGFuZCBkZWZhdWx0cyB0aGF0IHVsdGltYXRlbHkgc2hhcGUgd2hldGhlciBSTU5FVCBzdXBwb3J0IGlzIGVuYWJsZWQgYW5kIGhvdyBncmFudWxhciB0aGUgY29uZmlndXJhdGlvbiBjYW4gZ2V0LgoKSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGEgc3RydWN0dXJlZCBhcHByb2FjaCB1c2luZyBgY29uZmlnYCBzeW1ib2xzLCBgZGVwZW5kcyBvbmAgY2xhdXNlcyB0byBsaW5rIFJNTkVUIHRvIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIChsaWtlIHRoZSBzcGVjaWZpYyBRdWFsY29tbSBTb0NzKSBhbmQgb3RoZXIgcmVsYXRlZCBkcml2ZXJzLCBgc2VsZWN0YCBzdGF0ZW1lbnRzIHRvIG1hbmFnZSBkZXBlbmRlbmNpZXMgYXV0b21hdGljYWxseSwgYW5kIHBvdGVudGlhbGx5IGB0cmlzdGF0ZWAgb3IgYGJvb2xgIG9wdGlvbnMgZm9yIGZpbmUtZ3JhaW5lZCBmZWF0dXJlIGNvbnRyb2wgKGUuZy4sIHNwZWNpZmljIFJNTkVUIGxpbmsgdHlwZXMgb3IgcHJvdG9jb2wgZmVhdHVyZXMpLiBJJiMzOTttIGFsc28gbG9va2luZyBmb3Igc2Vuc2libGUgZGVmYXVsdHMg4oCTIHdoYXQmIzM5O3MgZW5hYmxlZCBvdXQgb2YgdGhlIGJveCwgYW5kIHdoZXRoZXIgdGhleSBtYWtlIHNlbnNlIGZvciB0aGUgbGlrZWx5IHRhcmdldCBkZXZpY2VzLgoKVGhpcyBLY29uZmlnIGZpbGUgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHNlbnNlIG9mIGhvdyBjb25maWd1cmFibGUgdGhlIFJNTkVUIHN0YWNrIGlzLCB3aGljaCB3aWxsIGJlIHVzZWZ1bCBmb3IgYW55IGRldmljZSBjdXN0b21pemF0aW9uIEkgbWlnaHQgbmVlZCB0byBkby4gSXTigJlzIGFsc28gY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBwb3RlbnRpYWwgYnVpbGQgaXNzdWVzIG9yIGNvbmZsaWN0cyBpZiBJIG5lZWQgdG8gaW50ZWdyYXRlIHRoaXMgZHJpdmVyIHdpdGggb3RoZXIgbmV0d29ya2luZyBzdWJzeXN0ZW1zLiBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB2YXJpb3VzIFJNTkVULXJlbGF0ZWQgb3B0aW9uczsgd2hldGhlciB0aGV5JiMzOTtyZSBpbmRlcGVuZGVudCwgbXV0dWFsbHkgZXhjbHVzaXZlLCBvciBuZXN0ZWQuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHJhbmdlIG9mIHN1cHBvcnRlZCBjb25maWd1cmF0aW9ucyBhbmQgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB2YXJpb3VzIGNvbXBvbmVudHMgaW4gdGhlIFJNTkVUIHN0YWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFJNTkVUIE1BUCBkcml2ZXJcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0bWVudWNvbmZpZyBSTU5FVFxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7Um1OZXQgTUFQIGRyaXZlclwmIzM0O1xuICAgODpcdFx0ZGVmYXVsdCBuXG4gICA5Olx0XHRzZWxlY3QgR1JPX0NFTExTXG4gIDEwOlx0XHRoZWxwXG4gIDExOlx0XHQgIElmIHlvdSBzZWxlY3QgdGhpcywgeW91IHdpbGwgZW5hYmxlIHRoZSBSTU5FVCBtb2R1bGUgd2hpY2ggaXMgdXNlZFxuICAxMjpcdFx0ICBmb3IgaGFuZGxpbmcgZGF0YSBpbiB0aGUgbXVsdGlwbGV4aW5nIGFuZCBhZ2dyZWdhdGlvbiBwcm90b2NvbCAoTUFQKVxuICAxMzpcdFx0ICBmb3JtYXQgaW4gdGhlIGVtYmVkZGVkIGRhdGEgcGF0aC4gUk1ORVQgZGV2aWNlcyBjYW4gYmUgYXR0YWNoZWQgdG9cbiAgMTQ6XHRcdCAgYW55IElQIG1vZGUgcGh5c2ljYWwgZGV2aWNlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIwOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMTcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIFJNTkVUIERldmljZXMqKgoKT2theSwgc28gSSYjMzk7bSBoZWFyaW5nICYjMzQ7Uk1ORVQgZGV2aWNlcyBjYW4gYmUgYXR0YWNoZWQgdG8gYW55IElQIG1vZGUgcGh5c2ljYWwgZGV2aWNlLiYjMzQ7IE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0FoYSEgVGhpcyBzb3VuZHMgbGlrZSBhIHZpcnR1YWwgbmV0d29ya2luZyBjb25zdHJ1Y3QsIHNpbWlsYXIgdG8gYSBWTEFOIG9yIHBlcmhhcHMgYSBNQUNWTEFOLiYjMzQ7IEl0IHN1Z2dlc3RzIGEgbGV2ZWwgb2YgYWJzdHJhY3Rpb24sIGEgd2F5IHRvIGxvZ2ljYWxseSBjb25uZWN0IHRoaXMgUk1ORVQgdGhpbmcgdG8gYW4gZXhpc3RpbmcgbmV0d29yayBpbnRlcmZhY2UsIHJpZ2h0PyBJdCYjMzk7cyBsaWtlIGEgdmlydHVhbCBuZXR3b3JrIGRldmljZSByaWRpbmcgb24gdG9wIG9mIGEgcGh5c2ljYWwgb25lLgoKTm93IEkmIzM5O20gY3VyaW91cy4gVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGJlY29tZXMgKmhvdyogaXMgdGhpcyB2aXJ0dWFsIGRldmljZSBjcmVhdGVkPyBEb2VzIHRoZSBzeXN0ZW0gbGV2ZXJhZ2UgYHJ0bmV0bGlua2A/IFRoYXQmIzM5O3MgdGhlIHR5cGljYWwgcm91dGUgZm9yIG5ldHdvcmsgaW50ZXJmYWNlIG1hbmlwdWxhdGlvbiwgc28gdGhhdCYjMzk7cyB3aGVyZSBteSBtaW5kIG5hdHVyYWxseSBnb2VzLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGNyZWF0aW9uIHByb2Nlc3MgdG8gZnVsbHkgZ3Jhc3AgdGhpcy4gTGV0IG1lIHNlZSBob3cgaXQmIzM5O3MgYWN0dWFsbHkgY29uZmlndXJlZCBvciBpbml0aWFsaXplZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydG5sX2xpbmtfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X2NvbmZpZy5jPTM3MD1zdGF0aWMgaW50IHJtbmV0X2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X2NvbmZpZy5jLTM5OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X2NvbmZpZy5jOjQwMDpzdHJ1Y3QgcnRubF9saW5rX29wcyBybW5ldF9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfY29uZmlnLmMtNDAxLVx0LmtpbmRcdFx0PSBcJiMzNDtybW5ldFwmIzM0Oyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9jb25maWcuaD0zMz1zdHJ1Y3Qgcm1uZXRfcG9ydCB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfY29uZmlnLmgtNTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9jb25maWcuaDo1NjpleHRlcm4gc3RydWN0IHJ0bmxfbGlua19vcHMgcm1uZXRfbGlua19vcHM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9jb25maWcuaC01Ny1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF92bmQuYz0yOTg9aW50IHJtbmV0X3ZuZF9uZXdsaW5rKHU4IGlkLCBzdHJ1Y3QgbmV0X2RldmljZSAqcm1uZXRfZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X3ZuZC5jLTMzMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X3ZuZC5jOjMzMzpcdFx0cm1uZXRfZGV2LVx1MDAzZXJ0bmxfbGlua19vcHMgPSBcdTAwMjZybW5ldF9saW5rX29wcztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X3ZuZC5jLTMzNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTI1CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiB0aGUgcm1uZXQgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gdGhlIGBybW5ldGAgaW50ZXJmYWNlIGlzIGRlZmluaXRlbHkgY3JlYXRlZCB1c2luZyBgcnRuZXRsaW5rYCBhbmQgYGlwIGxpbmsgYWRkIHR5cGUgcm1uZXRgLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGl0IG1lYW5zIEkgY2FuIGVhc2lseSBzcGluIHVwIGEgdmlydHVhbCBlbnZpcm9ubWVudCBhbmQgcG9rZSBhdCB0aGlzIHRoaW5nLiBJdCYjMzk7cyBlbWluZW50bHkgdGVzdGFibGUsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTXkgYXR0ZW50aW9uIGlzIG5vdyBmb2N1c2VkIG9uIHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyBhZmZlY3RpbmcgYHJtbmV0X21hcF9kZWFnZ3JlZ2F0ZSgpYC4gSSBuZWVkIHRvIGRpdmUgaW50byB0aGF0IGZ1bmN0aW9uIGFuZCB1bmRlcnN0YW5kIHByZWNpc2VseSB3aGF0JiMzOTtzIGJlaW5nIGNoYW5nZWQgYW5kIHdoeS4gTGV0JiMzOTtzIGdldCByaWdodCBpbnRvIHRoZSBjb2RlIGZvciBgcm1uZXRfbWFwX2RlYWdncmVnYXRlKClgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtybW5ldF9tYXBfZGVhZ2dyZWdhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYz0xMDk9cm1uZXRfbWFwX2luZ3Jlc3NfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X2hhbmRsZXJzLmMtMTIzLVx0aWYgKHBvcnQtXHUwMDNlZGF0YV9mb3JtYXQgXHUwMDI2IFJNTkVUX0ZMQUdTX0lOR1JFU1NfREVBR0dSRUdBVElPTikge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYzoxMjQ6XHRcdHdoaWxlICgoc2tibiA9IHJtbmV0X21hcF9kZWFnZ3JlZ2F0ZShza2IsIHBvcnQpKSAhPSBOVUxMKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYy0xMjUtXHRcdFx0X19ybW5ldF9tYXBfaW5ncmVzc19oYW5kbGVyKHNrYm4sIHBvcnQpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcC5oPTI2PWVudW0gcm1uZXRfbWFwX2NvbW1hbmRzIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXAuaC00Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcC5oOjQzOnN0cnVjdCBza19idWZmICpybW5ldF9tYXBfZGVhZ2dyZWdhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcC5oLTQ0LVx0XHRcdFx0ICAgICAgc3RydWN0IHJtbmV0X3BvcnQgKnBvcnQpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmM9MzM2PXUzMiBybW5ldF9tYXBfdmFsaWRhdGVfcGFja2V0X2xlbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgcm1uZXRfcG9ydCAqcG9ydClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXBfZGF0YS5jLTM4Mi0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmM6MzgzOnN0cnVjdCBza19idWZmICpybW5ldF9tYXBfZGVhZ2dyZWdhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmMtMzg0LVx0XHRcdFx0ICAgICAgc3RydWN0IHJtbmV0X3BvcnQgKnBvcnQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIwOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NjQKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAxMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBQb3RlbnRpYWw6IFJNTkVUIERlYWdncmVnYXRpb24qKgoKT2theSwgc28gYHJtbmV0X21hcF9kZWFnZ3JlZ2F0ZWAgaXMgY2FsbGVkIGJ5IGBybW5ldF9tYXBfaW5ncmVzc19oYW5kbGVyYC4gVGhhdCBgaW5ncmVzc19oYW5kbGVyYCBpcyB0aGUgcmVjZWl2ZSBoYW5kbGVyIGZvciB0aGUgcGh5c2ljYWwgZGV2aWNlIHRoYXQgUk1ORVQgaXMgY29ubmVjdGVkIHRvLiBUaGF0JiMzOTtzIGEgZGlyZWN0IHBhdGgsIG1ha2luZyBpdCBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4gRGVmaW5pdGVseSByZWFjaGFibGUsIG5vIHF1ZXN0aW9uLiBUaGUgY29uZmlndXJhdGlvbiBuZWVkcyB0byBiZSBzZXQgdXAgd2l0aCBgUk1ORVRgIHRvIGV2ZW4gZ2V0IHRoZXJlLgoKTm93LCBsZXQmIzM5O3Mgc2VlIHdoYXQgYEZvY3VzU3ltYm9sc2AgdGVsbHMgdXMuIGBybW5ldF9tYXBfZGVhZ2dyZWdhdGVgIGxvb2tzIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBpbnRlcmVzdGluZyBmdW5jdGlvbnMgaW4gdGhlIHZpY2luaXR5LiBBbHJpZ2h0LCBgcm1uZXRfbWFwX2luZ3Jlc3NfaGFuZGxlcmAgaXMgcmlnaHQgdGhlcmUgYW5kIGlzIGFub3RoZXIgZ29vZCBvcHRpb24gdG8gaW52ZXN0aWdhdGUuIE1heWJlIHdlIHNob3VsZCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHJtbmV0X21hcF9kYXRhLmNgIHdoaWxlIHdlJiMzOTtyZSBhdCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cm1uZXRfbWFwX2RlYWdncmVnYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXBfZGF0YS5jPTMzNj11MzIgcm1uZXRfbWFwX3ZhbGlkYXRlX3BhY2tldF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHJtbmV0X3BvcnQgKnBvcnQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuYy0zODItICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXBfZGF0YS5jOjM4MzpzdHJ1Y3Qgc2tfYnVmZiAqcm1uZXRfbWFwX2RlYWdncmVnYXRlKHN0cnVjdCBza19idWZmICpza2IsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXBfZGF0YS5jLTM4NC1cdFx0XHRcdCAgICAgIHN0cnVjdCBybW5ldF9wb3J0ICpwb3J0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjE1CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBSTU5FVCBEZWFnZ3JlZ2F0aW9uIFBhdGNoKioKCkFscmlnaHQsIHRoaXMgcGF0Y2ggaXMgaG9uaW5nIGluIG9uIGBybW5ldF9tYXBfZGVhZ2dyZWdhdGVgLiBUaGF0JiMzOTtzIHRoZSBrZXkgZnVuY3Rpb24gdG8gZGlzc2VjdC4gVGhlIGNoYW5nZXMgYXJlIGFsbCBjZW50ZXJlZCB0aGVyZSwgc28gdGhhdCYjMzk7cyB3aGVyZSBteSBmb2N1cyBzaG91bGQgYmUuIEJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgY29kZSwgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIGBSTU5FVGAgaXRzZWxmIGhhcyBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgY291bGQgaW5mbHVlbmNlIG9yIGJlIGltcGFjdGVkIGJ5IHRoaXMuIEdvdHRhIHVuZGVyc3RhbmQgdGhlIGVjb3N5c3RlbSBiZWZvcmUgbWFraW5nIGFueSBhc3N1bXB0aW9ucyBhYm91dCB0aGlzIHBhcnRpY3VsYXIgcGllY2UuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgYnJvYWRlciBwaWN0dXJlIGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBSTU5FVCBNQVAgZHJpdmVyXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG1lbnVjb25maWcgUk1ORVRcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O1JtTmV0IE1BUCBkcml2ZXJcJiMzNDtcbiAgIDg6XHRcdGRlZmF1bHQgblxuICAgOTpcdFx0c2VsZWN0IEdST19DRUxMU1xuICAxMDpcdFx0aGVscFxuICAxMTpcdFx0ICBJZiB5b3Ugc2VsZWN0IHRoaXMsIHlvdSB3aWxsIGVuYWJsZSB0aGUgUk1ORVQgbW9kdWxlIHdoaWNoIGlzIHVzZWRcbiAgMTI6XHRcdCAgZm9yIGhhbmRsaW5nIGRhdGEgaW4gdGhlIG11bHRpcGxleGluZyBhbmQgYWdncmVnYXRpb24gcHJvdG9jb2wgKE1BUClcbiAgMTM6XHRcdCAgZm9ybWF0IGluIHRoZSBlbWJlZGRlZCBkYXRhIHBhdGguIFJNTkVUIGRldmljZXMgY2FuIGJlIGF0dGFjaGVkIHRvXG4gIDE0Olx0XHQgIGFueSBJUCBtb2RlIHBoeXNpY2FsIGRldmljZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYwNgoJCQkJCQkJb3V0cHV0OiA5NwoJCQkJCQkJdGhvdWdodHM6IDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3k6IEEgQ2xlYW4gU2xhdGUgd2l0aCBGb2N1c2VkIFByZWNpc2lvbioqCgpPa2F5LCBoZXJlJiMzOTtzIHRoZSBwbGFuLiBObyBleHRlcm5hbCBlbnRhbmdsZW1lbnRzIHRvIHdvcnJ5IGFib3V0IOKAkyB0aGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTXkgZm9jdXMgaXMgbGFzZXItc2hhcnAuIEkmIzM5O20gemVyb2luZyBpbiBvbiBhIHZlcnkgc3BlY2lmaWMgdGFyZ2V0OiB0aGUgYHJtbmV0X21hcF9kZWFnZ3JlZ2F0ZWAgZnVuY3Rpb24uIEl0IHNlZW1zIHRoaXMgaXMgd2hlcmUgdGhlIHZ1bG5lcmFiaWxpdHkgbGllcywgYXMgaXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIGRlYWdncmVnYXRpb24gbG9naWMgd2l0aGluIHRoZSBRdWFsY29tbSBSTU5FVCBkcml2ZXIuIEkgaGF2ZSBgV29ydGhGdXp6aW5nOiB0cnVlYCBzbyBJJiMzOTttIGNvbW1pdHRlZC4gVGhpcyBpcyBpbXBvcnRhbnQuCgpCYXNlZCBvbiB0aGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIEkmIzM5O3ZlIHNlZW4sIHNwZWNpZmljYWxseSB0aGUgaW5jbHVzaW9uIG9mIGBFbmFibGVDb25maWdzOiBbJiMzNDtSTU5FVCYjMzQ7XWAsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSB3b3JraW5nIHdpdGggYW4gUk1ORVQgZW52aXJvbm1lbnQgYW5kIEkmIzM5O2xsIHVzZSB0aG9zZSBjb25maWd1cmF0aW9ucy4KClRoZSBkcml2ZXIgaXRzZWxmIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQmIzM5O3MgYSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlLiBUaGlzIG9wZW5zIHVwIGEgY29tcGVsbGluZyBhdHRhY2sgc3VyZmFjZSBiZWNhdXNlIEkgY2FuIGF0dGFjaCB0aGUgUk1ORVQgdG8gb3RoZXIgbmV0d29yayBpbnRlcmZhY2VzIGFuZCBwb3RlbnRpYWxseSB1c2UgdGhpcyBuZXcgcm1uZXQgaW50ZXJmYWNlIHZpYSBydG5ldGxpbmssIHNlbmRpbmcgcGFja2V0cyB0byBpdCBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmcuIFRoaXMgZ2l2ZXMgbWUgYSBjb250cm9sbGFibGUgZW52aXJvbm1lbnQgdG8gdGVzdCBlZGdlIGNhc2VzIGFuZCBob3BlZnVsbHkgdHJpZ2dlciBzb21ldGhpbmcgaW50ZXJlc3RpbmcuIE15IHJlYXNvbmluZyBoZXJlIGlzIHRoYXQgYnkgZXhwbG9pdGluZyB0aGUgdmlydHVhbCBuZXR3b3JrIGludGVyZmFjZSwgSSBjYW4gYXR0ZW1wdCB0byB0cmlnZ2VyIHZ1bG5lcmFiaWxpdGllcyB3aXRoaW4gdGhlIGRlYWdncmVnYXRpb24gbG9naWMuIEkgbGlrZSB0aGlzIGFwcHJvYWNoLiBJdCYjMzk7cyBjbGVhbiwgdGFyZ2V0ZWQsIGFuZCBwcm92aWRlcyBhIGNsZWFyIHBhdGggdG8gZXhlY3V0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Uk1ORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtybW5ldF9tYXBfZGVhZ2dyZWdhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGRlYWdncmVnYXRpb24gbG9naWMgaW4gdGhlIFF1YWxjb21tIFJNTkVUIGRyaXZlciwgd2hpY2ggaXMgYSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlIHRoYXQgY2FuIGJlIGF0dGFjaGVkIHRvIG90aGVyIG5ldHdvcmsgaW50ZXJmYWNlcy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYnkgY3JlYXRpbmcgYW4gcm1uZXQgaW50ZXJmYWNlIHZpYSBydG5ldGxpbmsgYW5kIHNlbmRpbmcgcGFja2V0cyB0byBpdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Uk1ORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtybW5ldF9tYXBfZGVhZ2dyZWdhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGRlYWdncmVnYXRpb24gbG9naWMgaW4gdGhlIFF1YWxjb21tIFJNTkVUIGRyaXZlciwgd2hpY2ggaXMgYSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlIHRoYXQgY2FuIGJlIGF0dGFjaGVkIHRvIG90aGVyIG5ldHdvcmsgaW50ZXJmYWNlcy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYnkgY3JlYXRpbmcgYW4gcm1uZXQgaW50ZXJmYWNlIHZpYSBydG5ldGxpbmsgYW5kIHNlbmRpbmcgcGFja2V0cyB0byBpdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjA6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMDo0MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWcuIEluIGBybW5ldF9tYXBfZGVhZ2dyZWdhdGUoKWAsIGEgbmV3IGBza19idWZmYCAoYHNrYm5gKSBpcyBhbGxvY2F0ZWQgdXNpbmcgYGFsbG9jX3NrYigpYCwgd2hpY2ggaW5pdGlhbGl6ZXMgdGhlIGBkZXZgIGZpZWxkIHRvIE5VTEwuIExhdGVyLCBpZiB0aGUgcGFja2V0IGNvbnRhaW5zIGEgTUFQIGNvbW1hbmQsIGBybW5ldF9tYXBfc2VuZF9hY2soKWAgaXMgY2FsbGVkLCB3aGljaCBhY2Nlc3NlcyBgc2tiLVx1MDAzZWRldmAgYW5kIGRlcmVmZXJlbmNlcyBpdCAoYGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zdGFydF94bWl0KHNrYiwgZGV2KWApLiBTaW5jZSBgc2tibi1cdTAwM2VkZXZgIHdhcyBOVUxMLCB0aGlzIGNhdXNlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gVGhlIHBhdGNoIGZpeGVzIHRoaXMgYnkgY29weWluZyBgc2tiLVx1MDAzZWRldmAgdG8gYHNrYm4tXHUwMDNlZGV2YC4gVGhpcyBpcyBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUsIGFzIHRoZSBgZGV2YCBmaWVsZCB3YXMgZXhwbGljaXRseSB6ZXJvZWQgZHVyaW5nIGFsbG9jYXRpb24uIFN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nIG9yIEtBU0FOIHdpbGwgZWFzaWx5IGNhdGNoIHRoaXMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGIzMTNmZmI2YjQ5ODNkZTA0ZjM2YjcyOWMzNjIwNWNhYjhhOTFlZDIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyMCAyMDo0MDozOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXBfZGF0YS5jCmluZGV4IDMwNWFlMTVhZThmMzkuLmU2ZjQ4ZGM5ZmU2NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuYwpAQCAtMzk0LDYgJiM0MzszOTQsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqcm1uZXRfbWFwX2RlYWdncmVnYXRlKHN0cnVjdCBza19idWZmICpza2IsCiAJaWYgKCFza2JuKQogCQlyZXR1cm4gTlVMTDsKIAomIzQzOwlza2JuLSZndDtkZXYgPSBza2ItJmd0O2RldjsKIAlza2JfcmVzZXJ2ZShza2JuLCBSTU5FVF9NQVBfREVBR0dSX0hFQURST09NKTsKIAlza2JfcHV0KHNrYm4sIHBhY2tldF9sZW4pOwogCW1lbWNweShza2JuLSZndDtkYXRhLCBza2ItJmd0O2RhdGEsIHBhY2tldF9sZW4pOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzMAoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDI3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJNTkVUIERlYWdncmVnYXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIGBza2JuLSZndDtkZXYgPSBza2ItJmd0O2RldjtgIHdpdGhpbiB0aGUgYHJtbmV0X21hcF9kZWFnZ3JlZ2F0ZWAgZnVuY3Rpb24gaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmNgLiBMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBCYXNpY2FsbHksIHdlJiMzOTtyZSB0YWtpbmcgYSBuZXdseSBjcmVhdGVkIGBza19idWZmYCBjYWxsZWQgYHNrYm5gIGFuZCBhc3NpZ25pbmcgdGhlIG5ldHdvcmsgZGV2aWNlIChgZGV2YCkgZnJvbSB0aGUgb3JpZ2luYWwgYHNrX2J1ZmZgIChgc2tiYCkgdG8gaXQuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGxpa2VseSBhIHNhZmV0eSBtZWFzdXJlLiBXaXRob3V0IHRoaXMgbGluZSwgdGhlcmUmIzM5O3MgYSBwb3NzaWJpbGl0eSBvZiBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSwgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGxhdGVyIG9uIGluIHRoZSBjb2RlIHdoZXJlIGBza2JuLSZndDtkZXZgIGlzIHVzZWQsIGFuZCBpdCBoYXNuJiMzOTt0IGJlZW4gZXhwbGljaXRseSBzZXQuIElmIGBza2ItJmd0O2RldmAgaGFwcGVuZWQgdG8gYmUgTlVMTCwgdGhpcyBhc3NpZ25tZW50IGZpeGVzIHRoZSBwcm9ibGVtLgoKTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBwb3RlbnRpYWwgaXNzdWVzIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnksIGJ1dCB0aGVuIEkgcmVtZW1iZXIgdGhhdCBgc2tibmAgaXMgY3JlYXRlZCB3aXRoIHNvbWV0aGluZyBsaWtlIGBhbGxvY19za2JgLCBzbyBpdHMgZmllbGRzLCBsaWtlIGBkZXZgLCBhcmUgKmxpa2VseSogaW5pdGlhbGl6ZWQgdG8gTlVMTCBieSBkZWZhdWx0LiBTbywgdGhhdCYjMzk7cyBsZXNzIGxpa2VseSBhIHByb2JsZW0uCgpOb3csIEkgcmVhbGx5IG5lZWQgdG8gZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHVuZGVyc3RhbmQgaG93IGBybW5ldF9tYXBfZGVhZ2dyZWdhdGVgIGlzIHVzZWQgdG8gc2VlICp3aHkqIHRoaXMgZml4IGlzIG5lZWRlZCBhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBtaXNzaW5nIGBkZXZgIHBvaW50ZXIgd291bGQgYWN0dWFsbHkgYmUuIFRpbWUgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBmdW5jdGlvbiBpdHNlbGYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JtbmV0X21hcF9kZWFnZ3JlZ2F0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuYz0zMzY9dTMyIHJtbmV0X21hcF92YWxpZGF0ZV9wYWNrZXRfbGVuKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBybW5ldF9wb3J0ICpwb3J0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmMtMzgyLSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuYzozODM6c3RydWN0IHNrX2J1ZmYgKnJtbmV0X21hcF9kZWFnZ3JlZ2F0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuYy0zODQtXHRcdFx0XHQgICAgICBzdHJ1Y3Qgcm1uZXRfcG9ydCAqcG9ydClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg1OAoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uOiBgcm1uZXRfbWFwX2RlYWdncmVnYXRlYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHJtbmV0X21hcF9kZWFnZ3JlZ2F0ZWAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBwYXJzZSB0aGUgbmFtZS4gVGhlICYjMzQ7cm1uZXQmIzM0OyBzdWdnZXN0cyB0aGlzIGlzIHJlbGF0ZWQgdG8gYSBSYWRpbyBNb2RlbSBOZXR3b3JrLCBhIGtleSBjb25jZXB0LiBUaGUgJiMzNDttYXAmIzM0OyBlbGVtZW50IHBvaW50cyB0byBhIG1lY2hhbmlzbSBpbnZvbHZpbmcgYXNzb2NpYXRpb25zIG9yIGxvb2t1cHMgb2Ygc29tZSBraW5kLCBhbmQgdGhlbiAmIzM0O2RlYWdncmVnYXRlJiMzNDsgYWxtb3N0IGNlcnRhaW5seSBpbXBsaWVzIHNvbWUgbGV2ZWwgb2YgZGF0YSBzcGxpdHRpbmcgb3IgZGlzc2VjdGlvbi4KClNvLCBJJiMzOTttIGFscmVhZHkgZW52aXNpb25pbmcgYSBjb3JlIGZ1bmN0aW9uIHByb2JhYmx5IHRhc2tlZCB3aXRoIGJyZWFraW5nIGRvd24gYSBwb3RlbnRpYWxseSBjb21wbGV4IG9yIGVuY2Fwc3VsYXRlZCBwYXlsb2FkIHJlY2VpdmVkIG92ZXIgYW4gUk1ORVQgaW50ZXJmYWNlLCB1c2luZyBzb21lIGtpbmQgb2YgbWFwcGluZyBzdHJ1Y3R1cmUgb3IgbG9va3VwIHRvIGhhbmRsZSB0aGUgZGVhZ2dyZWdhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpcyBiZWluZyBkZWFnZ3JlZ2F0ZWQuCgpXaGF0IHNwZWNpZmljIHBpZWNlcyBvZiBkYXRhIGFyZSB3ZSB3b3JraW5nIHdpdGg/IFdoYXQmIzM5O3MgYmVpbmcgbWFwcGVkPyBJcyBpdCBhIGhlYWRlciwgYSBwcm90b2NvbCBpZGVudGlmaWVyLCBmbG93IGluZm9ybWF0aW9uLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIHR5cGUgb2YgZGF0YSBpdCBpcyBtYXBwaW5nIGFuZCBkZWFnZ3JlZ2F0aW5nIHdpbGwgc2lnbmlmaWNhbnRseSBpbmZsdWVuY2UgdGhlIGRhdGEgc3RydWN0dXJlcywgYWxnb3JpdGhtcywgYW5kIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zLiBJIHNob3VsZCBiZSBsb29raW5nIGZvciBjbHVlcyBvbiBob3cgdGhlIFJNTkVUIGxheWVyIChvciBwcm90b2NvbCkgaXMgYXJjaGl0ZWN0dXJlZC4gVGhlIGRlYWdncmVnYXRpb24gKm11c3QqIGJlIGNvbm5lY3RlZCB0byBhIGNvcnJlc3BvbmRpbmcgYWdncmVnYXRpb24gc29tZXdoZXJlIHVwc3RyZWFtLgoKSSB3YW50IHRvIGtub3cgaWYgdGhlcmUgaXMgYW55IGRpc2N1c3Npb24gcmVnYXJkaW5nIHRoZSB0cmFkZSBvZmZzIGZvciBkaWZmZXJlbnQga2luZHMgb2YgbWFwcGluZ3MgYW5kIGRlYWdncmVnYXRpb25zLiBJIHdhbnQgdG8gY2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIG1hcHBpbmcgc3RydWN0dXJlIGlzIGVmZmljaWVudDsgdGhpbmsgYWJvdXQgaGFzaCB0YWJsZXMsIGJpbmFyeSBzZWFyY2ggdHJlZXMgb3IsIGF0IGxlYXN0LCBvcHRpbWl6ZWQgbG9vcHMuIEFyZSB3ZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHRoYXQgbmVlZHMgdG8gYmUgZmFzdCBhbmQgbG93LWxhdGVuY3kgb3IgY2FuIHdlIHRvbGVyYXRlIGEgaGlnaGVyIG92ZXJoZWFkPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgdXNhZ2U/IEFyZSB0aGVyZSBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIG9yIGJ1ZmZlciBvdmVyZmxvd3MgdG8gY29uc2lkZXI/IFRoYXQmIzM5O3MgbGlrZWx5IHZlcnkgaW1wb3J0YW50LgoKRnVydGhlcm1vcmUsIGNvbnRleHQgaXMga2V5LiBXaGF0IGRvZXMgdGhpcyBpbnRlZ3JhdGUgd2l0aD8gV2hhdCBoYXBwZW5zIHRvIHRoZSBkZWFnZ3JlZ2F0ZWQgZGF0YSBhZnRlciB0aGlzIHBvaW50PyBXaGF0IGFyZSBpdHMgaW5wdXRzIGFuZCBvdXRwdXRzPyBEb2VzIGl0IHdvcmsgaW4gcmVhbCB0aW1lLCBvciBpcyBpdCBvZmZsaW5lPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIGVycm9yIGNvbmRpdGlvbnMgdG8gbG9vayBmb3I/IEFyZSB0aGVyZSBzcGVjaWZpYyBwcm90b2NvbHMgaW52b2x2ZWQ/IEkmIzM5O20gaG9waW5nIHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZSB0byBrbm93IGhvdyB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuIFdpdGggdGhpcyBrbm93bGVkZ2UgSSBjYW4gYmUgY29uZmlkZW50IGluIGhvdyB0byBiZXN0IG1haW50YWluIGFuZCBpbXByb3ZlIHRoaXMgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXBfZGF0YS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzgzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzODM6XHRzdHJ1Y3Qgc2tfYnVmZiAqcm1uZXRfbWFwX2RlYWdncmVnYXRlKHN0cnVjdCBza19idWZmICpza2IsXG4gMzg0Olx0XHRcdFx0XHQgICAgICBzdHJ1Y3Qgcm1uZXRfcG9ydCAqcG9ydClcbiAzODU6XHR7XG4gMzg2Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tibjtcbiAzODc6XHRcdHUzMiBwYWNrZXRfbGVuO1xuIDM4ODpcdFxuIDM4OTpcdFx0cGFja2V0X2xlbiA9IHJtbmV0X21hcF92YWxpZGF0ZV9wYWNrZXRfbGVuKHNrYiwgcG9ydCk7XG4gMzkwOlx0XHRpZiAoIXBhY2tldF9sZW4pXG4gMzkxOlx0XHRcdHJldHVybiBOVUxMO1xuIDM5MjpcdFxuIDM5MzpcdFx0c2tibiA9IGFsbG9jX3NrYihwYWNrZXRfbGVuICYjNDM7IFJNTkVUX01BUF9ERUFHR1JfU1BBQ0lORywgR0ZQX0FUT01JQyk7XG4gMzk0Olx0XHRpZiAoIXNrYm4pXG4gMzk1Olx0XHRcdHJldHVybiBOVUxMO1xuIDM5NjpcdFxuIDM5NzpcdFx0c2tibi1cdTAwM2VkZXYgPSBza2ItXHUwMDNlZGV2O1xuIDM5ODpcdFx0c2tiX3Jlc2VydmUoc2tibiwgUk1ORVRfTUFQX0RFQUdHUl9IRUFEUk9PTSk7XG4gMzk5Olx0XHRza2JfcHV0KHNrYm4sIHBhY2tldF9sZW4pO1xuIDQwMDpcdFx0bWVtY3B5KHNrYm4tXHUwMDNlZGF0YSwgc2tiLVx1MDAzZWRhdGEsIHBhY2tldF9sZW4pO1xuIDQwMTpcdFx0c2tiX3B1bGwoc2tiLCBwYWNrZXRfbGVuKTtcbiA0MDI6XHRcbiA0MDM6XHRcdHJldHVybiBza2JuO1xuIDQwNDpcdH1cbiA0MDU6XHRcbiA0MDY6XHQvKiBWYWxpZGF0ZXMgcGFja2V0IGNoZWNrc3Vtcy4gRnVuY3Rpb24gdGFrZXMgYSBwb2ludGVyIHRvXG4gNDA3Olx0ICogdGhlIGJlZ2lubmluZyBvZiBhIGJ1ZmZlciB3aGljaCBjb250YWlucyB0aGUgSVAgcGF5bG9hZCAmIzQzO1xuIDQwODpcdCAqIHBhZGRpbmcgJiM0MzsgY2hlY2tzdW0gdHJhaWxlci5cbiA0MDk6XHQgKiBPbmx5IElQdjQgYW5kIElQdjYgYXJlIHN1cHBvcnRlZCBhbG9uZyB3aXRoIFRDUCBcdTAwMjYgVURQLlxuIDQxMDpcdCAqIEZyYWdtZW50ZWQgb3IgdHVubmVsZWQgcGFja2V0cyBhcmUgbm90IHN1cHBvcnRlZC5cbiA0MTE6XHQgKi9cbiA0MTI6XHRpbnQgcm1uZXRfbWFwX2NoZWNrc3VtX2Rvd25saW5rX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgbGVuKVxuIDQxMzpcdHtcbiA0MTQ6XHRcdHN0cnVjdCBybW5ldF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoc2tiLVx1MDAzZWRldik7XG4gNDE1Olx0XHRzdHJ1Y3Qgcm1uZXRfbWFwX2RsX2NzdW1fdHJhaWxlciAqY3N1bV90cmFpbGVyO1xuIDQxNjpcdFxuIDQxNzpcdFx0aWYgKHVubGlrZWx5KCEoc2tiLVx1MDAzZWRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9SWENTVU0pKSkge1xuIDQxODpcdFx0XHRwcml2LVx1MDAzZXN0YXRzLmNzdW1fc3cmIzQzOyYjNDM7O1xuIDQxOTpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gNDIwOlx0XHR9XG4gNDIxOlx0XG4gNDIyOlx0XHRjc3VtX3RyYWlsZXIgPSAoc3RydWN0IHJtbmV0X21hcF9kbF9jc3VtX3RyYWlsZXIgKikoc2tiLVx1MDAzZWRhdGEgJiM0MzsgbGVuKTtcbiA0MjM6XHRcbiA0MjQ6XHRcdGlmICghKGNzdW1fdHJhaWxlci1cdTAwM2VmbGFncyBcdTAwMjYgTUFQX0NTVU1fRExfVkFMSURfRkxBRykpIHtcbiA0MjU6XHRcdFx0cHJpdi1cdTAwM2VzdGF0cy5jc3VtX3ZhbGlkX3Vuc2V0JiM0MzsmIzQzOztcbiA0MjY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDI3Olx0XHR9XG4gNDI4Olx0XG4gNDI5Olx0XHRpZiAoc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSlcbiA0MzA6XHRcdFx0cmV0dXJuIHJtbmV0X21hcF9pcHY0X2RsX2NzdW1fdHJhaWxlcihza2IsIGNzdW1fdHJhaWxlciwgcHJpdik7XG4gNDMxOlx0XG4gNDMyOlx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfSVBWNikgXHUwMDI2XHUwMDI2IHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDIzMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgU0tCIERldmljZSBQb2ludGVyIEZpeCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHNldHRpbmcgYHNrYm4tJmd0O2RldiA9IHNrYi0mZ3Q7ZGV2O2AuIFJpZ2h0LCBJIHNlZSB0aGUgaW1tZWRpYXRlIGludGVudDogaXQmIzM5O3MgYSBmaXggYWltZWQgYXQgcHJldmVudGluZyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgb3Igc29tZXRoaW5nIHZlcnkgbXVjaCBsaWtlIGl0LiBJZiBgc2tibi0mZ3Q7ZGV2YCBpcyBsZWZ0IGFzIE5VTEwsIHdlJiMzOTtyZSBnb2luZyB0byBnZXQgYSBjcmFzaCB3aGVuIHRoYXQgcG9pbnRlciBnZXRzIGFjY2Vzc2VkIGRvd25zdHJlYW0sIGFuZCBJIGNhbiBzZWUgcHJlY2lzZWx5IHdoZXJlIHRoaXMgaXMgYW4gaXNzdWUuIFRoaW5raW5nIGFib3V0IGV4YW1wbGVzLCBsaWtlIGBuZXRkZXZfcHJpdihza2ItJmd0O2RldilgIGluIGEgZnVuY3Rpb24gc3VjaCBhcyBgcm1uZXRfbWFwX2NoZWNrc3VtX2Rvd25saW5rX3BhY2tldGAgb3IgYW55d2hlcmUgdGhhdCBpcyB0cnlpbmcgdG8gdXNlIHRoZSBkZXYgcG9pbnRlci4KCkl0JiMzOTtzIG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBwcm9ibGVtOyBJIGtub3cgYGFsbG9jX3NrYmAgaW5pdGlhbGl6ZXMgYHNrYi0mZ3Q7ZGV2YCB0byBOVUxMLCBzbyB0aGVyZSYjMzk7cyB0aGUgaW5pdGlhbCBzdGF0ZS4gQnV0LCBoYW5nIG9uLi4uIGxldCBtZSByZS10cmFjZSB0aGUgYWxsb2NhdGlvbiBwYXRoLiBJZiBteSBtZW1vcnkgc2VydmVzLCBgYWxsb2Nfc2tiYCByZWxpZXMgb24gYGttZW1fY2FjaGVfYWxsb2NgLCB3aGljaCBpbiB0dXJuLCBzaG91bGQgc2V0IGBza2ItJmd0O2RldiA9IE5VTExgIHdpdGhpbiB0aGUgZnVuY3Rpb24gYF9fYnVpbGRfc2tiX2Fyb3VuZGAgb3IgYF9fYWxsb2Nfc2tiYC4KClRvIGJlIGNlcnRhaW4sIGxldCYjMzk7cyB0YWtlIGEgcXVpY2sgbG9vayBhdCBgX19hbGxvY19za2JgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrYi1cdTAwM2VkZXYgPSBOVUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzIzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGRlZXBseSBpbnZvbHZlZCBpbiB0aGlzIGFyZWE6CgoqKkRpdmluZyBpbnRvIHRoZSBTS0IgQWxsb2NhdGlvbiBQcm9jZXNzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCBndXRzIG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrIGFuZCBuZWVkIHRvIGRpZyBpbnRvIGhvdyB0aG9zZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgc3RydWN0dXJlcyBhcmUgYWN0dWFsbHkgYWxsb2NhdGVkLiBUaW1lIHRvIHB1bGwgdXAgdGhlIHNvdXJjZSBjb2RlIGZvciBgX19hbGxvY19za2JgIGluIGBuZXQvY29yZS9za2J1ZmYuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgdGhlIGNvcmUgb2YgaG93IG91ciBuZXR3b3JraW5nIGRhdGEgaXMgbWFuYWdlZCBhdCB0aGUgcGFja2V0IGxldmVsLiBJdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGV2ZXJ5IGluY29taW5nIGFuZCBvdXRnb2luZyBuZXR3b3JrIHBhY2tldC4gVW5kZXJzdGFuZGluZyB0aGlzIGZ1bmN0aW9uIGludGltYXRlbHkgaXMgY3J1Y2lhbCBmb3IgcGVyZm9ybWFuY2UgdHVuaW5nLCBkZWJ1Z2dpbmcgbWVtb3J5LXJlbGF0ZWQgaXNzdWVzLCBhbmQgcG90ZW50aWFsbHksIGNyYWZ0aW5nIGFueSBjdXN0b20gbmV0d29ya2luZyBzb2x1dGlvbnMuIEkgZXhwZWN0IHRoaXMgd2lsbCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGdldHRpbmcgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgcHJvYmxlbSBJJiMzOTttIHdvcmtpbmcgd2l0aCB0b2RheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19hbGxvY19za2ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYz02MDY9c3RhdGljIHZvaWQgKmttYWxsb2NfcmVzZXJ2ZSh1bnNpZ25lZCBpbnQgKnNpemUsIGdmcF90IGZsYWdzLCBpbnQgbm9kZSxcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy02NTctLyoqXG5uZXQvY29yZS9za2J1ZmYuYzo2NTg6ICpcdF9fYWxsb2Nfc2tiXHQtXHRhbGxvY2F0ZSBhIG5ldHdvcmsgYnVmZmVyXG5uZXQvY29yZS9za2J1ZmYuYy02NTktICpcdEBzaXplOiBzaXplIHRvIGFsbG9jYXRlXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNjczLSAqL1xubmV0L2NvcmUvc2tidWZmLmM6Njc0OnN0cnVjdCBza19idWZmICpfX2FsbG9jX3NrYih1bnNpZ25lZCBpbnQgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2ssXG5uZXQvY29yZS9za2J1ZmYuYy02NzUtXHRcdFx0ICAgIGludCBmbGFncywgaW50IG5vZGUpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNzQ1LX1cbm5ldC9jb3JlL3NrYnVmZi5jOjc0NjpFWFBPUlRfU1lNQk9MKF9fYWxsb2Nfc2tiKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTc0Ny1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz03NjE9c3RydWN0IHNrX2J1ZmYgKl9fbmV0ZGV2X2FsbG9jX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbGVuLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTc3Ni1cdCAgICAoZ2ZwX21hc2sgXHUwMDI2IChfX0dGUF9ESVJFQ1RfUkVDTEFJTSB8IEdGUF9ETUEpKSkge1xubmV0L2NvcmUvc2tidWZmLmM6Nzc3Olx0XHRza2IgPSBfX2FsbG9jX3NrYihsZW4sIGdmcF9tYXNrLCBTS0JfQUxMT0NfUlgsIE5VTUFfTk9fTk9ERSk7XG5uZXQvY29yZS9za2J1ZmYuYy03NzgtXHRcdGlmICghc2tiKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTgzOD1zdHJ1Y3Qgc2tfYnVmZiAqbmFwaV9hbGxvY19za2Ioc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCB1bnNpZ25lZCBpbnQgbGVuKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTg1NC1cdCAgICAoZ2ZwX21hc2sgXHUwMDI2IChfX0dGUF9ESVJFQ1RfUkVDTEFJTSB8IEdGUF9ETUEpKSkge1xubmV0L2NvcmUvc2tidWZmLmM6ODU1Olx0XHRza2IgPSBfX2FsbG9jX3NrYihsZW4sIGdmcF9tYXNrLCBTS0JfQUxMT0NfUlggfCBTS0JfQUxMT0NfTkFQSSxcbm5ldC9jb3JlL3NrYnVmZi5jLTg1Ni1cdFx0XHRcdCAgTlVNQV9OT19OT0RFKTtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0yMTc3PXN0cnVjdCBza19idWZmICpza2JfY29weShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBnZnBfbWFzaylcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0yMTkwLVx0c2l6ZSA9IHNrYl9lbmRfb2Zmc2V0KHNrYikgJiM0Mzsgc2tiLVx1MDAzZWRhdGFfbGVuO1xubmV0L2NvcmUvc2tidWZmLmM6MjE5MTpcdG4gPSBfX2FsbG9jX3NrYihzaXplLCBnZnBfbWFzayxcbm5ldC9jb3JlL3NrYnVmZi5jLTIxOTItXHRcdFx0c2tiX2FsbG9jX3J4X2ZsYWcoc2tiKSwgTlVNQV9OT19OT0RFKTtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0yMjI1PXN0cnVjdCBza19idWZmICpfX3Bza2JfY29weV9mY2xvbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGhlYWRyb29tLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTIyMjktXHRpbnQgZmxhZ3MgPSBza2JfYWxsb2NfcnhfZmxhZyhza2IpIHwgKGZjbG9uZSA/IFNLQl9BTExPQ19GQ0xPTkUgOiAwKTtcbm5ldC9jb3JlL3NrYnVmZi5jOjIyMzA6XHRzdHJ1Y3Qgc2tfYnVmZiAqbiA9IF9fYWxsb2Nfc2tiKHNpemUsIGdmcF9tYXNrLCBmbGFncywgTlVNQV9OT19OT0RFKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTIyMzEtXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MjUwMj1zdHJ1Y3Qgc2tfYnVmZiAqc2tiX2NvcHlfZXhwYW5kKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMjUxOS1cdG9sZGhlYWRyb29tID0gc2tiX2hlYWRyb29tKHNrYik7XG5uZXQvY29yZS9za2J1ZmYuYzoyNTIwOlx0biA9IF9fYWxsb2Nfc2tiKG5ld2hlYWRyb29tICYjNDM7IHNrYi1cdTAwM2VsZW4gJiM0MzsgbmV3dGFpbHJvb20sXG5uZXQvY29yZS9za2J1ZmYuYy0yNTIxLVx0XHRcdGdmcF9tYXNrLCBza2JfYWxsb2NfcnhfZmxhZyhza2IpLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTQ3Nzc9c3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50KHN0cnVjdCBza19idWZmICpoZWFkX3NrYixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy00OTQ0LVxubmV0L2NvcmUvc2tidWZmLmM6NDk0NTpcdFx0XHRuc2tiID0gX19hbGxvY19za2IoaHNpemUgJiM0MzsgZG9mZnNldCAmIzQzOyBoZWFkcm9vbSxcbm5ldC9jb3JlL3NrYnVmZi5jLTQ5NDYtXHRcdFx0XHRcdCAgIEdGUF9BVE9NSUMsIHNrYl9hbGxvY19yeF9mbGFnKGhlYWRfc2tiKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA1OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgYF9fYWxsb2Nfc2tiYCBpbXBsZW1lbnRhdGlvbjoKCioqRGl2aW5nIGludG8gYF9fYWxsb2Nfc2tiYCoqCgpPa2F5LCB0aW1lIHRvIGRpc3NlY3QgdGhlIGd1dHMgb2YgYF9fYWxsb2Nfc2tiYC4gTGV0JiMzOTtzIGFzc3VtZSB0aGVyZSBhcmUgcGVyZm9ybWFuY2UgaXNzdWVzLCBvciBtYXliZSBJJiMzOTttIGxvb2tpbmcgYXQgcG90ZW50aWFsIG1lbW9yeSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMgYW5kIGhvdyB0aGV5IGNhbiBiZSBvcHRpbWl6ZWQuIE15IGZpcnN0IHBvcnQgb2YgY2FsbCB3aWxsIGJlIHRvIGNoZWNrIG91dCBob3cgYF9fYWxsb2Nfc2tiYCBpcyBpbXBsZW1lbnRlZC4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGUgYXJjaGl0ZWN0dXJhbCBjb250ZXh0LiBXaGF0IGhhcmR3YXJlIGFtIEkgZGVhbGluZyB3aXRoPyBJcyB0aGlzIGEgc3lzdGVtIHdpdGggRE1BIGNhcGFiaWxpdGllcz8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBoaWdoLXRocm91Z2hwdXQgbmV0d29yayBjYXJkPyBUaGlzIHVuZGVyc3RhbmRpbmcgaXMgYWJzb2x1dGVseSBjcml0aWNhbCB0byBldmVuIGJlZ2luIHVuZGVyc3RhbmRpbmcgdGhlIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzIG9yIHBvdGVudGlhbCBpc3N1ZXMgaW4gdGhpcyBmdW5kYW1lbnRhbCBhbGxvY2F0aW9uIGZ1bmN0aW9uLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBpcyB0aGUgdW5kZXJseWluZyBtZW1vcnkgbWFuYWdlbWVudCBhIGZhY3Rvcj8gQXJlIHdlIHJ1bm5pbmcgd2l0aCBhIHN0YW5kYXJkIG1lbW9yeSBhbGxvY2F0b3IgbGlrZSBTTEFCLCBTTFVCLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZD8gVGhlIGNob2ljZSBvZiBhbGxvY2F0b3Igc2lnbmlmaWNhbnRseSBpbXBhY3RzIHBlcmZvcm1hbmNlLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IHBpZWNlIGZpcnN0LiBOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBjb2RlLi4uIHdoYXQmIzM5O3MgdGhlIGFsbG9jYXRpb24gc2l6ZT8gQXJlIHRoZXkgdXNpbmcgYSBjb21tb24gc2l6ZSwgYXJlIHRoZXJlIHNpemUgY2xhc3NlcywgaG93IGlzIHRoZSBhY3R1YWwgbWVtb3J5IGJlaW5nIHJldHJpZXZlZCBmcm9tIHRoZSBrZXJuZWw/IElzIHRoZXJlIGEgc3BpbmxvY2sgb3Igb3RoZXIgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbT8gSXMgaXQgZWZmaWNpZW50LCBvciBpcyBpdCBhIGJvdHRsZW5lY2s/IExldCYjMzk7cyBjaGVjayB0aGUgZmxhZ3MgcGFzc2VkIHRvIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb25zIOKAkyBgR0ZQXy4uLmAgZmxhZ3MgZ2l2ZSB1cyBjbHVlcyBhYm91dCBhbGxvY2F0aW9uIGJlaGF2aW9yIGFuZCBwcmlvcml0aWVzLiBEb2VzIGl0IGFnZ3Jlc3NpdmVseSB0cnkgdG8gYXZvaWQgZnJhZ21lbnRhdGlvbj8gSXMgdGhlcmUgYSBwb3RlbnRpYWwgZm9yIG1lbW9yeSBsZWFrcyBvciBvdGhlciBhbGxvY2F0aW9uIHByb2JsZW1zIEkgbmVlZCB0byBiZSBjb25jZXJuZWQgd2l0aD8gTGV0JiMzOTtzIHRyYWNlIHRocm91Z2ggdGhlIGxvZ2ljIGFuZCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGhvdHNwb3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjc0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NzQ6XHRzdHJ1Y3Qgc2tfYnVmZiAqX19hbGxvY19za2IodW5zaWduZWQgaW50IHNpemUsIGdmcF90IGdmcF9tYXNrLFxuIDY3NTpcdFx0XHRcdCAgICBpbnQgZmxhZ3MsIGludCBub2RlKVxuIDY3NjpcdHtcbiA2Nzc6XHRcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xuIDY3ODpcdFx0c3RydWN0IGttZW1fY2FjaGUgKmNhY2hlO1xuIDY3OTpcdFx0dTggKmRhdGE7XG4gNjgwOlx0XG4gNjgxOlx0XHRpZiAoc2tfbWVtYWxsb2Nfc29ja3MoKSBcdTAwMjZcdTAwMjYgKGZsYWdzIFx1MDAyNiBTS0JfQUxMT0NfUlgpKVxuIDY4MjpcdFx0XHRnZnBfbWFzayB8PSBfX0dGUF9NRU1BTExPQztcbiA2ODM6XHRcbiA2ODQ6XHRcdGlmIChmbGFncyBcdTAwMjYgU0tCX0FMTE9DX0ZDTE9ORSkge1xuIDY4NTpcdFx0XHRjYWNoZSA9IG5ldF9ob3RkYXRhLnNrYnVmZl9mY2xvbmVfY2FjaGU7XG4gNjg2Olx0XHRcdGdvdG8gZmFsbGJhY2s7XG4gNjg3Olx0XHR9XG4gNjg4Olx0XHRjYWNoZSA9IG5ldF9ob3RkYXRhLnNrYnVmZl9jYWNoZTtcbiA2ODk6XHRcdGlmICh1bmxpa2VseShub2RlICE9IE5VTUFfTk9fTk9ERSBcdTAwMjZcdTAwMjYgbm9kZSAhPSBudW1hX21lbV9pZCgpKSlcbiA2OTA6XHRcdFx0Z290byBmYWxsYmFjaztcbiA2OTE6XHRcbiA2OTI6XHRcdGlmIChmbGFncyBcdTAwMjYgU0tCX0FMTE9DX05BUEkpIHtcbiA2OTM6XHRcdFx0c2tiID0gbmFwaV9za2JfY2FjaGVfZ2V0KHRydWUpO1xuIDY5NDpcdFx0XHRpZiAodW5saWtlbHkoIXNrYikpXG4gNjk1Olx0XHRcdFx0cmV0dXJuIE5VTEw7XG4gNjk2Olx0XHR9IGVsc2UgaWYgKCFpbl9oYXJkaXJxKCkgXHUwMDI2XHUwMDI2ICFpcnFzX2Rpc2FibGVkKCkpIHtcbiA2OTc6XHRcdFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuIDY5ODpcdFx0XHRza2IgPSBuYXBpX3NrYl9jYWNoZV9nZXQoZmFsc2UpO1xuIDY5OTpcdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbiA3MDA6XHRcdH1cbiA3MDE6XHRcbiA3MDI6XHRcdGlmICghc2tiKSB7XG4gNzAzOlx0ZmFsbGJhY2s6XG4gNzA0Olx0XHRcdHNrYiA9IGttZW1fY2FjaGVfYWxsb2Nfbm9kZShjYWNoZSwgZ2ZwX21hc2sgXHUwMDI2IH5HRlBfRE1BLCBub2RlKTtcbiA3MDU6XHRcdFx0aWYgKHVubGlrZWx5KCFza2IpKVxuIDcwNjpcdFx0XHRcdHJldHVybiBOVUxMO1xuIDcwNzpcdFx0fVxuIDcwODpcdFx0c2tidWZmX2NsZWFyKHNrYik7XG4gNzA5Olx0XG4gNzEwOlx0XHQvKiBXZSBkbyBvdXIgYmVzdCB0byBhbGlnbiBza2Jfc2hhcmVkX2luZm8gb24gYSBzZXBhcmF0ZSBjYWNoZVxuIDcxMTpcdFx0ICogbGluZS4gSXQgdXN1YWxseSB3b3JrcyBiZWNhdXNlIGttYWxsb2MoWCBcdTAwM2UgU01QX0NBQ0hFX0JZVEVTKSBnaXZlc1xuIDcxMjpcdFx0ICogYWxpZ25lZCBtZW1vcnkgYmxvY2tzLCB1bmxlc3MgU0xVQi9TTEFCIGRlYnVnIGlzIGVuYWJsZWQuXG4gNzEzOlx0XHQgKiBCb3RoIHNrYi1cdTAwM2VoZWFkIGFuZCBza2Jfc2hhcmVkX2luZm8gYXJlIGNhY2hlIGxpbmUgYWxpZ25lZC5cbiA3MTQ6XHRcdCAqL1xuIDcxNTpcdFx0ZGF0YSA9IGttYWxsb2NfcmVzZXJ2ZShcdTAwMjZzaXplLCBnZnBfbWFzaywgbm9kZSwgc2tiKTtcbiA3MTY6XHRcdGlmICh1bmxpa2VseSghZGF0YSkpXG4gNzE3Olx0XHRcdGdvdG8gbm9kYXRhO1xuIDcxODpcdFx0Lyoga21hbGxvY19zaXplX3JvdW5kdXAoKSBtaWdodCBnaXZlIHVzIG1vcmUgcm9vbSB0aGFuIHJlcXVlc3RlZC5cbiA3MTk6XHRcdCAqIFB1dCBza2Jfc2hhcmVkX2luZm8gZXhhY3RseSBhdCB0aGUgZW5kIG9mIGFsbG9jYXRlZCB6b25lLFxuIDcyMDpcdFx0ICogdG8gYWxsb3cgbWF4IHBvc3NpYmxlIGZpbGxpbmcgYmVmb3JlIHJlYWxsb2NhdGlvbi5cbiA3MjE6XHRcdCAqL1xuIDcyMjpcdFx0X19maW5hbGl6ZV9za2JfYXJvdW5kKHNrYiwgZGF0YSwgc2l6ZSk7XG4gNzIzOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIwOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNjUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgc2tidWZmX2NsZWFyYCoqCgpPa2F5LCBzbyB0aGUgaW5zdHJ1Y3Rpb24gaXMgdG8gZXhhbWluZSBgc2tidWZmX2NsZWFyYC4gTmF0dXJhbGx5LCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIGl0cyBjb3JlIGZ1bmN0aW9uOiBjbGVhcmluZyBhIGBza2JgIChzb2NrZXQgYnVmZmVyKS4gTXkgZXhwZXJ0aXNlIGRpY3RhdGVzIHRoYXQgSSBuZWVkIHRvIGRpc3NlY3QgZXhhY3RseSAqaG93KiBpdCBjbGVhcnMgdGhlIHNrYi4gRG9lcyBpdCBzaW1wbHkgemVybyBvdXQgdGhlIG1lbW9yeT8gRG9lcyBpdCByZWxlYXNlIHJlc291cmNlcz8gRG9lcyBpdCBhZmZlY3QgdGhlIGNvbnRyb2wgc3RydWN0dXJlcyBpbiBhbnkgd2F5PyBUaGUgZ29hbCBpcyB0byBzZWUgcHJlY2lzZWx5IGhvdyB0aGUgc2tiIGlzIGJlaW5nIHB1cmdlZCwgc28gSSBuZWVkIHRvIGNoZWNrIGBza2J1ZmZfY2xlYXJgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza2J1ZmZfY2xlYXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYz0yODQ9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqbmFwaV9za2JfY2FjaGVfZ2V0KGJvb2wgYWxsb2MpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMzE1LSAqL1xubmV0L2NvcmUvc2tidWZmLmM6MzE2OnN0YXRpYyBpbmxpbmUgdm9pZCBza2J1ZmZfY2xlYXIoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9jb3JlL3NrYnVmZi5jLTMxNy17XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MzQ0PXUzMiBuYXBpX3NrYl9jYWNoZV9nZXRfYnVsayh2b2lkICoqc2ticywgdTMyIG4pXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMzc5LVx0XHRrYXNhbl9tZW1wb29sX3VucG9pc29uX29iamVjdChza2JzW2ldLCBza2J1ZmZfY2FjaGVfc2l6ZSk7XG5uZXQvY29yZS9za2J1ZmYuYzozODA6XHRcdHNrYnVmZl9jbGVhcihza2JzW2ldKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTM4MS1cdH1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz00Mzc9c3RydWN0IHNrX2J1ZmYgKnNsYWJfYnVpbGRfc2tiKHZvaWQgKmRhdGEpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNDQ2LVxubmV0L2NvcmUvc2tidWZmLmM6NDQ3Olx0c2tidWZmX2NsZWFyKHNrYik7XG5uZXQvY29yZS9za2J1ZmYuYy00NDgtXHRkYXRhID0gX19zbGFiX2J1aWxkX3NrYihkYXRhLCBcdTAwMjZzaXplKTtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz00OTA9c3RydWN0IHNrX2J1ZmYgKl9fYnVpbGRfc2tiKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBmcmFnX3NpemUpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNDk4LVxubmV0L2NvcmUvc2tidWZmLmM6NDk5Olx0c2tidWZmX2NsZWFyKHNrYik7XG5uZXQvY29yZS9za2J1ZmYuYy01MDAtXHRfX2J1aWxkX3NrYl9hcm91bmQoc2tiLCBkYXRhLCBmcmFnX3NpemUpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTU1Mj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKl9fbmFwaV9idWlsZF9za2Iodm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGZyYWdfc2l6ZSlcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy01NTktXG5uZXQvY29yZS9za2J1ZmYuYzo1NjA6XHRza2J1ZmZfY2xlYXIoc2tiKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTU2MS1cdF9fYnVpbGRfc2tiX2Fyb3VuZChza2IsIGRhdGEsIGZyYWdfc2l6ZSk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9Njc0PXN0cnVjdCBza19idWZmICpfX2FsbG9jX3NrYih1bnNpZ25lZCBpbnQgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNzA3LVx0fVxubmV0L2NvcmUvc2tidWZmLmM6NzA4Olx0c2tidWZmX2NsZWFyKHNrYik7XG5uZXQvY29yZS9za2J1ZmYuYy03MDktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIwOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwOTQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBgc2tidWZmX2NsZWFyYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBpbml0aWFsIHRob3VnaHQgaGVyZSwgJiMzNDtMZXQmIzM5O3MgcmVhZCBgc2tidWZmX2NsZWFyYCwmIzM0OyBpbmRpY2F0ZXMgYSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1lY2hhbmljcyBvZiB0aGF0IHNwZWNpZmljIGZ1bmN0aW9uLiBNeSBpbW1lZGlhdGUgYXNzdW1wdGlvbiBpcyB0aGF0IHdlIGFyZSBsb29raW5nIGF0IHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBMaW51eCBrZXJuZWwmIzM5O3MgbmV0d29ya2luZyBzdGFjaywgZ2l2ZW4gdGhlIGBza2J1ZmZgIHByZWZpeC4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB3ZSYjMzk7bGwgYmUgZGVhbGluZyB3aXRoIHRoZSBjb3JlIHN0cnVjdHVyZSB1c2VkIGZvciBtYW5hZ2luZyBuZXR3b3JrIHBhY2tldHMg4oCTIHRoZSBgc2tfYnVmZmAgc3RydWN0dXJlIGl0c2VsZi4KClRoZSBnb2FsIGlzIGxpa2VseSB0byBkZWNvbnN0cnVjdCBpdHMgb3BlcmF0aW9uOyB0byB1bmRlcnN0YW5kIHByZWNpc2VseSB3aGF0IGhhcHBlbnMgd2hlbiBhbiBgc2tidWZmYCBpbnN0YW5jZSBpcyAmIzM0O2NsZWFyZWQuJiMzNDsgVGhpcyBjb3VsZCBpbnZvbHZlIHplcm9pbmcgb3V0IG1lbW9yeSwgcmVsZWFzaW5nIGFzc29jaWF0ZWQgcmVzb3VyY2VzIGxpa2UgZGF0YSBidWZmZXJzIGFuZCBtZXRhZGF0YSwgcG9zc2libHkgdXBkYXRpbmcgaW50ZXJuYWwgZmxhZ3MsIGFuZCBtYXliZSBldmVuIHJldHVybmluZyB0aGUgYHNrYnVmZmAgdG8gYSBwb29sIGZvciByZXVzZS4gVGhlIHNwZWNpZmljcyBhcmUga2V5IGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgY2FsbHMgdG8gZnVuY3Rpb25zIGxpa2UgYGtmcmVlX3NrYmAsIGBza2JfcmVsZWFzZV9kYXRhYCwgYW55IG1hbmlwdWxhdGlvbiBvZiBgZGF0YWAsIGB0YWlsYCwgYGxlbmAsIGBoZWFkYCwgYG5leHRgLCBgcHJldmAgcG9pbnRlcnMsIGFuZCBhbnl0aGluZyByZWxhdGVkIHRvIHJlZmVyZW5jZSBjb3VudGluZy4KCk15IHByaW1hcnkgZm9jdXMgd2lsbCBiZSBvbiBlbnN1cmluZyBlZmZpY2llbnQgcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgcHJldmVudGluZyBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zLiBJJiMzOTtsbCBhbHNvIGJlIHdhdGNoaW5nIGZvciBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBpZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBjb25jdXJyZW50bHkgaW4gYSBtdWx0aS10aHJlYWRlZCBjb250ZXh0LiBBIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgaG93IGBza2J1ZmZfY2xlYXJgIGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBpbnRlcnJ1cHQgY29udGV4dHMgd2lsbCBiZSBjcnVjaWFsLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjb21tZW50cyB3aXRoaW4gdGhlIGNvZGUsIGFuZCBtYXliZSBhbHNvIGFueSByZWxhdGVkIGRvY3VtZW50YXRpb24sIHRvIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhlIGNob3NlbiBpbXBsZW1lbnRhdGlvbiwgcGFydGljdWxhcmx5IGlmIGFueSBvcHRpbWl6YXRpb25zIGFyZSBlbXBsb3llZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxNiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzE2Olx0c3RhdGljIGlubGluZSB2b2lkIHNrYnVmZl9jbGVhcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDMxNzpcdHtcbiAzMTg6XHRcdC8qIFJlcGxhY2UgbWVtc2V0KHNrYiwgMCwgb2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIHRhaWwpKVxuIDMxOTpcdFx0ICogd2l0aCB0d28gc21hbGxlciBtZW1zZXQoKSwgd2l0aCBhIGJhcnJpZXIoKSBiZXR3ZWVuIHRoZW0uXG4gMzIwOlx0XHQgKiBUaGlzIGZvcmNlcyB0aGUgY29tcGlsZXIgdG8gaW5saW5lIGJvdGggY2FsbHMuXG4gMzIxOlx0XHQgKi9cbiAzMjI6XHRcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3Qgc2tfYnVmZiwgdGFpbCkgXHUwMDNjPSAxMjgpO1xuIDMyMzpcdFx0bWVtc2V0KHNrYiwgMCwgMTI4KTtcbiAzMjQ6XHRcdGJhcnJpZXIoKTtcbiAzMjU6XHRcdG1lbXNldCgodm9pZCAqKXNrYiAmIzQzOyAxMjgsIDAsIG9mZnNldG9mKHN0cnVjdCBza19idWZmLCB0YWlsKSAtIDEyOCk7XG4gMzI2Olx0fVxuIDMyNzpcdFxuIDMyODpcdC8qKlxuIDMyOTpcdCAqIG5hcGlfc2tiX2NhY2hlX2dldF9idWxrIC0gb2J0YWluIGEgbnVtYmVyIG9mIHplcm9lZCBza2IgaGVhZHMgZnJvbSB0aGUgY2FjaGVcbiAzMzA6XHQgKiBAc2ticzogcG9pbnRlciB0byBhbiBhdCBsZWFzdCBAbi1zaXplZCBhcnJheSB0byBmaWxsIHdpdGggc2tiIHBvaW50ZXJzXG4gMzMxOlx0ICogQG46IG51bWJlciBvZiBlbnRyaWVzIHRvIHByb3ZpZGVcbiAzMzI6XHQgKlxuIDMzMzpcdCAqIFRyaWVzIHRvIG9idGFpbiBAbiBcdTAwMjZza19idWZmIGVudHJpZXMgZnJvbSB0aGUgTkFQSSBwZXJjcHUgY2FjaGUgYW5kIHdyaXRlc1xuIDMzNDpcdCAqIHRoZSBwb2ludGVycyBpbnRvIHRoZSBwcm92aWRlZCBhcnJheSBAc2ticy4gSWYgdGhlcmUgYXJlIGxlc3MgZW50cmllc1xuIDMzNTpcdCAqIGF2YWlsYWJsZSwgdHJpZXMgdG8gcmVwbGVuaXNoIHRoZSBjYWNoZSBhbmQgYnVsay1hbGxvY2F0ZXMgdGhlIGRpZmYgZnJvbVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODk1CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBCdWcgRml4KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgSSBzZWUgdGhlIGNvcmUgaXNzdWU6IGBza2ItJmd0O2RldmAgaXMgaW5pdGlhbGl6ZWQgdG8gTlVMTCB3aGVuIGBza2JuYCBpcyBhbGxvY2F0ZWQuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgc2ltcGxlIGxpbmU6IGBza2JuLSZndDtkZXYgPSBza2ItJmd0O2RldjtgLiBUaGF0JiMzOTtzIGp1c3QgYSBkaXJlY3QgcG9pbnRlciBjb3B5LCBncmFiYmluZyB0aGUgYGRldmAgcG9pbnRlciBmcm9tIHRoZSBvcmlnaW5hbCBgc2tiYCBhbmQgYXNzaWduaW5nIGl0IHRvIHRoZSBuZXcgYHNrYm5gLiBUaGlzIGlzIGNsZWFybHkgYSBmaXggZm9yIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlLiBUaGUgcHJvYmxlbSB3YXMgdGhhdCBgc2tibi0mZ3Q7ZGV2YCB3YXMgZXhwZWN0ZWQgdG8gYmUgc2V0LCBidXQgaXQgd2FzbiYjMzk7dCwgd2hpY2ggd2FzIGNhdXNpbmcgYSBjcmFzaC4KCk15IGluaXRpYWwgdGhvdWdodCB3YXMsICYjMzQ7V2FpdCwgaXMgdGhpcyBwb3RlbnRpYWxseSBhIHVzZS1hZnRlci1mcmVlIHNpdHVhdGlvbiwgd2hlcmUgYHNrYm4tJmd0O2RldmAgaXMgcG9pbnRpbmcgdG8gdW5pbml0aWFsaXplZCBtZW1vcnk/JiMzNDsgQnV0IHRoYXQmIzM5O3Mgbm90IGl0LiBJdCYjMzk7cyBhIHBvaW50ZXIgdG8gYSBgbmV0X2RldmljZWAgc3RydWN0dXJlLiBUaGlzIGlzIGFsbCBhYm91dCBlbnN1cmluZyB0aGUgYG5ldF9kZXZpY2VgIHBvaW50ZXIgaXMgdmFsaWQuIE5vdyBJIG5lZWQgdG8gc2VlIHdoZXJlIGBybW5ldF9tYXBfZGVhZ2dyZWdhdGVgIGlzIGNhbGxlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgZml4IGFuZCBleGFjdGx5IGhvdyBgc2tibi0mZ3Q7ZGV2YCBpcyB1c2VkLCBhbmQgd2h5IGl0JiMzOTtzIHNvIGltcG9ydGFudCBpbiB0aGF0IGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JtbmV0X21hcF9kZWFnZ3JlZ2F0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9oYW5kbGVycy5jPTEwOT1ybW5ldF9tYXBfaW5ncmVzc19oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYy0xMjMtXHRpZiAocG9ydC1cdTAwM2VkYXRhX2Zvcm1hdCBcdTAwMjYgUk1ORVRfRkxBR1NfSU5HUkVTU19ERUFHR1JFR0FUSU9OKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9oYW5kbGVycy5jOjEyNDpcdFx0d2hpbGUgKChza2JuID0gcm1uZXRfbWFwX2RlYWdncmVnYXRlKHNrYiwgcG9ydCkpICE9IE5VTEwpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9oYW5kbGVycy5jLTEyNS1cdFx0XHRfX3JtbmV0X21hcF9pbmdyZXNzX2hhbmRsZXIoc2tibiwgcG9ydCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwLmg9MjY9ZW51bSBybW5ldF9tYXBfY29tbWFuZHMge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcC5oLTQyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwLmg6NDM6c3RydWN0IHNrX2J1ZmYgKnJtbmV0X21hcF9kZWFnZ3JlZ2F0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwLmgtNDQtXHRcdFx0XHQgICAgICBzdHJ1Y3Qgcm1uZXRfcG9ydCAqcG9ydCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuYz0zMzY9dTMyIHJtbmV0X21hcF92YWxpZGF0ZV9wYWNrZXRfbGVuKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBybW5ldF9wb3J0ICpwb3J0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmMtMzgyLSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuYzozODM6c3RydWN0IHNrX2J1ZmYgKnJtbmV0X21hcF9kZWFnZ3JlZ2F0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuYy0zODQtXHRcdFx0XHQgICAgICBzdHJ1Y3Qgcm1uZXRfcG9ydCAqcG9ydClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg2MgoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZywgZXhwcmVzc2VkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBfX3JtbmV0X21hcF9pbmdyZXNzX2hhbmRsZXJgKioKCk9rYXksIGxldCYjMzk7cyBkaXNzZWN0IGBfX3JtbmV0X21hcF9pbmdyZXNzX2hhbmRsZXJgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBSTU5FVCBhcmNoaXRlY3R1cmUsIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyBpbmJvdW5kIHRyYWZmaWMuIFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGl0JiMzOTtzIGludGVyYWN0aW5nIHdpdGg/IEFyZSB3ZSB0YWxraW5nIGFib3V0IHBhY2tldCBoZWFkZXJzLCByb3V0aW5nIHRhYmxlcywgY29ubmVjdGlvbiB0cmFja2luZywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBwb2ludHMgb2YgaW5ncmVzcyAtIHdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gZ2V0dGluZyBjYWxsZWQgZnJvbSwgYW5kIHdoYXQga2luZCBvZiBjb250ZXh0IGlzIGl0IHJlY2VpdmluZz8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgY29uY3VycmVuY3kgaXNzdWVzIHRoYXQganVtcCBvdXQgaW1tZWRpYXRlbHk/IEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGNvcmUgbG9naWM6IHRoZSBkZWNpc2lvbi1tYWtpbmcgcHJvY2VzcyB3aXRoaW4gdGhpcyBoYW5kbGVyLiBJcyBpdCBwZXJmb3JtaW5nIGxvb2t1cHMsIG1vZGlmeWluZyBwYWNrZXRzLCBmb3J3YXJkaW5nIHRvIG90aGVyIGZ1bmN0aW9ucywgb3IgcGVyaGFwcyBtYW5hZ2luZyBRb1Mgb3Igc2VjdXJpdHkgZmVhdHVyZXM/IEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IGJ5IGxvb2tpbmcgYXQgaXRzIGFyZ3VtZW50cyBhbmQgcmV0dXJuIHZhbHVlcyB0byBnZXQgYSBzZW5zZSBvZiBpdHMgaW5wdXQgYW5kIG91dHB1dC4gSSYjMzk7bGwgbmVlZCB0byBjb3JyZWxhdGUgdGhpcyBmdW5jdGlvbiB3aXRoIG90aGVyIHJlbGF0ZWQgY29kZSB0byBidWlsZCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgaXRzIHB1cnBvc2UgYW5kIGltcGFjdCBvbiB0aGUgZGF0YSBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3JtbmV0X21hcF9pbmdyZXNzX2hhbmRsZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9oYW5kbGVycy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X2hhbmRsZXJzLmM9NTU9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X2hhbmRsZXJzLmM6NTY6X19ybW5ldF9tYXBfaW5ncmVzc19oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9oYW5kbGVycy5jLTU3LVx0XHRcdCAgICBzdHJ1Y3Qgcm1uZXRfcG9ydCAqcG9ydClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9oYW5kbGVycy5jPTEwOT1ybW5ldF9tYXBfaW5ncmVzc19oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYy0xMjQtXHRcdHdoaWxlICgoc2tibiA9IHJtbmV0X21hcF9kZWFnZ3JlZ2F0ZShza2IsIHBvcnQpKSAhPSBOVUxMKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYzoxMjU6XHRcdFx0X19ybW5ldF9tYXBfaW5ncmVzc19oYW5kbGVyKHNrYm4sIHBvcnQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYy0xMjYtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYy0xMjktXHRcdGlmIChybW5ldF9tYXBfdmFsaWRhdGVfcGFja2V0X2xlbihza2IsIHBvcnQpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYzoxMzA6XHRcdFx0X19ybW5ldF9tYXBfaW5ncmVzc19oYW5kbGVyKHNrYiwgcG9ydCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9oYW5kbGVycy5jLTEzMS1cdFx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU0NQoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgX19ybW5ldF9tYXBfaW5ncmVzc19oYW5kbGVyYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gVGhlIG5hbWUgYWxvbmUsIGBfX3JtbmV0X21hcF9pbmdyZXNzX2hhbmRsZXJgLCBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGFuIGluZ3Jlc3MgaGFuZGxlciB3aXRoaW4gdGhlIFJNTkVUIGZyYW1ld29yay4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIGl0cyBwbGFjZSBpbiB0aGUgb3ZlcmFsbCBkYXRhIGZsb3cuIFRoaXMgbGlrZWx5IG1lYW5zIGl0IHNpdHMgYmV0d2VlbiB0aGUgbmV0d29yayBpbnRlcmZhY2UgKHByb2JhYmx5IHNvbWV0aGluZyBsaWtlIGEgUXVhbGNvbW0mIzM5O3MgUk1ORVQpIGFuZCBzb21lIGludGVybmFsIGRhdGEgc3RydWN0dXJlIG9yIHByb2Nlc3Npbmcgc3RhZ2UuCgpJ4oCZbSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSByZXNwb25zaWJsZSBmb3IgdGFraW5nIGluY29taW5nIHBhY2tldHMg4oCTIGxpa2VseSBFdGhlcm5ldCBmcmFtZXMgb3IgSVAgcGFja2V0cyBlbmNhcHN1bGF0ZWQgd2l0aGluIFJNTkVULXNwZWNpZmljIHByb3RvY29scyDigJMgYW5kIHBlcmZvcm1pbmcgYW55IG5lY2Vzc2FyeSB0cmFuc2Zvcm1hdGlvbnMgb3IgbG9va3VwcyBiZWZvcmUgcGFzc2luZyB0aGVtIG9uLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgY291bGQgaW5jbHVkZSB0aGluZ3MgbGlrZToKCiogICAqKkhlYWRlciBkZWNvZGluZy9pbnRlcnByZXRhdGlvbjoqKiBQYXJzaW5nIFJNTkVUIGhlYWRlcnMsIHBvdGVudGlhbGx5IHN0cmlwcGluZyB0aGVtLCBhbmQgZXhwb3NpbmcgdGhlIHVuZGVybHlpbmcgbmV0d29yayBsYXllciBpbmZvcm1hdGlvbi4KKiAgICoqQWRkcmVzcyB0cmFuc2xhdGlvbi9tYXBwaW5nOioqIENvbnZlcnRpbmcgdmlydHVhbCBvciB0dW5uZWwgYWRkcmVzc2VzIHRvIHBoeXNpY2FsIGFkZHJlc3Nlcywgd2hpY2ggaXMgY29tbW9uIGluIFJNTkVUIGVudmlyb25tZW50cyBmb3IgbW9iaWxlIGRhdGEuCiogICAqKkZsb3cgY2xhc3NpZmljYXRpb24vaWRlbnRpZmljYXRpb246KiogSWRlbnRpZnlpbmcgdGhlIGZsb3cgb3IgYXBwbGljYXRpb24gdGhpcyBwYWNrZXQgYmVsb25ncyB0bywgcGVyaGFwcyB1c2luZyBzb21lIHNvcnQgb2YgaGFzaCBvciBsb29rdXAgdGFibGUuCiogICAqKlJhdGUgbGltaXRpbmcvUW9TOioqIEltcGxlbWVudGluZyBhbnkgYmFzaWMgcmF0ZSBsaW1pdGluZyBvciBxdWFsaXR5IG9mIHNlcnZpY2UgcnVsZXMgYmVmb3JlIHRoZSBwYWNrZXQgbW92ZXMgdG8gb3RoZXIgcGFydHMgb2YgdGhlIG5ldHdvcmsgc3RhY2suCiogICAqKkVycm9yIGhhbmRsaW5nL3ZhbGlkYXRpb246KiogQ2hlY2tpbmcgZm9yIG1hbGZvcm1lZCBwYWNrZXRzIG9yIHVuZXhwZWN0ZWQgZGF0YSBhbmQgaGFuZGxpbmcgdGhlbSwgcGVyaGFwcyBsb2dnaW5nIGVycm9ycyBvciBkcm9wcGluZyB0aGVtLgoqICAgKipTZWN1cml0eSBjaGVjazoqKiBTb21lIGJhc2ljIHNlY3VyaXR5IGNoZWNrIHN1Y2ggYXMgZmlsdGVyaW5nIG1hbGZvcm1lZCBwYWNrZXRzLgoqICAgKipGb3J3YXJkaW5nIHBhY2tldHM6KiogQmFzZWQgb24gdGhlIGluZm9ybWF0aW9uIGZyb20gYWJvdmUuCgpJ4oCZbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCB1c2VzLCBwYXJ0aWN1bGFybHkgaWYgaXQgaW50ZXJmYWNlcyB3aXRoIG90aGVyIFJNTkVUIGNvbXBvbmVudHMgbGlrZSB0aGUgYHJtbmV0X21hcGAgdGFibGVzIG9yIHRoZSBpbnRlcm5hbCBidWZmZXIgbWFuYWdlbWVudC4gQXJlIHRoZXJlIGFueSBtdXRleGVzIG9yIGxvY2tzIGluIHBsYXk/IENvbmN1cnJlbmN5IGlzIGFsd2F5cyBhIGNvbmNlcm4uIEkmIzM5O20gYWxzbyBjdXJpb3VzIGFib3V0IGl0cyBlcnJvciBoYW5kbGluZyDigJMgZG9lcyBpdCBqdXN0IGxvZyBlcnJvcnMsIHBhbmljLCBvciBhdHRlbXB0IHRvIHJlY292ZXI/CgpJbiBzaG9ydCwgSSYjMzk7bSBleHBlY3RpbmcgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgZGF0YSBwbGFuZSwgYW5kIEkmIzM5O20gcmVhZHkgdG8gZmlndXJlIG91dCBleGFjdGx5IGhvdyBpdCBmaXRzIGludG8gdGhlIFJNTkVUIHBpY3R1cmUuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgaW5ncmVzcyBzaWRlLCBhbmQgaG93IHBhY2tldHMgZW50ZXIgaW50byB0aGUgc3lzdGVtLiBMZXQmIzM5O3Mgc2VlIHdoYXTigJlzIGluc2lkZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9oYW5kbGVycy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1NTpcdHN0YXRpYyB2b2lkXG4gIDU2Olx0X19ybW5ldF9tYXBfaW5ncmVzc19oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsXG4gIDU3Olx0XHRcdFx0ICAgIHN0cnVjdCBybW5ldF9wb3J0ICpwb3J0KVxuICA1ODpcdHtcbiAgNTk6XHRcdHN0cnVjdCBybW5ldF9tYXBfaGVhZGVyICptYXBfaGVhZGVyID0gKHZvaWQgKilza2ItXHUwMDNlZGF0YTtcbiAgNjA6XHRcdHN0cnVjdCBybW5ldF9lbmRwb2ludCAqZXA7XG4gIDYxOlx0XHR1MTYgbGVuLCBwYWQ7XG4gIDYyOlx0XHR1OCBtdXhfaWQ7XG4gIDYzOlx0XG4gIDY0Olx0XHRpZiAobWFwX2hlYWRlci1cdTAwM2VmbGFncyBcdTAwMjYgTUFQX0NNRF9GTEFHKSB7XG4gIDY1Olx0XHRcdC8qIFBhY2tldCBjb250YWlucyBhIE1BUCBjb21tYW5kIChub3QgZGF0YSkgKi9cbiAgNjY6XHRcdFx0aWYgKHBvcnQtXHUwMDNlZGF0YV9mb3JtYXQgXHUwMDI2IFJNTkVUX0ZMQUdTX0lOR1JFU1NfTUFQX0NPTU1BTkRTKVxuICA2NzpcdFx0XHRcdHJldHVybiBybW5ldF9tYXBfY29tbWFuZChza2IsIHBvcnQpO1xuICA2ODpcdFxuICA2OTpcdFx0XHRnb3RvIGZyZWVfc2tiO1xuICA3MDpcdFx0fVxuICA3MTpcdFxuICA3MjpcdFx0bXV4X2lkID0gbWFwX2hlYWRlci1cdTAwM2VtdXhfaWQ7XG4gIDczOlx0XHRwYWQgPSBtYXBfaGVhZGVyLVx1MDAzZWZsYWdzIFx1MDAyNiBNQVBfUEFEX0xFTl9NQVNLO1xuICA3NDpcdFx0bGVuID0gbnRvaHMobWFwX2hlYWRlci1cdTAwM2Vwa3RfbGVuKSAtIHBhZDtcbiAgNzU6XHRcbiAgNzY6XHRcdGlmIChtdXhfaWQgXHUwMDNlPSBSTU5FVF9NQVhfTE9HSUNBTF9FUClcbiAgNzc6XHRcdFx0Z290byBmcmVlX3NrYjtcbiAgNzg6XHRcbiAgNzk6XHRcdGVwID0gcm1uZXRfZ2V0X2VuZHBvaW50KHBvcnQsIG11eF9pZCk7XG4gIDgwOlx0XHRpZiAoIWVwKVxuICA4MTpcdFx0XHRnb3RvIGZyZWVfc2tiO1xuICA4MjpcdFxuICA4MzpcdFx0c2tiLVx1MDAzZWRldiA9IGVwLVx1MDAzZWVncmVzc19kZXY7XG4gIDg0Olx0XG4gIDg1Olx0XHRpZiAoKHBvcnQtXHUwMDNlZGF0YV9mb3JtYXQgXHUwMDI2IFJNTkVUX0ZMQUdTX0lOR1JFU1NfTUFQX0NLU1VNVjUpIFx1MDAyNlx1MDAyNlxuICA4NjpcdFx0ICAgIChtYXBfaGVhZGVyLVx1MDAzZWZsYWdzIFx1MDAyNiBNQVBfTkVYVF9IRUFERVJfRkxBRykpIHtcbiAgODc6XHRcdFx0aWYgKHJtbmV0X21hcF9wcm9jZXNzX25leHRfaGRyX3BhY2tldChza2IsIGxlbikpXG4gIDg4Olx0XHRcdFx0Z290byBmcmVlX3NrYjtcbiAgODk6XHRcdFx0c2tiX3B1bGwoc2tiLCBzaXplb2YoKm1hcF9oZWFkZXIpKTtcbiAgOTA6XHRcdFx0cm1uZXRfc2V0X3NrYl9wcm90byhza2IpO1xuICA5MTpcdFx0fSBlbHNlIHtcbiAgOTI6XHRcdFx0LyogU3VidHJhY3QgTUFQIGhlYWRlciAqL1xuICA5MzpcdFx0XHRza2JfcHVsbChza2IsIHNpemVvZigqbWFwX2hlYWRlcikpO1xuICA5NDpcdFx0XHRybW5ldF9zZXRfc2tiX3Byb3RvKHNrYik7XG4gIDk1Olx0XHRcdGlmIChwb3J0LVx1MDAzZWRhdGFfZm9ybWF0IFx1MDAyNiBSTU5FVF9GTEFHU19JTkdSRVNTX01BUF9DS1NVTVY0IFx1MDAyNlx1MDAyNlxuICA5NjpcdFx0XHQgICAgIXJtbmV0X21hcF9jaGVja3N1bV9kb3dubGlua19wYWNrZXQoc2tiLCBsZW4gJiM0MzsgcGFkKSlcbiAgOTc6XHRcdFx0XHRza2ItXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7XG4gIDk4Olx0XHR9XG4gIDk5Olx0XG4gMTAwOlx0XHRza2JfdHJpbShza2IsIGxlbik7XG4gMTAxOlx0XHRybW5ldF9kZWxpdmVyX3NrYihza2IpO1xuIDEwMjpcdFx0cmV0dXJuO1xuIDEwMzpcdFxuIDEwNDpcdGZyZWVfc2tiOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg4NAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUk1ORVQgSW5ncmVzcyBIYW5kbGVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYF9fcm1uZXRfbWFwX2luZ3Jlc3NfaGFuZGxlcmAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBsaW5lIDgzIHdoZXJlIGBza2ItJmd0O2RldmAgZ2V0cyBhc3NpZ25lZCB0byBgZXAtJmd0O2VncmVzc19kZXZgLiBUaGlzIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBUaGUga2V5IGlzIHdoYXQgaGFwcGVucyAqYmVmb3JlKiB0aGF0IGFzc2lnbm1lbnQsIGFuZCBJJiMzOTttIHByZXR0eSBzdXJlIGBybW5ldF9tYXBfY29tbWFuZChza2IsIHBvcnQpYCBnZXRzIGNhbGxlZCBmaXJzdC4gVGhhdCYjMzk7cyB0aGUgcGFydCBJIG5lZWQgdG8gc2NydXRpbml6ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBybW5ldF9tYXBfY29tbWFuZGAgbWlnaHQgaW50ZXJhY3Qgd2l0aCB0aGUgYHNrYmAgYW5kIGluZmx1ZW5jZSB0aGUgYHNrYi0mZ3Q7ZGV2YCBhc3NpZ25tZW50IGRvd24gdGhlIGxpbmUuIEl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBpZiB0aGF0IGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSBgc2tiYCBpbiBhbnkgd2F5IHRoYXQgd291bGQgaW1wYWN0IGhvdyB0aGUgYGVncmVzc19kZXZgIGlzIHVzZWQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGxvZ2ljIHdpdGhpbiBgcm1uZXRfbWFwX2NvbW1hbmRgIGNhcmVmdWxseSB0byBzZWUgaWYgYW55IHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzIGNvdWxkIG9jY3VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtybW5ldF9tYXBfY29tbWFuZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9NYWtlZmlsZT05PXJtbmV0LXlcdFx0ICYjNDM7PSBybW5ldF9tYXBfZGF0YS5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9NYWtlZmlsZToxMDpybW5ldC15XHRcdCAmIzQzOz0gcm1uZXRfbWFwX2NvbW1hbmQub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvTWFrZWZpbGUtMTEtb2JqLSQoQ09ORklHX1JNTkVUKSAmIzQzOz0gcm1uZXQub1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X2hhbmRsZXJzLmM9NTY9X19ybW5ldF9tYXBfaW5ncmVzc19oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYy02Ni1cdFx0aWYgKHBvcnQtXHUwMDNlZGF0YV9mb3JtYXQgXHUwMDI2IFJNTkVUX0ZMQUdTX0lOR1JFU1NfTUFQX0NPTU1BTkRTKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYzo2NzpcdFx0XHRyZXR1cm4gcm1uZXRfbWFwX2NvbW1hbmQoc2tiLCBwb3J0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X2hhbmRsZXJzLmMtNjgtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwLmg9OT1zdHJ1Y3Qgcm1uZXRfbWFwX2NvbnRyb2xfY29tbWFuZCB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwLmgtMjUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXAuaDoyNjplbnVtIHJtbmV0X21hcF9jb21tYW5kcyB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXAuaC0yNy1cdFJNTkVUX01BUF9DT01NQU5EX05PTkUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwLmg9NDU9c3RydWN0IHJtbmV0X21hcF9oZWFkZXIgKnJtbmV0X21hcF9hZGRfbWFwX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcC5oLTQ4LVx0XHRcdFx0XHRcdCAgaW50IHBhZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXAuaDo0OTp2b2lkIHJtbmV0X21hcF9jb21tYW5kKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBybW5ldF9wb3J0ICpwb3J0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcC5oLTUwLWludCBybW5ldF9tYXBfY2hlY2tzdW1fZG93bmxpbmtfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHUxNiBsZW4pO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9jb21tYW5kLmM9NDk9c3RhdGljIHZvaWQgcm1uZXRfbWFwX3NlbmRfYWNrKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2NvbW1hbmQuYy03NC0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9jb21tYW5kLmM6NzU6dm9pZCBybW5ldF9tYXBfY29tbWFuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgcm1uZXRfcG9ydCAqcG9ydClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9jb21tYW5kLmMtNzYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjkzMAoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFRhc2sqKgoKQWxyaWdodCwgdGhlIGRpcmVjdGl2ZSBpcyB0byBhbmFseXplIHRoZSBtZW50YWwgcHJvY2VzcyByZXZvbHZpbmcgYXJvdW5kIHRoZSBjb21tYW5kIGBybW5ldF9tYXBfY29tbWFuZGAuIE15IGltbWVkaWF0ZSByZWFjdGlvbiBpcyBhIGJsZW5kIG9mIGFuYWx5dGljYWwgY3VyaW9zaXR5IGFuZCBwcm9mZXNzaW9uYWwgcHJhZ21hdGlzbS4gSSYjMzk7bSBwcmVzZW50ZWQgd2l0aCBhIHBvdGVudGlhbGx5IGNvbXBsZXggY29tbWFuZCwgYW5kIHRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0IGl0cyBleGVjdXRpb24gb3IgZnVuY3Rpb24gaXMgYmVpbmcgc2NydXRpbml6ZWQuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIHdvdWxkIGltbWVkaWF0ZWx5IGJlZ2luIHdpdGggY29uc2lkZXJhdGlvbnMgc3VjaCBhczogJiMzNDtXaGF0IGlzIHRoZSBjb250ZXh0PyBXaGVyZSBpcyB0aGlzIGNvbW1hbmQgdXNlZD8gSXMgaXQgYSBzY3JpcHQsIGFuIGFwcGxpY2F0aW9uIG1vZHVsZSwgb3IgcGFydCBvZiBhIGxhcmdlciBzeXN0ZW0/IFdoYXQgYXJjaGl0ZWN0dXJlIGlzIGl0IGRlc2lnbmVkIGZvcj8mIzM0OyBJJiMzOTttIG1lbnRhbGx5IHBhcnNpbmcgdGhlIGltcGxpZWQgdGFzaywgZXhwZWN0aW5nIHRvIGRlbHZlIGludG8gaXRzIGZ1bmN0aW9uYWxpdHksIHBvdGVudGlhbCBpc3N1ZXMsIGFuZCBvcHRpbWl6YXRpb24gc3RyYXRlZ2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXBfY29tbWFuZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA3NTpcdHZvaWQgcm1uZXRfbWFwX2NvbW1hbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHJtbmV0X3BvcnQgKnBvcnQpXG4gIDc2Olx0e1xuICA3NzpcdFx0c3RydWN0IHJtbmV0X21hcF9oZWFkZXIgKm1hcF9oZWFkZXIgPSAodm9pZCAqKXNrYi1cdTAwM2VkYXRhO1xuICA3ODpcdFx0c3RydWN0IHJtbmV0X21hcF9jb250cm9sX2NvbW1hbmQgKmNtZDtcbiAgNzk6XHRcdHVuc2lnbmVkIGNoYXIgY29tbWFuZF9uYW1lO1xuICA4MDpcdFx0dW5zaWduZWQgY2hhciByYyA9IDA7XG4gIDgxOlx0XG4gIDgyOlx0XHQvKiBDb21tYW5kIGRhdGEgaW1tZWRpYXRlbHkgZm9sbG93cyB0aGUgTUFQIGhlYWRlciAqL1xuICA4MzpcdFx0Y21kID0gKHN0cnVjdCBybW5ldF9tYXBfY29udHJvbF9jb21tYW5kICopKG1hcF9oZWFkZXIgJiM0MzsgMSk7XG4gIDg0Olx0XHRjb21tYW5kX25hbWUgPSBjbWQtXHUwMDNlY29tbWFuZF9uYW1lO1xuICA4NTpcdFxuICA4NjpcdFx0c3dpdGNoIChjb21tYW5kX25hbWUpIHtcbiAgODc6XHRcdGNhc2UgUk1ORVRfTUFQX0NPTU1BTkRfRkxPV19FTkFCTEU6XG4gIDg4Olx0XHRcdHJjID0gcm1uZXRfbWFwX2RvX2Zsb3dfY29udHJvbChza2IsIHBvcnQsIDEpO1xuICA4OTpcdFx0XHRicmVhaztcbiAgOTA6XHRcbiAgOTE6XHRcdGNhc2UgUk1ORVRfTUFQX0NPTU1BTkRfRkxPV19ESVNBQkxFOlxuICA5MjpcdFx0XHRyYyA9IHJtbmV0X21hcF9kb19mbG93X2NvbnRyb2woc2tiLCBwb3J0LCAwKTtcbiAgOTM6XHRcdFx0YnJlYWs7XG4gIDk0Olx0XG4gIDk1Olx0XHRkZWZhdWx0OlxuICA5NjpcdFx0XHRyYyA9IFJNTkVUX01BUF9DT01NQU5EX1VOU1VQUE9SVEVEO1xuICA5NzpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAgOTg6XHRcdFx0YnJlYWs7XG4gIDk5Olx0XHR9XG4gMTAwOlx0XHRpZiAocmMgPT0gUk1ORVRfTUFQX0NPTU1BTkRfQUNLKVxuIDEwMTpcdFx0XHRybW5ldF9tYXBfc2VuZF9hY2soc2tiLCByYywgcG9ydCk7XG4gMTAyOlx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzU4MQoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYHJtbmV0X21hcF9zZW5kX2Fja2AqKgoKT2theSwgdGltZSB0byB6ZXJvIGluIG9uIGBybW5ldF9tYXBfc2VuZF9hY2tgLiBUaGF0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGZvciBhY2tub3dsZWRnaW5nIFJNTkVUIHBhY2tldHMsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgbWVjaGFuaWNzIHRob3JvdWdobHkuIFdoYXQmIzM5O3MgdGhlIGNvbnRleHQgaGVyZT8gSXMgaXQgcmVsYXRlZCB0byBhIHNwZWNpZmljIFJNTkVUIGltcGxlbWVudGF0aW9uLCBvciBpcyBpdCBtb3JlIGdlbmVyaWM/IEFyZSB3ZSBkZWFsaW5nIHdpdGggcmVsaWFibGUgb3IgdW5yZWxpYWJsZSB0cmFuc3BvcnQ/IEkgYmV0IGl0JiMzOTtzIGludm9sdmVkIGluIHRoZSBjb250cm9sIHBsYW5lIHRvIHNvbWUgZGVncmVlLgoKRmlyc3QsIEkmIzM5O2xsIHByb2JhYmx5IGxvb2sgZm9yIGl0cyBkZWZpbml0aW9uIGFuZCBhbnkgYXNzb2NpYXRlZCBkYXRhIHN0cnVjdHVyZXMgbGlrZSBidWZmZXJzIG9yIHF1ZXVlcyB0aGF0IGl0IG1hbmlwdWxhdGVzLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNpbXBsZSBBQ0sgb3Igc29tZXRoaW5nIG1vcmUgaW52b2x2ZWQsIGxpa2UgYSBzZWxlY3RpdmUgQUNLIHdpdGggcmV0cmFuc21pc3Npb24gdGltZXJzPyBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCB0aGUgUk1ORVQgcHJvdG9jb2wgdmVyc2lvbiBpcyBhdCBhIGxvdyBsZXZlbCB0byB1bmRlcnN0YW5kIGFueSBzcGVjaWZpYyBzdWJ0bGV0aWVzIGluIHRoZSBpbXBsZW1lbnRhdGlvbi4KCkkgYWxzbyBuZWVkIHRvIHNlZSB3aGVyZSBpdCYjMzk7cyAqY2FsbGVkKiBmcm9tLiBLbm93aW5nIHRoZSBjYWxsIHN0YWNrIHdpbGwgZ2l2ZSBtZSBjbHVlcyBhYm91dCB0aGUgZmxvdyBvZiBkYXRhIGFuZCBjb250cm9sLiBBcmUgd2UgcmVzcG9uZGluZyB0byBhIHJlY2VpdmVkIFJNTkVUIG1lc3NhZ2UsIG9yIGlzIHRoaXMgbW9yZSBwcm9hY3RpdmU/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBJIHNob3VsZCBiZSBvbiB0aGUgbG9va291dCBmb3I/IEkmIzM5O2xsIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLCBtdXRleGVzLCBvciBhdG9taWMgb3BlcmF0aW9ucy4KCk9uY2UgSSBoYXZlIGEgZ29vZCBncmFzcCBvZiB0aGUgY29kZSBpdHNlbGYsIEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXIgcGVyZm9ybWFuY2UuIElzIHRoaXMgZnVuY3Rpb24gb24gdGhlIGNyaXRpY2FsIHBhdGg/IENvdWxkIGl0IGJlIGEgYm90dGxlbmVjaz8gSSBtaWdodCBuZWVkIHRvIGNvbnNpZGVyIGhvdyB0byBoYW5kbGUgdGhpbmdzIGRpZmZlcmVudGx5IGJhc2VkIG9uIGJ1ZmZlciBzaXplcyBvciBvdmVyYWxsIG5ldHdvcmsgY29uZGl0aW9ucy4gQXJlIHRoZXJlIGFueSBsb2dnaW5nIG9yIGRlYnVnZ2luZyBmZWF0dXJlcyBidWlsdCBpbj8gVGhhdCB3b3VsZCBiZSB2ZXJ5IGhlbHBmdWwuCgpFc3NlbnRpYWxseSwgSSB3YW50IHRvIG1hcCBvdXQgdGhlIGVudGlyZSBsaWZlY3ljbGUgb2YgdGhpcyBhY2tub3dsZWRnbWVudCwgdG9wIHRvIGJvdHRvbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXBfY29tbWFuZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0OTpcdHN0YXRpYyB2b2lkIHJtbmV0X21hcF9zZW5kX2FjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuICA1MDpcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBjaGFyIHR5cGUsXG4gIDUxOlx0XHRcdFx0ICAgICAgIHN0cnVjdCBybW5ldF9wb3J0ICpwb3J0KVxuICA1MjpcdHtcbiAgNTM6XHRcdHN0cnVjdCBybW5ldF9tYXBfaGVhZGVyICptYXBfaGVhZGVyID0gKHZvaWQgKilza2ItXHUwMDNlZGF0YTtcbiAgNTQ6XHRcdHN0cnVjdCBybW5ldF9tYXBfY29udHJvbF9jb21tYW5kICpjbWQ7XG4gIDU1Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLVx1MDAzZWRldjtcbiAgNTY6XHRcbiAgNTc6XHRcdGlmIChwb3J0LVx1MDAzZWRhdGFfZm9ybWF0IFx1MDAyNiBSTU5FVF9GTEFHU19JTkdSRVNTX01BUF9DS1NVTVY0KVxuICA1ODpcdFx0XHRza2JfdHJpbShza2IsXG4gIDU5Olx0XHRcdFx0IHNrYi1cdTAwM2VsZW4gLSBzaXplb2Yoc3RydWN0IHJtbmV0X21hcF9kbF9jc3VtX3RyYWlsZXIpKTtcbiAgNjA6XHRcbiAgNjE6XHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX01BUCk7XG4gIDYyOlx0XG4gIDYzOlx0XHQvKiBDb21tYW5kIGRhdGEgaW1tZWRpYXRlbHkgZm9sbG93cyB0aGUgTUFQIGhlYWRlciAqL1xuICA2NDpcdFx0Y21kID0gKHN0cnVjdCBybW5ldF9tYXBfY29udHJvbF9jb21tYW5kICopKG1hcF9oZWFkZXIgJiM0MzsgMSk7XG4gIDY1Olx0XHRjbWQtXHUwMDNlY21kX3R5cGUgPSB0eXBlIFx1MDAyNiAweDAzO1xuICA2NjpcdFxuICA2NzpcdFx0bmV0aWZfdHhfbG9jayhkZXYpO1xuICA2ODpcdFx0ZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX3N0YXJ0X3htaXQoc2tiLCBkZXYpO1xuICA2OTpcdFx0bmV0aWZfdHhfdW5sb2NrKGRldik7XG4gIDcwOlx0fVxuICA3MTpcdFxuICA3MjpcdC8qIFByb2Nlc3MgTUFQIGNvbW1hbmQgZnJhbWUgYW5kIHNlbmQgTi9BQ0sgbWVzc2FnZSBhcyBhcHByb3ByaWF0ZS4gTWVzc2FnZSBjbWRcbiAgNzM6XHQgKiBuYW1lIGlzIGRlY29kZWQgaGVyZSBhbmQgYXBwcm9wcmlhdGUgaGFuZGxlciBpcyBjYWxsZWQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDE2CgkJCQkJCQlvdXRwdXQ6IDIyMgoJCQkJCQkJdGhvdWdodHM6IDYxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBhIFBvdGVudGlhbCBOVUxMIFBvaW50ZXIgRGVyZWZlcmVuY2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7dmUgc3BvdHRlZCBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIGBybW5ldF9tYXBgIGNvZGUsIGFuZCBpdCYjMzk7cyBsb29raW5nIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBpcyB0aGF0IGBybW5ldF9tYXBfc2VuZF9hY2tgIGFjY2Vzc2VzIGBza2ItJmd0O2RldmAsIGFuZCB0aGF0IHZhbHVlIGNvdWxkIGJlIE5VTEwsIHdoaWNoIGlzIHRoZW4gcGFzc2VkIHRvIGBkZXYtJmd0O25ldGRldl9vcHMtJmd0O25kb19zdGFydF94bWl0KHNrYiwgZGV2KTtgLCBjYXVzaW5nIGEgY3Jhc2guCgpJIHNlZSB0aGF0IGBza2ItJmd0O2RldmAgY29tZXMgZnJvbSB0aGUgYHNrYm4tJmd0O2RldiA9IHNrYi0mZ3Q7ZGV2O2AgYXNzaWdubWVudCwgd2hpY2ggaGFwcGVucyBkdXJpbmcgdGhlIGBybW5ldF9tYXBfZGVhZ2dyZWdhdGVgIGNhbGwuIFRoYXQgbWFrZXMgc2Vuc2UuIExldCYjMzk7cyB0cmFjZSBpdCBhIGJpdC4gSW5zaWRlIGBybW5ldF9tYXBfaW5ncmVzc19oYW5kbGVyYCwgaWYgYFJNTkVUX0ZMQUdTX0lOR1JFU1NfREVBR0dSRUdBVElPTmAgaXMgc2V0LCBgcm1uZXRfbWFwX2RlYWdncmVnYXRlYCBpcyBjYWxsZWQuIFRoYXQgZGVhZ2dyZWdhdGVkIHNrYiBnb2VzIGludG8gYF9fcm1uZXRfbWFwX2luZ3Jlc3NfaGFuZGxlcmAsIGFuZCBldmVudHVhbGx5IHRoZSBjb21tYW5kIHBhY2tldCBnb2VzIHRvIGBybW5ldF9tYXBfc2VuZF9hY2tgLCB3aGljaCBhY2Nlc3NlcyBgc2tibi0mZ3Q7ZGV2YC4gIAoKSGVyZSBpcyB3aGVyZSB0aGUgcHJvYmxlbSBhcmlzZXM6IGBza2JuYCBpcyBhbGxvY2F0ZWQgYnkgYHJtbmV0X21hcF9kZWFnZ3JlZ2F0ZWAgdXNpbmcgYGFsbG9jX3NrYmAsIGFuZCBpdCBpc24mIzM5O3QgYXNzaWduZWQgYHNrYi0mZ3Q7ZGV2YCB1bnRpbCBhZnRlci4gU2luY2UgYGFsbG9jX3NrYmAgbGlrZWx5IGluaXRpYWxpemVzIGBkZXZgIHRvIE5VTEwgaW4gdGhlIGZpcnN0IHBsYWNlLCB0aGF0IG1lYW5zIGBza2JuLSZndDtkZXZgIGlzIE5VTEwuIEJvb20sIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSEgSXQmIzM5O3MgdGhhdCBzaW1wbGUuIEtBU0FOIG9yIGV2ZW4gc3RhbmRhcmQga2VybmVsIHRlc3Rpbmcgd2lsbCBlYXNpbHkgY2F0Y2ggdGhpcywgaXQmIzM5O3MgYSB0ZXh0Ym9vayBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFRoaXMgaGFzIGFic29sdXRlbHkgbm90aGluZyB0byBkbyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBgZGV2YCBpcyBleHBsaWNpdGx5IHplcm9lZCAoTlVMTCkgYnkgYGFsbG9jX3NrYmAgLSZndDsgYHNrYnVmZl9jbGVhcmAuCgpOb3csIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSYjMzk7cyAqbm90aGluZyogZWxzZSBhdCBwbGF5IGhlcmUuIFRoZSBwYXRjaCBjb3BpZXMgdGhlIGBkZXZgIHBvaW50ZXIgY29ycmVjdGx5LiBJdCBhbGxvY2F0ZXMgYSBuZXcgYnVmZmVyLCByZXNlcnZlcyBzcGFjZSwgY29waWVzIGRhdGEsIGFuZCwgY3J1Y2lhbGx5LCBjb3BpZXMgYHNrYi0mZ3Q7ZGV2YCB0byBgc2tibi0mZ3Q7ZGV2YC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYmVpbmcgZXhwb3NlZDsgaXQmIzM5O3MganVzdCBjb3B5aW5nIGEgTlVMTCB2YWx1ZS4KClRoZXJlZm9yZSwgdGhlIGlzc3VlIGlzIHB1cmVseSBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gVGhlcmUmIzM5O3Mgbm8gbmVlZCBmb3IgS01TQU4gdG8gYW5hbHl6ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiB0aGlzIGNhc2UuIE15IGFzc2Vzc21lbnQgaXMgdGhhdCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWcuIEluIGBybW5ldF9tYXBfZGVhZ2dyZWdhdGUoKWAsIGEgbmV3IGBza19idWZmYCAoYHNrYm5gKSBpcyBhbGxvY2F0ZWQgdXNpbmcgYGFsbG9jX3NrYigpYCwgd2hpY2ggaW5pdGlhbGl6ZXMgdGhlIGBkZXZgIGZpZWxkIHRvIE5VTEwuIExhdGVyLCBpZiB0aGUgcGFja2V0IGNvbnRhaW5zIGEgTUFQIGNvbW1hbmQsIGBybW5ldF9tYXBfc2VuZF9hY2soKWAgaXMgY2FsbGVkLCB3aGljaCBhY2Nlc3NlcyBgc2tiLVx1MDAzZWRldmAgYW5kIGRlcmVmZXJlbmNlcyBpdCAoYGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zdGFydF94bWl0KHNrYiwgZGV2KWApLiBTaW5jZSBgc2tibi1cdTAwM2VkZXZgIHdhcyBOVUxMLCB0aGlzIGNhdXNlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gVGhlIHBhdGNoIGZpeGVzIHRoaXMgYnkgY29weWluZyBgc2tiLVx1MDAzZWRldmAgdG8gYHNrYm4tXHUwMDNlZGV2YC4gVGhpcyBpcyBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUsIGFzIHRoZSBgZGV2YCBmaWVsZCB3YXMgZXhwbGljaXRseSB6ZXJvZWQgZHVyaW5nIGFsbG9jYXRpb24uIFN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nIG9yIEtBU0FOIHdpbGwgZWFzaWx5IGNhdGNoIHRoaXMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWcuIEluIGBybW5ldF9tYXBfZGVhZ2dyZWdhdGUoKWAsIGEgbmV3IGBza19idWZmYCAoYHNrYm5gKSBpcyBhbGxvY2F0ZWQgdXNpbmcgYGFsbG9jX3NrYigpYCwgd2hpY2ggaW5pdGlhbGl6ZXMgdGhlIGBkZXZgIGZpZWxkIHRvIE5VTEwuIExhdGVyLCBpZiB0aGUgcGFja2V0IGNvbnRhaW5zIGEgTUFQIGNvbW1hbmQsIGBybW5ldF9tYXBfc2VuZF9hY2soKWAgaXMgY2FsbGVkLCB3aGljaCBhY2Nlc3NlcyBgc2tiLVx1MDAzZWRldmAgYW5kIGRlcmVmZXJlbmNlcyBpdCAoYGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zdGFydF94bWl0KHNrYiwgZGV2KWApLiBTaW5jZSBgc2tibi1cdTAwM2VkZXZgIHdhcyBOVUxMLCB0aGlzIGNhdXNlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gVGhlIHBhdGNoIGZpeGVzIHRoaXMgYnkgY29weWluZyBgc2tiLVx1MDAzZWRldmAgdG8gYHNrYm4tXHUwMDNlZGV2YC4gVGhpcyBpcyBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUsIGFzIHRoZSBgZGV2YCBmaWVsZCB3YXMgZXhwbGljaXRseSB6ZXJvZWQgZHVyaW5nIGFsbG9jYXRpb24uIFN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nIG9yIEtBU0FOIHdpbGwgZWFzaWx5IGNhdGNoIHRoaXMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIwOjQwOjQxLjM2MzE1MDE1N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTg2Njc1MzEzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSTU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJtbmV0X21hcF9kZWFnZ3JlZ2F0ZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVnLiBJbiBgcm1uZXRfbWFwX2RlYWdncmVnYXRlKClgLCBhIG5ldyBgc2tfYnVmZmAgKGBza2JuYCkgaXMgYWxsb2NhdGVkIHVzaW5nIGBhbGxvY19za2IoKWAsIHdoaWNoIGluaXRpYWxpemVzIHRoZSBgZGV2YCBmaWVsZCB0byBOVUxMLiBMYXRlciwgaWYgdGhlIHBhY2tldCBjb250YWlucyBhIE1BUCBjb21tYW5kLCBgcm1uZXRfbWFwX3NlbmRfYWNrKClgIGlzIGNhbGxlZCwgd2hpY2ggYWNjZXNzZXMgYHNrYi1cXHUwMDNlZGV2YCBhbmQgZGVyZWZlcmVuY2VzIGl0IChgZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fc3RhcnRfeG1pdChza2IsIGRldilgKS4gU2luY2UgYHNrYm4tXFx1MDAzZWRldmAgd2FzIE5VTEwsIHRoaXMgY2F1c2VzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBUaGUgcGF0Y2ggZml4ZXMgdGhpcyBieSBjb3B5aW5nIGBza2ItXFx1MDAzZWRldmAgdG8gYHNrYm4tXFx1MDAzZWRldmAuIFRoaXMgaXMgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLCBhcyB0aGUgYGRldmAgZmllbGQgd2FzIGV4cGxpY2l0bHkgemVyb2VkIGR1cmluZyBhbGxvY2F0aW9uLiBTdGFuZGFyZCBrZXJuZWwgdGVzdGluZyBvciBLQVNBTiB3aWxsIGVhc2lseSBjYXRjaCB0aGlzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBkZWFnZ3JlZ2F0aW9uIGxvZ2ljIGluIHRoZSBRdWFsY29tbSBSTU5FVCBkcml2ZXIsIHdoaWNoIGlzIGEgdmlydHVhbCBuZXR3b3JrIGRldmljZSB0aGF0IGNhbiBiZSBhdHRhY2hlZCB0byBvdGhlciBuZXR3b3JrIGludGVyZmFjZXMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGNyZWF0aW5nIGFuIHJtbmV0IGludGVyZmFjZSB2aWEgcnRuZXRsaW5rIGFuZCBzZW5kaW5nIHBhY2tldHMgdG8gaXQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIwOjQwOjQxLjM2MzE1NzA0N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2MjM0NTQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGIzMTNmZmI2YjQ5ODNkZTA0ZjM2YjcyOWMzNjIwNWNhYjhhOTFlZDJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMjAgMjA6NDA6MzkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmNcXG5pbmRleCAzMDVhZTE1YWU4ZjM5Li5lNmY0OGRjOWZlNjRkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXBfZGF0YS5jXFxuQEAgLTM5NCw2ICszOTQsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqcm1uZXRfbWFwX2RlYWdncmVnYXRlKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGlmICghc2tibilcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcbitcXHRza2JuLVxcdTAwM2VkZXYgPSBza2ItXFx1MDAzZWRldjtcXG4gXFx0c2tiX3Jlc2VydmUoc2tibiwgUk1ORVRfTUFQX0RFQUdHUl9IRUFEUk9PTSk7XFxuIFxcdHNrYl9wdXQoc2tibiwgcGFja2V0X2xlbik7XFxuIFxcdG1lbWNweShza2JuLVxcdTAwM2VkYXRhLCBza2ItXFx1MDAzZWRhdGEsIHBhY2tldF9sZW4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMDo0MDo0Mi45MjYyMDU0MjVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozMTA5NjU0MzUxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSTU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJtbmV0X21hcF9kZWFnZ3JlZ2F0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBkZWFnZ3JlZ2F0aW9uIGxvZ2ljIGluIHRoZSBRdWFsY29tbSBSTU5FVCBkcml2ZXIsIHdoaWNoIGlzIGEgdmlydHVhbCBuZXR3b3JrIGRldmljZSB0aGF0IGNhbiBiZSBhdHRhY2hlZCB0byBvdGhlciBuZXR3b3JrIGludGVyZmFjZXMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGNyZWF0aW5nIGFuIHJtbmV0IGludGVyZmFjZSB2aWEgcnRuZXRsaW5rIGFuZCBzZW5kaW5nIHBhY2tldHMgdG8gaXQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGIzMTNmZmI2YjQ5ODNkZTA0ZjM2YjcyOWMzNjIwNWNhYjhhOTFlZDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyMCAyMDo0MDozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXBfZGF0YS5jXG5pbmRleCAzMDVhZTE1YWU4ZjM5Li5lNmY0OGRjOWZlNjRkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuY1xuQEAgLTM5NCw2ICszOTQsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqcm1uZXRfbWFwX2RlYWdncmVnYXRlKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoIXNrYm4pXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuK1x0c2tibi1cdTAwM2VkZXYgPSBza2ItXHUwMDNlZGV2O1xuIFx0c2tiX3Jlc2VydmUoc2tibiwgUk1ORVRfTUFQX0RFQUdHUl9IRUFEUk9PTSk7XG4gXHRza2JfcHV0KHNrYm4sIHBhY2tldF9sZW4pO1xuIFx0bWVtY3B5KHNrYm4tXHUwMDNlZGF0YSwgc2tiLVx1MDAzZWRhdGEsIHBhY2tldF9sZW4pO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjA6NDA6NDIuOTI2MjA2NTU1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE4ODA3ODczMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXR3b3JrIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2gg4oCTIGl0IGxvb2tzIGxpa2UgYSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIGFkZGl0aW9uLCBgc2tibi1cdTAwM2VkZXYgPSBza2ItXHUwMDNlZGV2O2AsIGluc2lkZSB0aGUgYHJtbmV0X21hcF9kZWFnZ3JlZ2F0ZSgpYCBmdW5jdGlvbiBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoYXQncyB0aGUgY29udGV4dCBoZXJlP1wiIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHJtbmV0YCBhY3R1YWxseSAqaXMqIGJlZm9yZSBJIGNhbiBwcm9wZXJseSBhc3Nlc3MgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZS5cblxuRmlyc3QgdGhpbmdzIGZpcnN0LCBhIHF1aWNrIGxvb2sgYXQgdGhlIGZpbGUgcGF0aCB0ZWxscyBtZSB0aGlzIGlzIHJlbGF0ZWQgdG8gUXVhbGNvbW0ncyBSTU5FVCBkcml2ZXIuIFJpZ2h0LCBSTU5FVC4uLiBJIGtub3cgaXQncyBhIFF1YWxjb21tIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLCBidXQgaXMgdGhpcyBhIHZpcnR1YWwgZHJpdmVyLCBvciBpcyBpdCB0aWVkIHRvIHBhcnRpY3VsYXIgUXVhbGNvbW0gaGFyZHdhcmU/IFRoZSBpbXBsaWNhdGlvbnMgYXJlIGh1Z2UuIElmIGl0J3MgaGFyZHdhcmUtZGVwZW5kZW50LCB0aGVuIHRoZSB0ZXN0aW5nIHNjb3BlIGJyb2FkZW5zIHNpZ25pZmljYW50bHkuIElmIGl0J3MgdmlydHVhbCwgYW5kIGNvdWxkIGJlIHJlcGxpY2F0ZWQgaW4gYSBjb250YWluZXIsIHRoZW4gdGVzdGluZyB3aWxsIGJlIHNsaWdodGx5IHNpbXBsZXIuXG5cblRvIGNsYXJpZnkgdGhpcywgSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkcml2ZXIncyBLY29uZmlnIGZpbGVzLiBMZXQncyBzZWUuLi4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L0tjb25maWdgIG9yIHBvc3NpYmx5IGV2ZW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL0tjb25maWdgIHNob3VsZCBnaXZlIG1lIHRoZSBjb25maWd1cmF0aW9uIGRldGFpbHMgSSdtIGFmdGVyLiBUaGF0IHNob3VsZCB0ZWxsIG1lIHdoZXRoZXIgaXQncyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGJhc2VkIG9uIGhhcmR3YXJlIGZsYWdzLCBvciBpZiBpdCdzIGRlc2lnbmVkIHRvIGJlIG1vcmUgcGxhdGZvcm0tYWdub3N0aWMuIFRoYXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHJlYWwgbmF0dXJlIG9mIHRoaXMgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDMzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjA6NDA6NDguMTE0Mjg3NjA1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjYxMzc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUk1ORVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L0tjb25maWctNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9LY29uZmlnOjY6bWVudWNvbmZpZyBSTU5FVFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiUm1OZXQgTUFQIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjA6NDA6NDguMjIwOTA1OTk1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ0NjA0MTE0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGF0IEtjb25maWcgZmlsZTpcblxuKipEaXZpbmcgaW50byB0aGUgUk1ORVQgS2NvbmZpZyBGaWxlKipcblxuT2theSwgbGV0J3MgcHVsbCB1cCB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L0tjb25maWdgIGZpbGUuIFJpZ2h0LCBSTU5FVC4uLiB0aGF0J3MgUXVhbGNvbW0ncyBSZW1vdGUgTmV0d29yayBJbnRlcmZhY2UsIGxpa2VseSBoYW5kbGluZyBjZWxsdWxhciBkYXRhIGNvbm5lY3Rpdml0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIFJNTkVUIGZlYXR1cmVzIGFyZSBiZWluZyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gVGhlIEtjb25maWcgZmlsZSBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFzcGVjdHMg4oCTIHRoZSBkZXBlbmRlbmNpZXMsIG9wdGlvbnMsIGFuZCBkZWZhdWx0cyB0aGF0IHVsdGltYXRlbHkgc2hhcGUgd2hldGhlciBSTU5FVCBzdXBwb3J0IGlzIGVuYWJsZWQgYW5kIGhvdyBncmFudWxhciB0aGUgY29uZmlndXJhdGlvbiBjYW4gZ2V0LlxuXG5JJ20gZXhwZWN0aW5nIHRvIHNlZSBhIHN0cnVjdHVyZWQgYXBwcm9hY2ggdXNpbmcgYGNvbmZpZ2Agc3ltYm9scywgYGRlcGVuZHMgb25gIGNsYXVzZXMgdG8gbGluayBSTU5FVCB0byB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSAobGlrZSB0aGUgc3BlY2lmaWMgUXVhbGNvbW0gU29DcykgYW5kIG90aGVyIHJlbGF0ZWQgZHJpdmVycywgYHNlbGVjdGAgc3RhdGVtZW50cyB0byBtYW5hZ2UgZGVwZW5kZW5jaWVzIGF1dG9tYXRpY2FsbHksIGFuZCBwb3RlbnRpYWxseSBgdHJpc3RhdGVgIG9yIGBib29sYCBvcHRpb25zIGZvciBmaW5lLWdyYWluZWQgZmVhdHVyZSBjb250cm9sIChlLmcuLCBzcGVjaWZpYyBSTU5FVCBsaW5rIHR5cGVzIG9yIHByb3RvY29sIGZlYXR1cmVzKS4gSSdtIGFsc28gbG9va2luZyBmb3Igc2Vuc2libGUgZGVmYXVsdHMg4oCTIHdoYXQncyBlbmFibGVkIG91dCBvZiB0aGUgYm94LCBhbmQgd2hldGhlciB0aGV5IG1ha2Ugc2Vuc2UgZm9yIHRoZSBsaWtlbHkgdGFyZ2V0IGRldmljZXMuXG5cblRoaXMgS2NvbmZpZyBmaWxlIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBzZW5zZSBvZiBob3cgY29uZmlndXJhYmxlIHRoZSBSTU5FVCBzdGFjayBpcywgd2hpY2ggd2lsbCBiZSB1c2VmdWwgZm9yIGFueSBkZXZpY2UgY3VzdG9taXphdGlvbiBJIG1pZ2h0IG5lZWQgdG8gZG8uIEl04oCZcyBhbHNvIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgcG90ZW50aWFsIGJ1aWxkIGlzc3VlcyBvciBjb25mbGljdHMgaWYgSSBuZWVkIHRvIGludGVncmF0ZSB0aGlzIGRyaXZlciB3aXRoIG90aGVyIG5ldHdvcmtpbmcgc3Vic3lzdGVtcy4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB2YXJpb3VzIFJNTkVULXJlbGF0ZWQgb3B0aW9uczsgd2hldGhlciB0aGV5J3JlIGluZGVwZW5kZW50LCBtdXR1YWxseSBleGNsdXNpdmUsIG9yIG5lc3RlZC4gVGhlIGdvYWwgaXMgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgcmFuZ2Ugb2Ygc3VwcG9ydGVkIGNvbmZpZ3VyYXRpb25zIGFuZCB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHZhcmlvdXMgY29tcG9uZW50cyBpbiB0aGUgUk1ORVQgc3RhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MTMsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMDo0MDo1Mi42NjY5NDk5ODZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFJNTkVUIE1BUCBkcml2ZXJcXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0bWVudWNvbmZpZyBSTU5FVFxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIlJtTmV0IE1BUCBkcml2ZXJcXFwiXFxuICAgODpcXHRcXHRkZWZhdWx0IG5cXG4gICA5OlxcdFxcdHNlbGVjdCBHUk9fQ0VMTFNcXG4gIDEwOlxcdFxcdGhlbHBcXG4gIDExOlxcdFxcdCAgSWYgeW91IHNlbGVjdCB0aGlzLCB5b3Ugd2lsbCBlbmFibGUgdGhlIFJNTkVUIG1vZHVsZSB3aGljaCBpcyB1c2VkXFxuICAxMjpcXHRcXHQgIGZvciBoYW5kbGluZyBkYXRhIGluIHRoZSBtdWx0aXBsZXhpbmcgYW5kIGFnZ3JlZ2F0aW9uIHByb3RvY29sIChNQVApXFxuICAxMzpcXHRcXHQgIGZvcm1hdCBpbiB0aGUgZW1iZWRkZWQgZGF0YSBwYXRoLiBSTU5FVCBkZXZpY2VzIGNhbiBiZSBhdHRhY2hlZCB0b1xcbiAgMTQ6XFx0XFx0ICBhbnkgSVAgbW9kZSBwaHlzaWNhbCBkZXZpY2UuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIwOjQwOjUyLjY2NzAzNzUzNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MzIyMTI3NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBSTU5FVCBEZXZpY2VzKipcblxuT2theSwgc28gSSdtIGhlYXJpbmcgXCJSTU5FVCBkZXZpY2VzIGNhbiBiZSBhdHRhY2hlZCB0byBhbnkgSVAgbW9kZSBwaHlzaWNhbCBkZXZpY2UuXCIgTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiQWhhISBUaGlzIHNvdW5kcyBsaWtlIGEgdmlydHVhbCBuZXR3b3JraW5nIGNvbnN0cnVjdCwgc2ltaWxhciB0byBhIFZMQU4gb3IgcGVyaGFwcyBhIE1BQ1ZMQU4uXCIgSXQgc3VnZ2VzdHMgYSBsZXZlbCBvZiBhYnN0cmFjdGlvbiwgYSB3YXkgdG8gbG9naWNhbGx5IGNvbm5lY3QgdGhpcyBSTU5FVCB0aGluZyB0byBhbiBleGlzdGluZyBuZXR3b3JrIGludGVyZmFjZSwgcmlnaHQ/IEl0J3MgbGlrZSBhIHZpcnR1YWwgbmV0d29yayBkZXZpY2UgcmlkaW5nIG9uIHRvcCBvZiBhIHBoeXNpY2FsIG9uZS5cblxuTm93IEknbSBjdXJpb3VzLiBUaGUgY3JpdGljYWwgcXVlc3Rpb24gYmVjb21lcyAqaG93KiBpcyB0aGlzIHZpcnR1YWwgZGV2aWNlIGNyZWF0ZWQ/IERvZXMgdGhlIHN5c3RlbSBsZXZlcmFnZSBgcnRuZXRsaW5rYD8gVGhhdCdzIHRoZSB0eXBpY2FsIHJvdXRlIGZvciBuZXR3b3JrIGludGVyZmFjZSBtYW5pcHVsYXRpb24sIHNvIHRoYXQncyB3aGVyZSBteSBtaW5kIG5hdHVyYWxseSBnb2VzLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGNyZWF0aW9uIHByb2Nlc3MgdG8gZnVsbHkgZ3Jhc3AgdGhpcy4gTGV0IG1lIHNlZSBob3cgaXQncyBhY3R1YWxseSBjb25maWd1cmVkIG9yIGluaXRpYWxpemVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjE3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMDo0MDo1Ni40OTkyNTI5MjhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwNTE1MzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ0bmxfbGlua19vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X2NvbmZpZy5jPTM3MD1zdGF0aWMgaW50IHJtbmV0X2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfY29uZmlnLmMtMzk5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X2NvbmZpZy5jOjQwMDpzdHJ1Y3QgcnRubF9saW5rX29wcyBybW5ldF9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X2NvbmZpZy5jLTQwMS1cXHQua2luZFxcdFxcdD0gXFxcInJtbmV0XFxcIixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X2NvbmZpZy5oPTMzPXN0cnVjdCBybW5ldF9wb3J0IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X2NvbmZpZy5oLTU1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X2NvbmZpZy5oOjU2OmV4dGVybiBzdHJ1Y3QgcnRubF9saW5rX29wcyBybW5ldF9saW5rX29wcztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9jb25maWcuaC01Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X3ZuZC5jPTI5OD1pbnQgcm1uZXRfdm5kX25ld2xpbmsodTggaWQsIHN0cnVjdCBuZXRfZGV2aWNlICpybW5ldF9kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF92bmQuYy0zMzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfdm5kLmM6MzMzOlxcdFxcdHJtbmV0X2Rldi1cXHUwMDNlcnRubF9saW5rX29wcyA9IFxcdTAwMjZybW5ldF9saW5rX29wcztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF92bmQuYy0zMzQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIwOjQwOjU2LjYwOTc3MzY0OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1OTYzNjM3MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiB0aGUgcm1uZXQgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgYHJtbmV0YCBpbnRlcmZhY2UgaXMgZGVmaW5pdGVseSBjcmVhdGVkIHVzaW5nIGBydG5ldGxpbmtgIGFuZCBgaXAgbGluayBhZGQgdHlwZSBybW5ldGAuIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZTsgaXQgbWVhbnMgSSBjYW4gZWFzaWx5IHNwaW4gdXAgYSB2aXJ0dWFsIGVudmlyb25tZW50IGFuZCBwb2tlIGF0IHRoaXMgdGhpbmcuIEl0J3MgZW1pbmVudGx5IHRlc3RhYmxlLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE15IGF0dGVudGlvbiBpcyBub3cgZm9jdXNlZCBvbiB0aGlzIHBhdGNoIHRoYXQncyBhZmZlY3RpbmcgYHJtbmV0X21hcF9kZWFnZ3JlZ2F0ZSgpYC4gSSBuZWVkIHRvIGRpdmUgaW50byB0aGF0IGZ1bmN0aW9uIGFuZCB1bmRlcnN0YW5kIHByZWNpc2VseSB3aGF0J3MgYmVpbmcgY2hhbmdlZCBhbmQgd2h5LiBMZXQncyBnZXQgcmlnaHQgaW50byB0aGUgY29kZSBmb3IgYHJtbmV0X21hcF9kZWFnZ3JlZ2F0ZSgpYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkyNSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIwOjQxOjAwLjIwNjEzOTY2OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwNjA0OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJtbmV0X21hcF9kZWFnZ3JlZ2F0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYz0xMDk9cm1uZXRfbWFwX2luZ3Jlc3NfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYy0xMjMtXFx0aWYgKHBvcnQtXFx1MDAzZWRhdGFfZm9ybWF0IFxcdTAwMjYgUk1ORVRfRkxBR1NfSU5HUkVTU19ERUFHR1JFR0FUSU9OKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYzoxMjQ6XFx0XFx0d2hpbGUgKChza2JuID0gcm1uZXRfbWFwX2RlYWdncmVnYXRlKHNrYiwgcG9ydCkpICE9IE5VTEwpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYy0xMjUtXFx0XFx0XFx0X19ybW5ldF9tYXBfaW5ncmVzc19oYW5kbGVyKHNrYm4sIHBvcnQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwLmg9MjY9ZW51bSBybW5ldF9tYXBfY29tbWFuZHMge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwLmgtNDItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwLmg6NDM6c3RydWN0IHNrX2J1ZmYgKnJtbmV0X21hcF9kZWFnZ3JlZ2F0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcC5oLTQ0LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBybW5ldF9wb3J0ICpwb3J0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmM9MzM2PXUzMiBybW5ldF9tYXBfdmFsaWRhdGVfcGFja2V0X2xlbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgcm1uZXRfcG9ydCAqcG9ydClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmMtMzgyLSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmM6MzgzOnN0cnVjdCBza19idWZmICpybW5ldF9tYXBfZGVhZ2dyZWdhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXBfZGF0YS5jLTM4NC1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgcm1uZXRfcG9ydCAqcG9ydClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjA6NDE6MDAuMzA2NzQ5Nzg4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMjQyMTExMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBQb3RlbnRpYWw6IFJNTkVUIERlYWdncmVnYXRpb24qKlxuXG5Pa2F5LCBzbyBgcm1uZXRfbWFwX2RlYWdncmVnYXRlYCBpcyBjYWxsZWQgYnkgYHJtbmV0X21hcF9pbmdyZXNzX2hhbmRsZXJgLiBUaGF0IGBpbmdyZXNzX2hhbmRsZXJgIGlzIHRoZSByZWNlaXZlIGhhbmRsZXIgZm9yIHRoZSBwaHlzaWNhbCBkZXZpY2UgdGhhdCBSTU5FVCBpcyBjb25uZWN0ZWQgdG8uIFRoYXQncyBhIGRpcmVjdCBwYXRoLCBtYWtpbmcgaXQgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIERlZmluaXRlbHkgcmVhY2hhYmxlLCBubyBxdWVzdGlvbi4gVGhlIGNvbmZpZ3VyYXRpb24gbmVlZHMgdG8gYmUgc2V0IHVwIHdpdGggYFJNTkVUYCB0byBldmVuIGdldCB0aGVyZS5cblxuTm93LCBsZXQncyBzZWUgd2hhdCBgRm9jdXNTeW1ib2xzYCB0ZWxscyB1cy4gYHJtbmV0X21hcF9kZWFnZ3JlZ2F0ZWAgbG9va3MgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LiBMZXQncyBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBvdGhlciBpbnRlcmVzdGluZyBmdW5jdGlvbnMgaW4gdGhlIHZpY2luaXR5LiBBbHJpZ2h0LCBgcm1uZXRfbWFwX2luZ3Jlc3NfaGFuZGxlcmAgaXMgcmlnaHQgdGhlcmUgYW5kIGlzIGFub3RoZXIgZ29vZCBvcHRpb24gdG8gaW52ZXN0aWdhdGUuIE1heWJlIHdlIHNob3VsZCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHJtbmV0X21hcF9kYXRhLmNgIHdoaWxlIHdlJ3JlIGF0IGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjY0LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIwOjQxOjA0LjYzMDk2MzIyNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA3MzU3NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicm1uZXRfbWFwX2RlYWdncmVnYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuYz0zMzY9dTMyIHJtbmV0X21hcF92YWxpZGF0ZV9wYWNrZXRfbGVuKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBybW5ldF9wb3J0ICpwb3J0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuYy0zODItICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuYzozODM6c3RydWN0IHNrX2J1ZmYgKnJtbmV0X21hcF9kZWFnZ3JlZ2F0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmMtMzg0LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBybW5ldF9wb3J0ICpwb3J0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMDo0MTowNC43MTE3MDQxOTRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3NjE1MjkzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBSTU5FVCBEZWFnZ3JlZ2F0aW9uIFBhdGNoKipcblxuQWxyaWdodCwgdGhpcyBwYXRjaCBpcyBob25pbmcgaW4gb24gYHJtbmV0X21hcF9kZWFnZ3JlZ2F0ZWAuIFRoYXQncyB0aGUga2V5IGZ1bmN0aW9uIHRvIGRpc3NlY3QuIFRoZSBjaGFuZ2VzIGFyZSBhbGwgY2VudGVyZWQgdGhlcmUsIHNvIHRoYXQncyB3aGVyZSBteSBmb2N1cyBzaG91bGQgYmUuIEJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgY29kZSwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaWYgYFJNTkVUYCBpdHNlbGYgaGFzIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBjb3VsZCBpbmZsdWVuY2Ugb3IgYmUgaW1wYWN0ZWQgYnkgdGhpcy4gR290dGEgdW5kZXJzdGFuZCB0aGUgZWNvc3lzdGVtIGJlZm9yZSBtYWtpbmcgYW55IGFzc3VtcHRpb25zIGFib3V0IHRoaXMgcGFydGljdWxhciBwaWVjZS4gTGV0J3Mgc2VlIHdoYXQgdGhlIGJyb2FkZXIgcGljdHVyZSBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIxNSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIwOjQxOjA4LjM4Nzg2MDg4MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFJNTkVUIE1BUCBkcml2ZXJcXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0bWVudWNvbmZpZyBSTU5FVFxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIlJtTmV0IE1BUCBkcml2ZXJcXFwiXFxuICAgODpcXHRcXHRkZWZhdWx0IG5cXG4gICA5OlxcdFxcdHNlbGVjdCBHUk9fQ0VMTFNcXG4gIDEwOlxcdFxcdGhlbHBcXG4gIDExOlxcdFxcdCAgSWYgeW91IHNlbGVjdCB0aGlzLCB5b3Ugd2lsbCBlbmFibGUgdGhlIFJNTkVUIG1vZHVsZSB3aGljaCBpcyB1c2VkXFxuICAxMjpcXHRcXHQgIGZvciBoYW5kbGluZyBkYXRhIGluIHRoZSBtdWx0aXBsZXhpbmcgYW5kIGFnZ3JlZ2F0aW9uIHByb3RvY29sIChNQVApXFxuICAxMzpcXHRcXHQgIGZvcm1hdCBpbiB0aGUgZW1iZWRkZWQgZGF0YSBwYXRoLiBSTU5FVCBkZXZpY2VzIGNhbiBiZSBhdHRhY2hlZCB0b1xcbiAgMTQ6XFx0XFx0ICBhbnkgSVAgbW9kZSBwaHlzaWNhbCBkZXZpY2UuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIwOjQxOjA4LjM4Nzk1MDU3MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDkxMzMzNzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgU3RyYXRlZ3k6IEEgQ2xlYW4gU2xhdGUgd2l0aCBGb2N1c2VkIFByZWNpc2lvbioqXG5cbk9rYXksIGhlcmUncyB0aGUgcGxhbi4gTm8gZXh0ZXJuYWwgZW50YW5nbGVtZW50cyB0byB3b3JyeSBhYm91dCDigJMgdGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTXkgZm9jdXMgaXMgbGFzZXItc2hhcnAuIEknbSB6ZXJvaW5nIGluIG9uIGEgdmVyeSBzcGVjaWZpYyB0YXJnZXQ6IHRoZSBgcm1uZXRfbWFwX2RlYWdncmVnYXRlYCBmdW5jdGlvbi4gSXQgc2VlbXMgdGhpcyBpcyB3aGVyZSB0aGUgdnVsbmVyYWJpbGl0eSBsaWVzLCBhcyBpdCdzIHRoZSBjb3JlIG9mIHRoZSBkZWFnZ3JlZ2F0aW9uIGxvZ2ljIHdpdGhpbiB0aGUgUXVhbGNvbW0gUk1ORVQgZHJpdmVyLiBJIGhhdmUgYFdvcnRoRnV6emluZzogdHJ1ZWAgc28gSSdtIGNvbW1pdHRlZC4gVGhpcyBpcyBpbXBvcnRhbnQuXG5cbkJhc2VkIG9uIHRoZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgSSd2ZSBzZWVuLCBzcGVjaWZpY2FsbHkgdGhlIGluY2x1c2lvbiBvZiBgRW5hYmxlQ29uZmlnczogW1wiUk1ORVRcIl1gLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gd29ya2luZyB3aXRoIGFuIFJNTkVUIGVudmlyb25tZW50IGFuZCBJJ2xsIHVzZSB0aG9zZSBjb25maWd1cmF0aW9ucy5cblxuVGhlIGRyaXZlciBpdHNlbGYgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCdzIGEgdmlydHVhbCBuZXR3b3JrIGRldmljZS4gVGhpcyBvcGVucyB1cCBhIGNvbXBlbGxpbmcgYXR0YWNrIHN1cmZhY2UgYmVjYXVzZSBJIGNhbiBhdHRhY2ggdGhlIFJNTkVUIHRvIG90aGVyIG5ldHdvcmsgaW50ZXJmYWNlcyBhbmQgcG90ZW50aWFsbHkgdXNlIHRoaXMgbmV3IHJtbmV0IGludGVyZmFjZSB2aWEgcnRuZXRsaW5rLCBzZW5kaW5nIHBhY2tldHMgdG8gaXQgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nLiBUaGlzIGdpdmVzIG1lIGEgY29udHJvbGxhYmxlIGVudmlyb25tZW50IHRvIHRlc3QgZWRnZSBjYXNlcyBhbmQgaG9wZWZ1bGx5IHRyaWdnZXIgc29tZXRoaW5nIGludGVyZXN0aW5nLiBNeSByZWFzb25pbmcgaGVyZSBpcyB0aGF0IGJ5IGV4cGxvaXRpbmcgdGhlIHZpcnR1YWwgbmV0d29yayBpbnRlcmZhY2UsIEkgY2FuIGF0dGVtcHQgdG8gdHJpZ2dlciB2dWxuZXJhYmlsaXRpZXMgd2l0aGluIHRoZSBkZWFnZ3JlZ2F0aW9uIGxvZ2ljLiBJIGxpa2UgdGhpcyBhcHByb2FjaC4gSXQncyBjbGVhbiwgdGFyZ2V0ZWQsIGFuZCBwcm92aWRlcyBhIGNsZWFyIHBhdGggdG8gZXhlY3V0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjA2LCJPdXRwdXRUb2tlbnMiOjk3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMDo0MToxMy44NzkyODc0NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzQ1NzgxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUk1ORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJybW5ldF9tYXBfZGVhZ2dyZWdhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZGVhZ2dyZWdhdGlvbiBsb2dpYyBpbiB0aGUgUXVhbGNvbW0gUk1ORVQgZHJpdmVyLCB3aGljaCBpcyBhIHZpcnR1YWwgbmV0d29yayBkZXZpY2UgdGhhdCBjYW4gYmUgYXR0YWNoZWQgdG8gb3RoZXIgbmV0d29yayBpbnRlcmZhY2VzLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSBjcmVhdGluZyBhbiBybW5ldCBpbnRlcmZhY2UgdmlhIHJ0bmV0bGluayBhbmQgc2VuZGluZyBwYWNrZXRzIHRvIGl0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlJNTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicm1uZXRfbWFwX2RlYWdncmVnYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGRlYWdncmVnYXRpb24gbG9naWMgaW4gdGhlIFF1YWxjb21tIFJNTkVUIGRyaXZlciwgd2hpY2ggaXMgYSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlIHRoYXQgY2FuIGJlIGF0dGFjaGVkIHRvIG90aGVyIG5ldHdvcmsgaW50ZXJmYWNlcy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYnkgY3JlYXRpbmcgYW4gcm1uZXQgaW50ZXJmYWNlIHZpYSBydG5ldGxpbmsgYW5kIHNlbmRpbmcgcGFja2V0cyB0byBpdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjA6NDE6MTQuMDIyNzUzMDU0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzIwNzE0MTI3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIwOjQxOjE0LjAyMzM2MzA3NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3MzIwNjUyNzgxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVnLiBJbiBgcm1uZXRfbWFwX2RlYWdncmVnYXRlKClgLCBhIG5ldyBgc2tfYnVmZmAgKGBza2JuYCkgaXMgYWxsb2NhdGVkIHVzaW5nIGBhbGxvY19za2IoKWAsIHdoaWNoIGluaXRpYWxpemVzIHRoZSBgZGV2YCBmaWVsZCB0byBOVUxMLiBMYXRlciwgaWYgdGhlIHBhY2tldCBjb250YWlucyBhIE1BUCBjb21tYW5kLCBgcm1uZXRfbWFwX3NlbmRfYWNrKClgIGlzIGNhbGxlZCwgd2hpY2ggYWNjZXNzZXMgYHNrYi1cXHUwMDNlZGV2YCBhbmQgZGVyZWZlcmVuY2VzIGl0IChgZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fc3RhcnRfeG1pdChza2IsIGRldilgKS4gU2luY2UgYHNrYm4tXFx1MDAzZWRldmAgd2FzIE5VTEwsIHRoaXMgY2F1c2VzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBUaGUgcGF0Y2ggZml4ZXMgdGhpcyBieSBjb3B5aW5nIGBza2ItXFx1MDAzZWRldmAgdG8gYHNrYm4tXFx1MDAzZWRldmAuIFRoaXMgaXMgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLCBhcyB0aGUgYGRldmAgZmllbGQgd2FzIGV4cGxpY2l0bHkgemVyb2VkIGR1cmluZyBhbGxvY2F0aW9uLiBTdGFuZGFyZCBrZXJuZWwgdGVzdGluZyBvciBLQVNBTiB3aWxsIGVhc2lseSBjYXRjaCB0aGlzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGIzMTNmZmI2YjQ5ODNkZTA0ZjM2YjcyOWMzNjIwNWNhYjhhOTFlZDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyMCAyMDo0MDozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXBfZGF0YS5jXG5pbmRleCAzMDVhZTE1YWU4ZjM5Li5lNmY0OGRjOWZlNjRkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuY1xuQEAgLTM5NCw2ICszOTQsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqcm1uZXRfbWFwX2RlYWdncmVnYXRlKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoIXNrYm4pXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuK1x0c2tibi1cdTAwM2VkZXYgPSBza2ItXHUwMDNlZGV2O1xuIFx0c2tiX3Jlc2VydmUoc2tibiwgUk1ORVRfTUFQX0RFQUdHUl9IRUFEUk9PTSk7XG4gXHRza2JfcHV0KHNrYm4sIHBhY2tldF9sZW4pO1xuIFx0bWVtY3B5KHNrYm4tXHUwMDNlZGF0YSwgc2tiLVx1MDAzZWRhdGEsIHBhY2tldF9sZW4pO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjA6NDE6MTQuMDIzMzY0NDM0WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwOTYzMDk4MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSTU5FVCBEZWFnZ3JlZ2F0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGludHJvZHVjZXMgYHNrYm4tXHUwMDNlZGV2ID0gc2tiLVx1MDAzZWRldjtgIHdpdGhpbiB0aGUgYHJtbmV0X21hcF9kZWFnZ3JlZ2F0ZWAgZnVuY3Rpb24gaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmNgLiBMZXQncyBicmVhayB0aGlzIGRvd24uIEJhc2ljYWxseSwgd2UncmUgdGFraW5nIGEgbmV3bHkgY3JlYXRlZCBgc2tfYnVmZmAgY2FsbGVkIGBza2JuYCBhbmQgYXNzaWduaW5nIHRoZSBuZXR3b3JrIGRldmljZSAoYGRldmApIGZyb20gdGhlIG9yaWdpbmFsIGBza19idWZmYCAoYHNrYmApIHRvIGl0LlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGxpa2VseSBhIHNhZmV0eSBtZWFzdXJlLiBXaXRob3V0IHRoaXMgbGluZSwgdGhlcmUncyBhIHBvc3NpYmlsaXR5IG9mIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlLCBvciBzb21ldGhpbmcgc2ltaWxhciwgbGF0ZXIgb24gaW4gdGhlIGNvZGUgd2hlcmUgYHNrYm4tXHUwMDNlZGV2YCBpcyB1c2VkLCBhbmQgaXQgaGFzbid0IGJlZW4gZXhwbGljaXRseSBzZXQuIElmIGBza2ItXHUwMDNlZGV2YCBoYXBwZW5lZCB0byBiZSBOVUxMLCB0aGlzIGFzc2lnbm1lbnQgZml4ZXMgdGhlIHByb2JsZW0uXG5cbk15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gcG90ZW50aWFsIGlzc3VlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBidXQgdGhlbiBJIHJlbWVtYmVyIHRoYXQgYHNrYm5gIGlzIGNyZWF0ZWQgd2l0aCBzb21ldGhpbmcgbGlrZSBgYWxsb2Nfc2tiYCwgc28gaXRzIGZpZWxkcywgbGlrZSBgZGV2YCwgYXJlICpsaWtlbHkqIGluaXRpYWxpemVkIHRvIE5VTEwgYnkgZGVmYXVsdC4gU28sIHRoYXQncyBsZXNzIGxpa2VseSBhIHByb2JsZW0uXG5cbk5vdywgSSByZWFsbHkgbmVlZCB0byBnZXQgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdW5kZXJzdGFuZCBob3cgYHJtbmV0X21hcF9kZWFnZ3JlZ2F0ZWAgaXMgdXNlZCB0byBzZWUgKndoeSogdGhpcyBmaXggaXMgbmVlZGVkIGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIG1pc3NpbmcgYGRldmAgcG9pbnRlciB3b3VsZCBhY3R1YWxseSBiZS4gVGltZSB0byBkaWcgZGVlcGVyIGludG8gdGhlIGZ1bmN0aW9uIGl0c2VsZi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzMCwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIwOjQxOjIwLjExOTY3Njg0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDAxMjMwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJybW5ldF9tYXBfZGVhZ2dyZWdhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXBfZGF0YS5jPTMzNj11MzIgcm1uZXRfbWFwX3ZhbGlkYXRlX3BhY2tldF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHJtbmV0X3BvcnQgKnBvcnQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXBfZGF0YS5jLTM4Mi0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXBfZGF0YS5jOjM4MzpzdHJ1Y3Qgc2tfYnVmZiAqcm1uZXRfbWFwX2RlYWdncmVnYXRlKHN0cnVjdCBza19idWZmICpza2IsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuYy0zODQtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHJtbmV0X3BvcnQgKnBvcnQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIwOjQxOjIwLjIwMzY5OTAyOFoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjM2NDM3NDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbjogYHJtbmV0X21hcF9kZWFnZ3JlZ2F0ZWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgcm1uZXRfbWFwX2RlYWdncmVnYXRlYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IHBhcnNlIHRoZSBuYW1lLiBUaGUgXCJybW5ldFwiIHN1Z2dlc3RzIHRoaXMgaXMgcmVsYXRlZCB0byBhIFJhZGlvIE1vZGVtIE5ldHdvcmssIGEga2V5IGNvbmNlcHQuIFRoZSBcIm1hcFwiIGVsZW1lbnQgcG9pbnRzIHRvIGEgbWVjaGFuaXNtIGludm9sdmluZyBhc3NvY2lhdGlvbnMgb3IgbG9va3VwcyBvZiBzb21lIGtpbmQsIGFuZCB0aGVuIFwiZGVhZ2dyZWdhdGVcIiBhbG1vc3QgY2VydGFpbmx5IGltcGxpZXMgc29tZSBsZXZlbCBvZiBkYXRhIHNwbGl0dGluZyBvciBkaXNzZWN0aW9uLlxuXG5TbywgSSdtIGFscmVhZHkgZW52aXNpb25pbmcgYSBjb3JlIGZ1bmN0aW9uIHByb2JhYmx5IHRhc2tlZCB3aXRoIGJyZWFraW5nIGRvd24gYSBwb3RlbnRpYWxseSBjb21wbGV4IG9yIGVuY2Fwc3VsYXRlZCBwYXlsb2FkIHJlY2VpdmVkIG92ZXIgYW4gUk1ORVQgaW50ZXJmYWNlLCB1c2luZyBzb21lIGtpbmQgb2YgbWFwcGluZyBzdHJ1Y3R1cmUgb3IgbG9va3VwIHRvIGhhbmRsZSB0aGUgZGVhZ2dyZWdhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpcyBiZWluZyBkZWFnZ3JlZ2F0ZWQuXG5cbldoYXQgc3BlY2lmaWMgcGllY2VzIG9mIGRhdGEgYXJlIHdlIHdvcmtpbmcgd2l0aD8gV2hhdCdzIGJlaW5nIG1hcHBlZD8gSXMgaXQgYSBoZWFkZXIsIGEgcHJvdG9jb2wgaWRlbnRpZmllciwgZmxvdyBpbmZvcm1hdGlvbiwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSB0eXBlIG9mIGRhdGEgaXQgaXMgbWFwcGluZyBhbmQgZGVhZ2dyZWdhdGluZyB3aWxsIHNpZ25pZmljYW50bHkgaW5mbHVlbmNlIHRoZSBkYXRhIHN0cnVjdHVyZXMsIGFsZ29yaXRobXMsIGFuZCBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucy4gSSBzaG91bGQgYmUgbG9va2luZyBmb3IgY2x1ZXMgb24gaG93IHRoZSBSTU5FVCBsYXllciAob3IgcHJvdG9jb2wpIGlzIGFyY2hpdGVjdHVyZWQuIFRoZSBkZWFnZ3JlZ2F0aW9uICptdXN0KiBiZSBjb25uZWN0ZWQgdG8gYSBjb3JyZXNwb25kaW5nIGFnZ3JlZ2F0aW9uIHNvbWV3aGVyZSB1cHN0cmVhbS5cblxuSSB3YW50IHRvIGtub3cgaWYgdGhlcmUgaXMgYW55IGRpc2N1c3Npb24gcmVnYXJkaW5nIHRoZSB0cmFkZSBvZmZzIGZvciBkaWZmZXJlbnQga2luZHMgb2YgbWFwcGluZ3MgYW5kIGRlYWdncmVnYXRpb25zLiBJIHdhbnQgdG8gY2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIG1hcHBpbmcgc3RydWN0dXJlIGlzIGVmZmljaWVudDsgdGhpbmsgYWJvdXQgaGFzaCB0YWJsZXMsIGJpbmFyeSBzZWFyY2ggdHJlZXMgb3IsIGF0IGxlYXN0LCBvcHRpbWl6ZWQgbG9vcHMuIEFyZSB3ZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHRoYXQgbmVlZHMgdG8gYmUgZmFzdCBhbmQgbG93LWxhdGVuY3kgb3IgY2FuIHdlIHRvbGVyYXRlIGEgaGlnaGVyIG92ZXJoZWFkPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgdXNhZ2U/IEFyZSB0aGVyZSBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIG9yIGJ1ZmZlciBvdmVyZmxvd3MgdG8gY29uc2lkZXI/IFRoYXQncyBsaWtlbHkgdmVyeSBpbXBvcnRhbnQuXG5cbkZ1cnRoZXJtb3JlLCBjb250ZXh0IGlzIGtleS4gV2hhdCBkb2VzIHRoaXMgaW50ZWdyYXRlIHdpdGg/IFdoYXQgaGFwcGVucyB0byB0aGUgZGVhZ2dyZWdhdGVkIGRhdGEgYWZ0ZXIgdGhpcyBwb2ludD8gV2hhdCBhcmUgaXRzIGlucHV0cyBhbmQgb3V0cHV0cz8gRG9lcyBpdCB3b3JrIGluIHJlYWwgdGltZSwgb3IgaXMgaXQgb2ZmbGluZT8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBlcnJvciBjb25kaXRpb25zIHRvIGxvb2sgZm9yPyBBcmUgdGhlcmUgc3BlY2lmaWMgcHJvdG9jb2xzIGludm9sdmVkPyBJJ20gaG9waW5nIHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZSB0byBrbm93IGhvdyB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuIFdpdGggdGhpcyBrbm93bGVkZ2UgSSBjYW4gYmUgY29uZmlkZW50IGluIGhvdyB0byBiZXN0IG1haW50YWluIGFuZCBpbXByb3ZlIHRoaXMgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg1OCwiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIwOjQxOjI1LjQ0MDE0MTg0M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTAyNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzODMsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzODM6XFx0c3RydWN0IHNrX2J1ZmYgKnJtbmV0X21hcF9kZWFnZ3JlZ2F0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAzODQ6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHJtbmV0X3BvcnQgKnBvcnQpXFxuIDM4NTpcXHR7XFxuIDM4NjpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tibjtcXG4gMzg3OlxcdFxcdHUzMiBwYWNrZXRfbGVuO1xcbiAzODg6XFx0XFxuIDM4OTpcXHRcXHRwYWNrZXRfbGVuID0gcm1uZXRfbWFwX3ZhbGlkYXRlX3BhY2tldF9sZW4oc2tiLCBwb3J0KTtcXG4gMzkwOlxcdFxcdGlmICghcGFja2V0X2xlbilcXG4gMzkxOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAzOTI6XFx0XFxuIDM5MzpcXHRcXHRza2JuID0gYWxsb2Nfc2tiKHBhY2tldF9sZW4gKyBSTU5FVF9NQVBfREVBR0dSX1NQQUNJTkcsIEdGUF9BVE9NSUMpO1xcbiAzOTQ6XFx0XFx0aWYgKCFza2JuKVxcbiAzOTU6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDM5NjpcXHRcXG4gMzk3OlxcdFxcdHNrYm4tXFx1MDAzZWRldiA9IHNrYi1cXHUwMDNlZGV2O1xcbiAzOTg6XFx0XFx0c2tiX3Jlc2VydmUoc2tibiwgUk1ORVRfTUFQX0RFQUdHUl9IRUFEUk9PTSk7XFxuIDM5OTpcXHRcXHRza2JfcHV0KHNrYm4sIHBhY2tldF9sZW4pO1xcbiA0MDA6XFx0XFx0bWVtY3B5KHNrYm4tXFx1MDAzZWRhdGEsIHNrYi1cXHUwMDNlZGF0YSwgcGFja2V0X2xlbik7XFxuIDQwMTpcXHRcXHRza2JfcHVsbChza2IsIHBhY2tldF9sZW4pO1xcbiA0MDI6XFx0XFxuIDQwMzpcXHRcXHRyZXR1cm4gc2tibjtcXG4gNDA0OlxcdH1cXG4gNDA1OlxcdFxcbiA0MDY6XFx0LyogVmFsaWRhdGVzIHBhY2tldCBjaGVja3N1bXMuIEZ1bmN0aW9uIHRha2VzIGEgcG9pbnRlciB0b1xcbiA0MDc6XFx0ICogdGhlIGJlZ2lubmluZyBvZiBhIGJ1ZmZlciB3aGljaCBjb250YWlucyB0aGUgSVAgcGF5bG9hZCArXFxuIDQwODpcXHQgKiBwYWRkaW5nICsgY2hlY2tzdW0gdHJhaWxlci5cXG4gNDA5OlxcdCAqIE9ubHkgSVB2NCBhbmQgSVB2NiBhcmUgc3VwcG9ydGVkIGFsb25nIHdpdGggVENQIFxcdTAwMjYgVURQLlxcbiA0MTA6XFx0ICogRnJhZ21lbnRlZCBvciB0dW5uZWxlZCBwYWNrZXRzIGFyZSBub3Qgc3VwcG9ydGVkLlxcbiA0MTE6XFx0ICovXFxuIDQxMjpcXHRpbnQgcm1uZXRfbWFwX2NoZWNrc3VtX2Rvd25saW5rX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgbGVuKVxcbiA0MTM6XFx0e1xcbiA0MTQ6XFx0XFx0c3RydWN0IHJtbmV0X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihza2ItXFx1MDAzZWRldik7XFxuIDQxNTpcXHRcXHRzdHJ1Y3Qgcm1uZXRfbWFwX2RsX2NzdW1fdHJhaWxlciAqY3N1bV90cmFpbGVyO1xcbiA0MTY6XFx0XFxuIDQxNzpcXHRcXHRpZiAodW5saWtlbHkoIShza2ItXFx1MDAzZWRldi1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX1JYQ1NVTSkpKSB7XFxuIDQxODpcXHRcXHRcXHRwcml2LVxcdTAwM2VzdGF0cy5jc3VtX3N3Kys7XFxuIDQxOTpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIDQyMDpcXHRcXHR9XFxuIDQyMTpcXHRcXG4gNDIyOlxcdFxcdGNzdW1fdHJhaWxlciA9IChzdHJ1Y3Qgcm1uZXRfbWFwX2RsX2NzdW1fdHJhaWxlciAqKShza2ItXFx1MDAzZWRhdGEgKyBsZW4pO1xcbiA0MjM6XFx0XFxuIDQyNDpcXHRcXHRpZiAoIShjc3VtX3RyYWlsZXItXFx1MDAzZWZsYWdzIFxcdTAwMjYgTUFQX0NTVU1fRExfVkFMSURfRkxBRykpIHtcXG4gNDI1OlxcdFxcdFxcdHByaXYtXFx1MDAzZXN0YXRzLmNzdW1fdmFsaWRfdW5zZXQrKztcXG4gNDI2OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0Mjc6XFx0XFx0fVxcbiA0Mjg6XFx0XFxuIDQyOTpcXHRcXHRpZiAoc2tiLVxcdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpXFxuIDQzMDpcXHRcXHRcXHRyZXR1cm4gcm1uZXRfbWFwX2lwdjRfZGxfY3N1bV90cmFpbGVyKHNrYiwgY3N1bV90cmFpbGVyLCBwcml2KTtcXG4gNDMxOlxcdFxcbiA0MzI6XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0lQVjYpIFxcdTAwMjZcXHUwMDI2IHNrYi1cXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIwOjQxOjI1LjQ0MDI5NDY0M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTU0MDU4Mzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBTS0IgRGV2aWNlIFBvaW50ZXIgRml4KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBzZXR0aW5nIGBza2JuLVx1MDAzZWRldiA9IHNrYi1cdTAwM2VkZXY7YC4gUmlnaHQsIEkgc2VlIHRoZSBpbW1lZGlhdGUgaW50ZW50OiBpdCdzIGEgZml4IGFpbWVkIGF0IHByZXZlbnRpbmcgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIG9yIHNvbWV0aGluZyB2ZXJ5IG11Y2ggbGlrZSBpdC4gSWYgYHNrYm4tXHUwMDNlZGV2YCBpcyBsZWZ0IGFzIE5VTEwsIHdlJ3JlIGdvaW5nIHRvIGdldCBhIGNyYXNoIHdoZW4gdGhhdCBwb2ludGVyIGdldHMgYWNjZXNzZWQgZG93bnN0cmVhbSwgYW5kIEkgY2FuIHNlZSBwcmVjaXNlbHkgd2hlcmUgdGhpcyBpcyBhbiBpc3N1ZS4gVGhpbmtpbmcgYWJvdXQgZXhhbXBsZXMsIGxpa2UgYG5ldGRldl9wcml2KHNrYi1cdTAwM2VkZXYpYCBpbiBhIGZ1bmN0aW9uIHN1Y2ggYXMgYHJtbmV0X21hcF9jaGVja3N1bV9kb3dubGlua19wYWNrZXRgIG9yIGFueXdoZXJlIHRoYXQgaXMgdHJ5aW5nIHRvIHVzZSB0aGUgZGV2IHBvaW50ZXIuXG5cbkl0J3Mgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHByb2JsZW07IEkga25vdyBgYWxsb2Nfc2tiYCBpbml0aWFsaXplcyBgc2tiLVx1MDAzZWRldmAgdG8gTlVMTCwgc28gdGhlcmUncyB0aGUgaW5pdGlhbCBzdGF0ZS4gQnV0LCBoYW5nIG9uLi4uIGxldCBtZSByZS10cmFjZSB0aGUgYWxsb2NhdGlvbiBwYXRoLiBJZiBteSBtZW1vcnkgc2VydmVzLCBgYWxsb2Nfc2tiYCByZWxpZXMgb24gYGttZW1fY2FjaGVfYWxsb2NgLCB3aGljaCBpbiB0dXJuLCBzaG91bGQgc2V0IGBza2ItXHUwMDNlZGV2ID0gTlVMTGAgd2l0aGluIHRoZSBmdW5jdGlvbiBgX19idWlsZF9za2JfYXJvdW5kYCBvciBgX19hbGxvY19za2JgLlxuXG5UbyBiZSBjZXJ0YWluLCBsZXQncyB0YWtlIGEgcXVpY2sgbG9vayBhdCBgX19hbGxvY19za2JgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjMzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjA6NDE6MzAuNTk0MzU1OTJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDE5MTcyMSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tiLVxcdTAwM2VkZXYgPSBOVUxMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMDo0MTozMC43MTQ1NjAwNzFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzczNTQwNzExNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSBkZWVwbHkgaW52b2x2ZWQgaW4gdGhpcyBhcmVhOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTS0IgQWxsb2NhdGlvbiBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgZ3V0cyBvZiB0aGUgbmV0d29ya2luZyBzdGFjayBhbmQgbmVlZCB0byBkaWcgaW50byBob3cgdGhvc2UgYHNrYmAgKHNvY2tldCBidWZmZXIpIHN0cnVjdHVyZXMgYXJlIGFjdHVhbGx5IGFsbG9jYXRlZC4gVGltZSB0byBwdWxsIHVwIHRoZSBzb3VyY2UgY29kZSBmb3IgYF9fYWxsb2Nfc2tiYCBpbiBgbmV0L2NvcmUvc2tidWZmLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHRoZSBjb3JlIG9mIGhvdyBvdXIgbmV0d29ya2luZyBkYXRhIGlzIG1hbmFnZWQgYXQgdGhlIHBhY2tldCBsZXZlbC4gSXQncyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGV2ZXJ5IGluY29taW5nIGFuZCBvdXRnb2luZyBuZXR3b3JrIHBhY2tldC4gVW5kZXJzdGFuZGluZyB0aGlzIGZ1bmN0aW9uIGludGltYXRlbHkgaXMgY3J1Y2lhbCBmb3IgcGVyZm9ybWFuY2UgdHVuaW5nLCBkZWJ1Z2dpbmcgbWVtb3J5LXJlbGF0ZWQgaXNzdWVzLCBhbmQgcG90ZW50aWFsbHksIGNyYWZ0aW5nIGFueSBjdXN0b20gbmV0d29ya2luZyBzb2x1dGlvbnMuIEkgZXhwZWN0IHRoaXMgd2lsbCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGdldHRpbmcgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgcHJvYmxlbSBJJ20gd29ya2luZyB3aXRoIHRvZGF5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzIzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjA6NDE6MzQuNDQ5OTcwMzU1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTM3MjMwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2FsbG9jX3NrYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za2J1ZmYuYz02MDY9c3RhdGljIHZvaWQgKmttYWxsb2NfcmVzZXJ2ZSh1bnNpZ25lZCBpbnQgKnNpemUsIGdmcF90IGZsYWdzLCBpbnQgbm9kZSxcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTY1Ny0vKipcXG5uZXQvY29yZS9za2J1ZmYuYzo2NTg6ICpcXHRfX2FsbG9jX3NrYlxcdC1cXHRhbGxvY2F0ZSBhIG5ldHdvcmsgYnVmZmVyXFxubmV0L2NvcmUvc2tidWZmLmMtNjU5LSAqXFx0QHNpemU6IHNpemUgdG8gYWxsb2NhdGVcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTY3My0gKi9cXG5uZXQvY29yZS9za2J1ZmYuYzo2NzQ6c3RydWN0IHNrX2J1ZmYgKl9fYWxsb2Nfc2tiKHVuc2lnbmVkIGludCBzaXplLCBnZnBfdCBnZnBfbWFzayxcXG5uZXQvY29yZS9za2J1ZmYuYy02NzUtXFx0XFx0XFx0ICAgIGludCBmbGFncywgaW50IG5vZGUpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy03NDUtfVxcbm5ldC9jb3JlL3NrYnVmZi5jOjc0NjpFWFBPUlRfU1lNQk9MKF9fYWxsb2Nfc2tiKTtcXG5uZXQvY29yZS9za2J1ZmYuYy03NDctXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz03NjE9c3RydWN0IHNrX2J1ZmYgKl9fbmV0ZGV2X2FsbG9jX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbGVuLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNzc2LVxcdCAgICAoZ2ZwX21hc2sgXFx1MDAyNiAoX19HRlBfRElSRUNUX1JFQ0xBSU0gfCBHRlBfRE1BKSkpIHtcXG5uZXQvY29yZS9za2J1ZmYuYzo3Nzc6XFx0XFx0c2tiID0gX19hbGxvY19za2IobGVuLCBnZnBfbWFzaywgU0tCX0FMTE9DX1JYLCBOVU1BX05PX05PREUpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTc3OC1cXHRcXHRpZiAoIXNrYilcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTgzOD1zdHJ1Y3Qgc2tfYnVmZiAqbmFwaV9hbGxvY19za2Ioc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCB1bnNpZ25lZCBpbnQgbGVuKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtODU0LVxcdCAgICAoZ2ZwX21hc2sgXFx1MDAyNiAoX19HRlBfRElSRUNUX1JFQ0xBSU0gfCBHRlBfRE1BKSkpIHtcXG5uZXQvY29yZS9za2J1ZmYuYzo4NTU6XFx0XFx0c2tiID0gX19hbGxvY19za2IobGVuLCBnZnBfbWFzaywgU0tCX0FMTE9DX1JYIHwgU0tCX0FMTE9DX05BUEksXFxubmV0L2NvcmUvc2tidWZmLmMtODU2LVxcdFxcdFxcdFxcdCAgTlVNQV9OT19OT0RFKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTIxNzc9c3RydWN0IHNrX2J1ZmYgKnNrYl9jb3B5KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjE5MC1cXHRzaXplID0gc2tiX2VuZF9vZmZzZXQoc2tiKSArIHNrYi1cXHUwMDNlZGF0YV9sZW47XFxubmV0L2NvcmUvc2tidWZmLmM6MjE5MTpcXHRuID0gX19hbGxvY19za2Ioc2l6ZSwgZ2ZwX21hc2ssXFxubmV0L2NvcmUvc2tidWZmLmMtMjE5Mi1cXHRcXHRcXHRza2JfYWxsb2NfcnhfZmxhZyhza2IpLCBOVU1BX05PX05PREUpO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MjIyNT1zdHJ1Y3Qgc2tfYnVmZiAqX19wc2tiX2NvcHlfZmNsb25lKHN0cnVjdCBza19idWZmICpza2IsIGludCBoZWFkcm9vbSxcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTIyMjktXFx0aW50IGZsYWdzID0gc2tiX2FsbG9jX3J4X2ZsYWcoc2tiKSB8IChmY2xvbmUgPyBTS0JfQUxMT0NfRkNMT05FIDogMCk7XFxubmV0L2NvcmUvc2tidWZmLmM6MjIzMDpcXHRzdHJ1Y3Qgc2tfYnVmZiAqbiA9IF9fYWxsb2Nfc2tiKHNpemUsIGdmcF9tYXNrLCBmbGFncywgTlVNQV9OT19OT0RFKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0yMjMxLVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MjUwMj1zdHJ1Y3Qgc2tfYnVmZiAqc2tiX2NvcHlfZXhwYW5kKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0yNTE5LVxcdG9sZGhlYWRyb29tID0gc2tiX2hlYWRyb29tKHNrYik7XFxubmV0L2NvcmUvc2tidWZmLmM6MjUyMDpcXHRuID0gX19hbGxvY19za2IobmV3aGVhZHJvb20gKyBza2ItXFx1MDAzZWxlbiArIG5ld3RhaWxyb29tLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTI1MjEtXFx0XFx0XFx0Z2ZwX21hc2ssIHNrYl9hbGxvY19yeF9mbGFnKHNrYiksXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz00Nzc3PXN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqaGVhZF9za2IsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy00OTQ0LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjQ5NDU6XFx0XFx0XFx0bnNrYiA9IF9fYWxsb2Nfc2tiKGhzaXplICsgZG9mZnNldCArIGhlYWRyb29tLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTQ5NDYtXFx0XFx0XFx0XFx0XFx0ICAgR0ZQX0FUT01JQywgc2tiX2FsbG9jX3J4X2ZsYWcoaGVhZF9za2IpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMDo0MTozNC41MjEzNDc4MzFaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIwNDYyMzgxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgYF9fYWxsb2Nfc2tiYCBpbXBsZW1lbnRhdGlvbjpcblxuKipEaXZpbmcgaW50byBgX19hbGxvY19za2JgKipcblxuT2theSwgdGltZSB0byBkaXNzZWN0IHRoZSBndXRzIG9mIGBfX2FsbG9jX3NrYmAuIExldCdzIGFzc3VtZSB0aGVyZSBhcmUgcGVyZm9ybWFuY2UgaXNzdWVzLCBvciBtYXliZSBJJ20gbG9va2luZyBhdCBwb3RlbnRpYWwgbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ2llcyBhbmQgaG93IHRoZXkgY2FuIGJlIG9wdGltaXplZC4gTXkgZmlyc3QgcG9ydCBvZiBjYWxsIHdpbGwgYmUgdG8gY2hlY2sgb3V0IGhvdyBgX19hbGxvY19za2JgIGlzIGltcGxlbWVudGVkLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGFyY2hpdGVjdHVyYWwgY29udGV4dC4gV2hhdCBoYXJkd2FyZSBhbSBJIGRlYWxpbmcgd2l0aD8gSXMgdGhpcyBhIHN5c3RlbSB3aXRoIERNQSBjYXBhYmlsaXRpZXM/IEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgaGlnaC10aHJvdWdocHV0IG5ldHdvcmsgY2FyZD8gVGhpcyB1bmRlcnN0YW5kaW5nIGlzIGFic29sdXRlbHkgY3JpdGljYWwgdG8gZXZlbiBiZWdpbiB1bmRlcnN0YW5kaW5nIHRoZSBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyBvciBwb3RlbnRpYWwgaXNzdWVzIGluIHRoaXMgZnVuZGFtZW50YWwgYWxsb2NhdGlvbiBmdW5jdGlvbi4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgaXMgdGhlIHVuZGVybHlpbmcgbWVtb3J5IG1hbmFnZW1lbnQgYSBmYWN0b3I/IEFyZSB3ZSBydW5uaW5nIHdpdGggYSBzdGFuZGFyZCBtZW1vcnkgYWxsb2NhdG9yIGxpa2UgU0xBQiwgU0xVQiwgb3Igc29tZXRoaW5nIG1vcmUgc3BlY2lhbGl6ZWQ/IFRoZSBjaG9pY2Ugb2YgYWxsb2NhdG9yIHNpZ25pZmljYW50bHkgaW1wYWN0cyBwZXJmb3JtYW5jZSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBwaWVjZSBmaXJzdC4gTm93LCBsZXQncyBsb29rIGF0IHRoZSBjb2RlLi4uIHdoYXQncyB0aGUgYWxsb2NhdGlvbiBzaXplPyBBcmUgdGhleSB1c2luZyBhIGNvbW1vbiBzaXplLCBhcmUgdGhlcmUgc2l6ZSBjbGFzc2VzLCBob3cgaXMgdGhlIGFjdHVhbCBtZW1vcnkgYmVpbmcgcmV0cmlldmVkIGZyb20gdGhlIGtlcm5lbD8gSXMgdGhlcmUgYSBzcGlubG9jayBvciBvdGhlciBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtPyBJcyBpdCBlZmZpY2llbnQsIG9yIGlzIGl0IGEgYm90dGxlbmVjaz8gTGV0J3MgY2hlY2sgdGhlIGZsYWdzIHBhc3NlZCB0byB0aGUga2VybmVsJ3MgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb25zIOKAkyBgR0ZQXy4uLmAgZmxhZ3MgZ2l2ZSB1cyBjbHVlcyBhYm91dCBhbGxvY2F0aW9uIGJlaGF2aW9yIGFuZCBwcmlvcml0aWVzLiBEb2VzIGl0IGFnZ3Jlc3NpdmVseSB0cnkgdG8gYXZvaWQgZnJhZ21lbnRhdGlvbj8gSXMgdGhlcmUgYSBwb3RlbnRpYWwgZm9yIG1lbW9yeSBsZWFrcyBvciBvdGhlciBhbGxvY2F0aW9uIHByb2JsZW1zIEkgbmVlZCB0byBiZSBjb25jZXJuZWQgd2l0aD8gTGV0J3MgdHJhY2UgdGhyb3VnaCB0aGUgbG9naWMgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaG90c3BvdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwNTksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMDo0MTozOC43MjU5NzQyMjhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc1MDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY3NCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY3NDpcXHRzdHJ1Y3Qgc2tfYnVmZiAqX19hbGxvY19za2IodW5zaWduZWQgaW50IHNpemUsIGdmcF90IGdmcF9tYXNrLFxcbiA2NzU6XFx0XFx0XFx0XFx0ICAgIGludCBmbGFncywgaW50IG5vZGUpXFxuIDY3NjpcXHR7XFxuIDY3NzpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcXG4gNjc4OlxcdFxcdHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZTtcXG4gNjc5OlxcdFxcdHU4ICpkYXRhO1xcbiA2ODA6XFx0XFxuIDY4MTpcXHRcXHRpZiAoc2tfbWVtYWxsb2Nfc29ja3MoKSBcXHUwMDI2XFx1MDAyNiAoZmxhZ3MgXFx1MDAyNiBTS0JfQUxMT0NfUlgpKVxcbiA2ODI6XFx0XFx0XFx0Z2ZwX21hc2sgfD0gX19HRlBfTUVNQUxMT0M7XFxuIDY4MzpcXHRcXG4gNjg0OlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IFNLQl9BTExPQ19GQ0xPTkUpIHtcXG4gNjg1OlxcdFxcdFxcdGNhY2hlID0gbmV0X2hvdGRhdGEuc2tidWZmX2ZjbG9uZV9jYWNoZTtcXG4gNjg2OlxcdFxcdFxcdGdvdG8gZmFsbGJhY2s7XFxuIDY4NzpcXHRcXHR9XFxuIDY4ODpcXHRcXHRjYWNoZSA9IG5ldF9ob3RkYXRhLnNrYnVmZl9jYWNoZTtcXG4gNjg5OlxcdFxcdGlmICh1bmxpa2VseShub2RlICE9IE5VTUFfTk9fTk9ERSBcXHUwMDI2XFx1MDAyNiBub2RlICE9IG51bWFfbWVtX2lkKCkpKVxcbiA2OTA6XFx0XFx0XFx0Z290byBmYWxsYmFjaztcXG4gNjkxOlxcdFxcbiA2OTI6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgU0tCX0FMTE9DX05BUEkpIHtcXG4gNjkzOlxcdFxcdFxcdHNrYiA9IG5hcGlfc2tiX2NhY2hlX2dldCh0cnVlKTtcXG4gNjk0OlxcdFxcdFxcdGlmICh1bmxpa2VseSghc2tiKSlcXG4gNjk1OlxcdFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA2OTY6XFx0XFx0fSBlbHNlIGlmICghaW5faGFyZGlycSgpIFxcdTAwMjZcXHUwMDI2ICFpcnFzX2Rpc2FibGVkKCkpIHtcXG4gNjk3OlxcdFxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4gNjk4OlxcdFxcdFxcdHNrYiA9IG5hcGlfc2tiX2NhY2hlX2dldChmYWxzZSk7XFxuIDY5OTpcXHRcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4gNzAwOlxcdFxcdH1cXG4gNzAxOlxcdFxcbiA3MDI6XFx0XFx0aWYgKCFza2IpIHtcXG4gNzAzOlxcdGZhbGxiYWNrOlxcbiA3MDQ6XFx0XFx0XFx0c2tiID0ga21lbV9jYWNoZV9hbGxvY19ub2RlKGNhY2hlLCBnZnBfbWFzayBcXHUwMDI2IH5HRlBfRE1BLCBub2RlKTtcXG4gNzA1OlxcdFxcdFxcdGlmICh1bmxpa2VseSghc2tiKSlcXG4gNzA2OlxcdFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA3MDc6XFx0XFx0fVxcbiA3MDg6XFx0XFx0c2tidWZmX2NsZWFyKHNrYik7XFxuIDcwOTpcXHRcXG4gNzEwOlxcdFxcdC8qIFdlIGRvIG91ciBiZXN0IHRvIGFsaWduIHNrYl9zaGFyZWRfaW5mbyBvbiBhIHNlcGFyYXRlIGNhY2hlXFxuIDcxMTpcXHRcXHQgKiBsaW5lLiBJdCB1c3VhbGx5IHdvcmtzIGJlY2F1c2Uga21hbGxvYyhYIFxcdTAwM2UgU01QX0NBQ0hFX0JZVEVTKSBnaXZlc1xcbiA3MTI6XFx0XFx0ICogYWxpZ25lZCBtZW1vcnkgYmxvY2tzLCB1bmxlc3MgU0xVQi9TTEFCIGRlYnVnIGlzIGVuYWJsZWQuXFxuIDcxMzpcXHRcXHQgKiBCb3RoIHNrYi1cXHUwMDNlaGVhZCBhbmQgc2tiX3NoYXJlZF9pbmZvIGFyZSBjYWNoZSBsaW5lIGFsaWduZWQuXFxuIDcxNDpcXHRcXHQgKi9cXG4gNzE1OlxcdFxcdGRhdGEgPSBrbWFsbG9jX3Jlc2VydmUoXFx1MDAyNnNpemUsIGdmcF9tYXNrLCBub2RlLCBza2IpO1xcbiA3MTY6XFx0XFx0aWYgKHVubGlrZWx5KCFkYXRhKSlcXG4gNzE3OlxcdFxcdFxcdGdvdG8gbm9kYXRhO1xcbiA3MTg6XFx0XFx0Lyoga21hbGxvY19zaXplX3JvdW5kdXAoKSBtaWdodCBnaXZlIHVzIG1vcmUgcm9vbSB0aGFuIHJlcXVlc3RlZC5cXG4gNzE5OlxcdFxcdCAqIFB1dCBza2Jfc2hhcmVkX2luZm8gZXhhY3RseSBhdCB0aGUgZW5kIG9mIGFsbG9jYXRlZCB6b25lLFxcbiA3MjA6XFx0XFx0ICogdG8gYWxsb3cgbWF4IHBvc3NpYmxlIGZpbGxpbmcgYmVmb3JlIHJlYWxsb2NhdGlvbi5cXG4gNzIxOlxcdFxcdCAqL1xcbiA3MjI6XFx0XFx0X19maW5hbGl6ZV9za2JfYXJvdW5kKHNrYiwgZGF0YSwgc2l6ZSk7XFxuIDcyMzpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjA6NDE6MzguNzI2MzUwNDc5WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNjQ2MTIxOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBza2J1ZmZfY2xlYXJgKipcblxuT2theSwgc28gdGhlIGluc3RydWN0aW9uIGlzIHRvIGV4YW1pbmUgYHNrYnVmZl9jbGVhcmAuIE5hdHVyYWxseSwgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCBpdHMgY29yZSBmdW5jdGlvbjogY2xlYXJpbmcgYSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikuIE15IGV4cGVydGlzZSBkaWN0YXRlcyB0aGF0IEkgbmVlZCB0byBkaXNzZWN0IGV4YWN0bHkgKmhvdyogaXQgY2xlYXJzIHRoZSBza2IuIERvZXMgaXQgc2ltcGx5IHplcm8gb3V0IHRoZSBtZW1vcnk/IERvZXMgaXQgcmVsZWFzZSByZXNvdXJjZXM/IERvZXMgaXQgYWZmZWN0IHRoZSBjb250cm9sIHN0cnVjdHVyZXMgaW4gYW55IHdheT8gVGhlIGdvYWwgaXMgdG8gc2VlIHByZWNpc2VseSBob3cgdGhlIHNrYiBpcyBiZWluZyBwdXJnZWQsIHNvIEkgbmVlZCB0byBjaGVjayBgc2tidWZmX2NsZWFyYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI2NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjA6NDE6NDEuOTkwOTc2NjE3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Mzk3NDU3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza2J1ZmZfY2xlYXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2tidWZmLmM9Mjg0PXN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKm5hcGlfc2tiX2NhY2hlX2dldChib29sIGFsbG9jKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMzE1LSAqL1xcbm5ldC9jb3JlL3NrYnVmZi5jOjMxNjpzdGF0aWMgaW5saW5lIHZvaWQgc2tidWZmX2NsZWFyKHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2NvcmUvc2tidWZmLmMtMzE3LXtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTM0ND11MzIgbmFwaV9za2JfY2FjaGVfZ2V0X2J1bGsodm9pZCAqKnNrYnMsIHUzMiBuKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMzc5LVxcdFxcdGthc2FuX21lbXBvb2xfdW5wb2lzb25fb2JqZWN0KHNrYnNbaV0sIHNrYnVmZl9jYWNoZV9zaXplKTtcXG5uZXQvY29yZS9za2J1ZmYuYzozODA6XFx0XFx0c2tidWZmX2NsZWFyKHNrYnNbaV0pO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTM4MS1cXHR9XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz00Mzc9c3RydWN0IHNrX2J1ZmYgKnNsYWJfYnVpbGRfc2tiKHZvaWQgKmRhdGEpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy00NDYtXFxubmV0L2NvcmUvc2tidWZmLmM6NDQ3OlxcdHNrYnVmZl9jbGVhcihza2IpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTQ0OC1cXHRkYXRhID0gX19zbGFiX2J1aWxkX3NrYihkYXRhLCBcXHUwMDI2c2l6ZSk7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz00OTA9c3RydWN0IHNrX2J1ZmYgKl9fYnVpbGRfc2tiKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBmcmFnX3NpemUpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy00OTgtXFxubmV0L2NvcmUvc2tidWZmLmM6NDk5OlxcdHNrYnVmZl9jbGVhcihza2IpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTUwMC1cXHRfX2J1aWxkX3NrYl9hcm91bmQoc2tiLCBkYXRhLCBmcmFnX3NpemUpO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NTUyPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqX19uYXBpX2J1aWxkX3NrYih2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZnJhZ19zaXplKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNTU5LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjU2MDpcXHRza2J1ZmZfY2xlYXIoc2tiKTtcXG5uZXQvY29yZS9za2J1ZmYuYy01NjEtXFx0X19idWlsZF9za2JfYXJvdW5kKHNrYiwgZGF0YSwgZnJhZ19zaXplKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTY3ND1zdHJ1Y3Qgc2tfYnVmZiAqX19hbGxvY19za2IodW5zaWduZWQgaW50IHNpemUsIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNzA3LVxcdH1cXG5uZXQvY29yZS9za2J1ZmYuYzo3MDg6XFx0c2tidWZmX2NsZWFyKHNrYik7XFxubmV0L2NvcmUvc2tidWZmLmMtNzA5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMDo0MTo0Mi4wNjQ5NTY4NjRaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgyODA5NjA4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgYHNrYnVmZl9jbGVhcmAgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIGluaXRpYWwgdGhvdWdodCBoZXJlLCBcIkxldCdzIHJlYWQgYHNrYnVmZl9jbGVhcmAsXCIgaW5kaWNhdGVzIGEgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3Mgb2YgdGhhdCBzcGVjaWZpYyBmdW5jdGlvbi4gTXkgaW1tZWRpYXRlIGFzc3VtcHRpb24gaXMgdGhhdCB3ZSBhcmUgbG9va2luZyBhdCBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgTGludXgga2VybmVsJ3MgbmV0d29ya2luZyBzdGFjaywgZ2l2ZW4gdGhlIGBza2J1ZmZgIHByZWZpeC4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHdlJ2xsIGJlIGRlYWxpbmcgd2l0aCB0aGUgY29yZSBzdHJ1Y3R1cmUgdXNlZCBmb3IgbWFuYWdpbmcgbmV0d29yayBwYWNrZXRzIOKAkyB0aGUgYHNrX2J1ZmZgIHN0cnVjdHVyZSBpdHNlbGYuXG5cblRoZSBnb2FsIGlzIGxpa2VseSB0byBkZWNvbnN0cnVjdCBpdHMgb3BlcmF0aW9uOyB0byB1bmRlcnN0YW5kIHByZWNpc2VseSB3aGF0IGhhcHBlbnMgd2hlbiBhbiBgc2tidWZmYCBpbnN0YW5jZSBpcyBcImNsZWFyZWQuXCIgVGhpcyBjb3VsZCBpbnZvbHZlIHplcm9pbmcgb3V0IG1lbW9yeSwgcmVsZWFzaW5nIGFzc29jaWF0ZWQgcmVzb3VyY2VzIGxpa2UgZGF0YSBidWZmZXJzIGFuZCBtZXRhZGF0YSwgcG9zc2libHkgdXBkYXRpbmcgaW50ZXJuYWwgZmxhZ3MsIGFuZCBtYXliZSBldmVuIHJldHVybmluZyB0aGUgYHNrYnVmZmAgdG8gYSBwb29sIGZvciByZXVzZS4gVGhlIHNwZWNpZmljcyBhcmUga2V5IGhlcmUuIEknbGwgbmVlZCB0byBsb29rIGZvciBjYWxscyB0byBmdW5jdGlvbnMgbGlrZSBga2ZyZWVfc2tiYCwgYHNrYl9yZWxlYXNlX2RhdGFgLCBhbnkgbWFuaXB1bGF0aW9uIG9mIGBkYXRhYCwgYHRhaWxgLCBgbGVuYCwgYGhlYWRgLCBgbmV4dGAsIGBwcmV2YCBwb2ludGVycywgYW5kIGFueXRoaW5nIHJlbGF0ZWQgdG8gcmVmZXJlbmNlIGNvdW50aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIHdpbGwgYmUgb24gZW5zdXJpbmcgZWZmaWNpZW50IHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIHByZXZlbnRpbmcgbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcy4gSSdsbCBhbHNvIGJlIHdhdGNoaW5nIGZvciBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBpZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBjb25jdXJyZW50bHkgaW4gYSBtdWx0aS10aHJlYWRlZCBjb250ZXh0LiBBIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgaG93IGBza2J1ZmZfY2xlYXJgIGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBpbnRlcnJ1cHQgY29udGV4dHMgd2lsbCBiZSBjcnVjaWFsLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNvbW1lbnRzIHdpdGhpbiB0aGUgY29kZSwgYW5kIG1heWJlIGFsc28gYW55IHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiwgdG8gdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGUgY2hvc2VuIGltcGxlbWVudGF0aW9uLCBwYXJ0aWN1bGFybHkgaWYgYW55IG9wdGltaXphdGlvbnMgYXJlIGVtcGxveWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDk0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjA6NDE6NDYuODkzMDU1OTJaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQxMjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMxNixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMxNjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgc2tidWZmX2NsZWFyKHN0cnVjdCBza19idWZmICpza2IpXFxuIDMxNzpcXHR7XFxuIDMxODpcXHRcXHQvKiBSZXBsYWNlIG1lbXNldChza2IsIDAsIG9mZnNldG9mKHN0cnVjdCBza19idWZmLCB0YWlsKSlcXG4gMzE5OlxcdFxcdCAqIHdpdGggdHdvIHNtYWxsZXIgbWVtc2V0KCksIHdpdGggYSBiYXJyaWVyKCkgYmV0d2VlbiB0aGVtLlxcbiAzMjA6XFx0XFx0ICogVGhpcyBmb3JjZXMgdGhlIGNvbXBpbGVyIHRvIGlubGluZSBib3RoIGNhbGxzLlxcbiAzMjE6XFx0XFx0ICovXFxuIDMyMjpcXHRcXHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIHRhaWwpIFxcdTAwM2M9IDEyOCk7XFxuIDMyMzpcXHRcXHRtZW1zZXQoc2tiLCAwLCAxMjgpO1xcbiAzMjQ6XFx0XFx0YmFycmllcigpO1xcbiAzMjU6XFx0XFx0bWVtc2V0KCh2b2lkICopc2tiICsgMTI4LCAwLCBvZmZzZXRvZihzdHJ1Y3Qgc2tfYnVmZiwgdGFpbCkgLSAxMjgpO1xcbiAzMjY6XFx0fVxcbiAzMjc6XFx0XFxuIDMyODpcXHQvKipcXG4gMzI5OlxcdCAqIG5hcGlfc2tiX2NhY2hlX2dldF9idWxrIC0gb2J0YWluIGEgbnVtYmVyIG9mIHplcm9lZCBza2IgaGVhZHMgZnJvbSB0aGUgY2FjaGVcXG4gMzMwOlxcdCAqIEBza2JzOiBwb2ludGVyIHRvIGFuIGF0IGxlYXN0IEBuLXNpemVkIGFycmF5IHRvIGZpbGwgd2l0aCBza2IgcG9pbnRlcnNcXG4gMzMxOlxcdCAqIEBuOiBudW1iZXIgb2YgZW50cmllcyB0byBwcm92aWRlXFxuIDMzMjpcXHQgKlxcbiAzMzM6XFx0ICogVHJpZXMgdG8gb2J0YWluIEBuIFxcdTAwMjZza19idWZmIGVudHJpZXMgZnJvbSB0aGUgTkFQSSBwZXJjcHUgY2FjaGUgYW5kIHdyaXRlc1xcbiAzMzQ6XFx0ICogdGhlIHBvaW50ZXJzIGludG8gdGhlIHByb3ZpZGVkIGFycmF5IEBza2JzLiBJZiB0aGVyZSBhcmUgbGVzcyBlbnRyaWVzXFxuIDMzNTpcXHQgKiBhdmFpbGFibGUsIHRyaWVzIHRvIHJlcGxlbmlzaCB0aGUgY2FjaGUgYW5kIGJ1bGstYWxsb2NhdGVzIHRoZSBkaWZmIGZyb21cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjA6NDE6NDYuODkzNTk5MTUxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2MDExNzkxNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgSSBzZWUgdGhlIGNvcmUgaXNzdWU6IGBza2ItXHUwMDNlZGV2YCBpcyBpbml0aWFsaXplZCB0byBOVUxMIHdoZW4gYHNrYm5gIGlzIGFsbG9jYXRlZC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBzaW1wbGUgbGluZTogYHNrYm4tXHUwMDNlZGV2ID0gc2tiLVx1MDAzZWRldjtgLiBUaGF0J3MganVzdCBhIGRpcmVjdCBwb2ludGVyIGNvcHksIGdyYWJiaW5nIHRoZSBgZGV2YCBwb2ludGVyIGZyb20gdGhlIG9yaWdpbmFsIGBza2JgIGFuZCBhc3NpZ25pbmcgaXQgdG8gdGhlIG5ldyBgc2tibmAuIFRoaXMgaXMgY2xlYXJseSBhIGZpeCBmb3IgYSBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFRoZSBwcm9ibGVtIHdhcyB0aGF0IGBza2JuLVx1MDAzZWRldmAgd2FzIGV4cGVjdGVkIHRvIGJlIHNldCwgYnV0IGl0IHdhc24ndCwgd2hpY2ggd2FzIGNhdXNpbmcgYSBjcmFzaC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgXCJXYWl0LCBpcyB0aGlzIHBvdGVudGlhbGx5IGEgdXNlLWFmdGVyLWZyZWUgc2l0dWF0aW9uLCB3aGVyZSBgc2tibi1cdTAwM2VkZXZgIGlzIHBvaW50aW5nIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5P1wiIEJ1dCB0aGF0J3Mgbm90IGl0LiBJdCdzIGEgcG9pbnRlciB0byBhIGBuZXRfZGV2aWNlYCBzdHJ1Y3R1cmUuIFRoaXMgaXMgYWxsIGFib3V0IGVuc3VyaW5nIHRoZSBgbmV0X2RldmljZWAgcG9pbnRlciBpcyB2YWxpZC4gTm93IEkgbmVlZCB0byBzZWUgd2hlcmUgYHJtbmV0X21hcF9kZWFnZ3JlZ2F0ZWAgaXMgY2FsbGVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBmaXggYW5kIGV4YWN0bHkgaG93IGBza2JuLVx1MDAzZWRldmAgaXMgdXNlZCwgYW5kIHdoeSBpdCdzIHNvIGltcG9ydGFudCBpbiB0aGF0IGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4OTUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMDo0MTo1Mi40OTQ3ODMwOFoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwNTQ3NTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJtbmV0X21hcF9kZWFnZ3JlZ2F0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYz0xMDk9cm1uZXRfbWFwX2luZ3Jlc3NfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYy0xMjMtXFx0aWYgKHBvcnQtXFx1MDAzZWRhdGFfZm9ybWF0IFxcdTAwMjYgUk1ORVRfRkxBR1NfSU5HUkVTU19ERUFHR1JFR0FUSU9OKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYzoxMjQ6XFx0XFx0d2hpbGUgKChza2JuID0gcm1uZXRfbWFwX2RlYWdncmVnYXRlKHNrYiwgcG9ydCkpICE9IE5VTEwpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYy0xMjUtXFx0XFx0XFx0X19ybW5ldF9tYXBfaW5ncmVzc19oYW5kbGVyKHNrYm4sIHBvcnQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwLmg9MjY9ZW51bSBybW5ldF9tYXBfY29tbWFuZHMge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwLmgtNDItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwLmg6NDM6c3RydWN0IHNrX2J1ZmYgKnJtbmV0X21hcF9kZWFnZ3JlZ2F0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcC5oLTQ0LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBybW5ldF9wb3J0ICpwb3J0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmM9MzM2PXUzMiBybW5ldF9tYXBfdmFsaWRhdGVfcGFja2V0X2xlbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgcm1uZXRfcG9ydCAqcG9ydClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmMtMzgyLSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmM6MzgzOnN0cnVjdCBza19idWZmICpybW5ldF9tYXBfZGVhZ2dyZWdhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXBfZGF0YS5jLTM4NC1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgcm1uZXRfcG9ydCAqcG9ydClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjA6NDE6NTIuNTk1MzM3OTU5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NDc5OTQ5NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcsIGV4cHJlc3NlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGBfX3JtbmV0X21hcF9pbmdyZXNzX2hhbmRsZXJgKipcblxuT2theSwgbGV0J3MgZGlzc2VjdCBgX19ybW5ldF9tYXBfaW5ncmVzc19oYW5kbGVyYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgUk1ORVQgYXJjaGl0ZWN0dXJlLCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgaW5ib3VuZCB0cmFmZmljLiBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBpdCdzIGludGVyYWN0aW5nIHdpdGg/IEFyZSB3ZSB0YWxraW5nIGFib3V0IHBhY2tldCBoZWFkZXJzLCByb3V0aW5nIHRhYmxlcywgY29ubmVjdGlvbiB0cmFja2luZywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBwb2ludHMgb2YgaW5ncmVzcyAtIHdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gZ2V0dGluZyBjYWxsZWQgZnJvbSwgYW5kIHdoYXQga2luZCBvZiBjb250ZXh0IGlzIGl0IHJlY2VpdmluZz8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgY29uY3VycmVuY3kgaXNzdWVzIHRoYXQganVtcCBvdXQgaW1tZWRpYXRlbHk/IEknbSBsb29raW5nIGZvciB0aGUgY29yZSBsb2dpYzogdGhlIGRlY2lzaW9uLW1ha2luZyBwcm9jZXNzIHdpdGhpbiB0aGlzIGhhbmRsZXIuIElzIGl0IHBlcmZvcm1pbmcgbG9va3VwcywgbW9kaWZ5aW5nIHBhY2tldHMsIGZvcndhcmRpbmcgdG8gb3RoZXIgZnVuY3Rpb25zLCBvciBwZXJoYXBzIG1hbmFnaW5nIFFvUyBvciBzZWN1cml0eSBmZWF0dXJlcz8gSSdsbCBwcm9iYWJseSBzdGFydCBieSBsb29raW5nIGF0IGl0cyBhcmd1bWVudHMgYW5kIHJldHVybiB2YWx1ZXMgdG8gZ2V0IGEgc2Vuc2Ugb2YgaXRzIGlucHV0IGFuZCBvdXRwdXQuIEknbGwgbmVlZCB0byBjb3JyZWxhdGUgdGhpcyBmdW5jdGlvbiB3aXRoIG90aGVyIHJlbGF0ZWQgY29kZSB0byBidWlsZCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgaXRzIHB1cnBvc2UgYW5kIGltcGFjdCBvbiB0aGUgZGF0YSBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODYyLCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjA6NDE6NTYuMTQzMzM2Mzk1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODA1NDgyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3JtbmV0X21hcF9pbmdyZXNzX2hhbmRsZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9oYW5kbGVycy5jPTU1PXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYzo1NjpfX3JtbmV0X21hcF9pbmdyZXNzX2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9oYW5kbGVycy5jLTU3LVxcdFxcdFxcdCAgICBzdHJ1Y3Qgcm1uZXRfcG9ydCAqcG9ydClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X2hhbmRsZXJzLmM9MTA5PXJtbmV0X21hcF9pbmdyZXNzX2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X2hhbmRsZXJzLmMtMTI0LVxcdFxcdHdoaWxlICgoc2tibiA9IHJtbmV0X21hcF9kZWFnZ3JlZ2F0ZShza2IsIHBvcnQpKSAhPSBOVUxMKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X2hhbmRsZXJzLmM6MTI1OlxcdFxcdFxcdF9fcm1uZXRfbWFwX2luZ3Jlc3NfaGFuZGxlcihza2JuLCBwb3J0KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9oYW5kbGVycy5jLTEyNi1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X2hhbmRsZXJzLmMtMTI5LVxcdFxcdGlmIChybW5ldF9tYXBfdmFsaWRhdGVfcGFja2V0X2xlbihza2IsIHBvcnQpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X2hhbmRsZXJzLmM6MTMwOlxcdFxcdFxcdF9fcm1uZXRfbWFwX2luZ3Jlc3NfaGFuZGxlcihza2IsIHBvcnQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X2hhbmRsZXJzLmMtMTMxLVxcdFxcdGVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjA6NDE6NTYuMjIxMzk5MTMyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNDM3NjE4MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBgX19ybW5ldF9tYXBfaW5ncmVzc19oYW5kbGVyYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBUaGUgbmFtZSBhbG9uZSwgYF9fcm1uZXRfbWFwX2luZ3Jlc3NfaGFuZGxlcmAsIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJ3JlIGRlYWxpbmcgd2l0aCBhbiBpbmdyZXNzIGhhbmRsZXIgd2l0aGluIHRoZSBSTU5FVCBmcmFtZXdvcmsuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCBpdHMgcGxhY2UgaW4gdGhlIG92ZXJhbGwgZGF0YSBmbG93LiBUaGlzIGxpa2VseSBtZWFucyBpdCBzaXRzIGJldHdlZW4gdGhlIG5ldHdvcmsgaW50ZXJmYWNlIChwcm9iYWJseSBzb21ldGhpbmcgbGlrZSBhIFF1YWxjb21tJ3MgUk1ORVQpIGFuZCBzb21lIGludGVybmFsIGRhdGEgc3RydWN0dXJlIG9yIHByb2Nlc3Npbmcgc3RhZ2UuXG5cbknigJltIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIHJlc3BvbnNpYmxlIGZvciB0YWtpbmcgaW5jb21pbmcgcGFja2V0cyDigJMgbGlrZWx5IEV0aGVybmV0IGZyYW1lcyBvciBJUCBwYWNrZXRzIGVuY2Fwc3VsYXRlZCB3aXRoaW4gUk1ORVQtc3BlY2lmaWMgcHJvdG9jb2xzIOKAkyBhbmQgcGVyZm9ybWluZyBhbnkgbmVjZXNzYXJ5IHRyYW5zZm9ybWF0aW9ucyBvciBsb29rdXBzIGJlZm9yZSBwYXNzaW5nIHRoZW0gb24uIEknbSBndWVzc2luZyB0aGlzIGNvdWxkIGluY2x1ZGUgdGhpbmdzIGxpa2U6XG5cbiogICAqKkhlYWRlciBkZWNvZGluZy9pbnRlcnByZXRhdGlvbjoqKiBQYXJzaW5nIFJNTkVUIGhlYWRlcnMsIHBvdGVudGlhbGx5IHN0cmlwcGluZyB0aGVtLCBhbmQgZXhwb3NpbmcgdGhlIHVuZGVybHlpbmcgbmV0d29yayBsYXllciBpbmZvcm1hdGlvbi5cbiogICAqKkFkZHJlc3MgdHJhbnNsYXRpb24vbWFwcGluZzoqKiBDb252ZXJ0aW5nIHZpcnR1YWwgb3IgdHVubmVsIGFkZHJlc3NlcyB0byBwaHlzaWNhbCBhZGRyZXNzZXMsIHdoaWNoIGlzIGNvbW1vbiBpbiBSTU5FVCBlbnZpcm9ubWVudHMgZm9yIG1vYmlsZSBkYXRhLlxuKiAgICoqRmxvdyBjbGFzc2lmaWNhdGlvbi9pZGVudGlmaWNhdGlvbjoqKiBJZGVudGlmeWluZyB0aGUgZmxvdyBvciBhcHBsaWNhdGlvbiB0aGlzIHBhY2tldCBiZWxvbmdzIHRvLCBwZXJoYXBzIHVzaW5nIHNvbWUgc29ydCBvZiBoYXNoIG9yIGxvb2t1cCB0YWJsZS5cbiogICAqKlJhdGUgbGltaXRpbmcvUW9TOioqIEltcGxlbWVudGluZyBhbnkgYmFzaWMgcmF0ZSBsaW1pdGluZyBvciBxdWFsaXR5IG9mIHNlcnZpY2UgcnVsZXMgYmVmb3JlIHRoZSBwYWNrZXQgbW92ZXMgdG8gb3RoZXIgcGFydHMgb2YgdGhlIG5ldHdvcmsgc3RhY2suXG4qICAgKipFcnJvciBoYW5kbGluZy92YWxpZGF0aW9uOioqIENoZWNraW5nIGZvciBtYWxmb3JtZWQgcGFja2V0cyBvciB1bmV4cGVjdGVkIGRhdGEgYW5kIGhhbmRsaW5nIHRoZW0sIHBlcmhhcHMgbG9nZ2luZyBlcnJvcnMgb3IgZHJvcHBpbmcgdGhlbS5cbiogICAqKlNlY3VyaXR5IGNoZWNrOioqIFNvbWUgYmFzaWMgc2VjdXJpdHkgY2hlY2sgc3VjaCBhcyBmaWx0ZXJpbmcgbWFsZm9ybWVkIHBhY2tldHMuXG4qICAgKipGb3J3YXJkaW5nIHBhY2tldHM6KiogQmFzZWQgb24gdGhlIGluZm9ybWF0aW9uIGZyb20gYWJvdmUuXG5cbknigJlsbCBiZSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IHVzZXMsIHBhcnRpY3VsYXJseSBpZiBpdCBpbnRlcmZhY2VzIHdpdGggb3RoZXIgUk1ORVQgY29tcG9uZW50cyBsaWtlIHRoZSBgcm1uZXRfbWFwYCB0YWJsZXMgb3IgdGhlIGludGVybmFsIGJ1ZmZlciBtYW5hZ2VtZW50LiBBcmUgdGhlcmUgYW55IG11dGV4ZXMgb3IgbG9ja3MgaW4gcGxheT8gQ29uY3VycmVuY3kgaXMgYWx3YXlzIGEgY29uY2Vybi4gSSdtIGFsc28gY3VyaW91cyBhYm91dCBpdHMgZXJyb3IgaGFuZGxpbmcg4oCTIGRvZXMgaXQganVzdCBsb2cgZXJyb3JzLCBwYW5pYywgb3IgYXR0ZW1wdCB0byByZWNvdmVyP1xuXG5JbiBzaG9ydCwgSSdtIGV4cGVjdGluZyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBkYXRhIHBsYW5lLCBhbmQgSSdtIHJlYWR5IHRvIGZpZ3VyZSBvdXQgZXhhY3RseSBob3cgaXQgZml0cyBpbnRvIHRoZSBSTU5FVCBwaWN0dXJlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGluZ3Jlc3Mgc2lkZSwgYW5kIGhvdyBwYWNrZXRzIGVudGVyIGludG8gdGhlIHN5c3RlbS4gTGV0J3Mgc2VlIHdoYXTigJlzIGluc2lkZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1NDUsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMDo0MjowMS40NjUxNjU2NjhaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5NTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X2hhbmRsZXJzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTU6XFx0c3RhdGljIHZvaWRcXG4gIDU2OlxcdF9fcm1uZXRfbWFwX2luZ3Jlc3NfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAgNTc6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBybW5ldF9wb3J0ICpwb3J0KVxcbiAgNTg6XFx0e1xcbiAgNTk6XFx0XFx0c3RydWN0IHJtbmV0X21hcF9oZWFkZXIgKm1hcF9oZWFkZXIgPSAodm9pZCAqKXNrYi1cXHUwMDNlZGF0YTtcXG4gIDYwOlxcdFxcdHN0cnVjdCBybW5ldF9lbmRwb2ludCAqZXA7XFxuICA2MTpcXHRcXHR1MTYgbGVuLCBwYWQ7XFxuICA2MjpcXHRcXHR1OCBtdXhfaWQ7XFxuICA2MzpcXHRcXG4gIDY0OlxcdFxcdGlmIChtYXBfaGVhZGVyLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1BUF9DTURfRkxBRykge1xcbiAgNjU6XFx0XFx0XFx0LyogUGFja2V0IGNvbnRhaW5zIGEgTUFQIGNvbW1hbmQgKG5vdCBkYXRhKSAqL1xcbiAgNjY6XFx0XFx0XFx0aWYgKHBvcnQtXFx1MDAzZWRhdGFfZm9ybWF0IFxcdTAwMjYgUk1ORVRfRkxBR1NfSU5HUkVTU19NQVBfQ09NTUFORFMpXFxuICA2NzpcXHRcXHRcXHRcXHRyZXR1cm4gcm1uZXRfbWFwX2NvbW1hbmQoc2tiLCBwb3J0KTtcXG4gIDY4OlxcdFxcbiAgNjk6XFx0XFx0XFx0Z290byBmcmVlX3NrYjtcXG4gIDcwOlxcdFxcdH1cXG4gIDcxOlxcdFxcbiAgNzI6XFx0XFx0bXV4X2lkID0gbWFwX2hlYWRlci1cXHUwMDNlbXV4X2lkO1xcbiAgNzM6XFx0XFx0cGFkID0gbWFwX2hlYWRlci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBNQVBfUEFEX0xFTl9NQVNLO1xcbiAgNzQ6XFx0XFx0bGVuID0gbnRvaHMobWFwX2hlYWRlci1cXHUwMDNlcGt0X2xlbikgLSBwYWQ7XFxuICA3NTpcXHRcXG4gIDc2OlxcdFxcdGlmIChtdXhfaWQgXFx1MDAzZT0gUk1ORVRfTUFYX0xPR0lDQUxfRVApXFxuICA3NzpcXHRcXHRcXHRnb3RvIGZyZWVfc2tiO1xcbiAgNzg6XFx0XFxuICA3OTpcXHRcXHRlcCA9IHJtbmV0X2dldF9lbmRwb2ludChwb3J0LCBtdXhfaWQpO1xcbiAgODA6XFx0XFx0aWYgKCFlcClcXG4gIDgxOlxcdFxcdFxcdGdvdG8gZnJlZV9za2I7XFxuICA4MjpcXHRcXG4gIDgzOlxcdFxcdHNrYi1cXHUwMDNlZGV2ID0gZXAtXFx1MDAzZWVncmVzc19kZXY7XFxuICA4NDpcXHRcXG4gIDg1OlxcdFxcdGlmICgocG9ydC1cXHUwMDNlZGF0YV9mb3JtYXQgXFx1MDAyNiBSTU5FVF9GTEFHU19JTkdSRVNTX01BUF9DS1NVTVY1KSBcXHUwMDI2XFx1MDAyNlxcbiAgODY6XFx0XFx0ICAgIChtYXBfaGVhZGVyLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1BUF9ORVhUX0hFQURFUl9GTEFHKSkge1xcbiAgODc6XFx0XFx0XFx0aWYgKHJtbmV0X21hcF9wcm9jZXNzX25leHRfaGRyX3BhY2tldChza2IsIGxlbikpXFxuICA4ODpcXHRcXHRcXHRcXHRnb3RvIGZyZWVfc2tiO1xcbiAgODk6XFx0XFx0XFx0c2tiX3B1bGwoc2tiLCBzaXplb2YoKm1hcF9oZWFkZXIpKTtcXG4gIDkwOlxcdFxcdFxcdHJtbmV0X3NldF9za2JfcHJvdG8oc2tiKTtcXG4gIDkxOlxcdFxcdH0gZWxzZSB7XFxuICA5MjpcXHRcXHRcXHQvKiBTdWJ0cmFjdCBNQVAgaGVhZGVyICovXFxuICA5MzpcXHRcXHRcXHRza2JfcHVsbChza2IsIHNpemVvZigqbWFwX2hlYWRlcikpO1xcbiAgOTQ6XFx0XFx0XFx0cm1uZXRfc2V0X3NrYl9wcm90byhza2IpO1xcbiAgOTU6XFx0XFx0XFx0aWYgKHBvcnQtXFx1MDAzZWRhdGFfZm9ybWF0IFxcdTAwMjYgUk1ORVRfRkxBR1NfSU5HUkVTU19NQVBfQ0tTVU1WNCBcXHUwMDI2XFx1MDAyNlxcbiAgOTY6XFx0XFx0XFx0ICAgICFybW5ldF9tYXBfY2hlY2tzdW1fZG93bmxpbmtfcGFja2V0KHNrYiwgbGVuICsgcGFkKSlcXG4gIDk3OlxcdFxcdFxcdFxcdHNrYi1cXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7XFxuICA5ODpcXHRcXHR9XFxuICA5OTpcXHRcXG4gMTAwOlxcdFxcdHNrYl90cmltKHNrYiwgbGVuKTtcXG4gMTAxOlxcdFxcdHJtbmV0X2RlbGl2ZXJfc2tiKHNrYik7XFxuIDEwMjpcXHRcXHRyZXR1cm47XFxuIDEwMzpcXHRcXG4gMTA0OlxcdGZyZWVfc2tiOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMDo0MjowMS40NjUyODc0OTdaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk4OTEzMjk4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJNTkVUIEluZ3Jlc3MgSGFuZGxlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBgX19ybW5ldF9tYXBfaW5ncmVzc19oYW5kbGVyYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGxpbmUgODMgd2hlcmUgYHNrYi1cdTAwM2VkZXZgIGdldHMgYXNzaWduZWQgdG8gYGVwLVx1MDAzZWVncmVzc19kZXZgLiBUaGlzIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBUaGUga2V5IGlzIHdoYXQgaGFwcGVucyAqYmVmb3JlKiB0aGF0IGFzc2lnbm1lbnQsIGFuZCBJJ20gcHJldHR5IHN1cmUgYHJtbmV0X21hcF9jb21tYW5kKHNrYiwgcG9ydClgIGdldHMgY2FsbGVkIGZpcnN0LiBUaGF0J3MgdGhlIHBhcnQgSSBuZWVkIHRvIHNjcnV0aW5pemUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgcm1uZXRfbWFwX2NvbW1hbmRgIG1pZ2h0IGludGVyYWN0IHdpdGggdGhlIGBza2JgIGFuZCBpbmZsdWVuY2UgdGhlIGBza2ItXHUwMDNlZGV2YCBhc3NpZ25tZW50IGRvd24gdGhlIGxpbmUuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGlmIHRoYXQgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIGBza2JgIGluIGFueSB3YXkgdGhhdCB3b3VsZCBpbXBhY3QgaG93IHRoZSBgZWdyZXNzX2RldmAgaXMgdXNlZC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBsb2dpYyB3aXRoaW4gYHJtbmV0X21hcF9jb21tYW5kYCBjYXJlZnVsbHkgdG8gc2VlIGlmIGFueSB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cyBjb3VsZCBvY2N1ci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4ODQsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIwOjQyOjA1LjQ1NDQyMzYzNFoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM1NjMyNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicm1uZXRfbWFwX2NvbW1hbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L01ha2VmaWxlPTk9cm1uZXQteVxcdFxcdCArPSBybW5ldF9tYXBfZGF0YS5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvTWFrZWZpbGU6MTA6cm1uZXQteVxcdFxcdCArPSBybW5ldF9tYXBfY29tbWFuZC5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvTWFrZWZpbGUtMTEtb2JqLSQoQ09ORklHX1JNTkVUKSArPSBybW5ldC5vXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9oYW5kbGVycy5jPTU2PV9fcm1uZXRfbWFwX2luZ3Jlc3NfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYy02Ni1cXHRcXHRpZiAocG9ydC1cXHUwMDNlZGF0YV9mb3JtYXQgXFx1MDAyNiBSTU5FVF9GTEFHU19JTkdSRVNTX01BUF9DT01NQU5EUylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9oYW5kbGVycy5jOjY3OlxcdFxcdFxcdHJldHVybiBybW5ldF9tYXBfY29tbWFuZChza2IsIHBvcnQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X2hhbmRsZXJzLmMtNjgtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXAuaD05PXN0cnVjdCBybW5ldF9tYXBfY29udHJvbF9jb21tYW5kIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcC5oLTI1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcC5oOjI2OmVudW0gcm1uZXRfbWFwX2NvbW1hbmRzIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXAuaC0yNy1cXHRSTU5FVF9NQVBfQ09NTUFORF9OT05FLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwLmg9NDU9c3RydWN0IHJtbmV0X21hcF9oZWFkZXIgKnJtbmV0X21hcF9hZGRfbWFwX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwLmgtNDgtXFx0XFx0XFx0XFx0XFx0XFx0ICBpbnQgcGFkKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXAuaDo0OTp2b2lkIHJtbmV0X21hcF9jb21tYW5kKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBybW5ldF9wb3J0ICpwb3J0KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXAuaC01MC1pbnQgcm1uZXRfbWFwX2NoZWNrc3VtX2Rvd25saW5rX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgbGVuKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9jb21tYW5kLmM9NDk9c3RhdGljIHZvaWQgcm1uZXRfbWFwX3NlbmRfYWNrKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXBfY29tbWFuZC5jLTc0LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9jb21tYW5kLmM6NzU6dm9pZCBybW5ldF9tYXBfY29tbWFuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgcm1uZXRfcG9ydCAqcG9ydClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXBfY29tbWFuZC5jLTc2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjA6NDI6MDUuNTI3OTkxMzMyWiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NjUxMzQ1MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFRhc2sqKlxuXG5BbHJpZ2h0LCB0aGUgZGlyZWN0aXZlIGlzIHRvIGFuYWx5emUgdGhlIG1lbnRhbCBwcm9jZXNzIHJldm9sdmluZyBhcm91bmQgdGhlIGNvbW1hbmQgYHJtbmV0X21hcF9jb21tYW5kYC4gTXkgaW1tZWRpYXRlIHJlYWN0aW9uIGlzIGEgYmxlbmQgb2YgYW5hbHl0aWNhbCBjdXJpb3NpdHkgYW5kIHByb2Zlc3Npb25hbCBwcmFnbWF0aXNtLiBJJ20gcHJlc2VudGVkIHdpdGggYSBwb3RlbnRpYWxseSBjb21wbGV4IGNvbW1hbmQsIGFuZCB0aGUgaW1wbGljYXRpb24gaXMgdGhhdCBpdHMgZXhlY3V0aW9uIG9yIGZ1bmN0aW9uIGlzIGJlaW5nIHNjcnV0aW5pemVkLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyB3b3VsZCBpbW1lZGlhdGVseSBiZWdpbiB3aXRoIGNvbnNpZGVyYXRpb25zIHN1Y2ggYXM6IFwiV2hhdCBpcyB0aGUgY29udGV4dD8gV2hlcmUgaXMgdGhpcyBjb21tYW5kIHVzZWQ/IElzIGl0IGEgc2NyaXB0LCBhbiBhcHBsaWNhdGlvbiBtb2R1bGUsIG9yIHBhcnQgb2YgYSBsYXJnZXIgc3lzdGVtPyBXaGF0IGFyY2hpdGVjdHVyZSBpcyBpdCBkZXNpZ25lZCBmb3I/XCIgSSdtIG1lbnRhbGx5IHBhcnNpbmcgdGhlIGltcGxpZWQgdGFzaywgZXhwZWN0aW5nIHRvIGRlbHZlIGludG8gaXRzIGZ1bmN0aW9uYWxpdHksIHBvdGVudGlhbCBpc3N1ZXMsIGFuZCBvcHRpbWl6YXRpb24gc3RyYXRlZ2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5MzAsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMDo0MjowOC45OTMxMzAyMDlaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1MzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9jb21tYW5kLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNzU6XFx0dm9pZCBybW5ldF9tYXBfY29tbWFuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgcm1uZXRfcG9ydCAqcG9ydClcXG4gIDc2OlxcdHtcXG4gIDc3OlxcdFxcdHN0cnVjdCBybW5ldF9tYXBfaGVhZGVyICptYXBfaGVhZGVyID0gKHZvaWQgKilza2ItXFx1MDAzZWRhdGE7XFxuICA3ODpcXHRcXHRzdHJ1Y3Qgcm1uZXRfbWFwX2NvbnRyb2xfY29tbWFuZCAqY21kO1xcbiAgNzk6XFx0XFx0dW5zaWduZWQgY2hhciBjb21tYW5kX25hbWU7XFxuICA4MDpcXHRcXHR1bnNpZ25lZCBjaGFyIHJjID0gMDtcXG4gIDgxOlxcdFxcbiAgODI6XFx0XFx0LyogQ29tbWFuZCBkYXRhIGltbWVkaWF0ZWx5IGZvbGxvd3MgdGhlIE1BUCBoZWFkZXIgKi9cXG4gIDgzOlxcdFxcdGNtZCA9IChzdHJ1Y3Qgcm1uZXRfbWFwX2NvbnRyb2xfY29tbWFuZCAqKShtYXBfaGVhZGVyICsgMSk7XFxuICA4NDpcXHRcXHRjb21tYW5kX25hbWUgPSBjbWQtXFx1MDAzZWNvbW1hbmRfbmFtZTtcXG4gIDg1OlxcdFxcbiAgODY6XFx0XFx0c3dpdGNoIChjb21tYW5kX25hbWUpIHtcXG4gIDg3OlxcdFxcdGNhc2UgUk1ORVRfTUFQX0NPTU1BTkRfRkxPV19FTkFCTEU6XFxuICA4ODpcXHRcXHRcXHRyYyA9IHJtbmV0X21hcF9kb19mbG93X2NvbnRyb2woc2tiLCBwb3J0LCAxKTtcXG4gIDg5OlxcdFxcdFxcdGJyZWFrO1xcbiAgOTA6XFx0XFxuICA5MTpcXHRcXHRjYXNlIFJNTkVUX01BUF9DT01NQU5EX0ZMT1dfRElTQUJMRTpcXG4gIDkyOlxcdFxcdFxcdHJjID0gcm1uZXRfbWFwX2RvX2Zsb3dfY29udHJvbChza2IsIHBvcnQsIDApO1xcbiAgOTM6XFx0XFx0XFx0YnJlYWs7XFxuICA5NDpcXHRcXG4gIDk1OlxcdFxcdGRlZmF1bHQ6XFxuICA5NjpcXHRcXHRcXHRyYyA9IFJNTkVUX01BUF9DT01NQU5EX1VOU1VQUE9SVEVEO1xcbiAgOTc6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuICA5ODpcXHRcXHRcXHRicmVhaztcXG4gIDk5OlxcdFxcdH1cXG4gMTAwOlxcdFxcdGlmIChyYyA9PSBSTU5FVF9NQVBfQ09NTUFORF9BQ0spXFxuIDEwMTpcXHRcXHRcXHRybW5ldF9tYXBfc2VuZF9hY2soc2tiLCByYywgcG9ydCk7XFxuIDEwMjpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIwOjQyOjA4Ljk5MzI0ODA4OVoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTA3NDEzMzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBybW5ldF9tYXBfc2VuZF9hY2tgKipcblxuT2theSwgdGltZSB0byB6ZXJvIGluIG9uIGBybW5ldF9tYXBfc2VuZF9hY2tgLiBUaGF0J3MgYSBrZXkgZnVuY3Rpb24gZm9yIGFja25vd2xlZGdpbmcgUk1ORVQgcGFja2V0cywgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBtZWNoYW5pY3MgdGhvcm91Z2hseS4gV2hhdCdzIHRoZSBjb250ZXh0IGhlcmU/IElzIGl0IHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBSTU5FVCBpbXBsZW1lbnRhdGlvbiwgb3IgaXMgaXQgbW9yZSBnZW5lcmljPyBBcmUgd2UgZGVhbGluZyB3aXRoIHJlbGlhYmxlIG9yIHVucmVsaWFibGUgdHJhbnNwb3J0PyBJIGJldCBpdCdzIGludm9sdmVkIGluIHRoZSBjb250cm9sIHBsYW5lIHRvIHNvbWUgZGVncmVlLlxuXG5GaXJzdCwgSSdsbCBwcm9iYWJseSBsb29rIGZvciBpdHMgZGVmaW5pdGlvbiBhbmQgYW55IGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIGxpa2UgYnVmZmVycyBvciBxdWV1ZXMgdGhhdCBpdCBtYW5pcHVsYXRlcy4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzaW1wbGUgQUNLIG9yIHNvbWV0aGluZyBtb3JlIGludm9sdmVkLCBsaWtlIGEgc2VsZWN0aXZlIEFDSyB3aXRoIHJldHJhbnNtaXNzaW9uIHRpbWVycz8gSSdsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCB0aGUgUk1ORVQgcHJvdG9jb2wgdmVyc2lvbiBpcyBhdCBhIGxvdyBsZXZlbCB0byB1bmRlcnN0YW5kIGFueSBzcGVjaWZpYyBzdWJ0bGV0aWVzIGluIHRoZSBpbXBsZW1lbnRhdGlvbi5cblxuSSBhbHNvIG5lZWQgdG8gc2VlIHdoZXJlIGl0J3MgKmNhbGxlZCogZnJvbS4gS25vd2luZyB0aGUgY2FsbCBzdGFjayB3aWxsIGdpdmUgbWUgY2x1ZXMgYWJvdXQgdGhlIGZsb3cgb2YgZGF0YSBhbmQgY29udHJvbC4gQXJlIHdlIHJlc3BvbmRpbmcgdG8gYSByZWNlaXZlZCBSTU5FVCBtZXNzYWdlLCBvciBpcyB0aGlzIG1vcmUgcHJvYWN0aXZlPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgSSBzaG91bGQgYmUgb24gdGhlIGxvb2tvdXQgZm9yPyBJJ2xsIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLCBtdXRleGVzLCBvciBhdG9taWMgb3BlcmF0aW9ucy5cblxuT25jZSBJIGhhdmUgYSBnb29kIGdyYXNwIG9mIHRoZSBjb2RlIGl0c2VsZiwgSSdsbCBuZWVkIHRvIGNvbnNpZGVyIHBlcmZvcm1hbmNlLiBJcyB0aGlzIGZ1bmN0aW9uIG9uIHRoZSBjcml0aWNhbCBwYXRoPyBDb3VsZCBpdCBiZSBhIGJvdHRsZW5lY2s/IEkgbWlnaHQgbmVlZCB0byBjb25zaWRlciBob3cgdG8gaGFuZGxlIHRoaW5ncyBkaWZmZXJlbnRseSBiYXNlZCBvbiBidWZmZXIgc2l6ZXMgb3Igb3ZlcmFsbCBuZXR3b3JrIGNvbmRpdGlvbnMuIEFyZSB0aGVyZSBhbnkgbG9nZ2luZyBvciBkZWJ1Z2dpbmcgZmVhdHVyZXMgYnVpbHQgaW4/IFRoYXQgd291bGQgYmUgdmVyeSBoZWxwZnVsLlxuXG5Fc3NlbnRpYWxseSwgSSB3YW50IHRvIG1hcCBvdXQgdGhlIGVudGlyZSBsaWZlY3ljbGUgb2YgdGhpcyBhY2tub3dsZWRnbWVudCwgdG9wIHRvIGJvdHRvbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1ODEsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIwOjQyOjE1LjkwMDY2NDMxMloiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXBfY29tbWFuZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ5LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQ5OlxcdHN0YXRpYyB2b2lkIHJtbmV0X21hcF9zZW5kX2FjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAgNTA6XFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGNoYXIgdHlwZSxcXG4gIDUxOlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgcm1uZXRfcG9ydCAqcG9ydClcXG4gIDUyOlxcdHtcXG4gIDUzOlxcdFxcdHN0cnVjdCBybW5ldF9tYXBfaGVhZGVyICptYXBfaGVhZGVyID0gKHZvaWQgKilza2ItXFx1MDAzZWRhdGE7XFxuICA1NDpcXHRcXHRzdHJ1Y3Qgcm1uZXRfbWFwX2NvbnRyb2xfY29tbWFuZCAqY21kO1xcbiAgNTU6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi1cXHUwMDNlZGV2O1xcbiAgNTY6XFx0XFxuICA1NzpcXHRcXHRpZiAocG9ydC1cXHUwMDNlZGF0YV9mb3JtYXQgXFx1MDAyNiBSTU5FVF9GTEFHU19JTkdSRVNTX01BUF9DS1NVTVY0KVxcbiAgNTg6XFx0XFx0XFx0c2tiX3RyaW0oc2tiLFxcbiAgNTk6XFx0XFx0XFx0XFx0IHNrYi1cXHUwMDNlbGVuIC0gc2l6ZW9mKHN0cnVjdCBybW5ldF9tYXBfZGxfY3N1bV90cmFpbGVyKSk7XFxuICA2MDpcXHRcXG4gIDYxOlxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9NQVApO1xcbiAgNjI6XFx0XFxuICA2MzpcXHRcXHQvKiBDb21tYW5kIGRhdGEgaW1tZWRpYXRlbHkgZm9sbG93cyB0aGUgTUFQIGhlYWRlciAqL1xcbiAgNjQ6XFx0XFx0Y21kID0gKHN0cnVjdCBybW5ldF9tYXBfY29udHJvbF9jb21tYW5kICopKG1hcF9oZWFkZXIgKyAxKTtcXG4gIDY1OlxcdFxcdGNtZC1cXHUwMDNlY21kX3R5cGUgPSB0eXBlIFxcdTAwMjYgMHgwMztcXG4gIDY2OlxcdFxcbiAgNjc6XFx0XFx0bmV0aWZfdHhfbG9jayhkZXYpO1xcbiAgNjg6XFx0XFx0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fc3RhcnRfeG1pdChza2IsIGRldik7XFxuICA2OTpcXHRcXHRuZXRpZl90eF91bmxvY2soZGV2KTtcXG4gIDcwOlxcdH1cXG4gIDcxOlxcdFxcbiAgNzI6XFx0LyogUHJvY2VzcyBNQVAgY29tbWFuZCBmcmFtZSBhbmQgc2VuZCBOL0FDSyBtZXNzYWdlIGFzIGFwcHJvcHJpYXRlLiBNZXNzYWdlIGNtZFxcbiAgNzM6XFx0ICogbmFtZSBpcyBkZWNvZGVkIGhlcmUgYW5kIGFwcHJvcHJpYXRlIGhhbmRsZXIgaXMgY2FsbGVkLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMDo0MjoxNS45MDA3NDIwOTJaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEzMjkxMjkxMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgTlVMTCBQb2ludGVyIERlcmVmZXJlbmNlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ3ZlIHNwb3R0ZWQgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIHRoZSBgcm1uZXRfbWFwYCBjb2RlLCBhbmQgaXQncyBsb29raW5nIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBpcyB0aGF0IGBybW5ldF9tYXBfc2VuZF9hY2tgIGFjY2Vzc2VzIGBza2ItXHUwMDNlZGV2YCwgYW5kIHRoYXQgdmFsdWUgY291bGQgYmUgTlVMTCwgd2hpY2ggaXMgdGhlbiBwYXNzZWQgdG8gYGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zdGFydF94bWl0KHNrYiwgZGV2KTtgLCBjYXVzaW5nIGEgY3Jhc2guXG5cbkkgc2VlIHRoYXQgYHNrYi1cdTAwM2VkZXZgIGNvbWVzIGZyb20gdGhlIGBza2JuLVx1MDAzZWRldiA9IHNrYi1cdTAwM2VkZXY7YCBhc3NpZ25tZW50LCB3aGljaCBoYXBwZW5zIGR1cmluZyB0aGUgYHJtbmV0X21hcF9kZWFnZ3JlZ2F0ZWAgY2FsbC4gVGhhdCBtYWtlcyBzZW5zZS4gTGV0J3MgdHJhY2UgaXQgYSBiaXQuIEluc2lkZSBgcm1uZXRfbWFwX2luZ3Jlc3NfaGFuZGxlcmAsIGlmIGBSTU5FVF9GTEFHU19JTkdSRVNTX0RFQUdHUkVHQVRJT05gIGlzIHNldCwgYHJtbmV0X21hcF9kZWFnZ3JlZ2F0ZWAgaXMgY2FsbGVkLiBUaGF0IGRlYWdncmVnYXRlZCBza2IgZ29lcyBpbnRvIGBfX3JtbmV0X21hcF9pbmdyZXNzX2hhbmRsZXJgLCBhbmQgZXZlbnR1YWxseSB0aGUgY29tbWFuZCBwYWNrZXQgZ29lcyB0byBgcm1uZXRfbWFwX3NlbmRfYWNrYCwgd2hpY2ggYWNjZXNzZXMgYHNrYm4tXHUwMDNlZGV2YC4gIFxuXG5IZXJlIGlzIHdoZXJlIHRoZSBwcm9ibGVtIGFyaXNlczogYHNrYm5gIGlzIGFsbG9jYXRlZCBieSBgcm1uZXRfbWFwX2RlYWdncmVnYXRlYCB1c2luZyBgYWxsb2Nfc2tiYCwgYW5kIGl0IGlzbid0IGFzc2lnbmVkIGBza2ItXHUwMDNlZGV2YCB1bnRpbCBhZnRlci4gU2luY2UgYGFsbG9jX3NrYmAgbGlrZWx5IGluaXRpYWxpemVzIGBkZXZgIHRvIE5VTEwgaW4gdGhlIGZpcnN0IHBsYWNlLCB0aGF0IG1lYW5zIGBza2JuLVx1MDAzZWRldmAgaXMgTlVMTC4gQm9vbSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlISBJdCdzIHRoYXQgc2ltcGxlLiBLQVNBTiBvciBldmVuIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nIHdpbGwgZWFzaWx5IGNhdGNoIHRoaXMsIGl0J3MgYSB0ZXh0Ym9vayBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFRoaXMgaGFzIGFic29sdXRlbHkgbm90aGluZyB0byBkbyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBgZGV2YCBpcyBleHBsaWNpdGx5IHplcm9lZCAoTlVMTCkgYnkgYGFsbG9jX3NrYmAgLVx1MDAzZSBgc2tidWZmX2NsZWFyYC5cblxuTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSdzICpub3RoaW5nKiBlbHNlIGF0IHBsYXkgaGVyZS4gVGhlIHBhdGNoIGNvcGllcyB0aGUgYGRldmAgcG9pbnRlciBjb3JyZWN0bHkuIEl0IGFsbG9jYXRlcyBhIG5ldyBidWZmZXIsIHJlc2VydmVzIHNwYWNlLCBjb3BpZXMgZGF0YSwgYW5kLCBjcnVjaWFsbHksIGNvcGllcyBgc2tiLVx1MDAzZWRldmAgdG8gYHNrYm4tXHUwMDNlZGV2YC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYmVpbmcgZXhwb3NlZDsgaXQncyBqdXN0IGNvcHlpbmcgYSBOVUxMIHZhbHVlLlxuXG5UaGVyZWZvcmUsIHRoZSBpc3N1ZSBpcyBwdXJlbHkgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFRoZXJlJ3Mgbm8gbmVlZCBmb3IgS01TQU4gdG8gYW5hbHl6ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiB0aGlzIGNhc2UuIE15IGFzc2Vzc21lbnQgaXMgdGhhdCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQxNiwiT3V0cHV0VG9rZW5zIjoyMjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMDo0MjoyNy4yMjk4NzM3MjNaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjExMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGJ1Zy4gSW4gYHJtbmV0X21hcF9kZWFnZ3JlZ2F0ZSgpYCwgYSBuZXcgYHNrX2J1ZmZgIChgc2tibmApIGlzIGFsbG9jYXRlZCB1c2luZyBgYWxsb2Nfc2tiKClgLCB3aGljaCBpbml0aWFsaXplcyB0aGUgYGRldmAgZmllbGQgdG8gTlVMTC4gTGF0ZXIsIGlmIHRoZSBwYWNrZXQgY29udGFpbnMgYSBNQVAgY29tbWFuZCwgYHJtbmV0X21hcF9zZW5kX2FjaygpYCBpcyBjYWxsZWQsIHdoaWNoIGFjY2Vzc2VzIGBza2ItXFx1MDAzZWRldmAgYW5kIGRlcmVmZXJlbmNlcyBpdCAoYGRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX3N0YXJ0X3htaXQoc2tiLCBkZXYpYCkuIFNpbmNlIGBza2JuLVxcdTAwM2VkZXZgIHdhcyBOVUxMLCB0aGlzIGNhdXNlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gVGhlIHBhdGNoIGZpeGVzIHRoaXMgYnkgY29weWluZyBgc2tiLVxcdTAwM2VkZXZgIHRvIGBza2JuLVxcdTAwM2VkZXZgLiBUaGlzIGlzIG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSwgYXMgdGhlIGBkZXZgIGZpZWxkIHdhcyBleHBsaWNpdGx5IHplcm9lZCBkdXJpbmcgYWxsb2NhdGlvbi4gU3RhbmRhcmQga2VybmVsIHRlc3Rpbmcgb3IgS0FTQU4gd2lsbCBlYXNpbHkgY2F0Y2ggdGhpcyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWcuIEluIGBybW5ldF9tYXBfZGVhZ2dyZWdhdGUoKWAsIGEgbmV3IGBza19idWZmYCAoYHNrYm5gKSBpcyBhbGxvY2F0ZWQgdXNpbmcgYGFsbG9jX3NrYigpYCwgd2hpY2ggaW5pdGlhbGl6ZXMgdGhlIGBkZXZgIGZpZWxkIHRvIE5VTEwuIExhdGVyLCBpZiB0aGUgcGFja2V0IGNvbnRhaW5zIGEgTUFQIGNvbW1hbmQsIGBybW5ldF9tYXBfc2VuZF9hY2soKWAgaXMgY2FsbGVkLCB3aGljaCBhY2Nlc3NlcyBgc2tiLVxcdTAwM2VkZXZgIGFuZCBkZXJlZmVyZW5jZXMgaXQgKGBkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19zdGFydF94bWl0KHNrYiwgZGV2KWApLiBTaW5jZSBgc2tibi1cXHUwMDNlZGV2YCB3YXMgTlVMTCwgdGhpcyBjYXVzZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFRoZSBwYXRjaCBmaXhlcyB0aGlzIGJ5IGNvcHlpbmcgYHNrYi1cXHUwMDNlZGV2YCB0byBgc2tibi1cXHUwMDNlZGV2YC4gVGhpcyBpcyBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUsIGFzIHRoZSBgZGV2YCBmaWVsZCB3YXMgZXhwbGljaXRseSB6ZXJvZWQgZHVyaW5nIGFsbG9jYXRpb24uIFN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nIG9yIEtBU0FOIHdpbGwgZWFzaWx5IGNhdGNoIHRoaXMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflows8w2p[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-20 20:00:04 +0000 UTC FinishedAt: 2026-08-20 20:42:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "RMNET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "RMNET" ], "series_id": "2d894e0c-27e7-4a02-aa67-53312333f671" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rmnet_map_deaggregate" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIwOjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JNTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cm1uZXRfbWFwX2RlYWdncmVnYXRlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVnLiBJbiBgcm1uZXRfbWFwX2RlYWdncmVnYXRlKClgLCBhIG5ldyBgc2tfYnVmZmAgKGBza2JuYCkgaXMgYWxsb2NhdGVkIHVzaW5nIGBhbGxvY19za2IoKWAsIHdoaWNoIGluaXRpYWxpemVzIHRoZSBgZGV2YCBmaWVsZCB0byBOVUxMLiBMYXRlciwgaWYgdGhlIHBhY2tldCBjb250YWlucyBhIE1BUCBjb21tYW5kLCBgcm1uZXRfbWFwX3NlbmRfYWNrKClgIGlzIGNhbGxlZCwgd2hpY2ggYWNjZXNzZXMgYHNrYi1cdTAwM2VkZXZgIGFuZCBkZXJlZmVyZW5jZXMgaXQgKGBkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fc3RhcnRfeG1pdChza2IsIGRldilgKS4gU2luY2UgYHNrYm4tXHUwMDNlZGV2YCB3YXMgTlVMTCwgdGhpcyBjYXVzZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFRoZSBwYXRjaCBmaXhlcyB0aGlzIGJ5IGNvcHlpbmcgYHNrYi1cdTAwM2VkZXZgIHRvIGBza2JuLVx1MDAzZWRldmAuIFRoaXMgaXMgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLCBhcyB0aGUgYGRldmAgZmllbGQgd2FzIGV4cGxpY2l0bHkgemVyb2VkIGR1cmluZyBhbGxvY2F0aW9uLiBTdGFuZGFyZCBrZXJuZWwgdGVzdGluZyBvciBLQVNBTiB3aWxsIGVhc2lseSBjYXRjaCB0aGlzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZGVhZ2dyZWdhdGlvbiBsb2dpYyBpbiB0aGUgUXVhbGNvbW0gUk1ORVQgZHJpdmVyLCB3aGljaCBpcyBhIHZpcnR1YWwgbmV0d29yayBkZXZpY2UgdGhhdCBjYW4gYmUgYXR0YWNoZWQgdG8gb3RoZXIgbmV0d29yayBpbnRlcmZhY2VzLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSBjcmVhdGluZyBhbiBybW5ldCBpbnRlcmZhY2UgdmlhIHJ0bmV0bGluayBhbmQgc2VuZGluZyBwYWNrZXRzIHRvIGl0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIwOjQwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjMxM2ZmYjZiNDk4M2RlMDRmMzZiNzI5YzM2MjA1Y2FiOGE5MWVkMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDIwIDIwOjQwOjM5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXBfZGF0YS5jXG5pbmRleCAzMDVhZTE1YWU4ZjM5Li5lNmY0OGRjOWZlNjRkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuY1xuQEAgLTM5NCw2ICYjNDM7Mzk0LDcgQEAgc3RydWN0IHNrX2J1ZmYgKnJtbmV0X21hcF9kZWFnZ3JlZ2F0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKCFza2JuKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbiYjNDM7XHRza2JuLVx1MDAzZWRldiA9IHNrYi1cdTAwM2VkZXY7XG4gXHRza2JfcmVzZXJ2ZShza2JuLCBSTU5FVF9NQVBfREVBR0dSX0hFQURST09NKTtcbiBcdHNrYl9wdXQoc2tibiwgcGFja2V0X2xlbik7XG4gXHRtZW1jcHkoc2tibi1cdTAwM2VkYXRhLCBza2ItXHUwMDNlZGF0YSwgcGFja2V0X2xlbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjA6NDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JNTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cm1uZXRfbWFwX2RlYWdncmVnYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBkZWFnZ3JlZ2F0aW9uIGxvZ2ljIGluIHRoZSBRdWFsY29tbSBSTU5FVCBkcml2ZXIsIHdoaWNoIGlzIGEgdmlydHVhbCBuZXR3b3JrIGRldmljZSB0aGF0IGNhbiBiZSBhdHRhY2hlZCB0byBvdGhlciBuZXR3b3JrIGludGVyZmFjZXMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGNyZWF0aW5nIGFuIHJtbmV0IGludGVyZmFjZSB2aWEgcnRuZXRsaW5rIGFuZCBzZW5kaW5nIHBhY2tldHMgdG8gaXQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiMzEzZmZiNmI0OTgzZGUwNGYzNmI3MjljMzYyMDVjYWI4YTkxZWQyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMjAgMjA6NDA6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXBfZGF0YS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuYwppbmRleCAzMDVhZTE1YWU4ZjM5Li5lNmY0OGRjOWZlNjRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXBfZGF0YS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmMKQEAgLTM5NCw2ICYjNDM7Mzk0LDcgQEAgc3RydWN0IHNrX2J1ZmYgKnJtbmV0X21hcF9kZWFnZ3JlZ2F0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlmICghc2tibikKIAkJcmV0dXJuIE5VTEw7CiAKJiM0MzsJc2tibi0mZ3Q7ZGV2ID0gc2tiLSZndDtkZXY7CiAJc2tiX3Jlc2VydmUoc2tibiwgUk1ORVRfTUFQX0RFQUdHUl9IRUFEUk9PTSk7CiAJc2tiX3B1dChza2JuLCBwYWNrZXRfbGVuKTsKIAltZW1jcHkoc2tibi0mZ3Q7ZGF0YSwgc2tiLSZndDtkYXRhLCBwYWNrZXRfbGVuKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzMwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXR3b3JrIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCDigJMgaXQgbG9va3MgbGlrZSBhIGZhaXJseSBzdHJhaWdodGZvcndhcmQgYWRkaXRpb24sIGBza2JuLSZndDtkZXYgPSBza2ItJmd0O2RldjtgLCBpbnNpZGUgdGhlIGBybW5ldF9tYXBfZGVhZ2dyZWdhdGUoKWAgZnVuY3Rpb24gaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGF0JiMzOTtzIHRoZSBjb250ZXh0IGhlcmU/JiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgcm1uZXRgIGFjdHVhbGx5ICppcyogYmVmb3JlIEkgY2FuIHByb3Blcmx5IGFzc2VzcyB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLgoKRmlyc3QgdGhpbmdzIGZpcnN0LCBhIHF1aWNrIGxvb2sgYXQgdGhlIGZpbGUgcGF0aCB0ZWxscyBtZSB0aGlzIGlzIHJlbGF0ZWQgdG8gUXVhbGNvbW0mIzM5O3MgUk1ORVQgZHJpdmVyLiBSaWdodCwgUk1ORVQuLi4gSSBrbm93IGl0JiMzOTtzIGEgUXVhbGNvbW0gc3BlY2lmaWMgaW1wbGVtZW50YXRpb24sIGJ1dCBpcyB0aGlzIGEgdmlydHVhbCBkcml2ZXIsIG9yIGlzIGl0IHRpZWQgdG8gcGFydGljdWxhciBRdWFsY29tbSBoYXJkd2FyZT8gVGhlIGltcGxpY2F0aW9ucyBhcmUgaHVnZS4gSWYgaXQmIzM5O3MgaGFyZHdhcmUtZGVwZW5kZW50LCB0aGVuIHRoZSB0ZXN0aW5nIHNjb3BlIGJyb2FkZW5zIHNpZ25pZmljYW50bHkuIElmIGl0JiMzOTtzIHZpcnR1YWwsIGFuZCBjb3VsZCBiZSByZXBsaWNhdGVkIGluIGEgY29udGFpbmVyLCB0aGVuIHRlc3Rpbmcgd2lsbCBiZSBzbGlnaHRseSBzaW1wbGVyLgoKVG8gY2xhcmlmeSB0aGlzLCBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkcml2ZXImIzM5O3MgS2NvbmZpZyBmaWxlcy4gTGV0JiMzOTtzIHNlZS4uLiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvS2NvbmZpZ2Agb3IgcG9zc2libHkgZXZlbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vS2NvbmZpZ2Agc2hvdWxkIGdpdmUgbWUgdGhlIGNvbmZpZ3VyYXRpb24gZGV0YWlscyBJJiMzOTttIGFmdGVyLiBUaGF0IHNob3VsZCB0ZWxsIG1lIHdoZXRoZXIgaXQmIzM5O3MgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiBoYXJkd2FyZSBmbGFncywgb3IgaWYgaXQmIzM5O3MgZGVzaWduZWQgdG8gYmUgbW9yZSBwbGF0Zm9ybS1hZ25vc3RpYy4gVGhhdCYjMzk7cyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHJlYWwgbmF0dXJlIG9mIHRoaXMgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBSTU5FVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9LY29uZmlnLTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9LY29uZmlnOjY6bWVudWNvbmZpZyBSTU5FVFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7Um1OZXQgTUFQIGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIwOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MTMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhhdCBLY29uZmlnIGZpbGU6CgoqKkRpdmluZyBpbnRvIHRoZSBSTU5FVCBLY29uZmlnIEZpbGUqKgoKT2theSwgbGV0JiMzOTtzIHB1bGwgdXAgdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9LY29uZmlnYCBmaWxlLiBSaWdodCwgUk1ORVQuLi4gdGhhdCYjMzk7cyBRdWFsY29tbSYjMzk7cyBSZW1vdGUgTmV0d29yayBJbnRlcmZhY2UsIGxpa2VseSBoYW5kbGluZyBjZWxsdWxhciBkYXRhIGNvbm5lY3Rpdml0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIFJNTkVUIGZlYXR1cmVzIGFyZSBiZWluZyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gVGhlIEtjb25maWcgZmlsZSBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFzcGVjdHMg4oCTIHRoZSBkZXBlbmRlbmNpZXMsIG9wdGlvbnMsIGFuZCBkZWZhdWx0cyB0aGF0IHVsdGltYXRlbHkgc2hhcGUgd2hldGhlciBSTU5FVCBzdXBwb3J0IGlzIGVuYWJsZWQgYW5kIGhvdyBncmFudWxhciB0aGUgY29uZmlndXJhdGlvbiBjYW4gZ2V0LgoKSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGEgc3RydWN0dXJlZCBhcHByb2FjaCB1c2luZyBgY29uZmlnYCBzeW1ib2xzLCBgZGVwZW5kcyBvbmAgY2xhdXNlcyB0byBsaW5rIFJNTkVUIHRvIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIChsaWtlIHRoZSBzcGVjaWZpYyBRdWFsY29tbSBTb0NzKSBhbmQgb3RoZXIgcmVsYXRlZCBkcml2ZXJzLCBgc2VsZWN0YCBzdGF0ZW1lbnRzIHRvIG1hbmFnZSBkZXBlbmRlbmNpZXMgYXV0b21hdGljYWxseSwgYW5kIHBvdGVudGlhbGx5IGB0cmlzdGF0ZWAgb3IgYGJvb2xgIG9wdGlvbnMgZm9yIGZpbmUtZ3JhaW5lZCBmZWF0dXJlIGNvbnRyb2wgKGUuZy4sIHNwZWNpZmljIFJNTkVUIGxpbmsgdHlwZXMgb3IgcHJvdG9jb2wgZmVhdHVyZXMpLiBJJiMzOTttIGFsc28gbG9va2luZyBmb3Igc2Vuc2libGUgZGVmYXVsdHMg4oCTIHdoYXQmIzM5O3MgZW5hYmxlZCBvdXQgb2YgdGhlIGJveCwgYW5kIHdoZXRoZXIgdGhleSBtYWtlIHNlbnNlIGZvciB0aGUgbGlrZWx5IHRhcmdldCBkZXZpY2VzLgoKVGhpcyBLY29uZmlnIGZpbGUgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHNlbnNlIG9mIGhvdyBjb25maWd1cmFibGUgdGhlIFJNTkVUIHN0YWNrIGlzLCB3aGljaCB3aWxsIGJlIHVzZWZ1bCBmb3IgYW55IGRldmljZSBjdXN0b21pemF0aW9uIEkgbWlnaHQgbmVlZCB0byBkby4gSXTigJlzIGFsc28gY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBwb3RlbnRpYWwgYnVpbGQgaXNzdWVzIG9yIGNvbmZsaWN0cyBpZiBJIG5lZWQgdG8gaW50ZWdyYXRlIHRoaXMgZHJpdmVyIHdpdGggb3RoZXIgbmV0d29ya2luZyBzdWJzeXN0ZW1zLiBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB2YXJpb3VzIFJNTkVULXJlbGF0ZWQgb3B0aW9uczsgd2hldGhlciB0aGV5JiMzOTtyZSBpbmRlcGVuZGVudCwgbXV0dWFsbHkgZXhjbHVzaXZlLCBvciBuZXN0ZWQuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHJhbmdlIG9mIHN1cHBvcnRlZCBjb25maWd1cmF0aW9ucyBhbmQgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB2YXJpb3VzIGNvbXBvbmVudHMgaW4gdGhlIFJNTkVUIHN0YWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFJNTkVUIE1BUCBkcml2ZXJcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0bWVudWNvbmZpZyBSTU5FVFxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7Um1OZXQgTUFQIGRyaXZlclwmIzM0O1xuICAgODpcdFx0ZGVmYXVsdCBuXG4gICA5Olx0XHRzZWxlY3QgR1JPX0NFTExTXG4gIDEwOlx0XHRoZWxwXG4gIDExOlx0XHQgIElmIHlvdSBzZWxlY3QgdGhpcywgeW91IHdpbGwgZW5hYmxlIHRoZSBSTU5FVCBtb2R1bGUgd2hpY2ggaXMgdXNlZFxuICAxMjpcdFx0ICBmb3IgaGFuZGxpbmcgZGF0YSBpbiB0aGUgbXVsdGlwbGV4aW5nIGFuZCBhZ2dyZWdhdGlvbiBwcm90b2NvbCAoTUFQKVxuICAxMzpcdFx0ICBmb3JtYXQgaW4gdGhlIGVtYmVkZGVkIGRhdGEgcGF0aC4gUk1ORVQgZGV2aWNlcyBjYW4gYmUgYXR0YWNoZWQgdG9cbiAgMTQ6XHRcdCAgYW55IElQIG1vZGUgcGh5c2ljYWwgZGV2aWNlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIwOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMTcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIFJNTkVUIERldmljZXMqKgoKT2theSwgc28gSSYjMzk7bSBoZWFyaW5nICYjMzQ7Uk1ORVQgZGV2aWNlcyBjYW4gYmUgYXR0YWNoZWQgdG8gYW55IElQIG1vZGUgcGh5c2ljYWwgZGV2aWNlLiYjMzQ7IE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0FoYSEgVGhpcyBzb3VuZHMgbGlrZSBhIHZpcnR1YWwgbmV0d29ya2luZyBjb25zdHJ1Y3QsIHNpbWlsYXIgdG8gYSBWTEFOIG9yIHBlcmhhcHMgYSBNQUNWTEFOLiYjMzQ7IEl0IHN1Z2dlc3RzIGEgbGV2ZWwgb2YgYWJzdHJhY3Rpb24sIGEgd2F5IHRvIGxvZ2ljYWxseSBjb25uZWN0IHRoaXMgUk1ORVQgdGhpbmcgdG8gYW4gZXhpc3RpbmcgbmV0d29yayBpbnRlcmZhY2UsIHJpZ2h0PyBJdCYjMzk7cyBsaWtlIGEgdmlydHVhbCBuZXR3b3JrIGRldmljZSByaWRpbmcgb24gdG9wIG9mIGEgcGh5c2ljYWwgb25lLgoKTm93IEkmIzM5O20gY3VyaW91cy4gVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGJlY29tZXMgKmhvdyogaXMgdGhpcyB2aXJ0dWFsIGRldmljZSBjcmVhdGVkPyBEb2VzIHRoZSBzeXN0ZW0gbGV2ZXJhZ2UgYHJ0bmV0bGlua2A/IFRoYXQmIzM5O3MgdGhlIHR5cGljYWwgcm91dGUgZm9yIG5ldHdvcmsgaW50ZXJmYWNlIG1hbmlwdWxhdGlvbiwgc28gdGhhdCYjMzk7cyB3aGVyZSBteSBtaW5kIG5hdHVyYWxseSBnb2VzLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGNyZWF0aW9uIHByb2Nlc3MgdG8gZnVsbHkgZ3Jhc3AgdGhpcy4gTGV0IG1lIHNlZSBob3cgaXQmIzM5O3MgYWN0dWFsbHkgY29uZmlndXJlZCBvciBpbml0aWFsaXplZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydG5sX2xpbmtfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X2NvbmZpZy5jPTM3MD1zdGF0aWMgaW50IHJtbmV0X2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X2NvbmZpZy5jLTM5OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X2NvbmZpZy5jOjQwMDpzdHJ1Y3QgcnRubF9saW5rX29wcyBybW5ldF9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfY29uZmlnLmMtNDAxLVx0LmtpbmRcdFx0PSBcJiMzNDtybW5ldFwmIzM0Oyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9jb25maWcuaD0zMz1zdHJ1Y3Qgcm1uZXRfcG9ydCB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfY29uZmlnLmgtNTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9jb25maWcuaDo1NjpleHRlcm4gc3RydWN0IHJ0bmxfbGlua19vcHMgcm1uZXRfbGlua19vcHM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9jb25maWcuaC01Ny1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF92bmQuYz0yOTg9aW50IHJtbmV0X3ZuZF9uZXdsaW5rKHU4IGlkLCBzdHJ1Y3QgbmV0X2RldmljZSAqcm1uZXRfZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X3ZuZC5jLTMzMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X3ZuZC5jOjMzMzpcdFx0cm1uZXRfZGV2LVx1MDAzZXJ0bmxfbGlua19vcHMgPSBcdTAwMjZybW5ldF9saW5rX29wcztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X3ZuZC5jLTMzNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTI1CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiB0aGUgcm1uZXQgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gdGhlIGBybW5ldGAgaW50ZXJmYWNlIGlzIGRlZmluaXRlbHkgY3JlYXRlZCB1c2luZyBgcnRuZXRsaW5rYCBhbmQgYGlwIGxpbmsgYWRkIHR5cGUgcm1uZXRgLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGl0IG1lYW5zIEkgY2FuIGVhc2lseSBzcGluIHVwIGEgdmlydHVhbCBlbnZpcm9ubWVudCBhbmQgcG9rZSBhdCB0aGlzIHRoaW5nLiBJdCYjMzk7cyBlbWluZW50bHkgdGVzdGFibGUsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTXkgYXR0ZW50aW9uIGlzIG5vdyBmb2N1c2VkIG9uIHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyBhZmZlY3RpbmcgYHJtbmV0X21hcF9kZWFnZ3JlZ2F0ZSgpYC4gSSBuZWVkIHRvIGRpdmUgaW50byB0aGF0IGZ1bmN0aW9uIGFuZCB1bmRlcnN0YW5kIHByZWNpc2VseSB3aGF0JiMzOTtzIGJlaW5nIGNoYW5nZWQgYW5kIHdoeS4gTGV0JiMzOTtzIGdldCByaWdodCBpbnRvIHRoZSBjb2RlIGZvciBgcm1uZXRfbWFwX2RlYWdncmVnYXRlKClgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtybW5ldF9tYXBfZGVhZ2dyZWdhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYz0xMDk9cm1uZXRfbWFwX2luZ3Jlc3NfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X2hhbmRsZXJzLmMtMTIzLVx0aWYgKHBvcnQtXHUwMDNlZGF0YV9mb3JtYXQgXHUwMDI2IFJNTkVUX0ZMQUdTX0lOR1JFU1NfREVBR0dSRUdBVElPTikge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYzoxMjQ6XHRcdHdoaWxlICgoc2tibiA9IHJtbmV0X21hcF9kZWFnZ3JlZ2F0ZShza2IsIHBvcnQpKSAhPSBOVUxMKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYy0xMjUtXHRcdFx0X19ybW5ldF9tYXBfaW5ncmVzc19oYW5kbGVyKHNrYm4sIHBvcnQpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcC5oPTI2PWVudW0gcm1uZXRfbWFwX2NvbW1hbmRzIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXAuaC00Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcC5oOjQzOnN0cnVjdCBza19idWZmICpybW5ldF9tYXBfZGVhZ2dyZWdhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcC5oLTQ0LVx0XHRcdFx0ICAgICAgc3RydWN0IHJtbmV0X3BvcnQgKnBvcnQpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmM9MzM2PXUzMiBybW5ldF9tYXBfdmFsaWRhdGVfcGFja2V0X2xlbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgcm1uZXRfcG9ydCAqcG9ydClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXBfZGF0YS5jLTM4Mi0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmM6MzgzOnN0cnVjdCBza19idWZmICpybW5ldF9tYXBfZGVhZ2dyZWdhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmMtMzg0LVx0XHRcdFx0ICAgICAgc3RydWN0IHJtbmV0X3BvcnQgKnBvcnQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIwOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NjQKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAxMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBQb3RlbnRpYWw6IFJNTkVUIERlYWdncmVnYXRpb24qKgoKT2theSwgc28gYHJtbmV0X21hcF9kZWFnZ3JlZ2F0ZWAgaXMgY2FsbGVkIGJ5IGBybW5ldF9tYXBfaW5ncmVzc19oYW5kbGVyYC4gVGhhdCBgaW5ncmVzc19oYW5kbGVyYCBpcyB0aGUgcmVjZWl2ZSBoYW5kbGVyIGZvciB0aGUgcGh5c2ljYWwgZGV2aWNlIHRoYXQgUk1ORVQgaXMgY29ubmVjdGVkIHRvLiBUaGF0JiMzOTtzIGEgZGlyZWN0IHBhdGgsIG1ha2luZyBpdCBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4gRGVmaW5pdGVseSByZWFjaGFibGUsIG5vIHF1ZXN0aW9uLiBUaGUgY29uZmlndXJhdGlvbiBuZWVkcyB0byBiZSBzZXQgdXAgd2l0aCBgUk1ORVRgIHRvIGV2ZW4gZ2V0IHRoZXJlLgoKTm93LCBsZXQmIzM5O3Mgc2VlIHdoYXQgYEZvY3VzU3ltYm9sc2AgdGVsbHMgdXMuIGBybW5ldF9tYXBfZGVhZ2dyZWdhdGVgIGxvb2tzIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBpbnRlcmVzdGluZyBmdW5jdGlvbnMgaW4gdGhlIHZpY2luaXR5LiBBbHJpZ2h0LCBgcm1uZXRfbWFwX2luZ3Jlc3NfaGFuZGxlcmAgaXMgcmlnaHQgdGhlcmUgYW5kIGlzIGFub3RoZXIgZ29vZCBvcHRpb24gdG8gaW52ZXN0aWdhdGUuIE1heWJlIHdlIHNob3VsZCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHJtbmV0X21hcF9kYXRhLmNgIHdoaWxlIHdlJiMzOTtyZSBhdCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cm1uZXRfbWFwX2RlYWdncmVnYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXBfZGF0YS5jPTMzNj11MzIgcm1uZXRfbWFwX3ZhbGlkYXRlX3BhY2tldF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHJtbmV0X3BvcnQgKnBvcnQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuYy0zODItICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXBfZGF0YS5jOjM4MzpzdHJ1Y3Qgc2tfYnVmZiAqcm1uZXRfbWFwX2RlYWdncmVnYXRlKHN0cnVjdCBza19idWZmICpza2IsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXBfZGF0YS5jLTM4NC1cdFx0XHRcdCAgICAgIHN0cnVjdCBybW5ldF9wb3J0ICpwb3J0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjE1CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBSTU5FVCBEZWFnZ3JlZ2F0aW9uIFBhdGNoKioKCkFscmlnaHQsIHRoaXMgcGF0Y2ggaXMgaG9uaW5nIGluIG9uIGBybW5ldF9tYXBfZGVhZ2dyZWdhdGVgLiBUaGF0JiMzOTtzIHRoZSBrZXkgZnVuY3Rpb24gdG8gZGlzc2VjdC4gVGhlIGNoYW5nZXMgYXJlIGFsbCBjZW50ZXJlZCB0aGVyZSwgc28gdGhhdCYjMzk7cyB3aGVyZSBteSBmb2N1cyBzaG91bGQgYmUuIEJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgY29kZSwgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIGBSTU5FVGAgaXRzZWxmIGhhcyBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgY291bGQgaW5mbHVlbmNlIG9yIGJlIGltcGFjdGVkIGJ5IHRoaXMuIEdvdHRhIHVuZGVyc3RhbmQgdGhlIGVjb3N5c3RlbSBiZWZvcmUgbWFraW5nIGFueSBhc3N1bXB0aW9ucyBhYm91dCB0aGlzIHBhcnRpY3VsYXIgcGllY2UuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgYnJvYWRlciBwaWN0dXJlIGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBSTU5FVCBNQVAgZHJpdmVyXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG1lbnVjb25maWcgUk1ORVRcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O1JtTmV0IE1BUCBkcml2ZXJcJiMzNDtcbiAgIDg6XHRcdGRlZmF1bHQgblxuICAgOTpcdFx0c2VsZWN0IEdST19DRUxMU1xuICAxMDpcdFx0aGVscFxuICAxMTpcdFx0ICBJZiB5b3Ugc2VsZWN0IHRoaXMsIHlvdSB3aWxsIGVuYWJsZSB0aGUgUk1ORVQgbW9kdWxlIHdoaWNoIGlzIHVzZWRcbiAgMTI6XHRcdCAgZm9yIGhhbmRsaW5nIGRhdGEgaW4gdGhlIG11bHRpcGxleGluZyBhbmQgYWdncmVnYXRpb24gcHJvdG9jb2wgKE1BUClcbiAgMTM6XHRcdCAgZm9ybWF0IGluIHRoZSBlbWJlZGRlZCBkYXRhIHBhdGguIFJNTkVUIGRldmljZXMgY2FuIGJlIGF0dGFjaGVkIHRvXG4gIDE0Olx0XHQgIGFueSBJUCBtb2RlIHBoeXNpY2FsIGRldmljZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYwNgoJCQkJCQkJb3V0cHV0OiA5NwoJCQkJCQkJdGhvdWdodHM6IDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3k6IEEgQ2xlYW4gU2xhdGUgd2l0aCBGb2N1c2VkIFByZWNpc2lvbioqCgpPa2F5LCBoZXJlJiMzOTtzIHRoZSBwbGFuLiBObyBleHRlcm5hbCBlbnRhbmdsZW1lbnRzIHRvIHdvcnJ5IGFib3V0IOKAkyB0aGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTXkgZm9jdXMgaXMgbGFzZXItc2hhcnAuIEkmIzM5O20gemVyb2luZyBpbiBvbiBhIHZlcnkgc3BlY2lmaWMgdGFyZ2V0OiB0aGUgYHJtbmV0X21hcF9kZWFnZ3JlZ2F0ZWAgZnVuY3Rpb24uIEl0IHNlZW1zIHRoaXMgaXMgd2hlcmUgdGhlIHZ1bG5lcmFiaWxpdHkgbGllcywgYXMgaXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIGRlYWdncmVnYXRpb24gbG9naWMgd2l0aGluIHRoZSBRdWFsY29tbSBSTU5FVCBkcml2ZXIuIEkgaGF2ZSBgV29ydGhGdXp6aW5nOiB0cnVlYCBzbyBJJiMzOTttIGNvbW1pdHRlZC4gVGhpcyBpcyBpbXBvcnRhbnQuCgpCYXNlZCBvbiB0aGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIEkmIzM5O3ZlIHNlZW4sIHNwZWNpZmljYWxseSB0aGUgaW5jbHVzaW9uIG9mIGBFbmFibGVDb25maWdzOiBbJiMzNDtSTU5FVCYjMzQ7XWAsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSB3b3JraW5nIHdpdGggYW4gUk1ORVQgZW52aXJvbm1lbnQgYW5kIEkmIzM5O2xsIHVzZSB0aG9zZSBjb25maWd1cmF0aW9ucy4KClRoZSBkcml2ZXIgaXRzZWxmIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQmIzM5O3MgYSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlLiBUaGlzIG9wZW5zIHVwIGEgY29tcGVsbGluZyBhdHRhY2sgc3VyZmFjZSBiZWNhdXNlIEkgY2FuIGF0dGFjaCB0aGUgUk1ORVQgdG8gb3RoZXIgbmV0d29yayBpbnRlcmZhY2VzIGFuZCBwb3RlbnRpYWxseSB1c2UgdGhpcyBuZXcgcm1uZXQgaW50ZXJmYWNlIHZpYSBydG5ldGxpbmssIHNlbmRpbmcgcGFja2V0cyB0byBpdCBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmcuIFRoaXMgZ2l2ZXMgbWUgYSBjb250cm9sbGFibGUgZW52aXJvbm1lbnQgdG8gdGVzdCBlZGdlIGNhc2VzIGFuZCBob3BlZnVsbHkgdHJpZ2dlciBzb21ldGhpbmcgaW50ZXJlc3RpbmcuIE15IHJlYXNvbmluZyBoZXJlIGlzIHRoYXQgYnkgZXhwbG9pdGluZyB0aGUgdmlydHVhbCBuZXR3b3JrIGludGVyZmFjZSwgSSBjYW4gYXR0ZW1wdCB0byB0cmlnZ2VyIHZ1bG5lcmFiaWxpdGllcyB3aXRoaW4gdGhlIGRlYWdncmVnYXRpb24gbG9naWMuIEkgbGlrZSB0aGlzIGFwcHJvYWNoLiBJdCYjMzk7cyBjbGVhbiwgdGFyZ2V0ZWQsIGFuZCBwcm92aWRlcyBhIGNsZWFyIHBhdGggdG8gZXhlY3V0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Uk1ORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtybW5ldF9tYXBfZGVhZ2dyZWdhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGRlYWdncmVnYXRpb24gbG9naWMgaW4gdGhlIFF1YWxjb21tIFJNTkVUIGRyaXZlciwgd2hpY2ggaXMgYSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlIHRoYXQgY2FuIGJlIGF0dGFjaGVkIHRvIG90aGVyIG5ldHdvcmsgaW50ZXJmYWNlcy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYnkgY3JlYXRpbmcgYW4gcm1uZXQgaW50ZXJmYWNlIHZpYSBydG5ldGxpbmsgYW5kIHNlbmRpbmcgcGFja2V0cyB0byBpdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Uk1ORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtybW5ldF9tYXBfZGVhZ2dyZWdhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGRlYWdncmVnYXRpb24gbG9naWMgaW4gdGhlIFF1YWxjb21tIFJNTkVUIGRyaXZlciwgd2hpY2ggaXMgYSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlIHRoYXQgY2FuIGJlIGF0dGFjaGVkIHRvIG90aGVyIG5ldHdvcmsgaW50ZXJmYWNlcy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYnkgY3JlYXRpbmcgYW4gcm1uZXQgaW50ZXJmYWNlIHZpYSBydG5ldGxpbmsgYW5kIHNlbmRpbmcgcGFja2V0cyB0byBpdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjA6NDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMDo0MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWcuIEluIGBybW5ldF9tYXBfZGVhZ2dyZWdhdGUoKWAsIGEgbmV3IGBza19idWZmYCAoYHNrYm5gKSBpcyBhbGxvY2F0ZWQgdXNpbmcgYGFsbG9jX3NrYigpYCwgd2hpY2ggaW5pdGlhbGl6ZXMgdGhlIGBkZXZgIGZpZWxkIHRvIE5VTEwuIExhdGVyLCBpZiB0aGUgcGFja2V0IGNvbnRhaW5zIGEgTUFQIGNvbW1hbmQsIGBybW5ldF9tYXBfc2VuZF9hY2soKWAgaXMgY2FsbGVkLCB3aGljaCBhY2Nlc3NlcyBgc2tiLVx1MDAzZWRldmAgYW5kIGRlcmVmZXJlbmNlcyBpdCAoYGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zdGFydF94bWl0KHNrYiwgZGV2KWApLiBTaW5jZSBgc2tibi1cdTAwM2VkZXZgIHdhcyBOVUxMLCB0aGlzIGNhdXNlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gVGhlIHBhdGNoIGZpeGVzIHRoaXMgYnkgY29weWluZyBgc2tiLVx1MDAzZWRldmAgdG8gYHNrYm4tXHUwMDNlZGV2YC4gVGhpcyBpcyBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUsIGFzIHRoZSBgZGV2YCBmaWVsZCB3YXMgZXhwbGljaXRseSB6ZXJvZWQgZHVyaW5nIGFsbG9jYXRpb24uIFN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nIG9yIEtBU0FOIHdpbGwgZWFzaWx5IGNhdGNoIHRoaXMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGIzMTNmZmI2YjQ5ODNkZTA0ZjM2YjcyOWMzNjIwNWNhYjhhOTFlZDIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyMCAyMDo0MDozOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXBfZGF0YS5jCmluZGV4IDMwNWFlMTVhZThmMzkuLmU2ZjQ4ZGM5ZmU2NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuYwpAQCAtMzk0LDYgJiM0MzszOTQsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqcm1uZXRfbWFwX2RlYWdncmVnYXRlKHN0cnVjdCBza19idWZmICpza2IsCiAJaWYgKCFza2JuKQogCQlyZXR1cm4gTlVMTDsKIAomIzQzOwlza2JuLSZndDtkZXYgPSBza2ItJmd0O2RldjsKIAlza2JfcmVzZXJ2ZShza2JuLCBSTU5FVF9NQVBfREVBR0dSX0hFQURST09NKTsKIAlza2JfcHV0KHNrYm4sIHBhY2tldF9sZW4pOwogCW1lbWNweShza2JuLSZndDtkYXRhLCBza2ItJmd0O2RhdGEsIHBhY2tldF9sZW4pOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzMAoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDI3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJNTkVUIERlYWdncmVnYXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIGBza2JuLSZndDtkZXYgPSBza2ItJmd0O2RldjtgIHdpdGhpbiB0aGUgYHJtbmV0X21hcF9kZWFnZ3JlZ2F0ZWAgZnVuY3Rpb24gaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmNgLiBMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBCYXNpY2FsbHksIHdlJiMzOTtyZSB0YWtpbmcgYSBuZXdseSBjcmVhdGVkIGBza19idWZmYCBjYWxsZWQgYHNrYm5gIGFuZCBhc3NpZ25pbmcgdGhlIG5ldHdvcmsgZGV2aWNlIChgZGV2YCkgZnJvbSB0aGUgb3JpZ2luYWwgYHNrX2J1ZmZgIChgc2tiYCkgdG8gaXQuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGxpa2VseSBhIHNhZmV0eSBtZWFzdXJlLiBXaXRob3V0IHRoaXMgbGluZSwgdGhlcmUmIzM5O3MgYSBwb3NzaWJpbGl0eSBvZiBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSwgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGxhdGVyIG9uIGluIHRoZSBjb2RlIHdoZXJlIGBza2JuLSZndDtkZXZgIGlzIHVzZWQsIGFuZCBpdCBoYXNuJiMzOTt0IGJlZW4gZXhwbGljaXRseSBzZXQuIElmIGBza2ItJmd0O2RldmAgaGFwcGVuZWQgdG8gYmUgTlVMTCwgdGhpcyBhc3NpZ25tZW50IGZpeGVzIHRoZSBwcm9ibGVtLgoKTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBwb3RlbnRpYWwgaXNzdWVzIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnksIGJ1dCB0aGVuIEkgcmVtZW1iZXIgdGhhdCBgc2tibmAgaXMgY3JlYXRlZCB3aXRoIHNvbWV0aGluZyBsaWtlIGBhbGxvY19za2JgLCBzbyBpdHMgZmllbGRzLCBsaWtlIGBkZXZgLCBhcmUgKmxpa2VseSogaW5pdGlhbGl6ZWQgdG8gTlVMTCBieSBkZWZhdWx0LiBTbywgdGhhdCYjMzk7cyBsZXNzIGxpa2VseSBhIHByb2JsZW0uCgpOb3csIEkgcmVhbGx5IG5lZWQgdG8gZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHVuZGVyc3RhbmQgaG93IGBybW5ldF9tYXBfZGVhZ2dyZWdhdGVgIGlzIHVzZWQgdG8gc2VlICp3aHkqIHRoaXMgZml4IGlzIG5lZWRlZCBhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBtaXNzaW5nIGBkZXZgIHBvaW50ZXIgd291bGQgYWN0dWFsbHkgYmUuIFRpbWUgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBmdW5jdGlvbiBpdHNlbGYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JtbmV0X21hcF9kZWFnZ3JlZ2F0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuYz0zMzY9dTMyIHJtbmV0X21hcF92YWxpZGF0ZV9wYWNrZXRfbGVuKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBybW5ldF9wb3J0ICpwb3J0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmMtMzgyLSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuYzozODM6c3RydWN0IHNrX2J1ZmYgKnJtbmV0X21hcF9kZWFnZ3JlZ2F0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuYy0zODQtXHRcdFx0XHQgICAgICBzdHJ1Y3Qgcm1uZXRfcG9ydCAqcG9ydClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg1OAoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uOiBgcm1uZXRfbWFwX2RlYWdncmVnYXRlYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHJtbmV0X21hcF9kZWFnZ3JlZ2F0ZWAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBwYXJzZSB0aGUgbmFtZS4gVGhlICYjMzQ7cm1uZXQmIzM0OyBzdWdnZXN0cyB0aGlzIGlzIHJlbGF0ZWQgdG8gYSBSYWRpbyBNb2RlbSBOZXR3b3JrLCBhIGtleSBjb25jZXB0LiBUaGUgJiMzNDttYXAmIzM0OyBlbGVtZW50IHBvaW50cyB0byBhIG1lY2hhbmlzbSBpbnZvbHZpbmcgYXNzb2NpYXRpb25zIG9yIGxvb2t1cHMgb2Ygc29tZSBraW5kLCBhbmQgdGhlbiAmIzM0O2RlYWdncmVnYXRlJiMzNDsgYWxtb3N0IGNlcnRhaW5seSBpbXBsaWVzIHNvbWUgbGV2ZWwgb2YgZGF0YSBzcGxpdHRpbmcgb3IgZGlzc2VjdGlvbi4KClNvLCBJJiMzOTttIGFscmVhZHkgZW52aXNpb25pbmcgYSBjb3JlIGZ1bmN0aW9uIHByb2JhYmx5IHRhc2tlZCB3aXRoIGJyZWFraW5nIGRvd24gYSBwb3RlbnRpYWxseSBjb21wbGV4IG9yIGVuY2Fwc3VsYXRlZCBwYXlsb2FkIHJlY2VpdmVkIG92ZXIgYW4gUk1ORVQgaW50ZXJmYWNlLCB1c2luZyBzb21lIGtpbmQgb2YgbWFwcGluZyBzdHJ1Y3R1cmUgb3IgbG9va3VwIHRvIGhhbmRsZSB0aGUgZGVhZ2dyZWdhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpcyBiZWluZyBkZWFnZ3JlZ2F0ZWQuCgpXaGF0IHNwZWNpZmljIHBpZWNlcyBvZiBkYXRhIGFyZSB3ZSB3b3JraW5nIHdpdGg/IFdoYXQmIzM5O3MgYmVpbmcgbWFwcGVkPyBJcyBpdCBhIGhlYWRlciwgYSBwcm90b2NvbCBpZGVudGlmaWVyLCBmbG93IGluZm9ybWF0aW9uLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIHR5cGUgb2YgZGF0YSBpdCBpcyBtYXBwaW5nIGFuZCBkZWFnZ3JlZ2F0aW5nIHdpbGwgc2lnbmlmaWNhbnRseSBpbmZsdWVuY2UgdGhlIGRhdGEgc3RydWN0dXJlcywgYWxnb3JpdGhtcywgYW5kIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zLiBJIHNob3VsZCBiZSBsb29raW5nIGZvciBjbHVlcyBvbiBob3cgdGhlIFJNTkVUIGxheWVyIChvciBwcm90b2NvbCkgaXMgYXJjaGl0ZWN0dXJlZC4gVGhlIGRlYWdncmVnYXRpb24gKm11c3QqIGJlIGNvbm5lY3RlZCB0byBhIGNvcnJlc3BvbmRpbmcgYWdncmVnYXRpb24gc29tZXdoZXJlIHVwc3RyZWFtLgoKSSB3YW50IHRvIGtub3cgaWYgdGhlcmUgaXMgYW55IGRpc2N1c3Npb24gcmVnYXJkaW5nIHRoZSB0cmFkZSBvZmZzIGZvciBkaWZmZXJlbnQga2luZHMgb2YgbWFwcGluZ3MgYW5kIGRlYWdncmVnYXRpb25zLiBJIHdhbnQgdG8gY2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIG1hcHBpbmcgc3RydWN0dXJlIGlzIGVmZmljaWVudDsgdGhpbmsgYWJvdXQgaGFzaCB0YWJsZXMsIGJpbmFyeSBzZWFyY2ggdHJlZXMgb3IsIGF0IGxlYXN0LCBvcHRpbWl6ZWQgbG9vcHMuIEFyZSB3ZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHRoYXQgbmVlZHMgdG8gYmUgZmFzdCBhbmQgbG93LWxhdGVuY3kgb3IgY2FuIHdlIHRvbGVyYXRlIGEgaGlnaGVyIG92ZXJoZWFkPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgdXNhZ2U/IEFyZSB0aGVyZSBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIG9yIGJ1ZmZlciBvdmVyZmxvd3MgdG8gY29uc2lkZXI/IFRoYXQmIzM5O3MgbGlrZWx5IHZlcnkgaW1wb3J0YW50LgoKRnVydGhlcm1vcmUsIGNvbnRleHQgaXMga2V5LiBXaGF0IGRvZXMgdGhpcyBpbnRlZ3JhdGUgd2l0aD8gV2hhdCBoYXBwZW5zIHRvIHRoZSBkZWFnZ3JlZ2F0ZWQgZGF0YSBhZnRlciB0aGlzIHBvaW50PyBXaGF0IGFyZSBpdHMgaW5wdXRzIGFuZCBvdXRwdXRzPyBEb2VzIGl0IHdvcmsgaW4gcmVhbCB0aW1lLCBvciBpcyBpdCBvZmZsaW5lPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIGVycm9yIGNvbmRpdGlvbnMgdG8gbG9vayBmb3I/IEFyZSB0aGVyZSBzcGVjaWZpYyBwcm90b2NvbHMgaW52b2x2ZWQ/IEkmIzM5O20gaG9waW5nIHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZSB0byBrbm93IGhvdyB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuIFdpdGggdGhpcyBrbm93bGVkZ2UgSSBjYW4gYmUgY29uZmlkZW50IGluIGhvdyB0byBiZXN0IG1haW50YWluIGFuZCBpbXByb3ZlIHRoaXMgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXBfZGF0YS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzgzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzODM6XHRzdHJ1Y3Qgc2tfYnVmZiAqcm1uZXRfbWFwX2RlYWdncmVnYXRlKHN0cnVjdCBza19idWZmICpza2IsXG4gMzg0Olx0XHRcdFx0XHQgICAgICBzdHJ1Y3Qgcm1uZXRfcG9ydCAqcG9ydClcbiAzODU6XHR7XG4gMzg2Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tibjtcbiAzODc6XHRcdHUzMiBwYWNrZXRfbGVuO1xuIDM4ODpcdFxuIDM4OTpcdFx0cGFja2V0X2xlbiA9IHJtbmV0X21hcF92YWxpZGF0ZV9wYWNrZXRfbGVuKHNrYiwgcG9ydCk7XG4gMzkwOlx0XHRpZiAoIXBhY2tldF9sZW4pXG4gMzkxOlx0XHRcdHJldHVybiBOVUxMO1xuIDM5MjpcdFxuIDM5MzpcdFx0c2tibiA9IGFsbG9jX3NrYihwYWNrZXRfbGVuICYjNDM7IFJNTkVUX01BUF9ERUFHR1JfU1BBQ0lORywgR0ZQX0FUT01JQyk7XG4gMzk0Olx0XHRpZiAoIXNrYm4pXG4gMzk1Olx0XHRcdHJldHVybiBOVUxMO1xuIDM5NjpcdFxuIDM5NzpcdFx0c2tibi1cdTAwM2VkZXYgPSBza2ItXHUwMDNlZGV2O1xuIDM5ODpcdFx0c2tiX3Jlc2VydmUoc2tibiwgUk1ORVRfTUFQX0RFQUdHUl9IRUFEUk9PTSk7XG4gMzk5Olx0XHRza2JfcHV0KHNrYm4sIHBhY2tldF9sZW4pO1xuIDQwMDpcdFx0bWVtY3B5KHNrYm4tXHUwMDNlZGF0YSwgc2tiLVx1MDAzZWRhdGEsIHBhY2tldF9sZW4pO1xuIDQwMTpcdFx0c2tiX3B1bGwoc2tiLCBwYWNrZXRfbGVuKTtcbiA0MDI6XHRcbiA0MDM6XHRcdHJldHVybiBza2JuO1xuIDQwNDpcdH1cbiA0MDU6XHRcbiA0MDY6XHQvKiBWYWxpZGF0ZXMgcGFja2V0IGNoZWNrc3Vtcy4gRnVuY3Rpb24gdGFrZXMgYSBwb2ludGVyIHRvXG4gNDA3Olx0ICogdGhlIGJlZ2lubmluZyBvZiBhIGJ1ZmZlciB3aGljaCBjb250YWlucyB0aGUgSVAgcGF5bG9hZCAmIzQzO1xuIDQwODpcdCAqIHBhZGRpbmcgJiM0MzsgY2hlY2tzdW0gdHJhaWxlci5cbiA0MDk6XHQgKiBPbmx5IElQdjQgYW5kIElQdjYgYXJlIHN1cHBvcnRlZCBhbG9uZyB3aXRoIFRDUCBcdTAwMjYgVURQLlxuIDQxMDpcdCAqIEZyYWdtZW50ZWQgb3IgdHVubmVsZWQgcGFja2V0cyBhcmUgbm90IHN1cHBvcnRlZC5cbiA0MTE6XHQgKi9cbiA0MTI6XHRpbnQgcm1uZXRfbWFwX2NoZWNrc3VtX2Rvd25saW5rX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgbGVuKVxuIDQxMzpcdHtcbiA0MTQ6XHRcdHN0cnVjdCBybW5ldF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoc2tiLVx1MDAzZWRldik7XG4gNDE1Olx0XHRzdHJ1Y3Qgcm1uZXRfbWFwX2RsX2NzdW1fdHJhaWxlciAqY3N1bV90cmFpbGVyO1xuIDQxNjpcdFxuIDQxNzpcdFx0aWYgKHVubGlrZWx5KCEoc2tiLVx1MDAzZWRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9SWENTVU0pKSkge1xuIDQxODpcdFx0XHRwcml2LVx1MDAzZXN0YXRzLmNzdW1fc3cmIzQzOyYjNDM7O1xuIDQxOTpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gNDIwOlx0XHR9XG4gNDIxOlx0XG4gNDIyOlx0XHRjc3VtX3RyYWlsZXIgPSAoc3RydWN0IHJtbmV0X21hcF9kbF9jc3VtX3RyYWlsZXIgKikoc2tiLVx1MDAzZWRhdGEgJiM0MzsgbGVuKTtcbiA0MjM6XHRcbiA0MjQ6XHRcdGlmICghKGNzdW1fdHJhaWxlci1cdTAwM2VmbGFncyBcdTAwMjYgTUFQX0NTVU1fRExfVkFMSURfRkxBRykpIHtcbiA0MjU6XHRcdFx0cHJpdi1cdTAwM2VzdGF0cy5jc3VtX3ZhbGlkX3Vuc2V0JiM0MzsmIzQzOztcbiA0MjY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDI3Olx0XHR9XG4gNDI4Olx0XG4gNDI5Olx0XHRpZiAoc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSlcbiA0MzA6XHRcdFx0cmV0dXJuIHJtbmV0X21hcF9pcHY0X2RsX2NzdW1fdHJhaWxlcihza2IsIGNzdW1fdHJhaWxlciwgcHJpdik7XG4gNDMxOlx0XG4gNDMyOlx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfSVBWNikgXHUwMDI2XHUwMDI2IHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDIzMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgU0tCIERldmljZSBQb2ludGVyIEZpeCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHNldHRpbmcgYHNrYm4tJmd0O2RldiA9IHNrYi0mZ3Q7ZGV2O2AuIFJpZ2h0LCBJIHNlZSB0aGUgaW1tZWRpYXRlIGludGVudDogaXQmIzM5O3MgYSBmaXggYWltZWQgYXQgcHJldmVudGluZyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgb3Igc29tZXRoaW5nIHZlcnkgbXVjaCBsaWtlIGl0LiBJZiBgc2tibi0mZ3Q7ZGV2YCBpcyBsZWZ0IGFzIE5VTEwsIHdlJiMzOTtyZSBnb2luZyB0byBnZXQgYSBjcmFzaCB3aGVuIHRoYXQgcG9pbnRlciBnZXRzIGFjY2Vzc2VkIGRvd25zdHJlYW0sIGFuZCBJIGNhbiBzZWUgcHJlY2lzZWx5IHdoZXJlIHRoaXMgaXMgYW4gaXNzdWUuIFRoaW5raW5nIGFib3V0IGV4YW1wbGVzLCBsaWtlIGBuZXRkZXZfcHJpdihza2ItJmd0O2RldilgIGluIGEgZnVuY3Rpb24gc3VjaCBhcyBgcm1uZXRfbWFwX2NoZWNrc3VtX2Rvd25saW5rX3BhY2tldGAgb3IgYW55d2hlcmUgdGhhdCBpcyB0cnlpbmcgdG8gdXNlIHRoZSBkZXYgcG9pbnRlci4KCkl0JiMzOTtzIG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBwcm9ibGVtOyBJIGtub3cgYGFsbG9jX3NrYmAgaW5pdGlhbGl6ZXMgYHNrYi0mZ3Q7ZGV2YCB0byBOVUxMLCBzbyB0aGVyZSYjMzk7cyB0aGUgaW5pdGlhbCBzdGF0ZS4gQnV0LCBoYW5nIG9uLi4uIGxldCBtZSByZS10cmFjZSB0aGUgYWxsb2NhdGlvbiBwYXRoLiBJZiBteSBtZW1vcnkgc2VydmVzLCBgYWxsb2Nfc2tiYCByZWxpZXMgb24gYGttZW1fY2FjaGVfYWxsb2NgLCB3aGljaCBpbiB0dXJuLCBzaG91bGQgc2V0IGBza2ItJmd0O2RldiA9IE5VTExgIHdpdGhpbiB0aGUgZnVuY3Rpb24gYF9fYnVpbGRfc2tiX2Fyb3VuZGAgb3IgYF9fYWxsb2Nfc2tiYC4KClRvIGJlIGNlcnRhaW4sIGxldCYjMzk7cyB0YWtlIGEgcXVpY2sgbG9vayBhdCBgX19hbGxvY19za2JgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrYi1cdTAwM2VkZXYgPSBOVUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzIzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGRlZXBseSBpbnZvbHZlZCBpbiB0aGlzIGFyZWE6CgoqKkRpdmluZyBpbnRvIHRoZSBTS0IgQWxsb2NhdGlvbiBQcm9jZXNzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCBndXRzIG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrIGFuZCBuZWVkIHRvIGRpZyBpbnRvIGhvdyB0aG9zZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgc3RydWN0dXJlcyBhcmUgYWN0dWFsbHkgYWxsb2NhdGVkLiBUaW1lIHRvIHB1bGwgdXAgdGhlIHNvdXJjZSBjb2RlIGZvciBgX19hbGxvY19za2JgIGluIGBuZXQvY29yZS9za2J1ZmYuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgdGhlIGNvcmUgb2YgaG93IG91ciBuZXR3b3JraW5nIGRhdGEgaXMgbWFuYWdlZCBhdCB0aGUgcGFja2V0IGxldmVsLiBJdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGV2ZXJ5IGluY29taW5nIGFuZCBvdXRnb2luZyBuZXR3b3JrIHBhY2tldC4gVW5kZXJzdGFuZGluZyB0aGlzIGZ1bmN0aW9uIGludGltYXRlbHkgaXMgY3J1Y2lhbCBmb3IgcGVyZm9ybWFuY2UgdHVuaW5nLCBkZWJ1Z2dpbmcgbWVtb3J5LXJlbGF0ZWQgaXNzdWVzLCBhbmQgcG90ZW50aWFsbHksIGNyYWZ0aW5nIGFueSBjdXN0b20gbmV0d29ya2luZyBzb2x1dGlvbnMuIEkgZXhwZWN0IHRoaXMgd2lsbCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGdldHRpbmcgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgcHJvYmxlbSBJJiMzOTttIHdvcmtpbmcgd2l0aCB0b2RheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19hbGxvY19za2ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYz02MDY9c3RhdGljIHZvaWQgKmttYWxsb2NfcmVzZXJ2ZSh1bnNpZ25lZCBpbnQgKnNpemUsIGdmcF90IGZsYWdzLCBpbnQgbm9kZSxcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy02NTctLyoqXG5uZXQvY29yZS9za2J1ZmYuYzo2NTg6ICpcdF9fYWxsb2Nfc2tiXHQtXHRhbGxvY2F0ZSBhIG5ldHdvcmsgYnVmZmVyXG5uZXQvY29yZS9za2J1ZmYuYy02NTktICpcdEBzaXplOiBzaXplIHRvIGFsbG9jYXRlXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNjczLSAqL1xubmV0L2NvcmUvc2tidWZmLmM6Njc0OnN0cnVjdCBza19idWZmICpfX2FsbG9jX3NrYih1bnNpZ25lZCBpbnQgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2ssXG5uZXQvY29yZS9za2J1ZmYuYy02NzUtXHRcdFx0ICAgIGludCBmbGFncywgaW50IG5vZGUpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNzQ1LX1cbm5ldC9jb3JlL3NrYnVmZi5jOjc0NjpFWFBPUlRfU1lNQk9MKF9fYWxsb2Nfc2tiKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTc0Ny1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz03NjE9c3RydWN0IHNrX2J1ZmYgKl9fbmV0ZGV2X2FsbG9jX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbGVuLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTc3Ni1cdCAgICAoZ2ZwX21hc2sgXHUwMDI2IChfX0dGUF9ESVJFQ1RfUkVDTEFJTSB8IEdGUF9ETUEpKSkge1xubmV0L2NvcmUvc2tidWZmLmM6Nzc3Olx0XHRza2IgPSBfX2FsbG9jX3NrYihsZW4sIGdmcF9tYXNrLCBTS0JfQUxMT0NfUlgsIE5VTUFfTk9fTk9ERSk7XG5uZXQvY29yZS9za2J1ZmYuYy03NzgtXHRcdGlmICghc2tiKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTgzOD1zdHJ1Y3Qgc2tfYnVmZiAqbmFwaV9hbGxvY19za2Ioc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCB1bnNpZ25lZCBpbnQgbGVuKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTg1NC1cdCAgICAoZ2ZwX21hc2sgXHUwMDI2IChfX0dGUF9ESVJFQ1RfUkVDTEFJTSB8IEdGUF9ETUEpKSkge1xubmV0L2NvcmUvc2tidWZmLmM6ODU1Olx0XHRza2IgPSBfX2FsbG9jX3NrYihsZW4sIGdmcF9tYXNrLCBTS0JfQUxMT0NfUlggfCBTS0JfQUxMT0NfTkFQSSxcbm5ldC9jb3JlL3NrYnVmZi5jLTg1Ni1cdFx0XHRcdCAgTlVNQV9OT19OT0RFKTtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0yMTc3PXN0cnVjdCBza19idWZmICpza2JfY29weShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBnZnBfbWFzaylcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0yMTkwLVx0c2l6ZSA9IHNrYl9lbmRfb2Zmc2V0KHNrYikgJiM0Mzsgc2tiLVx1MDAzZWRhdGFfbGVuO1xubmV0L2NvcmUvc2tidWZmLmM6MjE5MTpcdG4gPSBfX2FsbG9jX3NrYihzaXplLCBnZnBfbWFzayxcbm5ldC9jb3JlL3NrYnVmZi5jLTIxOTItXHRcdFx0c2tiX2FsbG9jX3J4X2ZsYWcoc2tiKSwgTlVNQV9OT19OT0RFKTtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0yMjI1PXN0cnVjdCBza19idWZmICpfX3Bza2JfY29weV9mY2xvbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGhlYWRyb29tLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTIyMjktXHRpbnQgZmxhZ3MgPSBza2JfYWxsb2NfcnhfZmxhZyhza2IpIHwgKGZjbG9uZSA/IFNLQl9BTExPQ19GQ0xPTkUgOiAwKTtcbm5ldC9jb3JlL3NrYnVmZi5jOjIyMzA6XHRzdHJ1Y3Qgc2tfYnVmZiAqbiA9IF9fYWxsb2Nfc2tiKHNpemUsIGdmcF9tYXNrLCBmbGFncywgTlVNQV9OT19OT0RFKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTIyMzEtXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MjUwMj1zdHJ1Y3Qgc2tfYnVmZiAqc2tiX2NvcHlfZXhwYW5kKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMjUxOS1cdG9sZGhlYWRyb29tID0gc2tiX2hlYWRyb29tKHNrYik7XG5uZXQvY29yZS9za2J1ZmYuYzoyNTIwOlx0biA9IF9fYWxsb2Nfc2tiKG5ld2hlYWRyb29tICYjNDM7IHNrYi1cdTAwM2VsZW4gJiM0MzsgbmV3dGFpbHJvb20sXG5uZXQvY29yZS9za2J1ZmYuYy0yNTIxLVx0XHRcdGdmcF9tYXNrLCBza2JfYWxsb2NfcnhfZmxhZyhza2IpLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTQ3Nzc9c3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50KHN0cnVjdCBza19idWZmICpoZWFkX3NrYixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy00OTQ0LVxubmV0L2NvcmUvc2tidWZmLmM6NDk0NTpcdFx0XHRuc2tiID0gX19hbGxvY19za2IoaHNpemUgJiM0MzsgZG9mZnNldCAmIzQzOyBoZWFkcm9vbSxcbm5ldC9jb3JlL3NrYnVmZi5jLTQ5NDYtXHRcdFx0XHRcdCAgIEdGUF9BVE9NSUMsIHNrYl9hbGxvY19yeF9mbGFnKGhlYWRfc2tiKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA1OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgYF9fYWxsb2Nfc2tiYCBpbXBsZW1lbnRhdGlvbjoKCioqRGl2aW5nIGludG8gYF9fYWxsb2Nfc2tiYCoqCgpPa2F5LCB0aW1lIHRvIGRpc3NlY3QgdGhlIGd1dHMgb2YgYF9fYWxsb2Nfc2tiYC4gTGV0JiMzOTtzIGFzc3VtZSB0aGVyZSBhcmUgcGVyZm9ybWFuY2UgaXNzdWVzLCBvciBtYXliZSBJJiMzOTttIGxvb2tpbmcgYXQgcG90ZW50aWFsIG1lbW9yeSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMgYW5kIGhvdyB0aGV5IGNhbiBiZSBvcHRpbWl6ZWQuIE15IGZpcnN0IHBvcnQgb2YgY2FsbCB3aWxsIGJlIHRvIGNoZWNrIG91dCBob3cgYF9fYWxsb2Nfc2tiYCBpcyBpbXBsZW1lbnRlZC4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGUgYXJjaGl0ZWN0dXJhbCBjb250ZXh0LiBXaGF0IGhhcmR3YXJlIGFtIEkgZGVhbGluZyB3aXRoPyBJcyB0aGlzIGEgc3lzdGVtIHdpdGggRE1BIGNhcGFiaWxpdGllcz8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBoaWdoLXRocm91Z2hwdXQgbmV0d29yayBjYXJkPyBUaGlzIHVuZGVyc3RhbmRpbmcgaXMgYWJzb2x1dGVseSBjcml0aWNhbCB0byBldmVuIGJlZ2luIHVuZGVyc3RhbmRpbmcgdGhlIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzIG9yIHBvdGVudGlhbCBpc3N1ZXMgaW4gdGhpcyBmdW5kYW1lbnRhbCBhbGxvY2F0aW9uIGZ1bmN0aW9uLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBpcyB0aGUgdW5kZXJseWluZyBtZW1vcnkgbWFuYWdlbWVudCBhIGZhY3Rvcj8gQXJlIHdlIHJ1bm5pbmcgd2l0aCBhIHN0YW5kYXJkIG1lbW9yeSBhbGxvY2F0b3IgbGlrZSBTTEFCLCBTTFVCLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZD8gVGhlIGNob2ljZSBvZiBhbGxvY2F0b3Igc2lnbmlmaWNhbnRseSBpbXBhY3RzIHBlcmZvcm1hbmNlLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IHBpZWNlIGZpcnN0LiBOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBjb2RlLi4uIHdoYXQmIzM5O3MgdGhlIGFsbG9jYXRpb24gc2l6ZT8gQXJlIHRoZXkgdXNpbmcgYSBjb21tb24gc2l6ZSwgYXJlIHRoZXJlIHNpemUgY2xhc3NlcywgaG93IGlzIHRoZSBhY3R1YWwgbWVtb3J5IGJlaW5nIHJldHJpZXZlZCBmcm9tIHRoZSBrZXJuZWw/IElzIHRoZXJlIGEgc3BpbmxvY2sgb3Igb3RoZXIgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbT8gSXMgaXQgZWZmaWNpZW50LCBvciBpcyBpdCBhIGJvdHRsZW5lY2s/IExldCYjMzk7cyBjaGVjayB0aGUgZmxhZ3MgcGFzc2VkIHRvIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb25zIOKAkyBgR0ZQXy4uLmAgZmxhZ3MgZ2l2ZSB1cyBjbHVlcyBhYm91dCBhbGxvY2F0aW9uIGJlaGF2aW9yIGFuZCBwcmlvcml0aWVzLiBEb2VzIGl0IGFnZ3Jlc3NpdmVseSB0cnkgdG8gYXZvaWQgZnJhZ21lbnRhdGlvbj8gSXMgdGhlcmUgYSBwb3RlbnRpYWwgZm9yIG1lbW9yeSBsZWFrcyBvciBvdGhlciBhbGxvY2F0aW9uIHByb2JsZW1zIEkgbmVlZCB0byBiZSBjb25jZXJuZWQgd2l0aD8gTGV0JiMzOTtzIHRyYWNlIHRocm91Z2ggdGhlIGxvZ2ljIGFuZCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGhvdHNwb3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjc0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NzQ6XHRzdHJ1Y3Qgc2tfYnVmZiAqX19hbGxvY19za2IodW5zaWduZWQgaW50IHNpemUsIGdmcF90IGdmcF9tYXNrLFxuIDY3NTpcdFx0XHRcdCAgICBpbnQgZmxhZ3MsIGludCBub2RlKVxuIDY3NjpcdHtcbiA2Nzc6XHRcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xuIDY3ODpcdFx0c3RydWN0IGttZW1fY2FjaGUgKmNhY2hlO1xuIDY3OTpcdFx0dTggKmRhdGE7XG4gNjgwOlx0XG4gNjgxOlx0XHRpZiAoc2tfbWVtYWxsb2Nfc29ja3MoKSBcdTAwMjZcdTAwMjYgKGZsYWdzIFx1MDAyNiBTS0JfQUxMT0NfUlgpKVxuIDY4MjpcdFx0XHRnZnBfbWFzayB8PSBfX0dGUF9NRU1BTExPQztcbiA2ODM6XHRcbiA2ODQ6XHRcdGlmIChmbGFncyBcdTAwMjYgU0tCX0FMTE9DX0ZDTE9ORSkge1xuIDY4NTpcdFx0XHRjYWNoZSA9IG5ldF9ob3RkYXRhLnNrYnVmZl9mY2xvbmVfY2FjaGU7XG4gNjg2Olx0XHRcdGdvdG8gZmFsbGJhY2s7XG4gNjg3Olx0XHR9XG4gNjg4Olx0XHRjYWNoZSA9IG5ldF9ob3RkYXRhLnNrYnVmZl9jYWNoZTtcbiA2ODk6XHRcdGlmICh1bmxpa2VseShub2RlICE9IE5VTUFfTk9fTk9ERSBcdTAwMjZcdTAwMjYgbm9kZSAhPSBudW1hX21lbV9pZCgpKSlcbiA2OTA6XHRcdFx0Z290byBmYWxsYmFjaztcbiA2OTE6XHRcbiA2OTI6XHRcdGlmIChmbGFncyBcdTAwMjYgU0tCX0FMTE9DX05BUEkpIHtcbiA2OTM6XHRcdFx0c2tiID0gbmFwaV9za2JfY2FjaGVfZ2V0KHRydWUpO1xuIDY5NDpcdFx0XHRpZiAodW5saWtlbHkoIXNrYikpXG4gNjk1Olx0XHRcdFx0cmV0dXJuIE5VTEw7XG4gNjk2Olx0XHR9IGVsc2UgaWYgKCFpbl9oYXJkaXJxKCkgXHUwMDI2XHUwMDI2ICFpcnFzX2Rpc2FibGVkKCkpIHtcbiA2OTc6XHRcdFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuIDY5ODpcdFx0XHRza2IgPSBuYXBpX3NrYl9jYWNoZV9nZXQoZmFsc2UpO1xuIDY5OTpcdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbiA3MDA6XHRcdH1cbiA3MDE6XHRcbiA3MDI6XHRcdGlmICghc2tiKSB7XG4gNzAzOlx0ZmFsbGJhY2s6XG4gNzA0Olx0XHRcdHNrYiA9IGttZW1fY2FjaGVfYWxsb2Nfbm9kZShjYWNoZSwgZ2ZwX21hc2sgXHUwMDI2IH5HRlBfRE1BLCBub2RlKTtcbiA3MDU6XHRcdFx0aWYgKHVubGlrZWx5KCFza2IpKVxuIDcwNjpcdFx0XHRcdHJldHVybiBOVUxMO1xuIDcwNzpcdFx0fVxuIDcwODpcdFx0c2tidWZmX2NsZWFyKHNrYik7XG4gNzA5Olx0XG4gNzEwOlx0XHQvKiBXZSBkbyBvdXIgYmVzdCB0byBhbGlnbiBza2Jfc2hhcmVkX2luZm8gb24gYSBzZXBhcmF0ZSBjYWNoZVxuIDcxMTpcdFx0ICogbGluZS4gSXQgdXN1YWxseSB3b3JrcyBiZWNhdXNlIGttYWxsb2MoWCBcdTAwM2UgU01QX0NBQ0hFX0JZVEVTKSBnaXZlc1xuIDcxMjpcdFx0ICogYWxpZ25lZCBtZW1vcnkgYmxvY2tzLCB1bmxlc3MgU0xVQi9TTEFCIGRlYnVnIGlzIGVuYWJsZWQuXG4gNzEzOlx0XHQgKiBCb3RoIHNrYi1cdTAwM2VoZWFkIGFuZCBza2Jfc2hhcmVkX2luZm8gYXJlIGNhY2hlIGxpbmUgYWxpZ25lZC5cbiA3MTQ6XHRcdCAqL1xuIDcxNTpcdFx0ZGF0YSA9IGttYWxsb2NfcmVzZXJ2ZShcdTAwMjZzaXplLCBnZnBfbWFzaywgbm9kZSwgc2tiKTtcbiA3MTY6XHRcdGlmICh1bmxpa2VseSghZGF0YSkpXG4gNzE3Olx0XHRcdGdvdG8gbm9kYXRhO1xuIDcxODpcdFx0Lyoga21hbGxvY19zaXplX3JvdW5kdXAoKSBtaWdodCBnaXZlIHVzIG1vcmUgcm9vbSB0aGFuIHJlcXVlc3RlZC5cbiA3MTk6XHRcdCAqIFB1dCBza2Jfc2hhcmVkX2luZm8gZXhhY3RseSBhdCB0aGUgZW5kIG9mIGFsbG9jYXRlZCB6b25lLFxuIDcyMDpcdFx0ICogdG8gYWxsb3cgbWF4IHBvc3NpYmxlIGZpbGxpbmcgYmVmb3JlIHJlYWxsb2NhdGlvbi5cbiA3MjE6XHRcdCAqL1xuIDcyMjpcdFx0X19maW5hbGl6ZV9za2JfYXJvdW5kKHNrYiwgZGF0YSwgc2l6ZSk7XG4gNzIzOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIwOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNjUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgc2tidWZmX2NsZWFyYCoqCgpPa2F5LCBzbyB0aGUgaW5zdHJ1Y3Rpb24gaXMgdG8gZXhhbWluZSBgc2tidWZmX2NsZWFyYC4gTmF0dXJhbGx5LCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIGl0cyBjb3JlIGZ1bmN0aW9uOiBjbGVhcmluZyBhIGBza2JgIChzb2NrZXQgYnVmZmVyKS4gTXkgZXhwZXJ0aXNlIGRpY3RhdGVzIHRoYXQgSSBuZWVkIHRvIGRpc3NlY3QgZXhhY3RseSAqaG93KiBpdCBjbGVhcnMgdGhlIHNrYi4gRG9lcyBpdCBzaW1wbHkgemVybyBvdXQgdGhlIG1lbW9yeT8gRG9lcyBpdCByZWxlYXNlIHJlc291cmNlcz8gRG9lcyBpdCBhZmZlY3QgdGhlIGNvbnRyb2wgc3RydWN0dXJlcyBpbiBhbnkgd2F5PyBUaGUgZ29hbCBpcyB0byBzZWUgcHJlY2lzZWx5IGhvdyB0aGUgc2tiIGlzIGJlaW5nIHB1cmdlZCwgc28gSSBuZWVkIHRvIGNoZWNrIGBza2J1ZmZfY2xlYXJgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza2J1ZmZfY2xlYXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYz0yODQ9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqbmFwaV9za2JfY2FjaGVfZ2V0KGJvb2wgYWxsb2MpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMzE1LSAqL1xubmV0L2NvcmUvc2tidWZmLmM6MzE2OnN0YXRpYyBpbmxpbmUgdm9pZCBza2J1ZmZfY2xlYXIoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9jb3JlL3NrYnVmZi5jLTMxNy17XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MzQ0PXUzMiBuYXBpX3NrYl9jYWNoZV9nZXRfYnVsayh2b2lkICoqc2ticywgdTMyIG4pXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMzc5LVx0XHRrYXNhbl9tZW1wb29sX3VucG9pc29uX29iamVjdChza2JzW2ldLCBza2J1ZmZfY2FjaGVfc2l6ZSk7XG5uZXQvY29yZS9za2J1ZmYuYzozODA6XHRcdHNrYnVmZl9jbGVhcihza2JzW2ldKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTM4MS1cdH1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz00Mzc9c3RydWN0IHNrX2J1ZmYgKnNsYWJfYnVpbGRfc2tiKHZvaWQgKmRhdGEpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNDQ2LVxubmV0L2NvcmUvc2tidWZmLmM6NDQ3Olx0c2tidWZmX2NsZWFyKHNrYik7XG5uZXQvY29yZS9za2J1ZmYuYy00NDgtXHRkYXRhID0gX19zbGFiX2J1aWxkX3NrYihkYXRhLCBcdTAwMjZzaXplKTtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz00OTA9c3RydWN0IHNrX2J1ZmYgKl9fYnVpbGRfc2tiKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBmcmFnX3NpemUpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNDk4LVxubmV0L2NvcmUvc2tidWZmLmM6NDk5Olx0c2tidWZmX2NsZWFyKHNrYik7XG5uZXQvY29yZS9za2J1ZmYuYy01MDAtXHRfX2J1aWxkX3NrYl9hcm91bmQoc2tiLCBkYXRhLCBmcmFnX3NpemUpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTU1Mj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKl9fbmFwaV9idWlsZF9za2Iodm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGZyYWdfc2l6ZSlcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy01NTktXG5uZXQvY29yZS9za2J1ZmYuYzo1NjA6XHRza2J1ZmZfY2xlYXIoc2tiKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTU2MS1cdF9fYnVpbGRfc2tiX2Fyb3VuZChza2IsIGRhdGEsIGZyYWdfc2l6ZSk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9Njc0PXN0cnVjdCBza19idWZmICpfX2FsbG9jX3NrYih1bnNpZ25lZCBpbnQgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNzA3LVx0fVxubmV0L2NvcmUvc2tidWZmLmM6NzA4Olx0c2tidWZmX2NsZWFyKHNrYik7XG5uZXQvY29yZS9za2J1ZmYuYy03MDktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIwOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwOTQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBgc2tidWZmX2NsZWFyYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBpbml0aWFsIHRob3VnaHQgaGVyZSwgJiMzNDtMZXQmIzM5O3MgcmVhZCBgc2tidWZmX2NsZWFyYCwmIzM0OyBpbmRpY2F0ZXMgYSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1lY2hhbmljcyBvZiB0aGF0IHNwZWNpZmljIGZ1bmN0aW9uLiBNeSBpbW1lZGlhdGUgYXNzdW1wdGlvbiBpcyB0aGF0IHdlIGFyZSBsb29raW5nIGF0IHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBMaW51eCBrZXJuZWwmIzM5O3MgbmV0d29ya2luZyBzdGFjaywgZ2l2ZW4gdGhlIGBza2J1ZmZgIHByZWZpeC4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB3ZSYjMzk7bGwgYmUgZGVhbGluZyB3aXRoIHRoZSBjb3JlIHN0cnVjdHVyZSB1c2VkIGZvciBtYW5hZ2luZyBuZXR3b3JrIHBhY2tldHMg4oCTIHRoZSBgc2tfYnVmZmAgc3RydWN0dXJlIGl0c2VsZi4KClRoZSBnb2FsIGlzIGxpa2VseSB0byBkZWNvbnN0cnVjdCBpdHMgb3BlcmF0aW9uOyB0byB1bmRlcnN0YW5kIHByZWNpc2VseSB3aGF0IGhhcHBlbnMgd2hlbiBhbiBgc2tidWZmYCBpbnN0YW5jZSBpcyAmIzM0O2NsZWFyZWQuJiMzNDsgVGhpcyBjb3VsZCBpbnZvbHZlIHplcm9pbmcgb3V0IG1lbW9yeSwgcmVsZWFzaW5nIGFzc29jaWF0ZWQgcmVzb3VyY2VzIGxpa2UgZGF0YSBidWZmZXJzIGFuZCBtZXRhZGF0YSwgcG9zc2libHkgdXBkYXRpbmcgaW50ZXJuYWwgZmxhZ3MsIGFuZCBtYXliZSBldmVuIHJldHVybmluZyB0aGUgYHNrYnVmZmAgdG8gYSBwb29sIGZvciByZXVzZS4gVGhlIHNwZWNpZmljcyBhcmUga2V5IGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgY2FsbHMgdG8gZnVuY3Rpb25zIGxpa2UgYGtmcmVlX3NrYmAsIGBza2JfcmVsZWFzZV9kYXRhYCwgYW55IG1hbmlwdWxhdGlvbiBvZiBgZGF0YWAsIGB0YWlsYCwgYGxlbmAsIGBoZWFkYCwgYG5leHRgLCBgcHJldmAgcG9pbnRlcnMsIGFuZCBhbnl0aGluZyByZWxhdGVkIHRvIHJlZmVyZW5jZSBjb3VudGluZy4KCk15IHByaW1hcnkgZm9jdXMgd2lsbCBiZSBvbiBlbnN1cmluZyBlZmZpY2llbnQgcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgcHJldmVudGluZyBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zLiBJJiMzOTtsbCBhbHNvIGJlIHdhdGNoaW5nIGZvciBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBpZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBjb25jdXJyZW50bHkgaW4gYSBtdWx0aS10aHJlYWRlZCBjb250ZXh0LiBBIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgaG93IGBza2J1ZmZfY2xlYXJgIGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBpbnRlcnJ1cHQgY29udGV4dHMgd2lsbCBiZSBjcnVjaWFsLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjb21tZW50cyB3aXRoaW4gdGhlIGNvZGUsIGFuZCBtYXliZSBhbHNvIGFueSByZWxhdGVkIGRvY3VtZW50YXRpb24sIHRvIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhlIGNob3NlbiBpbXBsZW1lbnRhdGlvbiwgcGFydGljdWxhcmx5IGlmIGFueSBvcHRpbWl6YXRpb25zIGFyZSBlbXBsb3llZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxNiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzE2Olx0c3RhdGljIGlubGluZSB2b2lkIHNrYnVmZl9jbGVhcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDMxNzpcdHtcbiAzMTg6XHRcdC8qIFJlcGxhY2UgbWVtc2V0KHNrYiwgMCwgb2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIHRhaWwpKVxuIDMxOTpcdFx0ICogd2l0aCB0d28gc21hbGxlciBtZW1zZXQoKSwgd2l0aCBhIGJhcnJpZXIoKSBiZXR3ZWVuIHRoZW0uXG4gMzIwOlx0XHQgKiBUaGlzIGZvcmNlcyB0aGUgY29tcGlsZXIgdG8gaW5saW5lIGJvdGggY2FsbHMuXG4gMzIxOlx0XHQgKi9cbiAzMjI6XHRcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3Qgc2tfYnVmZiwgdGFpbCkgXHUwMDNjPSAxMjgpO1xuIDMyMzpcdFx0bWVtc2V0KHNrYiwgMCwgMTI4KTtcbiAzMjQ6XHRcdGJhcnJpZXIoKTtcbiAzMjU6XHRcdG1lbXNldCgodm9pZCAqKXNrYiAmIzQzOyAxMjgsIDAsIG9mZnNldG9mKHN0cnVjdCBza19idWZmLCB0YWlsKSAtIDEyOCk7XG4gMzI2Olx0fVxuIDMyNzpcdFxuIDMyODpcdC8qKlxuIDMyOTpcdCAqIG5hcGlfc2tiX2NhY2hlX2dldF9idWxrIC0gb2J0YWluIGEgbnVtYmVyIG9mIHplcm9lZCBza2IgaGVhZHMgZnJvbSB0aGUgY2FjaGVcbiAzMzA6XHQgKiBAc2ticzogcG9pbnRlciB0byBhbiBhdCBsZWFzdCBAbi1zaXplZCBhcnJheSB0byBmaWxsIHdpdGggc2tiIHBvaW50ZXJzXG4gMzMxOlx0ICogQG46IG51bWJlciBvZiBlbnRyaWVzIHRvIHByb3ZpZGVcbiAzMzI6XHQgKlxuIDMzMzpcdCAqIFRyaWVzIHRvIG9idGFpbiBAbiBcdTAwMjZza19idWZmIGVudHJpZXMgZnJvbSB0aGUgTkFQSSBwZXJjcHUgY2FjaGUgYW5kIHdyaXRlc1xuIDMzNDpcdCAqIHRoZSBwb2ludGVycyBpbnRvIHRoZSBwcm92aWRlZCBhcnJheSBAc2ticy4gSWYgdGhlcmUgYXJlIGxlc3MgZW50cmllc1xuIDMzNTpcdCAqIGF2YWlsYWJsZSwgdHJpZXMgdG8gcmVwbGVuaXNoIHRoZSBjYWNoZSBhbmQgYnVsay1hbGxvY2F0ZXMgdGhlIGRpZmYgZnJvbVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODk1CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBCdWcgRml4KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgSSBzZWUgdGhlIGNvcmUgaXNzdWU6IGBza2ItJmd0O2RldmAgaXMgaW5pdGlhbGl6ZWQgdG8gTlVMTCB3aGVuIGBza2JuYCBpcyBhbGxvY2F0ZWQuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgc2ltcGxlIGxpbmU6IGBza2JuLSZndDtkZXYgPSBza2ItJmd0O2RldjtgLiBUaGF0JiMzOTtzIGp1c3QgYSBkaXJlY3QgcG9pbnRlciBjb3B5LCBncmFiYmluZyB0aGUgYGRldmAgcG9pbnRlciBmcm9tIHRoZSBvcmlnaW5hbCBgc2tiYCBhbmQgYXNzaWduaW5nIGl0IHRvIHRoZSBuZXcgYHNrYm5gLiBUaGlzIGlzIGNsZWFybHkgYSBmaXggZm9yIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlLiBUaGUgcHJvYmxlbSB3YXMgdGhhdCBgc2tibi0mZ3Q7ZGV2YCB3YXMgZXhwZWN0ZWQgdG8gYmUgc2V0LCBidXQgaXQgd2FzbiYjMzk7dCwgd2hpY2ggd2FzIGNhdXNpbmcgYSBjcmFzaC4KCk15IGluaXRpYWwgdGhvdWdodCB3YXMsICYjMzQ7V2FpdCwgaXMgdGhpcyBwb3RlbnRpYWxseSBhIHVzZS1hZnRlci1mcmVlIHNpdHVhdGlvbiwgd2hlcmUgYHNrYm4tJmd0O2RldmAgaXMgcG9pbnRpbmcgdG8gdW5pbml0aWFsaXplZCBtZW1vcnk/JiMzNDsgQnV0IHRoYXQmIzM5O3Mgbm90IGl0LiBJdCYjMzk7cyBhIHBvaW50ZXIgdG8gYSBgbmV0X2RldmljZWAgc3RydWN0dXJlLiBUaGlzIGlzIGFsbCBhYm91dCBlbnN1cmluZyB0aGUgYG5ldF9kZXZpY2VgIHBvaW50ZXIgaXMgdmFsaWQuIE5vdyBJIG5lZWQgdG8gc2VlIHdoZXJlIGBybW5ldF9tYXBfZGVhZ2dyZWdhdGVgIGlzIGNhbGxlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgZml4IGFuZCBleGFjdGx5IGhvdyBgc2tibi0mZ3Q7ZGV2YCBpcyB1c2VkLCBhbmQgd2h5IGl0JiMzOTtzIHNvIGltcG9ydGFudCBpbiB0aGF0IGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIwOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JtbmV0X21hcF9kZWFnZ3JlZ2F0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9oYW5kbGVycy5jPTEwOT1ybW5ldF9tYXBfaW5ncmVzc19oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYy0xMjMtXHRpZiAocG9ydC1cdTAwM2VkYXRhX2Zvcm1hdCBcdTAwMjYgUk1ORVRfRkxBR1NfSU5HUkVTU19ERUFHR1JFR0FUSU9OKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9oYW5kbGVycy5jOjEyNDpcdFx0d2hpbGUgKChza2JuID0gcm1uZXRfbWFwX2RlYWdncmVnYXRlKHNrYiwgcG9ydCkpICE9IE5VTEwpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9oYW5kbGVycy5jLTEyNS1cdFx0XHRfX3JtbmV0X21hcF9pbmdyZXNzX2hhbmRsZXIoc2tibiwgcG9ydCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwLmg9MjY9ZW51bSBybW5ldF9tYXBfY29tbWFuZHMge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcC5oLTQyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwLmg6NDM6c3RydWN0IHNrX2J1ZmYgKnJtbmV0X21hcF9kZWFnZ3JlZ2F0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwLmgtNDQtXHRcdFx0XHQgICAgICBzdHJ1Y3Qgcm1uZXRfcG9ydCAqcG9ydCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuYz0zMzY9dTMyIHJtbmV0X21hcF92YWxpZGF0ZV9wYWNrZXRfbGVuKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBybW5ldF9wb3J0ICpwb3J0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmMtMzgyLSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuYzozODM6c3RydWN0IHNrX2J1ZmYgKnJtbmV0X21hcF9kZWFnZ3JlZ2F0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuYy0zODQtXHRcdFx0XHQgICAgICBzdHJ1Y3Qgcm1uZXRfcG9ydCAqcG9ydClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjA6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg2MgoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZywgZXhwcmVzc2VkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBfX3JtbmV0X21hcF9pbmdyZXNzX2hhbmRsZXJgKioKCk9rYXksIGxldCYjMzk7cyBkaXNzZWN0IGBfX3JtbmV0X21hcF9pbmdyZXNzX2hhbmRsZXJgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBSTU5FVCBhcmNoaXRlY3R1cmUsIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyBpbmJvdW5kIHRyYWZmaWMuIFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGl0JiMzOTtzIGludGVyYWN0aW5nIHdpdGg/IEFyZSB3ZSB0YWxraW5nIGFib3V0IHBhY2tldCBoZWFkZXJzLCByb3V0aW5nIHRhYmxlcywgY29ubmVjdGlvbiB0cmFja2luZywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBwb2ludHMgb2YgaW5ncmVzcyAtIHdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gZ2V0dGluZyBjYWxsZWQgZnJvbSwgYW5kIHdoYXQga2luZCBvZiBjb250ZXh0IGlzIGl0IHJlY2VpdmluZz8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgY29uY3VycmVuY3kgaXNzdWVzIHRoYXQganVtcCBvdXQgaW1tZWRpYXRlbHk/IEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGNvcmUgbG9naWM6IHRoZSBkZWNpc2lvbi1tYWtpbmcgcHJvY2VzcyB3aXRoaW4gdGhpcyBoYW5kbGVyLiBJcyBpdCBwZXJmb3JtaW5nIGxvb2t1cHMsIG1vZGlmeWluZyBwYWNrZXRzLCBmb3J3YXJkaW5nIHRvIG90aGVyIGZ1bmN0aW9ucywgb3IgcGVyaGFwcyBtYW5hZ2luZyBRb1Mgb3Igc2VjdXJpdHkgZmVhdHVyZXM/IEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IGJ5IGxvb2tpbmcgYXQgaXRzIGFyZ3VtZW50cyBhbmQgcmV0dXJuIHZhbHVlcyB0byBnZXQgYSBzZW5zZSBvZiBpdHMgaW5wdXQgYW5kIG91dHB1dC4gSSYjMzk7bGwgbmVlZCB0byBjb3JyZWxhdGUgdGhpcyBmdW5jdGlvbiB3aXRoIG90aGVyIHJlbGF0ZWQgY29kZSB0byBidWlsZCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgaXRzIHB1cnBvc2UgYW5kIGltcGFjdCBvbiB0aGUgZGF0YSBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3JtbmV0X21hcF9pbmdyZXNzX2hhbmRsZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9oYW5kbGVycy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X2hhbmRsZXJzLmM9NTU9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X2hhbmRsZXJzLmM6NTY6X19ybW5ldF9tYXBfaW5ncmVzc19oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9oYW5kbGVycy5jLTU3LVx0XHRcdCAgICBzdHJ1Y3Qgcm1uZXRfcG9ydCAqcG9ydClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9oYW5kbGVycy5jPTEwOT1ybW5ldF9tYXBfaW5ncmVzc19oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYy0xMjQtXHRcdHdoaWxlICgoc2tibiA9IHJtbmV0X21hcF9kZWFnZ3JlZ2F0ZShza2IsIHBvcnQpKSAhPSBOVUxMKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYzoxMjU6XHRcdFx0X19ybW5ldF9tYXBfaW5ncmVzc19oYW5kbGVyKHNrYm4sIHBvcnQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYy0xMjYtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYy0xMjktXHRcdGlmIChybW5ldF9tYXBfdmFsaWRhdGVfcGFja2V0X2xlbihza2IsIHBvcnQpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYzoxMzA6XHRcdFx0X19ybW5ldF9tYXBfaW5ncmVzc19oYW5kbGVyKHNrYiwgcG9ydCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9oYW5kbGVycy5jLTEzMS1cdFx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU0NQoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgX19ybW5ldF9tYXBfaW5ncmVzc19oYW5kbGVyYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gVGhlIG5hbWUgYWxvbmUsIGBfX3JtbmV0X21hcF9pbmdyZXNzX2hhbmRsZXJgLCBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGFuIGluZ3Jlc3MgaGFuZGxlciB3aXRoaW4gdGhlIFJNTkVUIGZyYW1ld29yay4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIGl0cyBwbGFjZSBpbiB0aGUgb3ZlcmFsbCBkYXRhIGZsb3cuIFRoaXMgbGlrZWx5IG1lYW5zIGl0IHNpdHMgYmV0d2VlbiB0aGUgbmV0d29yayBpbnRlcmZhY2UgKHByb2JhYmx5IHNvbWV0aGluZyBsaWtlIGEgUXVhbGNvbW0mIzM5O3MgUk1ORVQpIGFuZCBzb21lIGludGVybmFsIGRhdGEgc3RydWN0dXJlIG9yIHByb2Nlc3Npbmcgc3RhZ2UuCgpJ4oCZbSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSByZXNwb25zaWJsZSBmb3IgdGFraW5nIGluY29taW5nIHBhY2tldHMg4oCTIGxpa2VseSBFdGhlcm5ldCBmcmFtZXMgb3IgSVAgcGFja2V0cyBlbmNhcHN1bGF0ZWQgd2l0aGluIFJNTkVULXNwZWNpZmljIHByb3RvY29scyDigJMgYW5kIHBlcmZvcm1pbmcgYW55IG5lY2Vzc2FyeSB0cmFuc2Zvcm1hdGlvbnMgb3IgbG9va3VwcyBiZWZvcmUgcGFzc2luZyB0aGVtIG9uLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgY291bGQgaW5jbHVkZSB0aGluZ3MgbGlrZToKCiogICAqKkhlYWRlciBkZWNvZGluZy9pbnRlcnByZXRhdGlvbjoqKiBQYXJzaW5nIFJNTkVUIGhlYWRlcnMsIHBvdGVudGlhbGx5IHN0cmlwcGluZyB0aGVtLCBhbmQgZXhwb3NpbmcgdGhlIHVuZGVybHlpbmcgbmV0d29yayBsYXllciBpbmZvcm1hdGlvbi4KKiAgICoqQWRkcmVzcyB0cmFuc2xhdGlvbi9tYXBwaW5nOioqIENvbnZlcnRpbmcgdmlydHVhbCBvciB0dW5uZWwgYWRkcmVzc2VzIHRvIHBoeXNpY2FsIGFkZHJlc3Nlcywgd2hpY2ggaXMgY29tbW9uIGluIFJNTkVUIGVudmlyb25tZW50cyBmb3IgbW9iaWxlIGRhdGEuCiogICAqKkZsb3cgY2xhc3NpZmljYXRpb24vaWRlbnRpZmljYXRpb246KiogSWRlbnRpZnlpbmcgdGhlIGZsb3cgb3IgYXBwbGljYXRpb24gdGhpcyBwYWNrZXQgYmVsb25ncyB0bywgcGVyaGFwcyB1c2luZyBzb21lIHNvcnQgb2YgaGFzaCBvciBsb29rdXAgdGFibGUuCiogICAqKlJhdGUgbGltaXRpbmcvUW9TOioqIEltcGxlbWVudGluZyBhbnkgYmFzaWMgcmF0ZSBsaW1pdGluZyBvciBxdWFsaXR5IG9mIHNlcnZpY2UgcnVsZXMgYmVmb3JlIHRoZSBwYWNrZXQgbW92ZXMgdG8gb3RoZXIgcGFydHMgb2YgdGhlIG5ldHdvcmsgc3RhY2suCiogICAqKkVycm9yIGhhbmRsaW5nL3ZhbGlkYXRpb246KiogQ2hlY2tpbmcgZm9yIG1hbGZvcm1lZCBwYWNrZXRzIG9yIHVuZXhwZWN0ZWQgZGF0YSBhbmQgaGFuZGxpbmcgdGhlbSwgcGVyaGFwcyBsb2dnaW5nIGVycm9ycyBvciBkcm9wcGluZyB0aGVtLgoqICAgKipTZWN1cml0eSBjaGVjazoqKiBTb21lIGJhc2ljIHNlY3VyaXR5IGNoZWNrIHN1Y2ggYXMgZmlsdGVyaW5nIG1hbGZvcm1lZCBwYWNrZXRzLgoqICAgKipGb3J3YXJkaW5nIHBhY2tldHM6KiogQmFzZWQgb24gdGhlIGluZm9ybWF0aW9uIGZyb20gYWJvdmUuCgpJ4oCZbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCB1c2VzLCBwYXJ0aWN1bGFybHkgaWYgaXQgaW50ZXJmYWNlcyB3aXRoIG90aGVyIFJNTkVUIGNvbXBvbmVudHMgbGlrZSB0aGUgYHJtbmV0X21hcGAgdGFibGVzIG9yIHRoZSBpbnRlcm5hbCBidWZmZXIgbWFuYWdlbWVudC4gQXJlIHRoZXJlIGFueSBtdXRleGVzIG9yIGxvY2tzIGluIHBsYXk/IENvbmN1cnJlbmN5IGlzIGFsd2F5cyBhIGNvbmNlcm4uIEkmIzM5O20gYWxzbyBjdXJpb3VzIGFib3V0IGl0cyBlcnJvciBoYW5kbGluZyDigJMgZG9lcyBpdCBqdXN0IGxvZyBlcnJvcnMsIHBhbmljLCBvciBhdHRlbXB0IHRvIHJlY292ZXI/CgpJbiBzaG9ydCwgSSYjMzk7bSBleHBlY3RpbmcgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgZGF0YSBwbGFuZSwgYW5kIEkmIzM5O20gcmVhZHkgdG8gZmlndXJlIG91dCBleGFjdGx5IGhvdyBpdCBmaXRzIGludG8gdGhlIFJNTkVUIHBpY3R1cmUuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgaW5ncmVzcyBzaWRlLCBhbmQgaG93IHBhY2tldHMgZW50ZXIgaW50byB0aGUgc3lzdGVtLiBMZXQmIzM5O3Mgc2VlIHdoYXTigJlzIGluc2lkZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9oYW5kbGVycy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1NTpcdHN0YXRpYyB2b2lkXG4gIDU2Olx0X19ybW5ldF9tYXBfaW5ncmVzc19oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsXG4gIDU3Olx0XHRcdFx0ICAgIHN0cnVjdCBybW5ldF9wb3J0ICpwb3J0KVxuICA1ODpcdHtcbiAgNTk6XHRcdHN0cnVjdCBybW5ldF9tYXBfaGVhZGVyICptYXBfaGVhZGVyID0gKHZvaWQgKilza2ItXHUwMDNlZGF0YTtcbiAgNjA6XHRcdHN0cnVjdCBybW5ldF9lbmRwb2ludCAqZXA7XG4gIDYxOlx0XHR1MTYgbGVuLCBwYWQ7XG4gIDYyOlx0XHR1OCBtdXhfaWQ7XG4gIDYzOlx0XG4gIDY0Olx0XHRpZiAobWFwX2hlYWRlci1cdTAwM2VmbGFncyBcdTAwMjYgTUFQX0NNRF9GTEFHKSB7XG4gIDY1Olx0XHRcdC8qIFBhY2tldCBjb250YWlucyBhIE1BUCBjb21tYW5kIChub3QgZGF0YSkgKi9cbiAgNjY6XHRcdFx0aWYgKHBvcnQtXHUwMDNlZGF0YV9mb3JtYXQgXHUwMDI2IFJNTkVUX0ZMQUdTX0lOR1JFU1NfTUFQX0NPTU1BTkRTKVxuICA2NzpcdFx0XHRcdHJldHVybiBybW5ldF9tYXBfY29tbWFuZChza2IsIHBvcnQpO1xuICA2ODpcdFxuICA2OTpcdFx0XHRnb3RvIGZyZWVfc2tiO1xuICA3MDpcdFx0fVxuICA3MTpcdFxuICA3MjpcdFx0bXV4X2lkID0gbWFwX2hlYWRlci1cdTAwM2VtdXhfaWQ7XG4gIDczOlx0XHRwYWQgPSBtYXBfaGVhZGVyLVx1MDAzZWZsYWdzIFx1MDAyNiBNQVBfUEFEX0xFTl9NQVNLO1xuICA3NDpcdFx0bGVuID0gbnRvaHMobWFwX2hlYWRlci1cdTAwM2Vwa3RfbGVuKSAtIHBhZDtcbiAgNzU6XHRcbiAgNzY6XHRcdGlmIChtdXhfaWQgXHUwMDNlPSBSTU5FVF9NQVhfTE9HSUNBTF9FUClcbiAgNzc6XHRcdFx0Z290byBmcmVlX3NrYjtcbiAgNzg6XHRcbiAgNzk6XHRcdGVwID0gcm1uZXRfZ2V0X2VuZHBvaW50KHBvcnQsIG11eF9pZCk7XG4gIDgwOlx0XHRpZiAoIWVwKVxuICA4MTpcdFx0XHRnb3RvIGZyZWVfc2tiO1xuICA4MjpcdFxuICA4MzpcdFx0c2tiLVx1MDAzZWRldiA9IGVwLVx1MDAzZWVncmVzc19kZXY7XG4gIDg0Olx0XG4gIDg1Olx0XHRpZiAoKHBvcnQtXHUwMDNlZGF0YV9mb3JtYXQgXHUwMDI2IFJNTkVUX0ZMQUdTX0lOR1JFU1NfTUFQX0NLU1VNVjUpIFx1MDAyNlx1MDAyNlxuICA4NjpcdFx0ICAgIChtYXBfaGVhZGVyLVx1MDAzZWZsYWdzIFx1MDAyNiBNQVBfTkVYVF9IRUFERVJfRkxBRykpIHtcbiAgODc6XHRcdFx0aWYgKHJtbmV0X21hcF9wcm9jZXNzX25leHRfaGRyX3BhY2tldChza2IsIGxlbikpXG4gIDg4Olx0XHRcdFx0Z290byBmcmVlX3NrYjtcbiAgODk6XHRcdFx0c2tiX3B1bGwoc2tiLCBzaXplb2YoKm1hcF9oZWFkZXIpKTtcbiAgOTA6XHRcdFx0cm1uZXRfc2V0X3NrYl9wcm90byhza2IpO1xuICA5MTpcdFx0fSBlbHNlIHtcbiAgOTI6XHRcdFx0LyogU3VidHJhY3QgTUFQIGhlYWRlciAqL1xuICA5MzpcdFx0XHRza2JfcHVsbChza2IsIHNpemVvZigqbWFwX2hlYWRlcikpO1xuICA5NDpcdFx0XHRybW5ldF9zZXRfc2tiX3Byb3RvKHNrYik7XG4gIDk1Olx0XHRcdGlmIChwb3J0LVx1MDAzZWRhdGFfZm9ybWF0IFx1MDAyNiBSTU5FVF9GTEFHU19JTkdSRVNTX01BUF9DS1NVTVY0IFx1MDAyNlx1MDAyNlxuICA5NjpcdFx0XHQgICAgIXJtbmV0X21hcF9jaGVja3N1bV9kb3dubGlua19wYWNrZXQoc2tiLCBsZW4gJiM0MzsgcGFkKSlcbiAgOTc6XHRcdFx0XHRza2ItXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7XG4gIDk4Olx0XHR9XG4gIDk5Olx0XG4gMTAwOlx0XHRza2JfdHJpbShza2IsIGxlbik7XG4gMTAxOlx0XHRybW5ldF9kZWxpdmVyX3NrYihza2IpO1xuIDEwMjpcdFx0cmV0dXJuO1xuIDEwMzpcdFxuIDEwNDpcdGZyZWVfc2tiOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg4NAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUk1ORVQgSW5ncmVzcyBIYW5kbGVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYF9fcm1uZXRfbWFwX2luZ3Jlc3NfaGFuZGxlcmAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBsaW5lIDgzIHdoZXJlIGBza2ItJmd0O2RldmAgZ2V0cyBhc3NpZ25lZCB0byBgZXAtJmd0O2VncmVzc19kZXZgLiBUaGlzIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBUaGUga2V5IGlzIHdoYXQgaGFwcGVucyAqYmVmb3JlKiB0aGF0IGFzc2lnbm1lbnQsIGFuZCBJJiMzOTttIHByZXR0eSBzdXJlIGBybW5ldF9tYXBfY29tbWFuZChza2IsIHBvcnQpYCBnZXRzIGNhbGxlZCBmaXJzdC4gVGhhdCYjMzk7cyB0aGUgcGFydCBJIG5lZWQgdG8gc2NydXRpbml6ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBybW5ldF9tYXBfY29tbWFuZGAgbWlnaHQgaW50ZXJhY3Qgd2l0aCB0aGUgYHNrYmAgYW5kIGluZmx1ZW5jZSB0aGUgYHNrYi0mZ3Q7ZGV2YCBhc3NpZ25tZW50IGRvd24gdGhlIGxpbmUuIEl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBpZiB0aGF0IGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSBgc2tiYCBpbiBhbnkgd2F5IHRoYXQgd291bGQgaW1wYWN0IGhvdyB0aGUgYGVncmVzc19kZXZgIGlzIHVzZWQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGxvZ2ljIHdpdGhpbiBgcm1uZXRfbWFwX2NvbW1hbmRgIGNhcmVmdWxseSB0byBzZWUgaWYgYW55IHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzIGNvdWxkIG9jY3VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtybW5ldF9tYXBfY29tbWFuZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9NYWtlZmlsZT05PXJtbmV0LXlcdFx0ICYjNDM7PSBybW5ldF9tYXBfZGF0YS5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9NYWtlZmlsZToxMDpybW5ldC15XHRcdCAmIzQzOz0gcm1uZXRfbWFwX2NvbW1hbmQub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvTWFrZWZpbGUtMTEtb2JqLSQoQ09ORklHX1JNTkVUKSAmIzQzOz0gcm1uZXQub1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X2hhbmRsZXJzLmM9NTY9X19ybW5ldF9tYXBfaW5ncmVzc19oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYy02Ni1cdFx0aWYgKHBvcnQtXHUwMDNlZGF0YV9mb3JtYXQgXHUwMDI2IFJNTkVUX0ZMQUdTX0lOR1JFU1NfTUFQX0NPTU1BTkRTKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYzo2NzpcdFx0XHRyZXR1cm4gcm1uZXRfbWFwX2NvbW1hbmQoc2tiLCBwb3J0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X2hhbmRsZXJzLmMtNjgtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwLmg9OT1zdHJ1Y3Qgcm1uZXRfbWFwX2NvbnRyb2xfY29tbWFuZCB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwLmgtMjUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXAuaDoyNjplbnVtIHJtbmV0X21hcF9jb21tYW5kcyB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXAuaC0yNy1cdFJNTkVUX01BUF9DT01NQU5EX05PTkUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwLmg9NDU9c3RydWN0IHJtbmV0X21hcF9oZWFkZXIgKnJtbmV0X21hcF9hZGRfbWFwX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcC5oLTQ4LVx0XHRcdFx0XHRcdCAgaW50IHBhZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXAuaDo0OTp2b2lkIHJtbmV0X21hcF9jb21tYW5kKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBybW5ldF9wb3J0ICpwb3J0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcC5oLTUwLWludCBybW5ldF9tYXBfY2hlY2tzdW1fZG93bmxpbmtfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHUxNiBsZW4pO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9jb21tYW5kLmM9NDk9c3RhdGljIHZvaWQgcm1uZXRfbWFwX3NlbmRfYWNrKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2NvbW1hbmQuYy03NC0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9jb21tYW5kLmM6NzU6dm9pZCBybW5ldF9tYXBfY29tbWFuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgcm1uZXRfcG9ydCAqcG9ydClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9jb21tYW5kLmMtNzYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjkzMAoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFRhc2sqKgoKQWxyaWdodCwgdGhlIGRpcmVjdGl2ZSBpcyB0byBhbmFseXplIHRoZSBtZW50YWwgcHJvY2VzcyByZXZvbHZpbmcgYXJvdW5kIHRoZSBjb21tYW5kIGBybW5ldF9tYXBfY29tbWFuZGAuIE15IGltbWVkaWF0ZSByZWFjdGlvbiBpcyBhIGJsZW5kIG9mIGFuYWx5dGljYWwgY3VyaW9zaXR5IGFuZCBwcm9mZXNzaW9uYWwgcHJhZ21hdGlzbS4gSSYjMzk7bSBwcmVzZW50ZWQgd2l0aCBhIHBvdGVudGlhbGx5IGNvbXBsZXggY29tbWFuZCwgYW5kIHRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0IGl0cyBleGVjdXRpb24gb3IgZnVuY3Rpb24gaXMgYmVpbmcgc2NydXRpbml6ZWQuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIHdvdWxkIGltbWVkaWF0ZWx5IGJlZ2luIHdpdGggY29uc2lkZXJhdGlvbnMgc3VjaCBhczogJiMzNDtXaGF0IGlzIHRoZSBjb250ZXh0PyBXaGVyZSBpcyB0aGlzIGNvbW1hbmQgdXNlZD8gSXMgaXQgYSBzY3JpcHQsIGFuIGFwcGxpY2F0aW9uIG1vZHVsZSwgb3IgcGFydCBvZiBhIGxhcmdlciBzeXN0ZW0/IFdoYXQgYXJjaGl0ZWN0dXJlIGlzIGl0IGRlc2lnbmVkIGZvcj8mIzM0OyBJJiMzOTttIG1lbnRhbGx5IHBhcnNpbmcgdGhlIGltcGxpZWQgdGFzaywgZXhwZWN0aW5nIHRvIGRlbHZlIGludG8gaXRzIGZ1bmN0aW9uYWxpdHksIHBvdGVudGlhbCBpc3N1ZXMsIGFuZCBvcHRpbWl6YXRpb24gc3RyYXRlZ2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXBfY29tbWFuZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA3NTpcdHZvaWQgcm1uZXRfbWFwX2NvbW1hbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHJtbmV0X3BvcnQgKnBvcnQpXG4gIDc2Olx0e1xuICA3NzpcdFx0c3RydWN0IHJtbmV0X21hcF9oZWFkZXIgKm1hcF9oZWFkZXIgPSAodm9pZCAqKXNrYi1cdTAwM2VkYXRhO1xuICA3ODpcdFx0c3RydWN0IHJtbmV0X21hcF9jb250cm9sX2NvbW1hbmQgKmNtZDtcbiAgNzk6XHRcdHVuc2lnbmVkIGNoYXIgY29tbWFuZF9uYW1lO1xuICA4MDpcdFx0dW5zaWduZWQgY2hhciByYyA9IDA7XG4gIDgxOlx0XG4gIDgyOlx0XHQvKiBDb21tYW5kIGRhdGEgaW1tZWRpYXRlbHkgZm9sbG93cyB0aGUgTUFQIGhlYWRlciAqL1xuICA4MzpcdFx0Y21kID0gKHN0cnVjdCBybW5ldF9tYXBfY29udHJvbF9jb21tYW5kICopKG1hcF9oZWFkZXIgJiM0MzsgMSk7XG4gIDg0Olx0XHRjb21tYW5kX25hbWUgPSBjbWQtXHUwMDNlY29tbWFuZF9uYW1lO1xuICA4NTpcdFxuICA4NjpcdFx0c3dpdGNoIChjb21tYW5kX25hbWUpIHtcbiAgODc6XHRcdGNhc2UgUk1ORVRfTUFQX0NPTU1BTkRfRkxPV19FTkFCTEU6XG4gIDg4Olx0XHRcdHJjID0gcm1uZXRfbWFwX2RvX2Zsb3dfY29udHJvbChza2IsIHBvcnQsIDEpO1xuICA4OTpcdFx0XHRicmVhaztcbiAgOTA6XHRcbiAgOTE6XHRcdGNhc2UgUk1ORVRfTUFQX0NPTU1BTkRfRkxPV19ESVNBQkxFOlxuICA5MjpcdFx0XHRyYyA9IHJtbmV0X21hcF9kb19mbG93X2NvbnRyb2woc2tiLCBwb3J0LCAwKTtcbiAgOTM6XHRcdFx0YnJlYWs7XG4gIDk0Olx0XG4gIDk1Olx0XHRkZWZhdWx0OlxuICA5NjpcdFx0XHRyYyA9IFJNTkVUX01BUF9DT01NQU5EX1VOU1VQUE9SVEVEO1xuICA5NzpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAgOTg6XHRcdFx0YnJlYWs7XG4gIDk5Olx0XHR9XG4gMTAwOlx0XHRpZiAocmMgPT0gUk1ORVRfTUFQX0NPTU1BTkRfQUNLKVxuIDEwMTpcdFx0XHRybW5ldF9tYXBfc2VuZF9hY2soc2tiLCByYywgcG9ydCk7XG4gMTAyOlx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzU4MQoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYHJtbmV0X21hcF9zZW5kX2Fja2AqKgoKT2theSwgdGltZSB0byB6ZXJvIGluIG9uIGBybW5ldF9tYXBfc2VuZF9hY2tgLiBUaGF0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGZvciBhY2tub3dsZWRnaW5nIFJNTkVUIHBhY2tldHMsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgbWVjaGFuaWNzIHRob3JvdWdobHkuIFdoYXQmIzM5O3MgdGhlIGNvbnRleHQgaGVyZT8gSXMgaXQgcmVsYXRlZCB0byBhIHNwZWNpZmljIFJNTkVUIGltcGxlbWVudGF0aW9uLCBvciBpcyBpdCBtb3JlIGdlbmVyaWM/IEFyZSB3ZSBkZWFsaW5nIHdpdGggcmVsaWFibGUgb3IgdW5yZWxpYWJsZSB0cmFuc3BvcnQ/IEkgYmV0IGl0JiMzOTtzIGludm9sdmVkIGluIHRoZSBjb250cm9sIHBsYW5lIHRvIHNvbWUgZGVncmVlLgoKRmlyc3QsIEkmIzM5O2xsIHByb2JhYmx5IGxvb2sgZm9yIGl0cyBkZWZpbml0aW9uIGFuZCBhbnkgYXNzb2NpYXRlZCBkYXRhIHN0cnVjdHVyZXMgbGlrZSBidWZmZXJzIG9yIHF1ZXVlcyB0aGF0IGl0IG1hbmlwdWxhdGVzLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNpbXBsZSBBQ0sgb3Igc29tZXRoaW5nIG1vcmUgaW52b2x2ZWQsIGxpa2UgYSBzZWxlY3RpdmUgQUNLIHdpdGggcmV0cmFuc21pc3Npb24gdGltZXJzPyBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCB0aGUgUk1ORVQgcHJvdG9jb2wgdmVyc2lvbiBpcyBhdCBhIGxvdyBsZXZlbCB0byB1bmRlcnN0YW5kIGFueSBzcGVjaWZpYyBzdWJ0bGV0aWVzIGluIHRoZSBpbXBsZW1lbnRhdGlvbi4KCkkgYWxzbyBuZWVkIHRvIHNlZSB3aGVyZSBpdCYjMzk7cyAqY2FsbGVkKiBmcm9tLiBLbm93aW5nIHRoZSBjYWxsIHN0YWNrIHdpbGwgZ2l2ZSBtZSBjbHVlcyBhYm91dCB0aGUgZmxvdyBvZiBkYXRhIGFuZCBjb250cm9sLiBBcmUgd2UgcmVzcG9uZGluZyB0byBhIHJlY2VpdmVkIFJNTkVUIG1lc3NhZ2UsIG9yIGlzIHRoaXMgbW9yZSBwcm9hY3RpdmU/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBJIHNob3VsZCBiZSBvbiB0aGUgbG9va291dCBmb3I/IEkmIzM5O2xsIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLCBtdXRleGVzLCBvciBhdG9taWMgb3BlcmF0aW9ucy4KCk9uY2UgSSBoYXZlIGEgZ29vZCBncmFzcCBvZiB0aGUgY29kZSBpdHNlbGYsIEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXIgcGVyZm9ybWFuY2UuIElzIHRoaXMgZnVuY3Rpb24gb24gdGhlIGNyaXRpY2FsIHBhdGg/IENvdWxkIGl0IGJlIGEgYm90dGxlbmVjaz8gSSBtaWdodCBuZWVkIHRvIGNvbnNpZGVyIGhvdyB0byBoYW5kbGUgdGhpbmdzIGRpZmZlcmVudGx5IGJhc2VkIG9uIGJ1ZmZlciBzaXplcyBvciBvdmVyYWxsIG5ldHdvcmsgY29uZGl0aW9ucy4gQXJlIHRoZXJlIGFueSBsb2dnaW5nIG9yIGRlYnVnZ2luZyBmZWF0dXJlcyBidWlsdCBpbj8gVGhhdCB3b3VsZCBiZSB2ZXJ5IGhlbHBmdWwuCgpFc3NlbnRpYWxseSwgSSB3YW50IHRvIG1hcCBvdXQgdGhlIGVudGlyZSBsaWZlY3ljbGUgb2YgdGhpcyBhY2tub3dsZWRnbWVudCwgdG9wIHRvIGJvdHRvbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjA6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXBfY29tbWFuZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0OTpcdHN0YXRpYyB2b2lkIHJtbmV0X21hcF9zZW5kX2FjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuICA1MDpcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBjaGFyIHR5cGUsXG4gIDUxOlx0XHRcdFx0ICAgICAgIHN0cnVjdCBybW5ldF9wb3J0ICpwb3J0KVxuICA1MjpcdHtcbiAgNTM6XHRcdHN0cnVjdCBybW5ldF9tYXBfaGVhZGVyICptYXBfaGVhZGVyID0gKHZvaWQgKilza2ItXHUwMDNlZGF0YTtcbiAgNTQ6XHRcdHN0cnVjdCBybW5ldF9tYXBfY29udHJvbF9jb21tYW5kICpjbWQ7XG4gIDU1Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLVx1MDAzZWRldjtcbiAgNTY6XHRcbiAgNTc6XHRcdGlmIChwb3J0LVx1MDAzZWRhdGFfZm9ybWF0IFx1MDAyNiBSTU5FVF9GTEFHU19JTkdSRVNTX01BUF9DS1NVTVY0KVxuICA1ODpcdFx0XHRza2JfdHJpbShza2IsXG4gIDU5Olx0XHRcdFx0IHNrYi1cdTAwM2VsZW4gLSBzaXplb2Yoc3RydWN0IHJtbmV0X21hcF9kbF9jc3VtX3RyYWlsZXIpKTtcbiAgNjA6XHRcbiAgNjE6XHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX01BUCk7XG4gIDYyOlx0XG4gIDYzOlx0XHQvKiBDb21tYW5kIGRhdGEgaW1tZWRpYXRlbHkgZm9sbG93cyB0aGUgTUFQIGhlYWRlciAqL1xuICA2NDpcdFx0Y21kID0gKHN0cnVjdCBybW5ldF9tYXBfY29udHJvbF9jb21tYW5kICopKG1hcF9oZWFkZXIgJiM0MzsgMSk7XG4gIDY1Olx0XHRjbWQtXHUwMDNlY21kX3R5cGUgPSB0eXBlIFx1MDAyNiAweDAzO1xuICA2NjpcdFxuICA2NzpcdFx0bmV0aWZfdHhfbG9jayhkZXYpO1xuICA2ODpcdFx0ZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX3N0YXJ0X3htaXQoc2tiLCBkZXYpO1xuICA2OTpcdFx0bmV0aWZfdHhfdW5sb2NrKGRldik7XG4gIDcwOlx0fVxuICA3MTpcdFxuICA3MjpcdC8qIFByb2Nlc3MgTUFQIGNvbW1hbmQgZnJhbWUgYW5kIHNlbmQgTi9BQ0sgbWVzc2FnZSBhcyBhcHByb3ByaWF0ZS4gTWVzc2FnZSBjbWRcbiAgNzM6XHQgKiBuYW1lIGlzIGRlY29kZWQgaGVyZSBhbmQgYXBwcm9wcmlhdGUgaGFuZGxlciBpcyBjYWxsZWQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIwOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDE2CgkJCQkJCQlvdXRwdXQ6IDIyMgoJCQkJCQkJdGhvdWdodHM6IDYxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBhIFBvdGVudGlhbCBOVUxMIFBvaW50ZXIgRGVyZWZlcmVuY2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7dmUgc3BvdHRlZCBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIGBybW5ldF9tYXBgIGNvZGUsIGFuZCBpdCYjMzk7cyBsb29raW5nIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBpcyB0aGF0IGBybW5ldF9tYXBfc2VuZF9hY2tgIGFjY2Vzc2VzIGBza2ItJmd0O2RldmAsIGFuZCB0aGF0IHZhbHVlIGNvdWxkIGJlIE5VTEwsIHdoaWNoIGlzIHRoZW4gcGFzc2VkIHRvIGBkZXYtJmd0O25ldGRldl9vcHMtJmd0O25kb19zdGFydF94bWl0KHNrYiwgZGV2KTtgLCBjYXVzaW5nIGEgY3Jhc2guCgpJIHNlZSB0aGF0IGBza2ItJmd0O2RldmAgY29tZXMgZnJvbSB0aGUgYHNrYm4tJmd0O2RldiA9IHNrYi0mZ3Q7ZGV2O2AgYXNzaWdubWVudCwgd2hpY2ggaGFwcGVucyBkdXJpbmcgdGhlIGBybW5ldF9tYXBfZGVhZ2dyZWdhdGVgIGNhbGwuIFRoYXQgbWFrZXMgc2Vuc2UuIExldCYjMzk7cyB0cmFjZSBpdCBhIGJpdC4gSW5zaWRlIGBybW5ldF9tYXBfaW5ncmVzc19oYW5kbGVyYCwgaWYgYFJNTkVUX0ZMQUdTX0lOR1JFU1NfREVBR0dSRUdBVElPTmAgaXMgc2V0LCBgcm1uZXRfbWFwX2RlYWdncmVnYXRlYCBpcyBjYWxsZWQuIFRoYXQgZGVhZ2dyZWdhdGVkIHNrYiBnb2VzIGludG8gYF9fcm1uZXRfbWFwX2luZ3Jlc3NfaGFuZGxlcmAsIGFuZCBldmVudHVhbGx5IHRoZSBjb21tYW5kIHBhY2tldCBnb2VzIHRvIGBybW5ldF9tYXBfc2VuZF9hY2tgLCB3aGljaCBhY2Nlc3NlcyBgc2tibi0mZ3Q7ZGV2YC4gIAoKSGVyZSBpcyB3aGVyZSB0aGUgcHJvYmxlbSBhcmlzZXM6IGBza2JuYCBpcyBhbGxvY2F0ZWQgYnkgYHJtbmV0X21hcF9kZWFnZ3JlZ2F0ZWAgdXNpbmcgYGFsbG9jX3NrYmAsIGFuZCBpdCBpc24mIzM5O3QgYXNzaWduZWQgYHNrYi0mZ3Q7ZGV2YCB1bnRpbCBhZnRlci4gU2luY2UgYGFsbG9jX3NrYmAgbGlrZWx5IGluaXRpYWxpemVzIGBkZXZgIHRvIE5VTEwgaW4gdGhlIGZpcnN0IHBsYWNlLCB0aGF0IG1lYW5zIGBza2JuLSZndDtkZXZgIGlzIE5VTEwuIEJvb20sIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSEgSXQmIzM5O3MgdGhhdCBzaW1wbGUuIEtBU0FOIG9yIGV2ZW4gc3RhbmRhcmQga2VybmVsIHRlc3Rpbmcgd2lsbCBlYXNpbHkgY2F0Y2ggdGhpcywgaXQmIzM5O3MgYSB0ZXh0Ym9vayBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFRoaXMgaGFzIGFic29sdXRlbHkgbm90aGluZyB0byBkbyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBgZGV2YCBpcyBleHBsaWNpdGx5IHplcm9lZCAoTlVMTCkgYnkgYGFsbG9jX3NrYmAgLSZndDsgYHNrYnVmZl9jbGVhcmAuCgpOb3csIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSYjMzk7cyAqbm90aGluZyogZWxzZSBhdCBwbGF5IGhlcmUuIFRoZSBwYXRjaCBjb3BpZXMgdGhlIGBkZXZgIHBvaW50ZXIgY29ycmVjdGx5LiBJdCBhbGxvY2F0ZXMgYSBuZXcgYnVmZmVyLCByZXNlcnZlcyBzcGFjZSwgY29waWVzIGRhdGEsIGFuZCwgY3J1Y2lhbGx5LCBjb3BpZXMgYHNrYi0mZ3Q7ZGV2YCB0byBgc2tibi0mZ3Q7ZGV2YC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYmVpbmcgZXhwb3NlZDsgaXQmIzM5O3MganVzdCBjb3B5aW5nIGEgTlVMTCB2YWx1ZS4KClRoZXJlZm9yZSwgdGhlIGlzc3VlIGlzIHB1cmVseSBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gVGhlcmUmIzM5O3Mgbm8gbmVlZCBmb3IgS01TQU4gdG8gYW5hbHl6ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiB0aGlzIGNhc2UuIE15IGFzc2Vzc21lbnQgaXMgdGhhdCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMDo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWcuIEluIGBybW5ldF9tYXBfZGVhZ2dyZWdhdGUoKWAsIGEgbmV3IGBza19idWZmYCAoYHNrYm5gKSBpcyBhbGxvY2F0ZWQgdXNpbmcgYGFsbG9jX3NrYigpYCwgd2hpY2ggaW5pdGlhbGl6ZXMgdGhlIGBkZXZgIGZpZWxkIHRvIE5VTEwuIExhdGVyLCBpZiB0aGUgcGFja2V0IGNvbnRhaW5zIGEgTUFQIGNvbW1hbmQsIGBybW5ldF9tYXBfc2VuZF9hY2soKWAgaXMgY2FsbGVkLCB3aGljaCBhY2Nlc3NlcyBgc2tiLVx1MDAzZWRldmAgYW5kIGRlcmVmZXJlbmNlcyBpdCAoYGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zdGFydF94bWl0KHNrYiwgZGV2KWApLiBTaW5jZSBgc2tibi1cdTAwM2VkZXZgIHdhcyBOVUxMLCB0aGlzIGNhdXNlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gVGhlIHBhdGNoIGZpeGVzIHRoaXMgYnkgY29weWluZyBgc2tiLVx1MDAzZWRldmAgdG8gYHNrYm4tXHUwMDNlZGV2YC4gVGhpcyBpcyBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUsIGFzIHRoZSBgZGV2YCBmaWVsZCB3YXMgZXhwbGljaXRseSB6ZXJvZWQgZHVyaW5nIGFsbG9jYXRpb24uIFN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nIG9yIEtBU0FOIHdpbGwgZWFzaWx5IGNhdGNoIHRoaXMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWcuIEluIGBybW5ldF9tYXBfZGVhZ2dyZWdhdGUoKWAsIGEgbmV3IGBza19idWZmYCAoYHNrYm5gKSBpcyBhbGxvY2F0ZWQgdXNpbmcgYGFsbG9jX3NrYigpYCwgd2hpY2ggaW5pdGlhbGl6ZXMgdGhlIGBkZXZgIGZpZWxkIHRvIE5VTEwuIExhdGVyLCBpZiB0aGUgcGFja2V0IGNvbnRhaW5zIGEgTUFQIGNvbW1hbmQsIGBybW5ldF9tYXBfc2VuZF9hY2soKWAgaXMgY2FsbGVkLCB3aGljaCBhY2Nlc3NlcyBgc2tiLVx1MDAzZWRldmAgYW5kIGRlcmVmZXJlbmNlcyBpdCAoYGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zdGFydF94bWl0KHNrYiwgZGV2KWApLiBTaW5jZSBgc2tibi1cdTAwM2VkZXZgIHdhcyBOVUxMLCB0aGlzIGNhdXNlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gVGhlIHBhdGNoIGZpeGVzIHRoaXMgYnkgY29weWluZyBgc2tiLVx1MDAzZWRldmAgdG8gYHNrYm4tXHUwMDNlZGV2YC4gVGhpcyBpcyBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUsIGFzIHRoZSBgZGV2YCBmaWVsZCB3YXMgZXhwbGljaXRseSB6ZXJvZWQgZHVyaW5nIGFsbG9jYXRpb24uIFN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nIG9yIEtBU0FOIHdpbGwgZWFzaWx5IGNhdGNoIHRoaXMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIwOjQwOjQxLjM2MzE1MDE1N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTg2Njc1MzEzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSTU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJtbmV0X21hcF9kZWFnZ3JlZ2F0ZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVnLiBJbiBgcm1uZXRfbWFwX2RlYWdncmVnYXRlKClgLCBhIG5ldyBgc2tfYnVmZmAgKGBza2JuYCkgaXMgYWxsb2NhdGVkIHVzaW5nIGBhbGxvY19za2IoKWAsIHdoaWNoIGluaXRpYWxpemVzIHRoZSBgZGV2YCBmaWVsZCB0byBOVUxMLiBMYXRlciwgaWYgdGhlIHBhY2tldCBjb250YWlucyBhIE1BUCBjb21tYW5kLCBgcm1uZXRfbWFwX3NlbmRfYWNrKClgIGlzIGNhbGxlZCwgd2hpY2ggYWNjZXNzZXMgYHNrYi1cXHUwMDNlZGV2YCBhbmQgZGVyZWZlcmVuY2VzIGl0IChgZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fc3RhcnRfeG1pdChza2IsIGRldilgKS4gU2luY2UgYHNrYm4tXFx1MDAzZWRldmAgd2FzIE5VTEwsIHRoaXMgY2F1c2VzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBUaGUgcGF0Y2ggZml4ZXMgdGhpcyBieSBjb3B5aW5nIGBza2ItXFx1MDAzZWRldmAgdG8gYHNrYm4tXFx1MDAzZWRldmAuIFRoaXMgaXMgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLCBhcyB0aGUgYGRldmAgZmllbGQgd2FzIGV4cGxpY2l0bHkgemVyb2VkIGR1cmluZyBhbGxvY2F0aW9uLiBTdGFuZGFyZCBrZXJuZWwgdGVzdGluZyBvciBLQVNBTiB3aWxsIGVhc2lseSBjYXRjaCB0aGlzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBkZWFnZ3JlZ2F0aW9uIGxvZ2ljIGluIHRoZSBRdWFsY29tbSBSTU5FVCBkcml2ZXIsIHdoaWNoIGlzIGEgdmlydHVhbCBuZXR3b3JrIGRldmljZSB0aGF0IGNhbiBiZSBhdHRhY2hlZCB0byBvdGhlciBuZXR3b3JrIGludGVyZmFjZXMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGNyZWF0aW5nIGFuIHJtbmV0IGludGVyZmFjZSB2aWEgcnRuZXRsaW5rIGFuZCBzZW5kaW5nIHBhY2tldHMgdG8gaXQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIwOjQwOjQxLjM2MzE1NzA0N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2MjM0NTQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGIzMTNmZmI2YjQ5ODNkZTA0ZjM2YjcyOWMzNjIwNWNhYjhhOTFlZDJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMjAgMjA6NDA6MzkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmNcXG5pbmRleCAzMDVhZTE1YWU4ZjM5Li5lNmY0OGRjOWZlNjRkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXBfZGF0YS5jXFxuQEAgLTM5NCw2ICszOTQsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqcm1uZXRfbWFwX2RlYWdncmVnYXRlKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGlmICghc2tibilcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcbitcXHRza2JuLVxcdTAwM2VkZXYgPSBza2ItXFx1MDAzZWRldjtcXG4gXFx0c2tiX3Jlc2VydmUoc2tibiwgUk1ORVRfTUFQX0RFQUdHUl9IRUFEUk9PTSk7XFxuIFxcdHNrYl9wdXQoc2tibiwgcGFja2V0X2xlbik7XFxuIFxcdG1lbWNweShza2JuLVxcdTAwM2VkYXRhLCBza2ItXFx1MDAzZWRhdGEsIHBhY2tldF9sZW4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMDo0MDo0Mi45MjYyMDU0MjVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozMTA5NjU0MzUxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSTU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJtbmV0X21hcF9kZWFnZ3JlZ2F0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBkZWFnZ3JlZ2F0aW9uIGxvZ2ljIGluIHRoZSBRdWFsY29tbSBSTU5FVCBkcml2ZXIsIHdoaWNoIGlzIGEgdmlydHVhbCBuZXR3b3JrIGRldmljZSB0aGF0IGNhbiBiZSBhdHRhY2hlZCB0byBvdGhlciBuZXR3b3JrIGludGVyZmFjZXMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGNyZWF0aW5nIGFuIHJtbmV0IGludGVyZmFjZSB2aWEgcnRuZXRsaW5rIGFuZCBzZW5kaW5nIHBhY2tldHMgdG8gaXQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGIzMTNmZmI2YjQ5ODNkZTA0ZjM2YjcyOWMzNjIwNWNhYjhhOTFlZDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyMCAyMDo0MDozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXBfZGF0YS5jXG5pbmRleCAzMDVhZTE1YWU4ZjM5Li5lNmY0OGRjOWZlNjRkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuY1xuQEAgLTM5NCw2ICszOTQsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqcm1uZXRfbWFwX2RlYWdncmVnYXRlKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoIXNrYm4pXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuK1x0c2tibi1cdTAwM2VkZXYgPSBza2ItXHUwMDNlZGV2O1xuIFx0c2tiX3Jlc2VydmUoc2tibiwgUk1ORVRfTUFQX0RFQUdHUl9IRUFEUk9PTSk7XG4gXHRza2JfcHV0KHNrYm4sIHBhY2tldF9sZW4pO1xuIFx0bWVtY3B5KHNrYm4tXHUwMDNlZGF0YSwgc2tiLVx1MDAzZWRhdGEsIHBhY2tldF9sZW4pO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjA6NDA6NDIuOTI2MjA2NTU1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE4ODA3ODczMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXR3b3JrIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2gg4oCTIGl0IGxvb2tzIGxpa2UgYSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIGFkZGl0aW9uLCBgc2tibi1cdTAwM2VkZXYgPSBza2ItXHUwMDNlZGV2O2AsIGluc2lkZSB0aGUgYHJtbmV0X21hcF9kZWFnZ3JlZ2F0ZSgpYCBmdW5jdGlvbiBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoYXQncyB0aGUgY29udGV4dCBoZXJlP1wiIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHJtbmV0YCBhY3R1YWxseSAqaXMqIGJlZm9yZSBJIGNhbiBwcm9wZXJseSBhc3Nlc3MgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZS5cblxuRmlyc3QgdGhpbmdzIGZpcnN0LCBhIHF1aWNrIGxvb2sgYXQgdGhlIGZpbGUgcGF0aCB0ZWxscyBtZSB0aGlzIGlzIHJlbGF0ZWQgdG8gUXVhbGNvbW0ncyBSTU5FVCBkcml2ZXIuIFJpZ2h0LCBSTU5FVC4uLiBJIGtub3cgaXQncyBhIFF1YWxjb21tIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLCBidXQgaXMgdGhpcyBhIHZpcnR1YWwgZHJpdmVyLCBvciBpcyBpdCB0aWVkIHRvIHBhcnRpY3VsYXIgUXVhbGNvbW0gaGFyZHdhcmU/IFRoZSBpbXBsaWNhdGlvbnMgYXJlIGh1Z2UuIElmIGl0J3MgaGFyZHdhcmUtZGVwZW5kZW50LCB0aGVuIHRoZSB0ZXN0aW5nIHNjb3BlIGJyb2FkZW5zIHNpZ25pZmljYW50bHkuIElmIGl0J3MgdmlydHVhbCwgYW5kIGNvdWxkIGJlIHJlcGxpY2F0ZWQgaW4gYSBjb250YWluZXIsIHRoZW4gdGVzdGluZyB3aWxsIGJlIHNsaWdodGx5IHNpbXBsZXIuXG5cblRvIGNsYXJpZnkgdGhpcywgSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkcml2ZXIncyBLY29uZmlnIGZpbGVzLiBMZXQncyBzZWUuLi4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L0tjb25maWdgIG9yIHBvc3NpYmx5IGV2ZW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL0tjb25maWdgIHNob3VsZCBnaXZlIG1lIHRoZSBjb25maWd1cmF0aW9uIGRldGFpbHMgSSdtIGFmdGVyLiBUaGF0IHNob3VsZCB0ZWxsIG1lIHdoZXRoZXIgaXQncyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGJhc2VkIG9uIGhhcmR3YXJlIGZsYWdzLCBvciBpZiBpdCdzIGRlc2lnbmVkIHRvIGJlIG1vcmUgcGxhdGZvcm0tYWdub3N0aWMuIFRoYXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHJlYWwgbmF0dXJlIG9mIHRoaXMgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDMzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjA6NDA6NDguMTE0Mjg3NjA1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjYxMzc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUk1ORVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L0tjb25maWctNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9LY29uZmlnOjY6bWVudWNvbmZpZyBSTU5FVFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiUm1OZXQgTUFQIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjA6NDA6NDguMjIwOTA1OTk1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ0NjA0MTE0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGF0IEtjb25maWcgZmlsZTpcblxuKipEaXZpbmcgaW50byB0aGUgUk1ORVQgS2NvbmZpZyBGaWxlKipcblxuT2theSwgbGV0J3MgcHVsbCB1cCB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L0tjb25maWdgIGZpbGUuIFJpZ2h0LCBSTU5FVC4uLiB0aGF0J3MgUXVhbGNvbW0ncyBSZW1vdGUgTmV0d29yayBJbnRlcmZhY2UsIGxpa2VseSBoYW5kbGluZyBjZWxsdWxhciBkYXRhIGNvbm5lY3Rpdml0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIFJNTkVUIGZlYXR1cmVzIGFyZSBiZWluZyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gVGhlIEtjb25maWcgZmlsZSBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFzcGVjdHMg4oCTIHRoZSBkZXBlbmRlbmNpZXMsIG9wdGlvbnMsIGFuZCBkZWZhdWx0cyB0aGF0IHVsdGltYXRlbHkgc2hhcGUgd2hldGhlciBSTU5FVCBzdXBwb3J0IGlzIGVuYWJsZWQgYW5kIGhvdyBncmFudWxhciB0aGUgY29uZmlndXJhdGlvbiBjYW4gZ2V0LlxuXG5JJ20gZXhwZWN0aW5nIHRvIHNlZSBhIHN0cnVjdHVyZWQgYXBwcm9hY2ggdXNpbmcgYGNvbmZpZ2Agc3ltYm9scywgYGRlcGVuZHMgb25gIGNsYXVzZXMgdG8gbGluayBSTU5FVCB0byB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSAobGlrZSB0aGUgc3BlY2lmaWMgUXVhbGNvbW0gU29DcykgYW5kIG90aGVyIHJlbGF0ZWQgZHJpdmVycywgYHNlbGVjdGAgc3RhdGVtZW50cyB0byBtYW5hZ2UgZGVwZW5kZW5jaWVzIGF1dG9tYXRpY2FsbHksIGFuZCBwb3RlbnRpYWxseSBgdHJpc3RhdGVgIG9yIGBib29sYCBvcHRpb25zIGZvciBmaW5lLWdyYWluZWQgZmVhdHVyZSBjb250cm9sIChlLmcuLCBzcGVjaWZpYyBSTU5FVCBsaW5rIHR5cGVzIG9yIHByb3RvY29sIGZlYXR1cmVzKS4gSSdtIGFsc28gbG9va2luZyBmb3Igc2Vuc2libGUgZGVmYXVsdHMg4oCTIHdoYXQncyBlbmFibGVkIG91dCBvZiB0aGUgYm94LCBhbmQgd2hldGhlciB0aGV5IG1ha2Ugc2Vuc2UgZm9yIHRoZSBsaWtlbHkgdGFyZ2V0IGRldmljZXMuXG5cblRoaXMgS2NvbmZpZyBmaWxlIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBzZW5zZSBvZiBob3cgY29uZmlndXJhYmxlIHRoZSBSTU5FVCBzdGFjayBpcywgd2hpY2ggd2lsbCBiZSB1c2VmdWwgZm9yIGFueSBkZXZpY2UgY3VzdG9taXphdGlvbiBJIG1pZ2h0IG5lZWQgdG8gZG8uIEl04oCZcyBhbHNvIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgcG90ZW50aWFsIGJ1aWxkIGlzc3VlcyBvciBjb25mbGljdHMgaWYgSSBuZWVkIHRvIGludGVncmF0ZSB0aGlzIGRyaXZlciB3aXRoIG90aGVyIG5ldHdvcmtpbmcgc3Vic3lzdGVtcy4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB2YXJpb3VzIFJNTkVULXJlbGF0ZWQgb3B0aW9uczsgd2hldGhlciB0aGV5J3JlIGluZGVwZW5kZW50LCBtdXR1YWxseSBleGNsdXNpdmUsIG9yIG5lc3RlZC4gVGhlIGdvYWwgaXMgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgcmFuZ2Ugb2Ygc3VwcG9ydGVkIGNvbmZpZ3VyYXRpb25zIGFuZCB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHZhcmlvdXMgY29tcG9uZW50cyBpbiB0aGUgUk1ORVQgc3RhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MTMsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMDo0MDo1Mi42NjY5NDk5ODZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFJNTkVUIE1BUCBkcml2ZXJcXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0bWVudWNvbmZpZyBSTU5FVFxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIlJtTmV0IE1BUCBkcml2ZXJcXFwiXFxuICAgODpcXHRcXHRkZWZhdWx0IG5cXG4gICA5OlxcdFxcdHNlbGVjdCBHUk9fQ0VMTFNcXG4gIDEwOlxcdFxcdGhlbHBcXG4gIDExOlxcdFxcdCAgSWYgeW91IHNlbGVjdCB0aGlzLCB5b3Ugd2lsbCBlbmFibGUgdGhlIFJNTkVUIG1vZHVsZSB3aGljaCBpcyB1c2VkXFxuICAxMjpcXHRcXHQgIGZvciBoYW5kbGluZyBkYXRhIGluIHRoZSBtdWx0aXBsZXhpbmcgYW5kIGFnZ3JlZ2F0aW9uIHByb3RvY29sIChNQVApXFxuICAxMzpcXHRcXHQgIGZvcm1hdCBpbiB0aGUgZW1iZWRkZWQgZGF0YSBwYXRoLiBSTU5FVCBkZXZpY2VzIGNhbiBiZSBhdHRhY2hlZCB0b1xcbiAgMTQ6XFx0XFx0ICBhbnkgSVAgbW9kZSBwaHlzaWNhbCBkZXZpY2UuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIwOjQwOjUyLjY2NzAzNzUzNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MzIyMTI3NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBSTU5FVCBEZXZpY2VzKipcblxuT2theSwgc28gSSdtIGhlYXJpbmcgXCJSTU5FVCBkZXZpY2VzIGNhbiBiZSBhdHRhY2hlZCB0byBhbnkgSVAgbW9kZSBwaHlzaWNhbCBkZXZpY2UuXCIgTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiQWhhISBUaGlzIHNvdW5kcyBsaWtlIGEgdmlydHVhbCBuZXR3b3JraW5nIGNvbnN0cnVjdCwgc2ltaWxhciB0byBhIFZMQU4gb3IgcGVyaGFwcyBhIE1BQ1ZMQU4uXCIgSXQgc3VnZ2VzdHMgYSBsZXZlbCBvZiBhYnN0cmFjdGlvbiwgYSB3YXkgdG8gbG9naWNhbGx5IGNvbm5lY3QgdGhpcyBSTU5FVCB0aGluZyB0byBhbiBleGlzdGluZyBuZXR3b3JrIGludGVyZmFjZSwgcmlnaHQ/IEl0J3MgbGlrZSBhIHZpcnR1YWwgbmV0d29yayBkZXZpY2UgcmlkaW5nIG9uIHRvcCBvZiBhIHBoeXNpY2FsIG9uZS5cblxuTm93IEknbSBjdXJpb3VzLiBUaGUgY3JpdGljYWwgcXVlc3Rpb24gYmVjb21lcyAqaG93KiBpcyB0aGlzIHZpcnR1YWwgZGV2aWNlIGNyZWF0ZWQ/IERvZXMgdGhlIHN5c3RlbSBsZXZlcmFnZSBgcnRuZXRsaW5rYD8gVGhhdCdzIHRoZSB0eXBpY2FsIHJvdXRlIGZvciBuZXR3b3JrIGludGVyZmFjZSBtYW5pcHVsYXRpb24sIHNvIHRoYXQncyB3aGVyZSBteSBtaW5kIG5hdHVyYWxseSBnb2VzLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGNyZWF0aW9uIHByb2Nlc3MgdG8gZnVsbHkgZ3Jhc3AgdGhpcy4gTGV0IG1lIHNlZSBob3cgaXQncyBhY3R1YWxseSBjb25maWd1cmVkIG9yIGluaXRpYWxpemVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjE3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMDo0MDo1Ni40OTkyNTI5MjhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwNTE1MzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ0bmxfbGlua19vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X2NvbmZpZy5jPTM3MD1zdGF0aWMgaW50IHJtbmV0X2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfY29uZmlnLmMtMzk5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X2NvbmZpZy5jOjQwMDpzdHJ1Y3QgcnRubF9saW5rX29wcyBybW5ldF9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X2NvbmZpZy5jLTQwMS1cXHQua2luZFxcdFxcdD0gXFxcInJtbmV0XFxcIixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X2NvbmZpZy5oPTMzPXN0cnVjdCBybW5ldF9wb3J0IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X2NvbmZpZy5oLTU1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X2NvbmZpZy5oOjU2OmV4dGVybiBzdHJ1Y3QgcnRubF9saW5rX29wcyBybW5ldF9saW5rX29wcztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9jb25maWcuaC01Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X3ZuZC5jPTI5OD1pbnQgcm1uZXRfdm5kX25ld2xpbmsodTggaWQsIHN0cnVjdCBuZXRfZGV2aWNlICpybW5ldF9kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF92bmQuYy0zMzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfdm5kLmM6MzMzOlxcdFxcdHJtbmV0X2Rldi1cXHUwMDNlcnRubF9saW5rX29wcyA9IFxcdTAwMjZybW5ldF9saW5rX29wcztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF92bmQuYy0zMzQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIwOjQwOjU2LjYwOTc3MzY0OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1OTYzNjM3MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiB0aGUgcm1uZXQgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgYHJtbmV0YCBpbnRlcmZhY2UgaXMgZGVmaW5pdGVseSBjcmVhdGVkIHVzaW5nIGBydG5ldGxpbmtgIGFuZCBgaXAgbGluayBhZGQgdHlwZSBybW5ldGAuIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZTsgaXQgbWVhbnMgSSBjYW4gZWFzaWx5IHNwaW4gdXAgYSB2aXJ0dWFsIGVudmlyb25tZW50IGFuZCBwb2tlIGF0IHRoaXMgdGhpbmcuIEl0J3MgZW1pbmVudGx5IHRlc3RhYmxlLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE15IGF0dGVudGlvbiBpcyBub3cgZm9jdXNlZCBvbiB0aGlzIHBhdGNoIHRoYXQncyBhZmZlY3RpbmcgYHJtbmV0X21hcF9kZWFnZ3JlZ2F0ZSgpYC4gSSBuZWVkIHRvIGRpdmUgaW50byB0aGF0IGZ1bmN0aW9uIGFuZCB1bmRlcnN0YW5kIHByZWNpc2VseSB3aGF0J3MgYmVpbmcgY2hhbmdlZCBhbmQgd2h5LiBMZXQncyBnZXQgcmlnaHQgaW50byB0aGUgY29kZSBmb3IgYHJtbmV0X21hcF9kZWFnZ3JlZ2F0ZSgpYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkyNSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIwOjQxOjAwLjIwNjEzOTY2OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwNjA0OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJtbmV0X21hcF9kZWFnZ3JlZ2F0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYz0xMDk9cm1uZXRfbWFwX2luZ3Jlc3NfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYy0xMjMtXFx0aWYgKHBvcnQtXFx1MDAzZWRhdGFfZm9ybWF0IFxcdTAwMjYgUk1ORVRfRkxBR1NfSU5HUkVTU19ERUFHR1JFR0FUSU9OKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYzoxMjQ6XFx0XFx0d2hpbGUgKChza2JuID0gcm1uZXRfbWFwX2RlYWdncmVnYXRlKHNrYiwgcG9ydCkpICE9IE5VTEwpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYy0xMjUtXFx0XFx0XFx0X19ybW5ldF9tYXBfaW5ncmVzc19oYW5kbGVyKHNrYm4sIHBvcnQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwLmg9MjY9ZW51bSBybW5ldF9tYXBfY29tbWFuZHMge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwLmgtNDItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwLmg6NDM6c3RydWN0IHNrX2J1ZmYgKnJtbmV0X21hcF9kZWFnZ3JlZ2F0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcC5oLTQ0LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBybW5ldF9wb3J0ICpwb3J0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmM9MzM2PXUzMiBybW5ldF9tYXBfdmFsaWRhdGVfcGFja2V0X2xlbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgcm1uZXRfcG9ydCAqcG9ydClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmMtMzgyLSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmM6MzgzOnN0cnVjdCBza19idWZmICpybW5ldF9tYXBfZGVhZ2dyZWdhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXBfZGF0YS5jLTM4NC1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgcm1uZXRfcG9ydCAqcG9ydClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjA6NDE6MDAuMzA2NzQ5Nzg4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMjQyMTExMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBQb3RlbnRpYWw6IFJNTkVUIERlYWdncmVnYXRpb24qKlxuXG5Pa2F5LCBzbyBgcm1uZXRfbWFwX2RlYWdncmVnYXRlYCBpcyBjYWxsZWQgYnkgYHJtbmV0X21hcF9pbmdyZXNzX2hhbmRsZXJgLiBUaGF0IGBpbmdyZXNzX2hhbmRsZXJgIGlzIHRoZSByZWNlaXZlIGhhbmRsZXIgZm9yIHRoZSBwaHlzaWNhbCBkZXZpY2UgdGhhdCBSTU5FVCBpcyBjb25uZWN0ZWQgdG8uIFRoYXQncyBhIGRpcmVjdCBwYXRoLCBtYWtpbmcgaXQgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIERlZmluaXRlbHkgcmVhY2hhYmxlLCBubyBxdWVzdGlvbi4gVGhlIGNvbmZpZ3VyYXRpb24gbmVlZHMgdG8gYmUgc2V0IHVwIHdpdGggYFJNTkVUYCB0byBldmVuIGdldCB0aGVyZS5cblxuTm93LCBsZXQncyBzZWUgd2hhdCBgRm9jdXNTeW1ib2xzYCB0ZWxscyB1cy4gYHJtbmV0X21hcF9kZWFnZ3JlZ2F0ZWAgbG9va3MgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LiBMZXQncyBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBvdGhlciBpbnRlcmVzdGluZyBmdW5jdGlvbnMgaW4gdGhlIHZpY2luaXR5LiBBbHJpZ2h0LCBgcm1uZXRfbWFwX2luZ3Jlc3NfaGFuZGxlcmAgaXMgcmlnaHQgdGhlcmUgYW5kIGlzIGFub3RoZXIgZ29vZCBvcHRpb24gdG8gaW52ZXN0aWdhdGUuIE1heWJlIHdlIHNob3VsZCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHJtbmV0X21hcF9kYXRhLmNgIHdoaWxlIHdlJ3JlIGF0IGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjY0LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIwOjQxOjA0LjYzMDk2MzIyNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA3MzU3NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicm1uZXRfbWFwX2RlYWdncmVnYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuYz0zMzY9dTMyIHJtbmV0X21hcF92YWxpZGF0ZV9wYWNrZXRfbGVuKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBybW5ldF9wb3J0ICpwb3J0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuYy0zODItICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuYzozODM6c3RydWN0IHNrX2J1ZmYgKnJtbmV0X21hcF9kZWFnZ3JlZ2F0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmMtMzg0LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBybW5ldF9wb3J0ICpwb3J0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMDo0MTowNC43MTE3MDQxOTRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3NjE1MjkzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBSTU5FVCBEZWFnZ3JlZ2F0aW9uIFBhdGNoKipcblxuQWxyaWdodCwgdGhpcyBwYXRjaCBpcyBob25pbmcgaW4gb24gYHJtbmV0X21hcF9kZWFnZ3JlZ2F0ZWAuIFRoYXQncyB0aGUga2V5IGZ1bmN0aW9uIHRvIGRpc3NlY3QuIFRoZSBjaGFuZ2VzIGFyZSBhbGwgY2VudGVyZWQgdGhlcmUsIHNvIHRoYXQncyB3aGVyZSBteSBmb2N1cyBzaG91bGQgYmUuIEJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgY29kZSwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaWYgYFJNTkVUYCBpdHNlbGYgaGFzIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBjb3VsZCBpbmZsdWVuY2Ugb3IgYmUgaW1wYWN0ZWQgYnkgdGhpcy4gR290dGEgdW5kZXJzdGFuZCB0aGUgZWNvc3lzdGVtIGJlZm9yZSBtYWtpbmcgYW55IGFzc3VtcHRpb25zIGFib3V0IHRoaXMgcGFydGljdWxhciBwaWVjZS4gTGV0J3Mgc2VlIHdoYXQgdGhlIGJyb2FkZXIgcGljdHVyZSBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIxNSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIwOjQxOjA4LjM4Nzg2MDg4MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFJNTkVUIE1BUCBkcml2ZXJcXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0bWVudWNvbmZpZyBSTU5FVFxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIlJtTmV0IE1BUCBkcml2ZXJcXFwiXFxuICAgODpcXHRcXHRkZWZhdWx0IG5cXG4gICA5OlxcdFxcdHNlbGVjdCBHUk9fQ0VMTFNcXG4gIDEwOlxcdFxcdGhlbHBcXG4gIDExOlxcdFxcdCAgSWYgeW91IHNlbGVjdCB0aGlzLCB5b3Ugd2lsbCBlbmFibGUgdGhlIFJNTkVUIG1vZHVsZSB3aGljaCBpcyB1c2VkXFxuICAxMjpcXHRcXHQgIGZvciBoYW5kbGluZyBkYXRhIGluIHRoZSBtdWx0aXBsZXhpbmcgYW5kIGFnZ3JlZ2F0aW9uIHByb3RvY29sIChNQVApXFxuICAxMzpcXHRcXHQgIGZvcm1hdCBpbiB0aGUgZW1iZWRkZWQgZGF0YSBwYXRoLiBSTU5FVCBkZXZpY2VzIGNhbiBiZSBhdHRhY2hlZCB0b1xcbiAgMTQ6XFx0XFx0ICBhbnkgSVAgbW9kZSBwaHlzaWNhbCBkZXZpY2UuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIwOjQxOjA4LjM4Nzk1MDU3MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDkxMzMzNzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgU3RyYXRlZ3k6IEEgQ2xlYW4gU2xhdGUgd2l0aCBGb2N1c2VkIFByZWNpc2lvbioqXG5cbk9rYXksIGhlcmUncyB0aGUgcGxhbi4gTm8gZXh0ZXJuYWwgZW50YW5nbGVtZW50cyB0byB3b3JyeSBhYm91dCDigJMgdGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTXkgZm9jdXMgaXMgbGFzZXItc2hhcnAuIEknbSB6ZXJvaW5nIGluIG9uIGEgdmVyeSBzcGVjaWZpYyB0YXJnZXQ6IHRoZSBgcm1uZXRfbWFwX2RlYWdncmVnYXRlYCBmdW5jdGlvbi4gSXQgc2VlbXMgdGhpcyBpcyB3aGVyZSB0aGUgdnVsbmVyYWJpbGl0eSBsaWVzLCBhcyBpdCdzIHRoZSBjb3JlIG9mIHRoZSBkZWFnZ3JlZ2F0aW9uIGxvZ2ljIHdpdGhpbiB0aGUgUXVhbGNvbW0gUk1ORVQgZHJpdmVyLiBJIGhhdmUgYFdvcnRoRnV6emluZzogdHJ1ZWAgc28gSSdtIGNvbW1pdHRlZC4gVGhpcyBpcyBpbXBvcnRhbnQuXG5cbkJhc2VkIG9uIHRoZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgSSd2ZSBzZWVuLCBzcGVjaWZpY2FsbHkgdGhlIGluY2x1c2lvbiBvZiBgRW5hYmxlQ29uZmlnczogW1wiUk1ORVRcIl1gLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gd29ya2luZyB3aXRoIGFuIFJNTkVUIGVudmlyb25tZW50IGFuZCBJJ2xsIHVzZSB0aG9zZSBjb25maWd1cmF0aW9ucy5cblxuVGhlIGRyaXZlciBpdHNlbGYgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCdzIGEgdmlydHVhbCBuZXR3b3JrIGRldmljZS4gVGhpcyBvcGVucyB1cCBhIGNvbXBlbGxpbmcgYXR0YWNrIHN1cmZhY2UgYmVjYXVzZSBJIGNhbiBhdHRhY2ggdGhlIFJNTkVUIHRvIG90aGVyIG5ldHdvcmsgaW50ZXJmYWNlcyBhbmQgcG90ZW50aWFsbHkgdXNlIHRoaXMgbmV3IHJtbmV0IGludGVyZmFjZSB2aWEgcnRuZXRsaW5rLCBzZW5kaW5nIHBhY2tldHMgdG8gaXQgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nLiBUaGlzIGdpdmVzIG1lIGEgY29udHJvbGxhYmxlIGVudmlyb25tZW50IHRvIHRlc3QgZWRnZSBjYXNlcyBhbmQgaG9wZWZ1bGx5IHRyaWdnZXIgc29tZXRoaW5nIGludGVyZXN0aW5nLiBNeSByZWFzb25pbmcgaGVyZSBpcyB0aGF0IGJ5IGV4cGxvaXRpbmcgdGhlIHZpcnR1YWwgbmV0d29yayBpbnRlcmZhY2UsIEkgY2FuIGF0dGVtcHQgdG8gdHJpZ2dlciB2dWxuZXJhYmlsaXRpZXMgd2l0aGluIHRoZSBkZWFnZ3JlZ2F0aW9uIGxvZ2ljLiBJIGxpa2UgdGhpcyBhcHByb2FjaC4gSXQncyBjbGVhbiwgdGFyZ2V0ZWQsIGFuZCBwcm92aWRlcyBhIGNsZWFyIHBhdGggdG8gZXhlY3V0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjA2LCJPdXRwdXRUb2tlbnMiOjk3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMDo0MToxMy44NzkyODc0NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzQ1NzgxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUk1ORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJybW5ldF9tYXBfZGVhZ2dyZWdhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZGVhZ2dyZWdhdGlvbiBsb2dpYyBpbiB0aGUgUXVhbGNvbW0gUk1ORVQgZHJpdmVyLCB3aGljaCBpcyBhIHZpcnR1YWwgbmV0d29yayBkZXZpY2UgdGhhdCBjYW4gYmUgYXR0YWNoZWQgdG8gb3RoZXIgbmV0d29yayBpbnRlcmZhY2VzLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSBjcmVhdGluZyBhbiBybW5ldCBpbnRlcmZhY2UgdmlhIHJ0bmV0bGluayBhbmQgc2VuZGluZyBwYWNrZXRzIHRvIGl0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlJNTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicm1uZXRfbWFwX2RlYWdncmVnYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGRlYWdncmVnYXRpb24gbG9naWMgaW4gdGhlIFF1YWxjb21tIFJNTkVUIGRyaXZlciwgd2hpY2ggaXMgYSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlIHRoYXQgY2FuIGJlIGF0dGFjaGVkIHRvIG90aGVyIG5ldHdvcmsgaW50ZXJmYWNlcy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYnkgY3JlYXRpbmcgYW4gcm1uZXQgaW50ZXJmYWNlIHZpYSBydG5ldGxpbmsgYW5kIHNlbmRpbmcgcGFja2V0cyB0byBpdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjA6NDE6MTQuMDIyNzUzMDU0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzIwNzE0MTI3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIwOjQxOjE0LjAyMzM2MzA3NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3MzIwNjUyNzgxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVnLiBJbiBgcm1uZXRfbWFwX2RlYWdncmVnYXRlKClgLCBhIG5ldyBgc2tfYnVmZmAgKGBza2JuYCkgaXMgYWxsb2NhdGVkIHVzaW5nIGBhbGxvY19za2IoKWAsIHdoaWNoIGluaXRpYWxpemVzIHRoZSBgZGV2YCBmaWVsZCB0byBOVUxMLiBMYXRlciwgaWYgdGhlIHBhY2tldCBjb250YWlucyBhIE1BUCBjb21tYW5kLCBgcm1uZXRfbWFwX3NlbmRfYWNrKClgIGlzIGNhbGxlZCwgd2hpY2ggYWNjZXNzZXMgYHNrYi1cXHUwMDNlZGV2YCBhbmQgZGVyZWZlcmVuY2VzIGl0IChgZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fc3RhcnRfeG1pdChza2IsIGRldilgKS4gU2luY2UgYHNrYm4tXFx1MDAzZWRldmAgd2FzIE5VTEwsIHRoaXMgY2F1c2VzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBUaGUgcGF0Y2ggZml4ZXMgdGhpcyBieSBjb3B5aW5nIGBza2ItXFx1MDAzZWRldmAgdG8gYHNrYm4tXFx1MDAzZWRldmAuIFRoaXMgaXMgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLCBhcyB0aGUgYGRldmAgZmllbGQgd2FzIGV4cGxpY2l0bHkgemVyb2VkIGR1cmluZyBhbGxvY2F0aW9uLiBTdGFuZGFyZCBrZXJuZWwgdGVzdGluZyBvciBLQVNBTiB3aWxsIGVhc2lseSBjYXRjaCB0aGlzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGIzMTNmZmI2YjQ5ODNkZTA0ZjM2YjcyOWMzNjIwNWNhYjhhOTFlZDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyMCAyMDo0MDozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXBfZGF0YS5jXG5pbmRleCAzMDVhZTE1YWU4ZjM5Li5lNmY0OGRjOWZlNjRkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuY1xuQEAgLTM5NCw2ICszOTQsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqcm1uZXRfbWFwX2RlYWdncmVnYXRlKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoIXNrYm4pXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuK1x0c2tibi1cdTAwM2VkZXYgPSBza2ItXHUwMDNlZGV2O1xuIFx0c2tiX3Jlc2VydmUoc2tibiwgUk1ORVRfTUFQX0RFQUdHUl9IRUFEUk9PTSk7XG4gXHRza2JfcHV0KHNrYm4sIHBhY2tldF9sZW4pO1xuIFx0bWVtY3B5KHNrYm4tXHUwMDNlZGF0YSwgc2tiLVx1MDAzZWRhdGEsIHBhY2tldF9sZW4pO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjA6NDE6MTQuMDIzMzY0NDM0WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwOTYzMDk4MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSTU5FVCBEZWFnZ3JlZ2F0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGludHJvZHVjZXMgYHNrYm4tXHUwMDNlZGV2ID0gc2tiLVx1MDAzZWRldjtgIHdpdGhpbiB0aGUgYHJtbmV0X21hcF9kZWFnZ3JlZ2F0ZWAgZnVuY3Rpb24gaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmNgLiBMZXQncyBicmVhayB0aGlzIGRvd24uIEJhc2ljYWxseSwgd2UncmUgdGFraW5nIGEgbmV3bHkgY3JlYXRlZCBgc2tfYnVmZmAgY2FsbGVkIGBza2JuYCBhbmQgYXNzaWduaW5nIHRoZSBuZXR3b3JrIGRldmljZSAoYGRldmApIGZyb20gdGhlIG9yaWdpbmFsIGBza19idWZmYCAoYHNrYmApIHRvIGl0LlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGxpa2VseSBhIHNhZmV0eSBtZWFzdXJlLiBXaXRob3V0IHRoaXMgbGluZSwgdGhlcmUncyBhIHBvc3NpYmlsaXR5IG9mIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlLCBvciBzb21ldGhpbmcgc2ltaWxhciwgbGF0ZXIgb24gaW4gdGhlIGNvZGUgd2hlcmUgYHNrYm4tXHUwMDNlZGV2YCBpcyB1c2VkLCBhbmQgaXQgaGFzbid0IGJlZW4gZXhwbGljaXRseSBzZXQuIElmIGBza2ItXHUwMDNlZGV2YCBoYXBwZW5lZCB0byBiZSBOVUxMLCB0aGlzIGFzc2lnbm1lbnQgZml4ZXMgdGhlIHByb2JsZW0uXG5cbk15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gcG90ZW50aWFsIGlzc3VlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBidXQgdGhlbiBJIHJlbWVtYmVyIHRoYXQgYHNrYm5gIGlzIGNyZWF0ZWQgd2l0aCBzb21ldGhpbmcgbGlrZSBgYWxsb2Nfc2tiYCwgc28gaXRzIGZpZWxkcywgbGlrZSBgZGV2YCwgYXJlICpsaWtlbHkqIGluaXRpYWxpemVkIHRvIE5VTEwgYnkgZGVmYXVsdC4gU28sIHRoYXQncyBsZXNzIGxpa2VseSBhIHByb2JsZW0uXG5cbk5vdywgSSByZWFsbHkgbmVlZCB0byBnZXQgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdW5kZXJzdGFuZCBob3cgYHJtbmV0X21hcF9kZWFnZ3JlZ2F0ZWAgaXMgdXNlZCB0byBzZWUgKndoeSogdGhpcyBmaXggaXMgbmVlZGVkIGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIG1pc3NpbmcgYGRldmAgcG9pbnRlciB3b3VsZCBhY3R1YWxseSBiZS4gVGltZSB0byBkaWcgZGVlcGVyIGludG8gdGhlIGZ1bmN0aW9uIGl0c2VsZi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzMCwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIwOjQxOjIwLjExOTY3Njg0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDAxMjMwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJybW5ldF9tYXBfZGVhZ2dyZWdhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXBfZGF0YS5jPTMzNj11MzIgcm1uZXRfbWFwX3ZhbGlkYXRlX3BhY2tldF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHJtbmV0X3BvcnQgKnBvcnQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXBfZGF0YS5jLTM4Mi0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXBfZGF0YS5jOjM4MzpzdHJ1Y3Qgc2tfYnVmZiAqcm1uZXRfbWFwX2RlYWdncmVnYXRlKHN0cnVjdCBza19idWZmICpza2IsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuYy0zODQtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHJtbmV0X3BvcnQgKnBvcnQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIwOjQxOjIwLjIwMzY5OTAyOFoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjM2NDM3NDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbjogYHJtbmV0X21hcF9kZWFnZ3JlZ2F0ZWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgcm1uZXRfbWFwX2RlYWdncmVnYXRlYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IHBhcnNlIHRoZSBuYW1lLiBUaGUgXCJybW5ldFwiIHN1Z2dlc3RzIHRoaXMgaXMgcmVsYXRlZCB0byBhIFJhZGlvIE1vZGVtIE5ldHdvcmssIGEga2V5IGNvbmNlcHQuIFRoZSBcIm1hcFwiIGVsZW1lbnQgcG9pbnRzIHRvIGEgbWVjaGFuaXNtIGludm9sdmluZyBhc3NvY2lhdGlvbnMgb3IgbG9va3VwcyBvZiBzb21lIGtpbmQsIGFuZCB0aGVuIFwiZGVhZ2dyZWdhdGVcIiBhbG1vc3QgY2VydGFpbmx5IGltcGxpZXMgc29tZSBsZXZlbCBvZiBkYXRhIHNwbGl0dGluZyBvciBkaXNzZWN0aW9uLlxuXG5TbywgSSdtIGFscmVhZHkgZW52aXNpb25pbmcgYSBjb3JlIGZ1bmN0aW9uIHByb2JhYmx5IHRhc2tlZCB3aXRoIGJyZWFraW5nIGRvd24gYSBwb3RlbnRpYWxseSBjb21wbGV4IG9yIGVuY2Fwc3VsYXRlZCBwYXlsb2FkIHJlY2VpdmVkIG92ZXIgYW4gUk1ORVQgaW50ZXJmYWNlLCB1c2luZyBzb21lIGtpbmQgb2YgbWFwcGluZyBzdHJ1Y3R1cmUgb3IgbG9va3VwIHRvIGhhbmRsZSB0aGUgZGVhZ2dyZWdhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpcyBiZWluZyBkZWFnZ3JlZ2F0ZWQuXG5cbldoYXQgc3BlY2lmaWMgcGllY2VzIG9mIGRhdGEgYXJlIHdlIHdvcmtpbmcgd2l0aD8gV2hhdCdzIGJlaW5nIG1hcHBlZD8gSXMgaXQgYSBoZWFkZXIsIGEgcHJvdG9jb2wgaWRlbnRpZmllciwgZmxvdyBpbmZvcm1hdGlvbiwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSB0eXBlIG9mIGRhdGEgaXQgaXMgbWFwcGluZyBhbmQgZGVhZ2dyZWdhdGluZyB3aWxsIHNpZ25pZmljYW50bHkgaW5mbHVlbmNlIHRoZSBkYXRhIHN0cnVjdHVyZXMsIGFsZ29yaXRobXMsIGFuZCBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucy4gSSBzaG91bGQgYmUgbG9va2luZyBmb3IgY2x1ZXMgb24gaG93IHRoZSBSTU5FVCBsYXllciAob3IgcHJvdG9jb2wpIGlzIGFyY2hpdGVjdHVyZWQuIFRoZSBkZWFnZ3JlZ2F0aW9uICptdXN0KiBiZSBjb25uZWN0ZWQgdG8gYSBjb3JyZXNwb25kaW5nIGFnZ3JlZ2F0aW9uIHNvbWV3aGVyZSB1cHN0cmVhbS5cblxuSSB3YW50IHRvIGtub3cgaWYgdGhlcmUgaXMgYW55IGRpc2N1c3Npb24gcmVnYXJkaW5nIHRoZSB0cmFkZSBvZmZzIGZvciBkaWZmZXJlbnQga2luZHMgb2YgbWFwcGluZ3MgYW5kIGRlYWdncmVnYXRpb25zLiBJIHdhbnQgdG8gY2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIG1hcHBpbmcgc3RydWN0dXJlIGlzIGVmZmljaWVudDsgdGhpbmsgYWJvdXQgaGFzaCB0YWJsZXMsIGJpbmFyeSBzZWFyY2ggdHJlZXMgb3IsIGF0IGxlYXN0LCBvcHRpbWl6ZWQgbG9vcHMuIEFyZSB3ZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHRoYXQgbmVlZHMgdG8gYmUgZmFzdCBhbmQgbG93LWxhdGVuY3kgb3IgY2FuIHdlIHRvbGVyYXRlIGEgaGlnaGVyIG92ZXJoZWFkPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgdXNhZ2U/IEFyZSB0aGVyZSBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIG9yIGJ1ZmZlciBvdmVyZmxvd3MgdG8gY29uc2lkZXI/IFRoYXQncyBsaWtlbHkgdmVyeSBpbXBvcnRhbnQuXG5cbkZ1cnRoZXJtb3JlLCBjb250ZXh0IGlzIGtleS4gV2hhdCBkb2VzIHRoaXMgaW50ZWdyYXRlIHdpdGg/IFdoYXQgaGFwcGVucyB0byB0aGUgZGVhZ2dyZWdhdGVkIGRhdGEgYWZ0ZXIgdGhpcyBwb2ludD8gV2hhdCBhcmUgaXRzIGlucHV0cyBhbmQgb3V0cHV0cz8gRG9lcyBpdCB3b3JrIGluIHJlYWwgdGltZSwgb3IgaXMgaXQgb2ZmbGluZT8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBlcnJvciBjb25kaXRpb25zIHRvIGxvb2sgZm9yPyBBcmUgdGhlcmUgc3BlY2lmaWMgcHJvdG9jb2xzIGludm9sdmVkPyBJJ20gaG9waW5nIHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZSB0byBrbm93IGhvdyB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuIFdpdGggdGhpcyBrbm93bGVkZ2UgSSBjYW4gYmUgY29uZmlkZW50IGluIGhvdyB0byBiZXN0IG1haW50YWluIGFuZCBpbXByb3ZlIHRoaXMgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg1OCwiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIwOjQxOjI1LjQ0MDE0MTg0M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTAyNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwX2RhdGEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzODMsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzODM6XFx0c3RydWN0IHNrX2J1ZmYgKnJtbmV0X21hcF9kZWFnZ3JlZ2F0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAzODQ6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHJtbmV0X3BvcnQgKnBvcnQpXFxuIDM4NTpcXHR7XFxuIDM4NjpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tibjtcXG4gMzg3OlxcdFxcdHUzMiBwYWNrZXRfbGVuO1xcbiAzODg6XFx0XFxuIDM4OTpcXHRcXHRwYWNrZXRfbGVuID0gcm1uZXRfbWFwX3ZhbGlkYXRlX3BhY2tldF9sZW4oc2tiLCBwb3J0KTtcXG4gMzkwOlxcdFxcdGlmICghcGFja2V0X2xlbilcXG4gMzkxOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAzOTI6XFx0XFxuIDM5MzpcXHRcXHRza2JuID0gYWxsb2Nfc2tiKHBhY2tldF9sZW4gKyBSTU5FVF9NQVBfREVBR0dSX1NQQUNJTkcsIEdGUF9BVE9NSUMpO1xcbiAzOTQ6XFx0XFx0aWYgKCFza2JuKVxcbiAzOTU6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDM5NjpcXHRcXG4gMzk3OlxcdFxcdHNrYm4tXFx1MDAzZWRldiA9IHNrYi1cXHUwMDNlZGV2O1xcbiAzOTg6XFx0XFx0c2tiX3Jlc2VydmUoc2tibiwgUk1ORVRfTUFQX0RFQUdHUl9IRUFEUk9PTSk7XFxuIDM5OTpcXHRcXHRza2JfcHV0KHNrYm4sIHBhY2tldF9sZW4pO1xcbiA0MDA6XFx0XFx0bWVtY3B5KHNrYm4tXFx1MDAzZWRhdGEsIHNrYi1cXHUwMDNlZGF0YSwgcGFja2V0X2xlbik7XFxuIDQwMTpcXHRcXHRza2JfcHVsbChza2IsIHBhY2tldF9sZW4pO1xcbiA0MDI6XFx0XFxuIDQwMzpcXHRcXHRyZXR1cm4gc2tibjtcXG4gNDA0OlxcdH1cXG4gNDA1OlxcdFxcbiA0MDY6XFx0LyogVmFsaWRhdGVzIHBhY2tldCBjaGVja3N1bXMuIEZ1bmN0aW9uIHRha2VzIGEgcG9pbnRlciB0b1xcbiA0MDc6XFx0ICogdGhlIGJlZ2lubmluZyBvZiBhIGJ1ZmZlciB3aGljaCBjb250YWlucyB0aGUgSVAgcGF5bG9hZCArXFxuIDQwODpcXHQgKiBwYWRkaW5nICsgY2hlY2tzdW0gdHJhaWxlci5cXG4gNDA5OlxcdCAqIE9ubHkgSVB2NCBhbmQgSVB2NiBhcmUgc3VwcG9ydGVkIGFsb25nIHdpdGggVENQIFxcdTAwMjYgVURQLlxcbiA0MTA6XFx0ICogRnJhZ21lbnRlZCBvciB0dW5uZWxlZCBwYWNrZXRzIGFyZSBub3Qgc3VwcG9ydGVkLlxcbiA0MTE6XFx0ICovXFxuIDQxMjpcXHRpbnQgcm1uZXRfbWFwX2NoZWNrc3VtX2Rvd25saW5rX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgbGVuKVxcbiA0MTM6XFx0e1xcbiA0MTQ6XFx0XFx0c3RydWN0IHJtbmV0X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihza2ItXFx1MDAzZWRldik7XFxuIDQxNTpcXHRcXHRzdHJ1Y3Qgcm1uZXRfbWFwX2RsX2NzdW1fdHJhaWxlciAqY3N1bV90cmFpbGVyO1xcbiA0MTY6XFx0XFxuIDQxNzpcXHRcXHRpZiAodW5saWtlbHkoIShza2ItXFx1MDAzZWRldi1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX1JYQ1NVTSkpKSB7XFxuIDQxODpcXHRcXHRcXHRwcml2LVxcdTAwM2VzdGF0cy5jc3VtX3N3Kys7XFxuIDQxOTpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIDQyMDpcXHRcXHR9XFxuIDQyMTpcXHRcXG4gNDIyOlxcdFxcdGNzdW1fdHJhaWxlciA9IChzdHJ1Y3Qgcm1uZXRfbWFwX2RsX2NzdW1fdHJhaWxlciAqKShza2ItXFx1MDAzZWRhdGEgKyBsZW4pO1xcbiA0MjM6XFx0XFxuIDQyNDpcXHRcXHRpZiAoIShjc3VtX3RyYWlsZXItXFx1MDAzZWZsYWdzIFxcdTAwMjYgTUFQX0NTVU1fRExfVkFMSURfRkxBRykpIHtcXG4gNDI1OlxcdFxcdFxcdHByaXYtXFx1MDAzZXN0YXRzLmNzdW1fdmFsaWRfdW5zZXQrKztcXG4gNDI2OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0Mjc6XFx0XFx0fVxcbiA0Mjg6XFx0XFxuIDQyOTpcXHRcXHRpZiAoc2tiLVxcdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpXFxuIDQzMDpcXHRcXHRcXHRyZXR1cm4gcm1uZXRfbWFwX2lwdjRfZGxfY3N1bV90cmFpbGVyKHNrYiwgY3N1bV90cmFpbGVyLCBwcml2KTtcXG4gNDMxOlxcdFxcbiA0MzI6XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0lQVjYpIFxcdTAwMjZcXHUwMDI2IHNrYi1cXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIwOjQxOjI1LjQ0MDI5NDY0M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTU0MDU4Mzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBTS0IgRGV2aWNlIFBvaW50ZXIgRml4KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBzZXR0aW5nIGBza2JuLVx1MDAzZWRldiA9IHNrYi1cdTAwM2VkZXY7YC4gUmlnaHQsIEkgc2VlIHRoZSBpbW1lZGlhdGUgaW50ZW50OiBpdCdzIGEgZml4IGFpbWVkIGF0IHByZXZlbnRpbmcgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIG9yIHNvbWV0aGluZyB2ZXJ5IG11Y2ggbGlrZSBpdC4gSWYgYHNrYm4tXHUwMDNlZGV2YCBpcyBsZWZ0IGFzIE5VTEwsIHdlJ3JlIGdvaW5nIHRvIGdldCBhIGNyYXNoIHdoZW4gdGhhdCBwb2ludGVyIGdldHMgYWNjZXNzZWQgZG93bnN0cmVhbSwgYW5kIEkgY2FuIHNlZSBwcmVjaXNlbHkgd2hlcmUgdGhpcyBpcyBhbiBpc3N1ZS4gVGhpbmtpbmcgYWJvdXQgZXhhbXBsZXMsIGxpa2UgYG5ldGRldl9wcml2KHNrYi1cdTAwM2VkZXYpYCBpbiBhIGZ1bmN0aW9uIHN1Y2ggYXMgYHJtbmV0X21hcF9jaGVja3N1bV9kb3dubGlua19wYWNrZXRgIG9yIGFueXdoZXJlIHRoYXQgaXMgdHJ5aW5nIHRvIHVzZSB0aGUgZGV2IHBvaW50ZXIuXG5cbkl0J3Mgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHByb2JsZW07IEkga25vdyBgYWxsb2Nfc2tiYCBpbml0aWFsaXplcyBgc2tiLVx1MDAzZWRldmAgdG8gTlVMTCwgc28gdGhlcmUncyB0aGUgaW5pdGlhbCBzdGF0ZS4gQnV0LCBoYW5nIG9uLi4uIGxldCBtZSByZS10cmFjZSB0aGUgYWxsb2NhdGlvbiBwYXRoLiBJZiBteSBtZW1vcnkgc2VydmVzLCBgYWxsb2Nfc2tiYCByZWxpZXMgb24gYGttZW1fY2FjaGVfYWxsb2NgLCB3aGljaCBpbiB0dXJuLCBzaG91bGQgc2V0IGBza2ItXHUwMDNlZGV2ID0gTlVMTGAgd2l0aGluIHRoZSBmdW5jdGlvbiBgX19idWlsZF9za2JfYXJvdW5kYCBvciBgX19hbGxvY19za2JgLlxuXG5UbyBiZSBjZXJ0YWluLCBsZXQncyB0YWtlIGEgcXVpY2sgbG9vayBhdCBgX19hbGxvY19za2JgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjMzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjA6NDE6MzAuNTk0MzU1OTJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDE5MTcyMSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tiLVxcdTAwM2VkZXYgPSBOVUxMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMDo0MTozMC43MTQ1NjAwNzFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzczNTQwNzExNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSBkZWVwbHkgaW52b2x2ZWQgaW4gdGhpcyBhcmVhOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTS0IgQWxsb2NhdGlvbiBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgZ3V0cyBvZiB0aGUgbmV0d29ya2luZyBzdGFjayBhbmQgbmVlZCB0byBkaWcgaW50byBob3cgdGhvc2UgYHNrYmAgKHNvY2tldCBidWZmZXIpIHN0cnVjdHVyZXMgYXJlIGFjdHVhbGx5IGFsbG9jYXRlZC4gVGltZSB0byBwdWxsIHVwIHRoZSBzb3VyY2UgY29kZSBmb3IgYF9fYWxsb2Nfc2tiYCBpbiBgbmV0L2NvcmUvc2tidWZmLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHRoZSBjb3JlIG9mIGhvdyBvdXIgbmV0d29ya2luZyBkYXRhIGlzIG1hbmFnZWQgYXQgdGhlIHBhY2tldCBsZXZlbC4gSXQncyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGV2ZXJ5IGluY29taW5nIGFuZCBvdXRnb2luZyBuZXR3b3JrIHBhY2tldC4gVW5kZXJzdGFuZGluZyB0aGlzIGZ1bmN0aW9uIGludGltYXRlbHkgaXMgY3J1Y2lhbCBmb3IgcGVyZm9ybWFuY2UgdHVuaW5nLCBkZWJ1Z2dpbmcgbWVtb3J5LXJlbGF0ZWQgaXNzdWVzLCBhbmQgcG90ZW50aWFsbHksIGNyYWZ0aW5nIGFueSBjdXN0b20gbmV0d29ya2luZyBzb2x1dGlvbnMuIEkgZXhwZWN0IHRoaXMgd2lsbCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGdldHRpbmcgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgcHJvYmxlbSBJJ20gd29ya2luZyB3aXRoIHRvZGF5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzIzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjA6NDE6MzQuNDQ5OTcwMzU1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTM3MjMwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2FsbG9jX3NrYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za2J1ZmYuYz02MDY9c3RhdGljIHZvaWQgKmttYWxsb2NfcmVzZXJ2ZSh1bnNpZ25lZCBpbnQgKnNpemUsIGdmcF90IGZsYWdzLCBpbnQgbm9kZSxcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTY1Ny0vKipcXG5uZXQvY29yZS9za2J1ZmYuYzo2NTg6ICpcXHRfX2FsbG9jX3NrYlxcdC1cXHRhbGxvY2F0ZSBhIG5ldHdvcmsgYnVmZmVyXFxubmV0L2NvcmUvc2tidWZmLmMtNjU5LSAqXFx0QHNpemU6IHNpemUgdG8gYWxsb2NhdGVcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTY3My0gKi9cXG5uZXQvY29yZS9za2J1ZmYuYzo2NzQ6c3RydWN0IHNrX2J1ZmYgKl9fYWxsb2Nfc2tiKHVuc2lnbmVkIGludCBzaXplLCBnZnBfdCBnZnBfbWFzayxcXG5uZXQvY29yZS9za2J1ZmYuYy02NzUtXFx0XFx0XFx0ICAgIGludCBmbGFncywgaW50IG5vZGUpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy03NDUtfVxcbm5ldC9jb3JlL3NrYnVmZi5jOjc0NjpFWFBPUlRfU1lNQk9MKF9fYWxsb2Nfc2tiKTtcXG5uZXQvY29yZS9za2J1ZmYuYy03NDctXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz03NjE9c3RydWN0IHNrX2J1ZmYgKl9fbmV0ZGV2X2FsbG9jX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbGVuLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNzc2LVxcdCAgICAoZ2ZwX21hc2sgXFx1MDAyNiAoX19HRlBfRElSRUNUX1JFQ0xBSU0gfCBHRlBfRE1BKSkpIHtcXG5uZXQvY29yZS9za2J1ZmYuYzo3Nzc6XFx0XFx0c2tiID0gX19hbGxvY19za2IobGVuLCBnZnBfbWFzaywgU0tCX0FMTE9DX1JYLCBOVU1BX05PX05PREUpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTc3OC1cXHRcXHRpZiAoIXNrYilcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTgzOD1zdHJ1Y3Qgc2tfYnVmZiAqbmFwaV9hbGxvY19za2Ioc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCB1bnNpZ25lZCBpbnQgbGVuKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtODU0LVxcdCAgICAoZ2ZwX21hc2sgXFx1MDAyNiAoX19HRlBfRElSRUNUX1JFQ0xBSU0gfCBHRlBfRE1BKSkpIHtcXG5uZXQvY29yZS9za2J1ZmYuYzo4NTU6XFx0XFx0c2tiID0gX19hbGxvY19za2IobGVuLCBnZnBfbWFzaywgU0tCX0FMTE9DX1JYIHwgU0tCX0FMTE9DX05BUEksXFxubmV0L2NvcmUvc2tidWZmLmMtODU2LVxcdFxcdFxcdFxcdCAgTlVNQV9OT19OT0RFKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTIxNzc9c3RydWN0IHNrX2J1ZmYgKnNrYl9jb3B5KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjE5MC1cXHRzaXplID0gc2tiX2VuZF9vZmZzZXQoc2tiKSArIHNrYi1cXHUwMDNlZGF0YV9sZW47XFxubmV0L2NvcmUvc2tidWZmLmM6MjE5MTpcXHRuID0gX19hbGxvY19za2Ioc2l6ZSwgZ2ZwX21hc2ssXFxubmV0L2NvcmUvc2tidWZmLmMtMjE5Mi1cXHRcXHRcXHRza2JfYWxsb2NfcnhfZmxhZyhza2IpLCBOVU1BX05PX05PREUpO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MjIyNT1zdHJ1Y3Qgc2tfYnVmZiAqX19wc2tiX2NvcHlfZmNsb25lKHN0cnVjdCBza19idWZmICpza2IsIGludCBoZWFkcm9vbSxcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTIyMjktXFx0aW50IGZsYWdzID0gc2tiX2FsbG9jX3J4X2ZsYWcoc2tiKSB8IChmY2xvbmUgPyBTS0JfQUxMT0NfRkNMT05FIDogMCk7XFxubmV0L2NvcmUvc2tidWZmLmM6MjIzMDpcXHRzdHJ1Y3Qgc2tfYnVmZiAqbiA9IF9fYWxsb2Nfc2tiKHNpemUsIGdmcF9tYXNrLCBmbGFncywgTlVNQV9OT19OT0RFKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0yMjMxLVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MjUwMj1zdHJ1Y3Qgc2tfYnVmZiAqc2tiX2NvcHlfZXhwYW5kKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0yNTE5LVxcdG9sZGhlYWRyb29tID0gc2tiX2hlYWRyb29tKHNrYik7XFxubmV0L2NvcmUvc2tidWZmLmM6MjUyMDpcXHRuID0gX19hbGxvY19za2IobmV3aGVhZHJvb20gKyBza2ItXFx1MDAzZWxlbiArIG5ld3RhaWxyb29tLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTI1MjEtXFx0XFx0XFx0Z2ZwX21hc2ssIHNrYl9hbGxvY19yeF9mbGFnKHNrYiksXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz00Nzc3PXN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqaGVhZF9za2IsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy00OTQ0LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjQ5NDU6XFx0XFx0XFx0bnNrYiA9IF9fYWxsb2Nfc2tiKGhzaXplICsgZG9mZnNldCArIGhlYWRyb29tLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTQ5NDYtXFx0XFx0XFx0XFx0XFx0ICAgR0ZQX0FUT01JQywgc2tiX2FsbG9jX3J4X2ZsYWcoaGVhZF9za2IpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMDo0MTozNC41MjEzNDc4MzFaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIwNDYyMzgxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgYF9fYWxsb2Nfc2tiYCBpbXBsZW1lbnRhdGlvbjpcblxuKipEaXZpbmcgaW50byBgX19hbGxvY19za2JgKipcblxuT2theSwgdGltZSB0byBkaXNzZWN0IHRoZSBndXRzIG9mIGBfX2FsbG9jX3NrYmAuIExldCdzIGFzc3VtZSB0aGVyZSBhcmUgcGVyZm9ybWFuY2UgaXNzdWVzLCBvciBtYXliZSBJJ20gbG9va2luZyBhdCBwb3RlbnRpYWwgbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ2llcyBhbmQgaG93IHRoZXkgY2FuIGJlIG9wdGltaXplZC4gTXkgZmlyc3QgcG9ydCBvZiBjYWxsIHdpbGwgYmUgdG8gY2hlY2sgb3V0IGhvdyBgX19hbGxvY19za2JgIGlzIGltcGxlbWVudGVkLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGFyY2hpdGVjdHVyYWwgY29udGV4dC4gV2hhdCBoYXJkd2FyZSBhbSBJIGRlYWxpbmcgd2l0aD8gSXMgdGhpcyBhIHN5c3RlbSB3aXRoIERNQSBjYXBhYmlsaXRpZXM/IEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgaGlnaC10aHJvdWdocHV0IG5ldHdvcmsgY2FyZD8gVGhpcyB1bmRlcnN0YW5kaW5nIGlzIGFic29sdXRlbHkgY3JpdGljYWwgdG8gZXZlbiBiZWdpbiB1bmRlcnN0YW5kaW5nIHRoZSBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyBvciBwb3RlbnRpYWwgaXNzdWVzIGluIHRoaXMgZnVuZGFtZW50YWwgYWxsb2NhdGlvbiBmdW5jdGlvbi4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgaXMgdGhlIHVuZGVybHlpbmcgbWVtb3J5IG1hbmFnZW1lbnQgYSBmYWN0b3I/IEFyZSB3ZSBydW5uaW5nIHdpdGggYSBzdGFuZGFyZCBtZW1vcnkgYWxsb2NhdG9yIGxpa2UgU0xBQiwgU0xVQiwgb3Igc29tZXRoaW5nIG1vcmUgc3BlY2lhbGl6ZWQ/IFRoZSBjaG9pY2Ugb2YgYWxsb2NhdG9yIHNpZ25pZmljYW50bHkgaW1wYWN0cyBwZXJmb3JtYW5jZSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBwaWVjZSBmaXJzdC4gTm93LCBsZXQncyBsb29rIGF0IHRoZSBjb2RlLi4uIHdoYXQncyB0aGUgYWxsb2NhdGlvbiBzaXplPyBBcmUgdGhleSB1c2luZyBhIGNvbW1vbiBzaXplLCBhcmUgdGhlcmUgc2l6ZSBjbGFzc2VzLCBob3cgaXMgdGhlIGFjdHVhbCBtZW1vcnkgYmVpbmcgcmV0cmlldmVkIGZyb20gdGhlIGtlcm5lbD8gSXMgdGhlcmUgYSBzcGlubG9jayBvciBvdGhlciBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtPyBJcyBpdCBlZmZpY2llbnQsIG9yIGlzIGl0IGEgYm90dGxlbmVjaz8gTGV0J3MgY2hlY2sgdGhlIGZsYWdzIHBhc3NlZCB0byB0aGUga2VybmVsJ3MgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb25zIOKAkyBgR0ZQXy4uLmAgZmxhZ3MgZ2l2ZSB1cyBjbHVlcyBhYm91dCBhbGxvY2F0aW9uIGJlaGF2aW9yIGFuZCBwcmlvcml0aWVzLiBEb2VzIGl0IGFnZ3Jlc3NpdmVseSB0cnkgdG8gYXZvaWQgZnJhZ21lbnRhdGlvbj8gSXMgdGhlcmUgYSBwb3RlbnRpYWwgZm9yIG1lbW9yeSBsZWFrcyBvciBvdGhlciBhbGxvY2F0aW9uIHByb2JsZW1zIEkgbmVlZCB0byBiZSBjb25jZXJuZWQgd2l0aD8gTGV0J3MgdHJhY2UgdGhyb3VnaCB0aGUgbG9naWMgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaG90c3BvdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwNTksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMDo0MTozOC43MjU5NzQyMjhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc1MDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY3NCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY3NDpcXHRzdHJ1Y3Qgc2tfYnVmZiAqX19hbGxvY19za2IodW5zaWduZWQgaW50IHNpemUsIGdmcF90IGdmcF9tYXNrLFxcbiA2NzU6XFx0XFx0XFx0XFx0ICAgIGludCBmbGFncywgaW50IG5vZGUpXFxuIDY3NjpcXHR7XFxuIDY3NzpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcXG4gNjc4OlxcdFxcdHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZTtcXG4gNjc5OlxcdFxcdHU4ICpkYXRhO1xcbiA2ODA6XFx0XFxuIDY4MTpcXHRcXHRpZiAoc2tfbWVtYWxsb2Nfc29ja3MoKSBcXHUwMDI2XFx1MDAyNiAoZmxhZ3MgXFx1MDAyNiBTS0JfQUxMT0NfUlgpKVxcbiA2ODI6XFx0XFx0XFx0Z2ZwX21hc2sgfD0gX19HRlBfTUVNQUxMT0M7XFxuIDY4MzpcXHRcXG4gNjg0OlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IFNLQl9BTExPQ19GQ0xPTkUpIHtcXG4gNjg1OlxcdFxcdFxcdGNhY2hlID0gbmV0X2hvdGRhdGEuc2tidWZmX2ZjbG9uZV9jYWNoZTtcXG4gNjg2OlxcdFxcdFxcdGdvdG8gZmFsbGJhY2s7XFxuIDY4NzpcXHRcXHR9XFxuIDY4ODpcXHRcXHRjYWNoZSA9IG5ldF9ob3RkYXRhLnNrYnVmZl9jYWNoZTtcXG4gNjg5OlxcdFxcdGlmICh1bmxpa2VseShub2RlICE9IE5VTUFfTk9fTk9ERSBcXHUwMDI2XFx1MDAyNiBub2RlICE9IG51bWFfbWVtX2lkKCkpKVxcbiA2OTA6XFx0XFx0XFx0Z290byBmYWxsYmFjaztcXG4gNjkxOlxcdFxcbiA2OTI6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgU0tCX0FMTE9DX05BUEkpIHtcXG4gNjkzOlxcdFxcdFxcdHNrYiA9IG5hcGlfc2tiX2NhY2hlX2dldCh0cnVlKTtcXG4gNjk0OlxcdFxcdFxcdGlmICh1bmxpa2VseSghc2tiKSlcXG4gNjk1OlxcdFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA2OTY6XFx0XFx0fSBlbHNlIGlmICghaW5faGFyZGlycSgpIFxcdTAwMjZcXHUwMDI2ICFpcnFzX2Rpc2FibGVkKCkpIHtcXG4gNjk3OlxcdFxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4gNjk4OlxcdFxcdFxcdHNrYiA9IG5hcGlfc2tiX2NhY2hlX2dldChmYWxzZSk7XFxuIDY5OTpcXHRcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4gNzAwOlxcdFxcdH1cXG4gNzAxOlxcdFxcbiA3MDI6XFx0XFx0aWYgKCFza2IpIHtcXG4gNzAzOlxcdGZhbGxiYWNrOlxcbiA3MDQ6XFx0XFx0XFx0c2tiID0ga21lbV9jYWNoZV9hbGxvY19ub2RlKGNhY2hlLCBnZnBfbWFzayBcXHUwMDI2IH5HRlBfRE1BLCBub2RlKTtcXG4gNzA1OlxcdFxcdFxcdGlmICh1bmxpa2VseSghc2tiKSlcXG4gNzA2OlxcdFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA3MDc6XFx0XFx0fVxcbiA3MDg6XFx0XFx0c2tidWZmX2NsZWFyKHNrYik7XFxuIDcwOTpcXHRcXG4gNzEwOlxcdFxcdC8qIFdlIGRvIG91ciBiZXN0IHRvIGFsaWduIHNrYl9zaGFyZWRfaW5mbyBvbiBhIHNlcGFyYXRlIGNhY2hlXFxuIDcxMTpcXHRcXHQgKiBsaW5lLiBJdCB1c3VhbGx5IHdvcmtzIGJlY2F1c2Uga21hbGxvYyhYIFxcdTAwM2UgU01QX0NBQ0hFX0JZVEVTKSBnaXZlc1xcbiA3MTI6XFx0XFx0ICogYWxpZ25lZCBtZW1vcnkgYmxvY2tzLCB1bmxlc3MgU0xVQi9TTEFCIGRlYnVnIGlzIGVuYWJsZWQuXFxuIDcxMzpcXHRcXHQgKiBCb3RoIHNrYi1cXHUwMDNlaGVhZCBhbmQgc2tiX3NoYXJlZF9pbmZvIGFyZSBjYWNoZSBsaW5lIGFsaWduZWQuXFxuIDcxNDpcXHRcXHQgKi9cXG4gNzE1OlxcdFxcdGRhdGEgPSBrbWFsbG9jX3Jlc2VydmUoXFx1MDAyNnNpemUsIGdmcF9tYXNrLCBub2RlLCBza2IpO1xcbiA3MTY6XFx0XFx0aWYgKHVubGlrZWx5KCFkYXRhKSlcXG4gNzE3OlxcdFxcdFxcdGdvdG8gbm9kYXRhO1xcbiA3MTg6XFx0XFx0Lyoga21hbGxvY19zaXplX3JvdW5kdXAoKSBtaWdodCBnaXZlIHVzIG1vcmUgcm9vbSB0aGFuIHJlcXVlc3RlZC5cXG4gNzE5OlxcdFxcdCAqIFB1dCBza2Jfc2hhcmVkX2luZm8gZXhhY3RseSBhdCB0aGUgZW5kIG9mIGFsbG9jYXRlZCB6b25lLFxcbiA3MjA6XFx0XFx0ICogdG8gYWxsb3cgbWF4IHBvc3NpYmxlIGZpbGxpbmcgYmVmb3JlIHJlYWxsb2NhdGlvbi5cXG4gNzIxOlxcdFxcdCAqL1xcbiA3MjI6XFx0XFx0X19maW5hbGl6ZV9za2JfYXJvdW5kKHNrYiwgZGF0YSwgc2l6ZSk7XFxuIDcyMzpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjA6NDE6MzguNzI2MzUwNDc5WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNjQ2MTIxOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBza2J1ZmZfY2xlYXJgKipcblxuT2theSwgc28gdGhlIGluc3RydWN0aW9uIGlzIHRvIGV4YW1pbmUgYHNrYnVmZl9jbGVhcmAuIE5hdHVyYWxseSwgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCBpdHMgY29yZSBmdW5jdGlvbjogY2xlYXJpbmcgYSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikuIE15IGV4cGVydGlzZSBkaWN0YXRlcyB0aGF0IEkgbmVlZCB0byBkaXNzZWN0IGV4YWN0bHkgKmhvdyogaXQgY2xlYXJzIHRoZSBza2IuIERvZXMgaXQgc2ltcGx5IHplcm8gb3V0IHRoZSBtZW1vcnk/IERvZXMgaXQgcmVsZWFzZSByZXNvdXJjZXM/IERvZXMgaXQgYWZmZWN0IHRoZSBjb250cm9sIHN0cnVjdHVyZXMgaW4gYW55IHdheT8gVGhlIGdvYWwgaXMgdG8gc2VlIHByZWNpc2VseSBob3cgdGhlIHNrYiBpcyBiZWluZyBwdXJnZWQsIHNvIEkgbmVlZCB0byBjaGVjayBgc2tidWZmX2NsZWFyYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI2NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjA6NDE6NDEuOTkwOTc2NjE3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Mzk3NDU3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza2J1ZmZfY2xlYXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvc2tidWZmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2tidWZmLmM9Mjg0PXN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKm5hcGlfc2tiX2NhY2hlX2dldChib29sIGFsbG9jKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMzE1LSAqL1xcbm5ldC9jb3JlL3NrYnVmZi5jOjMxNjpzdGF0aWMgaW5saW5lIHZvaWQgc2tidWZmX2NsZWFyKHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2NvcmUvc2tidWZmLmMtMzE3LXtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTM0ND11MzIgbmFwaV9za2JfY2FjaGVfZ2V0X2J1bGsodm9pZCAqKnNrYnMsIHUzMiBuKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMzc5LVxcdFxcdGthc2FuX21lbXBvb2xfdW5wb2lzb25fb2JqZWN0KHNrYnNbaV0sIHNrYnVmZl9jYWNoZV9zaXplKTtcXG5uZXQvY29yZS9za2J1ZmYuYzozODA6XFx0XFx0c2tidWZmX2NsZWFyKHNrYnNbaV0pO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTM4MS1cXHR9XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz00Mzc9c3RydWN0IHNrX2J1ZmYgKnNsYWJfYnVpbGRfc2tiKHZvaWQgKmRhdGEpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy00NDYtXFxubmV0L2NvcmUvc2tidWZmLmM6NDQ3OlxcdHNrYnVmZl9jbGVhcihza2IpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTQ0OC1cXHRkYXRhID0gX19zbGFiX2J1aWxkX3NrYihkYXRhLCBcXHUwMDI2c2l6ZSk7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz00OTA9c3RydWN0IHNrX2J1ZmYgKl9fYnVpbGRfc2tiKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBmcmFnX3NpemUpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy00OTgtXFxubmV0L2NvcmUvc2tidWZmLmM6NDk5OlxcdHNrYnVmZl9jbGVhcihza2IpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTUwMC1cXHRfX2J1aWxkX3NrYl9hcm91bmQoc2tiLCBkYXRhLCBmcmFnX3NpemUpO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NTUyPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqX19uYXBpX2J1aWxkX3NrYih2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZnJhZ19zaXplKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNTU5LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjU2MDpcXHRza2J1ZmZfY2xlYXIoc2tiKTtcXG5uZXQvY29yZS9za2J1ZmYuYy01NjEtXFx0X19idWlsZF9za2JfYXJvdW5kKHNrYiwgZGF0YSwgZnJhZ19zaXplKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTY3ND1zdHJ1Y3Qgc2tfYnVmZiAqX19hbGxvY19za2IodW5zaWduZWQgaW50IHNpemUsIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNzA3LVxcdH1cXG5uZXQvY29yZS9za2J1ZmYuYzo3MDg6XFx0c2tidWZmX2NsZWFyKHNrYik7XFxubmV0L2NvcmUvc2tidWZmLmMtNzA5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMDo0MTo0Mi4wNjQ5NTY4NjRaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgyODA5NjA4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgYHNrYnVmZl9jbGVhcmAgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIGluaXRpYWwgdGhvdWdodCBoZXJlLCBcIkxldCdzIHJlYWQgYHNrYnVmZl9jbGVhcmAsXCIgaW5kaWNhdGVzIGEgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3Mgb2YgdGhhdCBzcGVjaWZpYyBmdW5jdGlvbi4gTXkgaW1tZWRpYXRlIGFzc3VtcHRpb24gaXMgdGhhdCB3ZSBhcmUgbG9va2luZyBhdCBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgTGludXgga2VybmVsJ3MgbmV0d29ya2luZyBzdGFjaywgZ2l2ZW4gdGhlIGBza2J1ZmZgIHByZWZpeC4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHdlJ2xsIGJlIGRlYWxpbmcgd2l0aCB0aGUgY29yZSBzdHJ1Y3R1cmUgdXNlZCBmb3IgbWFuYWdpbmcgbmV0d29yayBwYWNrZXRzIOKAkyB0aGUgYHNrX2J1ZmZgIHN0cnVjdHVyZSBpdHNlbGYuXG5cblRoZSBnb2FsIGlzIGxpa2VseSB0byBkZWNvbnN0cnVjdCBpdHMgb3BlcmF0aW9uOyB0byB1bmRlcnN0YW5kIHByZWNpc2VseSB3aGF0IGhhcHBlbnMgd2hlbiBhbiBgc2tidWZmYCBpbnN0YW5jZSBpcyBcImNsZWFyZWQuXCIgVGhpcyBjb3VsZCBpbnZvbHZlIHplcm9pbmcgb3V0IG1lbW9yeSwgcmVsZWFzaW5nIGFzc29jaWF0ZWQgcmVzb3VyY2VzIGxpa2UgZGF0YSBidWZmZXJzIGFuZCBtZXRhZGF0YSwgcG9zc2libHkgdXBkYXRpbmcgaW50ZXJuYWwgZmxhZ3MsIGFuZCBtYXliZSBldmVuIHJldHVybmluZyB0aGUgYHNrYnVmZmAgdG8gYSBwb29sIGZvciByZXVzZS4gVGhlIHNwZWNpZmljcyBhcmUga2V5IGhlcmUuIEknbGwgbmVlZCB0byBsb29rIGZvciBjYWxscyB0byBmdW5jdGlvbnMgbGlrZSBga2ZyZWVfc2tiYCwgYHNrYl9yZWxlYXNlX2RhdGFgLCBhbnkgbWFuaXB1bGF0aW9uIG9mIGBkYXRhYCwgYHRhaWxgLCBgbGVuYCwgYGhlYWRgLCBgbmV4dGAsIGBwcmV2YCBwb2ludGVycywgYW5kIGFueXRoaW5nIHJlbGF0ZWQgdG8gcmVmZXJlbmNlIGNvdW50aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIHdpbGwgYmUgb24gZW5zdXJpbmcgZWZmaWNpZW50IHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIHByZXZlbnRpbmcgbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcy4gSSdsbCBhbHNvIGJlIHdhdGNoaW5nIGZvciBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBpZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBjb25jdXJyZW50bHkgaW4gYSBtdWx0aS10aHJlYWRlZCBjb250ZXh0LiBBIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgaG93IGBza2J1ZmZfY2xlYXJgIGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBpbnRlcnJ1cHQgY29udGV4dHMgd2lsbCBiZSBjcnVjaWFsLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNvbW1lbnRzIHdpdGhpbiB0aGUgY29kZSwgYW5kIG1heWJlIGFsc28gYW55IHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiwgdG8gdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGUgY2hvc2VuIGltcGxlbWVudGF0aW9uLCBwYXJ0aWN1bGFybHkgaWYgYW55IG9wdGltaXphdGlvbnMgYXJlIGVtcGxveWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDk0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjA6NDE6NDYuODkzMDU1OTJaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQxMjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMxNixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMxNjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgc2tidWZmX2NsZWFyKHN0cnVjdCBza19idWZmICpza2IpXFxuIDMxNzpcXHR7XFxuIDMxODpcXHRcXHQvKiBSZXBsYWNlIG1lbXNldChza2IsIDAsIG9mZnNldG9mKHN0cnVjdCBza19idWZmLCB0YWlsKSlcXG4gMzE5OlxcdFxcdCAqIHdpdGggdHdvIHNtYWxsZXIgbWVtc2V0KCksIHdpdGggYSBiYXJyaWVyKCkgYmV0d2VlbiB0aGVtLlxcbiAzMjA6XFx0XFx0ICogVGhpcyBmb3JjZXMgdGhlIGNvbXBpbGVyIHRvIGlubGluZSBib3RoIGNhbGxzLlxcbiAzMjE6XFx0XFx0ICovXFxuIDMyMjpcXHRcXHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIHRhaWwpIFxcdTAwM2M9IDEyOCk7XFxuIDMyMzpcXHRcXHRtZW1zZXQoc2tiLCAwLCAxMjgpO1xcbiAzMjQ6XFx0XFx0YmFycmllcigpO1xcbiAzMjU6XFx0XFx0bWVtc2V0KCh2b2lkICopc2tiICsgMTI4LCAwLCBvZmZzZXRvZihzdHJ1Y3Qgc2tfYnVmZiwgdGFpbCkgLSAxMjgpO1xcbiAzMjY6XFx0fVxcbiAzMjc6XFx0XFxuIDMyODpcXHQvKipcXG4gMzI5OlxcdCAqIG5hcGlfc2tiX2NhY2hlX2dldF9idWxrIC0gb2J0YWluIGEgbnVtYmVyIG9mIHplcm9lZCBza2IgaGVhZHMgZnJvbSB0aGUgY2FjaGVcXG4gMzMwOlxcdCAqIEBza2JzOiBwb2ludGVyIHRvIGFuIGF0IGxlYXN0IEBuLXNpemVkIGFycmF5IHRvIGZpbGwgd2l0aCBza2IgcG9pbnRlcnNcXG4gMzMxOlxcdCAqIEBuOiBudW1iZXIgb2YgZW50cmllcyB0byBwcm92aWRlXFxuIDMzMjpcXHQgKlxcbiAzMzM6XFx0ICogVHJpZXMgdG8gb2J0YWluIEBuIFxcdTAwMjZza19idWZmIGVudHJpZXMgZnJvbSB0aGUgTkFQSSBwZXJjcHUgY2FjaGUgYW5kIHdyaXRlc1xcbiAzMzQ6XFx0ICogdGhlIHBvaW50ZXJzIGludG8gdGhlIHByb3ZpZGVkIGFycmF5IEBza2JzLiBJZiB0aGVyZSBhcmUgbGVzcyBlbnRyaWVzXFxuIDMzNTpcXHQgKiBhdmFpbGFibGUsIHRyaWVzIHRvIHJlcGxlbmlzaCB0aGUgY2FjaGUgYW5kIGJ1bGstYWxsb2NhdGVzIHRoZSBkaWZmIGZyb21cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjA6NDE6NDYuODkzNTk5MTUxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2MDExNzkxNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgSSBzZWUgdGhlIGNvcmUgaXNzdWU6IGBza2ItXHUwMDNlZGV2YCBpcyBpbml0aWFsaXplZCB0byBOVUxMIHdoZW4gYHNrYm5gIGlzIGFsbG9jYXRlZC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBzaW1wbGUgbGluZTogYHNrYm4tXHUwMDNlZGV2ID0gc2tiLVx1MDAzZWRldjtgLiBUaGF0J3MganVzdCBhIGRpcmVjdCBwb2ludGVyIGNvcHksIGdyYWJiaW5nIHRoZSBgZGV2YCBwb2ludGVyIGZyb20gdGhlIG9yaWdpbmFsIGBza2JgIGFuZCBhc3NpZ25pbmcgaXQgdG8gdGhlIG5ldyBgc2tibmAuIFRoaXMgaXMgY2xlYXJseSBhIGZpeCBmb3IgYSBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFRoZSBwcm9ibGVtIHdhcyB0aGF0IGBza2JuLVx1MDAzZWRldmAgd2FzIGV4cGVjdGVkIHRvIGJlIHNldCwgYnV0IGl0IHdhc24ndCwgd2hpY2ggd2FzIGNhdXNpbmcgYSBjcmFzaC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgXCJXYWl0LCBpcyB0aGlzIHBvdGVudGlhbGx5IGEgdXNlLWFmdGVyLWZyZWUgc2l0dWF0aW9uLCB3aGVyZSBgc2tibi1cdTAwM2VkZXZgIGlzIHBvaW50aW5nIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5P1wiIEJ1dCB0aGF0J3Mgbm90IGl0LiBJdCdzIGEgcG9pbnRlciB0byBhIGBuZXRfZGV2aWNlYCBzdHJ1Y3R1cmUuIFRoaXMgaXMgYWxsIGFib3V0IGVuc3VyaW5nIHRoZSBgbmV0X2RldmljZWAgcG9pbnRlciBpcyB2YWxpZC4gTm93IEkgbmVlZCB0byBzZWUgd2hlcmUgYHJtbmV0X21hcF9kZWFnZ3JlZ2F0ZWAgaXMgY2FsbGVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBmaXggYW5kIGV4YWN0bHkgaG93IGBza2JuLVx1MDAzZWRldmAgaXMgdXNlZCwgYW5kIHdoeSBpdCdzIHNvIGltcG9ydGFudCBpbiB0aGF0IGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4OTUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMDo0MTo1Mi40OTQ3ODMwOFoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwNTQ3NTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJtbmV0X21hcF9kZWFnZ3JlZ2F0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYz0xMDk9cm1uZXRfbWFwX2luZ3Jlc3NfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYy0xMjMtXFx0aWYgKHBvcnQtXFx1MDAzZWRhdGFfZm9ybWF0IFxcdTAwMjYgUk1ORVRfRkxBR1NfSU5HUkVTU19ERUFHR1JFR0FUSU9OKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYzoxMjQ6XFx0XFx0d2hpbGUgKChza2JuID0gcm1uZXRfbWFwX2RlYWdncmVnYXRlKHNrYiwgcG9ydCkpICE9IE5VTEwpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYy0xMjUtXFx0XFx0XFx0X19ybW5ldF9tYXBfaW5ncmVzc19oYW5kbGVyKHNrYm4sIHBvcnQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwLmg9MjY9ZW51bSBybW5ldF9tYXBfY29tbWFuZHMge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwLmgtNDItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwLmg6NDM6c3RydWN0IHNrX2J1ZmYgKnJtbmV0X21hcF9kZWFnZ3JlZ2F0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcC5oLTQ0LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBybW5ldF9wb3J0ICpwb3J0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmM9MzM2PXUzMiBybW5ldF9tYXBfdmFsaWRhdGVfcGFja2V0X2xlbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgcm1uZXRfcG9ydCAqcG9ydClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmMtMzgyLSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9kYXRhLmM6MzgzOnN0cnVjdCBza19idWZmICpybW5ldF9tYXBfZGVhZ2dyZWdhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXBfZGF0YS5jLTM4NC1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgcm1uZXRfcG9ydCAqcG9ydClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjA6NDE6NTIuNTk1MzM3OTU5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NDc5OTQ5NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcsIGV4cHJlc3NlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGBfX3JtbmV0X21hcF9pbmdyZXNzX2hhbmRsZXJgKipcblxuT2theSwgbGV0J3MgZGlzc2VjdCBgX19ybW5ldF9tYXBfaW5ncmVzc19oYW5kbGVyYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgUk1ORVQgYXJjaGl0ZWN0dXJlLCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgaW5ib3VuZCB0cmFmZmljLiBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBpdCdzIGludGVyYWN0aW5nIHdpdGg/IEFyZSB3ZSB0YWxraW5nIGFib3V0IHBhY2tldCBoZWFkZXJzLCByb3V0aW5nIHRhYmxlcywgY29ubmVjdGlvbiB0cmFja2luZywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBwb2ludHMgb2YgaW5ncmVzcyAtIHdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gZ2V0dGluZyBjYWxsZWQgZnJvbSwgYW5kIHdoYXQga2luZCBvZiBjb250ZXh0IGlzIGl0IHJlY2VpdmluZz8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgY29uY3VycmVuY3kgaXNzdWVzIHRoYXQganVtcCBvdXQgaW1tZWRpYXRlbHk/IEknbSBsb29raW5nIGZvciB0aGUgY29yZSBsb2dpYzogdGhlIGRlY2lzaW9uLW1ha2luZyBwcm9jZXNzIHdpdGhpbiB0aGlzIGhhbmRsZXIuIElzIGl0IHBlcmZvcm1pbmcgbG9va3VwcywgbW9kaWZ5aW5nIHBhY2tldHMsIGZvcndhcmRpbmcgdG8gb3RoZXIgZnVuY3Rpb25zLCBvciBwZXJoYXBzIG1hbmFnaW5nIFFvUyBvciBzZWN1cml0eSBmZWF0dXJlcz8gSSdsbCBwcm9iYWJseSBzdGFydCBieSBsb29raW5nIGF0IGl0cyBhcmd1bWVudHMgYW5kIHJldHVybiB2YWx1ZXMgdG8gZ2V0IGEgc2Vuc2Ugb2YgaXRzIGlucHV0IGFuZCBvdXRwdXQuIEknbGwgbmVlZCB0byBjb3JyZWxhdGUgdGhpcyBmdW5jdGlvbiB3aXRoIG90aGVyIHJlbGF0ZWQgY29kZSB0byBidWlsZCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgaXRzIHB1cnBvc2UgYW5kIGltcGFjdCBvbiB0aGUgZGF0YSBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODYyLCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjA6NDE6NTYuMTQzMzM2Mzk1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODA1NDgyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3JtbmV0X21hcF9pbmdyZXNzX2hhbmRsZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9oYW5kbGVycy5jPTU1PXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYzo1NjpfX3JtbmV0X21hcF9pbmdyZXNzX2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9oYW5kbGVycy5jLTU3LVxcdFxcdFxcdCAgICBzdHJ1Y3Qgcm1uZXRfcG9ydCAqcG9ydClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X2hhbmRsZXJzLmM9MTA5PXJtbmV0X21hcF9pbmdyZXNzX2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X2hhbmRsZXJzLmMtMTI0LVxcdFxcdHdoaWxlICgoc2tibiA9IHJtbmV0X21hcF9kZWFnZ3JlZ2F0ZShza2IsIHBvcnQpKSAhPSBOVUxMKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X2hhbmRsZXJzLmM6MTI1OlxcdFxcdFxcdF9fcm1uZXRfbWFwX2luZ3Jlc3NfaGFuZGxlcihza2JuLCBwb3J0KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9oYW5kbGVycy5jLTEyNi1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X2hhbmRsZXJzLmMtMTI5LVxcdFxcdGlmIChybW5ldF9tYXBfdmFsaWRhdGVfcGFja2V0X2xlbihza2IsIHBvcnQpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X2hhbmRsZXJzLmM6MTMwOlxcdFxcdFxcdF9fcm1uZXRfbWFwX2luZ3Jlc3NfaGFuZGxlcihza2IsIHBvcnQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X2hhbmRsZXJzLmMtMTMxLVxcdFxcdGVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjA6NDE6NTYuMjIxMzk5MTMyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNDM3NjE4MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBgX19ybW5ldF9tYXBfaW5ncmVzc19oYW5kbGVyYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBUaGUgbmFtZSBhbG9uZSwgYF9fcm1uZXRfbWFwX2luZ3Jlc3NfaGFuZGxlcmAsIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJ3JlIGRlYWxpbmcgd2l0aCBhbiBpbmdyZXNzIGhhbmRsZXIgd2l0aGluIHRoZSBSTU5FVCBmcmFtZXdvcmsuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCBpdHMgcGxhY2UgaW4gdGhlIG92ZXJhbGwgZGF0YSBmbG93LiBUaGlzIGxpa2VseSBtZWFucyBpdCBzaXRzIGJldHdlZW4gdGhlIG5ldHdvcmsgaW50ZXJmYWNlIChwcm9iYWJseSBzb21ldGhpbmcgbGlrZSBhIFF1YWxjb21tJ3MgUk1ORVQpIGFuZCBzb21lIGludGVybmFsIGRhdGEgc3RydWN0dXJlIG9yIHByb2Nlc3Npbmcgc3RhZ2UuXG5cbknigJltIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIHJlc3BvbnNpYmxlIGZvciB0YWtpbmcgaW5jb21pbmcgcGFja2V0cyDigJMgbGlrZWx5IEV0aGVybmV0IGZyYW1lcyBvciBJUCBwYWNrZXRzIGVuY2Fwc3VsYXRlZCB3aXRoaW4gUk1ORVQtc3BlY2lmaWMgcHJvdG9jb2xzIOKAkyBhbmQgcGVyZm9ybWluZyBhbnkgbmVjZXNzYXJ5IHRyYW5zZm9ybWF0aW9ucyBvciBsb29rdXBzIGJlZm9yZSBwYXNzaW5nIHRoZW0gb24uIEknbSBndWVzc2luZyB0aGlzIGNvdWxkIGluY2x1ZGUgdGhpbmdzIGxpa2U6XG5cbiogICAqKkhlYWRlciBkZWNvZGluZy9pbnRlcnByZXRhdGlvbjoqKiBQYXJzaW5nIFJNTkVUIGhlYWRlcnMsIHBvdGVudGlhbGx5IHN0cmlwcGluZyB0aGVtLCBhbmQgZXhwb3NpbmcgdGhlIHVuZGVybHlpbmcgbmV0d29yayBsYXllciBpbmZvcm1hdGlvbi5cbiogICAqKkFkZHJlc3MgdHJhbnNsYXRpb24vbWFwcGluZzoqKiBDb252ZXJ0aW5nIHZpcnR1YWwgb3IgdHVubmVsIGFkZHJlc3NlcyB0byBwaHlzaWNhbCBhZGRyZXNzZXMsIHdoaWNoIGlzIGNvbW1vbiBpbiBSTU5FVCBlbnZpcm9ubWVudHMgZm9yIG1vYmlsZSBkYXRhLlxuKiAgICoqRmxvdyBjbGFzc2lmaWNhdGlvbi9pZGVudGlmaWNhdGlvbjoqKiBJZGVudGlmeWluZyB0aGUgZmxvdyBvciBhcHBsaWNhdGlvbiB0aGlzIHBhY2tldCBiZWxvbmdzIHRvLCBwZXJoYXBzIHVzaW5nIHNvbWUgc29ydCBvZiBoYXNoIG9yIGxvb2t1cCB0YWJsZS5cbiogICAqKlJhdGUgbGltaXRpbmcvUW9TOioqIEltcGxlbWVudGluZyBhbnkgYmFzaWMgcmF0ZSBsaW1pdGluZyBvciBxdWFsaXR5IG9mIHNlcnZpY2UgcnVsZXMgYmVmb3JlIHRoZSBwYWNrZXQgbW92ZXMgdG8gb3RoZXIgcGFydHMgb2YgdGhlIG5ldHdvcmsgc3RhY2suXG4qICAgKipFcnJvciBoYW5kbGluZy92YWxpZGF0aW9uOioqIENoZWNraW5nIGZvciBtYWxmb3JtZWQgcGFja2V0cyBvciB1bmV4cGVjdGVkIGRhdGEgYW5kIGhhbmRsaW5nIHRoZW0sIHBlcmhhcHMgbG9nZ2luZyBlcnJvcnMgb3IgZHJvcHBpbmcgdGhlbS5cbiogICAqKlNlY3VyaXR5IGNoZWNrOioqIFNvbWUgYmFzaWMgc2VjdXJpdHkgY2hlY2sgc3VjaCBhcyBmaWx0ZXJpbmcgbWFsZm9ybWVkIHBhY2tldHMuXG4qICAgKipGb3J3YXJkaW5nIHBhY2tldHM6KiogQmFzZWQgb24gdGhlIGluZm9ybWF0aW9uIGZyb20gYWJvdmUuXG5cbknigJlsbCBiZSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IHVzZXMsIHBhcnRpY3VsYXJseSBpZiBpdCBpbnRlcmZhY2VzIHdpdGggb3RoZXIgUk1ORVQgY29tcG9uZW50cyBsaWtlIHRoZSBgcm1uZXRfbWFwYCB0YWJsZXMgb3IgdGhlIGludGVybmFsIGJ1ZmZlciBtYW5hZ2VtZW50LiBBcmUgdGhlcmUgYW55IG11dGV4ZXMgb3IgbG9ja3MgaW4gcGxheT8gQ29uY3VycmVuY3kgaXMgYWx3YXlzIGEgY29uY2Vybi4gSSdtIGFsc28gY3VyaW91cyBhYm91dCBpdHMgZXJyb3IgaGFuZGxpbmcg4oCTIGRvZXMgaXQganVzdCBsb2cgZXJyb3JzLCBwYW5pYywgb3IgYXR0ZW1wdCB0byByZWNvdmVyP1xuXG5JbiBzaG9ydCwgSSdtIGV4cGVjdGluZyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBkYXRhIHBsYW5lLCBhbmQgSSdtIHJlYWR5IHRvIGZpZ3VyZSBvdXQgZXhhY3RseSBob3cgaXQgZml0cyBpbnRvIHRoZSBSTU5FVCBwaWN0dXJlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGluZ3Jlc3Mgc2lkZSwgYW5kIGhvdyBwYWNrZXRzIGVudGVyIGludG8gdGhlIHN5c3RlbS4gTGV0J3Mgc2VlIHdoYXTigJlzIGluc2lkZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1NDUsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMDo0MjowMS40NjUxNjU2NjhaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5NTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X2hhbmRsZXJzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTU6XFx0c3RhdGljIHZvaWRcXG4gIDU2OlxcdF9fcm1uZXRfbWFwX2luZ3Jlc3NfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAgNTc6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBybW5ldF9wb3J0ICpwb3J0KVxcbiAgNTg6XFx0e1xcbiAgNTk6XFx0XFx0c3RydWN0IHJtbmV0X21hcF9oZWFkZXIgKm1hcF9oZWFkZXIgPSAodm9pZCAqKXNrYi1cXHUwMDNlZGF0YTtcXG4gIDYwOlxcdFxcdHN0cnVjdCBybW5ldF9lbmRwb2ludCAqZXA7XFxuICA2MTpcXHRcXHR1MTYgbGVuLCBwYWQ7XFxuICA2MjpcXHRcXHR1OCBtdXhfaWQ7XFxuICA2MzpcXHRcXG4gIDY0OlxcdFxcdGlmIChtYXBfaGVhZGVyLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1BUF9DTURfRkxBRykge1xcbiAgNjU6XFx0XFx0XFx0LyogUGFja2V0IGNvbnRhaW5zIGEgTUFQIGNvbW1hbmQgKG5vdCBkYXRhKSAqL1xcbiAgNjY6XFx0XFx0XFx0aWYgKHBvcnQtXFx1MDAzZWRhdGFfZm9ybWF0IFxcdTAwMjYgUk1ORVRfRkxBR1NfSU5HUkVTU19NQVBfQ09NTUFORFMpXFxuICA2NzpcXHRcXHRcXHRcXHRyZXR1cm4gcm1uZXRfbWFwX2NvbW1hbmQoc2tiLCBwb3J0KTtcXG4gIDY4OlxcdFxcbiAgNjk6XFx0XFx0XFx0Z290byBmcmVlX3NrYjtcXG4gIDcwOlxcdFxcdH1cXG4gIDcxOlxcdFxcbiAgNzI6XFx0XFx0bXV4X2lkID0gbWFwX2hlYWRlci1cXHUwMDNlbXV4X2lkO1xcbiAgNzM6XFx0XFx0cGFkID0gbWFwX2hlYWRlci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBNQVBfUEFEX0xFTl9NQVNLO1xcbiAgNzQ6XFx0XFx0bGVuID0gbnRvaHMobWFwX2hlYWRlci1cXHUwMDNlcGt0X2xlbikgLSBwYWQ7XFxuICA3NTpcXHRcXG4gIDc2OlxcdFxcdGlmIChtdXhfaWQgXFx1MDAzZT0gUk1ORVRfTUFYX0xPR0lDQUxfRVApXFxuICA3NzpcXHRcXHRcXHRnb3RvIGZyZWVfc2tiO1xcbiAgNzg6XFx0XFxuICA3OTpcXHRcXHRlcCA9IHJtbmV0X2dldF9lbmRwb2ludChwb3J0LCBtdXhfaWQpO1xcbiAgODA6XFx0XFx0aWYgKCFlcClcXG4gIDgxOlxcdFxcdFxcdGdvdG8gZnJlZV9za2I7XFxuICA4MjpcXHRcXG4gIDgzOlxcdFxcdHNrYi1cXHUwMDNlZGV2ID0gZXAtXFx1MDAzZWVncmVzc19kZXY7XFxuICA4NDpcXHRcXG4gIDg1OlxcdFxcdGlmICgocG9ydC1cXHUwMDNlZGF0YV9mb3JtYXQgXFx1MDAyNiBSTU5FVF9GTEFHU19JTkdSRVNTX01BUF9DS1NVTVY1KSBcXHUwMDI2XFx1MDAyNlxcbiAgODY6XFx0XFx0ICAgIChtYXBfaGVhZGVyLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1BUF9ORVhUX0hFQURFUl9GTEFHKSkge1xcbiAgODc6XFx0XFx0XFx0aWYgKHJtbmV0X21hcF9wcm9jZXNzX25leHRfaGRyX3BhY2tldChza2IsIGxlbikpXFxuICA4ODpcXHRcXHRcXHRcXHRnb3RvIGZyZWVfc2tiO1xcbiAgODk6XFx0XFx0XFx0c2tiX3B1bGwoc2tiLCBzaXplb2YoKm1hcF9oZWFkZXIpKTtcXG4gIDkwOlxcdFxcdFxcdHJtbmV0X3NldF9za2JfcHJvdG8oc2tiKTtcXG4gIDkxOlxcdFxcdH0gZWxzZSB7XFxuICA5MjpcXHRcXHRcXHQvKiBTdWJ0cmFjdCBNQVAgaGVhZGVyICovXFxuICA5MzpcXHRcXHRcXHRza2JfcHVsbChza2IsIHNpemVvZigqbWFwX2hlYWRlcikpO1xcbiAgOTQ6XFx0XFx0XFx0cm1uZXRfc2V0X3NrYl9wcm90byhza2IpO1xcbiAgOTU6XFx0XFx0XFx0aWYgKHBvcnQtXFx1MDAzZWRhdGFfZm9ybWF0IFxcdTAwMjYgUk1ORVRfRkxBR1NfSU5HUkVTU19NQVBfQ0tTVU1WNCBcXHUwMDI2XFx1MDAyNlxcbiAgOTY6XFx0XFx0XFx0ICAgICFybW5ldF9tYXBfY2hlY2tzdW1fZG93bmxpbmtfcGFja2V0KHNrYiwgbGVuICsgcGFkKSlcXG4gIDk3OlxcdFxcdFxcdFxcdHNrYi1cXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7XFxuICA5ODpcXHRcXHR9XFxuICA5OTpcXHRcXG4gMTAwOlxcdFxcdHNrYl90cmltKHNrYiwgbGVuKTtcXG4gMTAxOlxcdFxcdHJtbmV0X2RlbGl2ZXJfc2tiKHNrYik7XFxuIDEwMjpcXHRcXHRyZXR1cm47XFxuIDEwMzpcXHRcXG4gMTA0OlxcdGZyZWVfc2tiOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMDo0MjowMS40NjUyODc0OTdaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk4OTEzMjk4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJNTkVUIEluZ3Jlc3MgSGFuZGxlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBgX19ybW5ldF9tYXBfaW5ncmVzc19oYW5kbGVyYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGxpbmUgODMgd2hlcmUgYHNrYi1cdTAwM2VkZXZgIGdldHMgYXNzaWduZWQgdG8gYGVwLVx1MDAzZWVncmVzc19kZXZgLiBUaGlzIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBUaGUga2V5IGlzIHdoYXQgaGFwcGVucyAqYmVmb3JlKiB0aGF0IGFzc2lnbm1lbnQsIGFuZCBJJ20gcHJldHR5IHN1cmUgYHJtbmV0X21hcF9jb21tYW5kKHNrYiwgcG9ydClgIGdldHMgY2FsbGVkIGZpcnN0LiBUaGF0J3MgdGhlIHBhcnQgSSBuZWVkIHRvIHNjcnV0aW5pemUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgcm1uZXRfbWFwX2NvbW1hbmRgIG1pZ2h0IGludGVyYWN0IHdpdGggdGhlIGBza2JgIGFuZCBpbmZsdWVuY2UgdGhlIGBza2ItXHUwMDNlZGV2YCBhc3NpZ25tZW50IGRvd24gdGhlIGxpbmUuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGlmIHRoYXQgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIGBza2JgIGluIGFueSB3YXkgdGhhdCB3b3VsZCBpbXBhY3QgaG93IHRoZSBgZWdyZXNzX2RldmAgaXMgdXNlZC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBsb2dpYyB3aXRoaW4gYHJtbmV0X21hcF9jb21tYW5kYCBjYXJlZnVsbHkgdG8gc2VlIGlmIGFueSB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cyBjb3VsZCBvY2N1ci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4ODQsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIwOjQyOjA1LjQ1NDQyMzYzNFoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM1NjMyNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicm1uZXRfbWFwX2NvbW1hbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L01ha2VmaWxlPTk9cm1uZXQteVxcdFxcdCArPSBybW5ldF9tYXBfZGF0YS5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvTWFrZWZpbGU6MTA6cm1uZXQteVxcdFxcdCArPSBybW5ldF9tYXBfY29tbWFuZC5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvTWFrZWZpbGUtMTEtb2JqLSQoQ09ORklHX1JNTkVUKSArPSBybW5ldC5vXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9oYW5kbGVycy5jPTU2PV9fcm1uZXRfbWFwX2luZ3Jlc3NfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYy02Ni1cXHRcXHRpZiAocG9ydC1cXHUwMDNlZGF0YV9mb3JtYXQgXFx1MDAyNiBSTU5FVF9GTEFHU19JTkdSRVNTX01BUF9DT01NQU5EUylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9oYW5kbGVycy5jOjY3OlxcdFxcdFxcdHJldHVybiBybW5ldF9tYXBfY29tbWFuZChza2IsIHBvcnQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X2hhbmRsZXJzLmMtNjgtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXAuaD05PXN0cnVjdCBybW5ldF9tYXBfY29udHJvbF9jb21tYW5kIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcC5oLTI1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcC5oOjI2OmVudW0gcm1uZXRfbWFwX2NvbW1hbmRzIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXAuaC0yNy1cXHRSTU5FVF9NQVBfQ09NTUFORF9OT05FLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwLmg9NDU9c3RydWN0IHJtbmV0X21hcF9oZWFkZXIgKnJtbmV0X21hcF9hZGRfbWFwX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfbWFwLmgtNDgtXFx0XFx0XFx0XFx0XFx0XFx0ICBpbnQgcGFkKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXAuaDo0OTp2b2lkIHJtbmV0X21hcF9jb21tYW5kKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBybW5ldF9wb3J0ICpwb3J0KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXAuaC01MC1pbnQgcm1uZXRfbWFwX2NoZWNrc3VtX2Rvd25saW5rX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgbGVuKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9jb21tYW5kLmM9NDk9c3RhdGljIHZvaWQgcm1uZXRfbWFwX3NlbmRfYWNrKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXBfY29tbWFuZC5jLTc0LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9jb21tYW5kLmM6NzU6dm9pZCBybW5ldF9tYXBfY29tbWFuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgcm1uZXRfcG9ydCAqcG9ydClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXBfY29tbWFuZC5jLTc2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjA6NDI6MDUuNTI3OTkxMzMyWiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NjUxMzQ1MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFRhc2sqKlxuXG5BbHJpZ2h0LCB0aGUgZGlyZWN0aXZlIGlzIHRvIGFuYWx5emUgdGhlIG1lbnRhbCBwcm9jZXNzIHJldm9sdmluZyBhcm91bmQgdGhlIGNvbW1hbmQgYHJtbmV0X21hcF9jb21tYW5kYC4gTXkgaW1tZWRpYXRlIHJlYWN0aW9uIGlzIGEgYmxlbmQgb2YgYW5hbHl0aWNhbCBjdXJpb3NpdHkgYW5kIHByb2Zlc3Npb25hbCBwcmFnbWF0aXNtLiBJJ20gcHJlc2VudGVkIHdpdGggYSBwb3RlbnRpYWxseSBjb21wbGV4IGNvbW1hbmQsIGFuZCB0aGUgaW1wbGljYXRpb24gaXMgdGhhdCBpdHMgZXhlY3V0aW9uIG9yIGZ1bmN0aW9uIGlzIGJlaW5nIHNjcnV0aW5pemVkLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyB3b3VsZCBpbW1lZGlhdGVseSBiZWdpbiB3aXRoIGNvbnNpZGVyYXRpb25zIHN1Y2ggYXM6IFwiV2hhdCBpcyB0aGUgY29udGV4dD8gV2hlcmUgaXMgdGhpcyBjb21tYW5kIHVzZWQ/IElzIGl0IGEgc2NyaXB0LCBhbiBhcHBsaWNhdGlvbiBtb2R1bGUsIG9yIHBhcnQgb2YgYSBsYXJnZXIgc3lzdGVtPyBXaGF0IGFyY2hpdGVjdHVyZSBpcyBpdCBkZXNpZ25lZCBmb3I/XCIgSSdtIG1lbnRhbGx5IHBhcnNpbmcgdGhlIGltcGxpZWQgdGFzaywgZXhwZWN0aW5nIHRvIGRlbHZlIGludG8gaXRzIGZ1bmN0aW9uYWxpdHksIHBvdGVudGlhbCBpc3N1ZXMsIGFuZCBvcHRpbWl6YXRpb24gc3RyYXRlZ2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5MzAsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMDo0MjowOC45OTMxMzAyMDlaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1MzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X21hcF9jb21tYW5kLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNzU6XFx0dm9pZCBybW5ldF9tYXBfY29tbWFuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgcm1uZXRfcG9ydCAqcG9ydClcXG4gIDc2OlxcdHtcXG4gIDc3OlxcdFxcdHN0cnVjdCBybW5ldF9tYXBfaGVhZGVyICptYXBfaGVhZGVyID0gKHZvaWQgKilza2ItXFx1MDAzZWRhdGE7XFxuICA3ODpcXHRcXHRzdHJ1Y3Qgcm1uZXRfbWFwX2NvbnRyb2xfY29tbWFuZCAqY21kO1xcbiAgNzk6XFx0XFx0dW5zaWduZWQgY2hhciBjb21tYW5kX25hbWU7XFxuICA4MDpcXHRcXHR1bnNpZ25lZCBjaGFyIHJjID0gMDtcXG4gIDgxOlxcdFxcbiAgODI6XFx0XFx0LyogQ29tbWFuZCBkYXRhIGltbWVkaWF0ZWx5IGZvbGxvd3MgdGhlIE1BUCBoZWFkZXIgKi9cXG4gIDgzOlxcdFxcdGNtZCA9IChzdHJ1Y3Qgcm1uZXRfbWFwX2NvbnRyb2xfY29tbWFuZCAqKShtYXBfaGVhZGVyICsgMSk7XFxuICA4NDpcXHRcXHRjb21tYW5kX25hbWUgPSBjbWQtXFx1MDAzZWNvbW1hbmRfbmFtZTtcXG4gIDg1OlxcdFxcbiAgODY6XFx0XFx0c3dpdGNoIChjb21tYW5kX25hbWUpIHtcXG4gIDg3OlxcdFxcdGNhc2UgUk1ORVRfTUFQX0NPTU1BTkRfRkxPV19FTkFCTEU6XFxuICA4ODpcXHRcXHRcXHRyYyA9IHJtbmV0X21hcF9kb19mbG93X2NvbnRyb2woc2tiLCBwb3J0LCAxKTtcXG4gIDg5OlxcdFxcdFxcdGJyZWFrO1xcbiAgOTA6XFx0XFxuICA5MTpcXHRcXHRjYXNlIFJNTkVUX01BUF9DT01NQU5EX0ZMT1dfRElTQUJMRTpcXG4gIDkyOlxcdFxcdFxcdHJjID0gcm1uZXRfbWFwX2RvX2Zsb3dfY29udHJvbChza2IsIHBvcnQsIDApO1xcbiAgOTM6XFx0XFx0XFx0YnJlYWs7XFxuICA5NDpcXHRcXG4gIDk1OlxcdFxcdGRlZmF1bHQ6XFxuICA5NjpcXHRcXHRcXHRyYyA9IFJNTkVUX01BUF9DT01NQU5EX1VOU1VQUE9SVEVEO1xcbiAgOTc6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuICA5ODpcXHRcXHRcXHRicmVhaztcXG4gIDk5OlxcdFxcdH1cXG4gMTAwOlxcdFxcdGlmIChyYyA9PSBSTU5FVF9NQVBfQ09NTUFORF9BQ0spXFxuIDEwMTpcXHRcXHRcXHRybW5ldF9tYXBfc2VuZF9hY2soc2tiLCByYywgcG9ydCk7XFxuIDEwMjpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIwOjQyOjA4Ljk5MzI0ODA4OVoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTA3NDEzMzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBybW5ldF9tYXBfc2VuZF9hY2tgKipcblxuT2theSwgdGltZSB0byB6ZXJvIGluIG9uIGBybW5ldF9tYXBfc2VuZF9hY2tgLiBUaGF0J3MgYSBrZXkgZnVuY3Rpb24gZm9yIGFja25vd2xlZGdpbmcgUk1ORVQgcGFja2V0cywgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBtZWNoYW5pY3MgdGhvcm91Z2hseS4gV2hhdCdzIHRoZSBjb250ZXh0IGhlcmU/IElzIGl0IHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBSTU5FVCBpbXBsZW1lbnRhdGlvbiwgb3IgaXMgaXQgbW9yZSBnZW5lcmljPyBBcmUgd2UgZGVhbGluZyB3aXRoIHJlbGlhYmxlIG9yIHVucmVsaWFibGUgdHJhbnNwb3J0PyBJIGJldCBpdCdzIGludm9sdmVkIGluIHRoZSBjb250cm9sIHBsYW5lIHRvIHNvbWUgZGVncmVlLlxuXG5GaXJzdCwgSSdsbCBwcm9iYWJseSBsb29rIGZvciBpdHMgZGVmaW5pdGlvbiBhbmQgYW55IGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIGxpa2UgYnVmZmVycyBvciBxdWV1ZXMgdGhhdCBpdCBtYW5pcHVsYXRlcy4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzaW1wbGUgQUNLIG9yIHNvbWV0aGluZyBtb3JlIGludm9sdmVkLCBsaWtlIGEgc2VsZWN0aXZlIEFDSyB3aXRoIHJldHJhbnNtaXNzaW9uIHRpbWVycz8gSSdsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCB0aGUgUk1ORVQgcHJvdG9jb2wgdmVyc2lvbiBpcyBhdCBhIGxvdyBsZXZlbCB0byB1bmRlcnN0YW5kIGFueSBzcGVjaWZpYyBzdWJ0bGV0aWVzIGluIHRoZSBpbXBsZW1lbnRhdGlvbi5cblxuSSBhbHNvIG5lZWQgdG8gc2VlIHdoZXJlIGl0J3MgKmNhbGxlZCogZnJvbS4gS25vd2luZyB0aGUgY2FsbCBzdGFjayB3aWxsIGdpdmUgbWUgY2x1ZXMgYWJvdXQgdGhlIGZsb3cgb2YgZGF0YSBhbmQgY29udHJvbC4gQXJlIHdlIHJlc3BvbmRpbmcgdG8gYSByZWNlaXZlZCBSTU5FVCBtZXNzYWdlLCBvciBpcyB0aGlzIG1vcmUgcHJvYWN0aXZlPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgSSBzaG91bGQgYmUgb24gdGhlIGxvb2tvdXQgZm9yPyBJJ2xsIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLCBtdXRleGVzLCBvciBhdG9taWMgb3BlcmF0aW9ucy5cblxuT25jZSBJIGhhdmUgYSBnb29kIGdyYXNwIG9mIHRoZSBjb2RlIGl0c2VsZiwgSSdsbCBuZWVkIHRvIGNvbnNpZGVyIHBlcmZvcm1hbmNlLiBJcyB0aGlzIGZ1bmN0aW9uIG9uIHRoZSBjcml0aWNhbCBwYXRoPyBDb3VsZCBpdCBiZSBhIGJvdHRsZW5lY2s/IEkgbWlnaHQgbmVlZCB0byBjb25zaWRlciBob3cgdG8gaGFuZGxlIHRoaW5ncyBkaWZmZXJlbnRseSBiYXNlZCBvbiBidWZmZXIgc2l6ZXMgb3Igb3ZlcmFsbCBuZXR3b3JrIGNvbmRpdGlvbnMuIEFyZSB0aGVyZSBhbnkgbG9nZ2luZyBvciBkZWJ1Z2dpbmcgZmVhdHVyZXMgYnVpbHQgaW4/IFRoYXQgd291bGQgYmUgdmVyeSBoZWxwZnVsLlxuXG5Fc3NlbnRpYWxseSwgSSB3YW50IHRvIG1hcCBvdXQgdGhlIGVudGlyZSBsaWZlY3ljbGUgb2YgdGhpcyBhY2tub3dsZWRnbWVudCwgdG9wIHRvIGJvdHRvbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1ODEsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIwOjQyOjE1LjkwMDY2NDMxMloiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9tYXBfY29tbWFuZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ5LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQ5OlxcdHN0YXRpYyB2b2lkIHJtbmV0X21hcF9zZW5kX2FjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAgNTA6XFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGNoYXIgdHlwZSxcXG4gIDUxOlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgcm1uZXRfcG9ydCAqcG9ydClcXG4gIDUyOlxcdHtcXG4gIDUzOlxcdFxcdHN0cnVjdCBybW5ldF9tYXBfaGVhZGVyICptYXBfaGVhZGVyID0gKHZvaWQgKilza2ItXFx1MDAzZWRhdGE7XFxuICA1NDpcXHRcXHRzdHJ1Y3Qgcm1uZXRfbWFwX2NvbnRyb2xfY29tbWFuZCAqY21kO1xcbiAgNTU6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi1cXHUwMDNlZGV2O1xcbiAgNTY6XFx0XFxuICA1NzpcXHRcXHRpZiAocG9ydC1cXHUwMDNlZGF0YV9mb3JtYXQgXFx1MDAyNiBSTU5FVF9GTEFHU19JTkdSRVNTX01BUF9DS1NVTVY0KVxcbiAgNTg6XFx0XFx0XFx0c2tiX3RyaW0oc2tiLFxcbiAgNTk6XFx0XFx0XFx0XFx0IHNrYi1cXHUwMDNlbGVuIC0gc2l6ZW9mKHN0cnVjdCBybW5ldF9tYXBfZGxfY3N1bV90cmFpbGVyKSk7XFxuICA2MDpcXHRcXG4gIDYxOlxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9NQVApO1xcbiAgNjI6XFx0XFxuICA2MzpcXHRcXHQvKiBDb21tYW5kIGRhdGEgaW1tZWRpYXRlbHkgZm9sbG93cyB0aGUgTUFQIGhlYWRlciAqL1xcbiAgNjQ6XFx0XFx0Y21kID0gKHN0cnVjdCBybW5ldF9tYXBfY29udHJvbF9jb21tYW5kICopKG1hcF9oZWFkZXIgKyAxKTtcXG4gIDY1OlxcdFxcdGNtZC1cXHUwMDNlY21kX3R5cGUgPSB0eXBlIFxcdTAwMjYgMHgwMztcXG4gIDY2OlxcdFxcbiAgNjc6XFx0XFx0bmV0aWZfdHhfbG9jayhkZXYpO1xcbiAgNjg6XFx0XFx0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fc3RhcnRfeG1pdChza2IsIGRldik7XFxuICA2OTpcXHRcXHRuZXRpZl90eF91bmxvY2soZGV2KTtcXG4gIDcwOlxcdH1cXG4gIDcxOlxcdFxcbiAgNzI6XFx0LyogUHJvY2VzcyBNQVAgY29tbWFuZCBmcmFtZSBhbmQgc2VuZCBOL0FDSyBtZXNzYWdlIGFzIGFwcHJvcHJpYXRlLiBNZXNzYWdlIGNtZFxcbiAgNzM6XFx0ICogbmFtZSBpcyBkZWNvZGVkIGhlcmUgYW5kIGFwcHJvcHJpYXRlIGhhbmRsZXIgaXMgY2FsbGVkLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMDo0MjoxNS45MDA3NDIwOTJaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEzMjkxMjkxMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgTlVMTCBQb2ludGVyIERlcmVmZXJlbmNlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ3ZlIHNwb3R0ZWQgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIHRoZSBgcm1uZXRfbWFwYCBjb2RlLCBhbmQgaXQncyBsb29raW5nIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBpcyB0aGF0IGBybW5ldF9tYXBfc2VuZF9hY2tgIGFjY2Vzc2VzIGBza2ItXHUwMDNlZGV2YCwgYW5kIHRoYXQgdmFsdWUgY291bGQgYmUgTlVMTCwgd2hpY2ggaXMgdGhlbiBwYXNzZWQgdG8gYGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zdGFydF94bWl0KHNrYiwgZGV2KTtgLCBjYXVzaW5nIGEgY3Jhc2guXG5cbkkgc2VlIHRoYXQgYHNrYi1cdTAwM2VkZXZgIGNvbWVzIGZyb20gdGhlIGBza2JuLVx1MDAzZWRldiA9IHNrYi1cdTAwM2VkZXY7YCBhc3NpZ25tZW50LCB3aGljaCBoYXBwZW5zIGR1cmluZyB0aGUgYHJtbmV0X21hcF9kZWFnZ3JlZ2F0ZWAgY2FsbC4gVGhhdCBtYWtlcyBzZW5zZS4gTGV0J3MgdHJhY2UgaXQgYSBiaXQuIEluc2lkZSBgcm1uZXRfbWFwX2luZ3Jlc3NfaGFuZGxlcmAsIGlmIGBSTU5FVF9GTEFHU19JTkdSRVNTX0RFQUdHUkVHQVRJT05gIGlzIHNldCwgYHJtbmV0X21hcF9kZWFnZ3JlZ2F0ZWAgaXMgY2FsbGVkLiBUaGF0IGRlYWdncmVnYXRlZCBza2IgZ29lcyBpbnRvIGBfX3JtbmV0X21hcF9pbmdyZXNzX2hhbmRsZXJgLCBhbmQgZXZlbnR1YWxseSB0aGUgY29tbWFuZCBwYWNrZXQgZ29lcyB0byBgcm1uZXRfbWFwX3NlbmRfYWNrYCwgd2hpY2ggYWNjZXNzZXMgYHNrYm4tXHUwMDNlZGV2YC4gIFxuXG5IZXJlIGlzIHdoZXJlIHRoZSBwcm9ibGVtIGFyaXNlczogYHNrYm5gIGlzIGFsbG9jYXRlZCBieSBgcm1uZXRfbWFwX2RlYWdncmVnYXRlYCB1c2luZyBgYWxsb2Nfc2tiYCwgYW5kIGl0IGlzbid0IGFzc2lnbmVkIGBza2ItXHUwMDNlZGV2YCB1bnRpbCBhZnRlci4gU2luY2UgYGFsbG9jX3NrYmAgbGlrZWx5IGluaXRpYWxpemVzIGBkZXZgIHRvIE5VTEwgaW4gdGhlIGZpcnN0IHBsYWNlLCB0aGF0IG1lYW5zIGBza2JuLVx1MDAzZWRldmAgaXMgTlVMTC4gQm9vbSwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlISBJdCdzIHRoYXQgc2ltcGxlLiBLQVNBTiBvciBldmVuIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nIHdpbGwgZWFzaWx5IGNhdGNoIHRoaXMsIGl0J3MgYSB0ZXh0Ym9vayBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFRoaXMgaGFzIGFic29sdXRlbHkgbm90aGluZyB0byBkbyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBgZGV2YCBpcyBleHBsaWNpdGx5IHplcm9lZCAoTlVMTCkgYnkgYGFsbG9jX3NrYmAgLVx1MDAzZSBgc2tidWZmX2NsZWFyYC5cblxuTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSdzICpub3RoaW5nKiBlbHNlIGF0IHBsYXkgaGVyZS4gVGhlIHBhdGNoIGNvcGllcyB0aGUgYGRldmAgcG9pbnRlciBjb3JyZWN0bHkuIEl0IGFsbG9jYXRlcyBhIG5ldyBidWZmZXIsIHJlc2VydmVzIHNwYWNlLCBjb3BpZXMgZGF0YSwgYW5kLCBjcnVjaWFsbHksIGNvcGllcyBgc2tiLVx1MDAzZWRldmAgdG8gYHNrYm4tXHUwMDNlZGV2YC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYmVpbmcgZXhwb3NlZDsgaXQncyBqdXN0IGNvcHlpbmcgYSBOVUxMIHZhbHVlLlxuXG5UaGVyZWZvcmUsIHRoZSBpc3N1ZSBpcyBwdXJlbHkgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFRoZXJlJ3Mgbm8gbmVlZCBmb3IgS01TQU4gdG8gYW5hbHl6ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiB0aGlzIGNhc2UuIE15IGFzc2Vzc21lbnQgaXMgdGhhdCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQxNiwiT3V0cHV0VG9rZW5zIjoyMjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMDo0MjoyNy4yMjk4NzM3MjNaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjExMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGJ1Zy4gSW4gYHJtbmV0X21hcF9kZWFnZ3JlZ2F0ZSgpYCwgYSBuZXcgYHNrX2J1ZmZgIChgc2tibmApIGlzIGFsbG9jYXRlZCB1c2luZyBgYWxsb2Nfc2tiKClgLCB3aGljaCBpbml0aWFsaXplcyB0aGUgYGRldmAgZmllbGQgdG8gTlVMTC4gTGF0ZXIsIGlmIHRoZSBwYWNrZXQgY29udGFpbnMgYSBNQVAgY29tbWFuZCwgYHJtbmV0X21hcF9zZW5kX2FjaygpYCBpcyBjYWxsZWQsIHdoaWNoIGFjY2Vzc2VzIGBza2ItXFx1MDAzZWRldmAgYW5kIGRlcmVmZXJlbmNlcyBpdCAoYGRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX3N0YXJ0X3htaXQoc2tiLCBkZXYpYCkuIFNpbmNlIGBza2JuLVxcdTAwM2VkZXZgIHdhcyBOVUxMLCB0aGlzIGNhdXNlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gVGhlIHBhdGNoIGZpeGVzIHRoaXMgYnkgY29weWluZyBgc2tiLVxcdTAwM2VkZXZgIHRvIGBza2JuLVxcdTAwM2VkZXZgLiBUaGlzIGlzIG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSwgYXMgdGhlIGBkZXZgIGZpZWxkIHdhcyBleHBsaWNpdGx5IHplcm9lZCBkdXJpbmcgYWxsb2NhdGlvbi4gU3RhbmRhcmQga2VybmVsIHRlc3Rpbmcgb3IgS0FTQU4gd2lsbCBlYXNpbHkgY2F0Y2ggdGhpcyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWcuIEluIGBybW5ldF9tYXBfZGVhZ2dyZWdhdGUoKWAsIGEgbmV3IGBza19idWZmYCAoYHNrYm5gKSBpcyBhbGxvY2F0ZWQgdXNpbmcgYGFsbG9jX3NrYigpYCwgd2hpY2ggaW5pdGlhbGl6ZXMgdGhlIGBkZXZgIGZpZWxkIHRvIE5VTEwuIExhdGVyLCBpZiB0aGUgcGFja2V0IGNvbnRhaW5zIGEgTUFQIGNvbW1hbmQsIGBybW5ldF9tYXBfc2VuZF9hY2soKWAgaXMgY2FsbGVkLCB3aGljaCBhY2Nlc3NlcyBgc2tiLVxcdTAwM2VkZXZgIGFuZCBkZXJlZmVyZW5jZXMgaXQgKGBkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19zdGFydF94bWl0KHNrYiwgZGV2KWApLiBTaW5jZSBgc2tibi1cXHUwMDNlZGV2YCB3YXMgTlVMTCwgdGhpcyBjYXVzZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFRoZSBwYXRjaCBmaXhlcyB0aGlzIGJ5IGNvcHlpbmcgYHNrYi1cXHUwMDNlZGV2YCB0byBgc2tibi1cXHUwMDNlZGV2YC4gVGhpcyBpcyBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUsIGFzIHRoZSBgZGV2YCBmaWVsZCB3YXMgZXhwbGljaXRseSB6ZXJvZWQgZHVyaW5nIGFsbG9jYXRpb24uIFN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nIG9yIEtBU0FOIHdpbGwgZWFzaWx5IGNhdGNoIHRoaXMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflows8w2p[1] Phase: Succeeded StartedAt: 2026-08-20 20:42:38 +0000 UTC FinishedAt: 2026-08-20 20:42:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8w2p[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-20 20:42:38 +0000 UTC FinishedAt: 2026-08-20 20:42:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8w2p[2] Phase: Succeeded StartedAt: 2026-08-20 20:42:38 +0000 UTC FinishedAt: 2026-08-20 21:27:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8w2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rmnet_map_deaggregate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"2d894e0c-27e7-4a02-aa67-53312333f671","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-20 20:42:38 +0000 UTC FinishedAt: 2026-08-20 21:27:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rmnet_map_deaggregate"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"2d894e0c-27e7-4a02-aa67-53312333f671","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflows8w2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rmnet_map_deaggregate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"2d894e0c-27e7-4a02-aa67-53312333f671","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-20 20:42:38 +0000 UTC FinishedAt: 2026-08-20 20:42:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8w2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rmnet_map_deaggregate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"2d894e0c-27e7-4a02-aa67-53312333f671","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-20 20:42:38 +0000 UTC FinishedAt: 2026-08-20 20:42:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflows8w2p/series-workflows8w2p-convert-artifact-2877403376/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows8w2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rmnet_map_deaggregate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"2d894e0c-27e7-4a02-aa67-53312333f671","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-20 20:42:48 +0000 UTC FinishedAt: 2026-08-20 21:01:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8w2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rmnet_map_deaggregate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"2d894e0c-27e7-4a02-aa67-53312333f671","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-20 20:42:48 +0000 UTC FinishedAt: 2026-08-20 21:01:39 +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:*252278ad-ac82-4e0f-980b-e2ca4751ff60,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-workflows8w2p/series-workflows8w2p-convert-artifact-2877403376/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": "0f22de2b-b11e-45a5-96d8-aef3ae0aea0a", "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-workflows8w2p/series-workflows8w2p-build-action-1176157174/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows8w2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rmnet_map_deaggregate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"2d894e0c-27e7-4a02-aa67-53312333f671","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-20 20:42:48 +0000 UTC FinishedAt: 2026-08-20 21:01:29 +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:*252278ad-ac82-4e0f-980b-e2ca4751ff60,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-workflows8w2p/series-workflows8w2p-convert-artifact-2877403376/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": "0f22de2b-b11e-45a5-96d8-aef3ae0aea0a", "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-workflows8w2p/series-workflows8w2p-build-action-1176157174/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows8w2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rmnet_map_deaggregate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"2d894e0c-27e7-4a02-aa67-53312333f671","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-20 21:01:39 +0000 UTC FinishedAt: 2026-08-20 21:01:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8w2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rmnet_map_deaggregate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"2d894e0c-27e7-4a02-aa67-53312333f671","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-20 21:01:39 +0000 UTC FinishedAt: 2026-08-20 21:01:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8w2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rmnet_map_deaggregate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"2d894e0c-27e7-4a02-aa67-53312333f671","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-20 21:01:39 +0000 UTC FinishedAt: 2026-08-20 21:01:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8w2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rmnet_map_deaggregate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"2d894e0c-27e7-4a02-aa67-53312333f671","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-20 21:01:39 +0000 UTC FinishedAt: 2026-08-20 21:01:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"2d894e0c-27e7-4a02-aa67-53312333f671","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflows8w2p/series-workflows8w2p-convert-artifact-415221975/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows8w2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rmnet_map_deaggregate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"2d894e0c-27e7-4a02-aa67-53312333f671","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-20 21:01:49 +0000 UTC FinishedAt: 2026-08-20 21:04:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8w2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rmnet_map_deaggregate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"2d894e0c-27e7-4a02-aa67-53312333f671","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-20 21:01:49 +0000 UTC FinishedAt: 2026-08-20 21:03:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0f22de2b-b11e-45a5-96d8-aef3ae0aea0a,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-workflows8w2p/series-workflows8w2p-build-action-1176157174/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflows8w2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rmnet_map_deaggregate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"2d894e0c-27e7-4a02-aa67-53312333f671","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-20 21:04:09 +0000 UTC FinishedAt: 2026-08-20 21:04:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8w2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rmnet_map_deaggregate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"2d894e0c-27e7-4a02-aa67-53312333f671","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-20 21:04:09 +0000 UTC FinishedAt: 2026-08-20 21:04:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8w2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rmnet_map_deaggregate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"2d894e0c-27e7-4a02-aa67-53312333f671","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-20 21:04:09 +0000 UTC FinishedAt: 2026-08-20 21:22:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8w2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rmnet_map_deaggregate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"2d894e0c-27e7-4a02-aa67-53312333f671","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-20 21:04:09 +0000 UTC FinishedAt: 2026-08-20 21:22:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*252278ad-ac82-4e0f-980b-e2ca4751ff60,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-workflows8w2p/series-workflows8w2p-convert-artifact-415221975/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": "a50cc475-ab13-4d34-9bef-fcd7a142f30c", "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-workflows8w2p/series-workflows8w2p-build-action-3651289115/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows8w2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rmnet_map_deaggregate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"2d894e0c-27e7-4a02-aa67-53312333f671","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-20 21:04:09 +0000 UTC FinishedAt: 2026-08-20 21:22:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*252278ad-ac82-4e0f-980b-e2ca4751ff60,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-workflows8w2p/series-workflows8w2p-convert-artifact-415221975/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": "a50cc475-ab13-4d34-9bef-fcd7a142f30c", "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-workflows8w2p/series-workflows8w2p-build-action-3651289115/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows8w2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rmnet_map_deaggregate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"2d894e0c-27e7-4a02-aa67-53312333f671","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-20 21:22:41 +0000 UTC FinishedAt: 2026-08-20 21:22:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8w2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rmnet_map_deaggregate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"2d894e0c-27e7-4a02-aa67-53312333f671","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-20 21:22:41 +0000 UTC FinishedAt: 2026-08-20 21:22:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8w2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rmnet_map_deaggregate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"2d894e0c-27e7-4a02-aa67-53312333f671","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-20 21:22:41 +0000 UTC FinishedAt: 2026-08-20 21:24:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8w2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rmnet_map_deaggregate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"2d894e0c-27e7-4a02-aa67-53312333f671","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-20 21:22:41 +0000 UTC FinishedAt: 2026-08-20 21:24:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a50cc475-ab13-4d34-9bef-fcd7a142f30c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflows8w2p/series-workflows8w2p-build-action-3651289115/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflows8w2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rmnet_map_deaggregate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"2d894e0c-27e7-4a02-aa67-53312333f671","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-20 21:24:38 +0000 UTC FinishedAt: 2026-08-20 21:27:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8w2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rmnet_map_deaggregate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"2d894e0c-27e7-4a02-aa67-53312333f671","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-20 21:24:38 +0000 UTC FinishedAt: 2026-08-20 21:27:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rmnet_map_deaggregate"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*0f22de2b-b11e-45a5-96d8-aef3ae0aea0a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a50cc475-ab13-4d34-9bef-fcd7a142f30c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflows8w2p/series-workflows8w2p-build-action-1176157174/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflows8w2p/series-workflows8w2p-build-action-3651289115/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflows8w2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rmnet_map_deaggregate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"2d894e0c-27e7-4a02-aa67-53312333f671","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-20 21:24:38 +0000 UTC FinishedAt: 2026-08-20 21:24:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8w2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rmnet_map_deaggregate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"2d894e0c-27e7-4a02-aa67-53312333f671","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-20 21:24:38 +0000 UTC FinishedAt: 2026-08-20 21:24:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rmnet_map_deaggregate"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflows8w2p/series-workflows8w2p-convert-artifact-368370320/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows8w2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rmnet_map_deaggregate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"2d894e0c-27e7-4a02-aa67-53312333f671","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-20 21:24:38 +0000 UTC FinishedAt: 2026-08-20 21:24:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8w2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rmnet_map_deaggregate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"2d894e0c-27e7-4a02-aa67-53312333f671","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-20 21:24:38 +0000 UTC FinishedAt: 2026-08-20 21:24:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8w2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rmnet_map_deaggregate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"2d894e0c-27e7-4a02-aa67-53312333f671","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-20 21:24:38 +0000 UTC FinishedAt: 2026-08-20 21:24:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8w2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rmnet_map_deaggregate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"2d894e0c-27e7-4a02-aa67-53312333f671","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-20 21:24:48 +0000 UTC FinishedAt: 2026-08-20 21:27:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflows8w2p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rmnet_map_deaggregate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["RMNET"],"series_id":"2d894e0c-27e7-4a02-aa67-53312333f671","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-20 21:24:48 +0000 UTC FinishedAt: 2026-08-20 21:27:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0f22de2b-b11e-45a5-96d8-aef3ae0aea0a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a50cc475-ab13-4d34-9bef-fcd7a142f30c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflows8w2p/series-workflows8w2p-build-action-1176157174/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflows8w2p/series-workflows8w2p-build-action-3651289115/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflows8w2p/series-workflows8w2p-convert-artifact-368370320/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}