Name: series-workflowtpln2 Phase: Succeeded StartedAt: 2026-09-02 21:28:30 +0000 UTC FinishedAt: 2026-09-03 02:13:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtpln2[0] Phase: Succeeded StartedAt: 2026-09-02 21:28:30 +0000 UTC FinishedAt: 2026-09-02 22:32:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtpln2[0].run-triage Phase: Succeeded StartedAt: 2026-09-02 21:28:30 +0000 UTC FinishedAt: 2026-09-02 22:32:29 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "1094a8359b2741107c97cd2f86cd2cdbb21b5aa7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FILE_LOCKING", "PROC_FS", "NAMESPACES", "PID_NS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "1094a8359b2741107c97cd2f86cd2cdbb21b5aa7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FILE_LOCKING", "PROC_FS", "NAMESPACES", "PID_NS" ], "series_id": "6c4eb154-4d0f-4495-babc-21ab83c3f76f" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "locks_show", "fcntl_setlk", "fcntl_getlk" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZJTEVfTE9DS0lORyYjMzQ7LAogICAgJiMzNDtQUk9DX0ZTJiMzNDssCiAgICAmIzM0O05BTUVTUEFDRVMmIzM0OywKICAgICYjMzQ7UElEX05TJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bG9ja3Nfc2hvdyYjMzQ7LAogICAgJiMzNDtmY250bF9zZXRsayYjMzQ7LAogICAgJiMzNDtmY250bF9nZXRsayYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBsb2Nrc19zaG93YCBpbiBgZnMvbG9ja3MuY2AgdG8gZmlsdGVyIG91dCBvcGVuIGZpbGUgZGVzY3JpcHRpb24gKE9GRCkgbG9ja3MgZnJvbSBgL3Byb2MvbG9ja3NgIHdoZW4gdmlld2VkIGZyb20gYSBub24taW5pdCBQSUQgbmFtZXNwYWNlIGlmIHRoZSBvd25pbmcgUElEIGlzIG5vdCB2aXNpYmxlIHdpdGhpbiB0aGF0IG5hbWVzcGFjZS5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlLCBhbmQgaW5pdGlhbGl6ZXMgYWxsIGxvY2FsIHZhcmlhYmxlcyAoYHZpc2libGUgPSBmYWxzZWApLiBJdCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RocyBvciBjcmVhdGUgYW55IHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGxvY2tzX3Nob3coKWAgaW4gZnMvbG9ja3MuYyB0byBwcm9wZXJseSBmaWx0ZXIgT3BlbiBGaWxlIERlc2NyaXB0aW9uIChPRkQpIGxvY2tzIHdoZW4gYC9wcm9jL2xvY2tzYCBpcyByZWFkIGZyb20gd2l0aGluIGEgbm9uLWluaXRpYWwgUElEIG5hbWVzcGFjZS4gQmVjYXVzZSBPRkQgbG9ja3MgcmVwb3J0IHBpZCAtMSwgcHJldmlvdXMgbmFtZXNwYWNlIGZpbHRlcmluZyBmYWlsZWQgdG8gY29uY2VhbCBPRkQgbG9ja3Mgb3duZWQgYnkgcHJvY2Vzc2VzIG91dHNpZGUgdGhlIFBJRCBuYW1lc3BhY2UuIFRoZSBwYXRjaCBhZGRzIFJDVS1iYXNlZCBQSUQgbG9va3VwIGFuZCBuYW1lc3BhY2UgdmlzaWJpbGl0eSBjaGVja3Mgb24gYGZsY19waWRgLiBUaGlzIGNoYW5nZXMgcmVhY2hhYmxlIGNvcmUgVkZTIC8gcHJvY2ZzIGxvZ2ljIHRoYXQgY2FuIGJlIGV4ZXJjaXNlZCB2aWEgZmlsZSBsb2NraW5nIHN5c2NhbGxzIGFuZCBwcm9jZnMgcmVhZHMgYWNyb3NzIFBJRCBuYW1lc3BhY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjMwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODlhZjZhZWRkODQzNGE3NGQxNzFjN2Y0YzQyNGE4ZGJjNGM3NTVjMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDIgMjI6MzA6NTEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvbG9ja3MuYyBiL2ZzL2xvY2tzLmNcbmluZGV4IDZlNGZmN2ZjZWMwNTMuLmRiMTc4NzlkOTMxOTUgMTAwNjQ0XG4tLS0gYS9mcy9sb2Nrcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9sb2Nrcy5jXG5AQCAtMzAyMiw2ICYjNDM7MzAyMiwyMyBAQCBzdGF0aWMgaW50IGxvY2tzX3Nob3coc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICp2KVxuIFxuIFx0Y3VyID0gaGxpc3RfZW50cnkodiwgc3RydWN0IGZpbGVfbG9ja19jb3JlLCBmbGNfbGluayk7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBPRkQgbG9ja3MgYXJlIHJlcG9ydGVkIHdpdGggcGlkIC0xLCBzbyB0aGUgZmlsdGVyIGJlbG93IGNhbm5vdCBzZWVcbiYjNDM7XHQgKiB0aGVpciBvd25lcjsgZmxjX3BpZCBob2xkcyB0aGUgb3duZXIgdGdpZCwgc28gZmlsdGVyIG9uIGl0LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICgoY3VyLVx1MDAzZWZsY19mbGFncyBcdTAwMjYgRkxfT0ZETENLKSBcdTAwMjZcdTAwMjYgcHJvY19waWRucyAhPSBcdTAwMjZpbml0X3BpZF9ucykge1xuJiM0MztcdFx0c3RydWN0IHBpZCAqcGlkO1xuJiM0MztcdFx0Ym9vbCB2aXNpYmxlID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdFx0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdFx0cGlkID0gZmluZF9waWRfbnMoY3VyLVx1MDAzZWZsY19waWQsIFx1MDAyNmluaXRfcGlkX25zKTtcbiYjNDM7XHRcdGlmIChwaWQpXG4mIzQzO1x0XHRcdHZpc2libGUgPSBwaWRfbnJfbnMocGlkLCBwcm9jX3BpZG5zKSAhPSAwO1xuJiM0MztcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0XHRpZiAoIXZpc2libGUpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAobG9ja3NfdHJhbnNsYXRlX3BpZChjdXIsIHByb2NfcGlkbnMpID09IDApXG4gXHRcdHJldHVybiAwO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjMwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZJTEVfTE9DS0lORyYjMzQ7LAogICAgJiMzNDtQUk9DX0ZTJiMzNDssCiAgICAmIzM0O05BTUVTUEFDRVMmIzM0OywKICAgICYjMzQ7UElEX05TJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bG9ja3Nfc2hvdyYjMzQ7LAogICAgJiMzNDtmY250bF9zZXRsayYjMzQ7LAogICAgJiMzNDtmY250bF9nZXRsayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgbG9ja3Nfc2hvdygpYCBpbiBmcy9sb2Nrcy5jIHRvIHByb3Blcmx5IGZpbHRlciBPcGVuIEZpbGUgRGVzY3JpcHRpb24gKE9GRCkgbG9ja3Mgd2hlbiBgL3Byb2MvbG9ja3NgIGlzIHJlYWQgZnJvbSB3aXRoaW4gYSBub24taW5pdGlhbCBQSUQgbmFtZXNwYWNlLiBCZWNhdXNlIE9GRCBsb2NrcyByZXBvcnQgcGlkIC0xLCBwcmV2aW91cyBuYW1lc3BhY2UgZmlsdGVyaW5nIGZhaWxlZCB0byBjb25jZWFsIE9GRCBsb2NrcyBvd25lZCBieSBwcm9jZXNzZXMgb3V0c2lkZSB0aGUgUElEIG5hbWVzcGFjZS4gVGhlIHBhdGNoIGFkZHMgUkNVLWJhc2VkIFBJRCBsb29rdXAgYW5kIG5hbWVzcGFjZSB2aXNpYmlsaXR5IGNoZWNrcyBvbiBgZmxjX3BpZGAuIFRoaXMgY2hhbmdlcyByZWFjaGFibGUgY29yZSBWRlMgLyBwcm9jZnMgbG9naWMgdGhhdCBjYW4gYmUgZXhlcmNpc2VkIHZpYSBmaWxlIGxvY2tpbmcgc3lzY2FsbHMgYW5kIHByb2NmcyByZWFkcyBhY3Jvc3MgUElEIG5hbWVzcGFjZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4OWFmNmFlZGQ4NDM0YTc0ZDE3MWM3ZjRjNDI0YThkYmM0Yzc1NWMyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgMiAyMjozMDo1MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2xvY2tzLmMgYi9mcy9sb2Nrcy5jCmluZGV4IDZlNGZmN2ZjZWMwNTMuLmRiMTc4NzlkOTMxOTUgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbG9ja3MuYwpAQCAtMzAyMiw2ICYjNDM7MzAyMiwyMyBAQCBzdGF0aWMgaW50IGxvY2tzX3Nob3coc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICp2KQogCiAJY3VyID0gaGxpc3RfZW50cnkodiwgc3RydWN0IGZpbGVfbG9ja19jb3JlLCBmbGNfbGluayk7CiAKJiM0MzsJLyoKJiM0MzsJICogT0ZEIGxvY2tzIGFyZSByZXBvcnRlZCB3aXRoIHBpZCAtMSwgc28gdGhlIGZpbHRlciBiZWxvdyBjYW5ub3Qgc2VlCiYjNDM7CSAqIHRoZWlyIG93bmVyOyBmbGNfcGlkIGhvbGRzIHRoZSBvd25lciB0Z2lkLCBzbyBmaWx0ZXIgb24gaXQuCiYjNDM7CSAqLwomIzQzOwlpZiAoKGN1ci0mZ3Q7ZmxjX2ZsYWdzICZhbXA7IEZMX09GRExDSykgJmFtcDsmYW1wOyBwcm9jX3BpZG5zICE9ICZhbXA7aW5pdF9waWRfbnMpIHsKJiM0MzsJCXN0cnVjdCBwaWQgKnBpZDsKJiM0MzsJCWJvb2wgdmlzaWJsZSA9IGZhbHNlOwomIzQzOwomIzQzOwkJcmN1X3JlYWRfbG9jaygpOwomIzQzOwkJcGlkID0gZmluZF9waWRfbnMoY3VyLSZndDtmbGNfcGlkLCAmYW1wO2luaXRfcGlkX25zKTsKJiM0MzsJCWlmIChwaWQpCiYjNDM7CQkJdmlzaWJsZSA9IHBpZF9ucl9ucyhwaWQsIHByb2NfcGlkbnMpICE9IDA7CiYjNDM7CQlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJCWlmICghdmlzaWJsZSkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwogCWlmIChsb2Nrc190cmFuc2xhdGVfcGlkKGN1ciwgcHJvY19waWRucykgPT0gMCkKIAkJcmV0dXJuIDA7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIyNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBsb2Nrc19zaG93YCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nIGluIGBmcy9sb2Nrcy5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgbG9ja3Nfc2hvd2AgZnVuY3Rpb24uIFNlZW1zIGxpa2UgaXQmIzM5O3MgYWRkaW5nIHNvbWUgZmlsdGVyaW5nIGxvZ2ljLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgaXQmIzM5O3MgcmVsYXRlZCB0byBob3cgZmlsZSBsb2NrcyBhcmUgZGlzcGxheWVkIGluIGEgYHByb2Nmc2AgY29udGV4dC4KCkxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IGxvb2tzIGxpa2UgdGhlcmUmIzM5O3MgYSBuZXcgY2hlY2sgZGVhbGluZyB3aXRoICYjMzQ7T0ZEIGxvY2tzJiMzNDsuIFRoZSBjb21tZW50IG1lbnRpb25zIHRoYXQgdGhlc2UgbG9ja3MgYXJlIHJlcG9ydGVkIHdpdGggYSBQSUQgb2YgLTEuIFNvLCB0aGUgbm9ybWFsIFBJRC1iYXNlZCBmaWx0ZXJpbmcgaXNuJiMzOTt0IGdvaW5nIHRvIHdvcmsgZm9yIHRoZXNlLiAgVGhlIHBhdGNoIHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgdGhpcyBieSBjaGVja2luZyBgZmxjX3BpZGAgKHdoaWNoIHRoZSBjb21tZW50IHNheXMgaG9sZHMgdGhlIG93bmVyJiMzOTtzIHRnaWQpLgoKSXQgc2VlbXMgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpbnZvbHZlcyBhIGNvbmRpdGlvbmFsIGJsb2NrOgoKYGBgYwoJaWYgKChjdXItJmd0O2ZsY19mbGFncyAmYW1wOyBGTF9PRkRMQ0spICZhbXA7JmFtcDsgcHJvY19waWRucyAhPSAmYW1wO2luaXRfcGlkX25zKSB7CgkJc3RydWN0IHBpZCAqcGlkOwoJCWJvb2wgdmlzaWJsZSA9IGZhbHNlOwoKCQlyY3VfcmVhZF9sb2NrKCk7CgkJcGlkID0gZmluZF9waWRfbnMoY3VyLSZndDtmbGNfcGlkLCAmYW1wO2luaXRfcGlkX25zKTsKCQlpZiAocGlkKQoJCQl2aXNpYmxlID0gcGlkX25yX25zKHBpZCwgcHJvY19waWRucykgIT0gMDsKCQlyY3VfcmVhZF91bmxvY2soKTsKCQlpZiAoIXZpc2libGUpCgkJCXJldHVybiAwOwoJfQpgYGAKCklmIGl0JiMzOTtzIGFuIE9GRCBsb2NrIGFuZCB3ZSYjMzk7cmUgbm90IGluIHRoZSBpbml0aWFsIFBJRCBuYW1lc3BhY2UsIHRoZSBjb2RlIHRoZW4gbG9va3MgdXAgdGhlIFBJRCBhc3NvY2lhdGVkIHdpdGggdGhlIGBmbGNfcGlkYCAod2hpY2ggaXMgdGhlIG93bmVyJiMzOTtzIHRnaWQpIHdpdGhpbiB0aGUgaW5pdGlhbCBQSUQgbmFtZXNwYWNlLiAgSWYgaXQgZmluZHMgYSBQSUQgYW5kIHRoYXQgUElEIGlzbiYjMzk7dCB2aXNpYmxlIGluIHRoZSBjdXJyZW50IGBwcm9jX3BpZG5zYCwgdGhlbiB0aGUgcGF0Y2ggaXMgZ29pbmcgdG8gc2tpcCB0aGUgY3VycmVudCBsb2NrIGFuZCByZXR1cm4gMC4gVGhpcyBzdWdnZXN0cyB3ZSBhcmUgZmlsdGVyaW5nLCBhbmQgd2UgZG9uJiMzOTt0IHdhbnQgdG8gZGlzcGxheSBsb2NrcyB3aG9zZSBvd25lciBpcyBub3QgdmlzaWJsZSB0byB0aGUgY3VycmVudCBQSUQgbmFtZXNwYWNlLgoKSSB0aGluayBJIG5lZWQgdG8gdXNlIGVpdGhlciBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZmluZCBvdXQgd2hhdCB0aGVzZSBuYW1lc3BhY2VzIGFyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2xvY2tzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMwMTA6XHRcdFx0cmV0dXJuIE5VTEw7XG4zMDExOlx0XHR9XG4zMDEyOlx0XG4zMDEzOlx0XHRyZXR1cm4gdG1wO1xuMzAxNDpcdH1cbjMwMTU6XHRcbjMwMTY6XHRzdGF0aWMgaW50IGxvY2tzX3Nob3coc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICp2KVxuMzAxNzpcdHtcbjMwMTg6XHRcdHN0cnVjdCBsb2Nrc19pdGVyYXRvciAqaXRlciA9IGYtXHUwMDNlcHJpdmF0ZTtcbjMwMTk6XHRcdHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqY3VyLCAqdG1wO1xuMzAyMDpcdFx0c3RydWN0IHBpZF9uYW1lc3BhY2UgKnByb2NfcGlkbnMgPSBwcm9jX3BpZF9ucyhmaWxlX2lub2RlKGYtXHUwMDNlZmlsZSktXHUwMDNlaV9zYik7XG4zMDIxOlx0XHRpbnQgbGV2ZWwgPSAwO1xuMzAyMjpcdFxuMzAyMzpcdFx0Y3VyID0gaGxpc3RfZW50cnkodiwgc3RydWN0IGZpbGVfbG9ja19jb3JlLCBmbGNfbGluayk7XG4zMDI0Olx0XG4zMDI1Olx0XHQvKlxuMzAyNjpcdFx0ICogT0ZEIGxvY2tzIGFyZSByZXBvcnRlZCB3aXRoIHBpZCAtMSwgc28gdGhlIGZpbHRlciBiZWxvdyBjYW5ub3Qgc2VlXG4zMDI3Olx0XHQgKiB0aGVpciBvd25lcjsgZmxjX3BpZCBob2xkcyB0aGUgb3duZXIgdGdpZCwgc28gZmlsdGVyIG9uIGl0LlxuMzAyODpcdFx0ICovXG4zMDI5Olx0XHRpZiAoKGN1ci1cdTAwM2VmbGNfZmxhZ3MgXHUwMDI2IEZMX09GRExDSykgXHUwMDI2XHUwMDI2IHByb2NfcGlkbnMgIT0gXHUwMDI2aW5pdF9waWRfbnMpIHtcbjMwMzA6XHRcdFx0c3RydWN0IHBpZCAqcGlkO1xuMzAzMTpcdFx0XHRib29sIHZpc2libGUgPSBmYWxzZTtcbjMwMzI6XHRcbjMwMzM6XHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuMzAzNDpcdFx0XHRwaWQgPSBmaW5kX3BpZF9ucyhjdXItXHUwMDNlZmxjX3BpZCwgXHUwMDI2aW5pdF9waWRfbnMpO1xuMzAzNTpcdFx0XHRpZiAocGlkKVxuMzAzNjpcdFx0XHRcdHZpc2libGUgPSBwaWRfbnJfbnMocGlkLCBwcm9jX3BpZG5zKSAhPSAwO1xuMzAzNzpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjMwMzg6XHRcdFx0aWYgKCF2aXNpYmxlKVxuMzAzOTpcdFx0XHRcdHJldHVybiAwO1xuMzA0MDpcdFx0fVxuMzA0MTpcdFxuMzA0MjpcdFx0aWYgKGxvY2tzX3RyYW5zbGF0ZV9waWQoY3VyLCBwcm9jX3BpZG5zKSA9PSAwKVxuMzA0MzpcdFx0XHRyZXR1cm4gMDtcbjMwNDQ6XHRcbjMwNDU6XHRcdC8qIFZpZXcgdGhpcyBjcm9zc2VkIGxpbmtlZCBsaXN0IGFzIGEgYmluYXJ5IHRyZWUsIHRoZSBmaXJzdCBtZW1iZXIgb2YgZmxjX2Jsb2NrZWRfcmVxdWVzdHNcbjMwNDY6XHRcdCAqIGlzIHRoZSBsZWZ0IGNoaWxkIG9mIGN1cnJlbnQgbm9kZSwgdGhlIG5leHQgc2lsaWJpbmcgaW4gZmxjX2Jsb2NrZWRfbWVtYmVyIGlzIHRoZVxuMzA0NzpcdFx0ICogcmlnaHQgY2hpbGQsIHdlIGNhbiBhbHNlIGdldCB0aGUgcGFyZW50IG9mIGN1cnJlbnQgbm9kZSBmcm9tIGZsY19ibG9ja2VyLCBzbyB0aGlzXG4zMDQ4Olx0XHQgKiBxdWVzdGlvbiBiZWNvbWVzIHRyYXZlcnNhbCBvZiBhIGJpbmFyeSB0cmVlXG4zMDQ5Olx0XHQgKi9cbjMwNTA6XHRcdHdoaWxlIChjdXIgIT0gTlVMTCkge1xuMzA1MTpcdFx0XHRpZiAobGV2ZWwpXG4zMDUyOlx0XHRcdFx0bG9ja19nZXRfc3RhdHVzKGYsIGN1ciwgaXRlci1cdTAwM2VsaV9wb3MsIFwmIzM0Oy1cdTAwM2UgXCYjMzQ7LCBsZXZlbCk7XG4zMDUzOlx0XHRcdGVsc2VcbjMwNTQ6XHRcdFx0XHRsb2NrX2dldF9zdGF0dXMoZiwgY3VyLCBpdGVyLVx1MDAzZWxpX3BvcywgXCYjMzQ7XCYjMzQ7LCBsZXZlbCk7XG4zMDU1Olx0XG4zMDU2Olx0XHRcdGlmICghbGlzdF9lbXB0eShcdTAwMjZjdXItXHUwMDNlZmxjX2Jsb2NrZWRfcmVxdWVzdHMpKSB7XG4zMDU3Olx0XHRcdFx0LyogVHVybiBsZWZ0ICovXG4zMDU4Olx0XHRcdFx0Y3VyID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKFx1MDAyNmN1ci1cdTAwM2VmbGNfYmxvY2tlZF9yZXF1ZXN0cyxcbjMwNTk6XHRcdFx0XHRcdFx0XHQgICAgICAgc3RydWN0IGZpbGVfbG9ja19jb3JlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MzkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGxvY2sgc2l0dWF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFuZHNjYXBlLCBzbyBteSBmaXJzdCBtb3ZlIGlzIHRvIGlkZW50aWZ5IHRoZSB1c2FnZSBvZiBgbG9ja3Nfc2hvd2AuIEkgd2FudCB0byBzZWUgKndoZXJlKiBpdCYjMzk7cyBiZWluZyBjYWxsZWQgaW4gdGhlIGNvZGViYXNlLCBhbmQgdGhlbiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBwcmVjaXNlbHkgKmhvdyogdGhlIGAvcHJvYy9sb2Nrc2AgaW50ZXJmYWNlIGZ1bmN0aW9ucy4gVGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlc2UgdHdvIGlzIGNyaXRpY2FsLgoKVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiBgZnMvbG9ja3MuY2AuIEkgZXhwZWN0IHRoZSBjb3JlIGxvZ2ljIGlzIHRoZXJlLiBJJiMzOTtsbCB6ZXJvIGluIG9uIGxpbmVzIGFyb3VuZCAzMDAwIHRvIDMxMDAuIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIHJhbmdlIHRvIGZpbmQgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb25zIGFuZCByZWxldmFudCBzdXBwb3J0aW5nIGNvZGUuIEhvcGVmdWxseSwgdGhhdCB3aWxsIGdpdmUgbWUgZW5vdWdoIGluZm9ybWF0aW9uIHRvIHdvcmsgd2l0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2xvY2tzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMwNjA6XHRcdFx0XHRcdFx0XHQgICAgICAgZmxjX2Jsb2NrZWRfbWVtYmVyKTtcbjMwNjE6XHRcdFx0XHRsZXZlbCYjNDM7JiM0Mzs7XG4zMDYyOlx0XHRcdH0gZWxzZSB7XG4zMDYzOlx0XHRcdFx0LyogVHVybiByaWdodCAqL1xuMzA2NDpcdFx0XHRcdHRtcCA9IGdldF9uZXh0X2Jsb2NrZWRfbWVtYmVyKGN1cik7XG4zMDY1Olx0XHRcdFx0LyogRmFsbCBiYWNrIHRvIHBhcmVudCBub2RlICovXG4zMDY2Olx0XHRcdFx0d2hpbGUgKHRtcCA9PSBOVUxMIFx1MDAyNlx1MDAyNiBjdXItXHUwMDNlZmxjX2Jsb2NrZXIgIT0gTlVMTCkge1xuMzA2NzpcdFx0XHRcdFx0Y3VyID0gY3VyLVx1MDAzZWZsY19ibG9ja2VyO1xuMzA2ODpcdFx0XHRcdFx0bGV2ZWwtLTtcbjMwNjk6XHRcdFx0XHRcdHRtcCA9IGdldF9uZXh0X2Jsb2NrZWRfbWVtYmVyKGN1cik7XG4zMDcwOlx0XHRcdFx0fVxuMzA3MTpcdFx0XHRcdGN1ciA9IHRtcDtcbjMwNzI6XHRcdFx0fVxuMzA3MzpcdFx0fVxuMzA3NDpcdFxuMzA3NTpcdFx0cmV0dXJuIDA7XG4zMDc2Olx0fVxuMzA3NzpcdFxuMzA3ODpcdHN0YXRpYyB2b2lkIF9fc2hvd19mZF9sb2NrcyhzdHJ1Y3Qgc2VxX2ZpbGUgKmYsXG4zMDc5Olx0XHRcdFx0c3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgaW50ICppZCxcbjMwODA6XHRcdFx0XHRzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGZpbGVzX3N0cnVjdCAqZmlsZXMpXG4zMDgxOlx0e1xuMzA4MjpcdFx0c3RydWN0IGZpbGVfbG9ja19jb3JlICpmbDtcbjMwODM6XHRcbjMwODQ6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoZmwsIGhlYWQsIGZsY19saXN0KSB7XG4zMDg1Olx0XG4zMDg2Olx0XHRcdGlmIChmaWxwICE9IGZsLVx1MDAzZWZsY19maWxlKVxuMzA4NzpcdFx0XHRcdGNvbnRpbnVlO1xuMzA4ODpcdFx0XHRpZiAoZmwtXHUwMDNlZmxjX293bmVyICE9IGZpbGVzIFx1MDAyNlx1MDAyNiBmbC1cdTAwM2VmbGNfb3duZXIgIT0gZmlscClcbjMwODk6XHRcdFx0XHRjb250aW51ZTtcbjMwOTA6XHRcbjMwOTE6XHRcdFx0KCppZCkmIzQzOyYjNDM7O1xuMzA5MjpcdFx0XHRzZXFfcHV0cyhmLCBcJiMzNDtsb2NrOlxcdFwmIzM0Oyk7XG4zMDkzOlx0XHRcdGxvY2tfZ2V0X3N0YXR1cyhmLCBmbCwgKmlkLCBcJiMzNDtcJiMzNDssIDApO1xuMzA5NDpcdFx0fVxuMzA5NTpcdH1cbjMwOTY6XHRcbjMwOTc6XHR2b2lkIHNob3dfZmRfbG9ja3Moc3RydWN0IHNlcV9maWxlICpmLFxuMzA5ODpcdFx0XHQgIHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgZmlsZXNfc3RydWN0ICpmaWxlcylcbjMwOTk6XHR7XG4zMTAwOlx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxwKTtcbjMxMDE6XHRcdHN0cnVjdCBmaWxlX2xvY2tfY29udGV4dCAqY3R4O1xuMzEwMjpcdFx0aW50IGlkID0gMDtcbjMxMDM6XHRcbjMxMDQ6XHRcdGN0eCA9IGxvY2tzX2lub2RlX2NvbnRleHQoaW5vZGUpO1xuMzEwNTpcdFx0aWYgKCFjdHgpXG4zMTA2Olx0XHRcdHJldHVybjtcbjMxMDc6XHRcbjMxMDg6XHRcdHNwaW5fbG9jayhcdTAwMjZjdHgtXHUwMDNlZmxjX2xvY2spO1xuMzEwOTpcdFx0X19zaG93X2ZkX2xvY2tzKGYsIFx1MDAyNmN0eC1cdTAwM2VmbGNfZmxvY2ssIFx1MDAyNmlkLCBmaWxwLCBmaWxlcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg3OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKk5hdmlnYXRpbmcgdGhlIExpbnV4IEtlcm5lbCYjMzk7cyBMb2NraW5nIE1lY2hhbmlzbSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBwb2ludCBpbiB0aGUga2VybmVsIHdoZXJlIHRoZSBgL3Byb2MvbG9ja3NgIGludGVyZmFjZSBpcyByZWdpc3RlcmVkLiBNeSBodW5jaCBpcyB0aGF0IHRoZSBmaWxlIHN5c3RlbSBsYXllciwgcGFydGljdWxhcmx5IGBmcy9sb2Nrcy5jYCwgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcuIEkgd2FudCB0byB0cmFjZSB0aGUgcGF0aCBmcm9tIHRoZSBgL3Byb2NgIGZpbGVzeXN0ZW0gZW50cnkgdG8gdGhlIHVuZGVybHlpbmcgbG9ja2luZyBkYXRhIHN0cnVjdHVyZXMuIEtub3dpbmcgd2hlcmUgaXQmIzM5O3MgcmVnaXN0ZXJlZCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGtlcm5lbCBleHBvc2VzIGFuZCBtYW5hZ2VzIGxvY2sgaW5mb3JtYXRpb24gZm9yIHVzZXItc3BhY2UgYXBwbGljYXRpb25zLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgYW5hbHl6aW5nIHRoZSBrZXJuZWwmIzM5O3MgbG9ja2luZyBiZWhhdmlvciwgYW5kIGBmcy9sb2Nrcy5jYCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciBteSBpbnZlc3RpZ2F0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9sb2Nrcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzExMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMTEwOlx0XHRfX3Nob3dfZmRfbG9ja3MoZiwgXHUwMDI2Y3R4LVx1MDAzZWZsY19wb3NpeCwgXHUwMDI2aWQsIGZpbHAsIGZpbGVzKTtcbjMxMTE6XHRcdF9fc2hvd19mZF9sb2NrcyhmLCBcdTAwMjZjdHgtXHUwMDNlZmxjX2xlYXNlLCBcdTAwMjZpZCwgZmlscCwgZmlsZXMpO1xuMzExMjpcdFx0c3Bpbl91bmxvY2soXHUwMDI2Y3R4LVx1MDAzZWZsY19sb2NrKTtcbjMxMTM6XHR9XG4zMTE0Olx0XG4zMTE1Olx0c3RhdGljIHZvaWQgKmxvY2tzX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqZiwgbG9mZl90ICpwb3MpXG4zMTE2Olx0XHRfX2FjcXVpcmVzKFx1MDAyNmJsb2NrZWRfbG9ja19sb2NrKVxuMzExNzpcdHtcbjMxMTg6XHRcdHN0cnVjdCBsb2Nrc19pdGVyYXRvciAqaXRlciA9IGYtXHUwMDNlcHJpdmF0ZTtcbjMxMTk6XHRcbjMxMjA6XHRcdGl0ZXItXHUwMDNlbGlfcG9zID0gKnBvcyAmIzQzOyAxO1xuMzEyMTpcdFx0cGVyY3B1X2Rvd25fd3JpdGUoXHUwMDI2ZmlsZV9yd3NlbSk7XG4zMTIyOlx0XHRzcGluX2xvY2soXHUwMDI2YmxvY2tlZF9sb2NrX2xvY2spO1xuMzEyMzpcdFx0cmV0dXJuIHNlcV9obGlzdF9zdGFydF9wZXJjcHUoXHUwMDI2ZmlsZV9sb2NrX2xpc3QuaGxpc3QsIFx1MDAyNml0ZXItXHUwMDNlbGlfY3B1LCAqcG9zKTtcbjMxMjQ6XHR9XG4zMTI1Olx0XG4zMTI2Olx0c3RhdGljIHZvaWQgKmxvY2tzX25leHQoc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICp2LCBsb2ZmX3QgKnBvcylcbjMxMjc6XHR7XG4zMTI4Olx0XHRzdHJ1Y3QgbG9ja3NfaXRlcmF0b3IgKml0ZXIgPSBmLVx1MDAzZXByaXZhdGU7XG4zMTI5Olx0XG4zMTMwOlx0XHQmIzQzOyYjNDM7aXRlci1cdTAwM2VsaV9wb3M7XG4zMTMxOlx0XHRyZXR1cm4gc2VxX2hsaXN0X25leHRfcGVyY3B1KHYsIFx1MDAyNmZpbGVfbG9ja19saXN0LmhsaXN0LCBcdTAwMjZpdGVyLVx1MDAzZWxpX2NwdSwgcG9zKTtcbjMxMzI6XHR9XG4zMTMzOlx0XG4zMTM0Olx0c3RhdGljIHZvaWQgbG9ja3Nfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIHZvaWQgKnYpXG4zMTM1Olx0XHRfX3JlbGVhc2VzKFx1MDAyNmJsb2NrZWRfbG9ja19sb2NrKVxuMzEzNjpcdHtcbjMxMzc6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmJsb2NrZWRfbG9ja19sb2NrKTtcbjMxMzg6XHRcdHBlcmNwdV91cF93cml0ZShcdTAwMjZmaWxlX3J3c2VtKTtcbjMxMzk6XHR9XG4zMTQwOlx0XG4zMTQxOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBsb2Nrc19zZXFfb3BlcmF0aW9ucyA9IHtcbjMxNDI6XHRcdC5zdGFydFx0PSBsb2Nrc19zdGFydCxcbjMxNDM6XHRcdC5uZXh0XHQ9IGxvY2tzX25leHQsXG4zMTQ0Olx0XHQuc3RvcFx0PSBsb2Nrc19zdG9wLFxuMzE0NTpcdFx0LnNob3dcdD0gbG9ja3Nfc2hvdyxcbjMxNDY6XHR9O1xuMzE0NzpcdFxuMzE0ODpcdHN0YXRpYyBpbnQgX19pbml0IHByb2NfbG9ja3NfaW5pdCh2b2lkKVxuMzE0OTpcdHtcbjMxNTA6XHRcdHByb2NfY3JlYXRlX3NlcV9wcml2YXRlKFwmIzM0O2xvY2tzXCYjMzQ7LCAwLCBOVUxMLCBcdTAwMjZsb2Nrc19zZXFfb3BlcmF0aW9ucyxcbjMxNTE6XHRcdFx0XHRzaXplb2Yoc3RydWN0IGxvY2tzX2l0ZXJhdG9yKSwgTlVMTCk7XG4zMTUyOlx0XHRyZXR1cm4gMDtcbjMxNTM6XHR9XG4zMTU0Olx0ZnNfaW5pdGNhbGwocHJvY19sb2Nrc19pbml0KTtcbjMxNTU6XHQjZW5kaWZcbjMxNTY6XHRcbjMxNTc6XHRzdGF0aWMgaW50IF9faW5pdCBmaWxlbG9ja19pbml0KHZvaWQpXG4zMTU4Olx0e1xuMzE1OTpcdFx0aW50IGk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg3OQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBNYWNybyBVc2FnZSBpbiBUaGlzIENvZGViYXNlKioKCkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBjb250ZXh0IGZvciBgcHJvY19sb2Nrc19pbml0YCBhbmQgYGxvY2tzX3Nob3dgLiBMZXQmIzM5O3Mgc3RlcCB0aHJvdWdoIHRoaXMgbWV0aG9kaWNhbGx5LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgYCNpZmRlZmAgZGlyZWN0aXZlcyB0aGF0IG1pZ2h0IGNvbnRyb2wgdGhlaXIgaW5jbHVzaW9uLiBJJiMzOTtsbCBuZWVkIHRvIHdvcmsgYmFja3dhcmQgdGhyb3VnaCB0aGUgZmlsZSwgc3RhcnRpbmcgd2l0aCB0aGVzZSBmdW5jdGlvbnMuIFRoZSBnb2FsIGhlcmUgaXMgdG8gZGV0ZXJtaW5lICp3aHkqIHRoZXNlIGZ1bmN0aW9ucyBtaWdodCBiZSBzZWxlY3RpdmVseSBjb21waWxlZC4gQXJlIHdlIGRlYWxpbmcgd2l0aCBmZWF0dXJlIGZsYWdzLCBkaWZmZXJlbnQgaGFyZHdhcmUgcGxhdGZvcm1zLCBkZWJ1ZyBtb2Rlcywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEEgcXVpY2sgc2VhcmNoIGZvciB0aGUgbWFjcm8gZGVmaW5pdGlvbnMgc3Vycm91bmRpbmcgdGhlc2UgZnVuY3Rpb24gY2FsbHMgc2hvdWxkIHJldmVhbCB0aGUgZGVwZW5kZW5jeS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZi4qUFJPQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2xvY2tzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbG9ja3MuYz0yOTEwPUVYUE9SVF9TWU1CT0xfR1BMKHZmc19pbm9kZV9oYXNfbG9ja3MpO1xuZnMvbG9ja3MuYy0yOTExLVxuZnMvbG9ja3MuYzoyOTEyOiNpZmRlZiBDT05GSUdfUFJPQ19GU1xuZnMvbG9ja3MuYy0yOTEzLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb2NfZnMuaFx1MDAzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTg1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgZnMvbG9ja3MuY2AqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gdGhpbmtpbmcsIGJhc2VkIG9uIHRoZSBjb250ZXh0LCB0aGF0IHRoZSBpc3N1ZSBsaWtlbHkgcmVzaWRlcyB3aXRoaW4gYGZzL2xvY2tzLmNgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gemVyb2luZyBpbiBvbiB0aGUgYXJlYSBhcm91bmQgbGluZSAyOTEyLiBUaGF0IGxvY2F0aW9uIGlzIHVzdWFsbHkgd2hlcmUgdGhlIGNvZGUgaGFuZGxlcy4uLiB3ZWxsLCBpdCYjMzk7cyB3aGVyZSB0aGUgaW1wbGVtZW50YXRpb24gZm9yIFtpbnNlcnQgcmVsZXZhbnQgbG9jayByZWxhdGVkIGZ1bmN0aW9uYWxpdHkgdGhlIGV4cGVydCB3b3VsZCBrbm93LCBlLmcuLCB0aGUgc3BlY2lmaWMgbG9ja2luZyBtZWNoYW5pc20sIGEgcGFydGljdWxhciBlcnJvciBjb25kaXRpb24sIG9yIGEgcmVsYXRlZCBmdW5jdGlvbiBjYWxsLCBkZXBlbmRpbmcgb24gY29udGV4dF0uIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBvYnNlcnZlZCBiZWhhdmlvciBpbiB0aGF0IHBhcnRpY3VsYXIgc2VjdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBjYXJlZnVsbHkgYW5hbHl6ZSB0aGUgY29kZSBhcm91bmQgdGhhdCBwb2ludCwgbG9va2luZyBmb3IgaG93IFttZW50aW9uIHNvbWV0aGluZyByZWxldmFudCB0byBsb29rIGZvciwgZS5nLiwgdGhlIGxvY2sgaXMgYWNxdWlyZWQvcmVsZWFzZWQsIHRoZSBzdGF0ZSBpcyB0cmFuc2l0aW9uZWQsIG9yIGEgc3BlY2lmaWMgdmFsdWUgaXMgaGFuZGxlZF0uIFRoZSBkZXZpbCBpcyBhbHdheXMgaW4gdGhlIGRldGFpbHMsIHNvIGxldCYjMzk7cyBzdGFydCByZWFkaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2xvY2tzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI5MTA6XHRFWFBPUlRfU1lNQk9MX0dQTCh2ZnNfaW5vZGVfaGFzX2xvY2tzKTtcbjI5MTE6XHRcbjI5MTI6XHQjaWZkZWYgQ09ORklHX1BST0NfRlNcbjI5MTM6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9jX2ZzLmhcdTAwM2VcbjI5MTQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXFfZmlsZS5oXHUwMDNlXG4yOTE1Olx0XG4yOTE2Olx0c3RydWN0IGxvY2tzX2l0ZXJhdG9yIHtcbjI5MTc6XHRcdGludFx0bGlfY3B1O1xuMjkxODpcdFx0bG9mZl90XHRsaV9wb3M7XG4yOTE5Olx0fTtcbjI5MjA6XHRcbjI5MjE6XHRzdGF0aWMgdm9pZCBsb2NrX2dldF9zdGF0dXMoc3RydWN0IHNlcV9maWxlICpmLCBzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmZsYyxcbjI5MjI6XHRcdFx0XHQgICAgbG9mZl90IGlkLCBjaGFyICpwZngsIGludCByZXBlYXQpXG4yOTIzOlx0e1xuMjkyNDpcdFx0c3RydWN0IGlub2RlICppbm9kZSA9IE5VTEw7XG4yOTI1Olx0XHR1bnNpZ25lZCBpbnQgcGlkO1xuMjkyNjpcdFx0c3RydWN0IHBpZF9uYW1lc3BhY2UgKnByb2NfcGlkbnMgPSBwcm9jX3BpZF9ucyhmaWxlX2lub2RlKGYtXHUwMDNlZmlsZSktXHUwMDNlaV9zYik7XG4yOTI3Olx0XHRpbnQgdHlwZSA9IGZsYy1cdTAwM2VmbGNfdHlwZTtcbjI5Mjg6XHRcdHN0cnVjdCBmaWxlX2xvY2sgKmZsID0gZmlsZV9sb2NrKGZsYyk7XG4yOTI5Olx0XG4yOTMwOlx0XHRwaWQgPSBsb2Nrc190cmFuc2xhdGVfcGlkKGZsYywgcHJvY19waWRucyk7XG4yOTMxOlx0XG4yOTMyOlx0XHQvKlxuMjkzMzpcdFx0ICogSWYgbG9jayBvd25lciBpcyBkZWFkIChhbmQgcGlkIGlzIGZyZWVkKSBvciBub3QgdmlzaWJsZSBpbiBjdXJyZW50XG4yOTM0Olx0XHQgKiBwaWRucywgemVybyBpcyBzaG93biBhcyBhIHBpZCB2YWx1ZS4gQ2hlY2sgbG9jayBpbmZvIGZyb21cbjI5MzU6XHRcdCAqIGluaXRfcGlkX25zIHRvIGdldCBzYXZlZCBsb2NrIHBpZCB2YWx1ZS5cbjI5MzY6XHRcdCAqL1xuMjkzNzpcdFx0aWYgKGZsYy1cdTAwM2VmbGNfZmlsZSAhPSBOVUxMKVxuMjkzODpcdFx0XHRpbm9kZSA9IGZpbGVfaW5vZGUoZmxjLVx1MDAzZWZsY19maWxlKTtcbjI5Mzk6XHRcbjI5NDA6XHRcdHNlcV9wcmludGYoZiwgXCYjMzQ7JWxsZDogXCYjMzQ7LCBpZCk7XG4yOTQxOlx0XG4yOTQyOlx0XHRpZiAocmVwZWF0KVxuMjk0MzpcdFx0XHRzZXFfcHJpbnRmKGYsIFwmIzM0OyUqc1wmIzM0OywgcmVwZWF0IC0gMSAmIzQzOyAoaW50KXN0cmxlbihwZngpLCBwZngpO1xuMjk0NDpcdFxuMjk0NTpcdFx0aWYgKGZsYy1cdTAwM2VmbGNfZmxhZ3MgXHUwMDI2IEZMX1BPU0lYKSB7XG4yOTQ2Olx0XHRcdGlmIChmbGMtXHUwMDNlZmxjX2ZsYWdzIFx1MDAyNiBGTF9BQ0NFU1MpXG4yOTQ3Olx0XHRcdFx0c2VxX3B1dHMoZiwgXCYjMzQ7QUNDRVNTXCYjMzQ7KTtcbjI5NDg6XHRcdFx0ZWxzZSBpZiAoZmxjLVx1MDAzZWZsY19mbGFncyBcdTAwMjYgRkxfT0ZETENLKVxuMjk0OTpcdFx0XHRcdHNlcV9wdXRzKGYsIFwmIzM0O09GRExDS1wmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxMTQKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBGaWxlIExvY2tpbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byBmaWxlIGxvY2tpbmcsIHNwZWNpZmljYWxseSwgaG93IGl0JiMzOTtzIGludGVncmF0ZWQgd2l0aGluIHRoZSBrZXJuZWwuIE15IGN1cnJlbnQgaHVuY2ggaXMgdGhhdCBgZnMvbG9ja3MuY2AgaXMgb25seSBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgd2hlbiB0aGUgYENPTkZJR19GSUxFX0xPQ0tJTkdgIG9wdGlvbiBpcyBlbmFibGVkLiBUaGF0IGZlZWxzIGxvZ2ljYWwsIGEgY29tbW9uIHBhdHRlcm4gaW4ga2VybmVsIGJ1aWxkIHN5c3RlbXMuIFRvIGNvbmZpcm0gdGhhdCBoeXBvdGhlc2lzLCB0aGUgZmlyc3QgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiDigJMgc3BlY2lmaWNhbGx5LCB0aGUgYGZzL01ha2VmaWxlYC4gSXQmIzM5O2xsIGNsZWFybHkgb3V0bGluZSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzIGZvciB0aGlzIHBhcnRpY3VsYXIgbW9kdWxlLCBsZXR0aW5nIG1lIHZlcmlmeSB0aGUgbGluayBiZXR3ZWVuIHRoZSBjb2RlIGFuZCB0aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGRlcGVuZGVuY2llcyBJIHNob3VsZCBiZSBhd2FyZSBvZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bG9ja3NcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL01ha2VmaWxlPTMzPW9iai0kKENPTkZJR19GU19WRVJJVFkpXHRcdCYjNDM7PSB2ZXJpdHkvXG5mcy9NYWtlZmlsZTozNDpvYmotJChDT05GSUdfRklMRV9MT0NLSU5HKSAgICAgICYjNDM7PSBsb2Nrcy5vXG5mcy9NYWtlZmlsZS0zNS1vYmotJChDT05GSUdfQklORk1UX01JU0MpXHQmIzQzOz0gYmluZm10X21pc2Mub1xuLS1cbmZzL2NlcGgvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfQ0VQSF9GUykgJiM0Mzs9IGNlcGgub1xuZnMvY2VwaC9NYWtlZmlsZS03LVxuZnMvY2VwaC9NYWtlZmlsZTo4OmNlcGgteSA6PSBzdXBlci5vIGlub2RlLm8gZGlyLm8gZmlsZS5vIGxvY2tzLm8gYWRkci5vIGlvY3RsLm8gXFxcbmZzL2NlcGgvTWFrZWZpbGUtOS1cdGV4cG9ydC5vIGNhcHMubyBzbmFwLm8geGF0dHIubyBxdW90YS5vIGlvLm8gXFxcbi0tXG5mcy9vY2ZzMi9NYWtlZmlsZT0xMT1vY2ZzMi1vYmpzIDo9IFxcXG4tLVxuZnMvb2NmczIvTWFrZWZpbGUtMjYtXHRsb2NhbGFsbG9jLm8gXHRcdFxcXG5mcy9vY2ZzMi9NYWtlZmlsZToyNzpcdGxvY2tzLm9cdFx0XHRcXFxuZnMvb2NmczIvTWFrZWZpbGUtMjgtXHRtbWFwLm8gXHRcdFx0XFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU5NAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNoZWNraW5nIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBxdWlja2x5IGNvbmZpcm0gYSBmZXcga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gRmlyc3QsIEkmIzM5O2xsIGp1bXAgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gSSBuZWVkIHRvIHZlcmlmeSB0aGUgc3RhdGUgb2YgdGhyZWUgcGFydGljdWxhciBvcHRpb25zOiBgRklMRV9MT0NLSU5HYCwgYFBST0NfRlNgLCBhbmQgYFBJRF9OU2AuIFRoZXNlIGFyZSBmdW5kYW1lbnRhbCwgYW5kIGl0JiMzOTtzIGFsd2F5cyBhIGdvb2QgaWRlYSB0byBkb3VibGUtY2hlY2sgdGhlaXIgc3RhdHVzIGJlZm9yZSBtb3Zpbmcgb24uIExldCYjMzk7cyBzdGFydCB3aXRoIGBGSUxFX0xPQ0tJTkdgIGFuZCBzZWFyY2ggZm9yIHRoYXQgaW4gdGhlIEtjb25maWcgZmlsZXMuIFRoYXQgd2lsbCBiZSB0aGUgc3RhcnRpbmcgcG9pbnQgdG8gZ2V0IG15IGJlYXJpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRklMRV9MT0NLSU5HJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9MTA4PWNvbmZpZyBFWFBPUlRGU19CTE9DS19PUFNcbi0tXG5mcy9LY29uZmlnLTExMy1cbmZzL0tjb25maWc6MTE0OmNvbmZpZyBGSUxFX0xPQ0tJTkdcbmZzL0tjb25maWctMTE1LVx0Ym9vbCBcJiMzNDtFbmFibGUgUE9TSVggZmlsZSBsb2NraW5nIEFQSVwmIzM0OyBpZiBFWFBFUlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzg1OQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBsZXQmIzM5O3MgemVybyBpbiBvbiBhIHNwZWNpZmljIGFyZWEgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwgY29uZmlndXJhdGlvbiBzeXN0ZW0uIEkmIzM5O20gZ29pbmcgdG8gbmF2aWdhdGUgdG8gdGhlIGBmcy9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTE0LiBUaGF0IGxvY2F0aW9uIGxpa2VseSBob2xkcyBzb21lIGNydWNpYWwgZGVmaW5pdGlvbnMgb3IgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gZmlsZXN5c3RlbSBjb25maWd1cmF0aW9ucy4gSSYjMzk7bSBhbnRpY2lwYXRpbmcgZmluZGluZyBlaXRoZXIgYSByZWxldmFudCBtb2R1bGUmIzM5O3MgS2NvbmZpZyBmcmFnbWVudCBpbmNsdXNpb24sIGEgdG9wLWxldmVsIGNob2ljZSwgb3IgcGVyaGFwcyB0aGUgZGVmaW5pdGlvbiBvZiBhIHNwZWNpZmljIGZpbGVzeXN0ZW0mIzM5O3Mgc2V0dGluZ3MuIFRoZSBjb250ZXh0IG9mIGBmcy9gIHN1Z2dlc3RzIHRoaXMgd2lsbCBiZSByZWxhdGVkIHRvIGZpbGUgc3lzdGVtIGZlYXR1cmVzLCBub3QgZ2VuZXJpYyBrZXJuZWwgb3B0aW9ucy4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHRoaXMgbGlrZWx5IHJlbGF0ZXMgdG8gaG93IHZhcmlvdXMgZmlsZSBzeXN0ZW0gb3B0aW9ucyBsaWtlIFhGUywgZXh0NCwgb3IgZXZlbiBuZXR3b3JrIGZpbGUgc3lzdGVtcyBhcmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyIGR1cmluZyB0aGUga2VybmVsIGJ1aWxkIHByb2Nlc3MsIG9yIGhvdyB0aGVpciBkZXBlbmRlbmNpZXMgYXJlIGhhbmRsZWQuIEkmIzM5O20gcHJlcGFyaW5nIHRvIHNlZSB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyB0aGF0IEkgYWxyZWFkeSBoYXZlIGluIG15IGhlYWQgaW4gYWJzdHJhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTEwOlx0XHRoZWxwXG4gMTExOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGV4cG9ydCBvcGVyYXRpb25zIGZvciBhIGZpbGVzeXN0ZW0gdG8gc3VwcG9ydFxuIDExMjpcdFx0ICBleHRlcm5hbCBibG9jayBJTy5cbiAxMTM6XHRcbiAxMTQ6XHRjb25maWcgRklMRV9MT0NLSU5HXG4gMTE1Olx0XHRib29sIFwmIzM0O0VuYWJsZSBQT1NJWCBmaWxlIGxvY2tpbmcgQVBJXCYjMzQ7IGlmIEVYUEVSVFxuIDExNjpcdFx0ZGVmYXVsdCB5XG4gMTE3Olx0XHRoZWxwXG4gMTE4Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3RhbmRhcmQgZmlsZSBsb2NraW5nIHN1cHBvcnQsIHJlcXVpcmVkXG4gMTE5Olx0XHQgIGZvciBmaWxlc3lzdGVtcyBsaWtlIE5GUyBhbmQgZm9yIHRoZSBmbG9jaygpIHN5c3RlbVxuIDEyMDpcdFx0ICBjYWxsLiBEaXNhYmxpbmcgdGhpcyBvcHRpb24gc2F2ZXMgYWJvdXQgMTFrLlxuIDEyMTpcdFxuIDEyMjpcdHNvdXJjZSBcJiMzNDtmcy9jcnlwdG8vS2NvbmZpZ1wmIzM0O1xuIDEyMzpcdFxuIDEyNDpcdHNvdXJjZSBcJiMzNDtmcy92ZXJpdHkvS2NvbmZpZ1wmIzM0O1xuIDEyNTpcdFxuIDEyNjpcdHNvdXJjZSBcJiMzNDtmcy9ub3RpZnkvS2NvbmZpZ1wmIzM0O1xuIDEyNzpcdFxuIDEyODpcdHNvdXJjZSBcJiMzNDtmcy9xdW90YS9LY29uZmlnXCYjMzQ7XG4gMTI5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNzUKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKT2theSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBjcnVjaWFsIGluIHRoaXMgY29uZmlndXJhdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZG91YmxlLWNoZWNrIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHByb2Nlc3MgbmFtZXNwYWNlcyBhbmQgdGhlIGAvcHJvY2AgZmlsZXN5c3RlbS4gVGhlcmVmb3JlLCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgYW5kIGV4YW1pbmUgYENPTkZJR19QUk9DX0ZTYCBhbmQgYENPTkZJR19QSURfTlNgIOKAkyBJIHdhbnQgdG8gYmUgY2VydGFpbiB0aGUgcmVsZXZhbnQgZmVhdHVyZXMgYXJlIGVuYWJsZWQsIGFuZCBjb3JyZWN0bHkgY29uZmlndXJlZCwgYW5kIHRoYXQgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgY29uZmxpY3RzLiBUaGlzIGFsc28gbWVhbnMgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGBpbml0X3BpZF9uc2AgdG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gaG93IFBJRCBuYW1lc3BhY2VzIGFyZSBpbml0aWFsaXplZCBhbmQgaG93IHRoZXkgYXJlIGhhbmRsZWQgYXQgdGhlIHZlcnkgc3RhcnQgb2YgdGhlIGJvb3QgcHJvY2Vzcy4gRmluYWxseSwgYSBxdWljayBzZWFyY2ggaW4gdGhlIGBmcy9wcm9jL0tjb25maWdgIGFuZCBgaW5pdC9LY29uZmlnYCBmaWxlcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGVzZSBmZWF0dXJlcyBhcmUgY29uZGl0aW9uYWxseSBlbmFibGVkIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMuIFRoaXMgd2lsbCBlbnN1cmUgSSYjMzk7bSBub3Qgb3Zlcmxvb2tpbmcgYW55IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciBwb3RlbnRpYWwgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUElEX05TJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE0NDY9Y29uZmlnIFVTRVJfTlNcbi0tXG5pbml0L0tjb25maWctMTQ1OS1cbmluaXQvS2NvbmZpZzoxNDYwOmNvbmZpZyBQSURfTlNcbmluaXQvS2NvbmZpZy0xNDYxLVx0Ym9vbCBcJiMzNDtQSUQgTmFtZXNwYWNlc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzMyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBQcm9jZnMgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBgL3Byb2NgIGZpbGVzeXN0ZW0uIFRpbWUgdG8gZGlnIGludG8gdGhlIGNvbmZpZ3VyYXRpb24uIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBvYnZpb3VzOiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoZSBwcm9jIGZpbGVzeXN0ZW0uIFNwZWNpZmljYWxseSwgdGhhdCBzaG91bGQgYmUgYGZzL3Byb2MvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gSSYjMzk7bSBhZnRlciwgbW9zdCBsaWtlbHkgbmFtZWQgc29tZXRoaW5nIGxpa2UgYENPTkZJR19QUk9DX0ZTYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhlbHAgdGV4dCBmb3IgdGhhdCBwYXJ0aWN1bGFyIGZlYXR1cmUuIEZyb20gdGhlcmUgSSYjMzk7bGwgc3RhcnQgY2hlY2tpbmcgdGhlIGRldGFpbHMgb2YgdGhlIGRlcGVuZGVuY2llcywgYW5kIHNlZSBpZiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIGFueSBvdGhlciBmaWxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBST0NfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9wcm9jLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9wcm9jL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL3Byb2MvS2NvbmZpZzoyOmNvbmZpZyBQUk9DX0ZTXG5mcy9wcm9jL0tjb25maWctMy1cdGJvb2wgXCYjMzQ7L3Byb2MgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTAxMAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtlcm5lbCBMb2NrIERpc3BsYXkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlc2UgY2hhbmdlcyBpbiBgZnMvbG9ja3MuY2AuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIGRpc3BsYXkgb2YgbG9ja3Mgd2l0aGluIGAvcHJvYy9sb2Nrc2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgT3BlbiBGaWxlIERlc2NyaXB0b3IgKE9GRCkgbG9ja3MgYXJlIGhhbmRsZWQuIEkgc2VlIGEgY29uZGl0aW9uYWwgYmxvY2sgd2l0aGluIGBsb2Nrc19zaG93YCB0aGF0IHNwZWNpZmljYWxseSBhZGRyZXNzZXMgdGhlc2UgT0ZEIGxvY2tzLiBUaGUgY29tbWVudCBpbW1lZGlhdGVseSBkcmF3cyBteSBhdHRlbnRpb246IGl0IG5vdGVzIHRoYXQgT0ZEIGxvY2tzIGFyZSByZXBvcnRlZCB3aXRoIGEgUElEIG9mIC0xLiBUaGlzIG1lYW5zIHRoZSBzdGFuZGFyZCBvd25lciBmaWx0ZXJpbmcgd29uJiMzOTt0IHdvcmssIHNvIHRoZSBjb2RlIGNsZXZlcmx5IHVzZXMgYGZsY19waWRgLCB3aGljaCBob2xkcyB0aGUgb3duZXImIzM5O3MgVGhyZWFkIEdyb3VwIElEIChUR0lEKSBpbnN0ZWFkLgoKVGhlIGNvZGUgdGhlbiBjaGVja3MgaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhbiBPRkQgbG9jayBhbmQgaWYgd2UgYXJlICpub3QqIGluIHRoZSBpbml0aWFsIFBJRCBuYW1lc3BhY2UuIEkgdW5kZXJzdGFuZCB0aGF0IGNvbnRleHQuIEluc2lkZSB0aGUgY29uZGl0aW9uYWwsIHdlIHNlZSBzb21lIGNhcmVmdWwgUkNVIChSZWFkLUNvcHktVXBkYXRlKSB1c2FnZSB0byBzYWZlbHkgZGVyZWZlcmVuY2UgdGhlIGBmbGNfcGlkYC4gSXQmIzM5O3MgZ2V0dGluZyB0aGUgUElEIGZyb20gdGhlIGluaXRpYWwgbmFtZXNwYWNlLCBhbmQgdGhlbiBjaGVja3MgaWYgdGhhdCBwaWQgaXMgdmlzaWJsZSBpbiB0aGUgY3VycmVudCBwcm9jZXNzJiMzOTtzIG5hbWVzcGFjZS4gSWYgdGhlIFBJRCBpcyBub3QgdmlzaWJsZSwgdGhlbiB3ZSYjMzk7bGwgc2tpcCB0aGF0IGVudHJ5LgoKRmluYWxseSwgd2UmIzM5O3ZlIGdvdCB0aGUgYGxvY2tzX3RyYW5zbGF0ZV9waWRgIGZ1bmN0aW9uLCBhbmQgdGhhdCYjMzk7cyB0aGUga2V5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gZG9lcy4gRnJvbSB0aGUgbG9va3Mgb2YgaXQsIHRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IHRoZSBQSUQgZnJvbSB0aGUgbG9jayB0byB3aGF0ZXZlciB0aGUgUElEIG5hbWVzcGFjZSBpcyBuZWVkZWQgZm9yLiBJZiB0aGlzIGNhbGwgcmV0dXJucyB6ZXJvLCBpdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBza2lwcGluZyB0aGF0IGVudHJ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsb2Nrc190cmFuc2xhdGVfcGlkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbG9ja3MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9sb2Nrcy5jPTIzNjU9RVhQT1JUX1NZTUJPTF9HUEwodmZzX3Rlc3RfbG9jayk7XG4tLVxuZnMvbG9ja3MuYy0yMzY3LS8qKlxuZnMvbG9ja3MuYzoyMzY4OiAqIGxvY2tzX3RyYW5zbGF0ZV9waWQgLSB0cmFuc2xhdGUgYSBmaWxlX2xvY2smIzM5O3MgZmxfcGlkIG51bWJlciBpbnRvIGEgbmFtZXNwYWNlXG5mcy9sb2Nrcy5jLTIzNjktICogQGZsOiBUaGUgZmlsZV9sb2NrIHdobyYjMzk7cyBmbF9waWQgc2hvdWxkIGJlIHRyYW5zbGF0ZWRcbi0tXG5mcy9sb2Nrcy5jLTIzNzMtICovXG5mcy9sb2Nrcy5jOjIzNzQ6c3RhdGljIHBpZF90IGxvY2tzX3RyYW5zbGF0ZV9waWQoc3RydWN0IGZpbGVfbG9ja19jb3JlICpmbCwgc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zKVxuZnMvbG9ja3MuYy0yMzc1LXtcbi0tXG5mcy9sb2Nrcy5jPTI0MDE9c3RhdGljIGludCBwb3NpeF9sb2NrX3RvX2Zsb2NrKHN0cnVjdCBmbG9jayAqZmxvY2ssIHN0cnVjdCBmaWxlX2xvY2sgKmZsKVxuZnMvbG9ja3MuYy0yNDAyLXtcbmZzL2xvY2tzLmM6MjQwMzpcdGZsb2NrLVx1MDAzZWxfcGlkID0gbG9ja3NfdHJhbnNsYXRlX3BpZChcdTAwMjZmbC1cdTAwM2VjLCB0YXNrX2FjdGl2ZV9waWRfbnMoY3VycmVudCkpO1xuZnMvbG9ja3MuYy0yNDA0LSNpZiBCSVRTX1BFUl9MT05HID09IDMyXG4tLVxuZnMvbG9ja3MuYz0yNDIzPXN0YXRpYyB2b2lkIHBvc2l4X2xvY2tfdG9fZmxvY2s2NChzdHJ1Y3QgZmxvY2s2NCAqZmxvY2ssIHN0cnVjdCBmaWxlX2xvY2sgKmZsKVxuZnMvbG9ja3MuYy0yNDI0LXtcbmZzL2xvY2tzLmM6MjQyNTpcdGZsb2NrLVx1MDAzZWxfcGlkID0gbG9ja3NfdHJhbnNsYXRlX3BpZChcdTAwMjZmbC1cdTAwM2VjLCB0YXNrX2FjdGl2ZV9waWRfbnMoY3VycmVudCkpO1xuZnMvbG9ja3MuYy0yNDI2LVx0ZmxvY2stXHUwMDNlbF9zdGFydCA9IGZsLVx1MDAzZWZsX3N0YXJ0O1xuLS1cbmZzL2xvY2tzLmM9MjkyMT1zdGF0aWMgdm9pZCBsb2NrX2dldF9zdGF0dXMoc3RydWN0IHNlcV9maWxlICpmLCBzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmZsYyxcbi0tXG5mcy9sb2Nrcy5jLTI5MjktXG5mcy9sb2Nrcy5jOjI5MzA6XHRwaWQgPSBsb2Nrc190cmFuc2xhdGVfcGlkKGZsYywgcHJvY19waWRucyk7XG5mcy9sb2Nrcy5jLTI5MzEtXG4tLVxuZnMvbG9ja3MuYz0zMDE2PXN0YXRpYyBpbnQgbG9ja3Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIHZvaWQgKnYpXG4tLVxuZnMvbG9ja3MuYy0zMDQxLVxuZnMvbG9ja3MuYzozMDQyOlx0aWYgKGxvY2tzX3RyYW5zbGF0ZV9waWQoY3VyLCBwcm9jX3BpZG5zKSA9PSAwKVxuZnMvbG9ja3MuYy0zMDQzLVx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyMzMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBjb25zaWRlcmluZyBJJiMzOTttIGluIHRoZSB0aGljayBvZiB0aGlzOgoKKipEZWVwIERpdmUgaW50byBgbG9ja3NfdHJhbnNsYXRlX3BpZGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgdGhlIGBsb2Nrc190cmFuc2xhdGVfcGlkYCBmdW5jdGlvbiwgcmVzaWRpbmcgaW4gdGhlIGBmcy9sb2Nrcy5jYCBmaWxlLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHBpZWNlIG9mIGNvZGUgaW50ZXJhY3RzIHdpdGggcHJvY2VzcyBJRHMsIGFuZCBJJiMzOTttIGd1ZXNzaW5nIGl0IGxpa2VseSBpbnZvbHZlcyBzb21lIHRyYW5zbGF0aW9uIG9yIG1hcHBpbmcgd2l0aGluIHRoZSBmaWxlIGxvY2tpbmcgc3Vic3lzdGVtLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGluZm9ybWF0aW9uIGlzIGJlaW5nIGV4dHJhY3RlZCBvciBhZGp1c3RlZC4gSXMgaXQgdXNlZCB0byBtYXAgUElEcyBhY3Jvc3MgbmFtZXNwYWNlcywgb3IgZGVhbCB3aXRoIGRpZmZlcmVudCBVSUQvR0lEIG1hcHBpbmcgc2NlbmFyaW9zLCBvciBpcyBzb21ldGhpbmcgZWxzZSBlbnRpcmVseSBnb2luZyBvbj8gSSBrbm93IHRoZSBmaWxlc3lzdGVtIGxvY2tpbmcgaXMgaW5jcmVkaWJseSBudWFuY2VkLCBzbyBpdCBjb3VsZCBiZSBhbnkgbnVtYmVyIG9mIHN1YnRsZXRpZXMuIEkmIzM5O2xsIG5lZWQgdG8gZGlzc2VjdCBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGxhcmdlciBsb2NraW5nIGFyY2hpdGVjdHVyZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGtlZW4gdG8gc2VlIGhvdyBpdCBoYW5kbGVzIGVkZ2UgY2FzZXMgbGlrZSBzaWduYWwgZGVsaXZlcnkgYW5kIHByb2Nlc3MgdGVybWluYXRpb24sIHRob3NlIGFyZSB1c3VhbGx5IHdoZXJlIGxvY2tpbmcgZ2V0cyByZWFsbHkgaW50ZXJlc3RpbmcuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2xvY2tzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzY4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIzNjg6XHQgKiBsb2Nrc190cmFuc2xhdGVfcGlkIC0gdHJhbnNsYXRlIGEgZmlsZV9sb2NrJiMzOTtzIGZsX3BpZCBudW1iZXIgaW50byBhIG5hbWVzcGFjZVxuMjM2OTpcdCAqIEBmbDogVGhlIGZpbGVfbG9jayB3aG8mIzM5O3MgZmxfcGlkIHNob3VsZCBiZSB0cmFuc2xhdGVkXG4yMzcwOlx0ICogQG5zOiBUaGUgbmFtZXNwYWNlIGludG8gd2hpY2ggdGhlIHBpZCBzaG91bGQgYmUgdHJhbnNsYXRlZFxuMjM3MTpcdCAqXG4yMzcyOlx0ICogVXNlZCB0byB0cmFuc2xhdGUgYSBmbF9waWQgaW50byBhIG5hbWVzcGFjZSB2aXJ0dWFsIHBpZCBudW1iZXJcbjIzNzM6XHQgKi9cbjIzNzQ6XHRzdGF0aWMgcGlkX3QgbG9ja3NfdHJhbnNsYXRlX3BpZChzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmZsLCBzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMpXG4yMzc1Olx0e1xuMjM3NjpcdFx0cGlkX3Qgdm5yO1xuMjM3NzpcdFx0c3RydWN0IHBpZCAqcGlkO1xuMjM3ODpcdFxuMjM3OTpcdFx0aWYgKGZsLVx1MDAzZWZsY19mbGFncyBcdTAwMjYgRkxfT0ZETENLKVxuMjM4MDpcdFx0XHRyZXR1cm4gLTE7XG4yMzgxOlx0XG4yMzgyOlx0XHQvKiBSZW1vdGUgbG9ja3MgcmVwb3J0IGEgbmVnYXRpdmUgcGlkIHZhbHVlICovXG4yMzgzOlx0XHRpZiAoZmwtXHUwMDNlZmxjX3BpZCBcdTAwM2M9IDApXG4yMzg0Olx0XHRcdHJldHVybiBmbC1cdTAwM2VmbGNfcGlkO1xuMjM4NTpcdFxuMjM4NjpcdFx0LypcbjIzODc6XHRcdCAqIElmIHRoZSBmbG9jayBvd25lciBwcm9jZXNzIGlzIGRlYWQgYW5kIGl0cyBwaWQgaGFzIGJlZW4gYWxyZWFkeVxuMjM4ODpcdFx0ICogZnJlZWQsIHRoZSB0cmFuc2xhdGlvbiBiZWxvdyB3b24mIzM5O3Qgd29yaywgYnV0IHdlIHN0aWxsIHdhbnQgdG8gc2hvd1xuMjM4OTpcdFx0ICogZmxvY2sgb3duZXIgcGlkIG51bWJlciBpbiBpbml0IHBpZG5zLlxuMjM5MDpcdFx0ICovXG4yMzkxOlx0XHRpZiAobnMgPT0gXHUwMDI2aW5pdF9waWRfbnMpXG4yMzkyOlx0XHRcdHJldHVybiAocGlkX3QpIGZsLVx1MDAzZWZsY19waWQ7XG4yMzkzOlx0XG4yMzk0Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4yMzk1Olx0XHRwaWQgPSBmaW5kX3BpZF9ucyhmbC1cdTAwM2VmbGNfcGlkLCBcdTAwMjZpbml0X3BpZF9ucyk7XG4yMzk2Olx0XHR2bnIgPSBwaWRfbnJfbnMocGlkLCBucyk7XG4yMzk3Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjIzOTg6XHRcdHJldHVybiB2bnI7XG4yMzk5Olx0fVxuMjQwMDpcdFxuMjQwMTpcdHN0YXRpYyBpbnQgcG9zaXhfbG9ja190b19mbG9jayhzdHJ1Y3QgZmxvY2sgKmZsb2NrLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbClcbjI0MDI6XHR7XG4yNDAzOlx0XHRmbG9jay1cdTAwM2VsX3BpZCA9IGxvY2tzX3RyYW5zbGF0ZV9waWQoXHUwMDI2ZmwtXHUwMDNlYywgdGFza19hY3RpdmVfcGlkX25zKGN1cnJlbnQpKTtcbjI0MDQ6XHQjaWYgQklUU19QRVJfTE9ORyA9PSAzMlxuMjQwNTpcdFx0LypcbjI0MDY6XHRcdCAqIE1ha2Ugc3VyZSB3ZSBjYW4gcmVwcmVzZW50IHRoZSBwb3NpeCBsb2NrIHZpYVxuMjQwNzpcdFx0ICogbGVnYWN5IDMyYml0IGZsb2NrLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTE1MwoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDgxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBgL3Byb2MvbG9ja3NgIEZpeDogV29ydGggRnV6emluZz8qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoaW5raW5nIHRocm91Z2ggd2hhdCBpdCBkb2VzLiBJdCBsb29rcyBsaWtlIHdoZW4gYC9wcm9jL2xvY2tzYCBpcyBiZWluZyBhY2Nlc3NlZCwgc3BlY2lmaWNhbGx5IHdoZW4gYGxvY2tzX3Nob3dgIGlzIGNhbGxlZCwgdGhlcmUmIzM5O3MgYmVlbiBhIHByb2JsZW0gd2l0aCBob3cgT0ZEIGxvY2tzIChvcGVuIGZpbGUgZGVzY3JpcHRpb24gbG9ja3MpIHdlcmUgYmVpbmcgaGFuZGxlZCBhY3Jvc3MgUElEIG5hbWVzcGFjZXMuIFByZXZpb3VzbHksIHRoZSBgbG9ja3NfdHJhbnNsYXRlX3BpZGAgZnVuY3Rpb24gd2FzIHJldHVybmluZyAtMSBmb3IgdGhlc2UgT0ZEIGxvY2tzLiBUaGlzIG1lYW50IHRoZSBjaGVjayBgbG9ja3NfdHJhbnNsYXRlX3BpZChjdXIsIHByb2NfcGlkbnMpID09IDBgIHdhcyBmYWlsaW5nLCBhbmQgd2Ugd2VyZW4mIzM5O3QgZmlsdGVyaW5nIG91dCBPRkQgbG9ja3MgZnJvbSBkaWZmZXJlbnQgUElEIG5hbWVzcGFjZXMgY29ycmVjdGx5LiBFc3NlbnRpYWxseSwgYC9wcm9jL2xvY2tzYCBpbiBhIG5vbi1pbml0IFBJRCBuYW1lc3BhY2Ugd2FzIGRpc3BsYXlpbmcgT0ZEIGxvY2tzIGZyb20gKmFueSogUElEIG5hbWVzcGFjZSwgZXZlbiBpZiB0aGUgcHJvY2VzcyB0aGF0IGNyZWF0ZWQgdGhlbSB3YXNuJiMzOTt0IGFjdHVhbGx5IHZpc2libGUgaW4gdGhhdCBuYW1lc3BhY2UuIFRoaXMgcGF0Y2ggYWRkcmVzc2VzIHRoaXMgYnkgY2hlY2tpbmcgaWYgdGhlIG93bmVyJiMzOTtzIHRnaWQgKGBjdXItJmd0O2ZsY19waWRgKSBpcyBtYXBwZWQgaW4gdGhlIGN1cnJlbnQgUElEIG5hbWVzcGFjZSAoYHByb2NfcGlkbnNgKS4gSWYgaXQmIzM5O3Mgbm90IHZpc2libGUsIHdlIHNraXAgZGlzcGxheWluZyB0aGUgbG9jayBpbiBgL3Byb2MvbG9ja3NgLgoKU28sIGlzIHRoaXMgYSByZWFsLXdvcmxkLCBmdW5jdGlvbmFsIGNoYW5nZT8gWWVzISBJdCYjMzk7cyByZWFjaGFibGUgd2hlbiByZWFkaW5nIGAvcHJvYy9sb2Nrc2Agd2l0aCBmaWxlIGxvY2tzLCBzcGVjaWZpY2FsbHkgT0ZEIGxvY2tzLCBpbnNpZGUgYSBQSUQgbmFtZXNwYWNlLiBJdCBhZmZlY3RzIGNvcmUga2VybmVsIGxvZ2ljLCBzcGVjaWZpY2FsbHkgdGhlIGBmcy9sb2Nrcy5jYCBmaWxlIGFuZCBob3cgYC9wcm9jL2xvY2tzYCBoYW5kbGVzIGZpbHRlcmluZyBmb3IgT0ZEIGxvY2tzIGluIG5vbi1pbml0IG5hbWVzcGFjZXMuCgpUaGUgYmlnIHF1ZXN0aW9uOiBJcyB0aGlzIHNvbWV0aGluZyB3ZSBzaG91bGQgY29uc2lkZXIgZnV6emluZz8gTGV0JiMzOTtzIGNoZWNrIHRoZSBndWlkZWxpbmVzLiBJdCAqZGVmaW5pdGVseSogaXNuJiMzOTt0IGEgZG9jdW1lbnRhdGlvbiBjaGFuZ2UsIGNvbW1lbnQsIG9yIGRlY29yYXRpdmUgbG9nZ2luZy4gVGhpcyAqbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljKiBpbiBgZnMvbG9ja3MuY2AgaW4gaG93IGAvcHJvYy9sb2Nrc2AgZGlzcGxheXMuIFNvLCB0aGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBrZXJuZWwgbG9naWMuIEl0IGFmZmVjdHMgaG93IGAvcHJvYy9sb2Nrc2AgZmlsdGVycyBsb2NrcyBmb3Igbm9uLWluaXQgcGlkIG5hbWVzcGFjZXMgd2hlbiBPRkQgbG9ja3MgZXhpc3QuIFllcy4gQmFzZWQgb24gdGhpcywgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyB3b3J0aCBmdXp6aW5nLgoKTm93LCBhYm91dCB0aGUgZnV6emluZyBpdHNlbGY6IFNob3VsZCB3ZSBpZGVudGlmeSByZWxldmFudCBzeW1ib2xzPyBUaGUgZ3VpZGVsaW5lcyBzdWdnZXN0IGZvY3VzaW5nIG9uIHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgYW5kIGF2b2lkaW5nIGdlbmVyaWMgaG90cGF0aHMuIFdlIHNob3VsZCBwcmlvcml0aXplIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gTGV0JiMzOTtzIHRoaW5rIGFib3V0IHRoaXM6IGBsb2Nrc19zaG93YCBpcywgdW5mb3J0dW5hdGVseSwgc3RhdGljLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSYjMzk7cyBhIG5vbi1zdGF0aWMgZW50cnlwb2ludCBvciBzb21lIGBzZXFfb3BzYCBpbnZvbHZlZC4gSSBuZWVkIHRvIGV4YW1pbmUgYGZzL2xvY2tzLmNgIG1vcmUgY2xvc2VseSBhbmQgdGhpbmsgYWJvdXQgdGhlIHByb2Nlc3Mgb2YgYWNjZXNzaW5nIGAvcHJvYy9sb2Nrc2AgYW5kIHNldHRpbmcgbG9ja3MgaW4gdGhlIGZpcnN0IHBsYWNlLiBJIHNob3VsZCBsb29rIGZvciBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiBgZnMvbG9ja3MuY2Agb3IgZnVuY3Rpb25zIGNhbGxlZCB3aGVuIGAvcHJvYy9sb2Nrc2AgaXMgYWNjZXNzZWQgb3IgbG9ja3MgYXJlIHNldC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGV4YW1pbmluZyBhbGwgcmVsZXZhbnQgZW50cnlwb2ludHMgZm9yIHRoZSBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWl9dW2EtekEtWjAtOV9dKi4qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbG9ja3MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTk1IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5mcy9sb2Nrcy5jLTcxLVxuZnMvbG9ja3MuYzo3MjpzdGF0aWMgc3RydWN0IGZpbGVfbG9jayAqZmlsZV9sb2NrKHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqZmxjKVxuZnMvbG9ja3MuYy03My17XG4tLVxuZnMvbG9ja3MuYy03Ni1cbmZzL2xvY2tzLmM6Nzc6c3RhdGljIHN0cnVjdCBmaWxlX2xlYXNlICpmaWxlX2xlYXNlKHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqZmxjKVxuZnMvbG9ja3MuYy03OC17XG4tLVxuZnMvbG9ja3MuYy04MS1cbmZzL2xvY2tzLmM6ODI6c3RhdGljIGJvb2wgbGVhc2VfYnJlYWtpbmcoc3RydWN0IGZpbGVfbGVhc2UgKmZsKVxuZnMvbG9ja3MuYy04My17XG4tLVxuZnMvbG9ja3MuYy04Ni1cbmZzL2xvY2tzLmM6ODc6c3RhdGljIGludCB0YXJnZXRfbGVhc2V0eXBlKHN0cnVjdCBmaWxlX2xlYXNlICpmbClcbmZzL2xvY2tzLmMtODgte1xuLS1cbmZzL2xvY2tzLmM9MTAwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGxvY2tzX3N5c2N0bHNbXSA9IHtcbi0tXG5mcy9sb2Nrcy5jLTExOC1cbmZzL2xvY2tzLmM6MTE5OnN0YXRpYyBpbnQgX19pbml0IGluaXRfZnNfbG9ja3Nfc3lzY3Rscyh2b2lkKVxuZnMvbG9ja3MuYy0xMjAte1xuLS1cbmZzL2xvY2tzLmMtMTIzLX1cbmZzL2xvY2tzLmM6MTI0OmVhcmx5X2luaXRjYWxsKGluaXRfZnNfbG9ja3Nfc3lzY3Rscyk7XG5mcy9sb2Nrcy5jLTEyNS0jZW5kaWYgLyogQ09ORklHX1NZU0NUTCAqL1xuLS1cbmZzL2xvY2tzLmM9MTM1PXN0cnVjdCBmaWxlX2xvY2tfbGlzdF9zdHJ1Y3Qge1xuLS1cbmZzL2xvY2tzLmMtMTM4LX07XG5mcy9sb2Nrcy5jOjEzOTpzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGZpbGVfbG9ja19saXN0X3N0cnVjdCwgZmlsZV9sb2NrX2xpc3QpO1xuZnMvbG9ja3MuYzoxNDA6REVGSU5FX1NUQVRJQ19QRVJDUFVfUldTRU0oZmlsZV9yd3NlbSk7XG5mcy9sb2Nrcy5jLTE0MS1cbi0tXG5mcy9sb2Nrcy5jLTE1NC0jZGVmaW5lIEJMT0NLRURfSEFTSF9CSVRTXHQ3XG5mcy9sb2Nrcy5jOjE1NTpzdGF0aWMgREVGSU5FX0hBU0hUQUJMRShibG9ja2VkX2hhc2gsIEJMT0NLRURfSEFTSF9CSVRTKTtcbmZzL2xvY2tzLmMtMTU2LVxuLS1cbmZzL2xvY2tzLmMtMTY5LSAqL1xuZnMvbG9ja3MuYzoxNzA6c3RhdGljIERFRklORV9TUElOTE9DSyhibG9ja2VkX2xvY2tfbG9jayk7XG5mcy9sb2Nrcy5jLTE3MS1cbi0tXG5mcy9sb2Nrcy5jPTE3Nj1zdGF0aWMgc3RydWN0IGZpbGVfbG9ja19jb250ZXh0ICpcbmZzL2xvY2tzLmM6MTc3OmxvY2tzX2dldF9sb2NrX2NvbnRleHQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUpXG5mcy9sb2Nrcy5jLTE3OC17XG4tLVxuZnMvbG9ja3MuYz0yMTg9c3RhdGljIHZvaWRcbmZzL2xvY2tzLmM6MjE5OmxvY2tzX2R1bXBfY3R4X2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgY2hhciAqbGlzdF90eXBlKVxuZnMvbG9ja3MuYy0yMjAte1xuLS1cbmZzL2xvY2tzLmM9MjI5PXN0YXRpYyB2b2lkXG5mcy9sb2Nrcy5jOjIzMDpsb2Nrc19jaGVja19jdHhfbGlzdHMoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2xvY2tzLmMtMjMxLXtcbi0tXG5mcy9sb2Nrcy5jPTI0Nj1zdGF0aWMgdm9pZFxuZnMvbG9ja3MuYzoyNDc6bG9ja3NfY2hlY2tfY3R4X2ZpbGVfbGlzdChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgY2hhciAqbGlzdF90eXBlKVxuZnMvbG9ja3MuYy0yNDgte1xuLS1cbmZzL2xvY2tzLmM9MjYyPXZvaWRcbmZzL2xvY2tzLmM6MjYzOmxvY2tzX2ZyZWVfbG9ja19jb250ZXh0KHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9sb2Nrcy5jLTI2NC17XG4tLVxuZnMvbG9ja3MuYy0yNzItXG5mcy9sb2Nrcy5jOjI3MzpzdGF0aWMgdm9pZCBsb2Nrc19pbml0X2xvY2tfaGVhZHMoc3RydWN0IGZpbGVfbG9ja19jb3JlICpmbGMpXG5mcy9sb2Nrcy5jLTI3NC17XG4tLVxuZnMvbG9ja3MuYy0yODItLyogQWxsb2NhdGUgYW4gZW1wdHkgbG9jayBzdHJ1Y3R1cmUuICovXG5mcy9sb2Nrcy5jOjI4MzpzdHJ1Y3QgZmlsZV9sb2NrICpsb2Nrc19hbGxvY19sb2NrKHZvaWQpXG5mcy9sb2Nrcy5jLTI4NC17XG4tLVxuZnMvbG9ja3MuYy0yOTEtfVxuZnMvbG9ja3MuYzoyOTI6RVhQT1JUX1NZTUJPTF9HUEwobG9ja3NfYWxsb2NfbG9jayk7XG5mcy9sb2Nrcy5jLTI5My1cbmZzL2xvY2tzLmMtMjk0LS8qIEFsbG9jYXRlIGFuIGVtcHR5IGxvY2sgc3RydWN0dXJlLiAqL1xuZnMvbG9ja3MuYzoyOTU6c3RydWN0IGZpbGVfbGVhc2UgKmxvY2tzX2FsbG9jX2xlYXNlKHZvaWQpXG5mcy9sb2Nrcy5jLTI5Ni17XG4tLVxuZnMvbG9ja3MuYy0zMDMtfVxuZnMvbG9ja3MuYzozMDQ6RVhQT1JUX1NZTUJPTF9HUEwobG9ja3NfYWxsb2NfbGVhc2UpO1xuZnMvbG9ja3MuYy0zMDUtXG5mcy9sb2Nrcy5jOjMwNjp2b2lkIGxvY2tzX3JlbGVhc2VfcHJpdmF0ZShzdHJ1Y3QgZmlsZV9sb2NrICpmbClcbmZzL2xvY2tzLmMtMzA3LXtcbi0tXG5mcy9sb2Nrcy5jLTMyOS19XG5mcy9sb2Nrcy5jOjMzMDpFWFBPUlRfU1lNQk9MX0dQTChsb2Nrc19yZWxlYXNlX3ByaXZhdGUpO1xuZnMvbG9ja3MuYy0zMzEtXG4tLVxuZnMvbG9ja3MuYy0zNDAtICovXG5mcy9sb2Nrcy5jOjM0MTpib29sIGxvY2tzX293bmVyX2hhc19ibG9ja2VycyhzdHJ1Y3QgZmlsZV9sb2NrX2NvbnRleHQgKmZsY3R4LCBmbF9vd25lcl90IG93bmVyKVxuZnMvbG9ja3MuYy0zNDIte1xuLS1cbmZzL2xvY2tzLmMtMzU2LX1cbmZzL2xvY2tzLmM6MzU3OkVYUE9SVF9TWU1CT0xfR1BMKGxvY2tzX293bmVyX2hhc19ibG9ja2Vycyk7XG5mcy9sb2Nrcy5jLTM1OC1cbmZzL2xvY2tzLmMtMzU5LS8qIEZyZWUgYSBsb2NrIHdoaWNoIGlzIG5vdCBpbiB1c2UuICovXG5mcy9sb2Nrcy5jOjM2MDp2b2lkIGxvY2tzX2ZyZWVfbG9jayhzdHJ1Y3QgZmlsZV9sb2NrICpmbClcbmZzL2xvY2tzLmMtMzYxLXtcbi0tXG5mcy9sb2Nrcy5jLTM2NC19XG5mcy9sb2Nrcy5jOjM2NTpFWFBPUlRfU1lNQk9MKGxvY2tzX2ZyZWVfbG9jayk7XG5mcy9sb2Nrcy5jLTM2Ni1cbmZzL2xvY2tzLmMtMzY3LS8qIEZyZWUgYSBsZWFzZSB3aGljaCBpcyBub3QgaW4gdXNlLiAqL1xuZnMvbG9ja3MuYzozNjg6dm9pZCBsb2Nrc19mcmVlX2xlYXNlKHN0cnVjdCBmaWxlX2xlYXNlICpmbClcbmZzL2xvY2tzLmMtMzY5LXtcbi0tXG5mcy9sb2Nrcy5jLTM3MS19XG5mcy9sb2Nrcy5jOjM3MjpFWFBPUlRfU1lNQk9MKGxvY2tzX2ZyZWVfbGVhc2UpO1xuZnMvbG9ja3MuYy0zNzMtXG5mcy9sb2Nrcy5jPTM3ND1zdGF0aWMgdm9pZFxuZnMvbG9ja3MuYzozNzU6bG9ja3NfZGlzcG9zZV9saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmRpc3Bvc2UpXG5mcy9sb2Nrcy5jLTM3Ni17XG4tLVxuZnMvbG9ja3MuYz0zODY9c3RhdGljIHZvaWRcbmZzL2xvY2tzLmM6Mzg3OmxlYXNlX2Rpc3Bvc2VfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpkaXNwb3NlKVxuZnMvbG9ja3MuYy0zODgte1xuLS1cbmZzL2xvY2tzLmMtMzk3LVxuZnMvbG9ja3MuYzozOTg6dm9pZCBsb2Nrc19pbml0X2xvY2soc3RydWN0IGZpbGVfbG9jayAqZmwpXG5mcy9sb2Nrcy5jLTM5OS17XG4tLVxuZnMvbG9ja3MuYy00MDItfVxuZnMvbG9ja3MuYzo0MDM6RVhQT1JUX1NZTUJPTChsb2Nrc19pbml0X2xvY2spO1xuZnMvbG9ja3MuYy00MDQtXG5mcy9sb2Nrcy5jOjQwNTp2b2lkIGxvY2tzX2luaXRfbGVhc2Uoc3RydWN0IGZpbGVfbGVhc2UgKmZsKVxuZnMvbG9ja3MuYy00MDYte1xuLS1cbmZzL2xvY2tzLmMtNDA5LX1cbmZzL2xvY2tzLmM6NDEwOkVYUE9SVF9TWU1CT0wobG9ja3NfaW5pdF9sZWFzZSk7XG5mcy9sb2Nrcy5jLTQxMS1cbi0tXG5mcy9sb2Nrcy5jLTQxNC0gKi9cbmZzL2xvY2tzLmM6NDE1OnZvaWQgbG9ja3NfY29weV9jb25mbG9jayhzdHJ1Y3QgZmlsZV9sb2NrICpuZXcsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKVxuZnMvbG9ja3MuYy00MTYte1xuLS1cbmZzL2xvY2tzLmMtNDMxLX1cbmZzL2xvY2tzLmM6NDMyOkVYUE9SVF9TWU1CT0wobG9ja3NfY29weV9jb25mbG9jayk7XG5mcy9sb2Nrcy5jLTQzMy1cbmZzL2xvY2tzLmM6NDM0OnZvaWQgbG9ja3NfY29weV9sb2NrKHN0cnVjdCBmaWxlX2xvY2sgKm5ldywgc3RydWN0IGZpbGVfbG9jayAqZmwpXG5mcy9sb2Nrcy5jLTQzNS17XG4tLVxuZnMvbG9ja3MuYy00NDgtfVxuZnMvbG9ja3MuYzo0NDk6RVhQT1JUX1NZTUJPTChsb2Nrc19jb3B5X2xvY2spO1xuZnMvbG9ja3MuYy00NTAtXG5mcy9sb2Nrcy5jOjQ1MTpzdGF0aWMgdm9pZCBsb2Nrc19tb3ZlX2Jsb2NrcyhzdHJ1Y3QgZmlsZV9sb2NrICpuZXcsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKVxuZnMvbG9ja3MuYy00NTIte1xuLS1cbmZzL2xvY2tzLmMtNDcwLVxuZnMvbG9ja3MuYzo0NzE6c3RhdGljIGlubGluZSBpbnQgZmxvY2tfdHJhbnNsYXRlX2NtZChpbnQgY21kKSB7XG5mcy9sb2Nrcy5jLTQ3Mi1cdHN3aXRjaCAoY21kKSB7XG4tLVxuZnMvbG9ja3MuYy00ODMtLyogRmlsbCBpbiBhIGZpbGVfbG9jayBzdHJ1Y3R1cmUgd2l0aCBhbiBhcHByb3ByaWF0ZSBGTE9DSyBsb2NrLiAqL1xuZnMvbG9ja3MuYzo0ODQ6c3RhdGljIHZvaWQgZmxvY2tfbWFrZV9sb2NrKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCwgaW50IHR5cGUpXG5mcy9sb2Nrcy5jLTQ4NS17XG4tLVxuZnMvbG9ja3MuYy00OTUtXG5mcy9sb2Nrcy5jOjQ5NjpzdGF0aWMgaW50IGFzc2lnbl90eXBlKHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqZmxjLCBpbnQgdHlwZSlcbmZzL2xvY2tzLmMtNDk3LXtcbi0tXG5mcy9sb2Nrcy5jLTUwOS1cbmZzL2xvY2tzLmM6NTEwOnN0YXRpYyBpbnQgZmxvY2s2NF90b19wb3NpeF9sb2NrKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCxcbmZzL2xvY2tzLmMtNTExLVx0XHRcdFx0IHN0cnVjdCBmbG9jazY0ICpsKVxuLS1cbmZzL2xvY2tzLmMtNTU5LSAqL1xuZnMvbG9ja3MuYzo1NjA6c3RhdGljIGludCBmbG9ja190b19wb3NpeF9sb2NrKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCxcbmZzL2xvY2tzLmMtNTYxLVx0XHRcdCAgICAgICBzdHJ1Y3QgZmxvY2sgKmwpXG4tLVxuZnMvbG9ja3MuYz01NzQ9c3RhdGljIGJvb2xcbmZzL2xvY2tzLmM6NTc1OmxlYXNlX2JyZWFrX2NhbGxiYWNrKHN0cnVjdCBmaWxlX2xlYXNlICpmbClcbmZzL2xvY2tzLmMtNTc2LXtcbi0tXG5mcy9sb2Nrcy5jPTU4MT1zdGF0aWMgdm9pZFxuZnMvbG9ja3MuYzo1ODI6bGVhc2Vfc2V0dXAoc3RydWN0IGZpbGVfbGVhc2UgKmZsLCB2b2lkICoqcHJpdilcbmZzL2xvY2tzLmMtNTgzLXtcbi0tXG5mcy9sb2Nrcy5jPTYwOD1zdGF0aWMgaW50XG5mcy9sb2Nrcy5jOjYwOTpsZWFzZV9vcGVuX2NvbmZsaWN0KHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBpbnQgYXJnKVxuZnMvbG9ja3MuYy02MTAte1xuLS1cbmZzL2xvY2tzLmM9NjM3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbGVhc2VfbWFuYWdlcl9vcGVyYXRpb25zIGxlYXNlX21hbmFnZXJfb3BzID0ge1xuLS1cbmZzL2xvY2tzLmMtNjQ2LSAqL1xuZnMvbG9ja3MuYzo2NDc6c3RhdGljIGludCBsZWFzZV9pbml0KHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIGludCB0eXBlLCBzdHJ1Y3QgZmlsZV9sZWFzZSAqZmwpXG5mcy9sb2Nrcy5jLTY0OC17XG4tLVxuZnMvbG9ja3MuYy02NjEtLyogQWxsb2NhdGUgYSBmaWxlX2xvY2sgaW5pdGlhbGlzZWQgdG8gdGhpcyB0eXBlIG9mIGxlYXNlICovXG5mcy9sb2Nrcy5jOjY2MjpzdGF0aWMgc3RydWN0IGZpbGVfbGVhc2UgKmxlYXNlX2FsbG9jKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIGludCB0eXBlKVxuZnMvbG9ja3MuYy02NjMte1xuLS1cbmZzL2xvY2tzLmMtNjc5LSAqL1xuZnMvbG9ja3MuYzo2ODA6c3RhdGljIGlubGluZSBpbnQgbG9ja3Nfb3ZlcmxhcChzdHJ1Y3QgZmlsZV9sb2NrICpmbDEsIHN0cnVjdCBmaWxlX2xvY2sgKmZsMilcbmZzL2xvY2tzLmMtNjgxLXtcbi0tXG5mcy9sb2Nrcy5jLTY4OC0gKi9cbmZzL2xvY2tzLmM6Njg5OnN0YXRpYyBpbnQgcG9zaXhfc2FtZV9vd25lcihzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmZsMSwgc3RydWN0IGZpbGVfbG9ja19jb3JlICpmbDIpXG5mcy9sb2Nrcy5jLTY5MC17XG4tLVxuZnMvbG9ja3MuYy02OTQtLyogTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgZmxjX2xvY2sgaGVsZCEgKi9cbmZzL2xvY2tzLmM6Njk1OnN0YXRpYyB2b2lkIGxvY2tzX2luc2VydF9nbG9iYWxfbG9ja3Moc3RydWN0IGZpbGVfbG9ja19jb3JlICpmbGMpXG5mcy9sb2Nrcy5jLTY5Ni17XG4tLVxuZnMvbG9ja3MuYy03MDctLyogTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgZmxjX2xvY2sgaGVsZCEgKi9cbmZzL2xvY2tzLmM6NzA4OnN0YXRpYyB2b2lkIGxvY2tzX2RlbGV0ZV9nbG9iYWxfbG9ja3Moc3RydWN0IGZpbGVfbG9ja19jb3JlICpmbGMpXG5mcy9sb2Nrcy5jLTcwOS17XG4tLVxuZnMvbG9ja3MuYz03Mjg9c3RhdGljIHVuc2lnbmVkIGxvbmdcbmZzL2xvY2tzLmM6NzI5OnBvc2l4X293bmVyX2tleShzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmZsYylcbmZzL2xvY2tzLmMtNzMwLXtcbi0tXG5mcy9sb2Nrcy5jLTczMy1cbmZzL2xvY2tzLmM6NzM0OnN0YXRpYyB2b2lkIGxvY2tzX2luc2VydF9nbG9iYWxfYmxvY2tlZChzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKndhaXRlcilcbmZzL2xvY2tzLmMtNzM1LXtcbi0tXG5mcy9sb2Nrcy5jLTc0MC1cbmZzL2xvY2tzLmM6NzQxOnN0YXRpYyB2b2lkIGxvY2tzX2RlbGV0ZV9nbG9iYWxfYmxvY2tlZChzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKndhaXRlcilcbmZzL2xvY2tzLmMtNzQyLXtcbi0tXG5mcy9sb2Nrcy5jLTc1Mi0gKi9cbmZzL2xvY2tzLmM6NzUzOnN0YXRpYyB2b2lkIF9fbG9ja3NfdW5saW5rX2Jsb2NrKHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqd2FpdGVyKVxuZnMvbG9ja3MuYy03NTQte1xuLS1cbmZzL2xvY2tzLmMtNzU4LVxuZnMvbG9ja3MuYzo3NTk6c3RhdGljIHZvaWQgX19sb2Nrc193YWtlX3VwX2Jsb2NrcyhzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmJsb2NrZXIpXG5mcy9sb2Nrcy5jLTc2MC17XG4tLVxuZnMvbG9ja3MuYy03ODQtXG5mcy9sb2Nrcy5jOjc4NTpzdGF0aWMgaW50IF9fbG9ja3NfZGVsZXRlX2Jsb2NrKHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqd2FpdGVyKVxuZnMvbG9ja3MuYy03ODYte1xuLS1cbmZzL2xvY2tzLmMtODM0LSAqL1xuZnMvbG9ja3MuYzo4MzU6aW50IGxvY2tzX2RlbGV0ZV9ibG9jayhzdHJ1Y3QgZmlsZV9sb2NrICp3YWl0ZXIpXG5mcy9sb2Nrcy5jLTgzNi17XG4tLVxuZnMvbG9ja3MuYy04MzgtfVxuZnMvbG9ja3MuYzo4Mzk6RVhQT1JUX1NZTUJPTChsb2Nrc19kZWxldGVfYmxvY2spO1xuZnMvbG9ja3MuYy04NDAtXG4tLVxuZnMvbG9ja3MuYy04NTUtICovXG5mcy9sb2Nrcy5jOjg1NjpzdGF0aWMgdm9pZCBfX2xvY2tzX2luc2VydF9ibG9jayhzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmJsb2NrZXIsXG5mcy9sb2Nrcy5jLTg1Ny1cdFx0XHRcdCBzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKndhaXRlcixcbi0tXG5mcy9sb2Nrcy5jLTg4NC0vKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGZsY19sb2NrIGhlbGQuICovXG5mcy9sb2Nrcy5jOjg4NTpzdGF0aWMgdm9pZCBsb2Nrc19pbnNlcnRfYmxvY2soc3RydWN0IGZpbGVfbG9ja19jb3JlICpibG9ja2VyLFxuZnMvbG9ja3MuYy04ODYtXHRcdFx0ICAgICAgIHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqd2FpdGVyLFxuLS1cbmZzL2xvY2tzLmMtODk5LSAqL1xuZnMvbG9ja3MuYzo5MDA6c3RhdGljIHZvaWQgbG9ja3Nfd2FrZV91cF9ibG9ja3Moc3RydWN0IGZpbGVfbG9ja19jb3JlICpibG9ja2VyKVxuZnMvbG9ja3MuYy05MDEte1xuLS1cbmZzL2xvY2tzLmM9OTE3PXN0YXRpYyB2b2lkXG5mcy9sb2Nrcy5jOjkxODpsb2Nrc19pbnNlcnRfbG9ja19jdHgoc3RydWN0IGZpbGVfbG9ja19jb3JlICpmbCwgc3RydWN0IGxpc3RfaGVhZCAqYmVmb3JlKVxuZnMvbG9ja3MuYy05MTkte1xuLS1cbmZzL2xvY2tzLmM9OTI0PXN0YXRpYyB2b2lkXG5mcy9sb2Nrcy5jOjkyNTpsb2Nrc191bmxpbmtfbG9ja19jdHgoc3RydWN0IGZpbGVfbG9ja19jb3JlICpmbClcbmZzL2xvY2tzLmMtOTI2LXtcbi0tXG5mcy9sb2Nrcy5jPTkzMj1zdGF0aWMgdm9pZFxuZnMvbG9ja3MuYzo5MzM6bG9ja3NfZGVsZXRlX2xvY2tfY3R4KHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqZmwsIHN0cnVjdCBsaXN0X2hlYWQgKmRpc3Bvc2UpXG5mcy9sb2Nrcy5jLTkzNC17XG4tLVxuZnMvbG9ja3MuYy05NDQtICovXG5mcy9sb2Nrcy5jOjk0NTpzdGF0aWMgYm9vbCBsb2Nrc19jb25mbGljdChzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmNhbGxlcl9mbGMsXG5mcy9sb2Nrcy5jLTk0Ni1cdFx0XHQgICBzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKnN5c19mbGMpXG4tLVxuZnMvbG9ja3MuYy05NTctICovXG5mcy9sb2Nrcy5jOjk1ODpzdGF0aWMgYm9vbCBwb3NpeF9sb2Nrc19jb25mbGljdChzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmNhbGxlcl9mbGMsXG5mcy9sb2Nrcy5jLTk1OS1cdFx0XHRcdCBzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKnN5c19mbGMpXG4tLVxuZnMvbG9ja3MuYy05NzktICovXG5mcy9sb2Nrcy5jOjk4MDpzdGF0aWMgYm9vbCBwb3NpeF90ZXN0X2xvY2tzX2NvbmZsaWN0KHN0cnVjdCBmaWxlX2xvY2sgKmNhbGxlcl9mbCxcbmZzL2xvY2tzLmMtOTgxLVx0XHRcdFx0ICAgICAgc3RydWN0IGZpbGVfbG9jayAqc3lzX2ZsKVxuLS1cbmZzL2xvY2tzLmMtOTk3LSAqL1xuZnMvbG9ja3MuYzo5OTg6c3RhdGljIGJvb2wgZmxvY2tfbG9ja3NfY29uZmxpY3Qoc3RydWN0IGZpbGVfbG9ja19jb3JlICpjYWxsZXJfZmxjLFxuZnMvbG9ja3MuYy05OTktXHRcdFx0XHQgc3RydWN0IGZpbGVfbG9ja19jb3JlICpzeXNfZmxjKVxuLS1cbmZzL2xvY2tzLmM9MTAxMD12b2lkXG5mcy9sb2Nrcy5jOjEwMTE6cG9zaXhfdGVzdF9sb2NrKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbClcbmZzL2xvY2tzLmMtMTAxMi17XG4tLVxuZnMvbG9ja3MuYy0xMDQ3LX1cbmZzL2xvY2tzLmM6MTA0ODpFWFBPUlRfU1lNQk9MKHBvc2l4X3Rlc3RfbG9jayk7XG5mcy9sb2Nrcy5jLTEwNDktXG4tLVxuZnMvbG9ja3MuYy0xMDg1LS8qIEZpbmQgYSBsb2NrIHRoYXQgdGhlIG93bmVyIG9mIHRoZSBnaXZlbiBAYmxvY2tlciBpcyBibG9ja2luZyBvbi4gKi9cbmZzL2xvY2tzLmM6MTA4NjpzdGF0aWMgc3RydWN0IGZpbGVfbG9ja19jb3JlICp3aGF0X293bmVyX2lzX3dhaXRpbmdfZm9yKHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqYmxvY2tlcilcbmZzL2xvY2tzLmMtMTA4Ny17XG4tLVxuZnMvbG9ja3MuYy0xMTAwLS8qIE11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGJsb2NrZWRfbG9ja19sb2NrIGhlbGQhICovXG5mcy9sb2Nrcy5jOjExMDE6c3RhdGljIGJvb2wgcG9zaXhfbG9ja3NfZGVhZGxvY2soc3RydWN0IGZpbGVfbG9jayAqY2FsbGVyX2ZsLFxuZnMvbG9ja3MuYy0xMTAyLVx0XHRcdFx0IHN0cnVjdCBmaWxlX2xvY2sgKmJsb2NrX2ZsKVxuLS1cbmZzL2xvY2tzLmMtMTEzMi0gKi9cbmZzL2xvY2tzLmM6MTEzMzpzdGF0aWMgaW50IGZsb2NrX2xvY2tfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGVfbG9jayAqcmVxdWVzdClcbmZzL2xvY2tzLmMtMTEzNC17XG4tLVxuZnMvbG9ja3MuYy0xMjA0LVxuZnMvbG9ja3MuYzoxMjA1OnN0YXRpYyBpbnQgcG9zaXhfbG9ja19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZV9sb2NrICpyZXF1ZXN0LFxuZnMvbG9ja3MuYy0xMjA2LVx0XHRcdCAgICBzdHJ1Y3QgZmlsZV9sb2NrICpjb25mbG9jaylcbi0tXG5mcy9sb2Nrcy5jLTE0NTctICovXG5mcy9sb2Nrcy5jOjE0NTg6aW50IHBvc2l4X2xvY2tfZmlsZShzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGZpbGVfbG9jayAqZmwsXG5mcy9sb2Nrcy5jLTE0NTktXHRcdFx0c3RydWN0IGZpbGVfbG9jayAqY29uZmxvY2spXG4tLVxuZnMvbG9ja3MuYy0xNDYyLX1cbmZzL2xvY2tzLmM6MTQ2MzpFWFBPUlRfU1lNQk9MKHBvc2l4X2xvY2tfZmlsZSk7XG5mcy9sb2Nrcy5jLTE0NjQtXG4tLVxuZnMvbG9ja3MuYy0xNDcxLSAqL1xuZnMvbG9ja3MuYzoxNDcyOnN0YXRpYyBpbnQgcG9zaXhfbG9ja19pbm9kZV93YWl0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKVxuZnMvbG9ja3MuYy0xNDczLXtcbi0tXG5mcy9sb2Nrcy5jLTE0ODgtXG5mcy9sb2Nrcy5jOjE0ODk6c3RhdGljIHZvaWQgbGVhc2VfY2xlYXJfcGVuZGluZyhzdHJ1Y3QgZmlsZV9sZWFzZSAqZmwsIGludCBhcmcpXG5mcy9sb2Nrcy5jLTE0OTAte1xuLS1cbmZzL2xvY2tzLmMtMTUwMC0vKiBXZSBhbHJlYWR5IGhhZCBhIGxlYXNlIG9uIHRoaXMgZmlsZTsganVzdCBjaGFuZ2UgaXRzIHR5cGUgKi9cbmZzL2xvY2tzLmM6MTUwMTppbnQgbGVhc2VfbW9kaWZ5KHN0cnVjdCBmaWxlX2xlYXNlICpmbCwgaW50IGFyZywgc3RydWN0IGxpc3RfaGVhZCAqZGlzcG9zZSlcbmZzL2xvY2tzLmMtMTUwMi17XG4tLVxuZnMvbG9ja3MuYy0xNTIyLX1cbmZzL2xvY2tzLmM6MTUyMzpFWFBPUlRfU1lNQk9MKGxlYXNlX21vZGlmeSk7XG5mcy9sb2Nrcy5jLTE1MjQtXG5mcy9sb2Nrcy5jOjE1MjU6c3RhdGljIGJvb2wgcGFzdF90aW1lKHVuc2lnbmVkIGxvbmcgdGhlbilcbmZzL2xvY2tzLmMtMTUyNi17XG4tLVxuZnMvbG9ja3MuYy0xNTMyLVxuZnMvbG9ja3MuYzoxNTMzOnN0YXRpYyB2b2lkIHRpbWVfb3V0X2xlYXNlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbGlzdF9oZWFkICpkaXNwb3NlKVxuZnMvbG9ja3MuYy0xNTM0LXtcbi0tXG5mcy9sb2Nrcy5jLTE1NjAtXG5mcy9sb2Nrcy5jOjE1NjE6c3RhdGljIGJvb2wgbGVhc2VzX2NvbmZsaWN0KHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqbGMsIHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqYmMpXG5mcy9sb2Nrcy5jLTE1NjIte1xuLS1cbmZzL2xvY2tzLmM9MTU5ND11MzJcbmZzL2xvY2tzLmM6MTU5NTppbm9kZV9sZWFzZV9pZ25vcmVfbWFzayhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvbG9ja3MuYy0xNTk2LXtcbi0tXG5mcy9sb2Nrcy5jLTE2MTQtfVxuZnMvbG9ja3MuYzoxNjE1OkVYUE9SVF9TWU1CT0xfR1BMKGlub2RlX2xlYXNlX2lnbm9yZV9tYXNrKTtcbmZzL2xvY2tzLmMtMTYxNi1cbmZzL2xvY2tzLmM9MTYxNz1zdGF0aWMgYm9vbFxuZnMvbG9ja3MuYzoxNjE4Omlnbm9yZV9kaXJfZGVsZWdfYnJlYWsoc3RydWN0IGZpbGVfbGVhc2UgKmZsLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG5mcy9sb2Nrcy5jLTE2MTkte1xuLS1cbmZzL2xvY2tzLmM9MTYzMD1zdGF0aWMgdW5zaWduZWQgaW50XG5mcy9sb2Nrcy5jOjE2MzE6YnJlYWtfbGVhc2VfZmxhZ3NfdG9fdHlwZSh1bnNpZ25lZCBpbnQgZmxhZ3MpXG5mcy9sb2Nrcy5jLTE2MzIte1xuLS1cbmZzL2xvY2tzLmM9MTY0ND1zdGF0aWMgc3RydWN0IGZpbGVfbGVhc2UgKlxuZnMvbG9ja3MuYzoxNjQ1OmZpcnN0X3Zpc2libGVfbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGVfbGVhc2UgKm5ld19mbCwgdW5zaWduZWQgaW50IGZsYWdzKVxuZnMvbG9ja3MuYy0xNjQ2LXtcbi0tXG5mcy9sb2Nrcy5jLTE2NzUtICovXG5mcy9sb2Nrcy5jOjE2NzY6aW50IF9fYnJlYWtfbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgaW50IGZsYWdzKVxuZnMvbG9ja3MuYy0xNjc3LXtcbi0tXG5mcy9sb2Nrcy5jLTE3OTEtfVxuZnMvbG9ja3MuYzoxNzkyOkVYUE9SVF9TWU1CT0woX19icmVha19sZWFzZSk7XG5mcy9sb2Nrcy5jLTE3OTMtXG4tLVxuZnMvbG9ja3MuYy0xODAyLSAqL1xuZnMvbG9ja3MuYzoxODAzOnZvaWQgbGVhc2VfZ2V0X210aW1lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB0aW1lc3BlYzY0ICp0aW1lKVxuZnMvbG9ja3MuYy0xODA0LXtcbi0tXG5mcy9sb2Nrcy5jLTE4MjEtfVxuZnMvbG9ja3MuYzoxODIyOkVYUE9SVF9TWU1CT0wobGVhc2VfZ2V0X210aW1lKTtcbmZzL2xvY2tzLmMtMTgyMy1cbi0tXG5mcy9sb2Nrcy5jLTE4NDctICovXG5mcy9sb2Nrcy5jOjE4NDg6c3RhdGljIGludCBfX2ZjbnRsX2dldGxlYXNlKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgZmxhdm9yKVxuZnMvbG9ja3MuYy0xODQ5LXtcbi0tXG5mcy9sb2Nrcy5jLTE4NzUtXG5mcy9sb2Nrcy5jOjE4NzY6aW50IGZjbnRsX2dldGxlYXNlKHN0cnVjdCBmaWxlICpmaWxwKVxuZnMvbG9ja3MuYy0xODc3LXtcbi0tXG5mcy9sb2Nrcy5jLTE4ODAtXG5mcy9sb2Nrcy5jOjE4ODE6aW50IGZjbnRsX2dldGRlbGVnKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgZGVsZWdhdGlvbiAqZGVsZWcpXG5mcy9sb2Nrcy5jLTE4ODIte1xuLS1cbmZzL2xvY2tzLmM9MTg4OT1zdGF0aWMgaW50XG5mcy9sb2Nrcy5jOjE4OTA6Z2VuZXJpY19hZGRfbGVhc2Uoc3RydWN0IGZpbGUgKmZpbHAsIGludCBhcmcsIHN0cnVjdCBmaWxlX2xlYXNlICoqZmxwLCB2b2lkICoqcHJpdilcbmZzL2xvY2tzLmMtMTg5MS17XG4tLVxuZnMvbG9ja3MuYy0yMDAxLVxuZnMvbG9ja3MuYzoyMDAyOnN0YXRpYyBpbnQgZ2VuZXJpY19kZWxldGVfbGVhc2Uoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKm93bmVyKVxuZnMvbG9ja3MuYy0yMDAzLXtcbi0tXG5mcy9sb2Nrcy5jLTIwNDQtICovXG5mcy9sb2Nrcy5jOjIwNDU6aW50IGdlbmVyaWNfc2V0bGVhc2Uoc3RydWN0IGZpbGUgKmZpbHAsIGludCBhcmcsIHN0cnVjdCBmaWxlX2xlYXNlICoqZmxwLFxuZnMvbG9ja3MuYy0yMDQ2LVx0XHRcdHZvaWQgKipwcml2KVxuLS1cbmZzL2xvY2tzLmMtMjA3MC19XG5mcy9sb2Nrcy5jOjIwNzE6RVhQT1JUX1NZTUJPTChnZW5lcmljX3NldGxlYXNlKTtcbmZzL2xvY2tzLmMtMjA3Mi1cbi0tXG5mcy9sb2Nrcy5jPTIwODE9c3RhdGljIGlubGluZSB2b2lkXG5mcy9sb2Nrcy5jOjIwODI6bGVhc2Vfbm90aWZpZXJfY2hhaW5faW5pdCh2b2lkKVxuZnMvbG9ja3MuYy0yMDgzLXtcbi0tXG5mcy9sb2Nrcy5jPTIwODc9c3RhdGljIGlubGluZSB2b2lkXG5mcy9sb2Nrcy5jOjIwODg6c2V0bGVhc2Vfbm90aWZpZXIoaW50IGFyZywgc3RydWN0IGZpbGVfbGVhc2UgKmxlYXNlKVxuZnMvbG9ja3MuYy0yMDg5LXtcbi0tXG5mcy9sb2Nrcy5jLTIwOTMtXG5mcy9sb2Nrcy5jOjIwOTQ6aW50IGxlYXNlX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpXG5mcy9sb2Nrcy5jLTIwOTUte1xuLS1cbmZzL2xvY2tzLmMtMjA5Ny19XG5mcy9sb2Nrcy5jOjIwOTg6RVhQT1JUX1NZTUJPTF9HUEwobGVhc2VfcmVnaXN0ZXJfbm90aWZpZXIpO1xuZnMvbG9ja3MuYy0yMDk5LVxuZnMvbG9ja3MuYzoyMTAwOnZvaWQgbGVhc2VfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKVxuZnMvbG9ja3MuYy0yMTAxLXtcbi0tXG5mcy9sb2Nrcy5jLTIxMDMtfVxuZnMvbG9ja3MuYzoyMTA0OkVYUE9SVF9TWU1CT0xfR1BMKGxlYXNlX3VucmVnaXN0ZXJfbm90aWZpZXIpO1xuZnMvbG9ja3MuYy0yMTA1LVxuLS1cbmZzL2xvY2tzLmM9MjEwNz1pbnRcbmZzL2xvY2tzLmM6MjEwODprZXJuZWxfc2V0bGVhc2Uoc3RydWN0IGZpbGUgKmZpbHAsIGludCBhcmcsIHN0cnVjdCBmaWxlX2xlYXNlICoqbGVhc2UsIHZvaWQgKipwcml2KVxuZnMvbG9ja3MuYy0yMTA5LXtcbi0tXG5mcy9sb2Nrcy5jLTIxMTUtfVxuZnMvbG9ja3MuYzoyMTE2OkVYUE9SVF9TWU1CT0xfR1BMKGtlcm5lbF9zZXRsZWFzZSk7XG5mcy9sb2Nrcy5jLTIxMTctXG4tLVxuZnMvbG9ja3MuYz0yMTM1PWludFxuZnMvbG9ja3MuYzoyMTM2OnZmc19zZXRsZWFzZShzdHJ1Y3QgZmlsZSAqZmlscCwgaW50IGFyZywgc3RydWN0IGZpbGVfbGVhc2UgKipsZWFzZSwgdm9pZCAqKnByaXYpXG5mcy9sb2Nrcy5jLTIxMzcte1xuLS1cbmZzL2xvY2tzLmMtMjE0OC19XG5mcy9sb2Nrcy5jOjIxNDk6RVhQT1JUX1NZTUJPTF9HUEwodmZzX3NldGxlYXNlKTtcbmZzL2xvY2tzLmMtMjE1MC1cbmZzL2xvY2tzLmM6MjE1MTpzdGF0aWMgaW50IGRvX2ZjbnRsX2FkZF9sZWFzZSh1bnNpZ25lZCBpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgZmxhdm9yLCBpbnQgYXJnKVxuZnMvbG9ja3MuYy0yMTUyLXtcbi0tXG5mcy9sb2Nrcy5jLTIxODUtICovXG5mcy9sb2Nrcy5jOjIxODY6aW50IGZjbnRsX3NldGxlYXNlKHVuc2lnbmVkIGludCBmZCwgc3RydWN0IGZpbGUgKmZpbHAsIGludCBhcmcpXG5mcy9sb2Nrcy5jLTIxODcte1xuLS1cbmZzL2xvY2tzLmMtMjIwNS0gKi9cbmZzL2xvY2tzLmM6MjIwNjppbnQgZmNudGxfc2V0ZGVsZWcodW5zaWduZWQgaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGRlbGVnYXRpb24gKmRlbGVnKVxuZnMvbG9ja3MuYy0yMjA3LXtcbi0tXG5mcy9sb2Nrcy5jLTIyMjMtICovXG5mcy9sb2Nrcy5jOjIyMjQ6c3RhdGljIGludCBmbG9ja19sb2NrX2lub2RlX3dhaXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGVfbG9jayAqZmwpXG5mcy9sb2Nrcy5jLTIyMjUte1xuLS1cbmZzL2xvY2tzLmMtMjI0Ny0gKi9cbmZzL2xvY2tzLmM6MjI0ODppbnQgbG9ja3NfbG9ja19pbm9kZV93YWl0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKVxuZnMvbG9ja3MuYy0yMjQ5LXtcbi0tXG5mcy9sb2Nrcy5jLTIyNjItfVxuZnMvbG9ja3MuYzoyMjYzOkVYUE9SVF9TWU1CT0wobG9ja3NfbG9ja19pbm9kZV93YWl0KTtcbmZzL2xvY2tzLmMtMjI2NC1cbi0tXG5mcy9sb2Nrcy5jLTIyNzktICovXG5mcy9sb2Nrcy5jOjIyODA6U1lTQ0FMTF9ERUZJTkUyKGZsb2NrLCB1bnNpZ25lZCBpbnQsIGZkLCB1bnNpZ25lZCBpbnQsIGNtZClcbmZzL2xvY2tzLmMtMjI4MS17XG4tLVxuZnMvbG9ja3MuYy0yMzQ0LSAqL1xuZnMvbG9ja3MuYzoyMzQ1OmludCB2ZnNfdGVzdF9sb2NrKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbClcbmZzL2xvY2tzLmMtMjM0Ni17XG4tLVxuZnMvbG9ja3MuYy0yMzY0LX1cbmZzL2xvY2tzLmM6MjM2NTpFWFBPUlRfU1lNQk9MX0dQTCh2ZnNfdGVzdF9sb2NrKTtcbmZzL2xvY2tzLmMtMjM2Ni1cbi0tXG5mcy9sb2Nrcy5jLTIzNzMtICovXG5mcy9sb2Nrcy5jOjIzNzQ6c3RhdGljIHBpZF90IGxvY2tzX3RyYW5zbGF0ZV9waWQoc3RydWN0IGZpbGVfbG9ja19jb3JlICpmbCwgc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zKVxuZnMvbG9ja3MuYy0yMzc1LXtcbi0tXG5mcy9sb2Nrcy5jLTI0MDAtXG5mcy9sb2Nrcy5jOjI0MDE6c3RhdGljIGludCBwb3NpeF9sb2NrX3RvX2Zsb2NrKHN0cnVjdCBmbG9jayAqZmxvY2ssIHN0cnVjdCBmaWxlX2xvY2sgKmZsKVxuZnMvbG9ja3MuYy0yNDAyLXtcbi0tXG5mcy9sb2Nrcy5jLTI0MjItI2lmIEJJVFNfUEVSX0xPTkcgPT0gMzJcbmZzL2xvY2tzLmM6MjQyMzpzdGF0aWMgdm9pZCBwb3NpeF9sb2NrX3RvX2Zsb2NrNjQoc3RydWN0IGZsb2NrNjQgKmZsb2NrLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbClcbmZzL2xvY2tzLmMtMjQyNC17XG4tLVxuZnMvbG9ja3MuYy0yNDM2LSAqL1xuZnMvbG9ja3MuYzoyNDM3OmludCBmY250bF9nZXRsayhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgc3RydWN0IGZsb2NrICpmbG9jaylcbmZzL2xvY2tzLmMtMjQzOC17XG4tLVxuZnMvbG9ja3MuYy0yNTEyLSAqL1xuZnMvbG9ja3MuYzoyNTEzOmludCB2ZnNfbG9ja19maWxlKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCwgc3RydWN0IGZpbGVfbG9jayAqY29uZilcbmZzL2xvY2tzLmMtMjUxNC17XG4tLVxuZnMvbG9ja3MuYy0yNTIwLX1cbmZzL2xvY2tzLmM6MjUyMTpFWFBPUlRfU1lNQk9MX0dQTCh2ZnNfbG9ja19maWxlKTtcbmZzL2xvY2tzLmMtMjUyMi1cbmZzL2xvY2tzLmM6MjUyMzpzdGF0aWMgaW50IGRvX2xvY2tfZmlsZV93YWl0KHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLFxuZnMvbG9ja3MuYy0yNTI0LVx0XHRcdCAgICAgc3RydWN0IGZpbGVfbG9jayAqZmwpXG4tLVxuZnMvbG9ja3MuYz0yNTQ3PXN0YXRpYyBpbnRcbmZzL2xvY2tzLmM6MjU0ODpjaGVja19mbW9kZV9mb3Jfc2V0bGsoc3RydWN0IGZpbGVfbG9jayAqZmwpXG5mcy9sb2Nrcy5jLTI1NDkte1xuLS1cbmZzL2xvY2tzLmMtMjU2NC0gKi9cbmZzL2xvY2tzLmM6MjU2NTppbnQgZmNudGxfc2V0bGsodW5zaWduZWQgaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCxcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDAzNwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDUyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS2VybmVsIExvY2tpbmcgQ29uZmlndXJhdGlvbiBhbmQgU3ltYm9sIFZpc2liaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGBmY250bF9zZXRsa2AsIGBmY250bF9zZXRsazY0YCwgYW5kIGBsb2Nrc19zaG93YC4gRmlyc3QgcXVlc3Rpb246IGlzIGBsb2Nrc19zaG93YCBzdGF0aWMgd2l0aGluIGBmcy9sb2Nrcy5jYD8gVGhhdCYjMzk7cyBrZXkgYmVjYXVzZSB0aGUgZG9jdW1lbnRhdGlvbiBwcmVmZXJzIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLCBhcyBzdGF0aWMgZnVuY3Rpb25zIGNhbiBiZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciwgbG9zaW5nIHRoZWlyIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuCgpSaWdodCwgc28gY2FuIGBsb2Nrc19zaG93YCBldmVuICpiZSogYSAmIzM0O0ZvY3VzU3ltYm9sJiMzNDsgaWYgaXQmIzM5O3MgcG90ZW50aWFsbHkgaW5saW5lZD8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0IGFjdHVhbGx5IGhhcyBhIHN5bWJvbC4gQWhhISBJdCAqaXMqIHJlZmVyZW5jZWQgaW4gYGxvY2tzX3NlcV9vcGVyYXRpb25zYCBiZWNhdXNlIGl0cyBhZGRyZXNzIGlzIHRha2VuIChgLnNob3cgPSBsb2Nrc19zaG93YCkuIFRoYXQgbWVhbnMgdGhlIGNvbXBpbGVyIGNhbiYjMzk7dCBpbmxpbmUgaXQ7IGl0IGhhcyB0byBnZW5lcmF0ZSBhIGZ1bmN0aW9uIHBvaW50ZXIgYW5kLCB0aGVyZWZvcmUsIGEgZGlzdGluY3Qgc3ltYm9sLiBHb29kLgoKTmV4dCwgSSBuZWVkIHRvIGNvbnNpZGVyIHBvdGVudGlhbCByZWxldmFudCBlbnRyeXBvaW50cy4gT2J2aW91c2x5IGBmY250bF9zZXRsa2AsIGFuZCBgZmNudGxfZ2V0bGtgLCB3aGljaCBhcmUgdXNlZCBpbiBgZmNudGxgLiBJdCBhbHNvIHNlZW1zIHRoYXQgdGhpbmdzIGxpa2UgYHN5c19mbG9ja2AgY291bGQgYmUgcmVsZXZhbnQsIGFsb25nc2lkZSB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIG9mIHRoZSBgbG9ja3Nfc2hvd2Agc3lzdGVtIGFzIHRoZSBtYWluIGVudHJ5IHBvaW50IHRvIHZpZXcgdGhlIGxvY2tzLgoKU28sIGxldCYjMzk7cyBtYXAgb3V0IHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3MuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IGV2ZXJ5dGhpbmcgZW5hYmxlZDoKCjEuICBgRklMRV9MT0NLSU5HYDogVGhpcyBpcyBlc3NlbnRpYWwsIGFzIGl0IGVuYWJsZXMgYGxvY2tzLmNgLgoyLiAgYFBST0NfRlNgOiBOZWVkZWQgYmVjYXVzZSBgZnMvbG9ja3MuY2AgdXNlcyBgI2lmZGVmIENPTkZJR19QUk9DX0ZTYCwgYW5kIHRoYXQmIzM5O3Mgd2hlcmUgYGxvY2tzX3Nob3dgIGFuZCB0aGUgYC9wcm9jL2xvY2tzYCBmaWxlIGFyZSBkZWZpbmVkLgozLiAgYFBJRF9OU2A6IFRoaXMgaXMgbmVlZGVkIHRvIGVuYWJsZSB0aGUgdXNhZ2Ugb2YgcGlkIG5hbWVzcGFjZXMgYW5kIGVuc3VyaW5nIHRoYXQgYHByb2NfcGlkbnMgIT0gJmFtcDtpbml0X3BpZF9uc2AuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZG91YmxlIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcy4gQmFjayB0byBgZnMvbG9ja3MuY2AgZm9yIGFueSBtb3JlIGNsdWVzLgoKWXVwLCBJJiMzOTttIHNlZWluZyB0aGF0IGBDT05GSUdfUFJPQ19GU2Agc3Vycm91bmRzIHRoZSBjb2RlIGZyb20gbGluZXMgMjkxMi0zMTU1LiBgQ09ORklHX0ZJTEVfTE9DS0lOR2AgaXMgZGVmaW5lZCBpbiBgZnMvTWFrZWZpbGVgIGFzIGBvYmotJChDT05GSUdfRklMRV9MT0NLSU5HKSAmIzQzOz0gbG9ja3Mub2AuIEFuZCBgQ09ORklHX1BJRF9OU2AgaXMgaW4gYGluaXQvS2NvbmZpZ2AuIExldCYjMzk7cyBkaWcgaW50byB0aGF0IGBpbml0L0tjb25maWdgIGZvciBgUElEX05TYDoKCmBgYApjb25maWcgUElEX05TCglib29sICYjMzQ7UElEIE5hbWVzcGFjZXMmIzM0OwoJZGVmYXVsdCB5CglkZXBlbmRzIG9uIE5BTUVTUEFDRVMKCWRlcGVuZHMgb24gQ0hFQ0tQT0lOVF9SRVNUT1JFIHx8IE5FVApgYGAKCldhaXQsIGhvbGQgb24hIEkgbmVlZCB0byBiZSAqc3VyZSogSSB1bmRlcnN0YW5kIHRob3NlIGRlcGVuZGVuY2llcy4gTGV0JiMzOTtzIHNlZSBleGFjdGx5IHdoYXQgYFBJRF9OU2AgcmVsaWVzIG9uIGluIGRldGFpbC4gVGhhdCYjMzk7cyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQSURfTlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE0NDY9Y29uZmlnIFVTRVJfTlNcbi0tXG5pbml0L0tjb25maWctMTQ1OS1cbmluaXQvS2NvbmZpZzoxNDYwOmNvbmZpZyBQSURfTlNcbmluaXQvS2NvbmZpZy0xNDYxLVx0Ym9vbCBcJiMzNDtQSUQgTmFtZXNwYWNlc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTI2NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgb2YgdGhlIGBpbml0L0tjb25maWdgIGZpbGUsIGFzIEkgdW5kZXJzdGFuZCB0aGVtOgoKKipEaXNzZWN0aW5nIGluaXQvS2NvbmZpZyBMaW5lcyAxNDUwLTE0ODAqKgoKT2theSwgc28gbGV0JiMzOTtzIGRpZyBpbnRvIGxpbmVzIDE0NTAgdG8gMTQ4MCBvZiBgaW5pdC9LY29uZmlnYC4gSSYjMzk7bSBnb2luZyB0byBwYXJzZSB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGhpbiB0aG9zZSBsaW5lcyBvZiBjb25maWcuIEl0JiMzOTtzIGxpa2VseSByZWxhdGVkIHRvIHNvbWUgY29yZSBzeXN0ZW0gaW5pdGlhbGl6YXRpb24sIHBvc3NpYmx5IGxpbmtlZCB0byB0aGUgZWFybHkgYm9vdCBwcm9jZXNzIG9yIGZ1bmRhbWVudGFsIGhhcmR3YXJlIHNldHVwLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoZXNlIGtpbmRzIG9mIHNldHRpbmdzIGFyZSB1c3VhbGx5IGludHJpY2F0ZWx5IGludGVydHdpbmVkLgoKSSBhbnRpY2lwYXRlIHRoZSBjb25maWcgb3B0aW9ucyBpbiB0aGF0IHNlY3Rpb24gd2lsbCBwcm92aWRlIHRoZSBuZWNlc3Nhcnkgb3B0aW9ucywgb3IgZGVmYXVsdHMsIHRoYXQgYWZmZWN0IGhvdyB0aGUga2VybmVsIGluaXRpYWxpemVzIHZhcmlvdXMgY29tcG9uZW50cyBkdXJpbmcgdGhlIHZlcnkgZmlyc3Qgc3RhZ2VzIG9mIGJvb3RpbmcgdGhlIHN5c3RlbS4gSSYjMzk7bSBndWVzc2luZyBpdCBtaWdodCBjb250YWluIHNldHRpbmdzIGZvciB0aGluZ3MgbGlrZSBjb25zb2xlIGluaXRpYWxpemF0aW9uLCBlYXJseSBtZW1vcnkgYWxsb2NhdGlvbiwgb3IgcGVyaGFwcyBldmVuIGluaXRpYWwgaW50ZXJydXB0IHNldHVwLiBUaGUgZGVwZW5kZW5jeSBzdHJ1Y3R1cmUgaXMga2V5IGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgYW55IGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljYWwgZmxvdyBhbmQgaG93IHRoZXNlIG9wdGlvbnMgcmVsYXRlIHRvIG90aGVyLCBwb3RlbnRpYWxseSBtb3JlIGZ1bmRhbWVudGFsLCBrZXJuZWwgZmVhdHVyZXMuCgpJdCYjMzk7cyBhbHNvIGxpa2VseSBJIHdpbGwgb2JzZXJ2ZSB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdXNlci1mYWNpbmcgY29uZmlnIG9wdGlvbnMgYW5kIGludGVybmFsIGtlcm5lbCBkZWZhdWx0cy4gSSB3YW50IHRvIGxvb2sgZm9yIGFueXRoaW5nIHRoYXQgY2FuIGJlIGFkanVzdGVkLiBUaGlzIGlzIGEgY3J1Y2lhbCBzZWN0aW9uIGZvciBjb250cm9sbGluZyBzeXN0ZW0gYmVoYXZpb3IgZnJvbSB0aGUgdmVyeSBzdGFydC4gSeKAmW0gZXNwZWNpYWxseSBsb29raW5nIGZvciBhbnkgc3VidGxlIGhpbnRzIHJlZ2FyZGluZyBwZXJmb3JtYW5jZSBvciBzZWN1cml0eSB0cmFkZW9mZnMgdGhhdCBhcmUgb2Z0ZW4gcHJlc2VudCBpbiB0aGVzZSBsb3ctbGV2ZWwgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDUwOlx0XHQgIFRoaXMgYWxsb3dzIGNvbnRhaW5lcnMsIGkuZS4gdnNlcnZlcnMsIHRvIHVzZSB1c2VyIG5hbWVzcGFjZXNcbjE0NTE6XHRcdCAgdG8gcHJvdmlkZSBkaWZmZXJlbnQgdXNlciBpbmZvIGZvciBkaWZmZXJlbnQgc2VydmVycy5cbjE0NTI6XHRcbjE0NTM6XHRcdCAgV2hlbiB1c2VyIG5hbWVzcGFjZXMgYXJlIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBpdCBpc1xuMTQ1NDpcdFx0ICByZWNvbW1lbmRlZCB0aGF0IHRoZSBNRU1DRyBvcHRpb24gYWxzbyBiZSBlbmFibGVkIGFuZCB0aGF0XG4xNDU1Olx0XHQgIHVzZXItc3BhY2UgdXNlIHRoZSBtZW1vcnkgY29udHJvbCBncm91cHMgdG8gbGltaXQgdGhlIGFtb3VudFxuMTQ1NjpcdFx0ICBvZiBtZW1vcnkgYSBtZW1vcnkgdW5wcml2aWxlZ2VkIHVzZXJzIGNhbiB1c2UuXG4xNDU3Olx0XG4xNDU4Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4xNDU5Olx0XG4xNDYwOlx0Y29uZmlnIFBJRF9OU1xuMTQ2MTpcdFx0Ym9vbCBcJiMzNDtQSUQgTmFtZXNwYWNlc1wmIzM0O1xuMTQ2MjpcdFx0ZGVmYXVsdCB5XG4xNDYzOlx0XHRoZWxwXG4xNDY0Olx0XHQgIFN1cHBvcnQgcHJvY2VzcyBpZCBuYW1lc3BhY2VzLiAgVGhpcyBhbGxvd3MgaGF2aW5nIG11bHRpcGxlXG4xNDY1Olx0XHQgIHByb2Nlc3NlcyB3aXRoIHRoZSBzYW1lIHBpZCBhcyBsb25nIGFzIHRoZXkgYXJlIGluIGRpZmZlcmVudFxuMTQ2NjpcdFx0ICBwaWQgbmFtZXNwYWNlcy4gIFRoaXMgaXMgYSBidWlsZGluZyBibG9jayBvZiBjb250YWluZXJzLlxuMTQ2NzpcdFxuMTQ2ODpcdGNvbmZpZyBORVRfTlNcbjE0Njk6XHRcdGJvb2wgXCYjMzQ7TmV0d29yayBuYW1lc3BhY2VcJiMzNDtcbjE0NzA6XHRcdGRlcGVuZHMgb24gTkVUXG4xNDcxOlx0XHRkZWZhdWx0IHlcbjE0NzI6XHRcdGhlbHBcbjE0NzM6XHRcdCAgQWxsb3cgdXNlciBzcGFjZSB0byBjcmVhdGUgd2hhdCBhcHBlYXIgdG8gYmUgbXVsdGlwbGUgaW5zdGFuY2VzXG4xNDc0Olx0XHQgIG9mIHRoZSBuZXR3b3JrIHN0YWNrLlxuMTQ3NTpcdFxuMTQ3NjpcdGVuZGlmICMgTkFNRVNQQUNFU1xuMTQ3NzpcdFxuMTQ3ODpcdGNvbmZpZyBDSEVDS1BPSU5UX1JFU1RPUkVcbjE0Nzk6XHRcdGJvb2wgXCYjMzQ7Q2hlY2twb2ludC9yZXN0b3JlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIwMjMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBMYWJ5cmludGg6IEEgUHJlLUxpbmUgMTQ1MCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgaW5pdC9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGJlZm9yZSBsaW5lIDE0NTAuIFRoZSBtZW50aW9uIG9mIE5BTUVTUEFDRVMgaXMgdGhlIHRyaWdnZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0LiBJJiMzOTttIGFzc3VtaW5nLCBnaXZlbiB0aGUgZmlsZSBhbmQgdGhlIGdlbmVyYWwgY29udGV4dCBvZiBrZXJuZWwgY29uZmlndXJhdGlvbiwgdGhhdCB3ZSBhcmUgZGVhbGluZyB3aXRoIHNvbWUgYXNwZWN0IG9mIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzeXN0ZW0sIGxpa2VseSByZWxhdGVkIHRvIG5hbWVzcGFjZXMgaW4gc29tZSB3YXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCByZWxhdGlvbnNoaXBzIGFyZSBkZWZpbmVkIG9yIHVzZWQgcHJpb3IgdG8gdGhhdCBsaW5lLiBJIG5lZWQgdG8gZGlzY292ZXIgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFuZCB0aGUgb3ZlcmFsbCBwaWN0dXJlIGJlZm9yZSBJIGNhbiB1bmRlcnN0YW5kIHdoYXQgdGhlIGxpbmUgaXMgZG9pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDMwOlx0XHRkZWZhdWx0IHlcbjE0MzE6XHRcdGhlbHBcbjE0MzI6XHRcdCAgSW4gdGhpcyBuYW1lc3BhY2UgYm9vdHRpbWUgYW5kIG1vbm90b25pYyBjbG9ja3MgY2FuIGJlIHNldC5cbjE0MzM6XHRcdCAgVGhlIHRpbWUgd2lsbCBrZWVwIGdvaW5nIHdpdGggdGhlIHNhbWUgcGFjZS5cbjE0MzQ6XHRcbjE0MzU6XHRjb25maWcgVElNRV9OU19WRFNPXG4xNDM2Olx0XHRkZWZfYm9vbCBUSU1FX05TIFx1MDAyNlx1MDAyNiBHRU5FUklDX0dFVFRJTUVPRkRBWVxuMTQzNzpcdFxuMTQzODpcdGNvbmZpZyBJUENfTlNcbjE0Mzk6XHRcdGJvb2wgXCYjMzQ7SVBDIG5hbWVzcGFjZVwmIzM0O1xuMTQ0MDpcdFx0ZGVwZW5kcyBvbiAoU1lTVklQQyB8fCBQT1NJWF9NUVVFVUUpXG4xNDQxOlx0XHRkZWZhdWx0IHlcbjE0NDI6XHRcdGhlbHBcbjE0NDM6XHRcdCAgSW4gdGhpcyBuYW1lc3BhY2UgdGFza3Mgd29yayB3aXRoIElQQyBpZHMgd2hpY2ggY29ycmVzcG9uZCB0b1xuMTQ0NDpcdFx0ICBkaWZmZXJlbnQgSVBDIG9iamVjdHMgaW4gZGlmZmVyZW50IG5hbWVzcGFjZXMuXG4xNDQ1Olx0XG4xNDQ2Olx0Y29uZmlnIFVTRVJfTlNcbjE0NDc6XHRcdGJvb2wgXCYjMzQ7VXNlciBuYW1lc3BhY2VcJiMzNDtcbjE0NDg6XHRcdGRlZmF1bHQgblxuMTQ0OTpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjQ5MgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqTmF2aWdhdGluZyB0aGUgTmFtZXNwYWNlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgYG1lbnVjb25maWdgIGZvciB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIG5hbWVzcGFjZSBjb25maWd1cmF0aW9ucy4gV2hlcmUgZG8gSSBldmVuIGJlZ2luPyBSaWdodCwgbGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBzZWFyY2guIEkmIzM5O2xsIG5lZWQgdG8gbG9jYXRlIHdoZXJlIGBOQU1FU1BBQ0VTYCBpcyBkZWZpbmVkIGluIHRoZSBtZW51IHN0cnVjdHVyZS4gVW5kZXJzdGFuZGluZyB0aGUgYnJhbmNoaW5nIGxvZ2ljIGZyb20gdGhhdCBwb2ludCBpcyBrZXkuIEl0JiMzOTtzIG5vdCBqdXN0IGFib3V0IGZpbmRpbmcgdGhlIGluaXRpYWwgZW50cnksIGJ1dCBhbHNvIHRyYWNpbmcgdGhlIGRlcGVuZGVuY2llcywgZGVmYXVsdHMsIGFuZCBhbnkgY29uZGl0aW9uYWwgYnVpbGQgb3B0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LiBNeSBndXQgdGVsbHMgbWUgdGhlcmUmIzM5O3MgcHJvYmFibHkgYSBoaWVyYXJjaGljYWwgc2V0dXAsIHNvIEkgc2hvdWxkIGJlIHByZXBhcmVkIHRvIGRpZyB0aHJvdWdoIHNldmVyYWwgbGV2ZWxzIG9mIGluY2x1ZGVzIGFuZCBjb25kaXRpb25hbCBzdGF0ZW1lbnRzIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGtlcm5lbCBmZWF0dXJlcyBhbmQgY29uZmlndXJhdGlvbnMgbWlnaHQgaW1wYWN0IG9yIGJlIGltcGFjdGVkIGJ5IHRoZSBuYW1lc3BhY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW51Y29uZmlnIE5BTUVTUEFDRVMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE0MDc9ZW5kaWYgIyBDR1JPVVBTXG5pbml0L0tjb25maWctMTQwOC1cbmluaXQvS2NvbmZpZzoxNDA5Om1lbnVjb25maWcgTkFNRVNQQUNFU1xuaW5pdC9LY29uZmlnLTE0MTAtXHRib29sIFwmIzM0O05hbWVzcGFjZXMgc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI3ODgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDoKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIC0gQSBRdWljayBBdWRpdCoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIEkgbmVlZCB0byBxdWlja2x5IGdyYXNwIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gYSBmZXcga2V5IGFyZWFzOiBOQU1FU1BBQ0VTLCBQSURfTlMsIEZJTEVfTE9DS0lORywgYW5kIFBST0NfRlMuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gZW5zdXJpbmcgdGhlc2UgYXJlIGNvcnJlY3RseSBzZXQgYW5kIGludGVyYWN0IHByb3Blcmx5LgoKVGhlIHBsYW4gaXMgdG8gZGl2ZSBkZWVwZXIgaW50byBgQ09ORklHX0ZJTEVfTE9DS0lOR2AgYW5kIGBDT05GSUdfUFJPQ19GU2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgaW52b2x2ZWQgdGhhdCBtaWdodCBub3QgYmUgaW1tZWRpYXRlbHkgb2J2aW91cy4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBnbyBkaXJlY3RseSB0byB0aGUgc291cmNlLCBjaGVja2luZyBgZnMvcHJvYy9LY29uZmlnYCBmb3IgdGhlIGRlcGVuZGVuY2llcyBvZiBQUk9DX0ZTLiBUaGlzIHdpbGwgZ2l2ZSBhIGdvb2Qgb3ZlcnZpZXcgYW5kIGhlbHAgbWUgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBjb25mbGljdHMgb3IgYXJlYXMgdGhhdCBuZWVkIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9wcm9jL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgUFJPQ19GU1xuICAgMzpcdFx0Ym9vbCBcJiMzNDsvcHJvYyBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxuICAgNDpcdFx0ZGVmYXVsdCB5XG4gICA1Olx0XHRoZWxwXG4gICA2Olx0XHQgIFRoaXMgaXMgYSB2aXJ0dWFsIGZpbGUgc3lzdGVtIHByb3ZpZGluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3RhdHVzXG4gICA3Olx0XHQgIG9mIHRoZSBzeXN0ZW0uIFwmIzM0O1ZpcnR1YWxcJiMzNDsgbWVhbnMgdGhhdCBpdCBkb2VzbiYjMzk7dCB0YWtlIHVwIGFueSBzcGFjZSBvblxuICAgODpcdFx0ICB5b3VyIGhhcmQgZGlzazogdGhlIGZpbGVzIGFyZSBjcmVhdGVkIG9uIHRoZSBmbHkgYnkgdGhlIGtlcm5lbCB3aGVuXG4gICA5Olx0XHQgIHlvdSB0cnkgdG8gYWNjZXNzIHRoZW0uIEFsc28sIHlvdSBjYW5ub3QgcmVhZCB0aGUgZmlsZXMgd2l0aCBvbGRlclxuICAxMDpcdFx0ICB2ZXJzaW9uIG9mIHRoZSBwcm9ncmFtIGxlc3M6IHlvdSBuZWVkIHRvIHVzZSBtb3JlIG9yIGNhdC5cbiAgMTE6XHRcbiAgMTI6XHRcdCAgSXQmIzM5O3MgdG90YWxseSBjb29sOyBmb3IgZXhhbXBsZSwgXCYjMzQ7Y2F0IC9wcm9jL2ludGVycnVwdHNcJiMzNDsgZ2l2ZXNcbiAgMTM6XHRcdCAgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCB0aGUgZGlmZmVyZW50IElSUXMgYXJlIHVzZWQgZm9yIGF0IHRoZSBtb21lbnRcbiAgMTQ6XHRcdCAgKHRoZXJlIGlzIGEgc21hbGwgbnVtYmVyIG9mIEludGVycnVwdCBSZVF1ZXN0IGxpbmVzIGluIHlvdXIgY29tcHV0ZXJcbiAgMTU6XHRcdCAgdGhhdCBhcmUgdXNlZCBieSB0aGUgYXR0YWNoZWQgZGV2aWNlcyB0byBnYWluIHRoZSBDUFUmIzM5O3MgYXR0ZW50aW9uIC0tXG4gIDE2Olx0XHQgIG9mdGVuIGEgc291cmNlIG9mIHRyb3VibGUgaWYgdHdvIGRldmljZXMgYXJlIG1pc3Rha2VubHkgY29uZmlndXJlZFxuICAxNzpcdFx0ICB0byB1c2UgdGhlIHNhbWUgSVJRKS4gVGhlIHByb2dyYW0gcHJvY2luZm8gdG8gZGlzcGxheSBzb21lXG4gIDE4Olx0XHQgIGluZm9ybWF0aW9uIGFib3V0IHlvdXIgc3lzdGVtIGdhdGhlcmVkIGZyb20gdGhlIC9wcm9jIGZpbGUgc3lzdGVtLlxuICAxOTpcdFxuICAyMDpcdFx0ICBCZWZvcmUgeW91IGNhbiB1c2UgdGhlIC9wcm9jIGZpbGUgc3lzdGVtLCBpdCBoYXMgdG8gYmUgbW91bnRlZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM0MDkKCQkJCQkJCW91dHB1dDogMTg5CgkJCQkJCQl0aG91Z2h0czogNTA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IEFzc2Vzc21lbnQ6IE9GRCBMb2NrIEZpbHRlcmluZyBpbiBgL3Byb2MvbG9ja3NgKioKCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLiBGaXJzdCwgbGV0JiMzOTtzIHZlcmlmeSB3aGF0IHdlJiMzOTtyZSBrZXlpbmcgaW4gb24gd2l0aCBgRm9jdXNTeW1ib2xzYC4gT2theSwgd2UmIzM5O3ZlIGdvdCBgbG9ja3Nfc2hvd2AsIHdoaWNoIGlzIHRoZSBgL3Byb2MvbG9ja3NgIGRpc3BsYXksIHJpZ2h0IHdoZXJlIHRoZSBuZXcgbG9naWMgcmVzaWRlcy4gVGhlbiwgYGZjbnRsX3NldGxrYCBhbmQgYGZjbnRsX2dldGxrYCwgYXMgdGhleSBoYW5kbGUgbG9jayBjcmVhdGlvbiBhbmQgcmV0cmlldmFsLCBpbmNsdWRpbmcgdGhlIG9wZW4gZmlsZSBkZXNjcmlwdGlvbiAoT0ZEKSBsb2NrcyB0aGF0IGFyZSB0aGUgZm9jYWwgcG9pbnQgaGVyZS4gRmluYWxseSwgYGxvY2tzX3RyYW5zbGF0ZV9waWRgIGZvciBjb250ZXh0LCBhbHRob3VnaCBpdCBhcHBlYXJzIHRoaXMgaXMgd2hhdCB0aGUgcGF0Y2ggKmJ5cGFzc2VzKiBmb3IgT0ZEIGxvY2tzLgoKTm93LCB0aGUgcmVhbCBxdWVzdGlvbjogaXMgdGhpcyBgV29ydGhGdXp6aW5nYD8gVGhpcyBjaGFuZ2UgZGlyZWN0bHkgbW9kaWZpZXMgdGhlIHZpc2liaWxpdHkgZmlsdGVyaW5nIGluIGAvcHJvYy9sb2Nrc2Agd2hlbiBPRkQgbG9ja3MgYXJlIGludm9sdmVkLCBlc3BlY2lhbGx5IHdoZW4gUElEIG5hbWVzcGFjZXMgYXJlIGluIHBsYXkuIEl0IHNlZW1zIHRoZSBjb3JlIGlzc3VlIGxpZXMgaW4gdGhlIGZhY3QgdGhhdCBPRkQgbG9ja3MgaGF2ZSBhIFBJRCBvZiAtMS4gVGhlIHBhdGNoIGludHJvZHVjZXMgdGhpcyBuZXcgUElEIGxvb2t1cCBhbmQgZmlsdGVyaW5nIHVzaW5nIGBmbGNfcGlkYCAodGhlIHByb2Nlc3MmIzM5O3MgVEdJRCkgd2hpY2ggaXMgbXVjaCBiZXR0ZXIuCgpUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGFyZWEgb2YgdGhlIFZGUyBsb2NraW5nIGltcGxlbWVudGF0aW9uIGFuZCBwcm9jZnMuIFdlJiMzOTtyZSB0YWxraW5nIGNvcmUga2VybmVsIGxvZ2ljLCBzb21ldGhpbmcgdGhhdCYjMzk7cyByZWxhdGl2ZWx5IGVhc3kgdG8gaGl0IHNpbXBseSBieSB1c2luZyBgZmNudGxgIHRvIGNyZWF0ZSBsb2NrcyAoc3BlY2lmaWNhbGx5IGBGX09GRF9TRVRMS2ApIGFuZCB0aGVuIHJlYWRpbmcgYC9wcm9jL2xvY2tzYCBlaXRoZXIgaW5zaWRlIG9yIG91dHNpZGUgUElEIG5hbWVzcGFjZXMuIEl0IHNlZW1zIGxpa2UgaXQmIzM5O3Mgd2l0aGluIHJlYWNoLCB0aGUgYFdvcnRoRnV6emluZ2AgZmxhZyBzaG91bGQgYmUgc2V0IHRvIGB0cnVlYC4KCkxldCYjMzk7cyBkbyBhIGZpbmFsIGNoZWNrOiB0aGUgZW5hYmxpbmcgY29uZmlncywgYEZJTEVfTE9DS0lOR2AsIGBQUk9DX0ZTYCwgYFBJRF9OU2AsIGFuZCBgTkFNRVNQQUNFU2AgYXJlIGFsbCBwcmVzZW50LiBUaGUgZm9jdXMgc3ltYm9scyBhcmUgc3RpbGwgc29saWQ6IGBsb2Nrc19zaG93YCwgYGZjbnRsX3NldGxrYCwgYW5kIGBmY250bF9nZXRsa2AuIFRoZSBwYXRjaCBhbHRlcnMgYC9wcm9jL2xvY2tzYCB0byBmaWx0ZXIgcHJvcGVybHkgZm9yIE9GRCBsb2NrcyB3aGVuIHJlYWRpbmcgZnJvbSBQSUQgbmFtZXNwYWNlcywgYXMgdGhlIGxvY2sgb3duZXImIzM5O3MgYGZsY19waWRgIGlzIGJlaW5nIGNoZWNrZWQgYWdhaW5zdCBgcHJvY19waWRuc2AgdmlhIFJDVS4gU3RhbmRhcmQgZmlsZSBsb2NraW5nIGFuZCBwcm9jZnMgbG9naWMuCgpSaWdodC4gVGltZSB0byBpbnZva2UgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZJTEVfTE9DS0lORyYjMzQ7LAogICAgJiMzNDtQUk9DX0ZTJiMzNDssCiAgICAmIzM0O05BTUVTUEFDRVMmIzM0OywKICAgICYjMzQ7UElEX05TJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bG9ja3Nfc2hvdyYjMzQ7LAogICAgJiMzNDtmY250bF9zZXRsayYjMzQ7LAogICAgJiMzNDtmY250bF9nZXRsayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgbG9ja3Nfc2hvdygpYCBpbiBmcy9sb2Nrcy5jIHRvIHByb3Blcmx5IGZpbHRlciBPcGVuIEZpbGUgRGVzY3JpcHRpb24gKE9GRCkgbG9ja3Mgd2hlbiBgL3Byb2MvbG9ja3NgIGlzIHJlYWQgZnJvbSB3aXRoaW4gYSBub24taW5pdGlhbCBQSUQgbmFtZXNwYWNlLiBCZWNhdXNlIE9GRCBsb2NrcyByZXBvcnQgcGlkIC0xLCBwcmV2aW91cyBuYW1lc3BhY2UgZmlsdGVyaW5nIGZhaWxlZCB0byBjb25jZWFsIE9GRCBsb2NrcyBvd25lZCBieSBwcm9jZXNzZXMgb3V0c2lkZSB0aGUgUElEIG5hbWVzcGFjZS4gVGhlIHBhdGNoIGFkZHMgUkNVLWJhc2VkIFBJRCBsb29rdXAgYW5kIG5hbWVzcGFjZSB2aXNpYmlsaXR5IGNoZWNrcyBvbiBgZmxjX3BpZGAuIFRoaXMgY2hhbmdlcyByZWFjaGFibGUgY29yZSBWRlMgLyBwcm9jZnMgbG9naWMgdGhhdCBjYW4gYmUgZXhlcmNpc2VkIHZpYSBmaWxlIGxvY2tpbmcgc3lzY2FsbHMgYW5kIHByb2NmcyByZWFkcyBhY3Jvc3MgUElEIG5hbWVzcGFjZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZJTEVfTE9DS0lORyYjMzQ7LAogICAgJiMzNDtQUk9DX0ZTJiMzNDssCiAgICAmIzM0O05BTUVTUEFDRVMmIzM0OywKICAgICYjMzQ7UElEX05TJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bG9ja3Nfc2hvdyYjMzQ7LAogICAgJiMzNDtmY250bF9zZXRsayYjMzQ7LAogICAgJiMzNDtmY250bF9nZXRsayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgbG9ja3Nfc2hvdygpYCBpbiBmcy9sb2Nrcy5jIHRvIHByb3Blcmx5IGZpbHRlciBPcGVuIEZpbGUgRGVzY3JpcHRpb24gKE9GRCkgbG9ja3Mgd2hlbiBgL3Byb2MvbG9ja3NgIGlzIHJlYWQgZnJvbSB3aXRoaW4gYSBub24taW5pdGlhbCBQSUQgbmFtZXNwYWNlLiBCZWNhdXNlIE9GRCBsb2NrcyByZXBvcnQgcGlkIC0xLCBwcmV2aW91cyBuYW1lc3BhY2UgZmlsdGVyaW5nIGZhaWxlZCB0byBjb25jZWFsIE9GRCBsb2NrcyBvd25lZCBieSBwcm9jZXNzZXMgb3V0c2lkZSB0aGUgUElEIG5hbWVzcGFjZS4gVGhlIHBhdGNoIGFkZHMgUkNVLWJhc2VkIFBJRCBsb29rdXAgYW5kIG5hbWVzcGFjZSB2aXNpYmlsaXR5IGNoZWNrcyBvbiBgZmxjX3BpZGAuIFRoaXMgY2hhbmdlcyByZWFjaGFibGUgY29yZSBWRlMgLyBwcm9jZnMgbG9naWMgdGhhdCBjYW4gYmUgZXhlcmNpc2VkIHZpYSBmaWxlIGxvY2tpbmcgc3lzY2FsbHMgYW5kIHByb2NmcyByZWFkcyBhY3Jvc3MgUElEIG5hbWVzcGFjZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjMyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MzI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgbG9ja3Nfc2hvd2AgaW4gYGZzL2xvY2tzLmNgIHRvIGZpbHRlciBvdXQgb3BlbiBmaWxlIGRlc2NyaXB0aW9uIChPRkQpIGxvY2tzIGZyb20gYC9wcm9jL2xvY2tzYCB3aGVuIHZpZXdlZCBmcm9tIGEgbm9uLWluaXQgUElEIG5hbWVzcGFjZSBpZiB0aGUgb3duaW5nIFBJRCBpcyBub3QgdmlzaWJsZSB3aXRoaW4gdGhhdCBuYW1lc3BhY2UuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzIG9yIHBhZGRpbmcgdG8gdXNlciBzcGFjZSwgYW5kIGluaXRpYWxpemVzIGFsbCBsb2NhbCB2YXJpYWJsZXMgKGB2aXNpYmxlID0gZmFsc2VgKS4gSXQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aHMgb3IgY3JlYXRlIGFueSByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg5YWY2YWVkZDg0MzRhNzRkMTcxYzdmNGM0MjRhOGRiYzRjNzU1YzIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCAyIDIyOjMwOjUxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvbG9ja3MuYyBiL2ZzL2xvY2tzLmMKaW5kZXggNmU0ZmY3ZmNlYzA1My4uZGIxNzg3OWQ5MzE5NSAxMDA2NDQKLS0tIGEvZnMvbG9ja3MuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9sb2Nrcy5jCkBAIC0zMDIyLDYgJiM0MzszMDIyLDIzIEBAIHN0YXRpYyBpbnQgbG9ja3Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIHZvaWQgKnYpCiAKIAljdXIgPSBobGlzdF9lbnRyeSh2LCBzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUsIGZsY19saW5rKTsKIAomIzQzOwkvKgomIzQzOwkgKiBPRkQgbG9ja3MgYXJlIHJlcG9ydGVkIHdpdGggcGlkIC0xLCBzbyB0aGUgZmlsdGVyIGJlbG93IGNhbm5vdCBzZWUKJiM0MzsJICogdGhlaXIgb3duZXI7IGZsY19waWQgaG9sZHMgdGhlIG93bmVyIHRnaWQsIHNvIGZpbHRlciBvbiBpdC4KJiM0MzsJICovCiYjNDM7CWlmICgoY3VyLSZndDtmbGNfZmxhZ3MgJmFtcDsgRkxfT0ZETENLKSAmYW1wOyZhbXA7IHByb2NfcGlkbnMgIT0gJmFtcDtpbml0X3BpZF9ucykgewomIzQzOwkJc3RydWN0IHBpZCAqcGlkOwomIzQzOwkJYm9vbCB2aXNpYmxlID0gZmFsc2U7CiYjNDM7CiYjNDM7CQlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CQlwaWQgPSBmaW5kX3BpZF9ucyhjdXItJmd0O2ZsY19waWQsICZhbXA7aW5pdF9waWRfbnMpOwomIzQzOwkJaWYgKHBpZCkKJiM0MzsJCQl2aXNpYmxlID0gcGlkX25yX25zKHBpZCwgcHJvY19waWRucykgIT0gMDsKJiM0MzsJCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwkJaWYgKCF2aXNpYmxlKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiAJaWYgKGxvY2tzX3RyYW5zbGF0ZV9waWQoY3VyLCBwcm9jX3BpZG5zKSA9PSAwKQogCQlyZXR1cm4gMDsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIyMgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIGRpcmVjdGl2ZXMsIHJlbmRlcmVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OgoKKipEaXZpbmcgaW50byB0aGUgYGZzL2xvY2tzLmNgIENvZGUqKgoKQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byB6b29tIGluIG9uIHRoZSBzcGVjaWZpYyBjb2RlIG1vZGlmaWNhdGlvbnMgd2l0aGluIGBmcy9sb2Nrcy5jYC4gS25vd2luZyBob3cgdGhpcyBzdWJzeXN0ZW0gd29ya3MsIEkgd2FudCB0byBlc3RhYmxpc2ggc29tZSBjb250ZXh0LiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O0xldCYjMzk7cyBzdGFydCBieSBzY3J1dGluaXppbmcgdGhlIHBhdGNoIGl0c2VsZiwgdGhlbiBicm9hZGVuIHRoZSBzY29wZSB0byBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIHRoYXQgZmlsZSwgYGZzL2xvY2tzLmNgLiYjMzQ7IEl0JiMzOTtzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSAmIzM0O3doeSYjMzQ7IGJlaGluZCBhbnkgY2hhbmdlLiBPZnRlbiB0aGUgc3Vycm91bmRpbmcgY29kZSB3aWxsIGV4cGxhaW4gdGhlIG1vdGl2YXRpb24gZm9yIHRoZSBjb2RlLiBUaGlzIGdpdmVzIG1lIGEgZ29vZCBwbGFjZSB0byBzdGFydC4gQW5kIG9mIGNvdXJzZSwgc2luY2UgSSBrbm93IHRoZSBjb2RlIHByZXR0eSB3ZWxsLCBJIHNob3VsZCBzdGFydCBhdCBsaW5lIDMwMjIuIEkgY2FuIHN0YXJ0IGJ5IGluc3BlY3RpbmcgaXQgZm9yIGEgZ29vZCBwbGFjZSB0byBiZWdpbi4gVGhlbiBJIGNhbiB1c2UgYGdpdCBibGFtZWAgb3IgbXkgZmF2b3JpdGUgY29kZSBleHBsb3JhdGlvbiB0b29scyB0byBpbnZlc3RpZ2F0ZSwgc28gSSBjYW4gc2VlIHdoYXQgb3RoZXIgY2hhbmdlcyBhcmUgcmVsYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9sb2Nrcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMDAwOlx0XG4zMDAxOlx0XHQvKiBOVUxMIG5vZGUgb3Igcm9vdCBub2RlICovXG4zMDAyOlx0XHRpZiAobm9kZSA9PSBOVUxMIHx8IG5vZGUtXHUwMDNlZmxjX2Jsb2NrZXIgPT0gTlVMTClcbjMwMDM6XHRcdFx0cmV0dXJuIE5VTEw7XG4zMDA0Olx0XG4zMDA1Olx0XHQvKiBOZXh0IG1lbWJlciBpbiB0aGUgbGlua2VkIGxpc3QgY291bGQgYmUgaXRzZWxmICovXG4zMDA2Olx0XHR0bXAgPSBsaXN0X25leHRfZW50cnkobm9kZSwgZmxjX2Jsb2NrZWRfbWVtYmVyKTtcbjMwMDc6XHRcdGlmIChsaXN0X2VudHJ5X2lzX2hlYWQodG1wLCBcdTAwMjZub2RlLVx1MDAzZWZsY19ibG9ja2VyLVx1MDAzZWZsY19ibG9ja2VkX3JlcXVlc3RzLFxuMzAwODpcdFx0XHRcdCAgICAgICBmbGNfYmxvY2tlZF9tZW1iZXIpXG4zMDA5Olx0XHRcdHx8IHRtcCA9PSBub2RlKSB7XG4zMDEwOlx0XHRcdHJldHVybiBOVUxMO1xuMzAxMTpcdFx0fVxuMzAxMjpcdFxuMzAxMzpcdFx0cmV0dXJuIHRtcDtcbjMwMTQ6XHR9XG4zMDE1Olx0XG4zMDE2Olx0c3RhdGljIGludCBsb2Nrc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqZiwgdm9pZCAqdilcbjMwMTc6XHR7XG4zMDE4Olx0XHRzdHJ1Y3QgbG9ja3NfaXRlcmF0b3IgKml0ZXIgPSBmLVx1MDAzZXByaXZhdGU7XG4zMDE5Olx0XHRzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmN1ciwgKnRtcDtcbjMwMjA6XHRcdHN0cnVjdCBwaWRfbmFtZXNwYWNlICpwcm9jX3BpZG5zID0gcHJvY19waWRfbnMoZmlsZV9pbm9kZShmLVx1MDAzZWZpbGUpLVx1MDAzZWlfc2IpO1xuMzAyMTpcdFx0aW50IGxldmVsID0gMDtcbjMwMjI6XHRcbjMwMjM6XHRcdGN1ciA9IGhsaXN0X2VudHJ5KHYsIHN0cnVjdCBmaWxlX2xvY2tfY29yZSwgZmxjX2xpbmspO1xuMzAyNDpcdFxuMzAyNTpcdFx0LypcbjMwMjY6XHRcdCAqIE9GRCBsb2NrcyBhcmUgcmVwb3J0ZWQgd2l0aCBwaWQgLTEsIHNvIHRoZSBmaWx0ZXIgYmVsb3cgY2Fubm90IHNlZVxuMzAyNzpcdFx0ICogdGhlaXIgb3duZXI7IGZsY19waWQgaG9sZHMgdGhlIG93bmVyIHRnaWQsIHNvIGZpbHRlciBvbiBpdC5cbjMwMjg6XHRcdCAqL1xuMzAyOTpcdFx0aWYgKChjdXItXHUwMDNlZmxjX2ZsYWdzIFx1MDAyNiBGTF9PRkRMQ0spIFx1MDAyNlx1MDAyNiBwcm9jX3BpZG5zICE9IFx1MDAyNmluaXRfcGlkX25zKSB7XG4zMDMwOlx0XHRcdHN0cnVjdCBwaWQgKnBpZDtcbjMwMzE6XHRcdFx0Ym9vbCB2aXNpYmxlID0gZmFsc2U7XG4zMDMyOlx0XG4zMDMzOlx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbjMwMzQ6XHRcdFx0cGlkID0gZmluZF9waWRfbnMoY3VyLVx1MDAzZWZsY19waWQsIFx1MDAyNmluaXRfcGlkX25zKTtcbjMwMzU6XHRcdFx0aWYgKHBpZClcbjMwMzY6XHRcdFx0XHR2aXNpYmxlID0gcGlkX25yX25zKHBpZCwgcHJvY19waWRucykgIT0gMDtcbjMwMzc6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4zMDM4Olx0XHRcdGlmICghdmlzaWJsZSlcbjMwMzk6XHRcdFx0XHRyZXR1cm4gMDtcbjMwNDA6XHRcdH1cbjMwNDE6XHRcbjMwNDI6XHRcdGlmIChsb2Nrc190cmFuc2xhdGVfcGlkKGN1ciwgcHJvY19waWRucykgPT0gMClcbjMwNDM6XHRcdFx0cmV0dXJuIDA7XG4zMDQ0Olx0XG4zMDQ1Olx0XHQvKiBWaWV3IHRoaXMgY3Jvc3NlZCBsaW5rZWQgbGlzdCBhcyBhIGJpbmFyeSB0cmVlLCB0aGUgZmlyc3QgbWVtYmVyIG9mIGZsY19ibG9ja2VkX3JlcXVlc3RzXG4zMDQ2Olx0XHQgKiBpcyB0aGUgbGVmdCBjaGlsZCBvZiBjdXJyZW50IG5vZGUsIHRoZSBuZXh0IHNpbGliaW5nIGluIGZsY19ibG9ja2VkX21lbWJlciBpcyB0aGVcbjMwNDc6XHRcdCAqIHJpZ2h0IGNoaWxkLCB3ZSBjYW4gYWxzZSBnZXQgdGhlIHBhcmVudCBvZiBjdXJyZW50IG5vZGUgZnJvbSBmbGNfYmxvY2tlciwgc28gdGhpc1xuMzA0ODpcdFx0ICogcXVlc3Rpb24gYmVjb21lcyB0cmF2ZXJzYWwgb2YgYSBiaW5hcnkgdHJlZVxuMzA0OTpcdFx0ICovXG4zMDUwOlx0XHR3aGlsZSAoY3VyICE9IE5VTEwpIHtcbjMwNTE6XHRcdFx0aWYgKGxldmVsKVxuMzA1MjpcdFx0XHRcdGxvY2tfZ2V0X3N0YXR1cyhmLCBjdXIsIGl0ZXItXHUwMDNlbGlfcG9zLCBcJiMzNDstXHUwMDNlIFwmIzM0OywgbGV2ZWwpO1xuMzA1MzpcdFx0XHRlbHNlXG4zMDU0Olx0XHRcdFx0bG9ja19nZXRfc3RhdHVzKGYsIGN1ciwgaXRlci1cdTAwM2VsaV9wb3MsIFwmIzM0O1wmIzM0OywgbGV2ZWwpO1xuMzA1NTpcdFxuMzA1NjpcdFx0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2Y3VyLVx1MDAzZWZsY19ibG9ja2VkX3JlcXVlc3RzKSkge1xuMzA1NzpcdFx0XHRcdC8qIFR1cm4gbGVmdCAqL1xuMzA1ODpcdFx0XHRcdGN1ciA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbChcdTAwMjZjdXItXHUwMDNlZmxjX2Jsb2NrZWRfcmVxdWVzdHMsXG4zMDU5Olx0XHRcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBmaWxlX2xvY2tfY29yZSxcbjMwNjA6XHRcdFx0XHRcdFx0XHQgICAgICAgZmxjX2Jsb2NrZWRfbWVtYmVyKTtcbjMwNjE6XHRcdFx0XHRsZXZlbCYjNDM7JiM0Mzs7XG4zMDYyOlx0XHRcdH0gZWxzZSB7XG4zMDYzOlx0XHRcdFx0LyogVHVybiByaWdodCAqL1xuMzA2NDpcdFx0XHRcdHRtcCA9IGdldF9uZXh0X2Jsb2NrZWRfbWVtYmVyKGN1cik7XG4zMDY1Olx0XHRcdFx0LyogRmFsbCBiYWNrIHRvIHBhcmVudCBub2RlICovXG4zMDY2Olx0XHRcdFx0d2hpbGUgKHRtcCA9PSBOVUxMIFx1MDAyNlx1MDAyNiBjdXItXHUwMDNlZmxjX2Jsb2NrZXIgIT0gTlVMTCkge1xuMzA2NzpcdFx0XHRcdFx0Y3VyID0gY3VyLVx1MDAzZWZsY19ibG9ja2VyO1xuMzA2ODpcdFx0XHRcdFx0bGV2ZWwtLTtcbjMwNjk6XHRcdFx0XHRcdHRtcCA9IGdldF9uZXh0X2Jsb2NrZWRfbWVtYmVyKGN1cik7XG4zMDcwOlx0XHRcdFx0fVxuMzA3MTpcdFx0XHRcdGN1ciA9IHRtcDtcbjMwNzI6XHRcdFx0fVxuMzA3MzpcdFx0fVxuMzA3NDpcdFxuMzA3NTpcdFx0cmV0dXJuIDA7XG4zMDc2Olx0fVxuMzA3NzpcdFxuMzA3ODpcdHN0YXRpYyB2b2lkIF9fc2hvd19mZF9sb2NrcyhzdHJ1Y3Qgc2VxX2ZpbGUgKmYsXG4zMDc5Olx0XHRcdFx0c3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgaW50ICppZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc0NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgbG9ja3NfdHJhbnNsYXRlX3BpZGAgYW5kIGBsb2NrX2dldF9zdGF0dXNgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb25hbGl0eSBvZiBgbG9ja3NfdHJhbnNsYXRlX3BpZGAgYW5kIGBsb2NrX2dldF9zdGF0dXNgLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSAqZG9pbmcqLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgYGxvY2tzX3RyYW5zbGF0ZV9waWRgIGlzIHByb2JhYmx5IGludm9sdmVkIGluIHNvbWUgZm9ybSBvZiBwcm9jZXNzIElEIG1hcHBpbmcgb3IgdHJhbnNsYXRpb24gcmVsYXRlZCB0byBsb2NrcywgcGVyaGFwcyB3aXRoaW4gYSBkaXN0cmlidXRlZCBsb2NraW5nIHN5c3RlbSwgb3IgbWF5YmUgaXQgaXMgcGFydCBvZiBob3cgdGhlIGtlcm5lbCBtYW5hZ2VzIGxvY2tzLiBgbG9ja19nZXRfc3RhdHVzYCBvYnZpb3VzbHkgc291bmRzIGxpa2UgaXQmIzM5O3MgcXVlcnlpbmcgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYSBsb2NrLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hldGhlciBpdHMgcmV0cmlldmluZyBkYXRhIGZyb20gdGhlIGNhY2hlLCBvciB0aGUgZGV2aWNlLCBvciB3aGV0aGVyIHRoYXQgaXMgYW4gb3B0aW1pemF0aW9uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBkZXRhaWxzIGxpa2Ugd2hhdCBraW5kIG9mIGluZm9ybWF0aW9uIHRoZXkgcHJvdmlkZSAoZS5nLiwgb3duZXIgUElELCBsb2NrIHR5cGUsIGNvbnRlbnRpb24gZGV0YWlscywgd2FpdCBxdWV1ZSBzdGF0dXMpLiBEZXBlbmRpbmcgb24gdGhlIGNvbnRleHQsIHRoaXMgY291bGQgYmUgY3J1Y2lhbCBmb3IgZGVidWdnaW5nIGxvY2sgY29udGVudGlvbiBpc3N1ZXMsIHBlcmZvcm1hbmNlIHByb2ZpbGluZywgb3IgZXZlbiB1bmRlcnN0YW5kaW5nIGhvdyBvdXIgb3duIGxvY2sgaW1wbGVtZW50YXRpb24gaXMgYmVoYXZpbmcuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBhbnkgYXNzdW1wdGlvbnMgYWJvdXQgdGhlc2UgZnVuY3Rpb25zIGFuZCB3aGVyZSB0aGV5IGZpdCBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bG9ja3NfdHJhbnNsYXRlX3BpZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2xvY2tzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbG9ja3MuYz0yMzY1PUVYUE9SVF9TWU1CT0xfR1BMKHZmc190ZXN0X2xvY2spO1xuLS1cbmZzL2xvY2tzLmMtMjM2Ny0vKipcbmZzL2xvY2tzLmM6MjM2ODogKiBsb2Nrc190cmFuc2xhdGVfcGlkIC0gdHJhbnNsYXRlIGEgZmlsZV9sb2NrJiMzOTtzIGZsX3BpZCBudW1iZXIgaW50byBhIG5hbWVzcGFjZVxuZnMvbG9ja3MuYy0yMzY5LSAqIEBmbDogVGhlIGZpbGVfbG9jayB3aG8mIzM5O3MgZmxfcGlkIHNob3VsZCBiZSB0cmFuc2xhdGVkXG4tLVxuZnMvbG9ja3MuYy0yMzczLSAqL1xuZnMvbG9ja3MuYzoyMzc0OnN0YXRpYyBwaWRfdCBsb2Nrc190cmFuc2xhdGVfcGlkKHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqZmwsIHN0cnVjdCBwaWRfbmFtZXNwYWNlICpucylcbmZzL2xvY2tzLmMtMjM3NS17XG4tLVxuZnMvbG9ja3MuYz0yNDAxPXN0YXRpYyBpbnQgcG9zaXhfbG9ja190b19mbG9jayhzdHJ1Y3QgZmxvY2sgKmZsb2NrLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbClcbmZzL2xvY2tzLmMtMjQwMi17XG5mcy9sb2Nrcy5jOjI0MDM6XHRmbG9jay1cdTAwM2VsX3BpZCA9IGxvY2tzX3RyYW5zbGF0ZV9waWQoXHUwMDI2ZmwtXHUwMDNlYywgdGFza19hY3RpdmVfcGlkX25zKGN1cnJlbnQpKTtcbmZzL2xvY2tzLmMtMjQwNC0jaWYgQklUU19QRVJfTE9ORyA9PSAzMlxuLS1cbmZzL2xvY2tzLmM9MjQyMz1zdGF0aWMgdm9pZCBwb3NpeF9sb2NrX3RvX2Zsb2NrNjQoc3RydWN0IGZsb2NrNjQgKmZsb2NrLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbClcbmZzL2xvY2tzLmMtMjQyNC17XG5mcy9sb2Nrcy5jOjI0MjU6XHRmbG9jay1cdTAwM2VsX3BpZCA9IGxvY2tzX3RyYW5zbGF0ZV9waWQoXHUwMDI2ZmwtXHUwMDNlYywgdGFza19hY3RpdmVfcGlkX25zKGN1cnJlbnQpKTtcbmZzL2xvY2tzLmMtMjQyNi1cdGZsb2NrLVx1MDAzZWxfc3RhcnQgPSBmbC1cdTAwM2VmbF9zdGFydDtcbi0tXG5mcy9sb2Nrcy5jPTI5MjE9c3RhdGljIHZvaWQgbG9ja19nZXRfc3RhdHVzKHN0cnVjdCBzZXFfZmlsZSAqZiwgc3RydWN0IGZpbGVfbG9ja19jb3JlICpmbGMsXG4tLVxuZnMvbG9ja3MuYy0yOTI5LVxuZnMvbG9ja3MuYzoyOTMwOlx0cGlkID0gbG9ja3NfdHJhbnNsYXRlX3BpZChmbGMsIHByb2NfcGlkbnMpO1xuZnMvbG9ja3MuYy0yOTMxLVxuLS1cbmZzL2xvY2tzLmM9MzAxNj1zdGF0aWMgaW50IGxvY2tzX3Nob3coc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICp2KVxuLS1cbmZzL2xvY2tzLmMtMzA0MS1cbmZzL2xvY2tzLmM6MzA0MjpcdGlmIChsb2Nrc190cmFuc2xhdGVfcGlkKGN1ciwgcHJvY19waWRucykgPT0gMClcbmZzL2xvY2tzLmMtMzA0My1cdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NjUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIExvY2sgTWFuYWdlbWVudCBGdW5jdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgbG9jayBtZWNoYW5pc21zIGFyZSB3b3JraW5nLCBwYXJ0aWN1bGFybHkgaG93IHRoZXkgcmVsYXRlIHRvIFBJRHMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgY29kZSBmb3IgYGxvY2tzX3RyYW5zbGF0ZV9waWRgLiBJJiMzOTttIGN1cmlvdXMgdG8gc2VlIGhvdyBhIHByb2Nlc3MgSUQgaXMgbWFwcGVkLCB0cmFuc2xhdGVkLCBvciB1c2VkIHdpdGhpbiB0aGUgbG9jayBtYW5hZ2VtZW50IGZyYW1ld29yay4gV2hhdCBhcmUgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgaXQgaW50ZXJhY3RzIHdpdGg/IElzIHRoZXJlIGFueSBQSUQtc3BlY2lmaWMgbG9naWMgd2l0aGluIHRoZSBsb2NraW5nIG1lY2hhbmlzbT8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhpcyBtaWdodCByZXZlYWwgaG93IHByb2Nlc3NlcyBjb250ZW5kIGZvciByZXNvdXJjZXMgYW5kIGhvdyB0aGUgc3lzdGVtIHRyYWNrcyBsb2NrIG93bmVyc2hpcC4KClRoZW4sIEkmIzM5O2xsIG5lZWQgdG8gaW1tZWRpYXRlbHkgZm9sbG93IHRoYXQgd2l0aCBhIGxvb2sgYXQgYGxvY2tfZ2V0X3N0YXR1c2AuIFRoaXMgc2hvdWxkIHNoZWQgbGlnaHQgb24gdGhlIHN0YXRlIG9mIHRoZSBsb2Nrcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaG93IHRoZSBsb2NrIHN0YXR1cyBpcyByZXRyaWV2ZWQsIHdoYXQgaW5mb3JtYXRpb24gaXMgbWFkZSBhdmFpbGFibGUgKG93bmVyIFBJRHMsIGN1cnJlbnQgc3RhdGUgbGlrZSBsb2NrZWQvdW5sb2NrZWQsIGFueSB3YWl0aW5nIHByb2Nlc3NlcyksIGFuZCB3aGF0IHRoZSByZXR1cm4gdmFsdWVzIG1lYW4uIFRoZSBjb21iaW5hdGlvbiBvZiB0aGVzZSB0d28gZnVuY3Rpb25zIHNob3VsZCBwcm92aWRlIGEgc29saWQgcGljdHVyZSBvZiBob3cgUElEJiMzOTtzIGFyZSBpbnRlZ3JhdGVkIGFuZCBob3cgbG9jayBzdGF0dXNlcyBhcmUgY2hlY2tlZCB3aXRoaW4gdGhlIGxvY2tpbmcgc3lzdGVtLiBVbmRlcnN0YW5kaW5nIHRoZSBzdGF0dXMgcXVlcnlpbmcgd2lsbCBkZWZpbml0ZWx5IGluZm9ybSBob3cgdG8gaW50ZXJwcmV0IHRoZSByZXN1bHRzIG9mIGBsb2Nrc190cmFuc2xhdGVfcGlkYC4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaG93IHRoZSBmcmFtZXdvcmsgcHJvdmlkZXMgYW5kIGludGVycHJldHMgbG9jayBzdGF0dXMgcmVsYXRpdmUgdG8gdGhlIHByb2Nlc3MgYXR0ZW1wdGluZyB0byBnYWluIGEgbG9jay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9sb2Nrcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjM2OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMzY4Olx0ICogbG9ja3NfdHJhbnNsYXRlX3BpZCAtIHRyYW5zbGF0ZSBhIGZpbGVfbG9jayYjMzk7cyBmbF9waWQgbnVtYmVyIGludG8gYSBuYW1lc3BhY2VcbjIzNjk6XHQgKiBAZmw6IFRoZSBmaWxlX2xvY2sgd2hvJiMzOTtzIGZsX3BpZCBzaG91bGQgYmUgdHJhbnNsYXRlZFxuMjM3MDpcdCAqIEBuczogVGhlIG5hbWVzcGFjZSBpbnRvIHdoaWNoIHRoZSBwaWQgc2hvdWxkIGJlIHRyYW5zbGF0ZWRcbjIzNzE6XHQgKlxuMjM3MjpcdCAqIFVzZWQgdG8gdHJhbnNsYXRlIGEgZmxfcGlkIGludG8gYSBuYW1lc3BhY2UgdmlydHVhbCBwaWQgbnVtYmVyXG4yMzczOlx0ICovXG4yMzc0Olx0c3RhdGljIHBpZF90IGxvY2tzX3RyYW5zbGF0ZV9waWQoc3RydWN0IGZpbGVfbG9ja19jb3JlICpmbCwgc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zKVxuMjM3NTpcdHtcbjIzNzY6XHRcdHBpZF90IHZucjtcbjIzNzc6XHRcdHN0cnVjdCBwaWQgKnBpZDtcbjIzNzg6XHRcbjIzNzk6XHRcdGlmIChmbC1cdTAwM2VmbGNfZmxhZ3MgXHUwMDI2IEZMX09GRExDSylcbjIzODA6XHRcdFx0cmV0dXJuIC0xO1xuMjM4MTpcdFxuMjM4MjpcdFx0LyogUmVtb3RlIGxvY2tzIHJlcG9ydCBhIG5lZ2F0aXZlIHBpZCB2YWx1ZSAqL1xuMjM4MzpcdFx0aWYgKGZsLVx1MDAzZWZsY19waWQgXHUwMDNjPSAwKVxuMjM4NDpcdFx0XHRyZXR1cm4gZmwtXHUwMDNlZmxjX3BpZDtcbjIzODU6XHRcbjIzODY6XHRcdC8qXG4yMzg3Olx0XHQgKiBJZiB0aGUgZmxvY2sgb3duZXIgcHJvY2VzcyBpcyBkZWFkIGFuZCBpdHMgcGlkIGhhcyBiZWVuIGFscmVhZHlcbjIzODg6XHRcdCAqIGZyZWVkLCB0aGUgdHJhbnNsYXRpb24gYmVsb3cgd29uJiMzOTt0IHdvcmssIGJ1dCB3ZSBzdGlsbCB3YW50IHRvIHNob3dcbjIzODk6XHRcdCAqIGZsb2NrIG93bmVyIHBpZCBudW1iZXIgaW4gaW5pdCBwaWRucy5cbjIzOTA6XHRcdCAqL1xuMjM5MTpcdFx0aWYgKG5zID09IFx1MDAyNmluaXRfcGlkX25zKVxuMjM5MjpcdFx0XHRyZXR1cm4gKHBpZF90KSBmbC1cdTAwM2VmbGNfcGlkO1xuMjM5MzpcdFxuMjM5NDpcdFx0cmN1X3JlYWRfbG9jaygpO1xuMjM5NTpcdFx0cGlkID0gZmluZF9waWRfbnMoZmwtXHUwMDNlZmxjX3BpZCwgXHUwMDI2aW5pdF9waWRfbnMpO1xuMjM5NjpcdFx0dm5yID0gcGlkX25yX25zKHBpZCwgbnMpO1xuMjM5NzpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4yMzk4Olx0XHRyZXR1cm4gdm5yO1xuMjM5OTpcdH1cbjI0MDA6XHRcbjI0MDE6XHRzdGF0aWMgaW50IHBvc2l4X2xvY2tfdG9fZmxvY2soc3RydWN0IGZsb2NrICpmbG9jaywgc3RydWN0IGZpbGVfbG9jayAqZmwpXG4yNDAyOlx0e1xuMjQwMzpcdFx0ZmxvY2stXHUwMDNlbF9waWQgPSBsb2Nrc190cmFuc2xhdGVfcGlkKFx1MDAyNmZsLVx1MDAzZWMsIHRhc2tfYWN0aXZlX3BpZF9ucyhjdXJyZW50KSk7XG4yNDA0Olx0I2lmIEJJVFNfUEVSX0xPTkcgPT0gMzJcbjI0MDU6XHRcdC8qXG4yNDA2Olx0XHQgKiBNYWtlIHN1cmUgd2UgY2FuIHJlcHJlc2VudCB0aGUgcG9zaXggbG9jayB2aWFcbjI0MDc6XHRcdCAqIGxlZ2FjeSAzMmJpdCBmbG9jay5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY1OAoJCQkJCQkJb3V0cHV0OiAxNDEKCQkJCQkJCXRob3VnaHRzOiA3MjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSAvcHJvYy9sb2NrcyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIG1vZGlmeWluZyBgbG9ja3Nfc2hvd2Agd2l0aGluIGBmcy9sb2Nrcy5jYCwgc3BlY2lmaWNhbGx5IGhvdyBgL3Byb2MvbG9ja3NgIGhhbmRsZXMgT3BlbiBGaWxlIERlc2NyaXB0b3IgKE9GRCkgbG9ja3MuIFRoZSBjb3JlIGlzc3VlIGlzIGFib3V0IFBJRCBuYW1lc3BhY2UgdmlzaWJpbGl0eS4gUHJldmlvdXNseSwgdGhlIHN5c3RlbSB3YXNuJiMzOTt0IHByb3Blcmx5IGZpbHRlcmluZyBPRkQgbG9ja3MgYmFzZWQgb24gdGhlaXIgb3duZXImIzM5O3MgUElEIG5hbWVzcGFjZS4gQmVjYXVzZSBvZiBob3cgT0ZEIGxvY2tzIGFyZSBpZGVudGlmaWVkICh3aXRoIHBpZCAtMSksIHRoZSBvbGQgYGxvY2tzX3RyYW5zbGF0ZV9waWRgIGZ1bmN0aW9uIGFsd2F5cyByZXR1cm5lZCBub24temVyby4gIFRoaXMgbWVhbnQgT0ZEIGxvY2tzIGZyb20gcHJvY2Vzc2VzIG5vdCBpbiB0aGUgY3VycmVudCBQSUQgbmFtZXNwYWNlIHdlcmUgc3RpbGwgYmVpbmcgc2hvd24gaW4gYC9wcm9jL2xvY2tzYCwgd2hpY2ggaXMgaW5jb3JyZWN0LgoKVGhpcyBwYXRjaCBhZGRyZXNzZXMgdGhhdC4gSXQgYWRkcyBhIGNoZWNrIHdpdGhpbiB0aGUgYGxvY2tzX3Nob3dgIGZ1bmN0aW9uLiBOb3csIGlmIGFuIE9GRCBsb2NrIGlzIGVuY291bnRlcmVkIChpbmRpY2F0ZWQgYnkgYEZMX09GRExDS2ApLCBhbmQgdGhlIHByb2Nlc3MgaXNuJiMzOTt0IGluIHRoZSBpbml0IFBJRCBuYW1lc3BhY2UsIGl0IHBlcmZvcm1zIGEgbG9va3VwIHVzaW5nIGBmaW5kX3BpZF9uc2AgdG8gZGV0ZXJtaW5lIGlmIHRoZSBvd25lciBvZiB0aGUgbG9jayAoaWRlbnRpZmllZCBieSBgY3VyLSZndDtmbGNfcGlkYCkgaXMgYWN0dWFsbHkgdmlzaWJsZSBpbiB0aGUgY3VycmVudCBgL3Byb2MvbG9ja3NgIG5hbWVzcGFjZSAoYHByb2NfcGlkbnNgKS4gVGhlIGByY3VfcmVhZF9sb2NrYCBhbmQgYHJjdV9yZWFkX3VubG9ja2AgY2FsbHMgZW5zdXJlIHRoaXMgaXMgZG9uZSBzYWZlbHkuIFRoZSBuZXcgYHZpc2libGVgIHZhcmlhYmxlIGRldGVybWluZXMgaWYgdGhlIGxvY2sgb3duZXIgaXMgdmlzaWJsZSwgYW5kIGlmIG5vdCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgMCwgbWVhbmluZyB0aGUgbG9jayBlbnRyeSBpc24mIzM5O3QgZGlzcGxheWVkIGluIGAvcHJvYy9sb2Nrc2AuCgpOb3csIGxldCYjMzk7cyB0aGluayBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIHBhdGNoIGlzbiYjMzk7dCBpbnRyb2R1Y2luZyBhbnkgcmlza3MuIEkgc2VlIGBzdHJ1Y3QgcGlkICpwaWRgIGFuZCBgYm9vbCB2aXNpYmxlID0gZmFsc2U7YCBhcmUgaW50cm9kdWNlZC4gQnV0IGB2aXNpYmxlYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkLCBhbmQgYHBpZGAgZWl0aGVyIGdldHMgYSB2YWx1ZSBmcm9tIGBmaW5kX3BpZF9uc2Agb3IgcmVtYWlucyBudWxsLiBUaGVyZSBhcmUgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gY29weWluZyB0byB1c2Vyc3BhY2Ugd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcywgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcywgYW5kIG5vIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhpcyBpcyBhbGwgY29udGFpbmVkIHdpdGhpbiBhIHNpbmdsZSBgbG9ja3Nfc2hvd2AgZnVuY3Rpb24sIHNvIGl0IGNhbiYjMzk7dCBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mIGFub3RoZXIgcGFydCBvZiB0aGUgc3lzdGVtIGFuZCwgdGhlcmVmb3JlLCBpcyB2ZXJ5IGxvY2FsaXplZC4gVGhlIG91dHB1dCBpcyBhIGBzZXFfZmlsZWAgb3V0cHV0IHRvIGAvcHJvYy9sb2Nrc2AsIHNvIHdlIGFyZSBub3QgZGVhbGluZyB3aXRoIGJ1ZmZlcnMuIFRoZXJlZm9yZSwgbm8sIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhc3BlY3RzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UuIEl0JiMzOTtzIHNpbXBseSBhYm91dCBuYW1lc3BhY2UgdmlzaWJpbGl0eSBmaWx0ZXJpbmcuCgpUaGlua2luZyBhYm91dCBLTVNBTiBzcGVjaWZpY2FsbHnigKYgTm8uIEtBU0FOIGlzIGltcG9ydGFudCBmb3IgdGhpcywgYXMgaXQgaGFuZGxlcyBnZW5lcmFsIG1lbW9yeSBzYWZldHksIGJ1dCB0aGlzIHBhdGNoIGRvZXNu4oCZdCBpbnRyb2R1Y2UgYW55IHJpc2tzIHNwZWNpZmljIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJJiMzOTttIGludHJvZHVjaW5nIGEgbG9jYWwgdmFyaWFibGUgYW5kIGEgUElEIGxvb2t1cCwgYWxsIHVuZGVyIGFuIFJDVSBsb2NrLCBzbyB0aGVyZSBhcmUgbm8gcGFydGlhbCBzdHJ1Y3QgaW5pdGlhbGl6YXRpb25zIG9yIGNvcGllcyB0byB1c2Vyc3BhY2UuCgpTbywgdGhlIHZlcmRpY3QgaXMgTmVlZHNLTVNBTjogZmFsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBsb2Nrc19zaG93YCBpbiBgZnMvbG9ja3MuY2AgdG8gZmlsdGVyIG91dCBvcGVuIGZpbGUgZGVzY3JpcHRpb24gKE9GRCkgbG9ja3MgZnJvbSBgL3Byb2MvbG9ja3NgIHdoZW4gdmlld2VkIGZyb20gYSBub24taW5pdCBQSUQgbmFtZXNwYWNlIGlmIHRoZSBvd25pbmcgUElEIGlzIG5vdCB2aXNpYmxlIHdpdGhpbiB0aGF0IG5hbWVzcGFjZS5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlLCBhbmQgaW5pdGlhbGl6ZXMgYWxsIGxvY2FsIHZhcmlhYmxlcyAoYHZpc2libGUgPSBmYWxzZWApLiBJdCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RocyBvciBjcmVhdGUgYW55IHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBsb2Nrc19zaG93YCBpbiBgZnMvbG9ja3MuY2AgdG8gZmlsdGVyIG91dCBvcGVuIGZpbGUgZGVzY3JpcHRpb24gKE9GRCkgbG9ja3MgZnJvbSBgL3Byb2MvbG9ja3NgIHdoZW4gdmlld2VkIGZyb20gYSBub24taW5pdCBQSUQgbmFtZXNwYWNlIGlmIHRoZSBvd25pbmcgUElEIGlzIG5vdCB2aXNpYmxlIHdpdGhpbiB0aGF0IG5hbWVzcGFjZS5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlLCBhbmQgaW5pdGlhbGl6ZXMgYWxsIGxvY2FsIHZhcmlhYmxlcyAoYHZpc2libGUgPSBmYWxzZWApLiBJdCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RocyBvciBjcmVhdGUgYW55IHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MzA6NTMuMjg4Njg4NTFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDk4NzYwNTM4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGSUxFX0xPQ0tJTkdcIixcbiAgICBcIlBST0NfRlNcIixcbiAgICBcIk5BTUVTUEFDRVNcIixcbiAgICBcIlBJRF9OU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxvY2tzX3Nob3dcIixcbiAgICBcImZjbnRsX3NldGxrXCIsXG4gICAgXCJmY250bF9nZXRsa1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGxvY2tzX3Nob3dgIGluIGBmcy9sb2Nrcy5jYCB0byBmaWx0ZXIgb3V0IG9wZW4gZmlsZSBkZXNjcmlwdGlvbiAoT0ZEKSBsb2NrcyBmcm9tIGAvcHJvYy9sb2Nrc2Agd2hlbiB2aWV3ZWQgZnJvbSBhIG5vbi1pbml0IFBJRCBuYW1lc3BhY2UgaWYgdGhlIG93bmluZyBQSUQgaXMgbm90IHZpc2libGUgd2l0aGluIHRoYXQgbmFtZXNwYWNlLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzIG9yIHBhZGRpbmcgdG8gdXNlciBzcGFjZSwgYW5kIGluaXRpYWxpemVzIGFsbCBsb2NhbCB2YXJpYWJsZXMgKGB2aXNpYmxlID0gZmFsc2VgKS4gSXQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aHMgb3IgY3JlYXRlIGFueSByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGxvY2tzX3Nob3coKWAgaW4gZnMvbG9ja3MuYyB0byBwcm9wZXJseSBmaWx0ZXIgT3BlbiBGaWxlIERlc2NyaXB0aW9uIChPRkQpIGxvY2tzIHdoZW4gYC9wcm9jL2xvY2tzYCBpcyByZWFkIGZyb20gd2l0aGluIGEgbm9uLWluaXRpYWwgUElEIG5hbWVzcGFjZS4gQmVjYXVzZSBPRkQgbG9ja3MgcmVwb3J0IHBpZCAtMSwgcHJldmlvdXMgbmFtZXNwYWNlIGZpbHRlcmluZyBmYWlsZWQgdG8gY29uY2VhbCBPRkQgbG9ja3Mgb3duZWQgYnkgcHJvY2Vzc2VzIG91dHNpZGUgdGhlIFBJRCBuYW1lc3BhY2UuIFRoZSBwYXRjaCBhZGRzIFJDVS1iYXNlZCBQSUQgbG9va3VwIGFuZCBuYW1lc3BhY2UgdmlzaWJpbGl0eSBjaGVja3Mgb24gYGZsY19waWRgLiBUaGlzIGNoYW5nZXMgcmVhY2hhYmxlIGNvcmUgVkZTIC8gcHJvY2ZzIGxvZ2ljIHRoYXQgY2FuIGJlIGV4ZXJjaXNlZCB2aWEgZmlsZSBsb2NraW5nIHN5c2NhbGxzIGFuZCBwcm9jZnMgcmVhZHMgYWNyb3NzIFBJRCBuYW1lc3BhY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjozMDo1My4yODg2OTY5N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5OTc5ODg1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg5YWY2YWVkZDg0MzRhNzRkMTcxYzdmNGM0MjRhOGRiYzRjNzU1YzJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBTZXAgMiAyMjozMDo1MSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9sb2Nrcy5jIGIvZnMvbG9ja3MuY1xcbmluZGV4IDZlNGZmN2ZjZWMwNTMuLmRiMTc4NzlkOTMxOTUgMTAwNjQ0XFxuLS0tIGEvZnMvbG9ja3MuY1xcbisrKyBiL2ZzL2xvY2tzLmNcXG5AQCAtMzAyMiw2ICszMDIyLDIzIEBAIHN0YXRpYyBpbnQgbG9ja3Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIHZvaWQgKnYpXFxuIFxcbiBcXHRjdXIgPSBobGlzdF9lbnRyeSh2LCBzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUsIGZsY19saW5rKTtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIE9GRCBsb2NrcyBhcmUgcmVwb3J0ZWQgd2l0aCBwaWQgLTEsIHNvIHRoZSBmaWx0ZXIgYmVsb3cgY2Fubm90IHNlZVxcbitcXHQgKiB0aGVpciBvd25lcjsgZmxjX3BpZCBob2xkcyB0aGUgb3duZXIgdGdpZCwgc28gZmlsdGVyIG9uIGl0LlxcbitcXHQgKi9cXG4rXFx0aWYgKChjdXItXFx1MDAzZWZsY19mbGFncyBcXHUwMDI2IEZMX09GRExDSykgXFx1MDAyNlxcdTAwMjYgcHJvY19waWRucyAhPSBcXHUwMDI2aW5pdF9waWRfbnMpIHtcXG4rXFx0XFx0c3RydWN0IHBpZCAqcGlkO1xcbitcXHRcXHRib29sIHZpc2libGUgPSBmYWxzZTtcXG4rXFxuK1xcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0XFx0cGlkID0gZmluZF9waWRfbnMoY3VyLVxcdTAwM2VmbGNfcGlkLCBcXHUwMDI2aW5pdF9waWRfbnMpO1xcbitcXHRcXHRpZiAocGlkKVxcbitcXHRcXHRcXHR2aXNpYmxlID0gcGlkX25yX25zKHBpZCwgcHJvY19waWRucykgIT0gMDtcXG4rXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdFxcdGlmICghdmlzaWJsZSlcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChsb2Nrc190cmFuc2xhdGVfcGlkKGN1ciwgcHJvY19waWRucykgPT0gMClcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjozMDo1NC44OTE0NjEyNzNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjY1OTQ5MjU4NDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZJTEVfTE9DS0lOR1wiLFxuICAgIFwiUFJPQ19GU1wiLFxuICAgIFwiTkFNRVNQQUNFU1wiLFxuICAgIFwiUElEX05TXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibG9ja3Nfc2hvd1wiLFxuICAgIFwiZmNudGxfc2V0bGtcIixcbiAgICBcImZjbnRsX2dldGxrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGxvY2tzX3Nob3coKWAgaW4gZnMvbG9ja3MuYyB0byBwcm9wZXJseSBmaWx0ZXIgT3BlbiBGaWxlIERlc2NyaXB0aW9uIChPRkQpIGxvY2tzIHdoZW4gYC9wcm9jL2xvY2tzYCBpcyByZWFkIGZyb20gd2l0aGluIGEgbm9uLWluaXRpYWwgUElEIG5hbWVzcGFjZS4gQmVjYXVzZSBPRkQgbG9ja3MgcmVwb3J0IHBpZCAtMSwgcHJldmlvdXMgbmFtZXNwYWNlIGZpbHRlcmluZyBmYWlsZWQgdG8gY29uY2VhbCBPRkQgbG9ja3Mgb3duZWQgYnkgcHJvY2Vzc2VzIG91dHNpZGUgdGhlIFBJRCBuYW1lc3BhY2UuIFRoZSBwYXRjaCBhZGRzIFJDVS1iYXNlZCBQSUQgbG9va3VwIGFuZCBuYW1lc3BhY2UgdmlzaWJpbGl0eSBjaGVja3Mgb24gYGZsY19waWRgLiBUaGlzIGNoYW5nZXMgcmVhY2hhYmxlIGNvcmUgVkZTIC8gcHJvY2ZzIGxvZ2ljIHRoYXQgY2FuIGJlIGV4ZXJjaXNlZCB2aWEgZmlsZSBsb2NraW5nIHN5c2NhbGxzIGFuZCBwcm9jZnMgcmVhZHMgYWNyb3NzIFBJRCBuYW1lc3BhY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4OWFmNmFlZGQ4NDM0YTc0ZDE3MWM3ZjRjNDI0YThkYmM0Yzc1NWMyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAyMjozMDo1MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2xvY2tzLmMgYi9mcy9sb2Nrcy5jXG5pbmRleCA2ZTRmZjdmY2VjMDUzLi5kYjE3ODc5ZDkzMTk1IDEwMDY0NFxuLS0tIGEvZnMvbG9ja3MuY1xuKysrIGIvZnMvbG9ja3MuY1xuQEAgLTMwMjIsNiArMzAyMiwyMyBAQCBzdGF0aWMgaW50IGxvY2tzX3Nob3coc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICp2KVxuIFxuIFx0Y3VyID0gaGxpc3RfZW50cnkodiwgc3RydWN0IGZpbGVfbG9ja19jb3JlLCBmbGNfbGluayk7XG4gXG4rXHQvKlxuK1x0ICogT0ZEIGxvY2tzIGFyZSByZXBvcnRlZCB3aXRoIHBpZCAtMSwgc28gdGhlIGZpbHRlciBiZWxvdyBjYW5ub3Qgc2VlXG4rXHQgKiB0aGVpciBvd25lcjsgZmxjX3BpZCBob2xkcyB0aGUgb3duZXIgdGdpZCwgc28gZmlsdGVyIG9uIGl0LlxuK1x0ICovXG4rXHRpZiAoKGN1ci1cdTAwM2VmbGNfZmxhZ3MgXHUwMDI2IEZMX09GRExDSykgXHUwMDI2XHUwMDI2IHByb2NfcGlkbnMgIT0gXHUwMDI2aW5pdF9waWRfbnMpIHtcbitcdFx0c3RydWN0IHBpZCAqcGlkO1xuK1x0XHRib29sIHZpc2libGUgPSBmYWxzZTtcbitcbitcdFx0cmN1X3JlYWRfbG9jaygpO1xuK1x0XHRwaWQgPSBmaW5kX3BpZF9ucyhjdXItXHUwMDNlZmxjX3BpZCwgXHUwMDI2aW5pdF9waWRfbnMpO1xuK1x0XHRpZiAocGlkKVxuK1x0XHRcdHZpc2libGUgPSBwaWRfbnJfbnMocGlkLCBwcm9jX3BpZG5zKSAhPSAwO1xuK1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcdFx0aWYgKCF2aXNpYmxlKVxuK1x0XHRcdHJldHVybiAwO1xuK1x0fVxuK1xuIFx0aWYgKGxvY2tzX3RyYW5zbGF0ZV9waWQoY3VyLCBwcm9jX3BpZG5zKSA9PSAwKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjMwOjU0Ljg5MTQ2MzQ5M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY2NDc4NjU3OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgbG9ja3Nfc2hvd2AgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggaXMgZG9pbmcgaW4gYGZzL2xvY2tzLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBsb2Nrc19zaG93YCBmdW5jdGlvbi4gU2VlbXMgbGlrZSBpdCdzIGFkZGluZyBzb21lIGZpbHRlcmluZyBsb2dpYy4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IGl0J3MgcmVsYXRlZCB0byBob3cgZmlsZSBsb2NrcyBhcmUgZGlzcGxheWVkIGluIGEgYHByb2Nmc2AgY29udGV4dC5cblxuTG9va2luZyBhdCB0aGUgY29kZSwgaXQgbG9va3MgbGlrZSB0aGVyZSdzIGEgbmV3IGNoZWNrIGRlYWxpbmcgd2l0aCBcIk9GRCBsb2Nrc1wiLiBUaGUgY29tbWVudCBtZW50aW9ucyB0aGF0IHRoZXNlIGxvY2tzIGFyZSByZXBvcnRlZCB3aXRoIGEgUElEIG9mIC0xLiBTbywgdGhlIG5vcm1hbCBQSUQtYmFzZWQgZmlsdGVyaW5nIGlzbid0IGdvaW5nIHRvIHdvcmsgZm9yIHRoZXNlLiAgVGhlIHBhdGNoIHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgdGhpcyBieSBjaGVja2luZyBgZmxjX3BpZGAgKHdoaWNoIHRoZSBjb21tZW50IHNheXMgaG9sZHMgdGhlIG93bmVyJ3MgdGdpZCkuXG5cbkl0IHNlZW1zIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaW52b2x2ZXMgYSBjb25kaXRpb25hbCBibG9jazpcblxuYGBgY1xuXHRpZiAoKGN1ci1cdTAwM2VmbGNfZmxhZ3MgXHUwMDI2IEZMX09GRExDSykgXHUwMDI2XHUwMDI2IHByb2NfcGlkbnMgIT0gXHUwMDI2aW5pdF9waWRfbnMpIHtcblx0XHRzdHJ1Y3QgcGlkICpwaWQ7XG5cdFx0Ym9vbCB2aXNpYmxlID0gZmFsc2U7XG5cblx0XHRyY3VfcmVhZF9sb2NrKCk7XG5cdFx0cGlkID0gZmluZF9waWRfbnMoY3VyLVx1MDAzZWZsY19waWQsIFx1MDAyNmluaXRfcGlkX25zKTtcblx0XHRpZiAocGlkKVxuXHRcdFx0dmlzaWJsZSA9IHBpZF9ucl9ucyhwaWQsIHByb2NfcGlkbnMpICE9IDA7XG5cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG5cdFx0aWYgKCF2aXNpYmxlKVxuXHRcdFx0cmV0dXJuIDA7XG5cdH1cbmBgYFxuXG5JZiBpdCdzIGFuIE9GRCBsb2NrIGFuZCB3ZSdyZSBub3QgaW4gdGhlIGluaXRpYWwgUElEIG5hbWVzcGFjZSwgdGhlIGNvZGUgdGhlbiBsb29rcyB1cCB0aGUgUElEIGFzc29jaWF0ZWQgd2l0aCB0aGUgYGZsY19waWRgICh3aGljaCBpcyB0aGUgb3duZXIncyB0Z2lkKSB3aXRoaW4gdGhlIGluaXRpYWwgUElEIG5hbWVzcGFjZS4gIElmIGl0IGZpbmRzIGEgUElEIGFuZCB0aGF0IFBJRCBpc24ndCB2aXNpYmxlIGluIHRoZSBjdXJyZW50IGBwcm9jX3BpZG5zYCwgdGhlbiB0aGUgcGF0Y2ggaXMgZ29pbmcgdG8gc2tpcCB0aGUgY3VycmVudCBsb2NrIGFuZCByZXR1cm4gMC4gVGhpcyBzdWdnZXN0cyB3ZSBhcmUgZmlsdGVyaW5nLCBhbmQgd2UgZG9uJ3Qgd2FudCB0byBkaXNwbGF5IGxvY2tzIHdob3NlIG93bmVyIGlzIG5vdCB2aXNpYmxlIHRvIHRoZSBjdXJyZW50IFBJRCBuYW1lc3BhY2UuXG5cbkkgdGhpbmsgSSBuZWVkIHRvIHVzZSBlaXRoZXIgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGZpbmQgb3V0IHdoYXQgdGhlc2UgbmFtZXNwYWNlcyBhcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMjUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjozMTowMS41MzkzMzE2NjNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODc4OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvbG9ja3MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMDEwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMDEwOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjMwMTE6XFx0XFx0fVxcbjMwMTI6XFx0XFxuMzAxMzpcXHRcXHRyZXR1cm4gdG1wO1xcbjMwMTQ6XFx0fVxcbjMwMTU6XFx0XFxuMzAxNjpcXHRzdGF0aWMgaW50IGxvY2tzX3Nob3coc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICp2KVxcbjMwMTc6XFx0e1xcbjMwMTg6XFx0XFx0c3RydWN0IGxvY2tzX2l0ZXJhdG9yICppdGVyID0gZi1cXHUwMDNlcHJpdmF0ZTtcXG4zMDE5OlxcdFxcdHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqY3VyLCAqdG1wO1xcbjMwMjA6XFx0XFx0c3RydWN0IHBpZF9uYW1lc3BhY2UgKnByb2NfcGlkbnMgPSBwcm9jX3BpZF9ucyhmaWxlX2lub2RlKGYtXFx1MDAzZWZpbGUpLVxcdTAwM2VpX3NiKTtcXG4zMDIxOlxcdFxcdGludCBsZXZlbCA9IDA7XFxuMzAyMjpcXHRcXG4zMDIzOlxcdFxcdGN1ciA9IGhsaXN0X2VudHJ5KHYsIHN0cnVjdCBmaWxlX2xvY2tfY29yZSwgZmxjX2xpbmspO1xcbjMwMjQ6XFx0XFxuMzAyNTpcXHRcXHQvKlxcbjMwMjY6XFx0XFx0ICogT0ZEIGxvY2tzIGFyZSByZXBvcnRlZCB3aXRoIHBpZCAtMSwgc28gdGhlIGZpbHRlciBiZWxvdyBjYW5ub3Qgc2VlXFxuMzAyNzpcXHRcXHQgKiB0aGVpciBvd25lcjsgZmxjX3BpZCBob2xkcyB0aGUgb3duZXIgdGdpZCwgc28gZmlsdGVyIG9uIGl0LlxcbjMwMjg6XFx0XFx0ICovXFxuMzAyOTpcXHRcXHRpZiAoKGN1ci1cXHUwMDNlZmxjX2ZsYWdzIFxcdTAwMjYgRkxfT0ZETENLKSBcXHUwMDI2XFx1MDAyNiBwcm9jX3BpZG5zICE9IFxcdTAwMjZpbml0X3BpZF9ucykge1xcbjMwMzA6XFx0XFx0XFx0c3RydWN0IHBpZCAqcGlkO1xcbjMwMzE6XFx0XFx0XFx0Ym9vbCB2aXNpYmxlID0gZmFsc2U7XFxuMzAzMjpcXHRcXG4zMDMzOlxcdFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4zMDM0OlxcdFxcdFxcdHBpZCA9IGZpbmRfcGlkX25zKGN1ci1cXHUwMDNlZmxjX3BpZCwgXFx1MDAyNmluaXRfcGlkX25zKTtcXG4zMDM1OlxcdFxcdFxcdGlmIChwaWQpXFxuMzAzNjpcXHRcXHRcXHRcXHR2aXNpYmxlID0gcGlkX25yX25zKHBpZCwgcHJvY19waWRucykgIT0gMDtcXG4zMDM3OlxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjMwMzg6XFx0XFx0XFx0aWYgKCF2aXNpYmxlKVxcbjMwMzk6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuMzA0MDpcXHRcXHR9XFxuMzA0MTpcXHRcXG4zMDQyOlxcdFxcdGlmIChsb2Nrc190cmFuc2xhdGVfcGlkKGN1ciwgcHJvY19waWRucykgPT0gMClcXG4zMDQzOlxcdFxcdFxcdHJldHVybiAwO1xcbjMwNDQ6XFx0XFxuMzA0NTpcXHRcXHQvKiBWaWV3IHRoaXMgY3Jvc3NlZCBsaW5rZWQgbGlzdCBhcyBhIGJpbmFyeSB0cmVlLCB0aGUgZmlyc3QgbWVtYmVyIG9mIGZsY19ibG9ja2VkX3JlcXVlc3RzXFxuMzA0NjpcXHRcXHQgKiBpcyB0aGUgbGVmdCBjaGlsZCBvZiBjdXJyZW50IG5vZGUsIHRoZSBuZXh0IHNpbGliaW5nIGluIGZsY19ibG9ja2VkX21lbWJlciBpcyB0aGVcXG4zMDQ3OlxcdFxcdCAqIHJpZ2h0IGNoaWxkLCB3ZSBjYW4gYWxzZSBnZXQgdGhlIHBhcmVudCBvZiBjdXJyZW50IG5vZGUgZnJvbSBmbGNfYmxvY2tlciwgc28gdGhpc1xcbjMwNDg6XFx0XFx0ICogcXVlc3Rpb24gYmVjb21lcyB0cmF2ZXJzYWwgb2YgYSBiaW5hcnkgdHJlZVxcbjMwNDk6XFx0XFx0ICovXFxuMzA1MDpcXHRcXHR3aGlsZSAoY3VyICE9IE5VTEwpIHtcXG4zMDUxOlxcdFxcdFxcdGlmIChsZXZlbClcXG4zMDUyOlxcdFxcdFxcdFxcdGxvY2tfZ2V0X3N0YXR1cyhmLCBjdXIsIGl0ZXItXFx1MDAzZWxpX3BvcywgXFxcIi1cXHUwMDNlIFxcXCIsIGxldmVsKTtcXG4zMDUzOlxcdFxcdFxcdGVsc2VcXG4zMDU0OlxcdFxcdFxcdFxcdGxvY2tfZ2V0X3N0YXR1cyhmLCBjdXIsIGl0ZXItXFx1MDAzZWxpX3BvcywgXFxcIlxcXCIsIGxldmVsKTtcXG4zMDU1OlxcdFxcbjMwNTY6XFx0XFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZjdXItXFx1MDAzZWZsY19ibG9ja2VkX3JlcXVlc3RzKSkge1xcbjMwNTc6XFx0XFx0XFx0XFx0LyogVHVybiBsZWZ0ICovXFxuMzA1ODpcXHRcXHRcXHRcXHRjdXIgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoXFx1MDAyNmN1ci1cXHUwMDNlZmxjX2Jsb2NrZWRfcmVxdWVzdHMsXFxuMzA1OTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGZpbGVfbG9ja19jb3JlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjozMTowMS41Mzk1MjExNjNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODY3Mjc2NjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBsb2NrIHNpdHVhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhbmRzY2FwZSwgc28gbXkgZmlyc3QgbW92ZSBpcyB0byBpZGVudGlmeSB0aGUgdXNhZ2Ugb2YgYGxvY2tzX3Nob3dgLiBJIHdhbnQgdG8gc2VlICp3aGVyZSogaXQncyBiZWluZyBjYWxsZWQgaW4gdGhlIGNvZGViYXNlLCBhbmQgdGhlbiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBwcmVjaXNlbHkgKmhvdyogdGhlIGAvcHJvYy9sb2Nrc2AgaW50ZXJmYWNlIGZ1bmN0aW9ucy4gVGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlc2UgdHdvIGlzIGNyaXRpY2FsLlxuXG5UbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEknbSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gYGZzL2xvY2tzLmNgLiBJIGV4cGVjdCB0aGUgY29yZSBsb2dpYyBpcyB0aGVyZS4gSSdsbCB6ZXJvIGluIG9uIGxpbmVzIGFyb3VuZCAzMDAwIHRvIDMxMDAuIFRoYXQncyBhIHJlYXNvbmFibGUgcmFuZ2UgdG8gZmluZCB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbnMgYW5kIHJlbGV2YW50IHN1cHBvcnRpbmcgY29kZS4gSG9wZWZ1bGx5LCB0aGF0IHdpbGwgZ2l2ZSBtZSBlbm91Z2ggaW5mb3JtYXRpb24gdG8gd29yayB3aXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTM5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjozMTowMy40MDY4MDA3OTNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTQzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvbG9ja3MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMDYwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMDYwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBmbGNfYmxvY2tlZF9tZW1iZXIpO1xcbjMwNjE6XFx0XFx0XFx0XFx0bGV2ZWwrKztcXG4zMDYyOlxcdFxcdFxcdH0gZWxzZSB7XFxuMzA2MzpcXHRcXHRcXHRcXHQvKiBUdXJuIHJpZ2h0ICovXFxuMzA2NDpcXHRcXHRcXHRcXHR0bXAgPSBnZXRfbmV4dF9ibG9ja2VkX21lbWJlcihjdXIpO1xcbjMwNjU6XFx0XFx0XFx0XFx0LyogRmFsbCBiYWNrIHRvIHBhcmVudCBub2RlICovXFxuMzA2NjpcXHRcXHRcXHRcXHR3aGlsZSAodG1wID09IE5VTEwgXFx1MDAyNlxcdTAwMjYgY3VyLVxcdTAwM2VmbGNfYmxvY2tlciAhPSBOVUxMKSB7XFxuMzA2NzpcXHRcXHRcXHRcXHRcXHRjdXIgPSBjdXItXFx1MDAzZWZsY19ibG9ja2VyO1xcbjMwNjg6XFx0XFx0XFx0XFx0XFx0bGV2ZWwtLTtcXG4zMDY5OlxcdFxcdFxcdFxcdFxcdHRtcCA9IGdldF9uZXh0X2Jsb2NrZWRfbWVtYmVyKGN1cik7XFxuMzA3MDpcXHRcXHRcXHRcXHR9XFxuMzA3MTpcXHRcXHRcXHRcXHRjdXIgPSB0bXA7XFxuMzA3MjpcXHRcXHRcXHR9XFxuMzA3MzpcXHRcXHR9XFxuMzA3NDpcXHRcXG4zMDc1OlxcdFxcdHJldHVybiAwO1xcbjMwNzY6XFx0fVxcbjMwNzc6XFx0XFxuMzA3ODpcXHRzdGF0aWMgdm9pZCBfX3Nob3dfZmRfbG9ja3Moc3RydWN0IHNlcV9maWxlICpmLFxcbjMwNzk6XFx0XFx0XFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgaW50ICppZCxcXG4zMDgwOlxcdFxcdFxcdFxcdHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgZmlsZXNfc3RydWN0ICpmaWxlcylcXG4zMDgxOlxcdHtcXG4zMDgyOlxcdFxcdHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqZmw7XFxuMzA4MzpcXHRcXG4zMDg0OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoZmwsIGhlYWQsIGZsY19saXN0KSB7XFxuMzA4NTpcXHRcXG4zMDg2OlxcdFxcdFxcdGlmIChmaWxwICE9IGZsLVxcdTAwM2VmbGNfZmlsZSlcXG4zMDg3OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjMwODg6XFx0XFx0XFx0aWYgKGZsLVxcdTAwM2VmbGNfb3duZXIgIT0gZmlsZXMgXFx1MDAyNlxcdTAwMjYgZmwtXFx1MDAzZWZsY19vd25lciAhPSBmaWxwKVxcbjMwODk6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMzA5MDpcXHRcXG4zMDkxOlxcdFxcdFxcdCgqaWQpKys7XFxuMzA5MjpcXHRcXHRcXHRzZXFfcHV0cyhmLCBcXFwibG9jazpcXFxcdFxcXCIpO1xcbjMwOTM6XFx0XFx0XFx0bG9ja19nZXRfc3RhdHVzKGYsIGZsLCAqaWQsIFxcXCJcXFwiLCAwKTtcXG4zMDk0OlxcdFxcdH1cXG4zMDk1OlxcdH1cXG4zMDk2OlxcdFxcbjMwOTc6XFx0dm9pZCBzaG93X2ZkX2xvY2tzKHN0cnVjdCBzZXFfZmlsZSAqZixcXG4zMDk4OlxcdFxcdFxcdCAgc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBmaWxlc19zdHJ1Y3QgKmZpbGVzKVxcbjMwOTk6XFx0e1xcbjMxMDA6XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlscCk7XFxuMzEwMTpcXHRcXHRzdHJ1Y3QgZmlsZV9sb2NrX2NvbnRleHQgKmN0eDtcXG4zMTAyOlxcdFxcdGludCBpZCA9IDA7XFxuMzEwMzpcXHRcXG4zMTA0OlxcdFxcdGN0eCA9IGxvY2tzX2lub2RlX2NvbnRleHQoaW5vZGUpO1xcbjMxMDU6XFx0XFx0aWYgKCFjdHgpXFxuMzEwNjpcXHRcXHRcXHRyZXR1cm47XFxuMzEwNzpcXHRcXG4zMTA4OlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2Y3R4LVxcdTAwM2VmbGNfbG9jayk7XFxuMzEwOTpcXHRcXHRfX3Nob3dfZmRfbG9ja3MoZiwgXFx1MDAyNmN0eC1cXHUwMDNlZmxjX2Zsb2NrLCBcXHUwMDI2aWQsIGZpbHAsIGZpbGVzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MzE6MDMuNDA3MTI3NDAzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA2NzY1NDY2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqTmF2aWdhdGluZyB0aGUgTGludXggS2VybmVsJ3MgTG9ja2luZyBNZWNoYW5pc20qKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IHBvaW50IGluIHRoZSBrZXJuZWwgd2hlcmUgdGhlIGAvcHJvYy9sb2Nrc2AgaW50ZXJmYWNlIGlzIHJlZ2lzdGVyZWQuIE15IGh1bmNoIGlzIHRoYXQgdGhlIGZpbGUgc3lzdGVtIGxheWVyLCBwYXJ0aWN1bGFybHkgYGZzL2xvY2tzLmNgLCBpcyB0aGUgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy4gSSB3YW50IHRvIHRyYWNlIHRoZSBwYXRoIGZyb20gdGhlIGAvcHJvY2AgZmlsZXN5c3RlbSBlbnRyeSB0byB0aGUgdW5kZXJseWluZyBsb2NraW5nIGRhdGEgc3RydWN0dXJlcy4gS25vd2luZyB3aGVyZSBpdCdzIHJlZ2lzdGVyZWQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBrZXJuZWwgZXhwb3NlcyBhbmQgbWFuYWdlcyBsb2NrIGluZm9ybWF0aW9uIGZvciB1c2VyLXNwYWNlIGFwcGxpY2F0aW9ucy4gSXQncyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgYW5hbHl6aW5nIHRoZSBrZXJuZWwncyBsb2NraW5nIGJlaGF2aW9yLCBhbmQgYGZzL2xvY2tzLmNgIHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIG15IGludmVzdGlnYXRpb24uIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4NzgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjMxOjA1LjQ3NDc4NDk1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM4NzQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9sb2Nrcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMxMTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMxMTA6XFx0XFx0X19zaG93X2ZkX2xvY2tzKGYsIFxcdTAwMjZjdHgtXFx1MDAzZWZsY19wb3NpeCwgXFx1MDAyNmlkLCBmaWxwLCBmaWxlcyk7XFxuMzExMTpcXHRcXHRfX3Nob3dfZmRfbG9ja3MoZiwgXFx1MDAyNmN0eC1cXHUwMDNlZmxjX2xlYXNlLCBcXHUwMDI2aWQsIGZpbHAsIGZpbGVzKTtcXG4zMTEyOlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZjdHgtXFx1MDAzZWZsY19sb2NrKTtcXG4zMTEzOlxcdH1cXG4zMTE0OlxcdFxcbjMxMTU6XFx0c3RhdGljIHZvaWQgKmxvY2tzX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqZiwgbG9mZl90ICpwb3MpXFxuMzExNjpcXHRcXHRfX2FjcXVpcmVzKFxcdTAwMjZibG9ja2VkX2xvY2tfbG9jaylcXG4zMTE3OlxcdHtcXG4zMTE4OlxcdFxcdHN0cnVjdCBsb2Nrc19pdGVyYXRvciAqaXRlciA9IGYtXFx1MDAzZXByaXZhdGU7XFxuMzExOTpcXHRcXG4zMTIwOlxcdFxcdGl0ZXItXFx1MDAzZWxpX3BvcyA9ICpwb3MgKyAxO1xcbjMxMjE6XFx0XFx0cGVyY3B1X2Rvd25fd3JpdGUoXFx1MDAyNmZpbGVfcndzZW0pO1xcbjMxMjI6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZibG9ja2VkX2xvY2tfbG9jayk7XFxuMzEyMzpcXHRcXHRyZXR1cm4gc2VxX2hsaXN0X3N0YXJ0X3BlcmNwdShcXHUwMDI2ZmlsZV9sb2NrX2xpc3QuaGxpc3QsIFxcdTAwMjZpdGVyLVxcdTAwM2VsaV9jcHUsICpwb3MpO1xcbjMxMjQ6XFx0fVxcbjMxMjU6XFx0XFxuMzEyNjpcXHRzdGF0aWMgdm9pZCAqbG9ja3NfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKVxcbjMxMjc6XFx0e1xcbjMxMjg6XFx0XFx0c3RydWN0IGxvY2tzX2l0ZXJhdG9yICppdGVyID0gZi1cXHUwMDNlcHJpdmF0ZTtcXG4zMTI5OlxcdFxcbjMxMzA6XFx0XFx0KytpdGVyLVxcdTAwM2VsaV9wb3M7XFxuMzEzMTpcXHRcXHRyZXR1cm4gc2VxX2hsaXN0X25leHRfcGVyY3B1KHYsIFxcdTAwMjZmaWxlX2xvY2tfbGlzdC5obGlzdCwgXFx1MDAyNml0ZXItXFx1MDAzZWxpX2NwdSwgcG9zKTtcXG4zMTMyOlxcdH1cXG4zMTMzOlxcdFxcbjMxMzQ6XFx0c3RhdGljIHZvaWQgbG9ja3Nfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIHZvaWQgKnYpXFxuMzEzNTpcXHRcXHRfX3JlbGVhc2VzKFxcdTAwMjZibG9ja2VkX2xvY2tfbG9jaylcXG4zMTM2OlxcdHtcXG4zMTM3OlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZibG9ja2VkX2xvY2tfbG9jayk7XFxuMzEzODpcXHRcXHRwZXJjcHVfdXBfd3JpdGUoXFx1MDAyNmZpbGVfcndzZW0pO1xcbjMxMzk6XFx0fVxcbjMxNDA6XFx0XFxuMzE0MTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGxvY2tzX3NlcV9vcGVyYXRpb25zID0ge1xcbjMxNDI6XFx0XFx0LnN0YXJ0XFx0PSBsb2Nrc19zdGFydCxcXG4zMTQzOlxcdFxcdC5uZXh0XFx0PSBsb2Nrc19uZXh0LFxcbjMxNDQ6XFx0XFx0LnN0b3BcXHQ9IGxvY2tzX3N0b3AsXFxuMzE0NTpcXHRcXHQuc2hvd1xcdD0gbG9ja3Nfc2hvdyxcXG4zMTQ2OlxcdH07XFxuMzE0NzpcXHRcXG4zMTQ4OlxcdHN0YXRpYyBpbnQgX19pbml0IHByb2NfbG9ja3NfaW5pdCh2b2lkKVxcbjMxNDk6XFx0e1xcbjMxNTA6XFx0XFx0cHJvY19jcmVhdGVfc2VxX3ByaXZhdGUoXFxcImxvY2tzXFxcIiwgMCwgTlVMTCwgXFx1MDAyNmxvY2tzX3NlcV9vcGVyYXRpb25zLFxcbjMxNTE6XFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBsb2Nrc19pdGVyYXRvciksIE5VTEwpO1xcbjMxNTI6XFx0XFx0cmV0dXJuIDA7XFxuMzE1MzpcXHR9XFxuMzE1NDpcXHRmc19pbml0Y2FsbChwcm9jX2xvY2tzX2luaXQpO1xcbjMxNTU6XFx0I2VuZGlmXFxuMzE1NjpcXHRcXG4zMTU3OlxcdHN0YXRpYyBpbnQgX19pbml0IGZpbGVsb2NrX2luaXQodm9pZClcXG4zMTU4OlxcdHtcXG4zMTU5OlxcdFxcdGludCBpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjozMTowNS40NzcxNzU2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzAwODk4Nzg2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIE1hY3JvIFVzYWdlIGluIFRoaXMgQ29kZWJhc2UqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gY29udGV4dCBmb3IgYHByb2NfbG9ja3NfaW5pdGAgYW5kIGBsb2Nrc19zaG93YC4gTGV0J3Mgc3RlcCB0aHJvdWdoIHRoaXMgbWV0aG9kaWNhbGx5LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgYCNpZmRlZmAgZGlyZWN0aXZlcyB0aGF0IG1pZ2h0IGNvbnRyb2wgdGhlaXIgaW5jbHVzaW9uLiBJJ2xsIG5lZWQgdG8gd29yayBiYWNrd2FyZCB0aHJvdWdoIHRoZSBmaWxlLCBzdGFydGluZyB3aXRoIHRoZXNlIGZ1bmN0aW9ucy4gVGhlIGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgKndoeSogdGhlc2UgZnVuY3Rpb25zIG1pZ2h0IGJlIHNlbGVjdGl2ZWx5IGNvbXBpbGVkLiBBcmUgd2UgZGVhbGluZyB3aXRoIGZlYXR1cmUgZmxhZ3MsIGRpZmZlcmVudCBoYXJkd2FyZSBwbGF0Zm9ybXMsIGRlYnVnIG1vZGVzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQSBxdWljayBzZWFyY2ggZm9yIHRoZSBtYWNybyBkZWZpbml0aW9ucyBzdXJyb3VuZGluZyB0aGVzZSBmdW5jdGlvbiBjYWxscyBzaG91bGQgcmV2ZWFsIHRoZSBkZXBlbmRlbmN5LiBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODc5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjozMTowOC40ODYxNzY2NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM4NzQwMzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNpZi4qUFJPQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9sb2Nrcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2xvY2tzLmM9MjkxMD1FWFBPUlRfU1lNQk9MX0dQTCh2ZnNfaW5vZGVfaGFzX2xvY2tzKTtcXG5mcy9sb2Nrcy5jLTI5MTEtXFxuZnMvbG9ja3MuYzoyOTEyOiNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbmZzL2xvY2tzLmMtMjkxMy0jaW5jbHVkZSBcXHUwMDNjbGludXgvcHJvY19mcy5oXFx1MDAzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjozMTowOS4xMjQ5MjI4NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTU1MTQwOTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBmcy9sb2Nrcy5jYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gdGhpbmtpbmcsIGJhc2VkIG9uIHRoZSBjb250ZXh0LCB0aGF0IHRoZSBpc3N1ZSBsaWtlbHkgcmVzaWRlcyB3aXRoaW4gYGZzL2xvY2tzLmNgLiBTcGVjaWZpY2FsbHksIEknbSB6ZXJvaW5nIGluIG9uIHRoZSBhcmVhIGFyb3VuZCBsaW5lIDI5MTIuIFRoYXQgbG9jYXRpb24gaXMgdXN1YWxseSB3aGVyZSB0aGUgY29kZSBoYW5kbGVzLi4uIHdlbGwsIGl0J3Mgd2hlcmUgdGhlIGltcGxlbWVudGF0aW9uIGZvciBbaW5zZXJ0IHJlbGV2YW50IGxvY2sgcmVsYXRlZCBmdW5jdGlvbmFsaXR5IHRoZSBleHBlcnQgd291bGQga25vdywgZS5nLiwgdGhlIHNwZWNpZmljIGxvY2tpbmcgbWVjaGFuaXNtLCBhIHBhcnRpY3VsYXIgZXJyb3IgY29uZGl0aW9uLCBvciBhIHJlbGF0ZWQgZnVuY3Rpb24gY2FsbCwgZGVwZW5kaW5nIG9uIGNvbnRleHRdLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBvYnNlcnZlZCBiZWhhdmlvciBpbiB0aGF0IHBhcnRpY3VsYXIgc2VjdGlvbi4gSSdsbCBuZWVkIHRvIGNhcmVmdWxseSBhbmFseXplIHRoZSBjb2RlIGFyb3VuZCB0aGF0IHBvaW50LCBsb29raW5nIGZvciBob3cgW21lbnRpb24gc29tZXRoaW5nIHJlbGV2YW50IHRvIGxvb2sgZm9yLCBlLmcuLCB0aGUgbG9jayBpcyBhY3F1aXJlZC9yZWxlYXNlZCwgdGhlIHN0YXRlIGlzIHRyYW5zaXRpb25lZCwgb3IgYSBzcGVjaWZpYyB2YWx1ZSBpcyBoYW5kbGVkXS4gVGhlIGRldmlsIGlzIGFsd2F5cyBpbiB0aGUgZGV0YWlscywgc28gbGV0J3Mgc3RhcnQgcmVhZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE4NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjMxOjExLjI4MDA2NzMzNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY5MDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2xvY2tzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjkxMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjkxMDpcXHRFWFBPUlRfU1lNQk9MX0dQTCh2ZnNfaW5vZGVfaGFzX2xvY2tzKTtcXG4yOTExOlxcdFxcbjI5MTI6XFx0I2lmZGVmIENPTkZJR19QUk9DX0ZTXFxuMjkxMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcHJvY19mcy5oXFx1MDAzZVxcbjI5MTQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NlcV9maWxlLmhcXHUwMDNlXFxuMjkxNTpcXHRcXG4yOTE2OlxcdHN0cnVjdCBsb2Nrc19pdGVyYXRvciB7XFxuMjkxNzpcXHRcXHRpbnRcXHRsaV9jcHU7XFxuMjkxODpcXHRcXHRsb2ZmX3RcXHRsaV9wb3M7XFxuMjkxOTpcXHR9O1xcbjI5MjA6XFx0XFxuMjkyMTpcXHRzdGF0aWMgdm9pZCBsb2NrX2dldF9zdGF0dXMoc3RydWN0IHNlcV9maWxlICpmLCBzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmZsYyxcXG4yOTIyOlxcdFxcdFxcdFxcdCAgICBsb2ZmX3QgaWQsIGNoYXIgKnBmeCwgaW50IHJlcGVhdClcXG4yOTIzOlxcdHtcXG4yOTI0OlxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMO1xcbjI5MjU6XFx0XFx0dW5zaWduZWQgaW50IHBpZDtcXG4yOTI2OlxcdFxcdHN0cnVjdCBwaWRfbmFtZXNwYWNlICpwcm9jX3BpZG5zID0gcHJvY19waWRfbnMoZmlsZV9pbm9kZShmLVxcdTAwM2VmaWxlKS1cXHUwMDNlaV9zYik7XFxuMjkyNzpcXHRcXHRpbnQgdHlwZSA9IGZsYy1cXHUwMDNlZmxjX3R5cGU7XFxuMjkyODpcXHRcXHRzdHJ1Y3QgZmlsZV9sb2NrICpmbCA9IGZpbGVfbG9jayhmbGMpO1xcbjI5Mjk6XFx0XFxuMjkzMDpcXHRcXHRwaWQgPSBsb2Nrc190cmFuc2xhdGVfcGlkKGZsYywgcHJvY19waWRucyk7XFxuMjkzMTpcXHRcXG4yOTMyOlxcdFxcdC8qXFxuMjkzMzpcXHRcXHQgKiBJZiBsb2NrIG93bmVyIGlzIGRlYWQgKGFuZCBwaWQgaXMgZnJlZWQpIG9yIG5vdCB2aXNpYmxlIGluIGN1cnJlbnRcXG4yOTM0OlxcdFxcdCAqIHBpZG5zLCB6ZXJvIGlzIHNob3duIGFzIGEgcGlkIHZhbHVlLiBDaGVjayBsb2NrIGluZm8gZnJvbVxcbjI5MzU6XFx0XFx0ICogaW5pdF9waWRfbnMgdG8gZ2V0IHNhdmVkIGxvY2sgcGlkIHZhbHVlLlxcbjI5MzY6XFx0XFx0ICovXFxuMjkzNzpcXHRcXHRpZiAoZmxjLVxcdTAwM2VmbGNfZmlsZSAhPSBOVUxMKVxcbjI5Mzg6XFx0XFx0XFx0aW5vZGUgPSBmaWxlX2lub2RlKGZsYy1cXHUwMDNlZmxjX2ZpbGUpO1xcbjI5Mzk6XFx0XFxuMjk0MDpcXHRcXHRzZXFfcHJpbnRmKGYsIFxcXCIlbGxkOiBcXFwiLCBpZCk7XFxuMjk0MTpcXHRcXG4yOTQyOlxcdFxcdGlmIChyZXBlYXQpXFxuMjk0MzpcXHRcXHRcXHRzZXFfcHJpbnRmKGYsIFxcXCIlKnNcXFwiLCByZXBlYXQgLSAxICsgKGludClzdHJsZW4ocGZ4KSwgcGZ4KTtcXG4yOTQ0OlxcdFxcbjI5NDU6XFx0XFx0aWYgKGZsYy1cXHUwMDNlZmxjX2ZsYWdzIFxcdTAwMjYgRkxfUE9TSVgpIHtcXG4yOTQ2OlxcdFxcdFxcdGlmIChmbGMtXFx1MDAzZWZsY19mbGFncyBcXHUwMDI2IEZMX0FDQ0VTUylcXG4yOTQ3OlxcdFxcdFxcdFxcdHNlcV9wdXRzKGYsIFxcXCJBQ0NFU1NcXFwiKTtcXG4yOTQ4OlxcdFxcdFxcdGVsc2UgaWYgKGZsYy1cXHUwMDNlZmxjX2ZsYWdzIFxcdTAwMjYgRkxfT0ZETENLKVxcbjI5NDk6XFx0XFx0XFx0XFx0c2VxX3B1dHMoZiwgXFxcIk9GRExDS1xcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjozMToxMS4yODEyNDAxNTVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjExMTI3Mzk3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2U6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgRmlsZSBMb2NraW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIGZpbGUgbG9ja2luZywgc3BlY2lmaWNhbGx5LCBob3cgaXQncyBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUga2VybmVsLiBNeSBjdXJyZW50IGh1bmNoIGlzIHRoYXQgYGZzL2xvY2tzLmNgIGlzIG9ubHkgY29tcGlsZWQgaW50byB0aGUga2VybmVsIHdoZW4gdGhlIGBDT05GSUdfRklMRV9MT0NLSU5HYCBvcHRpb24gaXMgZW5hYmxlZC4gVGhhdCBmZWVscyBsb2dpY2FsLCBhIGNvbW1vbiBwYXR0ZXJuIGluIGtlcm5lbCBidWlsZCBzeXN0ZW1zLiBUbyBjb25maXJtIHRoYXQgaHlwb3RoZXNpcywgdGhlIGZpcnN0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24g4oCTIHNwZWNpZmljYWxseSwgdGhlIGBmcy9NYWtlZmlsZWAuIEl0J2xsIGNsZWFybHkgb3V0bGluZSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzIGZvciB0aGlzIHBhcnRpY3VsYXIgbW9kdWxlLCBsZXR0aW5nIG1lIHZlcmlmeSB0aGUgbGluayBiZXR3ZWVuIHRoZSBjb2RlIGFuZCB0aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGRlcGVuZGVuY2llcyBJIHNob3VsZCBiZSBhd2FyZSBvZi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzExNCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MzE6MTMuMzkyNTE3NzdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5NDcyMjU2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsb2Nrc1xcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvTWFrZWZpbGU9MzM9b2JqLSQoQ09ORklHX0ZTX1ZFUklUWSlcXHRcXHQrPSB2ZXJpdHkvXFxuZnMvTWFrZWZpbGU6MzQ6b2JqLSQoQ09ORklHX0ZJTEVfTE9DS0lORykgICAgICArPSBsb2Nrcy5vXFxuZnMvTWFrZWZpbGUtMzUtb2JqLSQoQ09ORklHX0JJTkZNVF9NSVNDKVxcdCs9IGJpbmZtdF9taXNjLm9cXG4tLVxcbmZzL2NlcGgvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfQ0VQSF9GUykgKz0gY2VwaC5vXFxuZnMvY2VwaC9NYWtlZmlsZS03LVxcbmZzL2NlcGgvTWFrZWZpbGU6ODpjZXBoLXkgOj0gc3VwZXIubyBpbm9kZS5vIGRpci5vIGZpbGUubyBsb2Nrcy5vIGFkZHIubyBpb2N0bC5vIFxcXFxcXG5mcy9jZXBoL01ha2VmaWxlLTktXFx0ZXhwb3J0Lm8gY2Fwcy5vIHNuYXAubyB4YXR0ci5vIHF1b3RhLm8gaW8ubyBcXFxcXFxuLS1cXG5mcy9vY2ZzMi9NYWtlZmlsZT0xMT1vY2ZzMi1vYmpzIDo9IFxcXFxcXG4tLVxcbmZzL29jZnMyL01ha2VmaWxlLTI2LVxcdGxvY2FsYWxsb2MubyBcXHRcXHRcXFxcXFxuZnMvb2NmczIvTWFrZWZpbGU6Mjc6XFx0bG9ja3Mub1xcdFxcdFxcdFxcXFxcXG5mcy9vY2ZzMi9NYWtlZmlsZS0yOC1cXHRtbWFwLm8gXFx0XFx0XFx0XFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjozMToxNC4zODcyNDg1MTRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI4OTY4NTUzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSBhIGZldyBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBGaXJzdCwgSSdsbCBqdW1wIGludG8gdGhlIEtjb25maWcgZmlsZXMuIEkgbmVlZCB0byB2ZXJpZnkgdGhlIHN0YXRlIG9mIHRocmVlIHBhcnRpY3VsYXIgb3B0aW9uczogYEZJTEVfTE9DS0lOR2AsIGBQUk9DX0ZTYCwgYW5kIGBQSURfTlNgLiBUaGVzZSBhcmUgZnVuZGFtZW50YWwsIGFuZCBpdCdzIGFsd2F5cyBhIGdvb2QgaWRlYSB0byBkb3VibGUtY2hlY2sgdGhlaXIgc3RhdHVzIGJlZm9yZSBtb3Zpbmcgb24uIExldCdzIHN0YXJ0IHdpdGggYEZJTEVfTE9DS0lOR2AgYW5kIHNlYXJjaCBmb3IgdGhhdCBpbiB0aGUgS2NvbmZpZyBmaWxlcy4gVGhhdCB3aWxsIGJlIHRoZSBzdGFydGluZyBwb2ludCB0byBnZXQgbXkgYmVhcmluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1OTQsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjozMToxNi42NzY5MzY3NzZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjUxOTA2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRklMRV9MT0NLSU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTEwOD1jb25maWcgRVhQT1JURlNfQkxPQ0tfT1BTXFxuLS1cXG5mcy9LY29uZmlnLTExMy1cXG5mcy9LY29uZmlnOjExNDpjb25maWcgRklMRV9MT0NLSU5HXFxuZnMvS2NvbmZpZy0xMTUtXFx0Ym9vbCBcXFwiRW5hYmxlIFBPU0lYIGZpbGUgbG9ja2luZyBBUElcXFwiIGlmIEVYUEVSVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjozMToxNi44Mjk0NjAzMzRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQxODE1OTAzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgbGV0J3MgemVybyBpbiBvbiBhIHNwZWNpZmljIGFyZWEgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwgY29uZmlndXJhdGlvbiBzeXN0ZW0uIEknbSBnb2luZyB0byBuYXZpZ2F0ZSB0byB0aGUgYGZzL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMTQuIFRoYXQgbG9jYXRpb24gbGlrZWx5IGhvbGRzIHNvbWUgY3J1Y2lhbCBkZWZpbml0aW9ucyBvciBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBmaWxlc3lzdGVtIGNvbmZpZ3VyYXRpb25zLiBJJ20gYW50aWNpcGF0aW5nIGZpbmRpbmcgZWl0aGVyIGEgcmVsZXZhbnQgbW9kdWxlJ3MgS2NvbmZpZyBmcmFnbWVudCBpbmNsdXNpb24sIGEgdG9wLWxldmVsIGNob2ljZSwgb3IgcGVyaGFwcyB0aGUgZGVmaW5pdGlvbiBvZiBhIHNwZWNpZmljIGZpbGVzeXN0ZW0ncyBzZXR0aW5ncy4gVGhlIGNvbnRleHQgb2YgYGZzL2Agc3VnZ2VzdHMgdGhpcyB3aWxsIGJlIHJlbGF0ZWQgdG8gZmlsZSBzeXN0ZW0gZmVhdHVyZXMsIG5vdCBnZW5lcmljIGtlcm5lbCBvcHRpb25zLiBNeSBleHBlcnRpc2UgdGVsbHMgbWUgdGhpcyBsaWtlbHkgcmVsYXRlcyB0byBob3cgdmFyaW91cyBmaWxlIHN5c3RlbSBvcHRpb25zIGxpa2UgWEZTLCBleHQ0LCBvciBldmVuIG5ldHdvcmsgZmlsZSBzeXN0ZW1zIGFyZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIgZHVyaW5nIHRoZSBrZXJuZWwgYnVpbGQgcHJvY2Vzcywgb3IgaG93IHRoZWlyIGRlcGVuZGVuY2llcyBhcmUgaGFuZGxlZC4gSSdtIHByZXBhcmluZyB0byBzZWUgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgdGhhdCBJIGFscmVhZHkgaGF2ZSBpbiBteSBoZWFkIGluIGFic3RyYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODU5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MzE6MTkuMjQ3NjIxNDc0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTEwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTEwOlxcdFxcdGhlbHBcXG4gMTExOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgZXhwb3J0IG9wZXJhdGlvbnMgZm9yIGEgZmlsZXN5c3RlbSB0byBzdXBwb3J0XFxuIDExMjpcXHRcXHQgIGV4dGVybmFsIGJsb2NrIElPLlxcbiAxMTM6XFx0XFxuIDExNDpcXHRjb25maWcgRklMRV9MT0NLSU5HXFxuIDExNTpcXHRcXHRib29sIFxcXCJFbmFibGUgUE9TSVggZmlsZSBsb2NraW5nIEFQSVxcXCIgaWYgRVhQRVJUXFxuIDExNjpcXHRcXHRkZWZhdWx0IHlcXG4gMTE3OlxcdFxcdGhlbHBcXG4gMTE4OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdGFuZGFyZCBmaWxlIGxvY2tpbmcgc3VwcG9ydCwgcmVxdWlyZWRcXG4gMTE5OlxcdFxcdCAgZm9yIGZpbGVzeXN0ZW1zIGxpa2UgTkZTIGFuZCBmb3IgdGhlIGZsb2NrKCkgc3lzdGVtXFxuIDEyMDpcXHRcXHQgIGNhbGwuIERpc2FibGluZyB0aGlzIG9wdGlvbiBzYXZlcyBhYm91dCAxMWsuXFxuIDEyMTpcXHRcXG4gMTIyOlxcdHNvdXJjZSBcXFwiZnMvY3J5cHRvL0tjb25maWdcXFwiXFxuIDEyMzpcXHRcXG4gMTI0OlxcdHNvdXJjZSBcXFwiZnMvdmVyaXR5L0tjb25maWdcXFwiXFxuIDEyNTpcXHRcXG4gMTI2OlxcdHNvdXJjZSBcXFwiZnMvbm90aWZ5L0tjb25maWdcXFwiXFxuIDEyNzpcXHRcXG4gMTI4OlxcdHNvdXJjZSBcXFwiZnMvcXVvdGEvS2NvbmZpZ1xcXCJcXG4gMTI5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjozMToxOS4yNDc3MDIxOTRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIxMDY1MjA3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgY3J1Y2lhbCBpbiB0aGlzIGNvbmZpZ3VyYXRpb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRvdWJsZS1jaGVjayB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBwcm9jZXNzIG5hbWVzcGFjZXMgYW5kIHRoZSBgL3Byb2NgIGZpbGVzeXN0ZW0uIFRoZXJlZm9yZSwgbGV0J3MgY2lyY2xlIGJhY2sgYW5kIGV4YW1pbmUgYENPTkZJR19QUk9DX0ZTYCBhbmQgYENPTkZJR19QSURfTlNgIOKAkyBJIHdhbnQgdG8gYmUgY2VydGFpbiB0aGUgcmVsZXZhbnQgZmVhdHVyZXMgYXJlIGVuYWJsZWQsIGFuZCBjb3JyZWN0bHkgY29uZmlndXJlZCwgYW5kIHRoYXQgSSdtIG5vdCBtaXNzaW5nIGFueSBjb25mbGljdHMuIFRoaXMgYWxzbyBtZWFucyBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYGluaXRfcGlkX25zYCB0byBnZXQgYSBnb29kIGhhbmRsZSBvbiBob3cgUElEIG5hbWVzcGFjZXMgYXJlIGluaXRpYWxpemVkIGFuZCBob3cgdGhleSBhcmUgaGFuZGxlZCBhdCB0aGUgdmVyeSBzdGFydCBvZiB0aGUgYm9vdCBwcm9jZXNzLiBGaW5hbGx5LCBhIHF1aWNrIHNlYXJjaCBpbiB0aGUgYGZzL3Byb2MvS2NvbmZpZ2AgYW5kIGBpbml0L0tjb25maWdgIGZpbGVzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZXNlIGZlYXR1cmVzIGFyZSBjb25kaXRpb25hbGx5IGVuYWJsZWQgYW5kIHRoZWlyIGRlcGVuZGVuY2llcy4gVGhpcyB3aWxsIGVuc3VyZSBJJ20gbm90IG92ZXJsb29raW5nIGFueSBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3IgcG90ZW50aWFsIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM3NSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MzE6MjEuNDU4MzU2ODc4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTE5MDQzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUElEX05TXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xNDQ2PWNvbmZpZyBVU0VSX05TXFxuLS1cXG5pbml0L0tjb25maWctMTQ1OS1cXG5pbml0L0tjb25maWc6MTQ2MDpjb25maWcgUElEX05TXFxuaW5pdC9LY29uZmlnLTE0NjEtXFx0Ym9vbCBcXFwiUElEIE5hbWVzcGFjZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjMxOjIxLjU0NzU1MTMxNloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjU3NTYxNzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgUHJvY2ZzIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBgL3Byb2NgIGZpbGVzeXN0ZW0uIFRpbWUgdG8gZGlnIGludG8gdGhlIGNvbmZpZ3VyYXRpb24uIExldCdzIHN0YXJ0IHdpdGggdGhlIG9idmlvdXM6IEknbGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGUgcHJvYyBmaWxlc3lzdGVtLiBTcGVjaWZpY2FsbHksIHRoYXQgc2hvdWxkIGJlIGBmcy9wcm9jL0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gSSdtIGFmdGVyLCBtb3N0IGxpa2VseSBuYW1lZCBzb21ldGhpbmcgbGlrZSBgQ09ORklHX1BST0NfRlNgLiBUaGF0J3Mgd2hlcmUgSSdsbCBmaW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhlbHAgdGV4dCBmb3IgdGhhdCBwYXJ0aWN1bGFyIGZlYXR1cmUuIEZyb20gdGhlcmUgSSdsbCBzdGFydCBjaGVja2luZyB0aGUgZGV0YWlscyBvZiB0aGUgZGVwZW5kZW5jaWVzLCBhbmQgc2VlIGlmIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gYW55IG90aGVyIGZpbGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzMyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MzE6MjQuODA1MTE2MTczWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU2NTczNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBST0NfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvcHJvYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcHJvYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvcHJvYy9LY29uZmlnOjI6Y29uZmlnIFBST0NfRlNcXG5mcy9wcm9jL0tjb25maWctMy1cXHRib29sIFxcXCIvcHJvYyBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MzE6MjQuOTQwNzc4MDgxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2NzUwNjg3MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgTG9jayBEaXNwbGF5KipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGVzZSBjaGFuZ2VzIGluIGBmcy9sb2Nrcy5jYC4gV2UncmUgZGVhbGluZyB3aXRoIHRoZSBkaXNwbGF5IG9mIGxvY2tzIHdpdGhpbiBgL3Byb2MvbG9ja3NgLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gaG93IE9wZW4gRmlsZSBEZXNjcmlwdG9yIChPRkQpIGxvY2tzIGFyZSBoYW5kbGVkLiBJIHNlZSBhIGNvbmRpdGlvbmFsIGJsb2NrIHdpdGhpbiBgbG9ja3Nfc2hvd2AgdGhhdCBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIHRoZXNlIE9GRCBsb2Nrcy4gVGhlIGNvbW1lbnQgaW1tZWRpYXRlbHkgZHJhd3MgbXkgYXR0ZW50aW9uOiBpdCBub3RlcyB0aGF0IE9GRCBsb2NrcyBhcmUgcmVwb3J0ZWQgd2l0aCBhIFBJRCBvZiAtMS4gVGhpcyBtZWFucyB0aGUgc3RhbmRhcmQgb3duZXIgZmlsdGVyaW5nIHdvbid0IHdvcmssIHNvIHRoZSBjb2RlIGNsZXZlcmx5IHVzZXMgYGZsY19waWRgLCB3aGljaCBob2xkcyB0aGUgb3duZXIncyBUaHJlYWQgR3JvdXAgSUQgKFRHSUQpIGluc3RlYWQuXG5cblRoZSBjb2RlIHRoZW4gY2hlY2tzIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhbiBPRkQgbG9jayBhbmQgaWYgd2UgYXJlICpub3QqIGluIHRoZSBpbml0aWFsIFBJRCBuYW1lc3BhY2UuIEkgdW5kZXJzdGFuZCB0aGF0IGNvbnRleHQuIEluc2lkZSB0aGUgY29uZGl0aW9uYWwsIHdlIHNlZSBzb21lIGNhcmVmdWwgUkNVIChSZWFkLUNvcHktVXBkYXRlKSB1c2FnZSB0byBzYWZlbHkgZGVyZWZlcmVuY2UgdGhlIGBmbGNfcGlkYC4gSXQncyBnZXR0aW5nIHRoZSBQSUQgZnJvbSB0aGUgaW5pdGlhbCBuYW1lc3BhY2UsIGFuZCB0aGVuIGNoZWNrcyBpZiB0aGF0IHBpZCBpcyB2aXNpYmxlIGluIHRoZSBjdXJyZW50IHByb2Nlc3MncyBuYW1lc3BhY2UuIElmIHRoZSBQSUQgaXMgbm90IHZpc2libGUsIHRoZW4gd2UnbGwgc2tpcCB0aGF0IGVudHJ5LlxuXG5GaW5hbGx5LCB3ZSd2ZSBnb3QgdGhlIGBsb2Nrc190cmFuc2xhdGVfcGlkYCBmdW5jdGlvbiwgYW5kIHRoYXQncyB0aGUga2V5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gZG9lcy4gRnJvbSB0aGUgbG9va3Mgb2YgaXQsIHRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IHRoZSBQSUQgZnJvbSB0aGUgbG9jayB0byB3aGF0ZXZlciB0aGUgUElEIG5hbWVzcGFjZSBpcyBuZWVkZWQgZm9yLiBJZiB0aGlzIGNhbGwgcmV0dXJucyB6ZXJvLCBpdCBsb29rcyBsaWtlIHdlJ3JlIHNraXBwaW5nIHRoYXQgZW50cnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwMTAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MzE6MjguNjE1ODUwMDcxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzM0NTQyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsb2Nrc190cmFuc2xhdGVfcGlkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2xvY2tzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbG9ja3MuYz0yMzY1PUVYUE9SVF9TWU1CT0xfR1BMKHZmc190ZXN0X2xvY2spO1xcbi0tXFxuZnMvbG9ja3MuYy0yMzY3LS8qKlxcbmZzL2xvY2tzLmM6MjM2ODogKiBsb2Nrc190cmFuc2xhdGVfcGlkIC0gdHJhbnNsYXRlIGEgZmlsZV9sb2NrJ3MgZmxfcGlkIG51bWJlciBpbnRvIGEgbmFtZXNwYWNlXFxuZnMvbG9ja3MuYy0yMzY5LSAqIEBmbDogVGhlIGZpbGVfbG9jayB3aG8ncyBmbF9waWQgc2hvdWxkIGJlIHRyYW5zbGF0ZWRcXG4tLVxcbmZzL2xvY2tzLmMtMjM3My0gKi9cXG5mcy9sb2Nrcy5jOjIzNzQ6c3RhdGljIHBpZF90IGxvY2tzX3RyYW5zbGF0ZV9waWQoc3RydWN0IGZpbGVfbG9ja19jb3JlICpmbCwgc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zKVxcbmZzL2xvY2tzLmMtMjM3NS17XFxuLS1cXG5mcy9sb2Nrcy5jPTI0MDE9c3RhdGljIGludCBwb3NpeF9sb2NrX3RvX2Zsb2NrKHN0cnVjdCBmbG9jayAqZmxvY2ssIHN0cnVjdCBmaWxlX2xvY2sgKmZsKVxcbmZzL2xvY2tzLmMtMjQwMi17XFxuZnMvbG9ja3MuYzoyNDAzOlxcdGZsb2NrLVxcdTAwM2VsX3BpZCA9IGxvY2tzX3RyYW5zbGF0ZV9waWQoXFx1MDAyNmZsLVxcdTAwM2VjLCB0YXNrX2FjdGl2ZV9waWRfbnMoY3VycmVudCkpO1xcbmZzL2xvY2tzLmMtMjQwNC0jaWYgQklUU19QRVJfTE9ORyA9PSAzMlxcbi0tXFxuZnMvbG9ja3MuYz0yNDIzPXN0YXRpYyB2b2lkIHBvc2l4X2xvY2tfdG9fZmxvY2s2NChzdHJ1Y3QgZmxvY2s2NCAqZmxvY2ssIHN0cnVjdCBmaWxlX2xvY2sgKmZsKVxcbmZzL2xvY2tzLmMtMjQyNC17XFxuZnMvbG9ja3MuYzoyNDI1OlxcdGZsb2NrLVxcdTAwM2VsX3BpZCA9IGxvY2tzX3RyYW5zbGF0ZV9waWQoXFx1MDAyNmZsLVxcdTAwM2VjLCB0YXNrX2FjdGl2ZV9waWRfbnMoY3VycmVudCkpO1xcbmZzL2xvY2tzLmMtMjQyNi1cXHRmbG9jay1cXHUwMDNlbF9zdGFydCA9IGZsLVxcdTAwM2VmbF9zdGFydDtcXG4tLVxcbmZzL2xvY2tzLmM9MjkyMT1zdGF0aWMgdm9pZCBsb2NrX2dldF9zdGF0dXMoc3RydWN0IHNlcV9maWxlICpmLCBzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmZsYyxcXG4tLVxcbmZzL2xvY2tzLmMtMjkyOS1cXG5mcy9sb2Nrcy5jOjI5MzA6XFx0cGlkID0gbG9ja3NfdHJhbnNsYXRlX3BpZChmbGMsIHByb2NfcGlkbnMpO1xcbmZzL2xvY2tzLmMtMjkzMS1cXG4tLVxcbmZzL2xvY2tzLmM9MzAxNj1zdGF0aWMgaW50IGxvY2tzX3Nob3coc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICp2KVxcbi0tXFxuZnMvbG9ja3MuYy0zMDQxLVxcbmZzL2xvY2tzLmM6MzA0MjpcXHRpZiAobG9ja3NfdHJhbnNsYXRlX3BpZChjdXIsIHByb2NfcGlkbnMpID09IDApXFxuZnMvbG9ja3MuYy0zMDQzLVxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjozMToyOC42ODMyMDAzM1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzQ4OTM0NTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgY29uc2lkZXJpbmcgSSdtIGluIHRoZSB0aGljayBvZiB0aGlzOlxuXG4qKkRlZXAgRGl2ZSBpbnRvIGBsb2Nrc190cmFuc2xhdGVfcGlkYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgdGhlIGBsb2Nrc190cmFuc2xhdGVfcGlkYCBmdW5jdGlvbiwgcmVzaWRpbmcgaW4gdGhlIGBmcy9sb2Nrcy5jYCBmaWxlLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHBpZWNlIG9mIGNvZGUgaW50ZXJhY3RzIHdpdGggcHJvY2VzcyBJRHMsIGFuZCBJJ20gZ3Vlc3NpbmcgaXQgbGlrZWx5IGludm9sdmVzIHNvbWUgdHJhbnNsYXRpb24gb3IgbWFwcGluZyB3aXRoaW4gdGhlIGZpbGUgbG9ja2luZyBzdWJzeXN0ZW0uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgaW5mb3JtYXRpb24gaXMgYmVpbmcgZXh0cmFjdGVkIG9yIGFkanVzdGVkLiBJcyBpdCB1c2VkIHRvIG1hcCBQSURzIGFjcm9zcyBuYW1lc3BhY2VzLCBvciBkZWFsIHdpdGggZGlmZmVyZW50IFVJRC9HSUQgbWFwcGluZyBzY2VuYXJpb3MsIG9yIGlzIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5IGdvaW5nIG9uPyBJIGtub3cgdGhlIGZpbGVzeXN0ZW0gbG9ja2luZyBpcyBpbmNyZWRpYmx5IG51YW5jZWQsIHNvIGl0IGNvdWxkIGJlIGFueSBudW1iZXIgb2Ygc3VidGxldGllcy4gSSdsbCBuZWVkIHRvIGRpc3NlY3QgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBsYXJnZXIgbG9ja2luZyBhcmNoaXRlY3R1cmUuIEknbSBlc3BlY2lhbGx5IGtlZW4gdG8gc2VlIGhvdyBpdCBoYW5kbGVzIGVkZ2UgY2FzZXMgbGlrZSBzaWduYWwgZGVsaXZlcnkgYW5kIHByb2Nlc3MgdGVybWluYXRpb24sIHRob3NlIGFyZSB1c3VhbGx5IHdoZXJlIGxvY2tpbmcgZ2V0cyByZWFsbHkgaW50ZXJlc3RpbmcuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyMzMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjozMTozMS4wMzIxMzY4NDFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2xvY2tzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjM2OCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjM2ODpcXHQgKiBsb2Nrc190cmFuc2xhdGVfcGlkIC0gdHJhbnNsYXRlIGEgZmlsZV9sb2NrJ3MgZmxfcGlkIG51bWJlciBpbnRvIGEgbmFtZXNwYWNlXFxuMjM2OTpcXHQgKiBAZmw6IFRoZSBmaWxlX2xvY2sgd2hvJ3MgZmxfcGlkIHNob3VsZCBiZSB0cmFuc2xhdGVkXFxuMjM3MDpcXHQgKiBAbnM6IFRoZSBuYW1lc3BhY2UgaW50byB3aGljaCB0aGUgcGlkIHNob3VsZCBiZSB0cmFuc2xhdGVkXFxuMjM3MTpcXHQgKlxcbjIzNzI6XFx0ICogVXNlZCB0byB0cmFuc2xhdGUgYSBmbF9waWQgaW50byBhIG5hbWVzcGFjZSB2aXJ0dWFsIHBpZCBudW1iZXJcXG4yMzczOlxcdCAqL1xcbjIzNzQ6XFx0c3RhdGljIHBpZF90IGxvY2tzX3RyYW5zbGF0ZV9waWQoc3RydWN0IGZpbGVfbG9ja19jb3JlICpmbCwgc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zKVxcbjIzNzU6XFx0e1xcbjIzNzY6XFx0XFx0cGlkX3Qgdm5yO1xcbjIzNzc6XFx0XFx0c3RydWN0IHBpZCAqcGlkO1xcbjIzNzg6XFx0XFxuMjM3OTpcXHRcXHRpZiAoZmwtXFx1MDAzZWZsY19mbGFncyBcXHUwMDI2IEZMX09GRExDSylcXG4yMzgwOlxcdFxcdFxcdHJldHVybiAtMTtcXG4yMzgxOlxcdFxcbjIzODI6XFx0XFx0LyogUmVtb3RlIGxvY2tzIHJlcG9ydCBhIG5lZ2F0aXZlIHBpZCB2YWx1ZSAqL1xcbjIzODM6XFx0XFx0aWYgKGZsLVxcdTAwM2VmbGNfcGlkIFxcdTAwM2M9IDApXFxuMjM4NDpcXHRcXHRcXHRyZXR1cm4gZmwtXFx1MDAzZWZsY19waWQ7XFxuMjM4NTpcXHRcXG4yMzg2OlxcdFxcdC8qXFxuMjM4NzpcXHRcXHQgKiBJZiB0aGUgZmxvY2sgb3duZXIgcHJvY2VzcyBpcyBkZWFkIGFuZCBpdHMgcGlkIGhhcyBiZWVuIGFscmVhZHlcXG4yMzg4OlxcdFxcdCAqIGZyZWVkLCB0aGUgdHJhbnNsYXRpb24gYmVsb3cgd29uJ3Qgd29yaywgYnV0IHdlIHN0aWxsIHdhbnQgdG8gc2hvd1xcbjIzODk6XFx0XFx0ICogZmxvY2sgb3duZXIgcGlkIG51bWJlciBpbiBpbml0IHBpZG5zLlxcbjIzOTA6XFx0XFx0ICovXFxuMjM5MTpcXHRcXHRpZiAobnMgPT0gXFx1MDAyNmluaXRfcGlkX25zKVxcbjIzOTI6XFx0XFx0XFx0cmV0dXJuIChwaWRfdCkgZmwtXFx1MDAzZWZsY19waWQ7XFxuMjM5MzpcXHRcXG4yMzk0OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4yMzk1OlxcdFxcdHBpZCA9IGZpbmRfcGlkX25zKGZsLVxcdTAwM2VmbGNfcGlkLCBcXHUwMDI2aW5pdF9waWRfbnMpO1xcbjIzOTY6XFx0XFx0dm5yID0gcGlkX25yX25zKHBpZCwgbnMpO1xcbjIzOTc6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMjM5ODpcXHRcXHRyZXR1cm4gdm5yO1xcbjIzOTk6XFx0fVxcbjI0MDA6XFx0XFxuMjQwMTpcXHRzdGF0aWMgaW50IHBvc2l4X2xvY2tfdG9fZmxvY2soc3RydWN0IGZsb2NrICpmbG9jaywgc3RydWN0IGZpbGVfbG9jayAqZmwpXFxuMjQwMjpcXHR7XFxuMjQwMzpcXHRcXHRmbG9jay1cXHUwMDNlbF9waWQgPSBsb2Nrc190cmFuc2xhdGVfcGlkKFxcdTAwMjZmbC1cXHUwMDNlYywgdGFza19hY3RpdmVfcGlkX25zKGN1cnJlbnQpKTtcXG4yNDA0OlxcdCNpZiBCSVRTX1BFUl9MT05HID09IDMyXFxuMjQwNTpcXHRcXHQvKlxcbjI0MDY6XFx0XFx0ICogTWFrZSBzdXJlIHdlIGNhbiByZXByZXNlbnQgdGhlIHBvc2l4IGxvY2sgdmlhXFxuMjQwNzpcXHRcXHQgKiBsZWdhY3kgMzJiaXQgZmxvY2suXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjMxOjMxLjAzMjI2ODE1MVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MjQ5MTA3NzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIGAvcHJvYy9sb2Nrc2AgRml4OiBXb3J0aCBGdXp6aW5nPyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoaW5raW5nIHRocm91Z2ggd2hhdCBpdCBkb2VzLiBJdCBsb29rcyBsaWtlIHdoZW4gYC9wcm9jL2xvY2tzYCBpcyBiZWluZyBhY2Nlc3NlZCwgc3BlY2lmaWNhbGx5IHdoZW4gYGxvY2tzX3Nob3dgIGlzIGNhbGxlZCwgdGhlcmUncyBiZWVuIGEgcHJvYmxlbSB3aXRoIGhvdyBPRkQgbG9ja3MgKG9wZW4gZmlsZSBkZXNjcmlwdGlvbiBsb2Nrcykgd2VyZSBiZWluZyBoYW5kbGVkIGFjcm9zcyBQSUQgbmFtZXNwYWNlcy4gUHJldmlvdXNseSwgdGhlIGBsb2Nrc190cmFuc2xhdGVfcGlkYCBmdW5jdGlvbiB3YXMgcmV0dXJuaW5nIC0xIGZvciB0aGVzZSBPRkQgbG9ja3MuIFRoaXMgbWVhbnQgdGhlIGNoZWNrIGBsb2Nrc190cmFuc2xhdGVfcGlkKGN1ciwgcHJvY19waWRucykgPT0gMGAgd2FzIGZhaWxpbmcsIGFuZCB3ZSB3ZXJlbid0IGZpbHRlcmluZyBvdXQgT0ZEIGxvY2tzIGZyb20gZGlmZmVyZW50IFBJRCBuYW1lc3BhY2VzIGNvcnJlY3RseS4gRXNzZW50aWFsbHksIGAvcHJvYy9sb2Nrc2AgaW4gYSBub24taW5pdCBQSUQgbmFtZXNwYWNlIHdhcyBkaXNwbGF5aW5nIE9GRCBsb2NrcyBmcm9tICphbnkqIFBJRCBuYW1lc3BhY2UsIGV2ZW4gaWYgdGhlIHByb2Nlc3MgdGhhdCBjcmVhdGVkIHRoZW0gd2Fzbid0IGFjdHVhbGx5IHZpc2libGUgaW4gdGhhdCBuYW1lc3BhY2UuIFRoaXMgcGF0Y2ggYWRkcmVzc2VzIHRoaXMgYnkgY2hlY2tpbmcgaWYgdGhlIG93bmVyJ3MgdGdpZCAoYGN1ci1cdTAwM2VmbGNfcGlkYCkgaXMgbWFwcGVkIGluIHRoZSBjdXJyZW50IFBJRCBuYW1lc3BhY2UgKGBwcm9jX3BpZG5zYCkuIElmIGl0J3Mgbm90IHZpc2libGUsIHdlIHNraXAgZGlzcGxheWluZyB0aGUgbG9jayBpbiBgL3Byb2MvbG9ja3NgLlxuXG5TbywgaXMgdGhpcyBhIHJlYWwtd29ybGQsIGZ1bmN0aW9uYWwgY2hhbmdlPyBZZXMhIEl0J3MgcmVhY2hhYmxlIHdoZW4gcmVhZGluZyBgL3Byb2MvbG9ja3NgIHdpdGggZmlsZSBsb2Nrcywgc3BlY2lmaWNhbGx5IE9GRCBsb2NrcywgaW5zaWRlIGEgUElEIG5hbWVzcGFjZS4gSXQgYWZmZWN0cyBjb3JlIGtlcm5lbCBsb2dpYywgc3BlY2lmaWNhbGx5IHRoZSBgZnMvbG9ja3MuY2AgZmlsZSBhbmQgaG93IGAvcHJvYy9sb2Nrc2AgaGFuZGxlcyBmaWx0ZXJpbmcgZm9yIE9GRCBsb2NrcyBpbiBub24taW5pdCBuYW1lc3BhY2VzLlxuXG5UaGUgYmlnIHF1ZXN0aW9uOiBJcyB0aGlzIHNvbWV0aGluZyB3ZSBzaG91bGQgY29uc2lkZXIgZnV6emluZz8gTGV0J3MgY2hlY2sgdGhlIGd1aWRlbGluZXMuIEl0ICpkZWZpbml0ZWx5KiBpc24ndCBhIGRvY3VtZW50YXRpb24gY2hhbmdlLCBjb21tZW50LCBvciBkZWNvcmF0aXZlIGxvZ2dpbmcuIFRoaXMgKm1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyogaW4gYGZzL2xvY2tzLmNgIGluIGhvdyBgL3Byb2MvbG9ja3NgIGRpc3BsYXlzLiBTbywgdGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUga2VybmVsIGxvZ2ljLiBJdCBhZmZlY3RzIGhvdyBgL3Byb2MvbG9ja3NgIGZpbHRlcnMgbG9ja3MgZm9yIG5vbi1pbml0IHBpZCBuYW1lc3BhY2VzIHdoZW4gT0ZEIGxvY2tzIGV4aXN0LiBZZXMuIEJhc2VkIG9uIHRoaXMsIGl0IGxvb2tzIGxpa2UgaXQncyB3b3J0aCBmdXp6aW5nLlxuXG5Ob3csIGFib3V0IHRoZSBmdXp6aW5nIGl0c2VsZjogU2hvdWxkIHdlIGlkZW50aWZ5IHJlbGV2YW50IHN5bWJvbHM/IFRoZSBndWlkZWxpbmVzIHN1Z2dlc3QgZm9jdXNpbmcgb24gc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBhbmQgYXZvaWRpbmcgZ2VuZXJpYyBob3RwYXRocy4gV2Ugc2hvdWxkIHByaW9yaXRpemUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBMZXQncyB0aGluayBhYm91dCB0aGlzOiBgbG9ja3Nfc2hvd2AgaXMsIHVuZm9ydHVuYXRlbHksIHN0YXRpYy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUncyBhIG5vbi1zdGF0aWMgZW50cnlwb2ludCBvciBzb21lIGBzZXFfb3BzYCBpbnZvbHZlZC4gSSBuZWVkIHRvIGV4YW1pbmUgYGZzL2xvY2tzLmNgIG1vcmUgY2xvc2VseSBhbmQgdGhpbmsgYWJvdXQgdGhlIHByb2Nlc3Mgb2YgYWNjZXNzaW5nIGAvcHJvYy9sb2Nrc2AgYW5kIHNldHRpbmcgbG9ja3MgaW4gdGhlIGZpcnN0IHBsYWNlLiBJIHNob3VsZCBsb29rIGZvciBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiBgZnMvbG9ja3MuY2Agb3IgZnVuY3Rpb25zIGNhbGxlZCB3aGVuIGAvcHJvYy9sb2Nrc2AgaXMgYWNjZXNzZWQgb3IgbG9ja3MgYXJlIHNldC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGV4YW1pbmluZyBhbGwgcmVsZXZhbnQgZW50cnlwb2ludHMgZm9yIHRoZSBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE1MywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjMxOjM3LjI4MTM3OTA3OVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ0Nzc4ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfXVthLXpBLVowLTlfXSouKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2xvY2tzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1OTUgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmZzL2xvY2tzLmMtNzEtXFxuZnMvbG9ja3MuYzo3MjpzdGF0aWMgc3RydWN0IGZpbGVfbG9jayAqZmlsZV9sb2NrKHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqZmxjKVxcbmZzL2xvY2tzLmMtNzMte1xcbi0tXFxuZnMvbG9ja3MuYy03Ni1cXG5mcy9sb2Nrcy5jOjc3OnN0YXRpYyBzdHJ1Y3QgZmlsZV9sZWFzZSAqZmlsZV9sZWFzZShzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmZsYylcXG5mcy9sb2Nrcy5jLTc4LXtcXG4tLVxcbmZzL2xvY2tzLmMtODEtXFxuZnMvbG9ja3MuYzo4MjpzdGF0aWMgYm9vbCBsZWFzZV9icmVha2luZyhzdHJ1Y3QgZmlsZV9sZWFzZSAqZmwpXFxuZnMvbG9ja3MuYy04My17XFxuLS1cXG5mcy9sb2Nrcy5jLTg2LVxcbmZzL2xvY2tzLmM6ODc6c3RhdGljIGludCB0YXJnZXRfbGVhc2V0eXBlKHN0cnVjdCBmaWxlX2xlYXNlICpmbClcXG5mcy9sb2Nrcy5jLTg4LXtcXG4tLVxcbmZzL2xvY2tzLmM9MTAwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGxvY2tzX3N5c2N0bHNbXSA9IHtcXG4tLVxcbmZzL2xvY2tzLmMtMTE4LVxcbmZzL2xvY2tzLmM6MTE5OnN0YXRpYyBpbnQgX19pbml0IGluaXRfZnNfbG9ja3Nfc3lzY3Rscyh2b2lkKVxcbmZzL2xvY2tzLmMtMTIwLXtcXG4tLVxcbmZzL2xvY2tzLmMtMTIzLX1cXG5mcy9sb2Nrcy5jOjEyNDplYXJseV9pbml0Y2FsbChpbml0X2ZzX2xvY2tzX3N5c2N0bHMpO1xcbmZzL2xvY2tzLmMtMTI1LSNlbmRpZiAvKiBDT05GSUdfU1lTQ1RMICovXFxuLS1cXG5mcy9sb2Nrcy5jPTEzNT1zdHJ1Y3QgZmlsZV9sb2NrX2xpc3Rfc3RydWN0IHtcXG4tLVxcbmZzL2xvY2tzLmMtMTM4LX07XFxuZnMvbG9ja3MuYzoxMzk6c3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBmaWxlX2xvY2tfbGlzdF9zdHJ1Y3QsIGZpbGVfbG9ja19saXN0KTtcXG5mcy9sb2Nrcy5jOjE0MDpERUZJTkVfU1RBVElDX1BFUkNQVV9SV1NFTShmaWxlX3J3c2VtKTtcXG5mcy9sb2Nrcy5jLTE0MS1cXG4tLVxcbmZzL2xvY2tzLmMtMTU0LSNkZWZpbmUgQkxPQ0tFRF9IQVNIX0JJVFNcXHQ3XFxuZnMvbG9ja3MuYzoxNTU6c3RhdGljIERFRklORV9IQVNIVEFCTEUoYmxvY2tlZF9oYXNoLCBCTE9DS0VEX0hBU0hfQklUUyk7XFxuZnMvbG9ja3MuYy0xNTYtXFxuLS1cXG5mcy9sb2Nrcy5jLTE2OS0gKi9cXG5mcy9sb2Nrcy5jOjE3MDpzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGJsb2NrZWRfbG9ja19sb2NrKTtcXG5mcy9sb2Nrcy5jLTE3MS1cXG4tLVxcbmZzL2xvY2tzLmM9MTc2PXN0YXRpYyBzdHJ1Y3QgZmlsZV9sb2NrX2NvbnRleHQgKlxcbmZzL2xvY2tzLmM6MTc3OmxvY2tzX2dldF9sb2NrX2NvbnRleHQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUpXFxuZnMvbG9ja3MuYy0xNzgte1xcbi0tXFxuZnMvbG9ja3MuYz0yMTg9c3RhdGljIHZvaWRcXG5mcy9sb2Nrcy5jOjIxOTpsb2Nrc19kdW1wX2N0eF9saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGNoYXIgKmxpc3RfdHlwZSlcXG5mcy9sb2Nrcy5jLTIyMC17XFxuLS1cXG5mcy9sb2Nrcy5jPTIyOT1zdGF0aWMgdm9pZFxcbmZzL2xvY2tzLmM6MjMwOmxvY2tzX2NoZWNrX2N0eF9saXN0cyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2xvY2tzLmMtMjMxLXtcXG4tLVxcbmZzL2xvY2tzLmM9MjQ2PXN0YXRpYyB2b2lkXFxuZnMvbG9ja3MuYzoyNDc6bG9ja3NfY2hlY2tfY3R4X2ZpbGVfbGlzdChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgY2hhciAqbGlzdF90eXBlKVxcbmZzL2xvY2tzLmMtMjQ4LXtcXG4tLVxcbmZzL2xvY2tzLmM9MjYyPXZvaWRcXG5mcy9sb2Nrcy5jOjI2Mzpsb2Nrc19mcmVlX2xvY2tfY29udGV4dChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2xvY2tzLmMtMjY0LXtcXG4tLVxcbmZzL2xvY2tzLmMtMjcyLVxcbmZzL2xvY2tzLmM6MjczOnN0YXRpYyB2b2lkIGxvY2tzX2luaXRfbG9ja19oZWFkcyhzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmZsYylcXG5mcy9sb2Nrcy5jLTI3NC17XFxuLS1cXG5mcy9sb2Nrcy5jLTI4Mi0vKiBBbGxvY2F0ZSBhbiBlbXB0eSBsb2NrIHN0cnVjdHVyZS4gKi9cXG5mcy9sb2Nrcy5jOjI4MzpzdHJ1Y3QgZmlsZV9sb2NrICpsb2Nrc19hbGxvY19sb2NrKHZvaWQpXFxuZnMvbG9ja3MuYy0yODQte1xcbi0tXFxuZnMvbG9ja3MuYy0yOTEtfVxcbmZzL2xvY2tzLmM6MjkyOkVYUE9SVF9TWU1CT0xfR1BMKGxvY2tzX2FsbG9jX2xvY2spO1xcbmZzL2xvY2tzLmMtMjkzLVxcbmZzL2xvY2tzLmMtMjk0LS8qIEFsbG9jYXRlIGFuIGVtcHR5IGxvY2sgc3RydWN0dXJlLiAqL1xcbmZzL2xvY2tzLmM6Mjk1OnN0cnVjdCBmaWxlX2xlYXNlICpsb2Nrc19hbGxvY19sZWFzZSh2b2lkKVxcbmZzL2xvY2tzLmMtMjk2LXtcXG4tLVxcbmZzL2xvY2tzLmMtMzAzLX1cXG5mcy9sb2Nrcy5jOjMwNDpFWFBPUlRfU1lNQk9MX0dQTChsb2Nrc19hbGxvY19sZWFzZSk7XFxuZnMvbG9ja3MuYy0zMDUtXFxuZnMvbG9ja3MuYzozMDY6dm9pZCBsb2Nrc19yZWxlYXNlX3ByaXZhdGUoc3RydWN0IGZpbGVfbG9jayAqZmwpXFxuZnMvbG9ja3MuYy0zMDcte1xcbi0tXFxuZnMvbG9ja3MuYy0zMjktfVxcbmZzL2xvY2tzLmM6MzMwOkVYUE9SVF9TWU1CT0xfR1BMKGxvY2tzX3JlbGVhc2VfcHJpdmF0ZSk7XFxuZnMvbG9ja3MuYy0zMzEtXFxuLS1cXG5mcy9sb2Nrcy5jLTM0MC0gKi9cXG5mcy9sb2Nrcy5jOjM0MTpib29sIGxvY2tzX293bmVyX2hhc19ibG9ja2VycyhzdHJ1Y3QgZmlsZV9sb2NrX2NvbnRleHQgKmZsY3R4LCBmbF9vd25lcl90IG93bmVyKVxcbmZzL2xvY2tzLmMtMzQyLXtcXG4tLVxcbmZzL2xvY2tzLmMtMzU2LX1cXG5mcy9sb2Nrcy5jOjM1NzpFWFBPUlRfU1lNQk9MX0dQTChsb2Nrc19vd25lcl9oYXNfYmxvY2tlcnMpO1xcbmZzL2xvY2tzLmMtMzU4LVxcbmZzL2xvY2tzLmMtMzU5LS8qIEZyZWUgYSBsb2NrIHdoaWNoIGlzIG5vdCBpbiB1c2UuICovXFxuZnMvbG9ja3MuYzozNjA6dm9pZCBsb2Nrc19mcmVlX2xvY2soc3RydWN0IGZpbGVfbG9jayAqZmwpXFxuZnMvbG9ja3MuYy0zNjEte1xcbi0tXFxuZnMvbG9ja3MuYy0zNjQtfVxcbmZzL2xvY2tzLmM6MzY1OkVYUE9SVF9TWU1CT0wobG9ja3NfZnJlZV9sb2NrKTtcXG5mcy9sb2Nrcy5jLTM2Ni1cXG5mcy9sb2Nrcy5jLTM2Ny0vKiBGcmVlIGEgbGVhc2Ugd2hpY2ggaXMgbm90IGluIHVzZS4gKi9cXG5mcy9sb2Nrcy5jOjM2ODp2b2lkIGxvY2tzX2ZyZWVfbGVhc2Uoc3RydWN0IGZpbGVfbGVhc2UgKmZsKVxcbmZzL2xvY2tzLmMtMzY5LXtcXG4tLVxcbmZzL2xvY2tzLmMtMzcxLX1cXG5mcy9sb2Nrcy5jOjM3MjpFWFBPUlRfU1lNQk9MKGxvY2tzX2ZyZWVfbGVhc2UpO1xcbmZzL2xvY2tzLmMtMzczLVxcbmZzL2xvY2tzLmM9Mzc0PXN0YXRpYyB2b2lkXFxuZnMvbG9ja3MuYzozNzU6bG9ja3NfZGlzcG9zZV9saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmRpc3Bvc2UpXFxuZnMvbG9ja3MuYy0zNzYte1xcbi0tXFxuZnMvbG9ja3MuYz0zODY9c3RhdGljIHZvaWRcXG5mcy9sb2Nrcy5jOjM4NzpsZWFzZV9kaXNwb3NlX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZGlzcG9zZSlcXG5mcy9sb2Nrcy5jLTM4OC17XFxuLS1cXG5mcy9sb2Nrcy5jLTM5Ny1cXG5mcy9sb2Nrcy5jOjM5ODp2b2lkIGxvY2tzX2luaXRfbG9jayhzdHJ1Y3QgZmlsZV9sb2NrICpmbClcXG5mcy9sb2Nrcy5jLTM5OS17XFxuLS1cXG5mcy9sb2Nrcy5jLTQwMi19XFxuZnMvbG9ja3MuYzo0MDM6RVhQT1JUX1NZTUJPTChsb2Nrc19pbml0X2xvY2spO1xcbmZzL2xvY2tzLmMtNDA0LVxcbmZzL2xvY2tzLmM6NDA1OnZvaWQgbG9ja3NfaW5pdF9sZWFzZShzdHJ1Y3QgZmlsZV9sZWFzZSAqZmwpXFxuZnMvbG9ja3MuYy00MDYte1xcbi0tXFxuZnMvbG9ja3MuYy00MDktfVxcbmZzL2xvY2tzLmM6NDEwOkVYUE9SVF9TWU1CT0wobG9ja3NfaW5pdF9sZWFzZSk7XFxuZnMvbG9ja3MuYy00MTEtXFxuLS1cXG5mcy9sb2Nrcy5jLTQxNC0gKi9cXG5mcy9sb2Nrcy5jOjQxNTp2b2lkIGxvY2tzX2NvcHlfY29uZmxvY2soc3RydWN0IGZpbGVfbG9jayAqbmV3LCBzdHJ1Y3QgZmlsZV9sb2NrICpmbClcXG5mcy9sb2Nrcy5jLTQxNi17XFxuLS1cXG5mcy9sb2Nrcy5jLTQzMS19XFxuZnMvbG9ja3MuYzo0MzI6RVhQT1JUX1NZTUJPTChsb2Nrc19jb3B5X2NvbmZsb2NrKTtcXG5mcy9sb2Nrcy5jLTQzMy1cXG5mcy9sb2Nrcy5jOjQzNDp2b2lkIGxvY2tzX2NvcHlfbG9jayhzdHJ1Y3QgZmlsZV9sb2NrICpuZXcsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKVxcbmZzL2xvY2tzLmMtNDM1LXtcXG4tLVxcbmZzL2xvY2tzLmMtNDQ4LX1cXG5mcy9sb2Nrcy5jOjQ0OTpFWFBPUlRfU1lNQk9MKGxvY2tzX2NvcHlfbG9jayk7XFxuZnMvbG9ja3MuYy00NTAtXFxuZnMvbG9ja3MuYzo0NTE6c3RhdGljIHZvaWQgbG9ja3NfbW92ZV9ibG9ja3Moc3RydWN0IGZpbGVfbG9jayAqbmV3LCBzdHJ1Y3QgZmlsZV9sb2NrICpmbClcXG5mcy9sb2Nrcy5jLTQ1Mi17XFxuLS1cXG5mcy9sb2Nrcy5jLTQ3MC1cXG5mcy9sb2Nrcy5jOjQ3MTpzdGF0aWMgaW5saW5lIGludCBmbG9ja190cmFuc2xhdGVfY21kKGludCBjbWQpIHtcXG5mcy9sb2Nrcy5jLTQ3Mi1cXHRzd2l0Y2ggKGNtZCkge1xcbi0tXFxuZnMvbG9ja3MuYy00ODMtLyogRmlsbCBpbiBhIGZpbGVfbG9jayBzdHJ1Y3R1cmUgd2l0aCBhbiBhcHByb3ByaWF0ZSBGTE9DSyBsb2NrLiAqL1xcbmZzL2xvY2tzLmM6NDg0OnN0YXRpYyB2b2lkIGZsb2NrX21ha2VfbG9jayhzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGZpbGVfbG9jayAqZmwsIGludCB0eXBlKVxcbmZzL2xvY2tzLmMtNDg1LXtcXG4tLVxcbmZzL2xvY2tzLmMtNDk1LVxcbmZzL2xvY2tzLmM6NDk2OnN0YXRpYyBpbnQgYXNzaWduX3R5cGUoc3RydWN0IGZpbGVfbG9ja19jb3JlICpmbGMsIGludCB0eXBlKVxcbmZzL2xvY2tzLmMtNDk3LXtcXG4tLVxcbmZzL2xvY2tzLmMtNTA5LVxcbmZzL2xvY2tzLmM6NTEwOnN0YXRpYyBpbnQgZmxvY2s2NF90b19wb3NpeF9sb2NrKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCxcXG5mcy9sb2Nrcy5jLTUxMS1cXHRcXHRcXHRcXHQgc3RydWN0IGZsb2NrNjQgKmwpXFxuLS1cXG5mcy9sb2Nrcy5jLTU1OS0gKi9cXG5mcy9sb2Nrcy5jOjU2MDpzdGF0aWMgaW50IGZsb2NrX3RvX3Bvc2l4X2xvY2soc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBmaWxlX2xvY2sgKmZsLFxcbmZzL2xvY2tzLmMtNTYxLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZmxvY2sgKmwpXFxuLS1cXG5mcy9sb2Nrcy5jPTU3ND1zdGF0aWMgYm9vbFxcbmZzL2xvY2tzLmM6NTc1OmxlYXNlX2JyZWFrX2NhbGxiYWNrKHN0cnVjdCBmaWxlX2xlYXNlICpmbClcXG5mcy9sb2Nrcy5jLTU3Ni17XFxuLS1cXG5mcy9sb2Nrcy5jPTU4MT1zdGF0aWMgdm9pZFxcbmZzL2xvY2tzLmM6NTgyOmxlYXNlX3NldHVwKHN0cnVjdCBmaWxlX2xlYXNlICpmbCwgdm9pZCAqKnByaXYpXFxuZnMvbG9ja3MuYy01ODMte1xcbi0tXFxuZnMvbG9ja3MuYz02MDg9c3RhdGljIGludFxcbmZzL2xvY2tzLmM6NjA5OmxlYXNlX29wZW5fY29uZmxpY3Qoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGludCBhcmcpXFxuZnMvbG9ja3MuYy02MTAte1xcbi0tXFxuZnMvbG9ja3MuYz02Mzc9c3RhdGljIGNvbnN0IHN0cnVjdCBsZWFzZV9tYW5hZ2VyX29wZXJhdGlvbnMgbGVhc2VfbWFuYWdlcl9vcHMgPSB7XFxuLS1cXG5mcy9sb2Nrcy5jLTY0Ni0gKi9cXG5mcy9sb2Nrcy5jOjY0NzpzdGF0aWMgaW50IGxlYXNlX2luaXQoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBmbGFncywgaW50IHR5cGUsIHN0cnVjdCBmaWxlX2xlYXNlICpmbClcXG5mcy9sb2Nrcy5jLTY0OC17XFxuLS1cXG5mcy9sb2Nrcy5jLTY2MS0vKiBBbGxvY2F0ZSBhIGZpbGVfbG9jayBpbml0aWFsaXNlZCB0byB0aGlzIHR5cGUgb2YgbGVhc2UgKi9cXG5mcy9sb2Nrcy5jOjY2MjpzdGF0aWMgc3RydWN0IGZpbGVfbGVhc2UgKmxlYXNlX2FsbG9jKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIGludCB0eXBlKVxcbmZzL2xvY2tzLmMtNjYzLXtcXG4tLVxcbmZzL2xvY2tzLmMtNjc5LSAqL1xcbmZzL2xvY2tzLmM6NjgwOnN0YXRpYyBpbmxpbmUgaW50IGxvY2tzX292ZXJsYXAoc3RydWN0IGZpbGVfbG9jayAqZmwxLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbDIpXFxuZnMvbG9ja3MuYy02ODEte1xcbi0tXFxuZnMvbG9ja3MuYy02ODgtICovXFxuZnMvbG9ja3MuYzo2ODk6c3RhdGljIGludCBwb3NpeF9zYW1lX293bmVyKHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqZmwxLCBzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmZsMilcXG5mcy9sb2Nrcy5jLTY5MC17XFxuLS1cXG5mcy9sb2Nrcy5jLTY5NC0vKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBmbGNfbG9jayBoZWxkISAqL1xcbmZzL2xvY2tzLmM6Njk1OnN0YXRpYyB2b2lkIGxvY2tzX2luc2VydF9nbG9iYWxfbG9ja3Moc3RydWN0IGZpbGVfbG9ja19jb3JlICpmbGMpXFxuZnMvbG9ja3MuYy02OTYte1xcbi0tXFxuZnMvbG9ja3MuYy03MDctLyogTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgZmxjX2xvY2sgaGVsZCEgKi9cXG5mcy9sb2Nrcy5jOjcwODpzdGF0aWMgdm9pZCBsb2Nrc19kZWxldGVfZ2xvYmFsX2xvY2tzKHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqZmxjKVxcbmZzL2xvY2tzLmMtNzA5LXtcXG4tLVxcbmZzL2xvY2tzLmM9NzI4PXN0YXRpYyB1bnNpZ25lZCBsb25nXFxuZnMvbG9ja3MuYzo3Mjk6cG9zaXhfb3duZXJfa2V5KHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqZmxjKVxcbmZzL2xvY2tzLmMtNzMwLXtcXG4tLVxcbmZzL2xvY2tzLmMtNzMzLVxcbmZzL2xvY2tzLmM6NzM0OnN0YXRpYyB2b2lkIGxvY2tzX2luc2VydF9nbG9iYWxfYmxvY2tlZChzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKndhaXRlcilcXG5mcy9sb2Nrcy5jLTczNS17XFxuLS1cXG5mcy9sb2Nrcy5jLTc0MC1cXG5mcy9sb2Nrcy5jOjc0MTpzdGF0aWMgdm9pZCBsb2Nrc19kZWxldGVfZ2xvYmFsX2Jsb2NrZWQoc3RydWN0IGZpbGVfbG9ja19jb3JlICp3YWl0ZXIpXFxuZnMvbG9ja3MuYy03NDIte1xcbi0tXFxuZnMvbG9ja3MuYy03NTItICovXFxuZnMvbG9ja3MuYzo3NTM6c3RhdGljIHZvaWQgX19sb2Nrc191bmxpbmtfYmxvY2soc3RydWN0IGZpbGVfbG9ja19jb3JlICp3YWl0ZXIpXFxuZnMvbG9ja3MuYy03NTQte1xcbi0tXFxuZnMvbG9ja3MuYy03NTgtXFxuZnMvbG9ja3MuYzo3NTk6c3RhdGljIHZvaWQgX19sb2Nrc193YWtlX3VwX2Jsb2NrcyhzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmJsb2NrZXIpXFxuZnMvbG9ja3MuYy03NjAte1xcbi0tXFxuZnMvbG9ja3MuYy03ODQtXFxuZnMvbG9ja3MuYzo3ODU6c3RhdGljIGludCBfX2xvY2tzX2RlbGV0ZV9ibG9jayhzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKndhaXRlcilcXG5mcy9sb2Nrcy5jLTc4Ni17XFxuLS1cXG5mcy9sb2Nrcy5jLTgzNC0gKi9cXG5mcy9sb2Nrcy5jOjgzNTppbnQgbG9ja3NfZGVsZXRlX2Jsb2NrKHN0cnVjdCBmaWxlX2xvY2sgKndhaXRlcilcXG5mcy9sb2Nrcy5jLTgzNi17XFxuLS1cXG5mcy9sb2Nrcy5jLTgzOC19XFxuZnMvbG9ja3MuYzo4Mzk6RVhQT1JUX1NZTUJPTChsb2Nrc19kZWxldGVfYmxvY2spO1xcbmZzL2xvY2tzLmMtODQwLVxcbi0tXFxuZnMvbG9ja3MuYy04NTUtICovXFxuZnMvbG9ja3MuYzo4NTY6c3RhdGljIHZvaWQgX19sb2Nrc19pbnNlcnRfYmxvY2soc3RydWN0IGZpbGVfbG9ja19jb3JlICpibG9ja2VyLFxcbmZzL2xvY2tzLmMtODU3LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKndhaXRlcixcXG4tLVxcbmZzL2xvY2tzLmMtODg0LS8qIE11c3QgYmUgY2FsbGVkIHdpdGggZmxjX2xvY2sgaGVsZC4gKi9cXG5mcy9sb2Nrcy5jOjg4NTpzdGF0aWMgdm9pZCBsb2Nrc19pbnNlcnRfYmxvY2soc3RydWN0IGZpbGVfbG9ja19jb3JlICpibG9ja2VyLFxcbmZzL2xvY2tzLmMtODg2LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKndhaXRlcixcXG4tLVxcbmZzL2xvY2tzLmMtODk5LSAqL1xcbmZzL2xvY2tzLmM6OTAwOnN0YXRpYyB2b2lkIGxvY2tzX3dha2VfdXBfYmxvY2tzKHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqYmxvY2tlcilcXG5mcy9sb2Nrcy5jLTkwMS17XFxuLS1cXG5mcy9sb2Nrcy5jPTkxNz1zdGF0aWMgdm9pZFxcbmZzL2xvY2tzLmM6OTE4OmxvY2tzX2luc2VydF9sb2NrX2N0eChzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmZsLCBzdHJ1Y3QgbGlzdF9oZWFkICpiZWZvcmUpXFxuZnMvbG9ja3MuYy05MTkte1xcbi0tXFxuZnMvbG9ja3MuYz05MjQ9c3RhdGljIHZvaWRcXG5mcy9sb2Nrcy5jOjkyNTpsb2Nrc191bmxpbmtfbG9ja19jdHgoc3RydWN0IGZpbGVfbG9ja19jb3JlICpmbClcXG5mcy9sb2Nrcy5jLTkyNi17XFxuLS1cXG5mcy9sb2Nrcy5jPTkzMj1zdGF0aWMgdm9pZFxcbmZzL2xvY2tzLmM6OTMzOmxvY2tzX2RlbGV0ZV9sb2NrX2N0eChzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmZsLCBzdHJ1Y3QgbGlzdF9oZWFkICpkaXNwb3NlKVxcbmZzL2xvY2tzLmMtOTM0LXtcXG4tLVxcbmZzL2xvY2tzLmMtOTQ0LSAqL1xcbmZzL2xvY2tzLmM6OTQ1OnN0YXRpYyBib29sIGxvY2tzX2NvbmZsaWN0KHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqY2FsbGVyX2ZsYyxcXG5mcy9sb2Nrcy5jLTk0Ni1cXHRcXHRcXHQgICBzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKnN5c19mbGMpXFxuLS1cXG5mcy9sb2Nrcy5jLTk1Ny0gKi9cXG5mcy9sb2Nrcy5jOjk1ODpzdGF0aWMgYm9vbCBwb3NpeF9sb2Nrc19jb25mbGljdChzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmNhbGxlcl9mbGMsXFxuZnMvbG9ja3MuYy05NTktXFx0XFx0XFx0XFx0IHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqc3lzX2ZsYylcXG4tLVxcbmZzL2xvY2tzLmMtOTc5LSAqL1xcbmZzL2xvY2tzLmM6OTgwOnN0YXRpYyBib29sIHBvc2l4X3Rlc3RfbG9ja3NfY29uZmxpY3Qoc3RydWN0IGZpbGVfbG9jayAqY2FsbGVyX2ZsLFxcbmZzL2xvY2tzLmMtOTgxLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBmaWxlX2xvY2sgKnN5c19mbClcXG4tLVxcbmZzL2xvY2tzLmMtOTk3LSAqL1xcbmZzL2xvY2tzLmM6OTk4OnN0YXRpYyBib29sIGZsb2NrX2xvY2tzX2NvbmZsaWN0KHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqY2FsbGVyX2ZsYyxcXG5mcy9sb2Nrcy5jLTk5OS1cXHRcXHRcXHRcXHQgc3RydWN0IGZpbGVfbG9ja19jb3JlICpzeXNfZmxjKVxcbi0tXFxuZnMvbG9ja3MuYz0xMDEwPXZvaWRcXG5mcy9sb2Nrcy5jOjEwMTE6cG9zaXhfdGVzdF9sb2NrKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbClcXG5mcy9sb2Nrcy5jLTEwMTIte1xcbi0tXFxuZnMvbG9ja3MuYy0xMDQ3LX1cXG5mcy9sb2Nrcy5jOjEwNDg6RVhQT1JUX1NZTUJPTChwb3NpeF90ZXN0X2xvY2spO1xcbmZzL2xvY2tzLmMtMTA0OS1cXG4tLVxcbmZzL2xvY2tzLmMtMTA4NS0vKiBGaW5kIGEgbG9jayB0aGF0IHRoZSBvd25lciBvZiB0aGUgZ2l2ZW4gQGJsb2NrZXIgaXMgYmxvY2tpbmcgb24uICovXFxuZnMvbG9ja3MuYzoxMDg2OnN0YXRpYyBzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKndoYXRfb3duZXJfaXNfd2FpdGluZ19mb3Ioc3RydWN0IGZpbGVfbG9ja19jb3JlICpibG9ja2VyKVxcbmZzL2xvY2tzLmMtMTA4Ny17XFxuLS1cXG5mcy9sb2Nrcy5jLTExMDAtLyogTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgYmxvY2tlZF9sb2NrX2xvY2sgaGVsZCEgKi9cXG5mcy9sb2Nrcy5jOjExMDE6c3RhdGljIGJvb2wgcG9zaXhfbG9ja3NfZGVhZGxvY2soc3RydWN0IGZpbGVfbG9jayAqY2FsbGVyX2ZsLFxcbmZzL2xvY2tzLmMtMTEwMi1cXHRcXHRcXHRcXHQgc3RydWN0IGZpbGVfbG9jayAqYmxvY2tfZmwpXFxuLS1cXG5mcy9sb2Nrcy5jLTExMzItICovXFxuZnMvbG9ja3MuYzoxMTMzOnN0YXRpYyBpbnQgZmxvY2tfbG9ja19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZV9sb2NrICpyZXF1ZXN0KVxcbmZzL2xvY2tzLmMtMTEzNC17XFxuLS1cXG5mcy9sb2Nrcy5jLTEyMDQtXFxuZnMvbG9ja3MuYzoxMjA1OnN0YXRpYyBpbnQgcG9zaXhfbG9ja19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZV9sb2NrICpyZXF1ZXN0LFxcbmZzL2xvY2tzLmMtMTIwNi1cXHRcXHRcXHQgICAgc3RydWN0IGZpbGVfbG9jayAqY29uZmxvY2spXFxuLS1cXG5mcy9sb2Nrcy5jLTE0NTctICovXFxuZnMvbG9ja3MuYzoxNDU4OmludCBwb3NpeF9sb2NrX2ZpbGUoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBmaWxlX2xvY2sgKmZsLFxcbmZzL2xvY2tzLmMtMTQ1OS1cXHRcXHRcXHRzdHJ1Y3QgZmlsZV9sb2NrICpjb25mbG9jaylcXG4tLVxcbmZzL2xvY2tzLmMtMTQ2Mi19XFxuZnMvbG9ja3MuYzoxNDYzOkVYUE9SVF9TWU1CT0wocG9zaXhfbG9ja19maWxlKTtcXG5mcy9sb2Nrcy5jLTE0NjQtXFxuLS1cXG5mcy9sb2Nrcy5jLTE0NzEtICovXFxuZnMvbG9ja3MuYzoxNDcyOnN0YXRpYyBpbnQgcG9zaXhfbG9ja19pbm9kZV93YWl0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKVxcbmZzL2xvY2tzLmMtMTQ3My17XFxuLS1cXG5mcy9sb2Nrcy5jLTE0ODgtXFxuZnMvbG9ja3MuYzoxNDg5OnN0YXRpYyB2b2lkIGxlYXNlX2NsZWFyX3BlbmRpbmcoc3RydWN0IGZpbGVfbGVhc2UgKmZsLCBpbnQgYXJnKVxcbmZzL2xvY2tzLmMtMTQ5MC17XFxuLS1cXG5mcy9sb2Nrcy5jLTE1MDAtLyogV2UgYWxyZWFkeSBoYWQgYSBsZWFzZSBvbiB0aGlzIGZpbGU7IGp1c3QgY2hhbmdlIGl0cyB0eXBlICovXFxuZnMvbG9ja3MuYzoxNTAxOmludCBsZWFzZV9tb2RpZnkoc3RydWN0IGZpbGVfbGVhc2UgKmZsLCBpbnQgYXJnLCBzdHJ1Y3QgbGlzdF9oZWFkICpkaXNwb3NlKVxcbmZzL2xvY2tzLmMtMTUwMi17XFxuLS1cXG5mcy9sb2Nrcy5jLTE1MjItfVxcbmZzL2xvY2tzLmM6MTUyMzpFWFBPUlRfU1lNQk9MKGxlYXNlX21vZGlmeSk7XFxuZnMvbG9ja3MuYy0xNTI0LVxcbmZzL2xvY2tzLmM6MTUyNTpzdGF0aWMgYm9vbCBwYXN0X3RpbWUodW5zaWduZWQgbG9uZyB0aGVuKVxcbmZzL2xvY2tzLmMtMTUyNi17XFxuLS1cXG5mcy9sb2Nrcy5jLTE1MzItXFxuZnMvbG9ja3MuYzoxNTMzOnN0YXRpYyB2b2lkIHRpbWVfb3V0X2xlYXNlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbGlzdF9oZWFkICpkaXNwb3NlKVxcbmZzL2xvY2tzLmMtMTUzNC17XFxuLS1cXG5mcy9sb2Nrcy5jLTE1NjAtXFxuZnMvbG9ja3MuYzoxNTYxOnN0YXRpYyBib29sIGxlYXNlc19jb25mbGljdChzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmxjLCBzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmJjKVxcbmZzL2xvY2tzLmMtMTU2Mi17XFxuLS1cXG5mcy9sb2Nrcy5jPTE1OTQ9dTMyXFxuZnMvbG9ja3MuYzoxNTk1Omlub2RlX2xlYXNlX2lnbm9yZV9tYXNrKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvbG9ja3MuYy0xNTk2LXtcXG4tLVxcbmZzL2xvY2tzLmMtMTYxNC19XFxuZnMvbG9ja3MuYzoxNjE1OkVYUE9SVF9TWU1CT0xfR1BMKGlub2RlX2xlYXNlX2lnbm9yZV9tYXNrKTtcXG5mcy9sb2Nrcy5jLTE2MTYtXFxuZnMvbG9ja3MuYz0xNjE3PXN0YXRpYyBib29sXFxuZnMvbG9ja3MuYzoxNjE4Omlnbm9yZV9kaXJfZGVsZWdfYnJlYWsoc3RydWN0IGZpbGVfbGVhc2UgKmZsLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuZnMvbG9ja3MuYy0xNjE5LXtcXG4tLVxcbmZzL2xvY2tzLmM9MTYzMD1zdGF0aWMgdW5zaWduZWQgaW50XFxuZnMvbG9ja3MuYzoxNjMxOmJyZWFrX2xlYXNlX2ZsYWdzX3RvX3R5cGUodW5zaWduZWQgaW50IGZsYWdzKVxcbmZzL2xvY2tzLmMtMTYzMi17XFxuLS1cXG5mcy9sb2Nrcy5jPTE2NDQ9c3RhdGljIHN0cnVjdCBmaWxlX2xlYXNlICpcXG5mcy9sb2Nrcy5jOjE2NDU6Zmlyc3RfdmlzaWJsZV9sZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZV9sZWFzZSAqbmV3X2ZsLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuZnMvbG9ja3MuYy0xNjQ2LXtcXG4tLVxcbmZzL2xvY2tzLmMtMTY3NS0gKi9cXG5mcy9sb2Nrcy5jOjE2NzY6aW50IF9fYnJlYWtfbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgaW50IGZsYWdzKVxcbmZzL2xvY2tzLmMtMTY3Ny17XFxuLS1cXG5mcy9sb2Nrcy5jLTE3OTEtfVxcbmZzL2xvY2tzLmM6MTc5MjpFWFBPUlRfU1lNQk9MKF9fYnJlYWtfbGVhc2UpO1xcbmZzL2xvY2tzLmMtMTc5My1cXG4tLVxcbmZzL2xvY2tzLmMtMTgwMi0gKi9cXG5mcy9sb2Nrcy5jOjE4MDM6dm9pZCBsZWFzZV9nZXRfbXRpbWUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHRpbWVzcGVjNjQgKnRpbWUpXFxuZnMvbG9ja3MuYy0xODA0LXtcXG4tLVxcbmZzL2xvY2tzLmMtMTgyMS19XFxuZnMvbG9ja3MuYzoxODIyOkVYUE9SVF9TWU1CT0wobGVhc2VfZ2V0X210aW1lKTtcXG5mcy9sb2Nrcy5jLTE4MjMtXFxuLS1cXG5mcy9sb2Nrcy5jLTE4NDctICovXFxuZnMvbG9ja3MuYzoxODQ4OnN0YXRpYyBpbnQgX19mY250bF9nZXRsZWFzZShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGZsYXZvcilcXG5mcy9sb2Nrcy5jLTE4NDkte1xcbi0tXFxuZnMvbG9ja3MuYy0xODc1LVxcbmZzL2xvY2tzLmM6MTg3NjppbnQgZmNudGxfZ2V0bGVhc2Uoc3RydWN0IGZpbGUgKmZpbHApXFxuZnMvbG9ja3MuYy0xODc3LXtcXG4tLVxcbmZzL2xvY2tzLmMtMTg4MC1cXG5mcy9sb2Nrcy5jOjE4ODE6aW50IGZjbnRsX2dldGRlbGVnKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgZGVsZWdhdGlvbiAqZGVsZWcpXFxuZnMvbG9ja3MuYy0xODgyLXtcXG4tLVxcbmZzL2xvY2tzLmM9MTg4OT1zdGF0aWMgaW50XFxuZnMvbG9ja3MuYzoxODkwOmdlbmVyaWNfYWRkX2xlYXNlKHN0cnVjdCBmaWxlICpmaWxwLCBpbnQgYXJnLCBzdHJ1Y3QgZmlsZV9sZWFzZSAqKmZscCwgdm9pZCAqKnByaXYpXFxuZnMvbG9ja3MuYy0xODkxLXtcXG4tLVxcbmZzL2xvY2tzLmMtMjAwMS1cXG5mcy9sb2Nrcy5jOjIwMDI6c3RhdGljIGludCBnZW5lcmljX2RlbGV0ZV9sZWFzZShzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqb3duZXIpXFxuZnMvbG9ja3MuYy0yMDAzLXtcXG4tLVxcbmZzL2xvY2tzLmMtMjA0NC0gKi9cXG5mcy9sb2Nrcy5jOjIwNDU6aW50IGdlbmVyaWNfc2V0bGVhc2Uoc3RydWN0IGZpbGUgKmZpbHAsIGludCBhcmcsIHN0cnVjdCBmaWxlX2xlYXNlICoqZmxwLFxcbmZzL2xvY2tzLmMtMjA0Ni1cXHRcXHRcXHR2b2lkICoqcHJpdilcXG4tLVxcbmZzL2xvY2tzLmMtMjA3MC19XFxuZnMvbG9ja3MuYzoyMDcxOkVYUE9SVF9TWU1CT0woZ2VuZXJpY19zZXRsZWFzZSk7XFxuZnMvbG9ja3MuYy0yMDcyLVxcbi0tXFxuZnMvbG9ja3MuYz0yMDgxPXN0YXRpYyBpbmxpbmUgdm9pZFxcbmZzL2xvY2tzLmM6MjA4MjpsZWFzZV9ub3RpZmllcl9jaGFpbl9pbml0KHZvaWQpXFxuZnMvbG9ja3MuYy0yMDgzLXtcXG4tLVxcbmZzL2xvY2tzLmM9MjA4Nz1zdGF0aWMgaW5saW5lIHZvaWRcXG5mcy9sb2Nrcy5jOjIwODg6c2V0bGVhc2Vfbm90aWZpZXIoaW50IGFyZywgc3RydWN0IGZpbGVfbGVhc2UgKmxlYXNlKVxcbmZzL2xvY2tzLmMtMjA4OS17XFxuLS1cXG5mcy9sb2Nrcy5jLTIwOTMtXFxuZnMvbG9ja3MuYzoyMDk0OmludCBsZWFzZV9yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKVxcbmZzL2xvY2tzLmMtMjA5NS17XFxuLS1cXG5mcy9sb2Nrcy5jLTIwOTctfVxcbmZzL2xvY2tzLmM6MjA5ODpFWFBPUlRfU1lNQk9MX0dQTChsZWFzZV9yZWdpc3Rlcl9ub3RpZmllcik7XFxuZnMvbG9ja3MuYy0yMDk5LVxcbmZzL2xvY2tzLmM6MjEwMDp2b2lkIGxlYXNlX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYilcXG5mcy9sb2Nrcy5jLTIxMDEte1xcbi0tXFxuZnMvbG9ja3MuYy0yMTAzLX1cXG5mcy9sb2Nrcy5jOjIxMDQ6RVhQT1JUX1NZTUJPTF9HUEwobGVhc2VfdW5yZWdpc3Rlcl9ub3RpZmllcik7XFxuZnMvbG9ja3MuYy0yMTA1LVxcbi0tXFxuZnMvbG9ja3MuYz0yMTA3PWludFxcbmZzL2xvY2tzLmM6MjEwODprZXJuZWxfc2V0bGVhc2Uoc3RydWN0IGZpbGUgKmZpbHAsIGludCBhcmcsIHN0cnVjdCBmaWxlX2xlYXNlICoqbGVhc2UsIHZvaWQgKipwcml2KVxcbmZzL2xvY2tzLmMtMjEwOS17XFxuLS1cXG5mcy9sb2Nrcy5jLTIxMTUtfVxcbmZzL2xvY2tzLmM6MjExNjpFWFBPUlRfU1lNQk9MX0dQTChrZXJuZWxfc2V0bGVhc2UpO1xcbmZzL2xvY2tzLmMtMjExNy1cXG4tLVxcbmZzL2xvY2tzLmM9MjEzNT1pbnRcXG5mcy9sb2Nrcy5jOjIxMzY6dmZzX3NldGxlYXNlKHN0cnVjdCBmaWxlICpmaWxwLCBpbnQgYXJnLCBzdHJ1Y3QgZmlsZV9sZWFzZSAqKmxlYXNlLCB2b2lkICoqcHJpdilcXG5mcy9sb2Nrcy5jLTIxMzcte1xcbi0tXFxuZnMvbG9ja3MuYy0yMTQ4LX1cXG5mcy9sb2Nrcy5jOjIxNDk6RVhQT1JUX1NZTUJPTF9HUEwodmZzX3NldGxlYXNlKTtcXG5mcy9sb2Nrcy5jLTIxNTAtXFxuZnMvbG9ja3MuYzoyMTUxOnN0YXRpYyBpbnQgZG9fZmNudGxfYWRkX2xlYXNlKHVuc2lnbmVkIGludCBmZCwgc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBmbGF2b3IsIGludCBhcmcpXFxuZnMvbG9ja3MuYy0yMTUyLXtcXG4tLVxcbmZzL2xvY2tzLmMtMjE4NS0gKi9cXG5mcy9sb2Nrcy5jOjIxODY6aW50IGZjbnRsX3NldGxlYXNlKHVuc2lnbmVkIGludCBmZCwgc3RydWN0IGZpbGUgKmZpbHAsIGludCBhcmcpXFxuZnMvbG9ja3MuYy0yMTg3LXtcXG4tLVxcbmZzL2xvY2tzLmMtMjIwNS0gKi9cXG5mcy9sb2Nrcy5jOjIyMDY6aW50IGZjbnRsX3NldGRlbGVnKHVuc2lnbmVkIGludCBmZCwgc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBkZWxlZ2F0aW9uICpkZWxlZylcXG5mcy9sb2Nrcy5jLTIyMDcte1xcbi0tXFxuZnMvbG9ja3MuYy0yMjIzLSAqL1xcbmZzL2xvY2tzLmM6MjIyNDpzdGF0aWMgaW50IGZsb2NrX2xvY2tfaW5vZGVfd2FpdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbClcXG5mcy9sb2Nrcy5jLTIyMjUte1xcbi0tXFxuZnMvbG9ja3MuYy0yMjQ3LSAqL1xcbmZzL2xvY2tzLmM6MjI0ODppbnQgbG9ja3NfbG9ja19pbm9kZV93YWl0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKVxcbmZzL2xvY2tzLmMtMjI0OS17XFxuLS1cXG5mcy9sb2Nrcy5jLTIyNjItfVxcbmZzL2xvY2tzLmM6MjI2MzpFWFBPUlRfU1lNQk9MKGxvY2tzX2xvY2tfaW5vZGVfd2FpdCk7XFxuZnMvbG9ja3MuYy0yMjY0LVxcbi0tXFxuZnMvbG9ja3MuYy0yMjc5LSAqL1xcbmZzL2xvY2tzLmM6MjI4MDpTWVNDQUxMX0RFRklORTIoZmxvY2ssIHVuc2lnbmVkIGludCwgZmQsIHVuc2lnbmVkIGludCwgY21kKVxcbmZzL2xvY2tzLmMtMjI4MS17XFxuLS1cXG5mcy9sb2Nrcy5jLTIzNDQtICovXFxuZnMvbG9ja3MuYzoyMzQ1OmludCB2ZnNfdGVzdF9sb2NrKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbClcXG5mcy9sb2Nrcy5jLTIzNDYte1xcbi0tXFxuZnMvbG9ja3MuYy0yMzY0LX1cXG5mcy9sb2Nrcy5jOjIzNjU6RVhQT1JUX1NZTUJPTF9HUEwodmZzX3Rlc3RfbG9jayk7XFxuZnMvbG9ja3MuYy0yMzY2LVxcbi0tXFxuZnMvbG9ja3MuYy0yMzczLSAqL1xcbmZzL2xvY2tzLmM6MjM3NDpzdGF0aWMgcGlkX3QgbG9ja3NfdHJhbnNsYXRlX3BpZChzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmZsLCBzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMpXFxuZnMvbG9ja3MuYy0yMzc1LXtcXG4tLVxcbmZzL2xvY2tzLmMtMjQwMC1cXG5mcy9sb2Nrcy5jOjI0MDE6c3RhdGljIGludCBwb3NpeF9sb2NrX3RvX2Zsb2NrKHN0cnVjdCBmbG9jayAqZmxvY2ssIHN0cnVjdCBmaWxlX2xvY2sgKmZsKVxcbmZzL2xvY2tzLmMtMjQwMi17XFxuLS1cXG5mcy9sb2Nrcy5jLTI0MjItI2lmIEJJVFNfUEVSX0xPTkcgPT0gMzJcXG5mcy9sb2Nrcy5jOjI0MjM6c3RhdGljIHZvaWQgcG9zaXhfbG9ja190b19mbG9jazY0KHN0cnVjdCBmbG9jazY0ICpmbG9jaywgc3RydWN0IGZpbGVfbG9jayAqZmwpXFxuZnMvbG9ja3MuYy0yNDI0LXtcXG4tLVxcbmZzL2xvY2tzLmMtMjQzNi0gKi9cXG5mcy9sb2Nrcy5jOjI0Mzc6aW50IGZjbnRsX2dldGxrKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCBzdHJ1Y3QgZmxvY2sgKmZsb2NrKVxcbmZzL2xvY2tzLmMtMjQzOC17XFxuLS1cXG5mcy9sb2Nrcy5jLTI1MTItICovXFxuZnMvbG9ja3MuYzoyNTEzOmludCB2ZnNfbG9ja19maWxlKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCwgc3RydWN0IGZpbGVfbG9jayAqY29uZilcXG5mcy9sb2Nrcy5jLTI1MTQte1xcbi0tXFxuZnMvbG9ja3MuYy0yNTIwLX1cXG5mcy9sb2Nrcy5jOjI1MjE6RVhQT1JUX1NZTUJPTF9HUEwodmZzX2xvY2tfZmlsZSk7XFxuZnMvbG9ja3MuYy0yNTIyLVxcbmZzL2xvY2tzLmM6MjUyMzpzdGF0aWMgaW50IGRvX2xvY2tfZmlsZV93YWl0KHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLFxcbmZzL2xvY2tzLmMtMjUyNC1cXHRcXHRcXHQgICAgIHN0cnVjdCBmaWxlX2xvY2sgKmZsKVxcbi0tXFxuZnMvbG9ja3MuYz0yNTQ3PXN0YXRpYyBpbnRcXG5mcy9sb2Nrcy5jOjI1NDg6Y2hlY2tfZm1vZGVfZm9yX3NldGxrKHN0cnVjdCBmaWxlX2xvY2sgKmZsKVxcbmZzL2xvY2tzLmMtMjU0OS17XFxuLS1cXG5mcy9sb2Nrcy5jLTI1NjQtICovXFxuZnMvbG9ja3MuYzoyNTY1OmludCBmY250bF9zZXRsayh1bnNpZ25lZCBpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLFxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjozMTozNy4zNTU4NzY3ODhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTIxOTQ5ODQ2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS2VybmVsIExvY2tpbmcgQ29uZmlndXJhdGlvbiBhbmQgU3ltYm9sIFZpc2liaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGBmY250bF9zZXRsa2AsIGBmY250bF9zZXRsazY0YCwgYW5kIGBsb2Nrc19zaG93YC4gRmlyc3QgcXVlc3Rpb246IGlzIGBsb2Nrc19zaG93YCBzdGF0aWMgd2l0aGluIGBmcy9sb2Nrcy5jYD8gVGhhdCdzIGtleSBiZWNhdXNlIHRoZSBkb2N1bWVudGF0aW9uIHByZWZlcnMgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMsIGFzIHN0YXRpYyBmdW5jdGlvbnMgY2FuIGJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLCBsb3NpbmcgdGhlaXIgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy5cblxuUmlnaHQsIHNvIGNhbiBgbG9ja3Nfc2hvd2AgZXZlbiAqYmUqIGEgXCJGb2N1c1N5bWJvbFwiIGlmIGl0J3MgcG90ZW50aWFsbHkgaW5saW5lZD8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0IGFjdHVhbGx5IGhhcyBhIHN5bWJvbC4gQWhhISBJdCAqaXMqIHJlZmVyZW5jZWQgaW4gYGxvY2tzX3NlcV9vcGVyYXRpb25zYCBiZWNhdXNlIGl0cyBhZGRyZXNzIGlzIHRha2VuIChgLnNob3cgPSBsb2Nrc19zaG93YCkuIFRoYXQgbWVhbnMgdGhlIGNvbXBpbGVyIGNhbid0IGlubGluZSBpdDsgaXQgaGFzIHRvIGdlbmVyYXRlIGEgZnVuY3Rpb24gcG9pbnRlciBhbmQsIHRoZXJlZm9yZSwgYSBkaXN0aW5jdCBzeW1ib2wuIEdvb2QuXG5cbk5leHQsIEkgbmVlZCB0byBjb25zaWRlciBwb3RlbnRpYWwgcmVsZXZhbnQgZW50cnlwb2ludHMuIE9idmlvdXNseSBgZmNudGxfc2V0bGtgLCBhbmQgYGZjbnRsX2dldGxrYCwgd2hpY2ggYXJlIHVzZWQgaW4gYGZjbnRsYC4gSXQgYWxzbyBzZWVtcyB0aGF0IHRoaW5ncyBsaWtlIGBzeXNfZmxvY2tgIGNvdWxkIGJlIHJlbGV2YW50LCBhbG9uZ3NpZGUgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBvZiB0aGUgYGxvY2tzX3Nob3dgIHN5c3RlbSBhcyB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byB2aWV3IHRoZSBsb2Nrcy5cblxuU28sIGxldCdzIG1hcCBvdXQgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlncy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ3ZlIGdvdCBldmVyeXRoaW5nIGVuYWJsZWQ6XG5cbjEuICBgRklMRV9MT0NLSU5HYDogVGhpcyBpcyBlc3NlbnRpYWwsIGFzIGl0IGVuYWJsZXMgYGxvY2tzLmNgLlxuMi4gIGBQUk9DX0ZTYDogTmVlZGVkIGJlY2F1c2UgYGZzL2xvY2tzLmNgIHVzZXMgYCNpZmRlZiBDT05GSUdfUFJPQ19GU2AsIGFuZCB0aGF0J3Mgd2hlcmUgYGxvY2tzX3Nob3dgIGFuZCB0aGUgYC9wcm9jL2xvY2tzYCBmaWxlIGFyZSBkZWZpbmVkLlxuMy4gIGBQSURfTlNgOiBUaGlzIGlzIG5lZWRlZCB0byBlbmFibGUgdGhlIHVzYWdlIG9mIHBpZCBuYW1lc3BhY2VzIGFuZCBlbnN1cmluZyB0aGF0IGBwcm9jX3BpZG5zICE9IFx1MDAyNmluaXRfcGlkX25zYC5cblxuQWxyaWdodCwgbGV0J3MgZG91YmxlIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcy4gQmFjayB0byBgZnMvbG9ja3MuY2AgZm9yIGFueSBtb3JlIGNsdWVzLlxuXG5ZdXAsIEknbSBzZWVpbmcgdGhhdCBgQ09ORklHX1BST0NfRlNgIHN1cnJvdW5kcyB0aGUgY29kZSBmcm9tIGxpbmVzIDI5MTItMzE1NS4gYENPTkZJR19GSUxFX0xPQ0tJTkdgIGlzIGRlZmluZWQgaW4gYGZzL01ha2VmaWxlYCBhcyBgb2JqLSQoQ09ORklHX0ZJTEVfTE9DS0lORykgKz0gbG9ja3Mub2AuIEFuZCBgQ09ORklHX1BJRF9OU2AgaXMgaW4gYGluaXQvS2NvbmZpZ2AuIExldCdzIGRpZyBpbnRvIHRoYXQgYGluaXQvS2NvbmZpZ2AgZm9yIGBQSURfTlNgOlxuXG5gYGBcbmNvbmZpZyBQSURfTlNcblx0Ym9vbCBcIlBJRCBOYW1lc3BhY2VzXCJcblx0ZGVmYXVsdCB5XG5cdGRlcGVuZHMgb24gTkFNRVNQQUNFU1xuXHRkZXBlbmRzIG9uIENIRUNLUE9JTlRfUkVTVE9SRSB8fCBORVRcbmBgYFxuXG5XYWl0LCBob2xkIG9uISBJIG5lZWQgdG8gYmUgKnN1cmUqIEkgdW5kZXJzdGFuZCB0aG9zZSBkZXBlbmRlbmNpZXMuIExldCdzIHNlZSBleGFjdGx5IHdoYXQgYFBJRF9OU2AgcmVsaWVzIG9uIGluIGRldGFpbC4gVGhhdCdzIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MjAwMzcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MzE6NDIuNTc1Mzc5NjEyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTc0MTQ3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUElEX05TXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTQ0Nj1jb25maWcgVVNFUl9OU1xcbi0tXFxuaW5pdC9LY29uZmlnLTE0NTktXFxuaW5pdC9LY29uZmlnOjE0NjA6Y29uZmlnIFBJRF9OU1xcbmluaXQvS2NvbmZpZy0xNDYxLVxcdGJvb2wgXFxcIlBJRCBOYW1lc3BhY2VzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjozMTo0Mi42NDcxMjU5NzFaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU2OTM0MzUxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgb2YgdGhlIGBpbml0L0tjb25maWdgIGZpbGUsIGFzIEkgdW5kZXJzdGFuZCB0aGVtOlxuXG4qKkRpc3NlY3RpbmcgaW5pdC9LY29uZmlnIExpbmVzIDE0NTAtMTQ4MCoqXG5cbk9rYXksIHNvIGxldCdzIGRpZyBpbnRvIGxpbmVzIDE0NTAgdG8gMTQ4MCBvZiBgaW5pdC9LY29uZmlnYC4gSSdtIGdvaW5nIHRvIHBhcnNlIHdoYXQncyBnb2luZyBvbiB3aXRoaW4gdGhvc2UgbGluZXMgb2YgY29uZmlnLiBJdCdzIGxpa2VseSByZWxhdGVkIHRvIHNvbWUgY29yZSBzeXN0ZW0gaW5pdGlhbGl6YXRpb24sIHBvc3NpYmx5IGxpbmtlZCB0byB0aGUgZWFybHkgYm9vdCBwcm9jZXNzIG9yIGZ1bmRhbWVudGFsIGhhcmR3YXJlIHNldHVwLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoZXNlIGtpbmRzIG9mIHNldHRpbmdzIGFyZSB1c3VhbGx5IGludHJpY2F0ZWx5IGludGVydHdpbmVkLlxuXG5JIGFudGljaXBhdGUgdGhlIGNvbmZpZyBvcHRpb25zIGluIHRoYXQgc2VjdGlvbiB3aWxsIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBvcHRpb25zLCBvciBkZWZhdWx0cywgdGhhdCBhZmZlY3QgaG93IHRoZSBrZXJuZWwgaW5pdGlhbGl6ZXMgdmFyaW91cyBjb21wb25lbnRzIGR1cmluZyB0aGUgdmVyeSBmaXJzdCBzdGFnZXMgb2YgYm9vdGluZyB0aGUgc3lzdGVtLiBJJ20gZ3Vlc3NpbmcgaXQgbWlnaHQgY29udGFpbiBzZXR0aW5ncyBmb3IgdGhpbmdzIGxpa2UgY29uc29sZSBpbml0aWFsaXphdGlvbiwgZWFybHkgbWVtb3J5IGFsbG9jYXRpb24sIG9yIHBlcmhhcHMgZXZlbiBpbml0aWFsIGludGVycnVwdCBzZXR1cC4gVGhlIGRlcGVuZGVuY3kgc3RydWN0dXJlIGlzIGtleSBoZXJlLiBJJ2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgYW55IGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljYWwgZmxvdyBhbmQgaG93IHRoZXNlIG9wdGlvbnMgcmVsYXRlIHRvIG90aGVyLCBwb3RlbnRpYWxseSBtb3JlIGZ1bmRhbWVudGFsLCBrZXJuZWwgZmVhdHVyZXMuXG5cbkl0J3MgYWxzbyBsaWtlbHkgSSB3aWxsIG9ic2VydmUgdGhlIGludGVycGxheSBiZXR3ZWVuIHVzZXItZmFjaW5nIGNvbmZpZyBvcHRpb25zIGFuZCBpbnRlcm5hbCBrZXJuZWwgZGVmYXVsdHMuIEkgd2FudCB0byBsb29rIGZvciBhbnl0aGluZyB0aGF0IGNhbiBiZSBhZGp1c3RlZC4gVGhpcyBpcyBhIGNydWNpYWwgc2VjdGlvbiBmb3IgY29udHJvbGxpbmcgc3lzdGVtIGJlaGF2aW9yIGZyb20gdGhlIHZlcnkgc3RhcnQuIEnigJltIGVzcGVjaWFsbHkgbG9va2luZyBmb3IgYW55IHN1YnRsZSBoaW50cyByZWdhcmRpbmcgcGVyZm9ybWFuY2Ugb3Igc2VjdXJpdHkgdHJhZGVvZmZzIHRoYXQgYXJlIG9mdGVuIHByZXNlbnQgaW4gdGhlc2UgbG93LWxldmVsIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTI2NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjMxOjQ1LjIxNjQ3NDExOVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODQ0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0NTAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0NTA6XFx0XFx0ICBUaGlzIGFsbG93cyBjb250YWluZXJzLCBpLmUuIHZzZXJ2ZXJzLCB0byB1c2UgdXNlciBuYW1lc3BhY2VzXFxuMTQ1MTpcXHRcXHQgIHRvIHByb3ZpZGUgZGlmZmVyZW50IHVzZXIgaW5mbyBmb3IgZGlmZmVyZW50IHNlcnZlcnMuXFxuMTQ1MjpcXHRcXG4xNDUzOlxcdFxcdCAgV2hlbiB1c2VyIG5hbWVzcGFjZXMgYXJlIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBpdCBpc1xcbjE0NTQ6XFx0XFx0ICByZWNvbW1lbmRlZCB0aGF0IHRoZSBNRU1DRyBvcHRpb24gYWxzbyBiZSBlbmFibGVkIGFuZCB0aGF0XFxuMTQ1NTpcXHRcXHQgIHVzZXItc3BhY2UgdXNlIHRoZSBtZW1vcnkgY29udHJvbCBncm91cHMgdG8gbGltaXQgdGhlIGFtb3VudFxcbjE0NTY6XFx0XFx0ICBvZiBtZW1vcnkgYSBtZW1vcnkgdW5wcml2aWxlZ2VkIHVzZXJzIGNhbiB1c2UuXFxuMTQ1NzpcXHRcXG4xNDU4OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4xNDU5OlxcdFxcbjE0NjA6XFx0Y29uZmlnIFBJRF9OU1xcbjE0NjE6XFx0XFx0Ym9vbCBcXFwiUElEIE5hbWVzcGFjZXNcXFwiXFxuMTQ2MjpcXHRcXHRkZWZhdWx0IHlcXG4xNDYzOlxcdFxcdGhlbHBcXG4xNDY0OlxcdFxcdCAgU3VwcG9ydCBwcm9jZXNzIGlkIG5hbWVzcGFjZXMuICBUaGlzIGFsbG93cyBoYXZpbmcgbXVsdGlwbGVcXG4xNDY1OlxcdFxcdCAgcHJvY2Vzc2VzIHdpdGggdGhlIHNhbWUgcGlkIGFzIGxvbmcgYXMgdGhleSBhcmUgaW4gZGlmZmVyZW50XFxuMTQ2NjpcXHRcXHQgIHBpZCBuYW1lc3BhY2VzLiAgVGhpcyBpcyBhIGJ1aWxkaW5nIGJsb2NrIG9mIGNvbnRhaW5lcnMuXFxuMTQ2NzpcXHRcXG4xNDY4OlxcdGNvbmZpZyBORVRfTlNcXG4xNDY5OlxcdFxcdGJvb2wgXFxcIk5ldHdvcmsgbmFtZXNwYWNlXFxcIlxcbjE0NzA6XFx0XFx0ZGVwZW5kcyBvbiBORVRcXG4xNDcxOlxcdFxcdGRlZmF1bHQgeVxcbjE0NzI6XFx0XFx0aGVscFxcbjE0NzM6XFx0XFx0ICBBbGxvdyB1c2VyIHNwYWNlIHRvIGNyZWF0ZSB3aGF0IGFwcGVhciB0byBiZSBtdWx0aXBsZSBpbnN0YW5jZXNcXG4xNDc0OlxcdFxcdCAgb2YgdGhlIG5ldHdvcmsgc3RhY2suXFxuMTQ3NTpcXHRcXG4xNDc2OlxcdGVuZGlmICMgTkFNRVNQQUNFU1xcbjE0Nzc6XFx0XFxuMTQ3ODpcXHRjb25maWcgQ0hFQ0tQT0lOVF9SRVNUT1JFXFxuMTQ3OTpcXHRcXHRib29sIFxcXCJDaGVja3BvaW50L3Jlc3RvcmUgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MzE6NDUuMjE2NjYxNDI5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NTU4MzE4MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBLY29uZmlnIExhYnlyaW50aDogQSBQcmUtTGluZSAxNDUwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgaW5pdC9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGJlZm9yZSBsaW5lIDE0NTAuIFRoZSBtZW50aW9uIG9mIE5BTUVTUEFDRVMgaXMgdGhlIHRyaWdnZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0LiBJJ20gYXNzdW1pbmcsIGdpdmVuIHRoZSBmaWxlIGFuZCB0aGUgZ2VuZXJhbCBjb250ZXh0IG9mIGtlcm5lbCBjb25maWd1cmF0aW9uLCB0aGF0IHdlIGFyZSBkZWFsaW5nIHdpdGggc29tZSBhc3BlY3Qgb2YgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbSwgbGlrZWx5IHJlbGF0ZWQgdG8gbmFtZXNwYWNlcyBpbiBzb21lIHdheS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHJlbGF0aW9uc2hpcHMgYXJlIGRlZmluZWQgb3IgdXNlZCBwcmlvciB0byB0aGF0IGxpbmUuIEkgbmVlZCB0byBkaXNjb3ZlciB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSBvdmVyYWxsIHBpY3R1cmUgYmVmb3JlIEkgY2FuIHVuZGVyc3RhbmQgd2hhdCB0aGUgbGluZSBpcyBkb2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIwMjMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjMxOjQ4LjA3MjQ5NjE0MloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzAxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0MzA6XFx0XFx0ZGVmYXVsdCB5XFxuMTQzMTpcXHRcXHRoZWxwXFxuMTQzMjpcXHRcXHQgIEluIHRoaXMgbmFtZXNwYWNlIGJvb3R0aW1lIGFuZCBtb25vdG9uaWMgY2xvY2tzIGNhbiBiZSBzZXQuXFxuMTQzMzpcXHRcXHQgIFRoZSB0aW1lIHdpbGwga2VlcCBnb2luZyB3aXRoIHRoZSBzYW1lIHBhY2UuXFxuMTQzNDpcXHRcXG4xNDM1OlxcdGNvbmZpZyBUSU1FX05TX1ZEU09cXG4xNDM2OlxcdFxcdGRlZl9ib29sIFRJTUVfTlMgXFx1MDAyNlxcdTAwMjYgR0VORVJJQ19HRVRUSU1FT0ZEQVlcXG4xNDM3OlxcdFxcbjE0Mzg6XFx0Y29uZmlnIElQQ19OU1xcbjE0Mzk6XFx0XFx0Ym9vbCBcXFwiSVBDIG5hbWVzcGFjZVxcXCJcXG4xNDQwOlxcdFxcdGRlcGVuZHMgb24gKFNZU1ZJUEMgfHwgUE9TSVhfTVFVRVVFKVxcbjE0NDE6XFx0XFx0ZGVmYXVsdCB5XFxuMTQ0MjpcXHRcXHRoZWxwXFxuMTQ0MzpcXHRcXHQgIEluIHRoaXMgbmFtZXNwYWNlIHRhc2tzIHdvcmsgd2l0aCBJUEMgaWRzIHdoaWNoIGNvcnJlc3BvbmQgdG9cXG4xNDQ0OlxcdFxcdCAgZGlmZmVyZW50IElQQyBvYmplY3RzIGluIGRpZmZlcmVudCBuYW1lc3BhY2VzLlxcbjE0NDU6XFx0XFxuMTQ0NjpcXHRjb25maWcgVVNFUl9OU1xcbjE0NDc6XFx0XFx0Ym9vbCBcXFwiVXNlciBuYW1lc3BhY2VcXFwiXFxuMTQ0ODpcXHRcXHRkZWZhdWx0IG5cXG4xNDQ5OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MzE6NDguMDcyNjcwMzUzWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxMDgyNTY0NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTmF2aWdhdGluZyB0aGUgTmFtZXNwYWNlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBgbWVudWNvbmZpZ2AgZm9yIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgbmFtZXNwYWNlIGNvbmZpZ3VyYXRpb25zLiBXaGVyZSBkbyBJIGV2ZW4gYmVnaW4/IFJpZ2h0LCBsZXQncyBzdGFydCB3aXRoIGEgc2VhcmNoLiBJJ2xsIG5lZWQgdG8gbG9jYXRlIHdoZXJlIGBOQU1FU1BBQ0VTYCBpcyBkZWZpbmVkIGluIHRoZSBtZW51IHN0cnVjdHVyZS4gVW5kZXJzdGFuZGluZyB0aGUgYnJhbmNoaW5nIGxvZ2ljIGZyb20gdGhhdCBwb2ludCBpcyBrZXkuIEl0J3Mgbm90IGp1c3QgYWJvdXQgZmluZGluZyB0aGUgaW5pdGlhbCBlbnRyeSwgYnV0IGFsc28gdHJhY2luZyB0aGUgZGVwZW5kZW5jaWVzLCBkZWZhdWx0cywgYW5kIGFueSBjb25kaXRpb25hbCBidWlsZCBvcHRpb25zIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuIE15IGd1dCB0ZWxscyBtZSB0aGVyZSdzIHByb2JhYmx5IGEgaGllcmFyY2hpY2FsIHNldHVwLCBzbyBJIHNob3VsZCBiZSBwcmVwYXJlZCB0byBkaWcgdGhyb3VnaCBzZXZlcmFsIGxldmVscyBvZiBpbmNsdWRlcyBhbmQgY29uZGl0aW9uYWwgc3RhdGVtZW50cyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBrZXJuZWwgZmVhdHVyZXMgYW5kIGNvbmZpZ3VyYXRpb25zIG1pZ2h0IGltcGFjdCBvciBiZSBpbXBhY3RlZCBieSB0aGUgbmFtZXNwYWNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI0OTIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjMxOjUxLjE4MDkyOTU0MVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2OTk4OTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbnVjb25maWcgTkFNRVNQQUNFU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE0MDc9ZW5kaWYgIyBDR1JPVVBTXFxuaW5pdC9LY29uZmlnLTE0MDgtXFxuaW5pdC9LY29uZmlnOjE0MDk6bWVudWNvbmZpZyBOQU1FU1BBQ0VTXFxuaW5pdC9LY29uZmlnLTE0MTAtXFx0Ym9vbCBcXFwiTmFtZXNwYWNlcyBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MzE6NTEuMzQ3OTM1Njg4WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMjMwNDM0MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgLSBBIFF1aWNrIEF1ZGl0KipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIEkgbmVlZCB0byBxdWlja2x5IGdyYXNwIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gYSBmZXcga2V5IGFyZWFzOiBOQU1FU1BBQ0VTLCBQSURfTlMsIEZJTEVfTE9DS0lORywgYW5kIFBST0NfRlMuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gZW5zdXJpbmcgdGhlc2UgYXJlIGNvcnJlY3RseSBzZXQgYW5kIGludGVyYWN0IHByb3Blcmx5LlxuXG5UaGUgcGxhbiBpcyB0byBkaXZlIGRlZXBlciBpbnRvIGBDT05GSUdfRklMRV9MT0NLSU5HYCBhbmQgYENPTkZJR19QUk9DX0ZTYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBpbnZvbHZlZCB0aGF0IG1pZ2h0IG5vdCBiZSBpbW1lZGlhdGVseSBvYnZpb3VzLiBTcGVjaWZpY2FsbHksIEknbGwgZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZSwgY2hlY2tpbmcgYGZzL3Byb2MvS2NvbmZpZ2AgZm9yIHRoZSBkZXBlbmRlbmNpZXMgb2YgUFJPQ19GUy4gVGhpcyB3aWxsIGdpdmUgYSBnb29kIG92ZXJ2aWV3IGFuZCBoZWxwIG1lIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIG9yIGFyZWFzIHRoYXQgbmVlZCBmdXJ0aGVyIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNzg4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MzE6NTMuNjcwOTgzODNaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0MTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3Byb2MvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFBST0NfRlNcXG4gICAzOlxcdFxcdGJvb2wgXFxcIi9wcm9jIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbiAgIDQ6XFx0XFx0ZGVmYXVsdCB5XFxuICAgNTpcXHRcXHRoZWxwXFxuICAgNjpcXHRcXHQgIFRoaXMgaXMgYSB2aXJ0dWFsIGZpbGUgc3lzdGVtIHByb3ZpZGluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3RhdHVzXFxuICAgNzpcXHRcXHQgIG9mIHRoZSBzeXN0ZW0uIFxcXCJWaXJ0dWFsXFxcIiBtZWFucyB0aGF0IGl0IGRvZXNuJ3QgdGFrZSB1cCBhbnkgc3BhY2Ugb25cXG4gICA4OlxcdFxcdCAgeW91ciBoYXJkIGRpc2s6IHRoZSBmaWxlcyBhcmUgY3JlYXRlZCBvbiB0aGUgZmx5IGJ5IHRoZSBrZXJuZWwgd2hlblxcbiAgIDk6XFx0XFx0ICB5b3UgdHJ5IHRvIGFjY2VzcyB0aGVtLiBBbHNvLCB5b3UgY2Fubm90IHJlYWQgdGhlIGZpbGVzIHdpdGggb2xkZXJcXG4gIDEwOlxcdFxcdCAgdmVyc2lvbiBvZiB0aGUgcHJvZ3JhbSBsZXNzOiB5b3UgbmVlZCB0byB1c2UgbW9yZSBvciBjYXQuXFxuICAxMTpcXHRcXG4gIDEyOlxcdFxcdCAgSXQncyB0b3RhbGx5IGNvb2w7IGZvciBleGFtcGxlLCBcXFwiY2F0IC9wcm9jL2ludGVycnVwdHNcXFwiIGdpdmVzXFxuICAxMzpcXHRcXHQgIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgdGhlIGRpZmZlcmVudCBJUlFzIGFyZSB1c2VkIGZvciBhdCB0aGUgbW9tZW50XFxuICAxNDpcXHRcXHQgICh0aGVyZSBpcyBhIHNtYWxsIG51bWJlciBvZiBJbnRlcnJ1cHQgUmVRdWVzdCBsaW5lcyBpbiB5b3VyIGNvbXB1dGVyXFxuICAxNTpcXHRcXHQgIHRoYXQgYXJlIHVzZWQgYnkgdGhlIGF0dGFjaGVkIGRldmljZXMgdG8gZ2FpbiB0aGUgQ1BVJ3MgYXR0ZW50aW9uIC0tXFxuICAxNjpcXHRcXHQgIG9mdGVuIGEgc291cmNlIG9mIHRyb3VibGUgaWYgdHdvIGRldmljZXMgYXJlIG1pc3Rha2VubHkgY29uZmlndXJlZFxcbiAgMTc6XFx0XFx0ICB0byB1c2UgdGhlIHNhbWUgSVJRKS4gVGhlIHByb2dyYW0gcHJvY2luZm8gdG8gZGlzcGxheSBzb21lXFxuICAxODpcXHRcXHQgIGluZm9ybWF0aW9uIGFib3V0IHlvdXIgc3lzdGVtIGdhdGhlcmVkIGZyb20gdGhlIC9wcm9jIGZpbGUgc3lzdGVtLlxcbiAgMTk6XFx0XFxuICAyMDpcXHRcXHQgIEJlZm9yZSB5b3UgY2FuIHVzZSB0aGUgL3Byb2MgZmlsZSBzeXN0ZW0sIGl0IGhhcyB0byBiZSBtb3VudGVkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjozMTo1My42NzExMjA1M1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MDUwMzI0Njc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IEFzc2Vzc21lbnQ6IE9GRCBMb2NrIEZpbHRlcmluZyBpbiBgL3Byb2MvbG9ja3NgKipcblxuQWxyaWdodCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cy4gRmlyc3QsIGxldCdzIHZlcmlmeSB3aGF0IHdlJ3JlIGtleWluZyBpbiBvbiB3aXRoIGBGb2N1c1N5bWJvbHNgLiBPa2F5LCB3ZSd2ZSBnb3QgYGxvY2tzX3Nob3dgLCB3aGljaCBpcyB0aGUgYC9wcm9jL2xvY2tzYCBkaXNwbGF5LCByaWdodCB3aGVyZSB0aGUgbmV3IGxvZ2ljIHJlc2lkZXMuIFRoZW4sIGBmY250bF9zZXRsa2AgYW5kIGBmY250bF9nZXRsa2AsIGFzIHRoZXkgaGFuZGxlIGxvY2sgY3JlYXRpb24gYW5kIHJldHJpZXZhbCwgaW5jbHVkaW5nIHRoZSBvcGVuIGZpbGUgZGVzY3JpcHRpb24gKE9GRCkgbG9ja3MgdGhhdCBhcmUgdGhlIGZvY2FsIHBvaW50IGhlcmUuIEZpbmFsbHksIGBsb2Nrc190cmFuc2xhdGVfcGlkYCBmb3IgY29udGV4dCwgYWx0aG91Z2ggaXQgYXBwZWFycyB0aGlzIGlzIHdoYXQgdGhlIHBhdGNoICpieXBhc3NlcyogZm9yIE9GRCBsb2Nrcy5cblxuTm93LCB0aGUgcmVhbCBxdWVzdGlvbjogaXMgdGhpcyBgV29ydGhGdXp6aW5nYD8gVGhpcyBjaGFuZ2UgZGlyZWN0bHkgbW9kaWZpZXMgdGhlIHZpc2liaWxpdHkgZmlsdGVyaW5nIGluIGAvcHJvYy9sb2Nrc2Agd2hlbiBPRkQgbG9ja3MgYXJlIGludm9sdmVkLCBlc3BlY2lhbGx5IHdoZW4gUElEIG5hbWVzcGFjZXMgYXJlIGluIHBsYXkuIEl0IHNlZW1zIHRoZSBjb3JlIGlzc3VlIGxpZXMgaW4gdGhlIGZhY3QgdGhhdCBPRkQgbG9ja3MgaGF2ZSBhIFBJRCBvZiAtMS4gVGhlIHBhdGNoIGludHJvZHVjZXMgdGhpcyBuZXcgUElEIGxvb2t1cCBhbmQgZmlsdGVyaW5nIHVzaW5nIGBmbGNfcGlkYCAodGhlIHByb2Nlc3MncyBUR0lEKSB3aGljaCBpcyBtdWNoIGJldHRlci5cblxuVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBhcmVhIG9mIHRoZSBWRlMgbG9ja2luZyBpbXBsZW1lbnRhdGlvbiBhbmQgcHJvY2ZzLiBXZSdyZSB0YWxraW5nIGNvcmUga2VybmVsIGxvZ2ljLCBzb21ldGhpbmcgdGhhdCdzIHJlbGF0aXZlbHkgZWFzeSB0byBoaXQgc2ltcGx5IGJ5IHVzaW5nIGBmY250bGAgdG8gY3JlYXRlIGxvY2tzIChzcGVjaWZpY2FsbHkgYEZfT0ZEX1NFVExLYCkgYW5kIHRoZW4gcmVhZGluZyBgL3Byb2MvbG9ja3NgIGVpdGhlciBpbnNpZGUgb3Igb3V0c2lkZSBQSUQgbmFtZXNwYWNlcy4gSXQgc2VlbXMgbGlrZSBpdCdzIHdpdGhpbiByZWFjaCwgdGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgc2hvdWxkIGJlIHNldCB0byBgdHJ1ZWAuXG5cbkxldCdzIGRvIGEgZmluYWwgY2hlY2s6IHRoZSBlbmFibGluZyBjb25maWdzLCBgRklMRV9MT0NLSU5HYCwgYFBST0NfRlNgLCBgUElEX05TYCwgYW5kIGBOQU1FU1BBQ0VTYCBhcmUgYWxsIHByZXNlbnQuIFRoZSBmb2N1cyBzeW1ib2xzIGFyZSBzdGlsbCBzb2xpZDogYGxvY2tzX3Nob3dgLCBgZmNudGxfc2V0bGtgLCBhbmQgYGZjbnRsX2dldGxrYC4gVGhlIHBhdGNoIGFsdGVycyBgL3Byb2MvbG9ja3NgIHRvIGZpbHRlciBwcm9wZXJseSBmb3IgT0ZEIGxvY2tzIHdoZW4gcmVhZGluZyBmcm9tIFBJRCBuYW1lc3BhY2VzLCBhcyB0aGUgbG9jayBvd25lcidzIGBmbGNfcGlkYCBpcyBiZWluZyBjaGVja2VkIGFnYWluc3QgYHByb2NfcGlkbnNgIHZpYSBSQ1UuIFN0YW5kYXJkIGZpbGUgbG9ja2luZyBhbmQgcHJvY2ZzIGxvZ2ljLlxuXG5SaWdodC4gVGltZSB0byBpbnZva2UgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM0MDksIk91dHB1dFRva2VucyI6MTg5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTA0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MzI6MDAuNzIxNDQ4ODc3WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5MjY2ODg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGSUxFX0xPQ0tJTkdcIixcbiAgICBcIlBST0NfRlNcIixcbiAgICBcIk5BTUVTUEFDRVNcIixcbiAgICBcIlBJRF9OU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxvY2tzX3Nob3dcIixcbiAgICBcImZjbnRsX3NldGxrXCIsXG4gICAgXCJmY250bF9nZXRsa1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBsb2Nrc19zaG93KClgIGluIGZzL2xvY2tzLmMgdG8gcHJvcGVybHkgZmlsdGVyIE9wZW4gRmlsZSBEZXNjcmlwdGlvbiAoT0ZEKSBsb2NrcyB3aGVuIGAvcHJvYy9sb2Nrc2AgaXMgcmVhZCBmcm9tIHdpdGhpbiBhIG5vbi1pbml0aWFsIFBJRCBuYW1lc3BhY2UuIEJlY2F1c2UgT0ZEIGxvY2tzIHJlcG9ydCBwaWQgLTEsIHByZXZpb3VzIG5hbWVzcGFjZSBmaWx0ZXJpbmcgZmFpbGVkIHRvIGNvbmNlYWwgT0ZEIGxvY2tzIG93bmVkIGJ5IHByb2Nlc3NlcyBvdXRzaWRlIHRoZSBQSUQgbmFtZXNwYWNlLiBUaGUgcGF0Y2ggYWRkcyBSQ1UtYmFzZWQgUElEIGxvb2t1cCBhbmQgbmFtZXNwYWNlIHZpc2liaWxpdHkgY2hlY2tzIG9uIGBmbGNfcGlkYC4gVGhpcyBjaGFuZ2VzIHJlYWNoYWJsZSBjb3JlIFZGUyAvIHByb2NmcyBsb2dpYyB0aGF0IGNhbiBiZSBleGVyY2lzZWQgdmlhIGZpbGUgbG9ja2luZyBzeXNjYWxscyBhbmQgcHJvY2ZzIHJlYWRzIGFjcm9zcyBQSUQgbmFtZXNwYWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGSUxFX0xPQ0tJTkdcIixcbiAgICBcIlBST0NfRlNcIixcbiAgICBcIk5BTUVTUEFDRVNcIixcbiAgICBcIlBJRF9OU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxvY2tzX3Nob3dcIixcbiAgICBcImZjbnRsX3NldGxrXCIsXG4gICAgXCJmY250bF9nZXRsa1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBsb2Nrc19zaG93KClgIGluIGZzL2xvY2tzLmMgdG8gcHJvcGVybHkgZmlsdGVyIE9wZW4gRmlsZSBEZXNjcmlwdGlvbiAoT0ZEKSBsb2NrcyB3aGVuIGAvcHJvYy9sb2Nrc2AgaXMgcmVhZCBmcm9tIHdpdGhpbiBhIG5vbi1pbml0aWFsIFBJRCBuYW1lc3BhY2UuIEJlY2F1c2UgT0ZEIGxvY2tzIHJlcG9ydCBwaWQgLTEsIHByZXZpb3VzIG5hbWVzcGFjZSBmaWx0ZXJpbmcgZmFpbGVkIHRvIGNvbmNlYWwgT0ZEIGxvY2tzIG93bmVkIGJ5IHByb2Nlc3NlcyBvdXRzaWRlIHRoZSBQSUQgbmFtZXNwYWNlLiBUaGUgcGF0Y2ggYWRkcyBSQ1UtYmFzZWQgUElEIGxvb2t1cCBhbmQgbmFtZXNwYWNlIHZpc2liaWxpdHkgY2hlY2tzIG9uIGBmbGNfcGlkYC4gVGhpcyBjaGFuZ2VzIHJlYWNoYWJsZSBjb3JlIFZGUyAvIHByb2NmcyBsb2dpYyB0aGF0IGNhbiBiZSBleGVyY2lzZWQgdmlhIGZpbGUgbG9ja2luZyBzeXNjYWxscyBhbmQgcHJvY2ZzIHJlYWRzIGFjcm9zcyBQSUQgbmFtZXNwYWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MzI6MDAuODQwNzI0MzE1WiIsIlNlcSI6NDEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQzNTU1NDI5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjMyOjAwLjg0MTM2Njc3NVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE3NDM0OTA3Mjg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbG9ja3Nfc2hvd2AgaW4gYGZzL2xvY2tzLmNgIHRvIGZpbHRlciBvdXQgb3BlbiBmaWxlIGRlc2NyaXB0aW9uIChPRkQpIGxvY2tzIGZyb20gYC9wcm9jL2xvY2tzYCB3aGVuIHZpZXdlZCBmcm9tIGEgbm9uLWluaXQgUElEIG5hbWVzcGFjZSBpZiB0aGUgb3duaW5nIFBJRCBpcyBub3QgdmlzaWJsZSB3aXRoaW4gdGhhdCBuYW1lc3BhY2UuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlLCBhbmQgaW5pdGlhbGl6ZXMgYWxsIGxvY2FsIHZhcmlhYmxlcyAoYHZpc2libGUgPSBmYWxzZWApLiBJdCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RocyBvciBjcmVhdGUgYW55IHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4OWFmNmFlZGQ4NDM0YTc0ZDE3MWM3ZjRjNDI0YThkYmM0Yzc1NWMyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAyMjozMDo1MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2xvY2tzLmMgYi9mcy9sb2Nrcy5jXG5pbmRleCA2ZTRmZjdmY2VjMDUzLi5kYjE3ODc5ZDkzMTk1IDEwMDY0NFxuLS0tIGEvZnMvbG9ja3MuY1xuKysrIGIvZnMvbG9ja3MuY1xuQEAgLTMwMjIsNiArMzAyMiwyMyBAQCBzdGF0aWMgaW50IGxvY2tzX3Nob3coc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICp2KVxuIFxuIFx0Y3VyID0gaGxpc3RfZW50cnkodiwgc3RydWN0IGZpbGVfbG9ja19jb3JlLCBmbGNfbGluayk7XG4gXG4rXHQvKlxuK1x0ICogT0ZEIGxvY2tzIGFyZSByZXBvcnRlZCB3aXRoIHBpZCAtMSwgc28gdGhlIGZpbHRlciBiZWxvdyBjYW5ub3Qgc2VlXG4rXHQgKiB0aGVpciBvd25lcjsgZmxjX3BpZCBob2xkcyB0aGUgb3duZXIgdGdpZCwgc28gZmlsdGVyIG9uIGl0LlxuK1x0ICovXG4rXHRpZiAoKGN1ci1cdTAwM2VmbGNfZmxhZ3MgXHUwMDI2IEZMX09GRExDSykgXHUwMDI2XHUwMDI2IHByb2NfcGlkbnMgIT0gXHUwMDI2aW5pdF9waWRfbnMpIHtcbitcdFx0c3RydWN0IHBpZCAqcGlkO1xuK1x0XHRib29sIHZpc2libGUgPSBmYWxzZTtcbitcbitcdFx0cmN1X3JlYWRfbG9jaygpO1xuK1x0XHRwaWQgPSBmaW5kX3BpZF9ucyhjdXItXHUwMDNlZmxjX3BpZCwgXHUwMDI2aW5pdF9waWRfbnMpO1xuK1x0XHRpZiAocGlkKVxuK1x0XHRcdHZpc2libGUgPSBwaWRfbnJfbnMocGlkLCBwcm9jX3BpZG5zKSAhPSAwO1xuK1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcdFx0aWYgKCF2aXNpYmxlKVxuK1x0XHRcdHJldHVybiAwO1xuK1x0fVxuK1xuIFx0aWYgKGxvY2tzX3RyYW5zbGF0ZV9waWQoY3VyLCBwcm9jX3BpZG5zKSA9PSAwKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjMyOjAwLjg0MTM2ODAwNVoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NjA1NzU5Mjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgZGlyZWN0aXZlcywgcmVuZGVyZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6XG5cbioqRGl2aW5nIGludG8gdGhlIGBmcy9sb2Nrcy5jYCBDb2RlKipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byB6b29tIGluIG9uIHRoZSBzcGVjaWZpYyBjb2RlIG1vZGlmaWNhdGlvbnMgd2l0aGluIGBmcy9sb2Nrcy5jYC4gS25vd2luZyBob3cgdGhpcyBzdWJzeXN0ZW0gd29ya3MsIEkgd2FudCB0byBlc3RhYmxpc2ggc29tZSBjb250ZXh0LiBJJ20gdGhpbmtpbmcsIFwiTGV0J3Mgc3RhcnQgYnkgc2NydXRpbml6aW5nIHRoZSBwYXRjaCBpdHNlbGYsIHRoZW4gYnJvYWRlbiB0aGUgc2NvcGUgdG8gYW5hbHl6ZSB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiB0aGF0IGZpbGUsIGBmcy9sb2Nrcy5jYC5cIiBJdCdzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSBcIndoeVwiIGJlaGluZCBhbnkgY2hhbmdlLiBPZnRlbiB0aGUgc3Vycm91bmRpbmcgY29kZSB3aWxsIGV4cGxhaW4gdGhlIG1vdGl2YXRpb24gZm9yIHRoZSBjb2RlLiBUaGlzIGdpdmVzIG1lIGEgZ29vZCBwbGFjZSB0byBzdGFydC4gQW5kIG9mIGNvdXJzZSwgc2luY2UgSSBrbm93IHRoZSBjb2RlIHByZXR0eSB3ZWxsLCBJIHNob3VsZCBzdGFydCBhdCBsaW5lIDMwMjIuIEkgY2FuIHN0YXJ0IGJ5IGluc3BlY3RpbmcgaXQgZm9yIGEgZ29vZCBwbGFjZSB0byBiZWdpbi4gVGhlbiBJIGNhbiB1c2UgYGdpdCBibGFtZWAgb3IgbXkgZmF2b3JpdGUgY29kZSBleHBsb3JhdGlvbiB0b29scyB0byBpbnZlc3RpZ2F0ZSwgc28gSSBjYW4gc2VlIHdoYXQgb3RoZXIgY2hhbmdlcyBhcmUgcmVsYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIyMiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MzI6MDYuNDQ3MTMwMTQxWiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9sb2Nrcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwMDAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMwMDA6XFx0XFxuMzAwMTpcXHRcXHQvKiBOVUxMIG5vZGUgb3Igcm9vdCBub2RlICovXFxuMzAwMjpcXHRcXHRpZiAobm9kZSA9PSBOVUxMIHx8IG5vZGUtXFx1MDAzZWZsY19ibG9ja2VyID09IE5VTEwpXFxuMzAwMzpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4zMDA0OlxcdFxcbjMwMDU6XFx0XFx0LyogTmV4dCBtZW1iZXIgaW4gdGhlIGxpbmtlZCBsaXN0IGNvdWxkIGJlIGl0c2VsZiAqL1xcbjMwMDY6XFx0XFx0dG1wID0gbGlzdF9uZXh0X2VudHJ5KG5vZGUsIGZsY19ibG9ja2VkX21lbWJlcik7XFxuMzAwNzpcXHRcXHRpZiAobGlzdF9lbnRyeV9pc19oZWFkKHRtcCwgXFx1MDAyNm5vZGUtXFx1MDAzZWZsY19ibG9ja2VyLVxcdTAwM2VmbGNfYmxvY2tlZF9yZXF1ZXN0cyxcXG4zMDA4OlxcdFxcdFxcdFxcdCAgICAgICBmbGNfYmxvY2tlZF9tZW1iZXIpXFxuMzAwOTpcXHRcXHRcXHR8fCB0bXAgPT0gbm9kZSkge1xcbjMwMTA6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMzAxMTpcXHRcXHR9XFxuMzAxMjpcXHRcXG4zMDEzOlxcdFxcdHJldHVybiB0bXA7XFxuMzAxNDpcXHR9XFxuMzAxNTpcXHRcXG4zMDE2OlxcdHN0YXRpYyBpbnQgbG9ja3Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIHZvaWQgKnYpXFxuMzAxNzpcXHR7XFxuMzAxODpcXHRcXHRzdHJ1Y3QgbG9ja3NfaXRlcmF0b3IgKml0ZXIgPSBmLVxcdTAwM2Vwcml2YXRlO1xcbjMwMTk6XFx0XFx0c3RydWN0IGZpbGVfbG9ja19jb3JlICpjdXIsICp0bXA7XFxuMzAyMDpcXHRcXHRzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqcHJvY19waWRucyA9IHByb2NfcGlkX25zKGZpbGVfaW5vZGUoZi1cXHUwMDNlZmlsZSktXFx1MDAzZWlfc2IpO1xcbjMwMjE6XFx0XFx0aW50IGxldmVsID0gMDtcXG4zMDIyOlxcdFxcbjMwMjM6XFx0XFx0Y3VyID0gaGxpc3RfZW50cnkodiwgc3RydWN0IGZpbGVfbG9ja19jb3JlLCBmbGNfbGluayk7XFxuMzAyNDpcXHRcXG4zMDI1OlxcdFxcdC8qXFxuMzAyNjpcXHRcXHQgKiBPRkQgbG9ja3MgYXJlIHJlcG9ydGVkIHdpdGggcGlkIC0xLCBzbyB0aGUgZmlsdGVyIGJlbG93IGNhbm5vdCBzZWVcXG4zMDI3OlxcdFxcdCAqIHRoZWlyIG93bmVyOyBmbGNfcGlkIGhvbGRzIHRoZSBvd25lciB0Z2lkLCBzbyBmaWx0ZXIgb24gaXQuXFxuMzAyODpcXHRcXHQgKi9cXG4zMDI5OlxcdFxcdGlmICgoY3VyLVxcdTAwM2VmbGNfZmxhZ3MgXFx1MDAyNiBGTF9PRkRMQ0spIFxcdTAwMjZcXHUwMDI2IHByb2NfcGlkbnMgIT0gXFx1MDAyNmluaXRfcGlkX25zKSB7XFxuMzAzMDpcXHRcXHRcXHRzdHJ1Y3QgcGlkICpwaWQ7XFxuMzAzMTpcXHRcXHRcXHRib29sIHZpc2libGUgPSBmYWxzZTtcXG4zMDMyOlxcdFxcbjMwMzM6XFx0XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjMwMzQ6XFx0XFx0XFx0cGlkID0gZmluZF9waWRfbnMoY3VyLVxcdTAwM2VmbGNfcGlkLCBcXHUwMDI2aW5pdF9waWRfbnMpO1xcbjMwMzU6XFx0XFx0XFx0aWYgKHBpZClcXG4zMDM2OlxcdFxcdFxcdFxcdHZpc2libGUgPSBwaWRfbnJfbnMocGlkLCBwcm9jX3BpZG5zKSAhPSAwO1xcbjMwMzc6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMzAzODpcXHRcXHRcXHRpZiAoIXZpc2libGUpXFxuMzAzOTpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4zMDQwOlxcdFxcdH1cXG4zMDQxOlxcdFxcbjMwNDI6XFx0XFx0aWYgKGxvY2tzX3RyYW5zbGF0ZV9waWQoY3VyLCBwcm9jX3BpZG5zKSA9PSAwKVxcbjMwNDM6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMzA0NDpcXHRcXG4zMDQ1OlxcdFxcdC8qIFZpZXcgdGhpcyBjcm9zc2VkIGxpbmtlZCBsaXN0IGFzIGEgYmluYXJ5IHRyZWUsIHRoZSBmaXJzdCBtZW1iZXIgb2YgZmxjX2Jsb2NrZWRfcmVxdWVzdHNcXG4zMDQ2OlxcdFxcdCAqIGlzIHRoZSBsZWZ0IGNoaWxkIG9mIGN1cnJlbnQgbm9kZSwgdGhlIG5leHQgc2lsaWJpbmcgaW4gZmxjX2Jsb2NrZWRfbWVtYmVyIGlzIHRoZVxcbjMwNDc6XFx0XFx0ICogcmlnaHQgY2hpbGQsIHdlIGNhbiBhbHNlIGdldCB0aGUgcGFyZW50IG9mIGN1cnJlbnQgbm9kZSBmcm9tIGZsY19ibG9ja2VyLCBzbyB0aGlzXFxuMzA0ODpcXHRcXHQgKiBxdWVzdGlvbiBiZWNvbWVzIHRyYXZlcnNhbCBvZiBhIGJpbmFyeSB0cmVlXFxuMzA0OTpcXHRcXHQgKi9cXG4zMDUwOlxcdFxcdHdoaWxlIChjdXIgIT0gTlVMTCkge1xcbjMwNTE6XFx0XFx0XFx0aWYgKGxldmVsKVxcbjMwNTI6XFx0XFx0XFx0XFx0bG9ja19nZXRfc3RhdHVzKGYsIGN1ciwgaXRlci1cXHUwMDNlbGlfcG9zLCBcXFwiLVxcdTAwM2UgXFxcIiwgbGV2ZWwpO1xcbjMwNTM6XFx0XFx0XFx0ZWxzZVxcbjMwNTQ6XFx0XFx0XFx0XFx0bG9ja19nZXRfc3RhdHVzKGYsIGN1ciwgaXRlci1cXHUwMDNlbGlfcG9zLCBcXFwiXFxcIiwgbGV2ZWwpO1xcbjMwNTU6XFx0XFxuMzA1NjpcXHRcXHRcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNmN1ci1cXHUwMDNlZmxjX2Jsb2NrZWRfcmVxdWVzdHMpKSB7XFxuMzA1NzpcXHRcXHRcXHRcXHQvKiBUdXJuIGxlZnQgKi9cXG4zMDU4OlxcdFxcdFxcdFxcdGN1ciA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbChcXHUwMDI2Y3VyLVxcdTAwM2VmbGNfYmxvY2tlZF9yZXF1ZXN0cyxcXG4zMDU5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUsXFxuMzA2MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgZmxjX2Jsb2NrZWRfbWVtYmVyKTtcXG4zMDYxOlxcdFxcdFxcdFxcdGxldmVsKys7XFxuMzA2MjpcXHRcXHRcXHR9IGVsc2Uge1xcbjMwNjM6XFx0XFx0XFx0XFx0LyogVHVybiByaWdodCAqL1xcbjMwNjQ6XFx0XFx0XFx0XFx0dG1wID0gZ2V0X25leHRfYmxvY2tlZF9tZW1iZXIoY3VyKTtcXG4zMDY1OlxcdFxcdFxcdFxcdC8qIEZhbGwgYmFjayB0byBwYXJlbnQgbm9kZSAqL1xcbjMwNjY6XFx0XFx0XFx0XFx0d2hpbGUgKHRtcCA9PSBOVUxMIFxcdTAwMjZcXHUwMDI2IGN1ci1cXHUwMDNlZmxjX2Jsb2NrZXIgIT0gTlVMTCkge1xcbjMwNjc6XFx0XFx0XFx0XFx0XFx0Y3VyID0gY3VyLVxcdTAwM2VmbGNfYmxvY2tlcjtcXG4zMDY4OlxcdFxcdFxcdFxcdFxcdGxldmVsLS07XFxuMzA2OTpcXHRcXHRcXHRcXHRcXHR0bXAgPSBnZXRfbmV4dF9ibG9ja2VkX21lbWJlcihjdXIpO1xcbjMwNzA6XFx0XFx0XFx0XFx0fVxcbjMwNzE6XFx0XFx0XFx0XFx0Y3VyID0gdG1wO1xcbjMwNzI6XFx0XFx0XFx0fVxcbjMwNzM6XFx0XFx0fVxcbjMwNzQ6XFx0XFxuMzA3NTpcXHRcXHRyZXR1cm4gMDtcXG4zMDc2OlxcdH1cXG4zMDc3OlxcdFxcbjMwNzg6XFx0c3RhdGljIHZvaWQgX19zaG93X2ZkX2xvY2tzKHN0cnVjdCBzZXFfZmlsZSAqZixcXG4zMDc5OlxcdFxcdFxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIGludCAqaWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjMyOjA2LjQ0NzM1Njg4MVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzAyMDI3MjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYGxvY2tzX3RyYW5zbGF0ZV9waWRgIGFuZCBgbG9ja19nZXRfc3RhdHVzYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGBsb2Nrc190cmFuc2xhdGVfcGlkYCBhbmQgYGxvY2tfZ2V0X3N0YXR1c2AuIEknbSBnb2luZyB0byBzdGFydCBieSBnZXR0aW5nIGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgKmRvaW5nKi4gSSdtIGd1ZXNzaW5nIHRoYXQgYGxvY2tzX3RyYW5zbGF0ZV9waWRgIGlzIHByb2JhYmx5IGludm9sdmVkIGluIHNvbWUgZm9ybSBvZiBwcm9jZXNzIElEIG1hcHBpbmcgb3IgdHJhbnNsYXRpb24gcmVsYXRlZCB0byBsb2NrcywgcGVyaGFwcyB3aXRoaW4gYSBkaXN0cmlidXRlZCBsb2NraW5nIHN5c3RlbSwgb3IgbWF5YmUgaXQgaXMgcGFydCBvZiBob3cgdGhlIGtlcm5lbCBtYW5hZ2VzIGxvY2tzLiBgbG9ja19nZXRfc3RhdHVzYCBvYnZpb3VzbHkgc291bmRzIGxpa2UgaXQncyBxdWVyeWluZyB0aGUgY3VycmVudCBzdGF0ZSBvZiBhIGxvY2suIEknbGwgbmVlZCB0byBrbm93IHdoZXRoZXIgaXRzIHJldHJpZXZpbmcgZGF0YSBmcm9tIHRoZSBjYWNoZSwgb3IgdGhlIGRldmljZSwgb3Igd2hldGhlciB0aGF0IGlzIGFuIG9wdGltaXphdGlvbi4gSSdsbCBiZSBsb29raW5nIGZvciBkZXRhaWxzIGxpa2Ugd2hhdCBraW5kIG9mIGluZm9ybWF0aW9uIHRoZXkgcHJvdmlkZSAoZS5nLiwgb3duZXIgUElELCBsb2NrIHR5cGUsIGNvbnRlbnRpb24gZGV0YWlscywgd2FpdCBxdWV1ZSBzdGF0dXMpLiBEZXBlbmRpbmcgb24gdGhlIGNvbnRleHQsIHRoaXMgY291bGQgYmUgY3J1Y2lhbCBmb3IgZGVidWdnaW5nIGxvY2sgY29udGVudGlvbiBpc3N1ZXMsIHBlcmZvcm1hbmNlIHByb2ZpbGluZywgb3IgZXZlbiB1bmRlcnN0YW5kaW5nIGhvdyBvdXIgb3duIGxvY2sgaW1wbGVtZW50YXRpb24gaXMgYmVoYXZpbmcuIEknbGwgbmVlZCB0byBjb25maXJtIGFueSBhc3N1bXB0aW9ucyBhYm91dCB0aGVzZSBmdW5jdGlvbnMgYW5kIHdoZXJlIHRoZXkgZml0IGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzQ3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjozMjowOC43NDkzODc1NTNaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NTU0NTIzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsb2Nrc190cmFuc2xhdGVfcGlkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2xvY2tzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbG9ja3MuYz0yMzY1PUVYUE9SVF9TWU1CT0xfR1BMKHZmc190ZXN0X2xvY2spO1xcbi0tXFxuZnMvbG9ja3MuYy0yMzY3LS8qKlxcbmZzL2xvY2tzLmM6MjM2ODogKiBsb2Nrc190cmFuc2xhdGVfcGlkIC0gdHJhbnNsYXRlIGEgZmlsZV9sb2NrJ3MgZmxfcGlkIG51bWJlciBpbnRvIGEgbmFtZXNwYWNlXFxuZnMvbG9ja3MuYy0yMzY5LSAqIEBmbDogVGhlIGZpbGVfbG9jayB3aG8ncyBmbF9waWQgc2hvdWxkIGJlIHRyYW5zbGF0ZWRcXG4tLVxcbmZzL2xvY2tzLmMtMjM3My0gKi9cXG5mcy9sb2Nrcy5jOjIzNzQ6c3RhdGljIHBpZF90IGxvY2tzX3RyYW5zbGF0ZV9waWQoc3RydWN0IGZpbGVfbG9ja19jb3JlICpmbCwgc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zKVxcbmZzL2xvY2tzLmMtMjM3NS17XFxuLS1cXG5mcy9sb2Nrcy5jPTI0MDE9c3RhdGljIGludCBwb3NpeF9sb2NrX3RvX2Zsb2NrKHN0cnVjdCBmbG9jayAqZmxvY2ssIHN0cnVjdCBmaWxlX2xvY2sgKmZsKVxcbmZzL2xvY2tzLmMtMjQwMi17XFxuZnMvbG9ja3MuYzoyNDAzOlxcdGZsb2NrLVxcdTAwM2VsX3BpZCA9IGxvY2tzX3RyYW5zbGF0ZV9waWQoXFx1MDAyNmZsLVxcdTAwM2VjLCB0YXNrX2FjdGl2ZV9waWRfbnMoY3VycmVudCkpO1xcbmZzL2xvY2tzLmMtMjQwNC0jaWYgQklUU19QRVJfTE9ORyA9PSAzMlxcbi0tXFxuZnMvbG9ja3MuYz0yNDIzPXN0YXRpYyB2b2lkIHBvc2l4X2xvY2tfdG9fZmxvY2s2NChzdHJ1Y3QgZmxvY2s2NCAqZmxvY2ssIHN0cnVjdCBmaWxlX2xvY2sgKmZsKVxcbmZzL2xvY2tzLmMtMjQyNC17XFxuZnMvbG9ja3MuYzoyNDI1OlxcdGZsb2NrLVxcdTAwM2VsX3BpZCA9IGxvY2tzX3RyYW5zbGF0ZV9waWQoXFx1MDAyNmZsLVxcdTAwM2VjLCB0YXNrX2FjdGl2ZV9waWRfbnMoY3VycmVudCkpO1xcbmZzL2xvY2tzLmMtMjQyNi1cXHRmbG9jay1cXHUwMDNlbF9zdGFydCA9IGZsLVxcdTAwM2VmbF9zdGFydDtcXG4tLVxcbmZzL2xvY2tzLmM9MjkyMT1zdGF0aWMgdm9pZCBsb2NrX2dldF9zdGF0dXMoc3RydWN0IHNlcV9maWxlICpmLCBzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmZsYyxcXG4tLVxcbmZzL2xvY2tzLmMtMjkyOS1cXG5mcy9sb2Nrcy5jOjI5MzA6XFx0cGlkID0gbG9ja3NfdHJhbnNsYXRlX3BpZChmbGMsIHByb2NfcGlkbnMpO1xcbmZzL2xvY2tzLmMtMjkzMS1cXG4tLVxcbmZzL2xvY2tzLmM9MzAxNj1zdGF0aWMgaW50IGxvY2tzX3Nob3coc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICp2KVxcbi0tXFxuZnMvbG9ja3MuYy0zMDQxLVxcbmZzL2xvY2tzLmM6MzA0MjpcXHRpZiAobG9ja3NfdHJhbnNsYXRlX3BpZChjdXIsIHByb2NfcGlkbnMpID09IDApXFxuZnMvbG9ja3MuYy0zMDQzLVxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjozMjowOS40MzQ5MzgyMDFaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzIzNDQwNDQwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIExvY2sgTWFuYWdlbWVudCBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGxvY2sgbWVjaGFuaXNtcyBhcmUgd29ya2luZywgcGFydGljdWxhcmx5IGhvdyB0aGV5IHJlbGF0ZSB0byBQSURzLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGNvZGUgZm9yIGBsb2Nrc190cmFuc2xhdGVfcGlkYC4gSSdtIGN1cmlvdXMgdG8gc2VlIGhvdyBhIHByb2Nlc3MgSUQgaXMgbWFwcGVkLCB0cmFuc2xhdGVkLCBvciB1c2VkIHdpdGhpbiB0aGUgbG9jayBtYW5hZ2VtZW50IGZyYW1ld29yay4gV2hhdCBhcmUgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgaXQgaW50ZXJhY3RzIHdpdGg/IElzIHRoZXJlIGFueSBQSUQtc3BlY2lmaWMgbG9naWMgd2l0aGluIHRoZSBsb2NraW5nIG1lY2hhbmlzbT8gSSdtIGFudGljaXBhdGluZyB0aGlzIG1pZ2h0IHJldmVhbCBob3cgcHJvY2Vzc2VzIGNvbnRlbmQgZm9yIHJlc291cmNlcyBhbmQgaG93IHRoZSBzeXN0ZW0gdHJhY2tzIGxvY2sgb3duZXJzaGlwLlxuXG5UaGVuLCBJJ2xsIG5lZWQgdG8gaW1tZWRpYXRlbHkgZm9sbG93IHRoYXQgd2l0aCBhIGxvb2sgYXQgYGxvY2tfZ2V0X3N0YXR1c2AuIFRoaXMgc2hvdWxkIHNoZWQgbGlnaHQgb24gdGhlIHN0YXRlIG9mIHRoZSBsb2Nrcy4gSSdsbCBiZSBsb29raW5nIGZvciBob3cgdGhlIGxvY2sgc3RhdHVzIGlzIHJldHJpZXZlZCwgd2hhdCBpbmZvcm1hdGlvbiBpcyBtYWRlIGF2YWlsYWJsZSAob3duZXIgUElEcywgY3VycmVudCBzdGF0ZSBsaWtlIGxvY2tlZC91bmxvY2tlZCwgYW55IHdhaXRpbmcgcHJvY2Vzc2VzKSwgYW5kIHdoYXQgdGhlIHJldHVybiB2YWx1ZXMgbWVhbi4gVGhlIGNvbWJpbmF0aW9uIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMgc2hvdWxkIHByb3ZpZGUgYSBzb2xpZCBwaWN0dXJlIG9mIGhvdyBQSUQncyBhcmUgaW50ZWdyYXRlZCBhbmQgaG93IGxvY2sgc3RhdHVzZXMgYXJlIGNoZWNrZWQgd2l0aGluIHRoZSBsb2NraW5nIHN5c3RlbS4gVW5kZXJzdGFuZGluZyB0aGUgc3RhdHVzIHF1ZXJ5aW5nIHdpbGwgZGVmaW5pdGVseSBpbmZvcm0gaG93IHRvIGludGVycHJldCB0aGUgcmVzdWx0cyBvZiBgbG9ja3NfdHJhbnNsYXRlX3BpZGAuIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGhvdyB0aGUgZnJhbWV3b3JrIHByb3ZpZGVzIGFuZCBpbnRlcnByZXRzIGxvY2sgc3RhdHVzIHJlbGF0aXZlIHRvIHRoZSBwcm9jZXNzIGF0dGVtcHRpbmcgdG8gZ2FpbiBhIGxvY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NjUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjozMjoxMi42NjkzNDU5NDdaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA1MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2xvY2tzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjM2OCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjM2ODpcXHQgKiBsb2Nrc190cmFuc2xhdGVfcGlkIC0gdHJhbnNsYXRlIGEgZmlsZV9sb2NrJ3MgZmxfcGlkIG51bWJlciBpbnRvIGEgbmFtZXNwYWNlXFxuMjM2OTpcXHQgKiBAZmw6IFRoZSBmaWxlX2xvY2sgd2hvJ3MgZmxfcGlkIHNob3VsZCBiZSB0cmFuc2xhdGVkXFxuMjM3MDpcXHQgKiBAbnM6IFRoZSBuYW1lc3BhY2UgaW50byB3aGljaCB0aGUgcGlkIHNob3VsZCBiZSB0cmFuc2xhdGVkXFxuMjM3MTpcXHQgKlxcbjIzNzI6XFx0ICogVXNlZCB0byB0cmFuc2xhdGUgYSBmbF9waWQgaW50byBhIG5hbWVzcGFjZSB2aXJ0dWFsIHBpZCBudW1iZXJcXG4yMzczOlxcdCAqL1xcbjIzNzQ6XFx0c3RhdGljIHBpZF90IGxvY2tzX3RyYW5zbGF0ZV9waWQoc3RydWN0IGZpbGVfbG9ja19jb3JlICpmbCwgc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zKVxcbjIzNzU6XFx0e1xcbjIzNzY6XFx0XFx0cGlkX3Qgdm5yO1xcbjIzNzc6XFx0XFx0c3RydWN0IHBpZCAqcGlkO1xcbjIzNzg6XFx0XFxuMjM3OTpcXHRcXHRpZiAoZmwtXFx1MDAzZWZsY19mbGFncyBcXHUwMDI2IEZMX09GRExDSylcXG4yMzgwOlxcdFxcdFxcdHJldHVybiAtMTtcXG4yMzgxOlxcdFxcbjIzODI6XFx0XFx0LyogUmVtb3RlIGxvY2tzIHJlcG9ydCBhIG5lZ2F0aXZlIHBpZCB2YWx1ZSAqL1xcbjIzODM6XFx0XFx0aWYgKGZsLVxcdTAwM2VmbGNfcGlkIFxcdTAwM2M9IDApXFxuMjM4NDpcXHRcXHRcXHRyZXR1cm4gZmwtXFx1MDAzZWZsY19waWQ7XFxuMjM4NTpcXHRcXG4yMzg2OlxcdFxcdC8qXFxuMjM4NzpcXHRcXHQgKiBJZiB0aGUgZmxvY2sgb3duZXIgcHJvY2VzcyBpcyBkZWFkIGFuZCBpdHMgcGlkIGhhcyBiZWVuIGFscmVhZHlcXG4yMzg4OlxcdFxcdCAqIGZyZWVkLCB0aGUgdHJhbnNsYXRpb24gYmVsb3cgd29uJ3Qgd29yaywgYnV0IHdlIHN0aWxsIHdhbnQgdG8gc2hvd1xcbjIzODk6XFx0XFx0ICogZmxvY2sgb3duZXIgcGlkIG51bWJlciBpbiBpbml0IHBpZG5zLlxcbjIzOTA6XFx0XFx0ICovXFxuMjM5MTpcXHRcXHRpZiAobnMgPT0gXFx1MDAyNmluaXRfcGlkX25zKVxcbjIzOTI6XFx0XFx0XFx0cmV0dXJuIChwaWRfdCkgZmwtXFx1MDAzZWZsY19waWQ7XFxuMjM5MzpcXHRcXG4yMzk0OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4yMzk1OlxcdFxcdHBpZCA9IGZpbmRfcGlkX25zKGZsLVxcdTAwM2VmbGNfcGlkLCBcXHUwMDI2aW5pdF9waWRfbnMpO1xcbjIzOTY6XFx0XFx0dm5yID0gcGlkX25yX25zKHBpZCwgbnMpO1xcbjIzOTc6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMjM5ODpcXHRcXHRyZXR1cm4gdm5yO1xcbjIzOTk6XFx0fVxcbjI0MDA6XFx0XFxuMjQwMTpcXHRzdGF0aWMgaW50IHBvc2l4X2xvY2tfdG9fZmxvY2soc3RydWN0IGZsb2NrICpmbG9jaywgc3RydWN0IGZpbGVfbG9jayAqZmwpXFxuMjQwMjpcXHR7XFxuMjQwMzpcXHRcXHRmbG9jay1cXHUwMDNlbF9waWQgPSBsb2Nrc190cmFuc2xhdGVfcGlkKFxcdTAwMjZmbC1cXHUwMDNlYywgdGFza19hY3RpdmVfcGlkX25zKGN1cnJlbnQpKTtcXG4yNDA0OlxcdCNpZiBCSVRTX1BFUl9MT05HID09IDMyXFxuMjQwNTpcXHRcXHQvKlxcbjI0MDY6XFx0XFx0ICogTWFrZSBzdXJlIHdlIGNhbiByZXByZXNlbnQgdGhlIHBvc2l4IGxvY2sgdmlhXFxuMjQwNzpcXHRcXHQgKiBsZWdhY3kgMzJiaXQgZmxvY2suXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjMyOjEyLjY2OTY1Mzg2N1oiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NjA2NTkyMzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgL3Byb2MvbG9ja3MgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGBsb2Nrc19zaG93YCB3aXRoaW4gYGZzL2xvY2tzLmNgLCBzcGVjaWZpY2FsbHkgaG93IGAvcHJvYy9sb2Nrc2AgaGFuZGxlcyBPcGVuIEZpbGUgRGVzY3JpcHRvciAoT0ZEKSBsb2Nrcy4gVGhlIGNvcmUgaXNzdWUgaXMgYWJvdXQgUElEIG5hbWVzcGFjZSB2aXNpYmlsaXR5LiBQcmV2aW91c2x5LCB0aGUgc3lzdGVtIHdhc24ndCBwcm9wZXJseSBmaWx0ZXJpbmcgT0ZEIGxvY2tzIGJhc2VkIG9uIHRoZWlyIG93bmVyJ3MgUElEIG5hbWVzcGFjZS4gQmVjYXVzZSBvZiBob3cgT0ZEIGxvY2tzIGFyZSBpZGVudGlmaWVkICh3aXRoIHBpZCAtMSksIHRoZSBvbGQgYGxvY2tzX3RyYW5zbGF0ZV9waWRgIGZ1bmN0aW9uIGFsd2F5cyByZXR1cm5lZCBub24temVyby4gIFRoaXMgbWVhbnQgT0ZEIGxvY2tzIGZyb20gcHJvY2Vzc2VzIG5vdCBpbiB0aGUgY3VycmVudCBQSUQgbmFtZXNwYWNlIHdlcmUgc3RpbGwgYmVpbmcgc2hvd24gaW4gYC9wcm9jL2xvY2tzYCwgd2hpY2ggaXMgaW5jb3JyZWN0LlxuXG5UaGlzIHBhdGNoIGFkZHJlc3NlcyB0aGF0LiBJdCBhZGRzIGEgY2hlY2sgd2l0aGluIHRoZSBgbG9ja3Nfc2hvd2AgZnVuY3Rpb24uIE5vdywgaWYgYW4gT0ZEIGxvY2sgaXMgZW5jb3VudGVyZWQgKGluZGljYXRlZCBieSBgRkxfT0ZETENLYCksIGFuZCB0aGUgcHJvY2VzcyBpc24ndCBpbiB0aGUgaW5pdCBQSUQgbmFtZXNwYWNlLCBpdCBwZXJmb3JtcyBhIGxvb2t1cCB1c2luZyBgZmluZF9waWRfbnNgIHRvIGRldGVybWluZSBpZiB0aGUgb3duZXIgb2YgdGhlIGxvY2sgKGlkZW50aWZpZWQgYnkgYGN1ci1cdTAwM2VmbGNfcGlkYCkgaXMgYWN0dWFsbHkgdmlzaWJsZSBpbiB0aGUgY3VycmVudCBgL3Byb2MvbG9ja3NgIG5hbWVzcGFjZSAoYHByb2NfcGlkbnNgKS4gVGhlIGByY3VfcmVhZF9sb2NrYCBhbmQgYHJjdV9yZWFkX3VubG9ja2AgY2FsbHMgZW5zdXJlIHRoaXMgaXMgZG9uZSBzYWZlbHkuIFRoZSBuZXcgYHZpc2libGVgIHZhcmlhYmxlIGRldGVybWluZXMgaWYgdGhlIGxvY2sgb3duZXIgaXMgdmlzaWJsZSwgYW5kIGlmIG5vdCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgMCwgbWVhbmluZyB0aGUgbG9jayBlbnRyeSBpc24ndCBkaXNwbGF5ZWQgaW4gYC9wcm9jL2xvY2tzYC5cblxuTm93LCBsZXQncyB0aGluayBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIHBhdGNoIGlzbid0IGludHJvZHVjaW5nIGFueSByaXNrcy4gSSBzZWUgYHN0cnVjdCBwaWQgKnBpZGAgYW5kIGBib29sIHZpc2libGUgPSBmYWxzZTtgIGFyZSBpbnRyb2R1Y2VkLiBCdXQgYHZpc2libGVgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIGFuZCBgcGlkYCBlaXRoZXIgZ2V0cyBhIHZhbHVlIGZyb20gYGZpbmRfcGlkX25zYCBvciByZW1haW5zIG51bGwuIFRoZXJlIGFyZSBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBubyBjb3B5aW5nIHRvIHVzZXJzcGFjZSB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLCBhbmQgbm8gYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGlzIGlzIGFsbCBjb250YWluZWQgd2l0aGluIGEgc2luZ2xlIGBsb2Nrc19zaG93YCBmdW5jdGlvbiwgc28gaXQgY2FuJ3QgY2hhbmdlIHRoZSBiZWhhdmlvciBvZiBhbm90aGVyIHBhcnQgb2YgdGhlIHN5c3RlbSBhbmQsIHRoZXJlZm9yZSwgaXMgdmVyeSBsb2NhbGl6ZWQuIFRoZSBvdXRwdXQgaXMgYSBgc2VxX2ZpbGVgIG91dHB1dCB0byBgL3Byb2MvbG9ja3NgLCBzbyB3ZSBhcmUgbm90IGRlYWxpbmcgd2l0aCBidWZmZXJzLiBUaGVyZWZvcmUsIG5vLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYXNwZWN0cyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlLiBJdCdzIHNpbXBseSBhYm91dCBuYW1lc3BhY2UgdmlzaWJpbGl0eSBmaWx0ZXJpbmcuXG5cblRoaW5raW5nIGFib3V0IEtNU0FOIHNwZWNpZmljYWxseeKApiBOby4gS0FTQU4gaXMgaW1wb3J0YW50IGZvciB0aGlzLCBhcyBpdCBoYW5kbGVzIGdlbmVyYWwgbWVtb3J5IHNhZmV0eSwgYnV0IHRoaXMgcGF0Y2ggZG9lc27igJl0IGludHJvZHVjZSBhbnkgcmlza3Mgc3BlY2lmaWMgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIEknbSBpbnRyb2R1Y2luZyBhIGxvY2FsIHZhcmlhYmxlIGFuZCBhIFBJRCBsb29rdXAsIGFsbCB1bmRlciBhbiBSQ1UgbG9jaywgc28gdGhlcmUgYXJlIG5vIHBhcnRpYWwgc3RydWN0IGluaXRpYWxpemF0aW9ucyBvciBjb3BpZXMgdG8gdXNlcnNwYWNlLlxuXG5TbywgdGhlIHZlcmRpY3QgaXMgTmVlZHNLTVNBTjogZmFsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2NTgsIk91dHB1dFRva2VucyI6MTQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MzI6MTguMjc2MjQ5MjExWiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbG9ja3Nfc2hvd2AgaW4gYGZzL2xvY2tzLmNgIHRvIGZpbHRlciBvdXQgb3BlbiBmaWxlIGRlc2NyaXB0aW9uIChPRkQpIGxvY2tzIGZyb20gYC9wcm9jL2xvY2tzYCB3aGVuIHZpZXdlZCBmcm9tIGEgbm9uLWluaXQgUElEIG5hbWVzcGFjZSBpZiB0aGUgb3duaW5nIFBJRCBpcyBub3QgdmlzaWJsZSB3aXRoaW4gdGhhdCBuYW1lc3BhY2UuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlLCBhbmQgaW5pdGlhbGl6ZXMgYWxsIGxvY2FsIHZhcmlhYmxlcyAoYHZpc2libGUgPSBmYWxzZWApLiBJdCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RocyBvciBjcmVhdGUgYW55IHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbG9ja3Nfc2hvd2AgaW4gYGZzL2xvY2tzLmNgIHRvIGZpbHRlciBvdXQgb3BlbiBmaWxlIGRlc2NyaXB0aW9uIChPRkQpIGxvY2tzIGZyb20gYC9wcm9jL2xvY2tzYCB3aGVuIHZpZXdlZCBmcm9tIGEgbm9uLWluaXQgUElEIG5hbWVzcGFjZSBpZiB0aGUgb3duaW5nIFBJRCBpcyBub3QgdmlzaWJsZSB3aXRoaW4gdGhhdCBuYW1lc3BhY2UuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlLCBhbmQgaW5pdGlhbGl6ZXMgYWxsIGxvY2FsIHZhcmlhYmxlcyAoYHZpc2libGUgPSBmYWxzZWApLiBJdCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RocyBvciBjcmVhdGUgYW55IHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowtpln2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-02 21:28:30 +0000 UTC FinishedAt: 2026-09-02 22:32:19 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "1094a8359b2741107c97cd2f86cd2cdbb21b5aa7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FILE_LOCKING", "PROC_FS", "NAMESPACES", "PID_NS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "1094a8359b2741107c97cd2f86cd2cdbb21b5aa7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FILE_LOCKING", "PROC_FS", "NAMESPACES", "PID_NS" ], "series_id": "6c4eb154-4d0f-4495-babc-21ab83c3f76f" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "locks_show", "fcntl_setlk", "fcntl_getlk" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZJTEVfTE9DS0lORyYjMzQ7LAogICAgJiMzNDtQUk9DX0ZTJiMzNDssCiAgICAmIzM0O05BTUVTUEFDRVMmIzM0OywKICAgICYjMzQ7UElEX05TJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bG9ja3Nfc2hvdyYjMzQ7LAogICAgJiMzNDtmY250bF9zZXRsayYjMzQ7LAogICAgJiMzNDtmY250bF9nZXRsayYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBsb2Nrc19zaG93YCBpbiBgZnMvbG9ja3MuY2AgdG8gZmlsdGVyIG91dCBvcGVuIGZpbGUgZGVzY3JpcHRpb24gKE9GRCkgbG9ja3MgZnJvbSBgL3Byb2MvbG9ja3NgIHdoZW4gdmlld2VkIGZyb20gYSBub24taW5pdCBQSUQgbmFtZXNwYWNlIGlmIHRoZSBvd25pbmcgUElEIGlzIG5vdCB2aXNpYmxlIHdpdGhpbiB0aGF0IG5hbWVzcGFjZS5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlLCBhbmQgaW5pdGlhbGl6ZXMgYWxsIGxvY2FsIHZhcmlhYmxlcyAoYHZpc2libGUgPSBmYWxzZWApLiBJdCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RocyBvciBjcmVhdGUgYW55IHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGxvY2tzX3Nob3coKWAgaW4gZnMvbG9ja3MuYyB0byBwcm9wZXJseSBmaWx0ZXIgT3BlbiBGaWxlIERlc2NyaXB0aW9uIChPRkQpIGxvY2tzIHdoZW4gYC9wcm9jL2xvY2tzYCBpcyByZWFkIGZyb20gd2l0aGluIGEgbm9uLWluaXRpYWwgUElEIG5hbWVzcGFjZS4gQmVjYXVzZSBPRkQgbG9ja3MgcmVwb3J0IHBpZCAtMSwgcHJldmlvdXMgbmFtZXNwYWNlIGZpbHRlcmluZyBmYWlsZWQgdG8gY29uY2VhbCBPRkQgbG9ja3Mgb3duZWQgYnkgcHJvY2Vzc2VzIG91dHNpZGUgdGhlIFBJRCBuYW1lc3BhY2UuIFRoZSBwYXRjaCBhZGRzIFJDVS1iYXNlZCBQSUQgbG9va3VwIGFuZCBuYW1lc3BhY2UgdmlzaWJpbGl0eSBjaGVja3Mgb24gYGZsY19waWRgLiBUaGlzIGNoYW5nZXMgcmVhY2hhYmxlIGNvcmUgVkZTIC8gcHJvY2ZzIGxvZ2ljIHRoYXQgY2FuIGJlIGV4ZXJjaXNlZCB2aWEgZmlsZSBsb2NraW5nIHN5c2NhbGxzIGFuZCBwcm9jZnMgcmVhZHMgYWNyb3NzIFBJRCBuYW1lc3BhY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjMwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODlhZjZhZWRkODQzNGE3NGQxNzFjN2Y0YzQyNGE4ZGJjNGM3NTVjMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDIgMjI6MzA6NTEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvbG9ja3MuYyBiL2ZzL2xvY2tzLmNcbmluZGV4IDZlNGZmN2ZjZWMwNTMuLmRiMTc4NzlkOTMxOTUgMTAwNjQ0XG4tLS0gYS9mcy9sb2Nrcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9sb2Nrcy5jXG5AQCAtMzAyMiw2ICYjNDM7MzAyMiwyMyBAQCBzdGF0aWMgaW50IGxvY2tzX3Nob3coc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICp2KVxuIFxuIFx0Y3VyID0gaGxpc3RfZW50cnkodiwgc3RydWN0IGZpbGVfbG9ja19jb3JlLCBmbGNfbGluayk7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBPRkQgbG9ja3MgYXJlIHJlcG9ydGVkIHdpdGggcGlkIC0xLCBzbyB0aGUgZmlsdGVyIGJlbG93IGNhbm5vdCBzZWVcbiYjNDM7XHQgKiB0aGVpciBvd25lcjsgZmxjX3BpZCBob2xkcyB0aGUgb3duZXIgdGdpZCwgc28gZmlsdGVyIG9uIGl0LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICgoY3VyLVx1MDAzZWZsY19mbGFncyBcdTAwMjYgRkxfT0ZETENLKSBcdTAwMjZcdTAwMjYgcHJvY19waWRucyAhPSBcdTAwMjZpbml0X3BpZF9ucykge1xuJiM0MztcdFx0c3RydWN0IHBpZCAqcGlkO1xuJiM0MztcdFx0Ym9vbCB2aXNpYmxlID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdFx0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdFx0cGlkID0gZmluZF9waWRfbnMoY3VyLVx1MDAzZWZsY19waWQsIFx1MDAyNmluaXRfcGlkX25zKTtcbiYjNDM7XHRcdGlmIChwaWQpXG4mIzQzO1x0XHRcdHZpc2libGUgPSBwaWRfbnJfbnMocGlkLCBwcm9jX3BpZG5zKSAhPSAwO1xuJiM0MztcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0XHRpZiAoIXZpc2libGUpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAobG9ja3NfdHJhbnNsYXRlX3BpZChjdXIsIHByb2NfcGlkbnMpID09IDApXG4gXHRcdHJldHVybiAwO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjMwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZJTEVfTE9DS0lORyYjMzQ7LAogICAgJiMzNDtQUk9DX0ZTJiMzNDssCiAgICAmIzM0O05BTUVTUEFDRVMmIzM0OywKICAgICYjMzQ7UElEX05TJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bG9ja3Nfc2hvdyYjMzQ7LAogICAgJiMzNDtmY250bF9zZXRsayYjMzQ7LAogICAgJiMzNDtmY250bF9nZXRsayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgbG9ja3Nfc2hvdygpYCBpbiBmcy9sb2Nrcy5jIHRvIHByb3Blcmx5IGZpbHRlciBPcGVuIEZpbGUgRGVzY3JpcHRpb24gKE9GRCkgbG9ja3Mgd2hlbiBgL3Byb2MvbG9ja3NgIGlzIHJlYWQgZnJvbSB3aXRoaW4gYSBub24taW5pdGlhbCBQSUQgbmFtZXNwYWNlLiBCZWNhdXNlIE9GRCBsb2NrcyByZXBvcnQgcGlkIC0xLCBwcmV2aW91cyBuYW1lc3BhY2UgZmlsdGVyaW5nIGZhaWxlZCB0byBjb25jZWFsIE9GRCBsb2NrcyBvd25lZCBieSBwcm9jZXNzZXMgb3V0c2lkZSB0aGUgUElEIG5hbWVzcGFjZS4gVGhlIHBhdGNoIGFkZHMgUkNVLWJhc2VkIFBJRCBsb29rdXAgYW5kIG5hbWVzcGFjZSB2aXNpYmlsaXR5IGNoZWNrcyBvbiBgZmxjX3BpZGAuIFRoaXMgY2hhbmdlcyByZWFjaGFibGUgY29yZSBWRlMgLyBwcm9jZnMgbG9naWMgdGhhdCBjYW4gYmUgZXhlcmNpc2VkIHZpYSBmaWxlIGxvY2tpbmcgc3lzY2FsbHMgYW5kIHByb2NmcyByZWFkcyBhY3Jvc3MgUElEIG5hbWVzcGFjZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4OWFmNmFlZGQ4NDM0YTc0ZDE3MWM3ZjRjNDI0YThkYmM0Yzc1NWMyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgMiAyMjozMDo1MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2xvY2tzLmMgYi9mcy9sb2Nrcy5jCmluZGV4IDZlNGZmN2ZjZWMwNTMuLmRiMTc4NzlkOTMxOTUgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbG9ja3MuYwpAQCAtMzAyMiw2ICYjNDM7MzAyMiwyMyBAQCBzdGF0aWMgaW50IGxvY2tzX3Nob3coc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICp2KQogCiAJY3VyID0gaGxpc3RfZW50cnkodiwgc3RydWN0IGZpbGVfbG9ja19jb3JlLCBmbGNfbGluayk7CiAKJiM0MzsJLyoKJiM0MzsJICogT0ZEIGxvY2tzIGFyZSByZXBvcnRlZCB3aXRoIHBpZCAtMSwgc28gdGhlIGZpbHRlciBiZWxvdyBjYW5ub3Qgc2VlCiYjNDM7CSAqIHRoZWlyIG93bmVyOyBmbGNfcGlkIGhvbGRzIHRoZSBvd25lciB0Z2lkLCBzbyBmaWx0ZXIgb24gaXQuCiYjNDM7CSAqLwomIzQzOwlpZiAoKGN1ci0mZ3Q7ZmxjX2ZsYWdzICZhbXA7IEZMX09GRExDSykgJmFtcDsmYW1wOyBwcm9jX3BpZG5zICE9ICZhbXA7aW5pdF9waWRfbnMpIHsKJiM0MzsJCXN0cnVjdCBwaWQgKnBpZDsKJiM0MzsJCWJvb2wgdmlzaWJsZSA9IGZhbHNlOwomIzQzOwomIzQzOwkJcmN1X3JlYWRfbG9jaygpOwomIzQzOwkJcGlkID0gZmluZF9waWRfbnMoY3VyLSZndDtmbGNfcGlkLCAmYW1wO2luaXRfcGlkX25zKTsKJiM0MzsJCWlmIChwaWQpCiYjNDM7CQkJdmlzaWJsZSA9IHBpZF9ucl9ucyhwaWQsIHByb2NfcGlkbnMpICE9IDA7CiYjNDM7CQlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJCWlmICghdmlzaWJsZSkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwogCWlmIChsb2Nrc190cmFuc2xhdGVfcGlkKGN1ciwgcHJvY19waWRucykgPT0gMCkKIAkJcmV0dXJuIDA7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIyNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBsb2Nrc19zaG93YCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nIGluIGBmcy9sb2Nrcy5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgbG9ja3Nfc2hvd2AgZnVuY3Rpb24uIFNlZW1zIGxpa2UgaXQmIzM5O3MgYWRkaW5nIHNvbWUgZmlsdGVyaW5nIGxvZ2ljLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgaXQmIzM5O3MgcmVsYXRlZCB0byBob3cgZmlsZSBsb2NrcyBhcmUgZGlzcGxheWVkIGluIGEgYHByb2Nmc2AgY29udGV4dC4KCkxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IGxvb2tzIGxpa2UgdGhlcmUmIzM5O3MgYSBuZXcgY2hlY2sgZGVhbGluZyB3aXRoICYjMzQ7T0ZEIGxvY2tzJiMzNDsuIFRoZSBjb21tZW50IG1lbnRpb25zIHRoYXQgdGhlc2UgbG9ja3MgYXJlIHJlcG9ydGVkIHdpdGggYSBQSUQgb2YgLTEuIFNvLCB0aGUgbm9ybWFsIFBJRC1iYXNlZCBmaWx0ZXJpbmcgaXNuJiMzOTt0IGdvaW5nIHRvIHdvcmsgZm9yIHRoZXNlLiAgVGhlIHBhdGNoIHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgdGhpcyBieSBjaGVja2luZyBgZmxjX3BpZGAgKHdoaWNoIHRoZSBjb21tZW50IHNheXMgaG9sZHMgdGhlIG93bmVyJiMzOTtzIHRnaWQpLgoKSXQgc2VlbXMgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpbnZvbHZlcyBhIGNvbmRpdGlvbmFsIGJsb2NrOgoKYGBgYwoJaWYgKChjdXItJmd0O2ZsY19mbGFncyAmYW1wOyBGTF9PRkRMQ0spICZhbXA7JmFtcDsgcHJvY19waWRucyAhPSAmYW1wO2luaXRfcGlkX25zKSB7CgkJc3RydWN0IHBpZCAqcGlkOwoJCWJvb2wgdmlzaWJsZSA9IGZhbHNlOwoKCQlyY3VfcmVhZF9sb2NrKCk7CgkJcGlkID0gZmluZF9waWRfbnMoY3VyLSZndDtmbGNfcGlkLCAmYW1wO2luaXRfcGlkX25zKTsKCQlpZiAocGlkKQoJCQl2aXNpYmxlID0gcGlkX25yX25zKHBpZCwgcHJvY19waWRucykgIT0gMDsKCQlyY3VfcmVhZF91bmxvY2soKTsKCQlpZiAoIXZpc2libGUpCgkJCXJldHVybiAwOwoJfQpgYGAKCklmIGl0JiMzOTtzIGFuIE9GRCBsb2NrIGFuZCB3ZSYjMzk7cmUgbm90IGluIHRoZSBpbml0aWFsIFBJRCBuYW1lc3BhY2UsIHRoZSBjb2RlIHRoZW4gbG9va3MgdXAgdGhlIFBJRCBhc3NvY2lhdGVkIHdpdGggdGhlIGBmbGNfcGlkYCAod2hpY2ggaXMgdGhlIG93bmVyJiMzOTtzIHRnaWQpIHdpdGhpbiB0aGUgaW5pdGlhbCBQSUQgbmFtZXNwYWNlLiAgSWYgaXQgZmluZHMgYSBQSUQgYW5kIHRoYXQgUElEIGlzbiYjMzk7dCB2aXNpYmxlIGluIHRoZSBjdXJyZW50IGBwcm9jX3BpZG5zYCwgdGhlbiB0aGUgcGF0Y2ggaXMgZ29pbmcgdG8gc2tpcCB0aGUgY3VycmVudCBsb2NrIGFuZCByZXR1cm4gMC4gVGhpcyBzdWdnZXN0cyB3ZSBhcmUgZmlsdGVyaW5nLCBhbmQgd2UgZG9uJiMzOTt0IHdhbnQgdG8gZGlzcGxheSBsb2NrcyB3aG9zZSBvd25lciBpcyBub3QgdmlzaWJsZSB0byB0aGUgY3VycmVudCBQSUQgbmFtZXNwYWNlLgoKSSB0aGluayBJIG5lZWQgdG8gdXNlIGVpdGhlciBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZmluZCBvdXQgd2hhdCB0aGVzZSBuYW1lc3BhY2VzIGFyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2xvY2tzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMwMTA6XHRcdFx0cmV0dXJuIE5VTEw7XG4zMDExOlx0XHR9XG4zMDEyOlx0XG4zMDEzOlx0XHRyZXR1cm4gdG1wO1xuMzAxNDpcdH1cbjMwMTU6XHRcbjMwMTY6XHRzdGF0aWMgaW50IGxvY2tzX3Nob3coc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICp2KVxuMzAxNzpcdHtcbjMwMTg6XHRcdHN0cnVjdCBsb2Nrc19pdGVyYXRvciAqaXRlciA9IGYtXHUwMDNlcHJpdmF0ZTtcbjMwMTk6XHRcdHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqY3VyLCAqdG1wO1xuMzAyMDpcdFx0c3RydWN0IHBpZF9uYW1lc3BhY2UgKnByb2NfcGlkbnMgPSBwcm9jX3BpZF9ucyhmaWxlX2lub2RlKGYtXHUwMDNlZmlsZSktXHUwMDNlaV9zYik7XG4zMDIxOlx0XHRpbnQgbGV2ZWwgPSAwO1xuMzAyMjpcdFxuMzAyMzpcdFx0Y3VyID0gaGxpc3RfZW50cnkodiwgc3RydWN0IGZpbGVfbG9ja19jb3JlLCBmbGNfbGluayk7XG4zMDI0Olx0XG4zMDI1Olx0XHQvKlxuMzAyNjpcdFx0ICogT0ZEIGxvY2tzIGFyZSByZXBvcnRlZCB3aXRoIHBpZCAtMSwgc28gdGhlIGZpbHRlciBiZWxvdyBjYW5ub3Qgc2VlXG4zMDI3Olx0XHQgKiB0aGVpciBvd25lcjsgZmxjX3BpZCBob2xkcyB0aGUgb3duZXIgdGdpZCwgc28gZmlsdGVyIG9uIGl0LlxuMzAyODpcdFx0ICovXG4zMDI5Olx0XHRpZiAoKGN1ci1cdTAwM2VmbGNfZmxhZ3MgXHUwMDI2IEZMX09GRExDSykgXHUwMDI2XHUwMDI2IHByb2NfcGlkbnMgIT0gXHUwMDI2aW5pdF9waWRfbnMpIHtcbjMwMzA6XHRcdFx0c3RydWN0IHBpZCAqcGlkO1xuMzAzMTpcdFx0XHRib29sIHZpc2libGUgPSBmYWxzZTtcbjMwMzI6XHRcbjMwMzM6XHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuMzAzNDpcdFx0XHRwaWQgPSBmaW5kX3BpZF9ucyhjdXItXHUwMDNlZmxjX3BpZCwgXHUwMDI2aW5pdF9waWRfbnMpO1xuMzAzNTpcdFx0XHRpZiAocGlkKVxuMzAzNjpcdFx0XHRcdHZpc2libGUgPSBwaWRfbnJfbnMocGlkLCBwcm9jX3BpZG5zKSAhPSAwO1xuMzAzNzpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjMwMzg6XHRcdFx0aWYgKCF2aXNpYmxlKVxuMzAzOTpcdFx0XHRcdHJldHVybiAwO1xuMzA0MDpcdFx0fVxuMzA0MTpcdFxuMzA0MjpcdFx0aWYgKGxvY2tzX3RyYW5zbGF0ZV9waWQoY3VyLCBwcm9jX3BpZG5zKSA9PSAwKVxuMzA0MzpcdFx0XHRyZXR1cm4gMDtcbjMwNDQ6XHRcbjMwNDU6XHRcdC8qIFZpZXcgdGhpcyBjcm9zc2VkIGxpbmtlZCBsaXN0IGFzIGEgYmluYXJ5IHRyZWUsIHRoZSBmaXJzdCBtZW1iZXIgb2YgZmxjX2Jsb2NrZWRfcmVxdWVzdHNcbjMwNDY6XHRcdCAqIGlzIHRoZSBsZWZ0IGNoaWxkIG9mIGN1cnJlbnQgbm9kZSwgdGhlIG5leHQgc2lsaWJpbmcgaW4gZmxjX2Jsb2NrZWRfbWVtYmVyIGlzIHRoZVxuMzA0NzpcdFx0ICogcmlnaHQgY2hpbGQsIHdlIGNhbiBhbHNlIGdldCB0aGUgcGFyZW50IG9mIGN1cnJlbnQgbm9kZSBmcm9tIGZsY19ibG9ja2VyLCBzbyB0aGlzXG4zMDQ4Olx0XHQgKiBxdWVzdGlvbiBiZWNvbWVzIHRyYXZlcnNhbCBvZiBhIGJpbmFyeSB0cmVlXG4zMDQ5Olx0XHQgKi9cbjMwNTA6XHRcdHdoaWxlIChjdXIgIT0gTlVMTCkge1xuMzA1MTpcdFx0XHRpZiAobGV2ZWwpXG4zMDUyOlx0XHRcdFx0bG9ja19nZXRfc3RhdHVzKGYsIGN1ciwgaXRlci1cdTAwM2VsaV9wb3MsIFwmIzM0Oy1cdTAwM2UgXCYjMzQ7LCBsZXZlbCk7XG4zMDUzOlx0XHRcdGVsc2VcbjMwNTQ6XHRcdFx0XHRsb2NrX2dldF9zdGF0dXMoZiwgY3VyLCBpdGVyLVx1MDAzZWxpX3BvcywgXCYjMzQ7XCYjMzQ7LCBsZXZlbCk7XG4zMDU1Olx0XG4zMDU2Olx0XHRcdGlmICghbGlzdF9lbXB0eShcdTAwMjZjdXItXHUwMDNlZmxjX2Jsb2NrZWRfcmVxdWVzdHMpKSB7XG4zMDU3Olx0XHRcdFx0LyogVHVybiBsZWZ0ICovXG4zMDU4Olx0XHRcdFx0Y3VyID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKFx1MDAyNmN1ci1cdTAwM2VmbGNfYmxvY2tlZF9yZXF1ZXN0cyxcbjMwNTk6XHRcdFx0XHRcdFx0XHQgICAgICAgc3RydWN0IGZpbGVfbG9ja19jb3JlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MzkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGxvY2sgc2l0dWF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFuZHNjYXBlLCBzbyBteSBmaXJzdCBtb3ZlIGlzIHRvIGlkZW50aWZ5IHRoZSB1c2FnZSBvZiBgbG9ja3Nfc2hvd2AuIEkgd2FudCB0byBzZWUgKndoZXJlKiBpdCYjMzk7cyBiZWluZyBjYWxsZWQgaW4gdGhlIGNvZGViYXNlLCBhbmQgdGhlbiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBwcmVjaXNlbHkgKmhvdyogdGhlIGAvcHJvYy9sb2Nrc2AgaW50ZXJmYWNlIGZ1bmN0aW9ucy4gVGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlc2UgdHdvIGlzIGNyaXRpY2FsLgoKVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiBgZnMvbG9ja3MuY2AuIEkgZXhwZWN0IHRoZSBjb3JlIGxvZ2ljIGlzIHRoZXJlLiBJJiMzOTtsbCB6ZXJvIGluIG9uIGxpbmVzIGFyb3VuZCAzMDAwIHRvIDMxMDAuIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIHJhbmdlIHRvIGZpbmQgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb25zIGFuZCByZWxldmFudCBzdXBwb3J0aW5nIGNvZGUuIEhvcGVmdWxseSwgdGhhdCB3aWxsIGdpdmUgbWUgZW5vdWdoIGluZm9ybWF0aW9uIHRvIHdvcmsgd2l0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2xvY2tzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMwNjA6XHRcdFx0XHRcdFx0XHQgICAgICAgZmxjX2Jsb2NrZWRfbWVtYmVyKTtcbjMwNjE6XHRcdFx0XHRsZXZlbCYjNDM7JiM0Mzs7XG4zMDYyOlx0XHRcdH0gZWxzZSB7XG4zMDYzOlx0XHRcdFx0LyogVHVybiByaWdodCAqL1xuMzA2NDpcdFx0XHRcdHRtcCA9IGdldF9uZXh0X2Jsb2NrZWRfbWVtYmVyKGN1cik7XG4zMDY1Olx0XHRcdFx0LyogRmFsbCBiYWNrIHRvIHBhcmVudCBub2RlICovXG4zMDY2Olx0XHRcdFx0d2hpbGUgKHRtcCA9PSBOVUxMIFx1MDAyNlx1MDAyNiBjdXItXHUwMDNlZmxjX2Jsb2NrZXIgIT0gTlVMTCkge1xuMzA2NzpcdFx0XHRcdFx0Y3VyID0gY3VyLVx1MDAzZWZsY19ibG9ja2VyO1xuMzA2ODpcdFx0XHRcdFx0bGV2ZWwtLTtcbjMwNjk6XHRcdFx0XHRcdHRtcCA9IGdldF9uZXh0X2Jsb2NrZWRfbWVtYmVyKGN1cik7XG4zMDcwOlx0XHRcdFx0fVxuMzA3MTpcdFx0XHRcdGN1ciA9IHRtcDtcbjMwNzI6XHRcdFx0fVxuMzA3MzpcdFx0fVxuMzA3NDpcdFxuMzA3NTpcdFx0cmV0dXJuIDA7XG4zMDc2Olx0fVxuMzA3NzpcdFxuMzA3ODpcdHN0YXRpYyB2b2lkIF9fc2hvd19mZF9sb2NrcyhzdHJ1Y3Qgc2VxX2ZpbGUgKmYsXG4zMDc5Olx0XHRcdFx0c3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgaW50ICppZCxcbjMwODA6XHRcdFx0XHRzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGZpbGVzX3N0cnVjdCAqZmlsZXMpXG4zMDgxOlx0e1xuMzA4MjpcdFx0c3RydWN0IGZpbGVfbG9ja19jb3JlICpmbDtcbjMwODM6XHRcbjMwODQ6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoZmwsIGhlYWQsIGZsY19saXN0KSB7XG4zMDg1Olx0XG4zMDg2Olx0XHRcdGlmIChmaWxwICE9IGZsLVx1MDAzZWZsY19maWxlKVxuMzA4NzpcdFx0XHRcdGNvbnRpbnVlO1xuMzA4ODpcdFx0XHRpZiAoZmwtXHUwMDNlZmxjX293bmVyICE9IGZpbGVzIFx1MDAyNlx1MDAyNiBmbC1cdTAwM2VmbGNfb3duZXIgIT0gZmlscClcbjMwODk6XHRcdFx0XHRjb250aW51ZTtcbjMwOTA6XHRcbjMwOTE6XHRcdFx0KCppZCkmIzQzOyYjNDM7O1xuMzA5MjpcdFx0XHRzZXFfcHV0cyhmLCBcJiMzNDtsb2NrOlxcdFwmIzM0Oyk7XG4zMDkzOlx0XHRcdGxvY2tfZ2V0X3N0YXR1cyhmLCBmbCwgKmlkLCBcJiMzNDtcJiMzNDssIDApO1xuMzA5NDpcdFx0fVxuMzA5NTpcdH1cbjMwOTY6XHRcbjMwOTc6XHR2b2lkIHNob3dfZmRfbG9ja3Moc3RydWN0IHNlcV9maWxlICpmLFxuMzA5ODpcdFx0XHQgIHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgZmlsZXNfc3RydWN0ICpmaWxlcylcbjMwOTk6XHR7XG4zMTAwOlx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxwKTtcbjMxMDE6XHRcdHN0cnVjdCBmaWxlX2xvY2tfY29udGV4dCAqY3R4O1xuMzEwMjpcdFx0aW50IGlkID0gMDtcbjMxMDM6XHRcbjMxMDQ6XHRcdGN0eCA9IGxvY2tzX2lub2RlX2NvbnRleHQoaW5vZGUpO1xuMzEwNTpcdFx0aWYgKCFjdHgpXG4zMTA2Olx0XHRcdHJldHVybjtcbjMxMDc6XHRcbjMxMDg6XHRcdHNwaW5fbG9jayhcdTAwMjZjdHgtXHUwMDNlZmxjX2xvY2spO1xuMzEwOTpcdFx0X19zaG93X2ZkX2xvY2tzKGYsIFx1MDAyNmN0eC1cdTAwM2VmbGNfZmxvY2ssIFx1MDAyNmlkLCBmaWxwLCBmaWxlcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg3OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKk5hdmlnYXRpbmcgdGhlIExpbnV4IEtlcm5lbCYjMzk7cyBMb2NraW5nIE1lY2hhbmlzbSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBwb2ludCBpbiB0aGUga2VybmVsIHdoZXJlIHRoZSBgL3Byb2MvbG9ja3NgIGludGVyZmFjZSBpcyByZWdpc3RlcmVkLiBNeSBodW5jaCBpcyB0aGF0IHRoZSBmaWxlIHN5c3RlbSBsYXllciwgcGFydGljdWxhcmx5IGBmcy9sb2Nrcy5jYCwgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcuIEkgd2FudCB0byB0cmFjZSB0aGUgcGF0aCBmcm9tIHRoZSBgL3Byb2NgIGZpbGVzeXN0ZW0gZW50cnkgdG8gdGhlIHVuZGVybHlpbmcgbG9ja2luZyBkYXRhIHN0cnVjdHVyZXMuIEtub3dpbmcgd2hlcmUgaXQmIzM5O3MgcmVnaXN0ZXJlZCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGtlcm5lbCBleHBvc2VzIGFuZCBtYW5hZ2VzIGxvY2sgaW5mb3JtYXRpb24gZm9yIHVzZXItc3BhY2UgYXBwbGljYXRpb25zLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgYW5hbHl6aW5nIHRoZSBrZXJuZWwmIzM5O3MgbG9ja2luZyBiZWhhdmlvciwgYW5kIGBmcy9sb2Nrcy5jYCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciBteSBpbnZlc3RpZ2F0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9sb2Nrcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzExMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMTEwOlx0XHRfX3Nob3dfZmRfbG9ja3MoZiwgXHUwMDI2Y3R4LVx1MDAzZWZsY19wb3NpeCwgXHUwMDI2aWQsIGZpbHAsIGZpbGVzKTtcbjMxMTE6XHRcdF9fc2hvd19mZF9sb2NrcyhmLCBcdTAwMjZjdHgtXHUwMDNlZmxjX2xlYXNlLCBcdTAwMjZpZCwgZmlscCwgZmlsZXMpO1xuMzExMjpcdFx0c3Bpbl91bmxvY2soXHUwMDI2Y3R4LVx1MDAzZWZsY19sb2NrKTtcbjMxMTM6XHR9XG4zMTE0Olx0XG4zMTE1Olx0c3RhdGljIHZvaWQgKmxvY2tzX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqZiwgbG9mZl90ICpwb3MpXG4zMTE2Olx0XHRfX2FjcXVpcmVzKFx1MDAyNmJsb2NrZWRfbG9ja19sb2NrKVxuMzExNzpcdHtcbjMxMTg6XHRcdHN0cnVjdCBsb2Nrc19pdGVyYXRvciAqaXRlciA9IGYtXHUwMDNlcHJpdmF0ZTtcbjMxMTk6XHRcbjMxMjA6XHRcdGl0ZXItXHUwMDNlbGlfcG9zID0gKnBvcyAmIzQzOyAxO1xuMzEyMTpcdFx0cGVyY3B1X2Rvd25fd3JpdGUoXHUwMDI2ZmlsZV9yd3NlbSk7XG4zMTIyOlx0XHRzcGluX2xvY2soXHUwMDI2YmxvY2tlZF9sb2NrX2xvY2spO1xuMzEyMzpcdFx0cmV0dXJuIHNlcV9obGlzdF9zdGFydF9wZXJjcHUoXHUwMDI2ZmlsZV9sb2NrX2xpc3QuaGxpc3QsIFx1MDAyNml0ZXItXHUwMDNlbGlfY3B1LCAqcG9zKTtcbjMxMjQ6XHR9XG4zMTI1Olx0XG4zMTI2Olx0c3RhdGljIHZvaWQgKmxvY2tzX25leHQoc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICp2LCBsb2ZmX3QgKnBvcylcbjMxMjc6XHR7XG4zMTI4Olx0XHRzdHJ1Y3QgbG9ja3NfaXRlcmF0b3IgKml0ZXIgPSBmLVx1MDAzZXByaXZhdGU7XG4zMTI5Olx0XG4zMTMwOlx0XHQmIzQzOyYjNDM7aXRlci1cdTAwM2VsaV9wb3M7XG4zMTMxOlx0XHRyZXR1cm4gc2VxX2hsaXN0X25leHRfcGVyY3B1KHYsIFx1MDAyNmZpbGVfbG9ja19saXN0LmhsaXN0LCBcdTAwMjZpdGVyLVx1MDAzZWxpX2NwdSwgcG9zKTtcbjMxMzI6XHR9XG4zMTMzOlx0XG4zMTM0Olx0c3RhdGljIHZvaWQgbG9ja3Nfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIHZvaWQgKnYpXG4zMTM1Olx0XHRfX3JlbGVhc2VzKFx1MDAyNmJsb2NrZWRfbG9ja19sb2NrKVxuMzEzNjpcdHtcbjMxMzc6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmJsb2NrZWRfbG9ja19sb2NrKTtcbjMxMzg6XHRcdHBlcmNwdV91cF93cml0ZShcdTAwMjZmaWxlX3J3c2VtKTtcbjMxMzk6XHR9XG4zMTQwOlx0XG4zMTQxOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBsb2Nrc19zZXFfb3BlcmF0aW9ucyA9IHtcbjMxNDI6XHRcdC5zdGFydFx0PSBsb2Nrc19zdGFydCxcbjMxNDM6XHRcdC5uZXh0XHQ9IGxvY2tzX25leHQsXG4zMTQ0Olx0XHQuc3RvcFx0PSBsb2Nrc19zdG9wLFxuMzE0NTpcdFx0LnNob3dcdD0gbG9ja3Nfc2hvdyxcbjMxNDY6XHR9O1xuMzE0NzpcdFxuMzE0ODpcdHN0YXRpYyBpbnQgX19pbml0IHByb2NfbG9ja3NfaW5pdCh2b2lkKVxuMzE0OTpcdHtcbjMxNTA6XHRcdHByb2NfY3JlYXRlX3NlcV9wcml2YXRlKFwmIzM0O2xvY2tzXCYjMzQ7LCAwLCBOVUxMLCBcdTAwMjZsb2Nrc19zZXFfb3BlcmF0aW9ucyxcbjMxNTE6XHRcdFx0XHRzaXplb2Yoc3RydWN0IGxvY2tzX2l0ZXJhdG9yKSwgTlVMTCk7XG4zMTUyOlx0XHRyZXR1cm4gMDtcbjMxNTM6XHR9XG4zMTU0Olx0ZnNfaW5pdGNhbGwocHJvY19sb2Nrc19pbml0KTtcbjMxNTU6XHQjZW5kaWZcbjMxNTY6XHRcbjMxNTc6XHRzdGF0aWMgaW50IF9faW5pdCBmaWxlbG9ja19pbml0KHZvaWQpXG4zMTU4Olx0e1xuMzE1OTpcdFx0aW50IGk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg3OQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBNYWNybyBVc2FnZSBpbiBUaGlzIENvZGViYXNlKioKCkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBjb250ZXh0IGZvciBgcHJvY19sb2Nrc19pbml0YCBhbmQgYGxvY2tzX3Nob3dgLiBMZXQmIzM5O3Mgc3RlcCB0aHJvdWdoIHRoaXMgbWV0aG9kaWNhbGx5LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgYCNpZmRlZmAgZGlyZWN0aXZlcyB0aGF0IG1pZ2h0IGNvbnRyb2wgdGhlaXIgaW5jbHVzaW9uLiBJJiMzOTtsbCBuZWVkIHRvIHdvcmsgYmFja3dhcmQgdGhyb3VnaCB0aGUgZmlsZSwgc3RhcnRpbmcgd2l0aCB0aGVzZSBmdW5jdGlvbnMuIFRoZSBnb2FsIGhlcmUgaXMgdG8gZGV0ZXJtaW5lICp3aHkqIHRoZXNlIGZ1bmN0aW9ucyBtaWdodCBiZSBzZWxlY3RpdmVseSBjb21waWxlZC4gQXJlIHdlIGRlYWxpbmcgd2l0aCBmZWF0dXJlIGZsYWdzLCBkaWZmZXJlbnQgaGFyZHdhcmUgcGxhdGZvcm1zLCBkZWJ1ZyBtb2Rlcywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEEgcXVpY2sgc2VhcmNoIGZvciB0aGUgbWFjcm8gZGVmaW5pdGlvbnMgc3Vycm91bmRpbmcgdGhlc2UgZnVuY3Rpb24gY2FsbHMgc2hvdWxkIHJldmVhbCB0aGUgZGVwZW5kZW5jeS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZi4qUFJPQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2xvY2tzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbG9ja3MuYz0yOTEwPUVYUE9SVF9TWU1CT0xfR1BMKHZmc19pbm9kZV9oYXNfbG9ja3MpO1xuZnMvbG9ja3MuYy0yOTExLVxuZnMvbG9ja3MuYzoyOTEyOiNpZmRlZiBDT05GSUdfUFJPQ19GU1xuZnMvbG9ja3MuYy0yOTEzLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb2NfZnMuaFx1MDAzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTg1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgZnMvbG9ja3MuY2AqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gdGhpbmtpbmcsIGJhc2VkIG9uIHRoZSBjb250ZXh0LCB0aGF0IHRoZSBpc3N1ZSBsaWtlbHkgcmVzaWRlcyB3aXRoaW4gYGZzL2xvY2tzLmNgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gemVyb2luZyBpbiBvbiB0aGUgYXJlYSBhcm91bmQgbGluZSAyOTEyLiBUaGF0IGxvY2F0aW9uIGlzIHVzdWFsbHkgd2hlcmUgdGhlIGNvZGUgaGFuZGxlcy4uLiB3ZWxsLCBpdCYjMzk7cyB3aGVyZSB0aGUgaW1wbGVtZW50YXRpb24gZm9yIFtpbnNlcnQgcmVsZXZhbnQgbG9jayByZWxhdGVkIGZ1bmN0aW9uYWxpdHkgdGhlIGV4cGVydCB3b3VsZCBrbm93LCBlLmcuLCB0aGUgc3BlY2lmaWMgbG9ja2luZyBtZWNoYW5pc20sIGEgcGFydGljdWxhciBlcnJvciBjb25kaXRpb24sIG9yIGEgcmVsYXRlZCBmdW5jdGlvbiBjYWxsLCBkZXBlbmRpbmcgb24gY29udGV4dF0uIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBvYnNlcnZlZCBiZWhhdmlvciBpbiB0aGF0IHBhcnRpY3VsYXIgc2VjdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBjYXJlZnVsbHkgYW5hbHl6ZSB0aGUgY29kZSBhcm91bmQgdGhhdCBwb2ludCwgbG9va2luZyBmb3IgaG93IFttZW50aW9uIHNvbWV0aGluZyByZWxldmFudCB0byBsb29rIGZvciwgZS5nLiwgdGhlIGxvY2sgaXMgYWNxdWlyZWQvcmVsZWFzZWQsIHRoZSBzdGF0ZSBpcyB0cmFuc2l0aW9uZWQsIG9yIGEgc3BlY2lmaWMgdmFsdWUgaXMgaGFuZGxlZF0uIFRoZSBkZXZpbCBpcyBhbHdheXMgaW4gdGhlIGRldGFpbHMsIHNvIGxldCYjMzk7cyBzdGFydCByZWFkaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2xvY2tzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI5MTA6XHRFWFBPUlRfU1lNQk9MX0dQTCh2ZnNfaW5vZGVfaGFzX2xvY2tzKTtcbjI5MTE6XHRcbjI5MTI6XHQjaWZkZWYgQ09ORklHX1BST0NfRlNcbjI5MTM6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9jX2ZzLmhcdTAwM2VcbjI5MTQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXFfZmlsZS5oXHUwMDNlXG4yOTE1Olx0XG4yOTE2Olx0c3RydWN0IGxvY2tzX2l0ZXJhdG9yIHtcbjI5MTc6XHRcdGludFx0bGlfY3B1O1xuMjkxODpcdFx0bG9mZl90XHRsaV9wb3M7XG4yOTE5Olx0fTtcbjI5MjA6XHRcbjI5MjE6XHRzdGF0aWMgdm9pZCBsb2NrX2dldF9zdGF0dXMoc3RydWN0IHNlcV9maWxlICpmLCBzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmZsYyxcbjI5MjI6XHRcdFx0XHQgICAgbG9mZl90IGlkLCBjaGFyICpwZngsIGludCByZXBlYXQpXG4yOTIzOlx0e1xuMjkyNDpcdFx0c3RydWN0IGlub2RlICppbm9kZSA9IE5VTEw7XG4yOTI1Olx0XHR1bnNpZ25lZCBpbnQgcGlkO1xuMjkyNjpcdFx0c3RydWN0IHBpZF9uYW1lc3BhY2UgKnByb2NfcGlkbnMgPSBwcm9jX3BpZF9ucyhmaWxlX2lub2RlKGYtXHUwMDNlZmlsZSktXHUwMDNlaV9zYik7XG4yOTI3Olx0XHRpbnQgdHlwZSA9IGZsYy1cdTAwM2VmbGNfdHlwZTtcbjI5Mjg6XHRcdHN0cnVjdCBmaWxlX2xvY2sgKmZsID0gZmlsZV9sb2NrKGZsYyk7XG4yOTI5Olx0XG4yOTMwOlx0XHRwaWQgPSBsb2Nrc190cmFuc2xhdGVfcGlkKGZsYywgcHJvY19waWRucyk7XG4yOTMxOlx0XG4yOTMyOlx0XHQvKlxuMjkzMzpcdFx0ICogSWYgbG9jayBvd25lciBpcyBkZWFkIChhbmQgcGlkIGlzIGZyZWVkKSBvciBub3QgdmlzaWJsZSBpbiBjdXJyZW50XG4yOTM0Olx0XHQgKiBwaWRucywgemVybyBpcyBzaG93biBhcyBhIHBpZCB2YWx1ZS4gQ2hlY2sgbG9jayBpbmZvIGZyb21cbjI5MzU6XHRcdCAqIGluaXRfcGlkX25zIHRvIGdldCBzYXZlZCBsb2NrIHBpZCB2YWx1ZS5cbjI5MzY6XHRcdCAqL1xuMjkzNzpcdFx0aWYgKGZsYy1cdTAwM2VmbGNfZmlsZSAhPSBOVUxMKVxuMjkzODpcdFx0XHRpbm9kZSA9IGZpbGVfaW5vZGUoZmxjLVx1MDAzZWZsY19maWxlKTtcbjI5Mzk6XHRcbjI5NDA6XHRcdHNlcV9wcmludGYoZiwgXCYjMzQ7JWxsZDogXCYjMzQ7LCBpZCk7XG4yOTQxOlx0XG4yOTQyOlx0XHRpZiAocmVwZWF0KVxuMjk0MzpcdFx0XHRzZXFfcHJpbnRmKGYsIFwmIzM0OyUqc1wmIzM0OywgcmVwZWF0IC0gMSAmIzQzOyAoaW50KXN0cmxlbihwZngpLCBwZngpO1xuMjk0NDpcdFxuMjk0NTpcdFx0aWYgKGZsYy1cdTAwM2VmbGNfZmxhZ3MgXHUwMDI2IEZMX1BPU0lYKSB7XG4yOTQ2Olx0XHRcdGlmIChmbGMtXHUwMDNlZmxjX2ZsYWdzIFx1MDAyNiBGTF9BQ0NFU1MpXG4yOTQ3Olx0XHRcdFx0c2VxX3B1dHMoZiwgXCYjMzQ7QUNDRVNTXCYjMzQ7KTtcbjI5NDg6XHRcdFx0ZWxzZSBpZiAoZmxjLVx1MDAzZWZsY19mbGFncyBcdTAwMjYgRkxfT0ZETENLKVxuMjk0OTpcdFx0XHRcdHNlcV9wdXRzKGYsIFwmIzM0O09GRExDS1wmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxMTQKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBGaWxlIExvY2tpbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byBmaWxlIGxvY2tpbmcsIHNwZWNpZmljYWxseSwgaG93IGl0JiMzOTtzIGludGVncmF0ZWQgd2l0aGluIHRoZSBrZXJuZWwuIE15IGN1cnJlbnQgaHVuY2ggaXMgdGhhdCBgZnMvbG9ja3MuY2AgaXMgb25seSBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgd2hlbiB0aGUgYENPTkZJR19GSUxFX0xPQ0tJTkdgIG9wdGlvbiBpcyBlbmFibGVkLiBUaGF0IGZlZWxzIGxvZ2ljYWwsIGEgY29tbW9uIHBhdHRlcm4gaW4ga2VybmVsIGJ1aWxkIHN5c3RlbXMuIFRvIGNvbmZpcm0gdGhhdCBoeXBvdGhlc2lzLCB0aGUgZmlyc3QgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiDigJMgc3BlY2lmaWNhbGx5LCB0aGUgYGZzL01ha2VmaWxlYC4gSXQmIzM5O2xsIGNsZWFybHkgb3V0bGluZSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzIGZvciB0aGlzIHBhcnRpY3VsYXIgbW9kdWxlLCBsZXR0aW5nIG1lIHZlcmlmeSB0aGUgbGluayBiZXR3ZWVuIHRoZSBjb2RlIGFuZCB0aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGRlcGVuZGVuY2llcyBJIHNob3VsZCBiZSBhd2FyZSBvZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bG9ja3NcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL01ha2VmaWxlPTMzPW9iai0kKENPTkZJR19GU19WRVJJVFkpXHRcdCYjNDM7PSB2ZXJpdHkvXG5mcy9NYWtlZmlsZTozNDpvYmotJChDT05GSUdfRklMRV9MT0NLSU5HKSAgICAgICYjNDM7PSBsb2Nrcy5vXG5mcy9NYWtlZmlsZS0zNS1vYmotJChDT05GSUdfQklORk1UX01JU0MpXHQmIzQzOz0gYmluZm10X21pc2Mub1xuLS1cbmZzL2NlcGgvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfQ0VQSF9GUykgJiM0Mzs9IGNlcGgub1xuZnMvY2VwaC9NYWtlZmlsZS03LVxuZnMvY2VwaC9NYWtlZmlsZTo4OmNlcGgteSA6PSBzdXBlci5vIGlub2RlLm8gZGlyLm8gZmlsZS5vIGxvY2tzLm8gYWRkci5vIGlvY3RsLm8gXFxcbmZzL2NlcGgvTWFrZWZpbGUtOS1cdGV4cG9ydC5vIGNhcHMubyBzbmFwLm8geGF0dHIubyBxdW90YS5vIGlvLm8gXFxcbi0tXG5mcy9vY2ZzMi9NYWtlZmlsZT0xMT1vY2ZzMi1vYmpzIDo9IFxcXG4tLVxuZnMvb2NmczIvTWFrZWZpbGUtMjYtXHRsb2NhbGFsbG9jLm8gXHRcdFxcXG5mcy9vY2ZzMi9NYWtlZmlsZToyNzpcdGxvY2tzLm9cdFx0XHRcXFxuZnMvb2NmczIvTWFrZWZpbGUtMjgtXHRtbWFwLm8gXHRcdFx0XFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU5NAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNoZWNraW5nIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBxdWlja2x5IGNvbmZpcm0gYSBmZXcga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gRmlyc3QsIEkmIzM5O2xsIGp1bXAgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gSSBuZWVkIHRvIHZlcmlmeSB0aGUgc3RhdGUgb2YgdGhyZWUgcGFydGljdWxhciBvcHRpb25zOiBgRklMRV9MT0NLSU5HYCwgYFBST0NfRlNgLCBhbmQgYFBJRF9OU2AuIFRoZXNlIGFyZSBmdW5kYW1lbnRhbCwgYW5kIGl0JiMzOTtzIGFsd2F5cyBhIGdvb2QgaWRlYSB0byBkb3VibGUtY2hlY2sgdGhlaXIgc3RhdHVzIGJlZm9yZSBtb3Zpbmcgb24uIExldCYjMzk7cyBzdGFydCB3aXRoIGBGSUxFX0xPQ0tJTkdgIGFuZCBzZWFyY2ggZm9yIHRoYXQgaW4gdGhlIEtjb25maWcgZmlsZXMuIFRoYXQgd2lsbCBiZSB0aGUgc3RhcnRpbmcgcG9pbnQgdG8gZ2V0IG15IGJlYXJpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRklMRV9MT0NLSU5HJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9MTA4PWNvbmZpZyBFWFBPUlRGU19CTE9DS19PUFNcbi0tXG5mcy9LY29uZmlnLTExMy1cbmZzL0tjb25maWc6MTE0OmNvbmZpZyBGSUxFX0xPQ0tJTkdcbmZzL0tjb25maWctMTE1LVx0Ym9vbCBcJiMzNDtFbmFibGUgUE9TSVggZmlsZSBsb2NraW5nIEFQSVwmIzM0OyBpZiBFWFBFUlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzg1OQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBsZXQmIzM5O3MgemVybyBpbiBvbiBhIHNwZWNpZmljIGFyZWEgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwgY29uZmlndXJhdGlvbiBzeXN0ZW0uIEkmIzM5O20gZ29pbmcgdG8gbmF2aWdhdGUgdG8gdGhlIGBmcy9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTE0LiBUaGF0IGxvY2F0aW9uIGxpa2VseSBob2xkcyBzb21lIGNydWNpYWwgZGVmaW5pdGlvbnMgb3IgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gZmlsZXN5c3RlbSBjb25maWd1cmF0aW9ucy4gSSYjMzk7bSBhbnRpY2lwYXRpbmcgZmluZGluZyBlaXRoZXIgYSByZWxldmFudCBtb2R1bGUmIzM5O3MgS2NvbmZpZyBmcmFnbWVudCBpbmNsdXNpb24sIGEgdG9wLWxldmVsIGNob2ljZSwgb3IgcGVyaGFwcyB0aGUgZGVmaW5pdGlvbiBvZiBhIHNwZWNpZmljIGZpbGVzeXN0ZW0mIzM5O3Mgc2V0dGluZ3MuIFRoZSBjb250ZXh0IG9mIGBmcy9gIHN1Z2dlc3RzIHRoaXMgd2lsbCBiZSByZWxhdGVkIHRvIGZpbGUgc3lzdGVtIGZlYXR1cmVzLCBub3QgZ2VuZXJpYyBrZXJuZWwgb3B0aW9ucy4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHRoaXMgbGlrZWx5IHJlbGF0ZXMgdG8gaG93IHZhcmlvdXMgZmlsZSBzeXN0ZW0gb3B0aW9ucyBsaWtlIFhGUywgZXh0NCwgb3IgZXZlbiBuZXR3b3JrIGZpbGUgc3lzdGVtcyBhcmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyIGR1cmluZyB0aGUga2VybmVsIGJ1aWxkIHByb2Nlc3MsIG9yIGhvdyB0aGVpciBkZXBlbmRlbmNpZXMgYXJlIGhhbmRsZWQuIEkmIzM5O20gcHJlcGFyaW5nIHRvIHNlZSB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyB0aGF0IEkgYWxyZWFkeSBoYXZlIGluIG15IGhlYWQgaW4gYWJzdHJhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTEwOlx0XHRoZWxwXG4gMTExOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGV4cG9ydCBvcGVyYXRpb25zIGZvciBhIGZpbGVzeXN0ZW0gdG8gc3VwcG9ydFxuIDExMjpcdFx0ICBleHRlcm5hbCBibG9jayBJTy5cbiAxMTM6XHRcbiAxMTQ6XHRjb25maWcgRklMRV9MT0NLSU5HXG4gMTE1Olx0XHRib29sIFwmIzM0O0VuYWJsZSBQT1NJWCBmaWxlIGxvY2tpbmcgQVBJXCYjMzQ7IGlmIEVYUEVSVFxuIDExNjpcdFx0ZGVmYXVsdCB5XG4gMTE3Olx0XHRoZWxwXG4gMTE4Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3RhbmRhcmQgZmlsZSBsb2NraW5nIHN1cHBvcnQsIHJlcXVpcmVkXG4gMTE5Olx0XHQgIGZvciBmaWxlc3lzdGVtcyBsaWtlIE5GUyBhbmQgZm9yIHRoZSBmbG9jaygpIHN5c3RlbVxuIDEyMDpcdFx0ICBjYWxsLiBEaXNhYmxpbmcgdGhpcyBvcHRpb24gc2F2ZXMgYWJvdXQgMTFrLlxuIDEyMTpcdFxuIDEyMjpcdHNvdXJjZSBcJiMzNDtmcy9jcnlwdG8vS2NvbmZpZ1wmIzM0O1xuIDEyMzpcdFxuIDEyNDpcdHNvdXJjZSBcJiMzNDtmcy92ZXJpdHkvS2NvbmZpZ1wmIzM0O1xuIDEyNTpcdFxuIDEyNjpcdHNvdXJjZSBcJiMzNDtmcy9ub3RpZnkvS2NvbmZpZ1wmIzM0O1xuIDEyNzpcdFxuIDEyODpcdHNvdXJjZSBcJiMzNDtmcy9xdW90YS9LY29uZmlnXCYjMzQ7XG4gMTI5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNzUKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKT2theSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBjcnVjaWFsIGluIHRoaXMgY29uZmlndXJhdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZG91YmxlLWNoZWNrIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHByb2Nlc3MgbmFtZXNwYWNlcyBhbmQgdGhlIGAvcHJvY2AgZmlsZXN5c3RlbS4gVGhlcmVmb3JlLCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgYW5kIGV4YW1pbmUgYENPTkZJR19QUk9DX0ZTYCBhbmQgYENPTkZJR19QSURfTlNgIOKAkyBJIHdhbnQgdG8gYmUgY2VydGFpbiB0aGUgcmVsZXZhbnQgZmVhdHVyZXMgYXJlIGVuYWJsZWQsIGFuZCBjb3JyZWN0bHkgY29uZmlndXJlZCwgYW5kIHRoYXQgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgY29uZmxpY3RzLiBUaGlzIGFsc28gbWVhbnMgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGBpbml0X3BpZF9uc2AgdG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gaG93IFBJRCBuYW1lc3BhY2VzIGFyZSBpbml0aWFsaXplZCBhbmQgaG93IHRoZXkgYXJlIGhhbmRsZWQgYXQgdGhlIHZlcnkgc3RhcnQgb2YgdGhlIGJvb3QgcHJvY2Vzcy4gRmluYWxseSwgYSBxdWljayBzZWFyY2ggaW4gdGhlIGBmcy9wcm9jL0tjb25maWdgIGFuZCBgaW5pdC9LY29uZmlnYCBmaWxlcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGVzZSBmZWF0dXJlcyBhcmUgY29uZGl0aW9uYWxseSBlbmFibGVkIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMuIFRoaXMgd2lsbCBlbnN1cmUgSSYjMzk7bSBub3Qgb3Zlcmxvb2tpbmcgYW55IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciBwb3RlbnRpYWwgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUElEX05TJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE0NDY9Y29uZmlnIFVTRVJfTlNcbi0tXG5pbml0L0tjb25maWctMTQ1OS1cbmluaXQvS2NvbmZpZzoxNDYwOmNvbmZpZyBQSURfTlNcbmluaXQvS2NvbmZpZy0xNDYxLVx0Ym9vbCBcJiMzNDtQSUQgTmFtZXNwYWNlc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzMyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBQcm9jZnMgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBgL3Byb2NgIGZpbGVzeXN0ZW0uIFRpbWUgdG8gZGlnIGludG8gdGhlIGNvbmZpZ3VyYXRpb24uIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBvYnZpb3VzOiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoZSBwcm9jIGZpbGVzeXN0ZW0uIFNwZWNpZmljYWxseSwgdGhhdCBzaG91bGQgYmUgYGZzL3Byb2MvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gSSYjMzk7bSBhZnRlciwgbW9zdCBsaWtlbHkgbmFtZWQgc29tZXRoaW5nIGxpa2UgYENPTkZJR19QUk9DX0ZTYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhlbHAgdGV4dCBmb3IgdGhhdCBwYXJ0aWN1bGFyIGZlYXR1cmUuIEZyb20gdGhlcmUgSSYjMzk7bGwgc3RhcnQgY2hlY2tpbmcgdGhlIGRldGFpbHMgb2YgdGhlIGRlcGVuZGVuY2llcywgYW5kIHNlZSBpZiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIGFueSBvdGhlciBmaWxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBST0NfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9wcm9jLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9wcm9jL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL3Byb2MvS2NvbmZpZzoyOmNvbmZpZyBQUk9DX0ZTXG5mcy9wcm9jL0tjb25maWctMy1cdGJvb2wgXCYjMzQ7L3Byb2MgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTAxMAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtlcm5lbCBMb2NrIERpc3BsYXkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlc2UgY2hhbmdlcyBpbiBgZnMvbG9ja3MuY2AuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIGRpc3BsYXkgb2YgbG9ja3Mgd2l0aGluIGAvcHJvYy9sb2Nrc2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgT3BlbiBGaWxlIERlc2NyaXB0b3IgKE9GRCkgbG9ja3MgYXJlIGhhbmRsZWQuIEkgc2VlIGEgY29uZGl0aW9uYWwgYmxvY2sgd2l0aGluIGBsb2Nrc19zaG93YCB0aGF0IHNwZWNpZmljYWxseSBhZGRyZXNzZXMgdGhlc2UgT0ZEIGxvY2tzLiBUaGUgY29tbWVudCBpbW1lZGlhdGVseSBkcmF3cyBteSBhdHRlbnRpb246IGl0IG5vdGVzIHRoYXQgT0ZEIGxvY2tzIGFyZSByZXBvcnRlZCB3aXRoIGEgUElEIG9mIC0xLiBUaGlzIG1lYW5zIHRoZSBzdGFuZGFyZCBvd25lciBmaWx0ZXJpbmcgd29uJiMzOTt0IHdvcmssIHNvIHRoZSBjb2RlIGNsZXZlcmx5IHVzZXMgYGZsY19waWRgLCB3aGljaCBob2xkcyB0aGUgb3duZXImIzM5O3MgVGhyZWFkIEdyb3VwIElEIChUR0lEKSBpbnN0ZWFkLgoKVGhlIGNvZGUgdGhlbiBjaGVja3MgaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhbiBPRkQgbG9jayBhbmQgaWYgd2UgYXJlICpub3QqIGluIHRoZSBpbml0aWFsIFBJRCBuYW1lc3BhY2UuIEkgdW5kZXJzdGFuZCB0aGF0IGNvbnRleHQuIEluc2lkZSB0aGUgY29uZGl0aW9uYWwsIHdlIHNlZSBzb21lIGNhcmVmdWwgUkNVIChSZWFkLUNvcHktVXBkYXRlKSB1c2FnZSB0byBzYWZlbHkgZGVyZWZlcmVuY2UgdGhlIGBmbGNfcGlkYC4gSXQmIzM5O3MgZ2V0dGluZyB0aGUgUElEIGZyb20gdGhlIGluaXRpYWwgbmFtZXNwYWNlLCBhbmQgdGhlbiBjaGVja3MgaWYgdGhhdCBwaWQgaXMgdmlzaWJsZSBpbiB0aGUgY3VycmVudCBwcm9jZXNzJiMzOTtzIG5hbWVzcGFjZS4gSWYgdGhlIFBJRCBpcyBub3QgdmlzaWJsZSwgdGhlbiB3ZSYjMzk7bGwgc2tpcCB0aGF0IGVudHJ5LgoKRmluYWxseSwgd2UmIzM5O3ZlIGdvdCB0aGUgYGxvY2tzX3RyYW5zbGF0ZV9waWRgIGZ1bmN0aW9uLCBhbmQgdGhhdCYjMzk7cyB0aGUga2V5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gZG9lcy4gRnJvbSB0aGUgbG9va3Mgb2YgaXQsIHRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IHRoZSBQSUQgZnJvbSB0aGUgbG9jayB0byB3aGF0ZXZlciB0aGUgUElEIG5hbWVzcGFjZSBpcyBuZWVkZWQgZm9yLiBJZiB0aGlzIGNhbGwgcmV0dXJucyB6ZXJvLCBpdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBza2lwcGluZyB0aGF0IGVudHJ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsb2Nrc190cmFuc2xhdGVfcGlkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbG9ja3MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9sb2Nrcy5jPTIzNjU9RVhQT1JUX1NZTUJPTF9HUEwodmZzX3Rlc3RfbG9jayk7XG4tLVxuZnMvbG9ja3MuYy0yMzY3LS8qKlxuZnMvbG9ja3MuYzoyMzY4OiAqIGxvY2tzX3RyYW5zbGF0ZV9waWQgLSB0cmFuc2xhdGUgYSBmaWxlX2xvY2smIzM5O3MgZmxfcGlkIG51bWJlciBpbnRvIGEgbmFtZXNwYWNlXG5mcy9sb2Nrcy5jLTIzNjktICogQGZsOiBUaGUgZmlsZV9sb2NrIHdobyYjMzk7cyBmbF9waWQgc2hvdWxkIGJlIHRyYW5zbGF0ZWRcbi0tXG5mcy9sb2Nrcy5jLTIzNzMtICovXG5mcy9sb2Nrcy5jOjIzNzQ6c3RhdGljIHBpZF90IGxvY2tzX3RyYW5zbGF0ZV9waWQoc3RydWN0IGZpbGVfbG9ja19jb3JlICpmbCwgc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zKVxuZnMvbG9ja3MuYy0yMzc1LXtcbi0tXG5mcy9sb2Nrcy5jPTI0MDE9c3RhdGljIGludCBwb3NpeF9sb2NrX3RvX2Zsb2NrKHN0cnVjdCBmbG9jayAqZmxvY2ssIHN0cnVjdCBmaWxlX2xvY2sgKmZsKVxuZnMvbG9ja3MuYy0yNDAyLXtcbmZzL2xvY2tzLmM6MjQwMzpcdGZsb2NrLVx1MDAzZWxfcGlkID0gbG9ja3NfdHJhbnNsYXRlX3BpZChcdTAwMjZmbC1cdTAwM2VjLCB0YXNrX2FjdGl2ZV9waWRfbnMoY3VycmVudCkpO1xuZnMvbG9ja3MuYy0yNDA0LSNpZiBCSVRTX1BFUl9MT05HID09IDMyXG4tLVxuZnMvbG9ja3MuYz0yNDIzPXN0YXRpYyB2b2lkIHBvc2l4X2xvY2tfdG9fZmxvY2s2NChzdHJ1Y3QgZmxvY2s2NCAqZmxvY2ssIHN0cnVjdCBmaWxlX2xvY2sgKmZsKVxuZnMvbG9ja3MuYy0yNDI0LXtcbmZzL2xvY2tzLmM6MjQyNTpcdGZsb2NrLVx1MDAzZWxfcGlkID0gbG9ja3NfdHJhbnNsYXRlX3BpZChcdTAwMjZmbC1cdTAwM2VjLCB0YXNrX2FjdGl2ZV9waWRfbnMoY3VycmVudCkpO1xuZnMvbG9ja3MuYy0yNDI2LVx0ZmxvY2stXHUwMDNlbF9zdGFydCA9IGZsLVx1MDAzZWZsX3N0YXJ0O1xuLS1cbmZzL2xvY2tzLmM9MjkyMT1zdGF0aWMgdm9pZCBsb2NrX2dldF9zdGF0dXMoc3RydWN0IHNlcV9maWxlICpmLCBzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmZsYyxcbi0tXG5mcy9sb2Nrcy5jLTI5MjktXG5mcy9sb2Nrcy5jOjI5MzA6XHRwaWQgPSBsb2Nrc190cmFuc2xhdGVfcGlkKGZsYywgcHJvY19waWRucyk7XG5mcy9sb2Nrcy5jLTI5MzEtXG4tLVxuZnMvbG9ja3MuYz0zMDE2PXN0YXRpYyBpbnQgbG9ja3Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIHZvaWQgKnYpXG4tLVxuZnMvbG9ja3MuYy0zMDQxLVxuZnMvbG9ja3MuYzozMDQyOlx0aWYgKGxvY2tzX3RyYW5zbGF0ZV9waWQoY3VyLCBwcm9jX3BpZG5zKSA9PSAwKVxuZnMvbG9ja3MuYy0zMDQzLVx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyMzMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBjb25zaWRlcmluZyBJJiMzOTttIGluIHRoZSB0aGljayBvZiB0aGlzOgoKKipEZWVwIERpdmUgaW50byBgbG9ja3NfdHJhbnNsYXRlX3BpZGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgdGhlIGBsb2Nrc190cmFuc2xhdGVfcGlkYCBmdW5jdGlvbiwgcmVzaWRpbmcgaW4gdGhlIGBmcy9sb2Nrcy5jYCBmaWxlLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHBpZWNlIG9mIGNvZGUgaW50ZXJhY3RzIHdpdGggcHJvY2VzcyBJRHMsIGFuZCBJJiMzOTttIGd1ZXNzaW5nIGl0IGxpa2VseSBpbnZvbHZlcyBzb21lIHRyYW5zbGF0aW9uIG9yIG1hcHBpbmcgd2l0aGluIHRoZSBmaWxlIGxvY2tpbmcgc3Vic3lzdGVtLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGluZm9ybWF0aW9uIGlzIGJlaW5nIGV4dHJhY3RlZCBvciBhZGp1c3RlZC4gSXMgaXQgdXNlZCB0byBtYXAgUElEcyBhY3Jvc3MgbmFtZXNwYWNlcywgb3IgZGVhbCB3aXRoIGRpZmZlcmVudCBVSUQvR0lEIG1hcHBpbmcgc2NlbmFyaW9zLCBvciBpcyBzb21ldGhpbmcgZWxzZSBlbnRpcmVseSBnb2luZyBvbj8gSSBrbm93IHRoZSBmaWxlc3lzdGVtIGxvY2tpbmcgaXMgaW5jcmVkaWJseSBudWFuY2VkLCBzbyBpdCBjb3VsZCBiZSBhbnkgbnVtYmVyIG9mIHN1YnRsZXRpZXMuIEkmIzM5O2xsIG5lZWQgdG8gZGlzc2VjdCBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGxhcmdlciBsb2NraW5nIGFyY2hpdGVjdHVyZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGtlZW4gdG8gc2VlIGhvdyBpdCBoYW5kbGVzIGVkZ2UgY2FzZXMgbGlrZSBzaWduYWwgZGVsaXZlcnkgYW5kIHByb2Nlc3MgdGVybWluYXRpb24sIHRob3NlIGFyZSB1c3VhbGx5IHdoZXJlIGxvY2tpbmcgZ2V0cyByZWFsbHkgaW50ZXJlc3RpbmcuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2xvY2tzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzY4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIzNjg6XHQgKiBsb2Nrc190cmFuc2xhdGVfcGlkIC0gdHJhbnNsYXRlIGEgZmlsZV9sb2NrJiMzOTtzIGZsX3BpZCBudW1iZXIgaW50byBhIG5hbWVzcGFjZVxuMjM2OTpcdCAqIEBmbDogVGhlIGZpbGVfbG9jayB3aG8mIzM5O3MgZmxfcGlkIHNob3VsZCBiZSB0cmFuc2xhdGVkXG4yMzcwOlx0ICogQG5zOiBUaGUgbmFtZXNwYWNlIGludG8gd2hpY2ggdGhlIHBpZCBzaG91bGQgYmUgdHJhbnNsYXRlZFxuMjM3MTpcdCAqXG4yMzcyOlx0ICogVXNlZCB0byB0cmFuc2xhdGUgYSBmbF9waWQgaW50byBhIG5hbWVzcGFjZSB2aXJ0dWFsIHBpZCBudW1iZXJcbjIzNzM6XHQgKi9cbjIzNzQ6XHRzdGF0aWMgcGlkX3QgbG9ja3NfdHJhbnNsYXRlX3BpZChzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmZsLCBzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMpXG4yMzc1Olx0e1xuMjM3NjpcdFx0cGlkX3Qgdm5yO1xuMjM3NzpcdFx0c3RydWN0IHBpZCAqcGlkO1xuMjM3ODpcdFxuMjM3OTpcdFx0aWYgKGZsLVx1MDAzZWZsY19mbGFncyBcdTAwMjYgRkxfT0ZETENLKVxuMjM4MDpcdFx0XHRyZXR1cm4gLTE7XG4yMzgxOlx0XG4yMzgyOlx0XHQvKiBSZW1vdGUgbG9ja3MgcmVwb3J0IGEgbmVnYXRpdmUgcGlkIHZhbHVlICovXG4yMzgzOlx0XHRpZiAoZmwtXHUwMDNlZmxjX3BpZCBcdTAwM2M9IDApXG4yMzg0Olx0XHRcdHJldHVybiBmbC1cdTAwM2VmbGNfcGlkO1xuMjM4NTpcdFxuMjM4NjpcdFx0LypcbjIzODc6XHRcdCAqIElmIHRoZSBmbG9jayBvd25lciBwcm9jZXNzIGlzIGRlYWQgYW5kIGl0cyBwaWQgaGFzIGJlZW4gYWxyZWFkeVxuMjM4ODpcdFx0ICogZnJlZWQsIHRoZSB0cmFuc2xhdGlvbiBiZWxvdyB3b24mIzM5O3Qgd29yaywgYnV0IHdlIHN0aWxsIHdhbnQgdG8gc2hvd1xuMjM4OTpcdFx0ICogZmxvY2sgb3duZXIgcGlkIG51bWJlciBpbiBpbml0IHBpZG5zLlxuMjM5MDpcdFx0ICovXG4yMzkxOlx0XHRpZiAobnMgPT0gXHUwMDI2aW5pdF9waWRfbnMpXG4yMzkyOlx0XHRcdHJldHVybiAocGlkX3QpIGZsLVx1MDAzZWZsY19waWQ7XG4yMzkzOlx0XG4yMzk0Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4yMzk1Olx0XHRwaWQgPSBmaW5kX3BpZF9ucyhmbC1cdTAwM2VmbGNfcGlkLCBcdTAwMjZpbml0X3BpZF9ucyk7XG4yMzk2Olx0XHR2bnIgPSBwaWRfbnJfbnMocGlkLCBucyk7XG4yMzk3Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjIzOTg6XHRcdHJldHVybiB2bnI7XG4yMzk5Olx0fVxuMjQwMDpcdFxuMjQwMTpcdHN0YXRpYyBpbnQgcG9zaXhfbG9ja190b19mbG9jayhzdHJ1Y3QgZmxvY2sgKmZsb2NrLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbClcbjI0MDI6XHR7XG4yNDAzOlx0XHRmbG9jay1cdTAwM2VsX3BpZCA9IGxvY2tzX3RyYW5zbGF0ZV9waWQoXHUwMDI2ZmwtXHUwMDNlYywgdGFza19hY3RpdmVfcGlkX25zKGN1cnJlbnQpKTtcbjI0MDQ6XHQjaWYgQklUU19QRVJfTE9ORyA9PSAzMlxuMjQwNTpcdFx0LypcbjI0MDY6XHRcdCAqIE1ha2Ugc3VyZSB3ZSBjYW4gcmVwcmVzZW50IHRoZSBwb3NpeCBsb2NrIHZpYVxuMjQwNzpcdFx0ICogbGVnYWN5IDMyYml0IGZsb2NrLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTE1MwoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDgxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBgL3Byb2MvbG9ja3NgIEZpeDogV29ydGggRnV6emluZz8qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoaW5raW5nIHRocm91Z2ggd2hhdCBpdCBkb2VzLiBJdCBsb29rcyBsaWtlIHdoZW4gYC9wcm9jL2xvY2tzYCBpcyBiZWluZyBhY2Nlc3NlZCwgc3BlY2lmaWNhbGx5IHdoZW4gYGxvY2tzX3Nob3dgIGlzIGNhbGxlZCwgdGhlcmUmIzM5O3MgYmVlbiBhIHByb2JsZW0gd2l0aCBob3cgT0ZEIGxvY2tzIChvcGVuIGZpbGUgZGVzY3JpcHRpb24gbG9ja3MpIHdlcmUgYmVpbmcgaGFuZGxlZCBhY3Jvc3MgUElEIG5hbWVzcGFjZXMuIFByZXZpb3VzbHksIHRoZSBgbG9ja3NfdHJhbnNsYXRlX3BpZGAgZnVuY3Rpb24gd2FzIHJldHVybmluZyAtMSBmb3IgdGhlc2UgT0ZEIGxvY2tzLiBUaGlzIG1lYW50IHRoZSBjaGVjayBgbG9ja3NfdHJhbnNsYXRlX3BpZChjdXIsIHByb2NfcGlkbnMpID09IDBgIHdhcyBmYWlsaW5nLCBhbmQgd2Ugd2VyZW4mIzM5O3QgZmlsdGVyaW5nIG91dCBPRkQgbG9ja3MgZnJvbSBkaWZmZXJlbnQgUElEIG5hbWVzcGFjZXMgY29ycmVjdGx5LiBFc3NlbnRpYWxseSwgYC9wcm9jL2xvY2tzYCBpbiBhIG5vbi1pbml0IFBJRCBuYW1lc3BhY2Ugd2FzIGRpc3BsYXlpbmcgT0ZEIGxvY2tzIGZyb20gKmFueSogUElEIG5hbWVzcGFjZSwgZXZlbiBpZiB0aGUgcHJvY2VzcyB0aGF0IGNyZWF0ZWQgdGhlbSB3YXNuJiMzOTt0IGFjdHVhbGx5IHZpc2libGUgaW4gdGhhdCBuYW1lc3BhY2UuIFRoaXMgcGF0Y2ggYWRkcmVzc2VzIHRoaXMgYnkgY2hlY2tpbmcgaWYgdGhlIG93bmVyJiMzOTtzIHRnaWQgKGBjdXItJmd0O2ZsY19waWRgKSBpcyBtYXBwZWQgaW4gdGhlIGN1cnJlbnQgUElEIG5hbWVzcGFjZSAoYHByb2NfcGlkbnNgKS4gSWYgaXQmIzM5O3Mgbm90IHZpc2libGUsIHdlIHNraXAgZGlzcGxheWluZyB0aGUgbG9jayBpbiBgL3Byb2MvbG9ja3NgLgoKU28sIGlzIHRoaXMgYSByZWFsLXdvcmxkLCBmdW5jdGlvbmFsIGNoYW5nZT8gWWVzISBJdCYjMzk7cyByZWFjaGFibGUgd2hlbiByZWFkaW5nIGAvcHJvYy9sb2Nrc2Agd2l0aCBmaWxlIGxvY2tzLCBzcGVjaWZpY2FsbHkgT0ZEIGxvY2tzLCBpbnNpZGUgYSBQSUQgbmFtZXNwYWNlLiBJdCBhZmZlY3RzIGNvcmUga2VybmVsIGxvZ2ljLCBzcGVjaWZpY2FsbHkgdGhlIGBmcy9sb2Nrcy5jYCBmaWxlIGFuZCBob3cgYC9wcm9jL2xvY2tzYCBoYW5kbGVzIGZpbHRlcmluZyBmb3IgT0ZEIGxvY2tzIGluIG5vbi1pbml0IG5hbWVzcGFjZXMuCgpUaGUgYmlnIHF1ZXN0aW9uOiBJcyB0aGlzIHNvbWV0aGluZyB3ZSBzaG91bGQgY29uc2lkZXIgZnV6emluZz8gTGV0JiMzOTtzIGNoZWNrIHRoZSBndWlkZWxpbmVzLiBJdCAqZGVmaW5pdGVseSogaXNuJiMzOTt0IGEgZG9jdW1lbnRhdGlvbiBjaGFuZ2UsIGNvbW1lbnQsIG9yIGRlY29yYXRpdmUgbG9nZ2luZy4gVGhpcyAqbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljKiBpbiBgZnMvbG9ja3MuY2AgaW4gaG93IGAvcHJvYy9sb2Nrc2AgZGlzcGxheXMuIFNvLCB0aGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBrZXJuZWwgbG9naWMuIEl0IGFmZmVjdHMgaG93IGAvcHJvYy9sb2Nrc2AgZmlsdGVycyBsb2NrcyBmb3Igbm9uLWluaXQgcGlkIG5hbWVzcGFjZXMgd2hlbiBPRkQgbG9ja3MgZXhpc3QuIFllcy4gQmFzZWQgb24gdGhpcywgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyB3b3J0aCBmdXp6aW5nLgoKTm93LCBhYm91dCB0aGUgZnV6emluZyBpdHNlbGY6IFNob3VsZCB3ZSBpZGVudGlmeSByZWxldmFudCBzeW1ib2xzPyBUaGUgZ3VpZGVsaW5lcyBzdWdnZXN0IGZvY3VzaW5nIG9uIHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgYW5kIGF2b2lkaW5nIGdlbmVyaWMgaG90cGF0aHMuIFdlIHNob3VsZCBwcmlvcml0aXplIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gTGV0JiMzOTtzIHRoaW5rIGFib3V0IHRoaXM6IGBsb2Nrc19zaG93YCBpcywgdW5mb3J0dW5hdGVseSwgc3RhdGljLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSYjMzk7cyBhIG5vbi1zdGF0aWMgZW50cnlwb2ludCBvciBzb21lIGBzZXFfb3BzYCBpbnZvbHZlZC4gSSBuZWVkIHRvIGV4YW1pbmUgYGZzL2xvY2tzLmNgIG1vcmUgY2xvc2VseSBhbmQgdGhpbmsgYWJvdXQgdGhlIHByb2Nlc3Mgb2YgYWNjZXNzaW5nIGAvcHJvYy9sb2Nrc2AgYW5kIHNldHRpbmcgbG9ja3MgaW4gdGhlIGZpcnN0IHBsYWNlLiBJIHNob3VsZCBsb29rIGZvciBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiBgZnMvbG9ja3MuY2Agb3IgZnVuY3Rpb25zIGNhbGxlZCB3aGVuIGAvcHJvYy9sb2Nrc2AgaXMgYWNjZXNzZWQgb3IgbG9ja3MgYXJlIHNldC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGV4YW1pbmluZyBhbGwgcmVsZXZhbnQgZW50cnlwb2ludHMgZm9yIHRoZSBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWl9dW2EtekEtWjAtOV9dKi4qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbG9ja3MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTk1IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5mcy9sb2Nrcy5jLTcxLVxuZnMvbG9ja3MuYzo3MjpzdGF0aWMgc3RydWN0IGZpbGVfbG9jayAqZmlsZV9sb2NrKHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqZmxjKVxuZnMvbG9ja3MuYy03My17XG4tLVxuZnMvbG9ja3MuYy03Ni1cbmZzL2xvY2tzLmM6Nzc6c3RhdGljIHN0cnVjdCBmaWxlX2xlYXNlICpmaWxlX2xlYXNlKHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqZmxjKVxuZnMvbG9ja3MuYy03OC17XG4tLVxuZnMvbG9ja3MuYy04MS1cbmZzL2xvY2tzLmM6ODI6c3RhdGljIGJvb2wgbGVhc2VfYnJlYWtpbmcoc3RydWN0IGZpbGVfbGVhc2UgKmZsKVxuZnMvbG9ja3MuYy04My17XG4tLVxuZnMvbG9ja3MuYy04Ni1cbmZzL2xvY2tzLmM6ODc6c3RhdGljIGludCB0YXJnZXRfbGVhc2V0eXBlKHN0cnVjdCBmaWxlX2xlYXNlICpmbClcbmZzL2xvY2tzLmMtODgte1xuLS1cbmZzL2xvY2tzLmM9MTAwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGxvY2tzX3N5c2N0bHNbXSA9IHtcbi0tXG5mcy9sb2Nrcy5jLTExOC1cbmZzL2xvY2tzLmM6MTE5OnN0YXRpYyBpbnQgX19pbml0IGluaXRfZnNfbG9ja3Nfc3lzY3Rscyh2b2lkKVxuZnMvbG9ja3MuYy0xMjAte1xuLS1cbmZzL2xvY2tzLmMtMTIzLX1cbmZzL2xvY2tzLmM6MTI0OmVhcmx5X2luaXRjYWxsKGluaXRfZnNfbG9ja3Nfc3lzY3Rscyk7XG5mcy9sb2Nrcy5jLTEyNS0jZW5kaWYgLyogQ09ORklHX1NZU0NUTCAqL1xuLS1cbmZzL2xvY2tzLmM9MTM1PXN0cnVjdCBmaWxlX2xvY2tfbGlzdF9zdHJ1Y3Qge1xuLS1cbmZzL2xvY2tzLmMtMTM4LX07XG5mcy9sb2Nrcy5jOjEzOTpzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGZpbGVfbG9ja19saXN0X3N0cnVjdCwgZmlsZV9sb2NrX2xpc3QpO1xuZnMvbG9ja3MuYzoxNDA6REVGSU5FX1NUQVRJQ19QRVJDUFVfUldTRU0oZmlsZV9yd3NlbSk7XG5mcy9sb2Nrcy5jLTE0MS1cbi0tXG5mcy9sb2Nrcy5jLTE1NC0jZGVmaW5lIEJMT0NLRURfSEFTSF9CSVRTXHQ3XG5mcy9sb2Nrcy5jOjE1NTpzdGF0aWMgREVGSU5FX0hBU0hUQUJMRShibG9ja2VkX2hhc2gsIEJMT0NLRURfSEFTSF9CSVRTKTtcbmZzL2xvY2tzLmMtMTU2LVxuLS1cbmZzL2xvY2tzLmMtMTY5LSAqL1xuZnMvbG9ja3MuYzoxNzA6c3RhdGljIERFRklORV9TUElOTE9DSyhibG9ja2VkX2xvY2tfbG9jayk7XG5mcy9sb2Nrcy5jLTE3MS1cbi0tXG5mcy9sb2Nrcy5jPTE3Nj1zdGF0aWMgc3RydWN0IGZpbGVfbG9ja19jb250ZXh0ICpcbmZzL2xvY2tzLmM6MTc3OmxvY2tzX2dldF9sb2NrX2NvbnRleHQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUpXG5mcy9sb2Nrcy5jLTE3OC17XG4tLVxuZnMvbG9ja3MuYz0yMTg9c3RhdGljIHZvaWRcbmZzL2xvY2tzLmM6MjE5OmxvY2tzX2R1bXBfY3R4X2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgY2hhciAqbGlzdF90eXBlKVxuZnMvbG9ja3MuYy0yMjAte1xuLS1cbmZzL2xvY2tzLmM9MjI5PXN0YXRpYyB2b2lkXG5mcy9sb2Nrcy5jOjIzMDpsb2Nrc19jaGVja19jdHhfbGlzdHMoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2xvY2tzLmMtMjMxLXtcbi0tXG5mcy9sb2Nrcy5jPTI0Nj1zdGF0aWMgdm9pZFxuZnMvbG9ja3MuYzoyNDc6bG9ja3NfY2hlY2tfY3R4X2ZpbGVfbGlzdChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgY2hhciAqbGlzdF90eXBlKVxuZnMvbG9ja3MuYy0yNDgte1xuLS1cbmZzL2xvY2tzLmM9MjYyPXZvaWRcbmZzL2xvY2tzLmM6MjYzOmxvY2tzX2ZyZWVfbG9ja19jb250ZXh0KHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9sb2Nrcy5jLTI2NC17XG4tLVxuZnMvbG9ja3MuYy0yNzItXG5mcy9sb2Nrcy5jOjI3MzpzdGF0aWMgdm9pZCBsb2Nrc19pbml0X2xvY2tfaGVhZHMoc3RydWN0IGZpbGVfbG9ja19jb3JlICpmbGMpXG5mcy9sb2Nrcy5jLTI3NC17XG4tLVxuZnMvbG9ja3MuYy0yODItLyogQWxsb2NhdGUgYW4gZW1wdHkgbG9jayBzdHJ1Y3R1cmUuICovXG5mcy9sb2Nrcy5jOjI4MzpzdHJ1Y3QgZmlsZV9sb2NrICpsb2Nrc19hbGxvY19sb2NrKHZvaWQpXG5mcy9sb2Nrcy5jLTI4NC17XG4tLVxuZnMvbG9ja3MuYy0yOTEtfVxuZnMvbG9ja3MuYzoyOTI6RVhQT1JUX1NZTUJPTF9HUEwobG9ja3NfYWxsb2NfbG9jayk7XG5mcy9sb2Nrcy5jLTI5My1cbmZzL2xvY2tzLmMtMjk0LS8qIEFsbG9jYXRlIGFuIGVtcHR5IGxvY2sgc3RydWN0dXJlLiAqL1xuZnMvbG9ja3MuYzoyOTU6c3RydWN0IGZpbGVfbGVhc2UgKmxvY2tzX2FsbG9jX2xlYXNlKHZvaWQpXG5mcy9sb2Nrcy5jLTI5Ni17XG4tLVxuZnMvbG9ja3MuYy0zMDMtfVxuZnMvbG9ja3MuYzozMDQ6RVhQT1JUX1NZTUJPTF9HUEwobG9ja3NfYWxsb2NfbGVhc2UpO1xuZnMvbG9ja3MuYy0zMDUtXG5mcy9sb2Nrcy5jOjMwNjp2b2lkIGxvY2tzX3JlbGVhc2VfcHJpdmF0ZShzdHJ1Y3QgZmlsZV9sb2NrICpmbClcbmZzL2xvY2tzLmMtMzA3LXtcbi0tXG5mcy9sb2Nrcy5jLTMyOS19XG5mcy9sb2Nrcy5jOjMzMDpFWFBPUlRfU1lNQk9MX0dQTChsb2Nrc19yZWxlYXNlX3ByaXZhdGUpO1xuZnMvbG9ja3MuYy0zMzEtXG4tLVxuZnMvbG9ja3MuYy0zNDAtICovXG5mcy9sb2Nrcy5jOjM0MTpib29sIGxvY2tzX293bmVyX2hhc19ibG9ja2VycyhzdHJ1Y3QgZmlsZV9sb2NrX2NvbnRleHQgKmZsY3R4LCBmbF9vd25lcl90IG93bmVyKVxuZnMvbG9ja3MuYy0zNDIte1xuLS1cbmZzL2xvY2tzLmMtMzU2LX1cbmZzL2xvY2tzLmM6MzU3OkVYUE9SVF9TWU1CT0xfR1BMKGxvY2tzX293bmVyX2hhc19ibG9ja2Vycyk7XG5mcy9sb2Nrcy5jLTM1OC1cbmZzL2xvY2tzLmMtMzU5LS8qIEZyZWUgYSBsb2NrIHdoaWNoIGlzIG5vdCBpbiB1c2UuICovXG5mcy9sb2Nrcy5jOjM2MDp2b2lkIGxvY2tzX2ZyZWVfbG9jayhzdHJ1Y3QgZmlsZV9sb2NrICpmbClcbmZzL2xvY2tzLmMtMzYxLXtcbi0tXG5mcy9sb2Nrcy5jLTM2NC19XG5mcy9sb2Nrcy5jOjM2NTpFWFBPUlRfU1lNQk9MKGxvY2tzX2ZyZWVfbG9jayk7XG5mcy9sb2Nrcy5jLTM2Ni1cbmZzL2xvY2tzLmMtMzY3LS8qIEZyZWUgYSBsZWFzZSB3aGljaCBpcyBub3QgaW4gdXNlLiAqL1xuZnMvbG9ja3MuYzozNjg6dm9pZCBsb2Nrc19mcmVlX2xlYXNlKHN0cnVjdCBmaWxlX2xlYXNlICpmbClcbmZzL2xvY2tzLmMtMzY5LXtcbi0tXG5mcy9sb2Nrcy5jLTM3MS19XG5mcy9sb2Nrcy5jOjM3MjpFWFBPUlRfU1lNQk9MKGxvY2tzX2ZyZWVfbGVhc2UpO1xuZnMvbG9ja3MuYy0zNzMtXG5mcy9sb2Nrcy5jPTM3ND1zdGF0aWMgdm9pZFxuZnMvbG9ja3MuYzozNzU6bG9ja3NfZGlzcG9zZV9saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmRpc3Bvc2UpXG5mcy9sb2Nrcy5jLTM3Ni17XG4tLVxuZnMvbG9ja3MuYz0zODY9c3RhdGljIHZvaWRcbmZzL2xvY2tzLmM6Mzg3OmxlYXNlX2Rpc3Bvc2VfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpkaXNwb3NlKVxuZnMvbG9ja3MuYy0zODgte1xuLS1cbmZzL2xvY2tzLmMtMzk3LVxuZnMvbG9ja3MuYzozOTg6dm9pZCBsb2Nrc19pbml0X2xvY2soc3RydWN0IGZpbGVfbG9jayAqZmwpXG5mcy9sb2Nrcy5jLTM5OS17XG4tLVxuZnMvbG9ja3MuYy00MDItfVxuZnMvbG9ja3MuYzo0MDM6RVhQT1JUX1NZTUJPTChsb2Nrc19pbml0X2xvY2spO1xuZnMvbG9ja3MuYy00MDQtXG5mcy9sb2Nrcy5jOjQwNTp2b2lkIGxvY2tzX2luaXRfbGVhc2Uoc3RydWN0IGZpbGVfbGVhc2UgKmZsKVxuZnMvbG9ja3MuYy00MDYte1xuLS1cbmZzL2xvY2tzLmMtNDA5LX1cbmZzL2xvY2tzLmM6NDEwOkVYUE9SVF9TWU1CT0wobG9ja3NfaW5pdF9sZWFzZSk7XG5mcy9sb2Nrcy5jLTQxMS1cbi0tXG5mcy9sb2Nrcy5jLTQxNC0gKi9cbmZzL2xvY2tzLmM6NDE1OnZvaWQgbG9ja3NfY29weV9jb25mbG9jayhzdHJ1Y3QgZmlsZV9sb2NrICpuZXcsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKVxuZnMvbG9ja3MuYy00MTYte1xuLS1cbmZzL2xvY2tzLmMtNDMxLX1cbmZzL2xvY2tzLmM6NDMyOkVYUE9SVF9TWU1CT0wobG9ja3NfY29weV9jb25mbG9jayk7XG5mcy9sb2Nrcy5jLTQzMy1cbmZzL2xvY2tzLmM6NDM0OnZvaWQgbG9ja3NfY29weV9sb2NrKHN0cnVjdCBmaWxlX2xvY2sgKm5ldywgc3RydWN0IGZpbGVfbG9jayAqZmwpXG5mcy9sb2Nrcy5jLTQzNS17XG4tLVxuZnMvbG9ja3MuYy00NDgtfVxuZnMvbG9ja3MuYzo0NDk6RVhQT1JUX1NZTUJPTChsb2Nrc19jb3B5X2xvY2spO1xuZnMvbG9ja3MuYy00NTAtXG5mcy9sb2Nrcy5jOjQ1MTpzdGF0aWMgdm9pZCBsb2Nrc19tb3ZlX2Jsb2NrcyhzdHJ1Y3QgZmlsZV9sb2NrICpuZXcsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKVxuZnMvbG9ja3MuYy00NTIte1xuLS1cbmZzL2xvY2tzLmMtNDcwLVxuZnMvbG9ja3MuYzo0NzE6c3RhdGljIGlubGluZSBpbnQgZmxvY2tfdHJhbnNsYXRlX2NtZChpbnQgY21kKSB7XG5mcy9sb2Nrcy5jLTQ3Mi1cdHN3aXRjaCAoY21kKSB7XG4tLVxuZnMvbG9ja3MuYy00ODMtLyogRmlsbCBpbiBhIGZpbGVfbG9jayBzdHJ1Y3R1cmUgd2l0aCBhbiBhcHByb3ByaWF0ZSBGTE9DSyBsb2NrLiAqL1xuZnMvbG9ja3MuYzo0ODQ6c3RhdGljIHZvaWQgZmxvY2tfbWFrZV9sb2NrKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCwgaW50IHR5cGUpXG5mcy9sb2Nrcy5jLTQ4NS17XG4tLVxuZnMvbG9ja3MuYy00OTUtXG5mcy9sb2Nrcy5jOjQ5NjpzdGF0aWMgaW50IGFzc2lnbl90eXBlKHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqZmxjLCBpbnQgdHlwZSlcbmZzL2xvY2tzLmMtNDk3LXtcbi0tXG5mcy9sb2Nrcy5jLTUwOS1cbmZzL2xvY2tzLmM6NTEwOnN0YXRpYyBpbnQgZmxvY2s2NF90b19wb3NpeF9sb2NrKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCxcbmZzL2xvY2tzLmMtNTExLVx0XHRcdFx0IHN0cnVjdCBmbG9jazY0ICpsKVxuLS1cbmZzL2xvY2tzLmMtNTU5LSAqL1xuZnMvbG9ja3MuYzo1NjA6c3RhdGljIGludCBmbG9ja190b19wb3NpeF9sb2NrKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCxcbmZzL2xvY2tzLmMtNTYxLVx0XHRcdCAgICAgICBzdHJ1Y3QgZmxvY2sgKmwpXG4tLVxuZnMvbG9ja3MuYz01NzQ9c3RhdGljIGJvb2xcbmZzL2xvY2tzLmM6NTc1OmxlYXNlX2JyZWFrX2NhbGxiYWNrKHN0cnVjdCBmaWxlX2xlYXNlICpmbClcbmZzL2xvY2tzLmMtNTc2LXtcbi0tXG5mcy9sb2Nrcy5jPTU4MT1zdGF0aWMgdm9pZFxuZnMvbG9ja3MuYzo1ODI6bGVhc2Vfc2V0dXAoc3RydWN0IGZpbGVfbGVhc2UgKmZsLCB2b2lkICoqcHJpdilcbmZzL2xvY2tzLmMtNTgzLXtcbi0tXG5mcy9sb2Nrcy5jPTYwOD1zdGF0aWMgaW50XG5mcy9sb2Nrcy5jOjYwOTpsZWFzZV9vcGVuX2NvbmZsaWN0KHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBpbnQgYXJnKVxuZnMvbG9ja3MuYy02MTAte1xuLS1cbmZzL2xvY2tzLmM9NjM3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbGVhc2VfbWFuYWdlcl9vcGVyYXRpb25zIGxlYXNlX21hbmFnZXJfb3BzID0ge1xuLS1cbmZzL2xvY2tzLmMtNjQ2LSAqL1xuZnMvbG9ja3MuYzo2NDc6c3RhdGljIGludCBsZWFzZV9pbml0KHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIGludCB0eXBlLCBzdHJ1Y3QgZmlsZV9sZWFzZSAqZmwpXG5mcy9sb2Nrcy5jLTY0OC17XG4tLVxuZnMvbG9ja3MuYy02NjEtLyogQWxsb2NhdGUgYSBmaWxlX2xvY2sgaW5pdGlhbGlzZWQgdG8gdGhpcyB0eXBlIG9mIGxlYXNlICovXG5mcy9sb2Nrcy5jOjY2MjpzdGF0aWMgc3RydWN0IGZpbGVfbGVhc2UgKmxlYXNlX2FsbG9jKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIGludCB0eXBlKVxuZnMvbG9ja3MuYy02NjMte1xuLS1cbmZzL2xvY2tzLmMtNjc5LSAqL1xuZnMvbG9ja3MuYzo2ODA6c3RhdGljIGlubGluZSBpbnQgbG9ja3Nfb3ZlcmxhcChzdHJ1Y3QgZmlsZV9sb2NrICpmbDEsIHN0cnVjdCBmaWxlX2xvY2sgKmZsMilcbmZzL2xvY2tzLmMtNjgxLXtcbi0tXG5mcy9sb2Nrcy5jLTY4OC0gKi9cbmZzL2xvY2tzLmM6Njg5OnN0YXRpYyBpbnQgcG9zaXhfc2FtZV9vd25lcihzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmZsMSwgc3RydWN0IGZpbGVfbG9ja19jb3JlICpmbDIpXG5mcy9sb2Nrcy5jLTY5MC17XG4tLVxuZnMvbG9ja3MuYy02OTQtLyogTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgZmxjX2xvY2sgaGVsZCEgKi9cbmZzL2xvY2tzLmM6Njk1OnN0YXRpYyB2b2lkIGxvY2tzX2luc2VydF9nbG9iYWxfbG9ja3Moc3RydWN0IGZpbGVfbG9ja19jb3JlICpmbGMpXG5mcy9sb2Nrcy5jLTY5Ni17XG4tLVxuZnMvbG9ja3MuYy03MDctLyogTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgZmxjX2xvY2sgaGVsZCEgKi9cbmZzL2xvY2tzLmM6NzA4OnN0YXRpYyB2b2lkIGxvY2tzX2RlbGV0ZV9nbG9iYWxfbG9ja3Moc3RydWN0IGZpbGVfbG9ja19jb3JlICpmbGMpXG5mcy9sb2Nrcy5jLTcwOS17XG4tLVxuZnMvbG9ja3MuYz03Mjg9c3RhdGljIHVuc2lnbmVkIGxvbmdcbmZzL2xvY2tzLmM6NzI5OnBvc2l4X293bmVyX2tleShzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmZsYylcbmZzL2xvY2tzLmMtNzMwLXtcbi0tXG5mcy9sb2Nrcy5jLTczMy1cbmZzL2xvY2tzLmM6NzM0OnN0YXRpYyB2b2lkIGxvY2tzX2luc2VydF9nbG9iYWxfYmxvY2tlZChzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKndhaXRlcilcbmZzL2xvY2tzLmMtNzM1LXtcbi0tXG5mcy9sb2Nrcy5jLTc0MC1cbmZzL2xvY2tzLmM6NzQxOnN0YXRpYyB2b2lkIGxvY2tzX2RlbGV0ZV9nbG9iYWxfYmxvY2tlZChzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKndhaXRlcilcbmZzL2xvY2tzLmMtNzQyLXtcbi0tXG5mcy9sb2Nrcy5jLTc1Mi0gKi9cbmZzL2xvY2tzLmM6NzUzOnN0YXRpYyB2b2lkIF9fbG9ja3NfdW5saW5rX2Jsb2NrKHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqd2FpdGVyKVxuZnMvbG9ja3MuYy03NTQte1xuLS1cbmZzL2xvY2tzLmMtNzU4LVxuZnMvbG9ja3MuYzo3NTk6c3RhdGljIHZvaWQgX19sb2Nrc193YWtlX3VwX2Jsb2NrcyhzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmJsb2NrZXIpXG5mcy9sb2Nrcy5jLTc2MC17XG4tLVxuZnMvbG9ja3MuYy03ODQtXG5mcy9sb2Nrcy5jOjc4NTpzdGF0aWMgaW50IF9fbG9ja3NfZGVsZXRlX2Jsb2NrKHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqd2FpdGVyKVxuZnMvbG9ja3MuYy03ODYte1xuLS1cbmZzL2xvY2tzLmMtODM0LSAqL1xuZnMvbG9ja3MuYzo4MzU6aW50IGxvY2tzX2RlbGV0ZV9ibG9jayhzdHJ1Y3QgZmlsZV9sb2NrICp3YWl0ZXIpXG5mcy9sb2Nrcy5jLTgzNi17XG4tLVxuZnMvbG9ja3MuYy04MzgtfVxuZnMvbG9ja3MuYzo4Mzk6RVhQT1JUX1NZTUJPTChsb2Nrc19kZWxldGVfYmxvY2spO1xuZnMvbG9ja3MuYy04NDAtXG4tLVxuZnMvbG9ja3MuYy04NTUtICovXG5mcy9sb2Nrcy5jOjg1NjpzdGF0aWMgdm9pZCBfX2xvY2tzX2luc2VydF9ibG9jayhzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmJsb2NrZXIsXG5mcy9sb2Nrcy5jLTg1Ny1cdFx0XHRcdCBzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKndhaXRlcixcbi0tXG5mcy9sb2Nrcy5jLTg4NC0vKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGZsY19sb2NrIGhlbGQuICovXG5mcy9sb2Nrcy5jOjg4NTpzdGF0aWMgdm9pZCBsb2Nrc19pbnNlcnRfYmxvY2soc3RydWN0IGZpbGVfbG9ja19jb3JlICpibG9ja2VyLFxuZnMvbG9ja3MuYy04ODYtXHRcdFx0ICAgICAgIHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqd2FpdGVyLFxuLS1cbmZzL2xvY2tzLmMtODk5LSAqL1xuZnMvbG9ja3MuYzo5MDA6c3RhdGljIHZvaWQgbG9ja3Nfd2FrZV91cF9ibG9ja3Moc3RydWN0IGZpbGVfbG9ja19jb3JlICpibG9ja2VyKVxuZnMvbG9ja3MuYy05MDEte1xuLS1cbmZzL2xvY2tzLmM9OTE3PXN0YXRpYyB2b2lkXG5mcy9sb2Nrcy5jOjkxODpsb2Nrc19pbnNlcnRfbG9ja19jdHgoc3RydWN0IGZpbGVfbG9ja19jb3JlICpmbCwgc3RydWN0IGxpc3RfaGVhZCAqYmVmb3JlKVxuZnMvbG9ja3MuYy05MTkte1xuLS1cbmZzL2xvY2tzLmM9OTI0PXN0YXRpYyB2b2lkXG5mcy9sb2Nrcy5jOjkyNTpsb2Nrc191bmxpbmtfbG9ja19jdHgoc3RydWN0IGZpbGVfbG9ja19jb3JlICpmbClcbmZzL2xvY2tzLmMtOTI2LXtcbi0tXG5mcy9sb2Nrcy5jPTkzMj1zdGF0aWMgdm9pZFxuZnMvbG9ja3MuYzo5MzM6bG9ja3NfZGVsZXRlX2xvY2tfY3R4KHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqZmwsIHN0cnVjdCBsaXN0X2hlYWQgKmRpc3Bvc2UpXG5mcy9sb2Nrcy5jLTkzNC17XG4tLVxuZnMvbG9ja3MuYy05NDQtICovXG5mcy9sb2Nrcy5jOjk0NTpzdGF0aWMgYm9vbCBsb2Nrc19jb25mbGljdChzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmNhbGxlcl9mbGMsXG5mcy9sb2Nrcy5jLTk0Ni1cdFx0XHQgICBzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKnN5c19mbGMpXG4tLVxuZnMvbG9ja3MuYy05NTctICovXG5mcy9sb2Nrcy5jOjk1ODpzdGF0aWMgYm9vbCBwb3NpeF9sb2Nrc19jb25mbGljdChzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmNhbGxlcl9mbGMsXG5mcy9sb2Nrcy5jLTk1OS1cdFx0XHRcdCBzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKnN5c19mbGMpXG4tLVxuZnMvbG9ja3MuYy05NzktICovXG5mcy9sb2Nrcy5jOjk4MDpzdGF0aWMgYm9vbCBwb3NpeF90ZXN0X2xvY2tzX2NvbmZsaWN0KHN0cnVjdCBmaWxlX2xvY2sgKmNhbGxlcl9mbCxcbmZzL2xvY2tzLmMtOTgxLVx0XHRcdFx0ICAgICAgc3RydWN0IGZpbGVfbG9jayAqc3lzX2ZsKVxuLS1cbmZzL2xvY2tzLmMtOTk3LSAqL1xuZnMvbG9ja3MuYzo5OTg6c3RhdGljIGJvb2wgZmxvY2tfbG9ja3NfY29uZmxpY3Qoc3RydWN0IGZpbGVfbG9ja19jb3JlICpjYWxsZXJfZmxjLFxuZnMvbG9ja3MuYy05OTktXHRcdFx0XHQgc3RydWN0IGZpbGVfbG9ja19jb3JlICpzeXNfZmxjKVxuLS1cbmZzL2xvY2tzLmM9MTAxMD12b2lkXG5mcy9sb2Nrcy5jOjEwMTE6cG9zaXhfdGVzdF9sb2NrKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbClcbmZzL2xvY2tzLmMtMTAxMi17XG4tLVxuZnMvbG9ja3MuYy0xMDQ3LX1cbmZzL2xvY2tzLmM6MTA0ODpFWFBPUlRfU1lNQk9MKHBvc2l4X3Rlc3RfbG9jayk7XG5mcy9sb2Nrcy5jLTEwNDktXG4tLVxuZnMvbG9ja3MuYy0xMDg1LS8qIEZpbmQgYSBsb2NrIHRoYXQgdGhlIG93bmVyIG9mIHRoZSBnaXZlbiBAYmxvY2tlciBpcyBibG9ja2luZyBvbi4gKi9cbmZzL2xvY2tzLmM6MTA4NjpzdGF0aWMgc3RydWN0IGZpbGVfbG9ja19jb3JlICp3aGF0X293bmVyX2lzX3dhaXRpbmdfZm9yKHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqYmxvY2tlcilcbmZzL2xvY2tzLmMtMTA4Ny17XG4tLVxuZnMvbG9ja3MuYy0xMTAwLS8qIE11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGJsb2NrZWRfbG9ja19sb2NrIGhlbGQhICovXG5mcy9sb2Nrcy5jOjExMDE6c3RhdGljIGJvb2wgcG9zaXhfbG9ja3NfZGVhZGxvY2soc3RydWN0IGZpbGVfbG9jayAqY2FsbGVyX2ZsLFxuZnMvbG9ja3MuYy0xMTAyLVx0XHRcdFx0IHN0cnVjdCBmaWxlX2xvY2sgKmJsb2NrX2ZsKVxuLS1cbmZzL2xvY2tzLmMtMTEzMi0gKi9cbmZzL2xvY2tzLmM6MTEzMzpzdGF0aWMgaW50IGZsb2NrX2xvY2tfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGVfbG9jayAqcmVxdWVzdClcbmZzL2xvY2tzLmMtMTEzNC17XG4tLVxuZnMvbG9ja3MuYy0xMjA0LVxuZnMvbG9ja3MuYzoxMjA1OnN0YXRpYyBpbnQgcG9zaXhfbG9ja19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZV9sb2NrICpyZXF1ZXN0LFxuZnMvbG9ja3MuYy0xMjA2LVx0XHRcdCAgICBzdHJ1Y3QgZmlsZV9sb2NrICpjb25mbG9jaylcbi0tXG5mcy9sb2Nrcy5jLTE0NTctICovXG5mcy9sb2Nrcy5jOjE0NTg6aW50IHBvc2l4X2xvY2tfZmlsZShzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGZpbGVfbG9jayAqZmwsXG5mcy9sb2Nrcy5jLTE0NTktXHRcdFx0c3RydWN0IGZpbGVfbG9jayAqY29uZmxvY2spXG4tLVxuZnMvbG9ja3MuYy0xNDYyLX1cbmZzL2xvY2tzLmM6MTQ2MzpFWFBPUlRfU1lNQk9MKHBvc2l4X2xvY2tfZmlsZSk7XG5mcy9sb2Nrcy5jLTE0NjQtXG4tLVxuZnMvbG9ja3MuYy0xNDcxLSAqL1xuZnMvbG9ja3MuYzoxNDcyOnN0YXRpYyBpbnQgcG9zaXhfbG9ja19pbm9kZV93YWl0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKVxuZnMvbG9ja3MuYy0xNDczLXtcbi0tXG5mcy9sb2Nrcy5jLTE0ODgtXG5mcy9sb2Nrcy5jOjE0ODk6c3RhdGljIHZvaWQgbGVhc2VfY2xlYXJfcGVuZGluZyhzdHJ1Y3QgZmlsZV9sZWFzZSAqZmwsIGludCBhcmcpXG5mcy9sb2Nrcy5jLTE0OTAte1xuLS1cbmZzL2xvY2tzLmMtMTUwMC0vKiBXZSBhbHJlYWR5IGhhZCBhIGxlYXNlIG9uIHRoaXMgZmlsZTsganVzdCBjaGFuZ2UgaXRzIHR5cGUgKi9cbmZzL2xvY2tzLmM6MTUwMTppbnQgbGVhc2VfbW9kaWZ5KHN0cnVjdCBmaWxlX2xlYXNlICpmbCwgaW50IGFyZywgc3RydWN0IGxpc3RfaGVhZCAqZGlzcG9zZSlcbmZzL2xvY2tzLmMtMTUwMi17XG4tLVxuZnMvbG9ja3MuYy0xNTIyLX1cbmZzL2xvY2tzLmM6MTUyMzpFWFBPUlRfU1lNQk9MKGxlYXNlX21vZGlmeSk7XG5mcy9sb2Nrcy5jLTE1MjQtXG5mcy9sb2Nrcy5jOjE1MjU6c3RhdGljIGJvb2wgcGFzdF90aW1lKHVuc2lnbmVkIGxvbmcgdGhlbilcbmZzL2xvY2tzLmMtMTUyNi17XG4tLVxuZnMvbG9ja3MuYy0xNTMyLVxuZnMvbG9ja3MuYzoxNTMzOnN0YXRpYyB2b2lkIHRpbWVfb3V0X2xlYXNlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbGlzdF9oZWFkICpkaXNwb3NlKVxuZnMvbG9ja3MuYy0xNTM0LXtcbi0tXG5mcy9sb2Nrcy5jLTE1NjAtXG5mcy9sb2Nrcy5jOjE1NjE6c3RhdGljIGJvb2wgbGVhc2VzX2NvbmZsaWN0KHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqbGMsIHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqYmMpXG5mcy9sb2Nrcy5jLTE1NjIte1xuLS1cbmZzL2xvY2tzLmM9MTU5ND11MzJcbmZzL2xvY2tzLmM6MTU5NTppbm9kZV9sZWFzZV9pZ25vcmVfbWFzayhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvbG9ja3MuYy0xNTk2LXtcbi0tXG5mcy9sb2Nrcy5jLTE2MTQtfVxuZnMvbG9ja3MuYzoxNjE1OkVYUE9SVF9TWU1CT0xfR1BMKGlub2RlX2xlYXNlX2lnbm9yZV9tYXNrKTtcbmZzL2xvY2tzLmMtMTYxNi1cbmZzL2xvY2tzLmM9MTYxNz1zdGF0aWMgYm9vbFxuZnMvbG9ja3MuYzoxNjE4Omlnbm9yZV9kaXJfZGVsZWdfYnJlYWsoc3RydWN0IGZpbGVfbGVhc2UgKmZsLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG5mcy9sb2Nrcy5jLTE2MTkte1xuLS1cbmZzL2xvY2tzLmM9MTYzMD1zdGF0aWMgdW5zaWduZWQgaW50XG5mcy9sb2Nrcy5jOjE2MzE6YnJlYWtfbGVhc2VfZmxhZ3NfdG9fdHlwZSh1bnNpZ25lZCBpbnQgZmxhZ3MpXG5mcy9sb2Nrcy5jLTE2MzIte1xuLS1cbmZzL2xvY2tzLmM9MTY0ND1zdGF0aWMgc3RydWN0IGZpbGVfbGVhc2UgKlxuZnMvbG9ja3MuYzoxNjQ1OmZpcnN0X3Zpc2libGVfbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGVfbGVhc2UgKm5ld19mbCwgdW5zaWduZWQgaW50IGZsYWdzKVxuZnMvbG9ja3MuYy0xNjQ2LXtcbi0tXG5mcy9sb2Nrcy5jLTE2NzUtICovXG5mcy9sb2Nrcy5jOjE2NzY6aW50IF9fYnJlYWtfbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgaW50IGZsYWdzKVxuZnMvbG9ja3MuYy0xNjc3LXtcbi0tXG5mcy9sb2Nrcy5jLTE3OTEtfVxuZnMvbG9ja3MuYzoxNzkyOkVYUE9SVF9TWU1CT0woX19icmVha19sZWFzZSk7XG5mcy9sb2Nrcy5jLTE3OTMtXG4tLVxuZnMvbG9ja3MuYy0xODAyLSAqL1xuZnMvbG9ja3MuYzoxODAzOnZvaWQgbGVhc2VfZ2V0X210aW1lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB0aW1lc3BlYzY0ICp0aW1lKVxuZnMvbG9ja3MuYy0xODA0LXtcbi0tXG5mcy9sb2Nrcy5jLTE4MjEtfVxuZnMvbG9ja3MuYzoxODIyOkVYUE9SVF9TWU1CT0wobGVhc2VfZ2V0X210aW1lKTtcbmZzL2xvY2tzLmMtMTgyMy1cbi0tXG5mcy9sb2Nrcy5jLTE4NDctICovXG5mcy9sb2Nrcy5jOjE4NDg6c3RhdGljIGludCBfX2ZjbnRsX2dldGxlYXNlKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgZmxhdm9yKVxuZnMvbG9ja3MuYy0xODQ5LXtcbi0tXG5mcy9sb2Nrcy5jLTE4NzUtXG5mcy9sb2Nrcy5jOjE4NzY6aW50IGZjbnRsX2dldGxlYXNlKHN0cnVjdCBmaWxlICpmaWxwKVxuZnMvbG9ja3MuYy0xODc3LXtcbi0tXG5mcy9sb2Nrcy5jLTE4ODAtXG5mcy9sb2Nrcy5jOjE4ODE6aW50IGZjbnRsX2dldGRlbGVnKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgZGVsZWdhdGlvbiAqZGVsZWcpXG5mcy9sb2Nrcy5jLTE4ODIte1xuLS1cbmZzL2xvY2tzLmM9MTg4OT1zdGF0aWMgaW50XG5mcy9sb2Nrcy5jOjE4OTA6Z2VuZXJpY19hZGRfbGVhc2Uoc3RydWN0IGZpbGUgKmZpbHAsIGludCBhcmcsIHN0cnVjdCBmaWxlX2xlYXNlICoqZmxwLCB2b2lkICoqcHJpdilcbmZzL2xvY2tzLmMtMTg5MS17XG4tLVxuZnMvbG9ja3MuYy0yMDAxLVxuZnMvbG9ja3MuYzoyMDAyOnN0YXRpYyBpbnQgZ2VuZXJpY19kZWxldGVfbGVhc2Uoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKm93bmVyKVxuZnMvbG9ja3MuYy0yMDAzLXtcbi0tXG5mcy9sb2Nrcy5jLTIwNDQtICovXG5mcy9sb2Nrcy5jOjIwNDU6aW50IGdlbmVyaWNfc2V0bGVhc2Uoc3RydWN0IGZpbGUgKmZpbHAsIGludCBhcmcsIHN0cnVjdCBmaWxlX2xlYXNlICoqZmxwLFxuZnMvbG9ja3MuYy0yMDQ2LVx0XHRcdHZvaWQgKipwcml2KVxuLS1cbmZzL2xvY2tzLmMtMjA3MC19XG5mcy9sb2Nrcy5jOjIwNzE6RVhQT1JUX1NZTUJPTChnZW5lcmljX3NldGxlYXNlKTtcbmZzL2xvY2tzLmMtMjA3Mi1cbi0tXG5mcy9sb2Nrcy5jPTIwODE9c3RhdGljIGlubGluZSB2b2lkXG5mcy9sb2Nrcy5jOjIwODI6bGVhc2Vfbm90aWZpZXJfY2hhaW5faW5pdCh2b2lkKVxuZnMvbG9ja3MuYy0yMDgzLXtcbi0tXG5mcy9sb2Nrcy5jPTIwODc9c3RhdGljIGlubGluZSB2b2lkXG5mcy9sb2Nrcy5jOjIwODg6c2V0bGVhc2Vfbm90aWZpZXIoaW50IGFyZywgc3RydWN0IGZpbGVfbGVhc2UgKmxlYXNlKVxuZnMvbG9ja3MuYy0yMDg5LXtcbi0tXG5mcy9sb2Nrcy5jLTIwOTMtXG5mcy9sb2Nrcy5jOjIwOTQ6aW50IGxlYXNlX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpXG5mcy9sb2Nrcy5jLTIwOTUte1xuLS1cbmZzL2xvY2tzLmMtMjA5Ny19XG5mcy9sb2Nrcy5jOjIwOTg6RVhQT1JUX1NZTUJPTF9HUEwobGVhc2VfcmVnaXN0ZXJfbm90aWZpZXIpO1xuZnMvbG9ja3MuYy0yMDk5LVxuZnMvbG9ja3MuYzoyMTAwOnZvaWQgbGVhc2VfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKVxuZnMvbG9ja3MuYy0yMTAxLXtcbi0tXG5mcy9sb2Nrcy5jLTIxMDMtfVxuZnMvbG9ja3MuYzoyMTA0OkVYUE9SVF9TWU1CT0xfR1BMKGxlYXNlX3VucmVnaXN0ZXJfbm90aWZpZXIpO1xuZnMvbG9ja3MuYy0yMTA1LVxuLS1cbmZzL2xvY2tzLmM9MjEwNz1pbnRcbmZzL2xvY2tzLmM6MjEwODprZXJuZWxfc2V0bGVhc2Uoc3RydWN0IGZpbGUgKmZpbHAsIGludCBhcmcsIHN0cnVjdCBmaWxlX2xlYXNlICoqbGVhc2UsIHZvaWQgKipwcml2KVxuZnMvbG9ja3MuYy0yMTA5LXtcbi0tXG5mcy9sb2Nrcy5jLTIxMTUtfVxuZnMvbG9ja3MuYzoyMTE2OkVYUE9SVF9TWU1CT0xfR1BMKGtlcm5lbF9zZXRsZWFzZSk7XG5mcy9sb2Nrcy5jLTIxMTctXG4tLVxuZnMvbG9ja3MuYz0yMTM1PWludFxuZnMvbG9ja3MuYzoyMTM2OnZmc19zZXRsZWFzZShzdHJ1Y3QgZmlsZSAqZmlscCwgaW50IGFyZywgc3RydWN0IGZpbGVfbGVhc2UgKipsZWFzZSwgdm9pZCAqKnByaXYpXG5mcy9sb2Nrcy5jLTIxMzcte1xuLS1cbmZzL2xvY2tzLmMtMjE0OC19XG5mcy9sb2Nrcy5jOjIxNDk6RVhQT1JUX1NZTUJPTF9HUEwodmZzX3NldGxlYXNlKTtcbmZzL2xvY2tzLmMtMjE1MC1cbmZzL2xvY2tzLmM6MjE1MTpzdGF0aWMgaW50IGRvX2ZjbnRsX2FkZF9sZWFzZSh1bnNpZ25lZCBpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgZmxhdm9yLCBpbnQgYXJnKVxuZnMvbG9ja3MuYy0yMTUyLXtcbi0tXG5mcy9sb2Nrcy5jLTIxODUtICovXG5mcy9sb2Nrcy5jOjIxODY6aW50IGZjbnRsX3NldGxlYXNlKHVuc2lnbmVkIGludCBmZCwgc3RydWN0IGZpbGUgKmZpbHAsIGludCBhcmcpXG5mcy9sb2Nrcy5jLTIxODcte1xuLS1cbmZzL2xvY2tzLmMtMjIwNS0gKi9cbmZzL2xvY2tzLmM6MjIwNjppbnQgZmNudGxfc2V0ZGVsZWcodW5zaWduZWQgaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGRlbGVnYXRpb24gKmRlbGVnKVxuZnMvbG9ja3MuYy0yMjA3LXtcbi0tXG5mcy9sb2Nrcy5jLTIyMjMtICovXG5mcy9sb2Nrcy5jOjIyMjQ6c3RhdGljIGludCBmbG9ja19sb2NrX2lub2RlX3dhaXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGVfbG9jayAqZmwpXG5mcy9sb2Nrcy5jLTIyMjUte1xuLS1cbmZzL2xvY2tzLmMtMjI0Ny0gKi9cbmZzL2xvY2tzLmM6MjI0ODppbnQgbG9ja3NfbG9ja19pbm9kZV93YWl0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKVxuZnMvbG9ja3MuYy0yMjQ5LXtcbi0tXG5mcy9sb2Nrcy5jLTIyNjItfVxuZnMvbG9ja3MuYzoyMjYzOkVYUE9SVF9TWU1CT0wobG9ja3NfbG9ja19pbm9kZV93YWl0KTtcbmZzL2xvY2tzLmMtMjI2NC1cbi0tXG5mcy9sb2Nrcy5jLTIyNzktICovXG5mcy9sb2Nrcy5jOjIyODA6U1lTQ0FMTF9ERUZJTkUyKGZsb2NrLCB1bnNpZ25lZCBpbnQsIGZkLCB1bnNpZ25lZCBpbnQsIGNtZClcbmZzL2xvY2tzLmMtMjI4MS17XG4tLVxuZnMvbG9ja3MuYy0yMzQ0LSAqL1xuZnMvbG9ja3MuYzoyMzQ1OmludCB2ZnNfdGVzdF9sb2NrKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbClcbmZzL2xvY2tzLmMtMjM0Ni17XG4tLVxuZnMvbG9ja3MuYy0yMzY0LX1cbmZzL2xvY2tzLmM6MjM2NTpFWFBPUlRfU1lNQk9MX0dQTCh2ZnNfdGVzdF9sb2NrKTtcbmZzL2xvY2tzLmMtMjM2Ni1cbi0tXG5mcy9sb2Nrcy5jLTIzNzMtICovXG5mcy9sb2Nrcy5jOjIzNzQ6c3RhdGljIHBpZF90IGxvY2tzX3RyYW5zbGF0ZV9waWQoc3RydWN0IGZpbGVfbG9ja19jb3JlICpmbCwgc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zKVxuZnMvbG9ja3MuYy0yMzc1LXtcbi0tXG5mcy9sb2Nrcy5jLTI0MDAtXG5mcy9sb2Nrcy5jOjI0MDE6c3RhdGljIGludCBwb3NpeF9sb2NrX3RvX2Zsb2NrKHN0cnVjdCBmbG9jayAqZmxvY2ssIHN0cnVjdCBmaWxlX2xvY2sgKmZsKVxuZnMvbG9ja3MuYy0yNDAyLXtcbi0tXG5mcy9sb2Nrcy5jLTI0MjItI2lmIEJJVFNfUEVSX0xPTkcgPT0gMzJcbmZzL2xvY2tzLmM6MjQyMzpzdGF0aWMgdm9pZCBwb3NpeF9sb2NrX3RvX2Zsb2NrNjQoc3RydWN0IGZsb2NrNjQgKmZsb2NrLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbClcbmZzL2xvY2tzLmMtMjQyNC17XG4tLVxuZnMvbG9ja3MuYy0yNDM2LSAqL1xuZnMvbG9ja3MuYzoyNDM3OmludCBmY250bF9nZXRsayhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgc3RydWN0IGZsb2NrICpmbG9jaylcbmZzL2xvY2tzLmMtMjQzOC17XG4tLVxuZnMvbG9ja3MuYy0yNTEyLSAqL1xuZnMvbG9ja3MuYzoyNTEzOmludCB2ZnNfbG9ja19maWxlKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCwgc3RydWN0IGZpbGVfbG9jayAqY29uZilcbmZzL2xvY2tzLmMtMjUxNC17XG4tLVxuZnMvbG9ja3MuYy0yNTIwLX1cbmZzL2xvY2tzLmM6MjUyMTpFWFBPUlRfU1lNQk9MX0dQTCh2ZnNfbG9ja19maWxlKTtcbmZzL2xvY2tzLmMtMjUyMi1cbmZzL2xvY2tzLmM6MjUyMzpzdGF0aWMgaW50IGRvX2xvY2tfZmlsZV93YWl0KHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLFxuZnMvbG9ja3MuYy0yNTI0LVx0XHRcdCAgICAgc3RydWN0IGZpbGVfbG9jayAqZmwpXG4tLVxuZnMvbG9ja3MuYz0yNTQ3PXN0YXRpYyBpbnRcbmZzL2xvY2tzLmM6MjU0ODpjaGVja19mbW9kZV9mb3Jfc2V0bGsoc3RydWN0IGZpbGVfbG9jayAqZmwpXG5mcy9sb2Nrcy5jLTI1NDkte1xuLS1cbmZzL2xvY2tzLmMtMjU2NC0gKi9cbmZzL2xvY2tzLmM6MjU2NTppbnQgZmNudGxfc2V0bGsodW5zaWduZWQgaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCxcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDAzNwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDUyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS2VybmVsIExvY2tpbmcgQ29uZmlndXJhdGlvbiBhbmQgU3ltYm9sIFZpc2liaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGBmY250bF9zZXRsa2AsIGBmY250bF9zZXRsazY0YCwgYW5kIGBsb2Nrc19zaG93YC4gRmlyc3QgcXVlc3Rpb246IGlzIGBsb2Nrc19zaG93YCBzdGF0aWMgd2l0aGluIGBmcy9sb2Nrcy5jYD8gVGhhdCYjMzk7cyBrZXkgYmVjYXVzZSB0aGUgZG9jdW1lbnRhdGlvbiBwcmVmZXJzIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLCBhcyBzdGF0aWMgZnVuY3Rpb25zIGNhbiBiZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciwgbG9zaW5nIHRoZWlyIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuCgpSaWdodCwgc28gY2FuIGBsb2Nrc19zaG93YCBldmVuICpiZSogYSAmIzM0O0ZvY3VzU3ltYm9sJiMzNDsgaWYgaXQmIzM5O3MgcG90ZW50aWFsbHkgaW5saW5lZD8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0IGFjdHVhbGx5IGhhcyBhIHN5bWJvbC4gQWhhISBJdCAqaXMqIHJlZmVyZW5jZWQgaW4gYGxvY2tzX3NlcV9vcGVyYXRpb25zYCBiZWNhdXNlIGl0cyBhZGRyZXNzIGlzIHRha2VuIChgLnNob3cgPSBsb2Nrc19zaG93YCkuIFRoYXQgbWVhbnMgdGhlIGNvbXBpbGVyIGNhbiYjMzk7dCBpbmxpbmUgaXQ7IGl0IGhhcyB0byBnZW5lcmF0ZSBhIGZ1bmN0aW9uIHBvaW50ZXIgYW5kLCB0aGVyZWZvcmUsIGEgZGlzdGluY3Qgc3ltYm9sLiBHb29kLgoKTmV4dCwgSSBuZWVkIHRvIGNvbnNpZGVyIHBvdGVudGlhbCByZWxldmFudCBlbnRyeXBvaW50cy4gT2J2aW91c2x5IGBmY250bF9zZXRsa2AsIGFuZCBgZmNudGxfZ2V0bGtgLCB3aGljaCBhcmUgdXNlZCBpbiBgZmNudGxgLiBJdCBhbHNvIHNlZW1zIHRoYXQgdGhpbmdzIGxpa2UgYHN5c19mbG9ja2AgY291bGQgYmUgcmVsZXZhbnQsIGFsb25nc2lkZSB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIG9mIHRoZSBgbG9ja3Nfc2hvd2Agc3lzdGVtIGFzIHRoZSBtYWluIGVudHJ5IHBvaW50IHRvIHZpZXcgdGhlIGxvY2tzLgoKU28sIGxldCYjMzk7cyBtYXAgb3V0IHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3MuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IGV2ZXJ5dGhpbmcgZW5hYmxlZDoKCjEuICBgRklMRV9MT0NLSU5HYDogVGhpcyBpcyBlc3NlbnRpYWwsIGFzIGl0IGVuYWJsZXMgYGxvY2tzLmNgLgoyLiAgYFBST0NfRlNgOiBOZWVkZWQgYmVjYXVzZSBgZnMvbG9ja3MuY2AgdXNlcyBgI2lmZGVmIENPTkZJR19QUk9DX0ZTYCwgYW5kIHRoYXQmIzM5O3Mgd2hlcmUgYGxvY2tzX3Nob3dgIGFuZCB0aGUgYC9wcm9jL2xvY2tzYCBmaWxlIGFyZSBkZWZpbmVkLgozLiAgYFBJRF9OU2A6IFRoaXMgaXMgbmVlZGVkIHRvIGVuYWJsZSB0aGUgdXNhZ2Ugb2YgcGlkIG5hbWVzcGFjZXMgYW5kIGVuc3VyaW5nIHRoYXQgYHByb2NfcGlkbnMgIT0gJmFtcDtpbml0X3BpZF9uc2AuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZG91YmxlIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcy4gQmFjayB0byBgZnMvbG9ja3MuY2AgZm9yIGFueSBtb3JlIGNsdWVzLgoKWXVwLCBJJiMzOTttIHNlZWluZyB0aGF0IGBDT05GSUdfUFJPQ19GU2Agc3Vycm91bmRzIHRoZSBjb2RlIGZyb20gbGluZXMgMjkxMi0zMTU1LiBgQ09ORklHX0ZJTEVfTE9DS0lOR2AgaXMgZGVmaW5lZCBpbiBgZnMvTWFrZWZpbGVgIGFzIGBvYmotJChDT05GSUdfRklMRV9MT0NLSU5HKSAmIzQzOz0gbG9ja3Mub2AuIEFuZCBgQ09ORklHX1BJRF9OU2AgaXMgaW4gYGluaXQvS2NvbmZpZ2AuIExldCYjMzk7cyBkaWcgaW50byB0aGF0IGBpbml0L0tjb25maWdgIGZvciBgUElEX05TYDoKCmBgYApjb25maWcgUElEX05TCglib29sICYjMzQ7UElEIE5hbWVzcGFjZXMmIzM0OwoJZGVmYXVsdCB5CglkZXBlbmRzIG9uIE5BTUVTUEFDRVMKCWRlcGVuZHMgb24gQ0hFQ0tQT0lOVF9SRVNUT1JFIHx8IE5FVApgYGAKCldhaXQsIGhvbGQgb24hIEkgbmVlZCB0byBiZSAqc3VyZSogSSB1bmRlcnN0YW5kIHRob3NlIGRlcGVuZGVuY2llcy4gTGV0JiMzOTtzIHNlZSBleGFjdGx5IHdoYXQgYFBJRF9OU2AgcmVsaWVzIG9uIGluIGRldGFpbC4gVGhhdCYjMzk7cyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQSURfTlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE0NDY9Y29uZmlnIFVTRVJfTlNcbi0tXG5pbml0L0tjb25maWctMTQ1OS1cbmluaXQvS2NvbmZpZzoxNDYwOmNvbmZpZyBQSURfTlNcbmluaXQvS2NvbmZpZy0xNDYxLVx0Ym9vbCBcJiMzNDtQSUQgTmFtZXNwYWNlc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTI2NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgb2YgdGhlIGBpbml0L0tjb25maWdgIGZpbGUsIGFzIEkgdW5kZXJzdGFuZCB0aGVtOgoKKipEaXNzZWN0aW5nIGluaXQvS2NvbmZpZyBMaW5lcyAxNDUwLTE0ODAqKgoKT2theSwgc28gbGV0JiMzOTtzIGRpZyBpbnRvIGxpbmVzIDE0NTAgdG8gMTQ4MCBvZiBgaW5pdC9LY29uZmlnYC4gSSYjMzk7bSBnb2luZyB0byBwYXJzZSB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGhpbiB0aG9zZSBsaW5lcyBvZiBjb25maWcuIEl0JiMzOTtzIGxpa2VseSByZWxhdGVkIHRvIHNvbWUgY29yZSBzeXN0ZW0gaW5pdGlhbGl6YXRpb24sIHBvc3NpYmx5IGxpbmtlZCB0byB0aGUgZWFybHkgYm9vdCBwcm9jZXNzIG9yIGZ1bmRhbWVudGFsIGhhcmR3YXJlIHNldHVwLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoZXNlIGtpbmRzIG9mIHNldHRpbmdzIGFyZSB1c3VhbGx5IGludHJpY2F0ZWx5IGludGVydHdpbmVkLgoKSSBhbnRpY2lwYXRlIHRoZSBjb25maWcgb3B0aW9ucyBpbiB0aGF0IHNlY3Rpb24gd2lsbCBwcm92aWRlIHRoZSBuZWNlc3Nhcnkgb3B0aW9ucywgb3IgZGVmYXVsdHMsIHRoYXQgYWZmZWN0IGhvdyB0aGUga2VybmVsIGluaXRpYWxpemVzIHZhcmlvdXMgY29tcG9uZW50cyBkdXJpbmcgdGhlIHZlcnkgZmlyc3Qgc3RhZ2VzIG9mIGJvb3RpbmcgdGhlIHN5c3RlbS4gSSYjMzk7bSBndWVzc2luZyBpdCBtaWdodCBjb250YWluIHNldHRpbmdzIGZvciB0aGluZ3MgbGlrZSBjb25zb2xlIGluaXRpYWxpemF0aW9uLCBlYXJseSBtZW1vcnkgYWxsb2NhdGlvbiwgb3IgcGVyaGFwcyBldmVuIGluaXRpYWwgaW50ZXJydXB0IHNldHVwLiBUaGUgZGVwZW5kZW5jeSBzdHJ1Y3R1cmUgaXMga2V5IGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgYW55IGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljYWwgZmxvdyBhbmQgaG93IHRoZXNlIG9wdGlvbnMgcmVsYXRlIHRvIG90aGVyLCBwb3RlbnRpYWxseSBtb3JlIGZ1bmRhbWVudGFsLCBrZXJuZWwgZmVhdHVyZXMuCgpJdCYjMzk7cyBhbHNvIGxpa2VseSBJIHdpbGwgb2JzZXJ2ZSB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdXNlci1mYWNpbmcgY29uZmlnIG9wdGlvbnMgYW5kIGludGVybmFsIGtlcm5lbCBkZWZhdWx0cy4gSSB3YW50IHRvIGxvb2sgZm9yIGFueXRoaW5nIHRoYXQgY2FuIGJlIGFkanVzdGVkLiBUaGlzIGlzIGEgY3J1Y2lhbCBzZWN0aW9uIGZvciBjb250cm9sbGluZyBzeXN0ZW0gYmVoYXZpb3IgZnJvbSB0aGUgdmVyeSBzdGFydC4gSeKAmW0gZXNwZWNpYWxseSBsb29raW5nIGZvciBhbnkgc3VidGxlIGhpbnRzIHJlZ2FyZGluZyBwZXJmb3JtYW5jZSBvciBzZWN1cml0eSB0cmFkZW9mZnMgdGhhdCBhcmUgb2Z0ZW4gcHJlc2VudCBpbiB0aGVzZSBsb3ctbGV2ZWwgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDUwOlx0XHQgIFRoaXMgYWxsb3dzIGNvbnRhaW5lcnMsIGkuZS4gdnNlcnZlcnMsIHRvIHVzZSB1c2VyIG5hbWVzcGFjZXNcbjE0NTE6XHRcdCAgdG8gcHJvdmlkZSBkaWZmZXJlbnQgdXNlciBpbmZvIGZvciBkaWZmZXJlbnQgc2VydmVycy5cbjE0NTI6XHRcbjE0NTM6XHRcdCAgV2hlbiB1c2VyIG5hbWVzcGFjZXMgYXJlIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBpdCBpc1xuMTQ1NDpcdFx0ICByZWNvbW1lbmRlZCB0aGF0IHRoZSBNRU1DRyBvcHRpb24gYWxzbyBiZSBlbmFibGVkIGFuZCB0aGF0XG4xNDU1Olx0XHQgIHVzZXItc3BhY2UgdXNlIHRoZSBtZW1vcnkgY29udHJvbCBncm91cHMgdG8gbGltaXQgdGhlIGFtb3VudFxuMTQ1NjpcdFx0ICBvZiBtZW1vcnkgYSBtZW1vcnkgdW5wcml2aWxlZ2VkIHVzZXJzIGNhbiB1c2UuXG4xNDU3Olx0XG4xNDU4Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4xNDU5Olx0XG4xNDYwOlx0Y29uZmlnIFBJRF9OU1xuMTQ2MTpcdFx0Ym9vbCBcJiMzNDtQSUQgTmFtZXNwYWNlc1wmIzM0O1xuMTQ2MjpcdFx0ZGVmYXVsdCB5XG4xNDYzOlx0XHRoZWxwXG4xNDY0Olx0XHQgIFN1cHBvcnQgcHJvY2VzcyBpZCBuYW1lc3BhY2VzLiAgVGhpcyBhbGxvd3MgaGF2aW5nIG11bHRpcGxlXG4xNDY1Olx0XHQgIHByb2Nlc3NlcyB3aXRoIHRoZSBzYW1lIHBpZCBhcyBsb25nIGFzIHRoZXkgYXJlIGluIGRpZmZlcmVudFxuMTQ2NjpcdFx0ICBwaWQgbmFtZXNwYWNlcy4gIFRoaXMgaXMgYSBidWlsZGluZyBibG9jayBvZiBjb250YWluZXJzLlxuMTQ2NzpcdFxuMTQ2ODpcdGNvbmZpZyBORVRfTlNcbjE0Njk6XHRcdGJvb2wgXCYjMzQ7TmV0d29yayBuYW1lc3BhY2VcJiMzNDtcbjE0NzA6XHRcdGRlcGVuZHMgb24gTkVUXG4xNDcxOlx0XHRkZWZhdWx0IHlcbjE0NzI6XHRcdGhlbHBcbjE0NzM6XHRcdCAgQWxsb3cgdXNlciBzcGFjZSB0byBjcmVhdGUgd2hhdCBhcHBlYXIgdG8gYmUgbXVsdGlwbGUgaW5zdGFuY2VzXG4xNDc0Olx0XHQgIG9mIHRoZSBuZXR3b3JrIHN0YWNrLlxuMTQ3NTpcdFxuMTQ3NjpcdGVuZGlmICMgTkFNRVNQQUNFU1xuMTQ3NzpcdFxuMTQ3ODpcdGNvbmZpZyBDSEVDS1BPSU5UX1JFU1RPUkVcbjE0Nzk6XHRcdGJvb2wgXCYjMzQ7Q2hlY2twb2ludC9yZXN0b3JlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIwMjMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBMYWJ5cmludGg6IEEgUHJlLUxpbmUgMTQ1MCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgaW5pdC9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGJlZm9yZSBsaW5lIDE0NTAuIFRoZSBtZW50aW9uIG9mIE5BTUVTUEFDRVMgaXMgdGhlIHRyaWdnZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0LiBJJiMzOTttIGFzc3VtaW5nLCBnaXZlbiB0aGUgZmlsZSBhbmQgdGhlIGdlbmVyYWwgY29udGV4dCBvZiBrZXJuZWwgY29uZmlndXJhdGlvbiwgdGhhdCB3ZSBhcmUgZGVhbGluZyB3aXRoIHNvbWUgYXNwZWN0IG9mIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzeXN0ZW0sIGxpa2VseSByZWxhdGVkIHRvIG5hbWVzcGFjZXMgaW4gc29tZSB3YXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCByZWxhdGlvbnNoaXBzIGFyZSBkZWZpbmVkIG9yIHVzZWQgcHJpb3IgdG8gdGhhdCBsaW5lLiBJIG5lZWQgdG8gZGlzY292ZXIgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFuZCB0aGUgb3ZlcmFsbCBwaWN0dXJlIGJlZm9yZSBJIGNhbiB1bmRlcnN0YW5kIHdoYXQgdGhlIGxpbmUgaXMgZG9pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDMwOlx0XHRkZWZhdWx0IHlcbjE0MzE6XHRcdGhlbHBcbjE0MzI6XHRcdCAgSW4gdGhpcyBuYW1lc3BhY2UgYm9vdHRpbWUgYW5kIG1vbm90b25pYyBjbG9ja3MgY2FuIGJlIHNldC5cbjE0MzM6XHRcdCAgVGhlIHRpbWUgd2lsbCBrZWVwIGdvaW5nIHdpdGggdGhlIHNhbWUgcGFjZS5cbjE0MzQ6XHRcbjE0MzU6XHRjb25maWcgVElNRV9OU19WRFNPXG4xNDM2Olx0XHRkZWZfYm9vbCBUSU1FX05TIFx1MDAyNlx1MDAyNiBHRU5FUklDX0dFVFRJTUVPRkRBWVxuMTQzNzpcdFxuMTQzODpcdGNvbmZpZyBJUENfTlNcbjE0Mzk6XHRcdGJvb2wgXCYjMzQ7SVBDIG5hbWVzcGFjZVwmIzM0O1xuMTQ0MDpcdFx0ZGVwZW5kcyBvbiAoU1lTVklQQyB8fCBQT1NJWF9NUVVFVUUpXG4xNDQxOlx0XHRkZWZhdWx0IHlcbjE0NDI6XHRcdGhlbHBcbjE0NDM6XHRcdCAgSW4gdGhpcyBuYW1lc3BhY2UgdGFza3Mgd29yayB3aXRoIElQQyBpZHMgd2hpY2ggY29ycmVzcG9uZCB0b1xuMTQ0NDpcdFx0ICBkaWZmZXJlbnQgSVBDIG9iamVjdHMgaW4gZGlmZmVyZW50IG5hbWVzcGFjZXMuXG4xNDQ1Olx0XG4xNDQ2Olx0Y29uZmlnIFVTRVJfTlNcbjE0NDc6XHRcdGJvb2wgXCYjMzQ7VXNlciBuYW1lc3BhY2VcJiMzNDtcbjE0NDg6XHRcdGRlZmF1bHQgblxuMTQ0OTpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjQ5MgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqTmF2aWdhdGluZyB0aGUgTmFtZXNwYWNlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgYG1lbnVjb25maWdgIGZvciB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIG5hbWVzcGFjZSBjb25maWd1cmF0aW9ucy4gV2hlcmUgZG8gSSBldmVuIGJlZ2luPyBSaWdodCwgbGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBzZWFyY2guIEkmIzM5O2xsIG5lZWQgdG8gbG9jYXRlIHdoZXJlIGBOQU1FU1BBQ0VTYCBpcyBkZWZpbmVkIGluIHRoZSBtZW51IHN0cnVjdHVyZS4gVW5kZXJzdGFuZGluZyB0aGUgYnJhbmNoaW5nIGxvZ2ljIGZyb20gdGhhdCBwb2ludCBpcyBrZXkuIEl0JiMzOTtzIG5vdCBqdXN0IGFib3V0IGZpbmRpbmcgdGhlIGluaXRpYWwgZW50cnksIGJ1dCBhbHNvIHRyYWNpbmcgdGhlIGRlcGVuZGVuY2llcywgZGVmYXVsdHMsIGFuZCBhbnkgY29uZGl0aW9uYWwgYnVpbGQgb3B0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LiBNeSBndXQgdGVsbHMgbWUgdGhlcmUmIzM5O3MgcHJvYmFibHkgYSBoaWVyYXJjaGljYWwgc2V0dXAsIHNvIEkgc2hvdWxkIGJlIHByZXBhcmVkIHRvIGRpZyB0aHJvdWdoIHNldmVyYWwgbGV2ZWxzIG9mIGluY2x1ZGVzIGFuZCBjb25kaXRpb25hbCBzdGF0ZW1lbnRzIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGtlcm5lbCBmZWF0dXJlcyBhbmQgY29uZmlndXJhdGlvbnMgbWlnaHQgaW1wYWN0IG9yIGJlIGltcGFjdGVkIGJ5IHRoZSBuYW1lc3BhY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW51Y29uZmlnIE5BTUVTUEFDRVMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE0MDc9ZW5kaWYgIyBDR1JPVVBTXG5pbml0L0tjb25maWctMTQwOC1cbmluaXQvS2NvbmZpZzoxNDA5Om1lbnVjb25maWcgTkFNRVNQQUNFU1xuaW5pdC9LY29uZmlnLTE0MTAtXHRib29sIFwmIzM0O05hbWVzcGFjZXMgc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI3ODgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDoKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIC0gQSBRdWljayBBdWRpdCoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIEkgbmVlZCB0byBxdWlja2x5IGdyYXNwIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gYSBmZXcga2V5IGFyZWFzOiBOQU1FU1BBQ0VTLCBQSURfTlMsIEZJTEVfTE9DS0lORywgYW5kIFBST0NfRlMuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gZW5zdXJpbmcgdGhlc2UgYXJlIGNvcnJlY3RseSBzZXQgYW5kIGludGVyYWN0IHByb3Blcmx5LgoKVGhlIHBsYW4gaXMgdG8gZGl2ZSBkZWVwZXIgaW50byBgQ09ORklHX0ZJTEVfTE9DS0lOR2AgYW5kIGBDT05GSUdfUFJPQ19GU2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgaW52b2x2ZWQgdGhhdCBtaWdodCBub3QgYmUgaW1tZWRpYXRlbHkgb2J2aW91cy4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBnbyBkaXJlY3RseSB0byB0aGUgc291cmNlLCBjaGVja2luZyBgZnMvcHJvYy9LY29uZmlnYCBmb3IgdGhlIGRlcGVuZGVuY2llcyBvZiBQUk9DX0ZTLiBUaGlzIHdpbGwgZ2l2ZSBhIGdvb2Qgb3ZlcnZpZXcgYW5kIGhlbHAgbWUgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBjb25mbGljdHMgb3IgYXJlYXMgdGhhdCBuZWVkIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9wcm9jL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgUFJPQ19GU1xuICAgMzpcdFx0Ym9vbCBcJiMzNDsvcHJvYyBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxuICAgNDpcdFx0ZGVmYXVsdCB5XG4gICA1Olx0XHRoZWxwXG4gICA2Olx0XHQgIFRoaXMgaXMgYSB2aXJ0dWFsIGZpbGUgc3lzdGVtIHByb3ZpZGluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3RhdHVzXG4gICA3Olx0XHQgIG9mIHRoZSBzeXN0ZW0uIFwmIzM0O1ZpcnR1YWxcJiMzNDsgbWVhbnMgdGhhdCBpdCBkb2VzbiYjMzk7dCB0YWtlIHVwIGFueSBzcGFjZSBvblxuICAgODpcdFx0ICB5b3VyIGhhcmQgZGlzazogdGhlIGZpbGVzIGFyZSBjcmVhdGVkIG9uIHRoZSBmbHkgYnkgdGhlIGtlcm5lbCB3aGVuXG4gICA5Olx0XHQgIHlvdSB0cnkgdG8gYWNjZXNzIHRoZW0uIEFsc28sIHlvdSBjYW5ub3QgcmVhZCB0aGUgZmlsZXMgd2l0aCBvbGRlclxuICAxMDpcdFx0ICB2ZXJzaW9uIG9mIHRoZSBwcm9ncmFtIGxlc3M6IHlvdSBuZWVkIHRvIHVzZSBtb3JlIG9yIGNhdC5cbiAgMTE6XHRcbiAgMTI6XHRcdCAgSXQmIzM5O3MgdG90YWxseSBjb29sOyBmb3IgZXhhbXBsZSwgXCYjMzQ7Y2F0IC9wcm9jL2ludGVycnVwdHNcJiMzNDsgZ2l2ZXNcbiAgMTM6XHRcdCAgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCB0aGUgZGlmZmVyZW50IElSUXMgYXJlIHVzZWQgZm9yIGF0IHRoZSBtb21lbnRcbiAgMTQ6XHRcdCAgKHRoZXJlIGlzIGEgc21hbGwgbnVtYmVyIG9mIEludGVycnVwdCBSZVF1ZXN0IGxpbmVzIGluIHlvdXIgY29tcHV0ZXJcbiAgMTU6XHRcdCAgdGhhdCBhcmUgdXNlZCBieSB0aGUgYXR0YWNoZWQgZGV2aWNlcyB0byBnYWluIHRoZSBDUFUmIzM5O3MgYXR0ZW50aW9uIC0tXG4gIDE2Olx0XHQgIG9mdGVuIGEgc291cmNlIG9mIHRyb3VibGUgaWYgdHdvIGRldmljZXMgYXJlIG1pc3Rha2VubHkgY29uZmlndXJlZFxuICAxNzpcdFx0ICB0byB1c2UgdGhlIHNhbWUgSVJRKS4gVGhlIHByb2dyYW0gcHJvY2luZm8gdG8gZGlzcGxheSBzb21lXG4gIDE4Olx0XHQgIGluZm9ybWF0aW9uIGFib3V0IHlvdXIgc3lzdGVtIGdhdGhlcmVkIGZyb20gdGhlIC9wcm9jIGZpbGUgc3lzdGVtLlxuICAxOTpcdFxuICAyMDpcdFx0ICBCZWZvcmUgeW91IGNhbiB1c2UgdGhlIC9wcm9jIGZpbGUgc3lzdGVtLCBpdCBoYXMgdG8gYmUgbW91bnRlZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM0MDkKCQkJCQkJCW91dHB1dDogMTg5CgkJCQkJCQl0aG91Z2h0czogNTA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IEFzc2Vzc21lbnQ6IE9GRCBMb2NrIEZpbHRlcmluZyBpbiBgL3Byb2MvbG9ja3NgKioKCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLiBGaXJzdCwgbGV0JiMzOTtzIHZlcmlmeSB3aGF0IHdlJiMzOTtyZSBrZXlpbmcgaW4gb24gd2l0aCBgRm9jdXNTeW1ib2xzYC4gT2theSwgd2UmIzM5O3ZlIGdvdCBgbG9ja3Nfc2hvd2AsIHdoaWNoIGlzIHRoZSBgL3Byb2MvbG9ja3NgIGRpc3BsYXksIHJpZ2h0IHdoZXJlIHRoZSBuZXcgbG9naWMgcmVzaWRlcy4gVGhlbiwgYGZjbnRsX3NldGxrYCBhbmQgYGZjbnRsX2dldGxrYCwgYXMgdGhleSBoYW5kbGUgbG9jayBjcmVhdGlvbiBhbmQgcmV0cmlldmFsLCBpbmNsdWRpbmcgdGhlIG9wZW4gZmlsZSBkZXNjcmlwdGlvbiAoT0ZEKSBsb2NrcyB0aGF0IGFyZSB0aGUgZm9jYWwgcG9pbnQgaGVyZS4gRmluYWxseSwgYGxvY2tzX3RyYW5zbGF0ZV9waWRgIGZvciBjb250ZXh0LCBhbHRob3VnaCBpdCBhcHBlYXJzIHRoaXMgaXMgd2hhdCB0aGUgcGF0Y2ggKmJ5cGFzc2VzKiBmb3IgT0ZEIGxvY2tzLgoKTm93LCB0aGUgcmVhbCBxdWVzdGlvbjogaXMgdGhpcyBgV29ydGhGdXp6aW5nYD8gVGhpcyBjaGFuZ2UgZGlyZWN0bHkgbW9kaWZpZXMgdGhlIHZpc2liaWxpdHkgZmlsdGVyaW5nIGluIGAvcHJvYy9sb2Nrc2Agd2hlbiBPRkQgbG9ja3MgYXJlIGludm9sdmVkLCBlc3BlY2lhbGx5IHdoZW4gUElEIG5hbWVzcGFjZXMgYXJlIGluIHBsYXkuIEl0IHNlZW1zIHRoZSBjb3JlIGlzc3VlIGxpZXMgaW4gdGhlIGZhY3QgdGhhdCBPRkQgbG9ja3MgaGF2ZSBhIFBJRCBvZiAtMS4gVGhlIHBhdGNoIGludHJvZHVjZXMgdGhpcyBuZXcgUElEIGxvb2t1cCBhbmQgZmlsdGVyaW5nIHVzaW5nIGBmbGNfcGlkYCAodGhlIHByb2Nlc3MmIzM5O3MgVEdJRCkgd2hpY2ggaXMgbXVjaCBiZXR0ZXIuCgpUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGFyZWEgb2YgdGhlIFZGUyBsb2NraW5nIGltcGxlbWVudGF0aW9uIGFuZCBwcm9jZnMuIFdlJiMzOTtyZSB0YWxraW5nIGNvcmUga2VybmVsIGxvZ2ljLCBzb21ldGhpbmcgdGhhdCYjMzk7cyByZWxhdGl2ZWx5IGVhc3kgdG8gaGl0IHNpbXBseSBieSB1c2luZyBgZmNudGxgIHRvIGNyZWF0ZSBsb2NrcyAoc3BlY2lmaWNhbGx5IGBGX09GRF9TRVRMS2ApIGFuZCB0aGVuIHJlYWRpbmcgYC9wcm9jL2xvY2tzYCBlaXRoZXIgaW5zaWRlIG9yIG91dHNpZGUgUElEIG5hbWVzcGFjZXMuIEl0IHNlZW1zIGxpa2UgaXQmIzM5O3Mgd2l0aGluIHJlYWNoLCB0aGUgYFdvcnRoRnV6emluZ2AgZmxhZyBzaG91bGQgYmUgc2V0IHRvIGB0cnVlYC4KCkxldCYjMzk7cyBkbyBhIGZpbmFsIGNoZWNrOiB0aGUgZW5hYmxpbmcgY29uZmlncywgYEZJTEVfTE9DS0lOR2AsIGBQUk9DX0ZTYCwgYFBJRF9OU2AsIGFuZCBgTkFNRVNQQUNFU2AgYXJlIGFsbCBwcmVzZW50LiBUaGUgZm9jdXMgc3ltYm9scyBhcmUgc3RpbGwgc29saWQ6IGBsb2Nrc19zaG93YCwgYGZjbnRsX3NldGxrYCwgYW5kIGBmY250bF9nZXRsa2AuIFRoZSBwYXRjaCBhbHRlcnMgYC9wcm9jL2xvY2tzYCB0byBmaWx0ZXIgcHJvcGVybHkgZm9yIE9GRCBsb2NrcyB3aGVuIHJlYWRpbmcgZnJvbSBQSUQgbmFtZXNwYWNlcywgYXMgdGhlIGxvY2sgb3duZXImIzM5O3MgYGZsY19waWRgIGlzIGJlaW5nIGNoZWNrZWQgYWdhaW5zdCBgcHJvY19waWRuc2AgdmlhIFJDVS4gU3RhbmRhcmQgZmlsZSBsb2NraW5nIGFuZCBwcm9jZnMgbG9naWMuCgpSaWdodC4gVGltZSB0byBpbnZva2UgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZJTEVfTE9DS0lORyYjMzQ7LAogICAgJiMzNDtQUk9DX0ZTJiMzNDssCiAgICAmIzM0O05BTUVTUEFDRVMmIzM0OywKICAgICYjMzQ7UElEX05TJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bG9ja3Nfc2hvdyYjMzQ7LAogICAgJiMzNDtmY250bF9zZXRsayYjMzQ7LAogICAgJiMzNDtmY250bF9nZXRsayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgbG9ja3Nfc2hvdygpYCBpbiBmcy9sb2Nrcy5jIHRvIHByb3Blcmx5IGZpbHRlciBPcGVuIEZpbGUgRGVzY3JpcHRpb24gKE9GRCkgbG9ja3Mgd2hlbiBgL3Byb2MvbG9ja3NgIGlzIHJlYWQgZnJvbSB3aXRoaW4gYSBub24taW5pdGlhbCBQSUQgbmFtZXNwYWNlLiBCZWNhdXNlIE9GRCBsb2NrcyByZXBvcnQgcGlkIC0xLCBwcmV2aW91cyBuYW1lc3BhY2UgZmlsdGVyaW5nIGZhaWxlZCB0byBjb25jZWFsIE9GRCBsb2NrcyBvd25lZCBieSBwcm9jZXNzZXMgb3V0c2lkZSB0aGUgUElEIG5hbWVzcGFjZS4gVGhlIHBhdGNoIGFkZHMgUkNVLWJhc2VkIFBJRCBsb29rdXAgYW5kIG5hbWVzcGFjZSB2aXNpYmlsaXR5IGNoZWNrcyBvbiBgZmxjX3BpZGAuIFRoaXMgY2hhbmdlcyByZWFjaGFibGUgY29yZSBWRlMgLyBwcm9jZnMgbG9naWMgdGhhdCBjYW4gYmUgZXhlcmNpc2VkIHZpYSBmaWxlIGxvY2tpbmcgc3lzY2FsbHMgYW5kIHByb2NmcyByZWFkcyBhY3Jvc3MgUElEIG5hbWVzcGFjZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZJTEVfTE9DS0lORyYjMzQ7LAogICAgJiMzNDtQUk9DX0ZTJiMzNDssCiAgICAmIzM0O05BTUVTUEFDRVMmIzM0OywKICAgICYjMzQ7UElEX05TJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bG9ja3Nfc2hvdyYjMzQ7LAogICAgJiMzNDtmY250bF9zZXRsayYjMzQ7LAogICAgJiMzNDtmY250bF9nZXRsayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgbG9ja3Nfc2hvdygpYCBpbiBmcy9sb2Nrcy5jIHRvIHByb3Blcmx5IGZpbHRlciBPcGVuIEZpbGUgRGVzY3JpcHRpb24gKE9GRCkgbG9ja3Mgd2hlbiBgL3Byb2MvbG9ja3NgIGlzIHJlYWQgZnJvbSB3aXRoaW4gYSBub24taW5pdGlhbCBQSUQgbmFtZXNwYWNlLiBCZWNhdXNlIE9GRCBsb2NrcyByZXBvcnQgcGlkIC0xLCBwcmV2aW91cyBuYW1lc3BhY2UgZmlsdGVyaW5nIGZhaWxlZCB0byBjb25jZWFsIE9GRCBsb2NrcyBvd25lZCBieSBwcm9jZXNzZXMgb3V0c2lkZSB0aGUgUElEIG5hbWVzcGFjZS4gVGhlIHBhdGNoIGFkZHMgUkNVLWJhc2VkIFBJRCBsb29rdXAgYW5kIG5hbWVzcGFjZSB2aXNpYmlsaXR5IGNoZWNrcyBvbiBgZmxjX3BpZGAuIFRoaXMgY2hhbmdlcyByZWFjaGFibGUgY29yZSBWRlMgLyBwcm9jZnMgbG9naWMgdGhhdCBjYW4gYmUgZXhlcmNpc2VkIHZpYSBmaWxlIGxvY2tpbmcgc3lzY2FsbHMgYW5kIHByb2NmcyByZWFkcyBhY3Jvc3MgUElEIG5hbWVzcGFjZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjMyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MzI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgbG9ja3Nfc2hvd2AgaW4gYGZzL2xvY2tzLmNgIHRvIGZpbHRlciBvdXQgb3BlbiBmaWxlIGRlc2NyaXB0aW9uIChPRkQpIGxvY2tzIGZyb20gYC9wcm9jL2xvY2tzYCB3aGVuIHZpZXdlZCBmcm9tIGEgbm9uLWluaXQgUElEIG5hbWVzcGFjZSBpZiB0aGUgb3duaW5nIFBJRCBpcyBub3QgdmlzaWJsZSB3aXRoaW4gdGhhdCBuYW1lc3BhY2UuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzIG9yIHBhZGRpbmcgdG8gdXNlciBzcGFjZSwgYW5kIGluaXRpYWxpemVzIGFsbCBsb2NhbCB2YXJpYWJsZXMgKGB2aXNpYmxlID0gZmFsc2VgKS4gSXQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aHMgb3IgY3JlYXRlIGFueSByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg5YWY2YWVkZDg0MzRhNzRkMTcxYzdmNGM0MjRhOGRiYzRjNzU1YzIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCAyIDIyOjMwOjUxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvbG9ja3MuYyBiL2ZzL2xvY2tzLmMKaW5kZXggNmU0ZmY3ZmNlYzA1My4uZGIxNzg3OWQ5MzE5NSAxMDA2NDQKLS0tIGEvZnMvbG9ja3MuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9sb2Nrcy5jCkBAIC0zMDIyLDYgJiM0MzszMDIyLDIzIEBAIHN0YXRpYyBpbnQgbG9ja3Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIHZvaWQgKnYpCiAKIAljdXIgPSBobGlzdF9lbnRyeSh2LCBzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUsIGZsY19saW5rKTsKIAomIzQzOwkvKgomIzQzOwkgKiBPRkQgbG9ja3MgYXJlIHJlcG9ydGVkIHdpdGggcGlkIC0xLCBzbyB0aGUgZmlsdGVyIGJlbG93IGNhbm5vdCBzZWUKJiM0MzsJICogdGhlaXIgb3duZXI7IGZsY19waWQgaG9sZHMgdGhlIG93bmVyIHRnaWQsIHNvIGZpbHRlciBvbiBpdC4KJiM0MzsJICovCiYjNDM7CWlmICgoY3VyLSZndDtmbGNfZmxhZ3MgJmFtcDsgRkxfT0ZETENLKSAmYW1wOyZhbXA7IHByb2NfcGlkbnMgIT0gJmFtcDtpbml0X3BpZF9ucykgewomIzQzOwkJc3RydWN0IHBpZCAqcGlkOwomIzQzOwkJYm9vbCB2aXNpYmxlID0gZmFsc2U7CiYjNDM7CiYjNDM7CQlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CQlwaWQgPSBmaW5kX3BpZF9ucyhjdXItJmd0O2ZsY19waWQsICZhbXA7aW5pdF9waWRfbnMpOwomIzQzOwkJaWYgKHBpZCkKJiM0MzsJCQl2aXNpYmxlID0gcGlkX25yX25zKHBpZCwgcHJvY19waWRucykgIT0gMDsKJiM0MzsJCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwkJaWYgKCF2aXNpYmxlKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiAJaWYgKGxvY2tzX3RyYW5zbGF0ZV9waWQoY3VyLCBwcm9jX3BpZG5zKSA9PSAwKQogCQlyZXR1cm4gMDsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIyMgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIGRpcmVjdGl2ZXMsIHJlbmRlcmVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OgoKKipEaXZpbmcgaW50byB0aGUgYGZzL2xvY2tzLmNgIENvZGUqKgoKQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byB6b29tIGluIG9uIHRoZSBzcGVjaWZpYyBjb2RlIG1vZGlmaWNhdGlvbnMgd2l0aGluIGBmcy9sb2Nrcy5jYC4gS25vd2luZyBob3cgdGhpcyBzdWJzeXN0ZW0gd29ya3MsIEkgd2FudCB0byBlc3RhYmxpc2ggc29tZSBjb250ZXh0LiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O0xldCYjMzk7cyBzdGFydCBieSBzY3J1dGluaXppbmcgdGhlIHBhdGNoIGl0c2VsZiwgdGhlbiBicm9hZGVuIHRoZSBzY29wZSB0byBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIHRoYXQgZmlsZSwgYGZzL2xvY2tzLmNgLiYjMzQ7IEl0JiMzOTtzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSAmIzM0O3doeSYjMzQ7IGJlaGluZCBhbnkgY2hhbmdlLiBPZnRlbiB0aGUgc3Vycm91bmRpbmcgY29kZSB3aWxsIGV4cGxhaW4gdGhlIG1vdGl2YXRpb24gZm9yIHRoZSBjb2RlLiBUaGlzIGdpdmVzIG1lIGEgZ29vZCBwbGFjZSB0byBzdGFydC4gQW5kIG9mIGNvdXJzZSwgc2luY2UgSSBrbm93IHRoZSBjb2RlIHByZXR0eSB3ZWxsLCBJIHNob3VsZCBzdGFydCBhdCBsaW5lIDMwMjIuIEkgY2FuIHN0YXJ0IGJ5IGluc3BlY3RpbmcgaXQgZm9yIGEgZ29vZCBwbGFjZSB0byBiZWdpbi4gVGhlbiBJIGNhbiB1c2UgYGdpdCBibGFtZWAgb3IgbXkgZmF2b3JpdGUgY29kZSBleHBsb3JhdGlvbiB0b29scyB0byBpbnZlc3RpZ2F0ZSwgc28gSSBjYW4gc2VlIHdoYXQgb3RoZXIgY2hhbmdlcyBhcmUgcmVsYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9sb2Nrcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMDAwOlx0XG4zMDAxOlx0XHQvKiBOVUxMIG5vZGUgb3Igcm9vdCBub2RlICovXG4zMDAyOlx0XHRpZiAobm9kZSA9PSBOVUxMIHx8IG5vZGUtXHUwMDNlZmxjX2Jsb2NrZXIgPT0gTlVMTClcbjMwMDM6XHRcdFx0cmV0dXJuIE5VTEw7XG4zMDA0Olx0XG4zMDA1Olx0XHQvKiBOZXh0IG1lbWJlciBpbiB0aGUgbGlua2VkIGxpc3QgY291bGQgYmUgaXRzZWxmICovXG4zMDA2Olx0XHR0bXAgPSBsaXN0X25leHRfZW50cnkobm9kZSwgZmxjX2Jsb2NrZWRfbWVtYmVyKTtcbjMwMDc6XHRcdGlmIChsaXN0X2VudHJ5X2lzX2hlYWQodG1wLCBcdTAwMjZub2RlLVx1MDAzZWZsY19ibG9ja2VyLVx1MDAzZWZsY19ibG9ja2VkX3JlcXVlc3RzLFxuMzAwODpcdFx0XHRcdCAgICAgICBmbGNfYmxvY2tlZF9tZW1iZXIpXG4zMDA5Olx0XHRcdHx8IHRtcCA9PSBub2RlKSB7XG4zMDEwOlx0XHRcdHJldHVybiBOVUxMO1xuMzAxMTpcdFx0fVxuMzAxMjpcdFxuMzAxMzpcdFx0cmV0dXJuIHRtcDtcbjMwMTQ6XHR9XG4zMDE1Olx0XG4zMDE2Olx0c3RhdGljIGludCBsb2Nrc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqZiwgdm9pZCAqdilcbjMwMTc6XHR7XG4zMDE4Olx0XHRzdHJ1Y3QgbG9ja3NfaXRlcmF0b3IgKml0ZXIgPSBmLVx1MDAzZXByaXZhdGU7XG4zMDE5Olx0XHRzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmN1ciwgKnRtcDtcbjMwMjA6XHRcdHN0cnVjdCBwaWRfbmFtZXNwYWNlICpwcm9jX3BpZG5zID0gcHJvY19waWRfbnMoZmlsZV9pbm9kZShmLVx1MDAzZWZpbGUpLVx1MDAzZWlfc2IpO1xuMzAyMTpcdFx0aW50IGxldmVsID0gMDtcbjMwMjI6XHRcbjMwMjM6XHRcdGN1ciA9IGhsaXN0X2VudHJ5KHYsIHN0cnVjdCBmaWxlX2xvY2tfY29yZSwgZmxjX2xpbmspO1xuMzAyNDpcdFxuMzAyNTpcdFx0LypcbjMwMjY6XHRcdCAqIE9GRCBsb2NrcyBhcmUgcmVwb3J0ZWQgd2l0aCBwaWQgLTEsIHNvIHRoZSBmaWx0ZXIgYmVsb3cgY2Fubm90IHNlZVxuMzAyNzpcdFx0ICogdGhlaXIgb3duZXI7IGZsY19waWQgaG9sZHMgdGhlIG93bmVyIHRnaWQsIHNvIGZpbHRlciBvbiBpdC5cbjMwMjg6XHRcdCAqL1xuMzAyOTpcdFx0aWYgKChjdXItXHUwMDNlZmxjX2ZsYWdzIFx1MDAyNiBGTF9PRkRMQ0spIFx1MDAyNlx1MDAyNiBwcm9jX3BpZG5zICE9IFx1MDAyNmluaXRfcGlkX25zKSB7XG4zMDMwOlx0XHRcdHN0cnVjdCBwaWQgKnBpZDtcbjMwMzE6XHRcdFx0Ym9vbCB2aXNpYmxlID0gZmFsc2U7XG4zMDMyOlx0XG4zMDMzOlx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbjMwMzQ6XHRcdFx0cGlkID0gZmluZF9waWRfbnMoY3VyLVx1MDAzZWZsY19waWQsIFx1MDAyNmluaXRfcGlkX25zKTtcbjMwMzU6XHRcdFx0aWYgKHBpZClcbjMwMzY6XHRcdFx0XHR2aXNpYmxlID0gcGlkX25yX25zKHBpZCwgcHJvY19waWRucykgIT0gMDtcbjMwMzc6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4zMDM4Olx0XHRcdGlmICghdmlzaWJsZSlcbjMwMzk6XHRcdFx0XHRyZXR1cm4gMDtcbjMwNDA6XHRcdH1cbjMwNDE6XHRcbjMwNDI6XHRcdGlmIChsb2Nrc190cmFuc2xhdGVfcGlkKGN1ciwgcHJvY19waWRucykgPT0gMClcbjMwNDM6XHRcdFx0cmV0dXJuIDA7XG4zMDQ0Olx0XG4zMDQ1Olx0XHQvKiBWaWV3IHRoaXMgY3Jvc3NlZCBsaW5rZWQgbGlzdCBhcyBhIGJpbmFyeSB0cmVlLCB0aGUgZmlyc3QgbWVtYmVyIG9mIGZsY19ibG9ja2VkX3JlcXVlc3RzXG4zMDQ2Olx0XHQgKiBpcyB0aGUgbGVmdCBjaGlsZCBvZiBjdXJyZW50IG5vZGUsIHRoZSBuZXh0IHNpbGliaW5nIGluIGZsY19ibG9ja2VkX21lbWJlciBpcyB0aGVcbjMwNDc6XHRcdCAqIHJpZ2h0IGNoaWxkLCB3ZSBjYW4gYWxzZSBnZXQgdGhlIHBhcmVudCBvZiBjdXJyZW50IG5vZGUgZnJvbSBmbGNfYmxvY2tlciwgc28gdGhpc1xuMzA0ODpcdFx0ICogcXVlc3Rpb24gYmVjb21lcyB0cmF2ZXJzYWwgb2YgYSBiaW5hcnkgdHJlZVxuMzA0OTpcdFx0ICovXG4zMDUwOlx0XHR3aGlsZSAoY3VyICE9IE5VTEwpIHtcbjMwNTE6XHRcdFx0aWYgKGxldmVsKVxuMzA1MjpcdFx0XHRcdGxvY2tfZ2V0X3N0YXR1cyhmLCBjdXIsIGl0ZXItXHUwMDNlbGlfcG9zLCBcJiMzNDstXHUwMDNlIFwmIzM0OywgbGV2ZWwpO1xuMzA1MzpcdFx0XHRlbHNlXG4zMDU0Olx0XHRcdFx0bG9ja19nZXRfc3RhdHVzKGYsIGN1ciwgaXRlci1cdTAwM2VsaV9wb3MsIFwmIzM0O1wmIzM0OywgbGV2ZWwpO1xuMzA1NTpcdFxuMzA1NjpcdFx0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2Y3VyLVx1MDAzZWZsY19ibG9ja2VkX3JlcXVlc3RzKSkge1xuMzA1NzpcdFx0XHRcdC8qIFR1cm4gbGVmdCAqL1xuMzA1ODpcdFx0XHRcdGN1ciA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbChcdTAwMjZjdXItXHUwMDNlZmxjX2Jsb2NrZWRfcmVxdWVzdHMsXG4zMDU5Olx0XHRcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBmaWxlX2xvY2tfY29yZSxcbjMwNjA6XHRcdFx0XHRcdFx0XHQgICAgICAgZmxjX2Jsb2NrZWRfbWVtYmVyKTtcbjMwNjE6XHRcdFx0XHRsZXZlbCYjNDM7JiM0Mzs7XG4zMDYyOlx0XHRcdH0gZWxzZSB7XG4zMDYzOlx0XHRcdFx0LyogVHVybiByaWdodCAqL1xuMzA2NDpcdFx0XHRcdHRtcCA9IGdldF9uZXh0X2Jsb2NrZWRfbWVtYmVyKGN1cik7XG4zMDY1Olx0XHRcdFx0LyogRmFsbCBiYWNrIHRvIHBhcmVudCBub2RlICovXG4zMDY2Olx0XHRcdFx0d2hpbGUgKHRtcCA9PSBOVUxMIFx1MDAyNlx1MDAyNiBjdXItXHUwMDNlZmxjX2Jsb2NrZXIgIT0gTlVMTCkge1xuMzA2NzpcdFx0XHRcdFx0Y3VyID0gY3VyLVx1MDAzZWZsY19ibG9ja2VyO1xuMzA2ODpcdFx0XHRcdFx0bGV2ZWwtLTtcbjMwNjk6XHRcdFx0XHRcdHRtcCA9IGdldF9uZXh0X2Jsb2NrZWRfbWVtYmVyKGN1cik7XG4zMDcwOlx0XHRcdFx0fVxuMzA3MTpcdFx0XHRcdGN1ciA9IHRtcDtcbjMwNzI6XHRcdFx0fVxuMzA3MzpcdFx0fVxuMzA3NDpcdFxuMzA3NTpcdFx0cmV0dXJuIDA7XG4zMDc2Olx0fVxuMzA3NzpcdFxuMzA3ODpcdHN0YXRpYyB2b2lkIF9fc2hvd19mZF9sb2NrcyhzdHJ1Y3Qgc2VxX2ZpbGUgKmYsXG4zMDc5Olx0XHRcdFx0c3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgaW50ICppZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc0NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgbG9ja3NfdHJhbnNsYXRlX3BpZGAgYW5kIGBsb2NrX2dldF9zdGF0dXNgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb25hbGl0eSBvZiBgbG9ja3NfdHJhbnNsYXRlX3BpZGAgYW5kIGBsb2NrX2dldF9zdGF0dXNgLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSAqZG9pbmcqLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgYGxvY2tzX3RyYW5zbGF0ZV9waWRgIGlzIHByb2JhYmx5IGludm9sdmVkIGluIHNvbWUgZm9ybSBvZiBwcm9jZXNzIElEIG1hcHBpbmcgb3IgdHJhbnNsYXRpb24gcmVsYXRlZCB0byBsb2NrcywgcGVyaGFwcyB3aXRoaW4gYSBkaXN0cmlidXRlZCBsb2NraW5nIHN5c3RlbSwgb3IgbWF5YmUgaXQgaXMgcGFydCBvZiBob3cgdGhlIGtlcm5lbCBtYW5hZ2VzIGxvY2tzLiBgbG9ja19nZXRfc3RhdHVzYCBvYnZpb3VzbHkgc291bmRzIGxpa2UgaXQmIzM5O3MgcXVlcnlpbmcgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYSBsb2NrLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hldGhlciBpdHMgcmV0cmlldmluZyBkYXRhIGZyb20gdGhlIGNhY2hlLCBvciB0aGUgZGV2aWNlLCBvciB3aGV0aGVyIHRoYXQgaXMgYW4gb3B0aW1pemF0aW9uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBkZXRhaWxzIGxpa2Ugd2hhdCBraW5kIG9mIGluZm9ybWF0aW9uIHRoZXkgcHJvdmlkZSAoZS5nLiwgb3duZXIgUElELCBsb2NrIHR5cGUsIGNvbnRlbnRpb24gZGV0YWlscywgd2FpdCBxdWV1ZSBzdGF0dXMpLiBEZXBlbmRpbmcgb24gdGhlIGNvbnRleHQsIHRoaXMgY291bGQgYmUgY3J1Y2lhbCBmb3IgZGVidWdnaW5nIGxvY2sgY29udGVudGlvbiBpc3N1ZXMsIHBlcmZvcm1hbmNlIHByb2ZpbGluZywgb3IgZXZlbiB1bmRlcnN0YW5kaW5nIGhvdyBvdXIgb3duIGxvY2sgaW1wbGVtZW50YXRpb24gaXMgYmVoYXZpbmcuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBhbnkgYXNzdW1wdGlvbnMgYWJvdXQgdGhlc2UgZnVuY3Rpb25zIGFuZCB3aGVyZSB0aGV5IGZpdCBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bG9ja3NfdHJhbnNsYXRlX3BpZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2xvY2tzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbG9ja3MuYz0yMzY1PUVYUE9SVF9TWU1CT0xfR1BMKHZmc190ZXN0X2xvY2spO1xuLS1cbmZzL2xvY2tzLmMtMjM2Ny0vKipcbmZzL2xvY2tzLmM6MjM2ODogKiBsb2Nrc190cmFuc2xhdGVfcGlkIC0gdHJhbnNsYXRlIGEgZmlsZV9sb2NrJiMzOTtzIGZsX3BpZCBudW1iZXIgaW50byBhIG5hbWVzcGFjZVxuZnMvbG9ja3MuYy0yMzY5LSAqIEBmbDogVGhlIGZpbGVfbG9jayB3aG8mIzM5O3MgZmxfcGlkIHNob3VsZCBiZSB0cmFuc2xhdGVkXG4tLVxuZnMvbG9ja3MuYy0yMzczLSAqL1xuZnMvbG9ja3MuYzoyMzc0OnN0YXRpYyBwaWRfdCBsb2Nrc190cmFuc2xhdGVfcGlkKHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqZmwsIHN0cnVjdCBwaWRfbmFtZXNwYWNlICpucylcbmZzL2xvY2tzLmMtMjM3NS17XG4tLVxuZnMvbG9ja3MuYz0yNDAxPXN0YXRpYyBpbnQgcG9zaXhfbG9ja190b19mbG9jayhzdHJ1Y3QgZmxvY2sgKmZsb2NrLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbClcbmZzL2xvY2tzLmMtMjQwMi17XG5mcy9sb2Nrcy5jOjI0MDM6XHRmbG9jay1cdTAwM2VsX3BpZCA9IGxvY2tzX3RyYW5zbGF0ZV9waWQoXHUwMDI2ZmwtXHUwMDNlYywgdGFza19hY3RpdmVfcGlkX25zKGN1cnJlbnQpKTtcbmZzL2xvY2tzLmMtMjQwNC0jaWYgQklUU19QRVJfTE9ORyA9PSAzMlxuLS1cbmZzL2xvY2tzLmM9MjQyMz1zdGF0aWMgdm9pZCBwb3NpeF9sb2NrX3RvX2Zsb2NrNjQoc3RydWN0IGZsb2NrNjQgKmZsb2NrLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbClcbmZzL2xvY2tzLmMtMjQyNC17XG5mcy9sb2Nrcy5jOjI0MjU6XHRmbG9jay1cdTAwM2VsX3BpZCA9IGxvY2tzX3RyYW5zbGF0ZV9waWQoXHUwMDI2ZmwtXHUwMDNlYywgdGFza19hY3RpdmVfcGlkX25zKGN1cnJlbnQpKTtcbmZzL2xvY2tzLmMtMjQyNi1cdGZsb2NrLVx1MDAzZWxfc3RhcnQgPSBmbC1cdTAwM2VmbF9zdGFydDtcbi0tXG5mcy9sb2Nrcy5jPTI5MjE9c3RhdGljIHZvaWQgbG9ja19nZXRfc3RhdHVzKHN0cnVjdCBzZXFfZmlsZSAqZiwgc3RydWN0IGZpbGVfbG9ja19jb3JlICpmbGMsXG4tLVxuZnMvbG9ja3MuYy0yOTI5LVxuZnMvbG9ja3MuYzoyOTMwOlx0cGlkID0gbG9ja3NfdHJhbnNsYXRlX3BpZChmbGMsIHByb2NfcGlkbnMpO1xuZnMvbG9ja3MuYy0yOTMxLVxuLS1cbmZzL2xvY2tzLmM9MzAxNj1zdGF0aWMgaW50IGxvY2tzX3Nob3coc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICp2KVxuLS1cbmZzL2xvY2tzLmMtMzA0MS1cbmZzL2xvY2tzLmM6MzA0MjpcdGlmIChsb2Nrc190cmFuc2xhdGVfcGlkKGN1ciwgcHJvY19waWRucykgPT0gMClcbmZzL2xvY2tzLmMtMzA0My1cdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NjUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIExvY2sgTWFuYWdlbWVudCBGdW5jdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgbG9jayBtZWNoYW5pc21zIGFyZSB3b3JraW5nLCBwYXJ0aWN1bGFybHkgaG93IHRoZXkgcmVsYXRlIHRvIFBJRHMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgY29kZSBmb3IgYGxvY2tzX3RyYW5zbGF0ZV9waWRgLiBJJiMzOTttIGN1cmlvdXMgdG8gc2VlIGhvdyBhIHByb2Nlc3MgSUQgaXMgbWFwcGVkLCB0cmFuc2xhdGVkLCBvciB1c2VkIHdpdGhpbiB0aGUgbG9jayBtYW5hZ2VtZW50IGZyYW1ld29yay4gV2hhdCBhcmUgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgaXQgaW50ZXJhY3RzIHdpdGg/IElzIHRoZXJlIGFueSBQSUQtc3BlY2lmaWMgbG9naWMgd2l0aGluIHRoZSBsb2NraW5nIG1lY2hhbmlzbT8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhpcyBtaWdodCByZXZlYWwgaG93IHByb2Nlc3NlcyBjb250ZW5kIGZvciByZXNvdXJjZXMgYW5kIGhvdyB0aGUgc3lzdGVtIHRyYWNrcyBsb2NrIG93bmVyc2hpcC4KClRoZW4sIEkmIzM5O2xsIG5lZWQgdG8gaW1tZWRpYXRlbHkgZm9sbG93IHRoYXQgd2l0aCBhIGxvb2sgYXQgYGxvY2tfZ2V0X3N0YXR1c2AuIFRoaXMgc2hvdWxkIHNoZWQgbGlnaHQgb24gdGhlIHN0YXRlIG9mIHRoZSBsb2Nrcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaG93IHRoZSBsb2NrIHN0YXR1cyBpcyByZXRyaWV2ZWQsIHdoYXQgaW5mb3JtYXRpb24gaXMgbWFkZSBhdmFpbGFibGUgKG93bmVyIFBJRHMsIGN1cnJlbnQgc3RhdGUgbGlrZSBsb2NrZWQvdW5sb2NrZWQsIGFueSB3YWl0aW5nIHByb2Nlc3NlcyksIGFuZCB3aGF0IHRoZSByZXR1cm4gdmFsdWVzIG1lYW4uIFRoZSBjb21iaW5hdGlvbiBvZiB0aGVzZSB0d28gZnVuY3Rpb25zIHNob3VsZCBwcm92aWRlIGEgc29saWQgcGljdHVyZSBvZiBob3cgUElEJiMzOTtzIGFyZSBpbnRlZ3JhdGVkIGFuZCBob3cgbG9jayBzdGF0dXNlcyBhcmUgY2hlY2tlZCB3aXRoaW4gdGhlIGxvY2tpbmcgc3lzdGVtLiBVbmRlcnN0YW5kaW5nIHRoZSBzdGF0dXMgcXVlcnlpbmcgd2lsbCBkZWZpbml0ZWx5IGluZm9ybSBob3cgdG8gaW50ZXJwcmV0IHRoZSByZXN1bHRzIG9mIGBsb2Nrc190cmFuc2xhdGVfcGlkYC4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaG93IHRoZSBmcmFtZXdvcmsgcHJvdmlkZXMgYW5kIGludGVycHJldHMgbG9jayBzdGF0dXMgcmVsYXRpdmUgdG8gdGhlIHByb2Nlc3MgYXR0ZW1wdGluZyB0byBnYWluIGEgbG9jay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9sb2Nrcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjM2OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMzY4Olx0ICogbG9ja3NfdHJhbnNsYXRlX3BpZCAtIHRyYW5zbGF0ZSBhIGZpbGVfbG9jayYjMzk7cyBmbF9waWQgbnVtYmVyIGludG8gYSBuYW1lc3BhY2VcbjIzNjk6XHQgKiBAZmw6IFRoZSBmaWxlX2xvY2sgd2hvJiMzOTtzIGZsX3BpZCBzaG91bGQgYmUgdHJhbnNsYXRlZFxuMjM3MDpcdCAqIEBuczogVGhlIG5hbWVzcGFjZSBpbnRvIHdoaWNoIHRoZSBwaWQgc2hvdWxkIGJlIHRyYW5zbGF0ZWRcbjIzNzE6XHQgKlxuMjM3MjpcdCAqIFVzZWQgdG8gdHJhbnNsYXRlIGEgZmxfcGlkIGludG8gYSBuYW1lc3BhY2UgdmlydHVhbCBwaWQgbnVtYmVyXG4yMzczOlx0ICovXG4yMzc0Olx0c3RhdGljIHBpZF90IGxvY2tzX3RyYW5zbGF0ZV9waWQoc3RydWN0IGZpbGVfbG9ja19jb3JlICpmbCwgc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zKVxuMjM3NTpcdHtcbjIzNzY6XHRcdHBpZF90IHZucjtcbjIzNzc6XHRcdHN0cnVjdCBwaWQgKnBpZDtcbjIzNzg6XHRcbjIzNzk6XHRcdGlmIChmbC1cdTAwM2VmbGNfZmxhZ3MgXHUwMDI2IEZMX09GRExDSylcbjIzODA6XHRcdFx0cmV0dXJuIC0xO1xuMjM4MTpcdFxuMjM4MjpcdFx0LyogUmVtb3RlIGxvY2tzIHJlcG9ydCBhIG5lZ2F0aXZlIHBpZCB2YWx1ZSAqL1xuMjM4MzpcdFx0aWYgKGZsLVx1MDAzZWZsY19waWQgXHUwMDNjPSAwKVxuMjM4NDpcdFx0XHRyZXR1cm4gZmwtXHUwMDNlZmxjX3BpZDtcbjIzODU6XHRcbjIzODY6XHRcdC8qXG4yMzg3Olx0XHQgKiBJZiB0aGUgZmxvY2sgb3duZXIgcHJvY2VzcyBpcyBkZWFkIGFuZCBpdHMgcGlkIGhhcyBiZWVuIGFscmVhZHlcbjIzODg6XHRcdCAqIGZyZWVkLCB0aGUgdHJhbnNsYXRpb24gYmVsb3cgd29uJiMzOTt0IHdvcmssIGJ1dCB3ZSBzdGlsbCB3YW50IHRvIHNob3dcbjIzODk6XHRcdCAqIGZsb2NrIG93bmVyIHBpZCBudW1iZXIgaW4gaW5pdCBwaWRucy5cbjIzOTA6XHRcdCAqL1xuMjM5MTpcdFx0aWYgKG5zID09IFx1MDAyNmluaXRfcGlkX25zKVxuMjM5MjpcdFx0XHRyZXR1cm4gKHBpZF90KSBmbC1cdTAwM2VmbGNfcGlkO1xuMjM5MzpcdFxuMjM5NDpcdFx0cmN1X3JlYWRfbG9jaygpO1xuMjM5NTpcdFx0cGlkID0gZmluZF9waWRfbnMoZmwtXHUwMDNlZmxjX3BpZCwgXHUwMDI2aW5pdF9waWRfbnMpO1xuMjM5NjpcdFx0dm5yID0gcGlkX25yX25zKHBpZCwgbnMpO1xuMjM5NzpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4yMzk4Olx0XHRyZXR1cm4gdm5yO1xuMjM5OTpcdH1cbjI0MDA6XHRcbjI0MDE6XHRzdGF0aWMgaW50IHBvc2l4X2xvY2tfdG9fZmxvY2soc3RydWN0IGZsb2NrICpmbG9jaywgc3RydWN0IGZpbGVfbG9jayAqZmwpXG4yNDAyOlx0e1xuMjQwMzpcdFx0ZmxvY2stXHUwMDNlbF9waWQgPSBsb2Nrc190cmFuc2xhdGVfcGlkKFx1MDAyNmZsLVx1MDAzZWMsIHRhc2tfYWN0aXZlX3BpZF9ucyhjdXJyZW50KSk7XG4yNDA0Olx0I2lmIEJJVFNfUEVSX0xPTkcgPT0gMzJcbjI0MDU6XHRcdC8qXG4yNDA2Olx0XHQgKiBNYWtlIHN1cmUgd2UgY2FuIHJlcHJlc2VudCB0aGUgcG9zaXggbG9jayB2aWFcbjI0MDc6XHRcdCAqIGxlZ2FjeSAzMmJpdCBmbG9jay5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY1OAoJCQkJCQkJb3V0cHV0OiAxNDEKCQkJCQkJCXRob3VnaHRzOiA3MjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSAvcHJvYy9sb2NrcyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIG1vZGlmeWluZyBgbG9ja3Nfc2hvd2Agd2l0aGluIGBmcy9sb2Nrcy5jYCwgc3BlY2lmaWNhbGx5IGhvdyBgL3Byb2MvbG9ja3NgIGhhbmRsZXMgT3BlbiBGaWxlIERlc2NyaXB0b3IgKE9GRCkgbG9ja3MuIFRoZSBjb3JlIGlzc3VlIGlzIGFib3V0IFBJRCBuYW1lc3BhY2UgdmlzaWJpbGl0eS4gUHJldmlvdXNseSwgdGhlIHN5c3RlbSB3YXNuJiMzOTt0IHByb3Blcmx5IGZpbHRlcmluZyBPRkQgbG9ja3MgYmFzZWQgb24gdGhlaXIgb3duZXImIzM5O3MgUElEIG5hbWVzcGFjZS4gQmVjYXVzZSBvZiBob3cgT0ZEIGxvY2tzIGFyZSBpZGVudGlmaWVkICh3aXRoIHBpZCAtMSksIHRoZSBvbGQgYGxvY2tzX3RyYW5zbGF0ZV9waWRgIGZ1bmN0aW9uIGFsd2F5cyByZXR1cm5lZCBub24temVyby4gIFRoaXMgbWVhbnQgT0ZEIGxvY2tzIGZyb20gcHJvY2Vzc2VzIG5vdCBpbiB0aGUgY3VycmVudCBQSUQgbmFtZXNwYWNlIHdlcmUgc3RpbGwgYmVpbmcgc2hvd24gaW4gYC9wcm9jL2xvY2tzYCwgd2hpY2ggaXMgaW5jb3JyZWN0LgoKVGhpcyBwYXRjaCBhZGRyZXNzZXMgdGhhdC4gSXQgYWRkcyBhIGNoZWNrIHdpdGhpbiB0aGUgYGxvY2tzX3Nob3dgIGZ1bmN0aW9uLiBOb3csIGlmIGFuIE9GRCBsb2NrIGlzIGVuY291bnRlcmVkIChpbmRpY2F0ZWQgYnkgYEZMX09GRExDS2ApLCBhbmQgdGhlIHByb2Nlc3MgaXNuJiMzOTt0IGluIHRoZSBpbml0IFBJRCBuYW1lc3BhY2UsIGl0IHBlcmZvcm1zIGEgbG9va3VwIHVzaW5nIGBmaW5kX3BpZF9uc2AgdG8gZGV0ZXJtaW5lIGlmIHRoZSBvd25lciBvZiB0aGUgbG9jayAoaWRlbnRpZmllZCBieSBgY3VyLSZndDtmbGNfcGlkYCkgaXMgYWN0dWFsbHkgdmlzaWJsZSBpbiB0aGUgY3VycmVudCBgL3Byb2MvbG9ja3NgIG5hbWVzcGFjZSAoYHByb2NfcGlkbnNgKS4gVGhlIGByY3VfcmVhZF9sb2NrYCBhbmQgYHJjdV9yZWFkX3VubG9ja2AgY2FsbHMgZW5zdXJlIHRoaXMgaXMgZG9uZSBzYWZlbHkuIFRoZSBuZXcgYHZpc2libGVgIHZhcmlhYmxlIGRldGVybWluZXMgaWYgdGhlIGxvY2sgb3duZXIgaXMgdmlzaWJsZSwgYW5kIGlmIG5vdCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgMCwgbWVhbmluZyB0aGUgbG9jayBlbnRyeSBpc24mIzM5O3QgZGlzcGxheWVkIGluIGAvcHJvYy9sb2Nrc2AuCgpOb3csIGxldCYjMzk7cyB0aGluayBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIHBhdGNoIGlzbiYjMzk7dCBpbnRyb2R1Y2luZyBhbnkgcmlza3MuIEkgc2VlIGBzdHJ1Y3QgcGlkICpwaWRgIGFuZCBgYm9vbCB2aXNpYmxlID0gZmFsc2U7YCBhcmUgaW50cm9kdWNlZC4gQnV0IGB2aXNpYmxlYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkLCBhbmQgYHBpZGAgZWl0aGVyIGdldHMgYSB2YWx1ZSBmcm9tIGBmaW5kX3BpZF9uc2Agb3IgcmVtYWlucyBudWxsLiBUaGVyZSBhcmUgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gY29weWluZyB0byB1c2Vyc3BhY2Ugd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcywgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZSByZWFkcywgYW5kIG5vIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhpcyBpcyBhbGwgY29udGFpbmVkIHdpdGhpbiBhIHNpbmdsZSBgbG9ja3Nfc2hvd2AgZnVuY3Rpb24sIHNvIGl0IGNhbiYjMzk7dCBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mIGFub3RoZXIgcGFydCBvZiB0aGUgc3lzdGVtIGFuZCwgdGhlcmVmb3JlLCBpcyB2ZXJ5IGxvY2FsaXplZC4gVGhlIG91dHB1dCBpcyBhIGBzZXFfZmlsZWAgb3V0cHV0IHRvIGAvcHJvYy9sb2Nrc2AsIHNvIHdlIGFyZSBub3QgZGVhbGluZyB3aXRoIGJ1ZmZlcnMuIFRoZXJlZm9yZSwgbm8sIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhc3BlY3RzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UuIEl0JiMzOTtzIHNpbXBseSBhYm91dCBuYW1lc3BhY2UgdmlzaWJpbGl0eSBmaWx0ZXJpbmcuCgpUaGlua2luZyBhYm91dCBLTVNBTiBzcGVjaWZpY2FsbHnigKYgTm8uIEtBU0FOIGlzIGltcG9ydGFudCBmb3IgdGhpcywgYXMgaXQgaGFuZGxlcyBnZW5lcmFsIG1lbW9yeSBzYWZldHksIGJ1dCB0aGlzIHBhdGNoIGRvZXNu4oCZdCBpbnRyb2R1Y2UgYW55IHJpc2tzIHNwZWNpZmljIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJJiMzOTttIGludHJvZHVjaW5nIGEgbG9jYWwgdmFyaWFibGUgYW5kIGEgUElEIGxvb2t1cCwgYWxsIHVuZGVyIGFuIFJDVSBsb2NrLCBzbyB0aGVyZSBhcmUgbm8gcGFydGlhbCBzdHJ1Y3QgaW5pdGlhbGl6YXRpb25zIG9yIGNvcGllcyB0byB1c2Vyc3BhY2UuCgpTbywgdGhlIHZlcmRpY3QgaXMgTmVlZHNLTVNBTjogZmFsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBsb2Nrc19zaG93YCBpbiBgZnMvbG9ja3MuY2AgdG8gZmlsdGVyIG91dCBvcGVuIGZpbGUgZGVzY3JpcHRpb24gKE9GRCkgbG9ja3MgZnJvbSBgL3Byb2MvbG9ja3NgIHdoZW4gdmlld2VkIGZyb20gYSBub24taW5pdCBQSUQgbmFtZXNwYWNlIGlmIHRoZSBvd25pbmcgUElEIGlzIG5vdCB2aXNpYmxlIHdpdGhpbiB0aGF0IG5hbWVzcGFjZS5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlLCBhbmQgaW5pdGlhbGl6ZXMgYWxsIGxvY2FsIHZhcmlhYmxlcyAoYHZpc2libGUgPSBmYWxzZWApLiBJdCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RocyBvciBjcmVhdGUgYW55IHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBsb2Nrc19zaG93YCBpbiBgZnMvbG9ja3MuY2AgdG8gZmlsdGVyIG91dCBvcGVuIGZpbGUgZGVzY3JpcHRpb24gKE9GRCkgbG9ja3MgZnJvbSBgL3Byb2MvbG9ja3NgIHdoZW4gdmlld2VkIGZyb20gYSBub24taW5pdCBQSUQgbmFtZXNwYWNlIGlmIHRoZSBvd25pbmcgUElEIGlzIG5vdCB2aXNpYmxlIHdpdGhpbiB0aGF0IG5hbWVzcGFjZS5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlLCBhbmQgaW5pdGlhbGl6ZXMgYWxsIGxvY2FsIHZhcmlhYmxlcyAoYHZpc2libGUgPSBmYWxzZWApLiBJdCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RocyBvciBjcmVhdGUgYW55IHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MzA6NTMuMjg4Njg4NTFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDk4NzYwNTM4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGSUxFX0xPQ0tJTkdcIixcbiAgICBcIlBST0NfRlNcIixcbiAgICBcIk5BTUVTUEFDRVNcIixcbiAgICBcIlBJRF9OU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxvY2tzX3Nob3dcIixcbiAgICBcImZjbnRsX3NldGxrXCIsXG4gICAgXCJmY250bF9nZXRsa1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGxvY2tzX3Nob3dgIGluIGBmcy9sb2Nrcy5jYCB0byBmaWx0ZXIgb3V0IG9wZW4gZmlsZSBkZXNjcmlwdGlvbiAoT0ZEKSBsb2NrcyBmcm9tIGAvcHJvYy9sb2Nrc2Agd2hlbiB2aWV3ZWQgZnJvbSBhIG5vbi1pbml0IFBJRCBuYW1lc3BhY2UgaWYgdGhlIG93bmluZyBQSUQgaXMgbm90IHZpc2libGUgd2l0aGluIHRoYXQgbmFtZXNwYWNlLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzIG9yIHBhZGRpbmcgdG8gdXNlciBzcGFjZSwgYW5kIGluaXRpYWxpemVzIGFsbCBsb2NhbCB2YXJpYWJsZXMgKGB2aXNpYmxlID0gZmFsc2VgKS4gSXQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGxlbmd0aHMgb3IgY3JlYXRlIGFueSByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGxvY2tzX3Nob3coKWAgaW4gZnMvbG9ja3MuYyB0byBwcm9wZXJseSBmaWx0ZXIgT3BlbiBGaWxlIERlc2NyaXB0aW9uIChPRkQpIGxvY2tzIHdoZW4gYC9wcm9jL2xvY2tzYCBpcyByZWFkIGZyb20gd2l0aGluIGEgbm9uLWluaXRpYWwgUElEIG5hbWVzcGFjZS4gQmVjYXVzZSBPRkQgbG9ja3MgcmVwb3J0IHBpZCAtMSwgcHJldmlvdXMgbmFtZXNwYWNlIGZpbHRlcmluZyBmYWlsZWQgdG8gY29uY2VhbCBPRkQgbG9ja3Mgb3duZWQgYnkgcHJvY2Vzc2VzIG91dHNpZGUgdGhlIFBJRCBuYW1lc3BhY2UuIFRoZSBwYXRjaCBhZGRzIFJDVS1iYXNlZCBQSUQgbG9va3VwIGFuZCBuYW1lc3BhY2UgdmlzaWJpbGl0eSBjaGVja3Mgb24gYGZsY19waWRgLiBUaGlzIGNoYW5nZXMgcmVhY2hhYmxlIGNvcmUgVkZTIC8gcHJvY2ZzIGxvZ2ljIHRoYXQgY2FuIGJlIGV4ZXJjaXNlZCB2aWEgZmlsZSBsb2NraW5nIHN5c2NhbGxzIGFuZCBwcm9jZnMgcmVhZHMgYWNyb3NzIFBJRCBuYW1lc3BhY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjozMDo1My4yODg2OTY5N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5OTc5ODg1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg5YWY2YWVkZDg0MzRhNzRkMTcxYzdmNGM0MjRhOGRiYzRjNzU1YzJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBTZXAgMiAyMjozMDo1MSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9sb2Nrcy5jIGIvZnMvbG9ja3MuY1xcbmluZGV4IDZlNGZmN2ZjZWMwNTMuLmRiMTc4NzlkOTMxOTUgMTAwNjQ0XFxuLS0tIGEvZnMvbG9ja3MuY1xcbisrKyBiL2ZzL2xvY2tzLmNcXG5AQCAtMzAyMiw2ICszMDIyLDIzIEBAIHN0YXRpYyBpbnQgbG9ja3Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIHZvaWQgKnYpXFxuIFxcbiBcXHRjdXIgPSBobGlzdF9lbnRyeSh2LCBzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUsIGZsY19saW5rKTtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIE9GRCBsb2NrcyBhcmUgcmVwb3J0ZWQgd2l0aCBwaWQgLTEsIHNvIHRoZSBmaWx0ZXIgYmVsb3cgY2Fubm90IHNlZVxcbitcXHQgKiB0aGVpciBvd25lcjsgZmxjX3BpZCBob2xkcyB0aGUgb3duZXIgdGdpZCwgc28gZmlsdGVyIG9uIGl0LlxcbitcXHQgKi9cXG4rXFx0aWYgKChjdXItXFx1MDAzZWZsY19mbGFncyBcXHUwMDI2IEZMX09GRExDSykgXFx1MDAyNlxcdTAwMjYgcHJvY19waWRucyAhPSBcXHUwMDI2aW5pdF9waWRfbnMpIHtcXG4rXFx0XFx0c3RydWN0IHBpZCAqcGlkO1xcbitcXHRcXHRib29sIHZpc2libGUgPSBmYWxzZTtcXG4rXFxuK1xcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0XFx0cGlkID0gZmluZF9waWRfbnMoY3VyLVxcdTAwM2VmbGNfcGlkLCBcXHUwMDI2aW5pdF9waWRfbnMpO1xcbitcXHRcXHRpZiAocGlkKVxcbitcXHRcXHRcXHR2aXNpYmxlID0gcGlkX25yX25zKHBpZCwgcHJvY19waWRucykgIT0gMDtcXG4rXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdFxcdGlmICghdmlzaWJsZSlcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChsb2Nrc190cmFuc2xhdGVfcGlkKGN1ciwgcHJvY19waWRucykgPT0gMClcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjozMDo1NC44OTE0NjEyNzNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjY1OTQ5MjU4NDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZJTEVfTE9DS0lOR1wiLFxuICAgIFwiUFJPQ19GU1wiLFxuICAgIFwiTkFNRVNQQUNFU1wiLFxuICAgIFwiUElEX05TXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibG9ja3Nfc2hvd1wiLFxuICAgIFwiZmNudGxfc2V0bGtcIixcbiAgICBcImZjbnRsX2dldGxrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGxvY2tzX3Nob3coKWAgaW4gZnMvbG9ja3MuYyB0byBwcm9wZXJseSBmaWx0ZXIgT3BlbiBGaWxlIERlc2NyaXB0aW9uIChPRkQpIGxvY2tzIHdoZW4gYC9wcm9jL2xvY2tzYCBpcyByZWFkIGZyb20gd2l0aGluIGEgbm9uLWluaXRpYWwgUElEIG5hbWVzcGFjZS4gQmVjYXVzZSBPRkQgbG9ja3MgcmVwb3J0IHBpZCAtMSwgcHJldmlvdXMgbmFtZXNwYWNlIGZpbHRlcmluZyBmYWlsZWQgdG8gY29uY2VhbCBPRkQgbG9ja3Mgb3duZWQgYnkgcHJvY2Vzc2VzIG91dHNpZGUgdGhlIFBJRCBuYW1lc3BhY2UuIFRoZSBwYXRjaCBhZGRzIFJDVS1iYXNlZCBQSUQgbG9va3VwIGFuZCBuYW1lc3BhY2UgdmlzaWJpbGl0eSBjaGVja3Mgb24gYGZsY19waWRgLiBUaGlzIGNoYW5nZXMgcmVhY2hhYmxlIGNvcmUgVkZTIC8gcHJvY2ZzIGxvZ2ljIHRoYXQgY2FuIGJlIGV4ZXJjaXNlZCB2aWEgZmlsZSBsb2NraW5nIHN5c2NhbGxzIGFuZCBwcm9jZnMgcmVhZHMgYWNyb3NzIFBJRCBuYW1lc3BhY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4OWFmNmFlZGQ4NDM0YTc0ZDE3MWM3ZjRjNDI0YThkYmM0Yzc1NWMyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAyMjozMDo1MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2xvY2tzLmMgYi9mcy9sb2Nrcy5jXG5pbmRleCA2ZTRmZjdmY2VjMDUzLi5kYjE3ODc5ZDkzMTk1IDEwMDY0NFxuLS0tIGEvZnMvbG9ja3MuY1xuKysrIGIvZnMvbG9ja3MuY1xuQEAgLTMwMjIsNiArMzAyMiwyMyBAQCBzdGF0aWMgaW50IGxvY2tzX3Nob3coc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICp2KVxuIFxuIFx0Y3VyID0gaGxpc3RfZW50cnkodiwgc3RydWN0IGZpbGVfbG9ja19jb3JlLCBmbGNfbGluayk7XG4gXG4rXHQvKlxuK1x0ICogT0ZEIGxvY2tzIGFyZSByZXBvcnRlZCB3aXRoIHBpZCAtMSwgc28gdGhlIGZpbHRlciBiZWxvdyBjYW5ub3Qgc2VlXG4rXHQgKiB0aGVpciBvd25lcjsgZmxjX3BpZCBob2xkcyB0aGUgb3duZXIgdGdpZCwgc28gZmlsdGVyIG9uIGl0LlxuK1x0ICovXG4rXHRpZiAoKGN1ci1cdTAwM2VmbGNfZmxhZ3MgXHUwMDI2IEZMX09GRExDSykgXHUwMDI2XHUwMDI2IHByb2NfcGlkbnMgIT0gXHUwMDI2aW5pdF9waWRfbnMpIHtcbitcdFx0c3RydWN0IHBpZCAqcGlkO1xuK1x0XHRib29sIHZpc2libGUgPSBmYWxzZTtcbitcbitcdFx0cmN1X3JlYWRfbG9jaygpO1xuK1x0XHRwaWQgPSBmaW5kX3BpZF9ucyhjdXItXHUwMDNlZmxjX3BpZCwgXHUwMDI2aW5pdF9waWRfbnMpO1xuK1x0XHRpZiAocGlkKVxuK1x0XHRcdHZpc2libGUgPSBwaWRfbnJfbnMocGlkLCBwcm9jX3BpZG5zKSAhPSAwO1xuK1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcdFx0aWYgKCF2aXNpYmxlKVxuK1x0XHRcdHJldHVybiAwO1xuK1x0fVxuK1xuIFx0aWYgKGxvY2tzX3RyYW5zbGF0ZV9waWQoY3VyLCBwcm9jX3BpZG5zKSA9PSAwKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjMwOjU0Ljg5MTQ2MzQ5M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY2NDc4NjU3OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgbG9ja3Nfc2hvd2AgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggaXMgZG9pbmcgaW4gYGZzL2xvY2tzLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBsb2Nrc19zaG93YCBmdW5jdGlvbi4gU2VlbXMgbGlrZSBpdCdzIGFkZGluZyBzb21lIGZpbHRlcmluZyBsb2dpYy4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IGl0J3MgcmVsYXRlZCB0byBob3cgZmlsZSBsb2NrcyBhcmUgZGlzcGxheWVkIGluIGEgYHByb2Nmc2AgY29udGV4dC5cblxuTG9va2luZyBhdCB0aGUgY29kZSwgaXQgbG9va3MgbGlrZSB0aGVyZSdzIGEgbmV3IGNoZWNrIGRlYWxpbmcgd2l0aCBcIk9GRCBsb2Nrc1wiLiBUaGUgY29tbWVudCBtZW50aW9ucyB0aGF0IHRoZXNlIGxvY2tzIGFyZSByZXBvcnRlZCB3aXRoIGEgUElEIG9mIC0xLiBTbywgdGhlIG5vcm1hbCBQSUQtYmFzZWQgZmlsdGVyaW5nIGlzbid0IGdvaW5nIHRvIHdvcmsgZm9yIHRoZXNlLiAgVGhlIHBhdGNoIHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgdGhpcyBieSBjaGVja2luZyBgZmxjX3BpZGAgKHdoaWNoIHRoZSBjb21tZW50IHNheXMgaG9sZHMgdGhlIG93bmVyJ3MgdGdpZCkuXG5cbkl0IHNlZW1zIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaW52b2x2ZXMgYSBjb25kaXRpb25hbCBibG9jazpcblxuYGBgY1xuXHRpZiAoKGN1ci1cdTAwM2VmbGNfZmxhZ3MgXHUwMDI2IEZMX09GRExDSykgXHUwMDI2XHUwMDI2IHByb2NfcGlkbnMgIT0gXHUwMDI2aW5pdF9waWRfbnMpIHtcblx0XHRzdHJ1Y3QgcGlkICpwaWQ7XG5cdFx0Ym9vbCB2aXNpYmxlID0gZmFsc2U7XG5cblx0XHRyY3VfcmVhZF9sb2NrKCk7XG5cdFx0cGlkID0gZmluZF9waWRfbnMoY3VyLVx1MDAzZWZsY19waWQsIFx1MDAyNmluaXRfcGlkX25zKTtcblx0XHRpZiAocGlkKVxuXHRcdFx0dmlzaWJsZSA9IHBpZF9ucl9ucyhwaWQsIHByb2NfcGlkbnMpICE9IDA7XG5cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG5cdFx0aWYgKCF2aXNpYmxlKVxuXHRcdFx0cmV0dXJuIDA7XG5cdH1cbmBgYFxuXG5JZiBpdCdzIGFuIE9GRCBsb2NrIGFuZCB3ZSdyZSBub3QgaW4gdGhlIGluaXRpYWwgUElEIG5hbWVzcGFjZSwgdGhlIGNvZGUgdGhlbiBsb29rcyB1cCB0aGUgUElEIGFzc29jaWF0ZWQgd2l0aCB0aGUgYGZsY19waWRgICh3aGljaCBpcyB0aGUgb3duZXIncyB0Z2lkKSB3aXRoaW4gdGhlIGluaXRpYWwgUElEIG5hbWVzcGFjZS4gIElmIGl0IGZpbmRzIGEgUElEIGFuZCB0aGF0IFBJRCBpc24ndCB2aXNpYmxlIGluIHRoZSBjdXJyZW50IGBwcm9jX3BpZG5zYCwgdGhlbiB0aGUgcGF0Y2ggaXMgZ29pbmcgdG8gc2tpcCB0aGUgY3VycmVudCBsb2NrIGFuZCByZXR1cm4gMC4gVGhpcyBzdWdnZXN0cyB3ZSBhcmUgZmlsdGVyaW5nLCBhbmQgd2UgZG9uJ3Qgd2FudCB0byBkaXNwbGF5IGxvY2tzIHdob3NlIG93bmVyIGlzIG5vdCB2aXNpYmxlIHRvIHRoZSBjdXJyZW50IFBJRCBuYW1lc3BhY2UuXG5cbkkgdGhpbmsgSSBuZWVkIHRvIHVzZSBlaXRoZXIgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGZpbmQgb3V0IHdoYXQgdGhlc2UgbmFtZXNwYWNlcyBhcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMjUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjozMTowMS41MzkzMzE2NjNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODc4OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvbG9ja3MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMDEwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMDEwOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjMwMTE6XFx0XFx0fVxcbjMwMTI6XFx0XFxuMzAxMzpcXHRcXHRyZXR1cm4gdG1wO1xcbjMwMTQ6XFx0fVxcbjMwMTU6XFx0XFxuMzAxNjpcXHRzdGF0aWMgaW50IGxvY2tzX3Nob3coc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICp2KVxcbjMwMTc6XFx0e1xcbjMwMTg6XFx0XFx0c3RydWN0IGxvY2tzX2l0ZXJhdG9yICppdGVyID0gZi1cXHUwMDNlcHJpdmF0ZTtcXG4zMDE5OlxcdFxcdHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqY3VyLCAqdG1wO1xcbjMwMjA6XFx0XFx0c3RydWN0IHBpZF9uYW1lc3BhY2UgKnByb2NfcGlkbnMgPSBwcm9jX3BpZF9ucyhmaWxlX2lub2RlKGYtXFx1MDAzZWZpbGUpLVxcdTAwM2VpX3NiKTtcXG4zMDIxOlxcdFxcdGludCBsZXZlbCA9IDA7XFxuMzAyMjpcXHRcXG4zMDIzOlxcdFxcdGN1ciA9IGhsaXN0X2VudHJ5KHYsIHN0cnVjdCBmaWxlX2xvY2tfY29yZSwgZmxjX2xpbmspO1xcbjMwMjQ6XFx0XFxuMzAyNTpcXHRcXHQvKlxcbjMwMjY6XFx0XFx0ICogT0ZEIGxvY2tzIGFyZSByZXBvcnRlZCB3aXRoIHBpZCAtMSwgc28gdGhlIGZpbHRlciBiZWxvdyBjYW5ub3Qgc2VlXFxuMzAyNzpcXHRcXHQgKiB0aGVpciBvd25lcjsgZmxjX3BpZCBob2xkcyB0aGUgb3duZXIgdGdpZCwgc28gZmlsdGVyIG9uIGl0LlxcbjMwMjg6XFx0XFx0ICovXFxuMzAyOTpcXHRcXHRpZiAoKGN1ci1cXHUwMDNlZmxjX2ZsYWdzIFxcdTAwMjYgRkxfT0ZETENLKSBcXHUwMDI2XFx1MDAyNiBwcm9jX3BpZG5zICE9IFxcdTAwMjZpbml0X3BpZF9ucykge1xcbjMwMzA6XFx0XFx0XFx0c3RydWN0IHBpZCAqcGlkO1xcbjMwMzE6XFx0XFx0XFx0Ym9vbCB2aXNpYmxlID0gZmFsc2U7XFxuMzAzMjpcXHRcXG4zMDMzOlxcdFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4zMDM0OlxcdFxcdFxcdHBpZCA9IGZpbmRfcGlkX25zKGN1ci1cXHUwMDNlZmxjX3BpZCwgXFx1MDAyNmluaXRfcGlkX25zKTtcXG4zMDM1OlxcdFxcdFxcdGlmIChwaWQpXFxuMzAzNjpcXHRcXHRcXHRcXHR2aXNpYmxlID0gcGlkX25yX25zKHBpZCwgcHJvY19waWRucykgIT0gMDtcXG4zMDM3OlxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjMwMzg6XFx0XFx0XFx0aWYgKCF2aXNpYmxlKVxcbjMwMzk6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuMzA0MDpcXHRcXHR9XFxuMzA0MTpcXHRcXG4zMDQyOlxcdFxcdGlmIChsb2Nrc190cmFuc2xhdGVfcGlkKGN1ciwgcHJvY19waWRucykgPT0gMClcXG4zMDQzOlxcdFxcdFxcdHJldHVybiAwO1xcbjMwNDQ6XFx0XFxuMzA0NTpcXHRcXHQvKiBWaWV3IHRoaXMgY3Jvc3NlZCBsaW5rZWQgbGlzdCBhcyBhIGJpbmFyeSB0cmVlLCB0aGUgZmlyc3QgbWVtYmVyIG9mIGZsY19ibG9ja2VkX3JlcXVlc3RzXFxuMzA0NjpcXHRcXHQgKiBpcyB0aGUgbGVmdCBjaGlsZCBvZiBjdXJyZW50IG5vZGUsIHRoZSBuZXh0IHNpbGliaW5nIGluIGZsY19ibG9ja2VkX21lbWJlciBpcyB0aGVcXG4zMDQ3OlxcdFxcdCAqIHJpZ2h0IGNoaWxkLCB3ZSBjYW4gYWxzZSBnZXQgdGhlIHBhcmVudCBvZiBjdXJyZW50IG5vZGUgZnJvbSBmbGNfYmxvY2tlciwgc28gdGhpc1xcbjMwNDg6XFx0XFx0ICogcXVlc3Rpb24gYmVjb21lcyB0cmF2ZXJzYWwgb2YgYSBiaW5hcnkgdHJlZVxcbjMwNDk6XFx0XFx0ICovXFxuMzA1MDpcXHRcXHR3aGlsZSAoY3VyICE9IE5VTEwpIHtcXG4zMDUxOlxcdFxcdFxcdGlmIChsZXZlbClcXG4zMDUyOlxcdFxcdFxcdFxcdGxvY2tfZ2V0X3N0YXR1cyhmLCBjdXIsIGl0ZXItXFx1MDAzZWxpX3BvcywgXFxcIi1cXHUwMDNlIFxcXCIsIGxldmVsKTtcXG4zMDUzOlxcdFxcdFxcdGVsc2VcXG4zMDU0OlxcdFxcdFxcdFxcdGxvY2tfZ2V0X3N0YXR1cyhmLCBjdXIsIGl0ZXItXFx1MDAzZWxpX3BvcywgXFxcIlxcXCIsIGxldmVsKTtcXG4zMDU1OlxcdFxcbjMwNTY6XFx0XFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZjdXItXFx1MDAzZWZsY19ibG9ja2VkX3JlcXVlc3RzKSkge1xcbjMwNTc6XFx0XFx0XFx0XFx0LyogVHVybiBsZWZ0ICovXFxuMzA1ODpcXHRcXHRcXHRcXHRjdXIgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoXFx1MDAyNmN1ci1cXHUwMDNlZmxjX2Jsb2NrZWRfcmVxdWVzdHMsXFxuMzA1OTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGZpbGVfbG9ja19jb3JlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjozMTowMS41Mzk1MjExNjNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODY3Mjc2NjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBsb2NrIHNpdHVhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhbmRzY2FwZSwgc28gbXkgZmlyc3QgbW92ZSBpcyB0byBpZGVudGlmeSB0aGUgdXNhZ2Ugb2YgYGxvY2tzX3Nob3dgLiBJIHdhbnQgdG8gc2VlICp3aGVyZSogaXQncyBiZWluZyBjYWxsZWQgaW4gdGhlIGNvZGViYXNlLCBhbmQgdGhlbiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBwcmVjaXNlbHkgKmhvdyogdGhlIGAvcHJvYy9sb2Nrc2AgaW50ZXJmYWNlIGZ1bmN0aW9ucy4gVGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlc2UgdHdvIGlzIGNyaXRpY2FsLlxuXG5UbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEknbSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gYGZzL2xvY2tzLmNgLiBJIGV4cGVjdCB0aGUgY29yZSBsb2dpYyBpcyB0aGVyZS4gSSdsbCB6ZXJvIGluIG9uIGxpbmVzIGFyb3VuZCAzMDAwIHRvIDMxMDAuIFRoYXQncyBhIHJlYXNvbmFibGUgcmFuZ2UgdG8gZmluZCB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbnMgYW5kIHJlbGV2YW50IHN1cHBvcnRpbmcgY29kZS4gSG9wZWZ1bGx5LCB0aGF0IHdpbGwgZ2l2ZSBtZSBlbm91Z2ggaW5mb3JtYXRpb24gdG8gd29yayB3aXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTM5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjozMTowMy40MDY4MDA3OTNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTQzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvbG9ja3MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMDYwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMDYwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBmbGNfYmxvY2tlZF9tZW1iZXIpO1xcbjMwNjE6XFx0XFx0XFx0XFx0bGV2ZWwrKztcXG4zMDYyOlxcdFxcdFxcdH0gZWxzZSB7XFxuMzA2MzpcXHRcXHRcXHRcXHQvKiBUdXJuIHJpZ2h0ICovXFxuMzA2NDpcXHRcXHRcXHRcXHR0bXAgPSBnZXRfbmV4dF9ibG9ja2VkX21lbWJlcihjdXIpO1xcbjMwNjU6XFx0XFx0XFx0XFx0LyogRmFsbCBiYWNrIHRvIHBhcmVudCBub2RlICovXFxuMzA2NjpcXHRcXHRcXHRcXHR3aGlsZSAodG1wID09IE5VTEwgXFx1MDAyNlxcdTAwMjYgY3VyLVxcdTAwM2VmbGNfYmxvY2tlciAhPSBOVUxMKSB7XFxuMzA2NzpcXHRcXHRcXHRcXHRcXHRjdXIgPSBjdXItXFx1MDAzZWZsY19ibG9ja2VyO1xcbjMwNjg6XFx0XFx0XFx0XFx0XFx0bGV2ZWwtLTtcXG4zMDY5OlxcdFxcdFxcdFxcdFxcdHRtcCA9IGdldF9uZXh0X2Jsb2NrZWRfbWVtYmVyKGN1cik7XFxuMzA3MDpcXHRcXHRcXHRcXHR9XFxuMzA3MTpcXHRcXHRcXHRcXHRjdXIgPSB0bXA7XFxuMzA3MjpcXHRcXHRcXHR9XFxuMzA3MzpcXHRcXHR9XFxuMzA3NDpcXHRcXG4zMDc1OlxcdFxcdHJldHVybiAwO1xcbjMwNzY6XFx0fVxcbjMwNzc6XFx0XFxuMzA3ODpcXHRzdGF0aWMgdm9pZCBfX3Nob3dfZmRfbG9ja3Moc3RydWN0IHNlcV9maWxlICpmLFxcbjMwNzk6XFx0XFx0XFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgaW50ICppZCxcXG4zMDgwOlxcdFxcdFxcdFxcdHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgZmlsZXNfc3RydWN0ICpmaWxlcylcXG4zMDgxOlxcdHtcXG4zMDgyOlxcdFxcdHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqZmw7XFxuMzA4MzpcXHRcXG4zMDg0OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoZmwsIGhlYWQsIGZsY19saXN0KSB7XFxuMzA4NTpcXHRcXG4zMDg2OlxcdFxcdFxcdGlmIChmaWxwICE9IGZsLVxcdTAwM2VmbGNfZmlsZSlcXG4zMDg3OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjMwODg6XFx0XFx0XFx0aWYgKGZsLVxcdTAwM2VmbGNfb3duZXIgIT0gZmlsZXMgXFx1MDAyNlxcdTAwMjYgZmwtXFx1MDAzZWZsY19vd25lciAhPSBmaWxwKVxcbjMwODk6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMzA5MDpcXHRcXG4zMDkxOlxcdFxcdFxcdCgqaWQpKys7XFxuMzA5MjpcXHRcXHRcXHRzZXFfcHV0cyhmLCBcXFwibG9jazpcXFxcdFxcXCIpO1xcbjMwOTM6XFx0XFx0XFx0bG9ja19nZXRfc3RhdHVzKGYsIGZsLCAqaWQsIFxcXCJcXFwiLCAwKTtcXG4zMDk0OlxcdFxcdH1cXG4zMDk1OlxcdH1cXG4zMDk2OlxcdFxcbjMwOTc6XFx0dm9pZCBzaG93X2ZkX2xvY2tzKHN0cnVjdCBzZXFfZmlsZSAqZixcXG4zMDk4OlxcdFxcdFxcdCAgc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBmaWxlc19zdHJ1Y3QgKmZpbGVzKVxcbjMwOTk6XFx0e1xcbjMxMDA6XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlscCk7XFxuMzEwMTpcXHRcXHRzdHJ1Y3QgZmlsZV9sb2NrX2NvbnRleHQgKmN0eDtcXG4zMTAyOlxcdFxcdGludCBpZCA9IDA7XFxuMzEwMzpcXHRcXG4zMTA0OlxcdFxcdGN0eCA9IGxvY2tzX2lub2RlX2NvbnRleHQoaW5vZGUpO1xcbjMxMDU6XFx0XFx0aWYgKCFjdHgpXFxuMzEwNjpcXHRcXHRcXHRyZXR1cm47XFxuMzEwNzpcXHRcXG4zMTA4OlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2Y3R4LVxcdTAwM2VmbGNfbG9jayk7XFxuMzEwOTpcXHRcXHRfX3Nob3dfZmRfbG9ja3MoZiwgXFx1MDAyNmN0eC1cXHUwMDNlZmxjX2Zsb2NrLCBcXHUwMDI2aWQsIGZpbHAsIGZpbGVzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MzE6MDMuNDA3MTI3NDAzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA2NzY1NDY2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqTmF2aWdhdGluZyB0aGUgTGludXggS2VybmVsJ3MgTG9ja2luZyBNZWNoYW5pc20qKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IHBvaW50IGluIHRoZSBrZXJuZWwgd2hlcmUgdGhlIGAvcHJvYy9sb2Nrc2AgaW50ZXJmYWNlIGlzIHJlZ2lzdGVyZWQuIE15IGh1bmNoIGlzIHRoYXQgdGhlIGZpbGUgc3lzdGVtIGxheWVyLCBwYXJ0aWN1bGFybHkgYGZzL2xvY2tzLmNgLCBpcyB0aGUgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy4gSSB3YW50IHRvIHRyYWNlIHRoZSBwYXRoIGZyb20gdGhlIGAvcHJvY2AgZmlsZXN5c3RlbSBlbnRyeSB0byB0aGUgdW5kZXJseWluZyBsb2NraW5nIGRhdGEgc3RydWN0dXJlcy4gS25vd2luZyB3aGVyZSBpdCdzIHJlZ2lzdGVyZWQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBrZXJuZWwgZXhwb3NlcyBhbmQgbWFuYWdlcyBsb2NrIGluZm9ybWF0aW9uIGZvciB1c2VyLXNwYWNlIGFwcGxpY2F0aW9ucy4gSXQncyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgYW5hbHl6aW5nIHRoZSBrZXJuZWwncyBsb2NraW5nIGJlaGF2aW9yLCBhbmQgYGZzL2xvY2tzLmNgIHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIG15IGludmVzdGlnYXRpb24uIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4NzgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjMxOjA1LjQ3NDc4NDk1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM4NzQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9sb2Nrcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMxMTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMxMTA6XFx0XFx0X19zaG93X2ZkX2xvY2tzKGYsIFxcdTAwMjZjdHgtXFx1MDAzZWZsY19wb3NpeCwgXFx1MDAyNmlkLCBmaWxwLCBmaWxlcyk7XFxuMzExMTpcXHRcXHRfX3Nob3dfZmRfbG9ja3MoZiwgXFx1MDAyNmN0eC1cXHUwMDNlZmxjX2xlYXNlLCBcXHUwMDI2aWQsIGZpbHAsIGZpbGVzKTtcXG4zMTEyOlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZjdHgtXFx1MDAzZWZsY19sb2NrKTtcXG4zMTEzOlxcdH1cXG4zMTE0OlxcdFxcbjMxMTU6XFx0c3RhdGljIHZvaWQgKmxvY2tzX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqZiwgbG9mZl90ICpwb3MpXFxuMzExNjpcXHRcXHRfX2FjcXVpcmVzKFxcdTAwMjZibG9ja2VkX2xvY2tfbG9jaylcXG4zMTE3OlxcdHtcXG4zMTE4OlxcdFxcdHN0cnVjdCBsb2Nrc19pdGVyYXRvciAqaXRlciA9IGYtXFx1MDAzZXByaXZhdGU7XFxuMzExOTpcXHRcXG4zMTIwOlxcdFxcdGl0ZXItXFx1MDAzZWxpX3BvcyA9ICpwb3MgKyAxO1xcbjMxMjE6XFx0XFx0cGVyY3B1X2Rvd25fd3JpdGUoXFx1MDAyNmZpbGVfcndzZW0pO1xcbjMxMjI6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZibG9ja2VkX2xvY2tfbG9jayk7XFxuMzEyMzpcXHRcXHRyZXR1cm4gc2VxX2hsaXN0X3N0YXJ0X3BlcmNwdShcXHUwMDI2ZmlsZV9sb2NrX2xpc3QuaGxpc3QsIFxcdTAwMjZpdGVyLVxcdTAwM2VsaV9jcHUsICpwb3MpO1xcbjMxMjQ6XFx0fVxcbjMxMjU6XFx0XFxuMzEyNjpcXHRzdGF0aWMgdm9pZCAqbG9ja3NfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKVxcbjMxMjc6XFx0e1xcbjMxMjg6XFx0XFx0c3RydWN0IGxvY2tzX2l0ZXJhdG9yICppdGVyID0gZi1cXHUwMDNlcHJpdmF0ZTtcXG4zMTI5OlxcdFxcbjMxMzA6XFx0XFx0KytpdGVyLVxcdTAwM2VsaV9wb3M7XFxuMzEzMTpcXHRcXHRyZXR1cm4gc2VxX2hsaXN0X25leHRfcGVyY3B1KHYsIFxcdTAwMjZmaWxlX2xvY2tfbGlzdC5obGlzdCwgXFx1MDAyNml0ZXItXFx1MDAzZWxpX2NwdSwgcG9zKTtcXG4zMTMyOlxcdH1cXG4zMTMzOlxcdFxcbjMxMzQ6XFx0c3RhdGljIHZvaWQgbG9ja3Nfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIHZvaWQgKnYpXFxuMzEzNTpcXHRcXHRfX3JlbGVhc2VzKFxcdTAwMjZibG9ja2VkX2xvY2tfbG9jaylcXG4zMTM2OlxcdHtcXG4zMTM3OlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZibG9ja2VkX2xvY2tfbG9jayk7XFxuMzEzODpcXHRcXHRwZXJjcHVfdXBfd3JpdGUoXFx1MDAyNmZpbGVfcndzZW0pO1xcbjMxMzk6XFx0fVxcbjMxNDA6XFx0XFxuMzE0MTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGxvY2tzX3NlcV9vcGVyYXRpb25zID0ge1xcbjMxNDI6XFx0XFx0LnN0YXJ0XFx0PSBsb2Nrc19zdGFydCxcXG4zMTQzOlxcdFxcdC5uZXh0XFx0PSBsb2Nrc19uZXh0LFxcbjMxNDQ6XFx0XFx0LnN0b3BcXHQ9IGxvY2tzX3N0b3AsXFxuMzE0NTpcXHRcXHQuc2hvd1xcdD0gbG9ja3Nfc2hvdyxcXG4zMTQ2OlxcdH07XFxuMzE0NzpcXHRcXG4zMTQ4OlxcdHN0YXRpYyBpbnQgX19pbml0IHByb2NfbG9ja3NfaW5pdCh2b2lkKVxcbjMxNDk6XFx0e1xcbjMxNTA6XFx0XFx0cHJvY19jcmVhdGVfc2VxX3ByaXZhdGUoXFxcImxvY2tzXFxcIiwgMCwgTlVMTCwgXFx1MDAyNmxvY2tzX3NlcV9vcGVyYXRpb25zLFxcbjMxNTE6XFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBsb2Nrc19pdGVyYXRvciksIE5VTEwpO1xcbjMxNTI6XFx0XFx0cmV0dXJuIDA7XFxuMzE1MzpcXHR9XFxuMzE1NDpcXHRmc19pbml0Y2FsbChwcm9jX2xvY2tzX2luaXQpO1xcbjMxNTU6XFx0I2VuZGlmXFxuMzE1NjpcXHRcXG4zMTU3OlxcdHN0YXRpYyBpbnQgX19pbml0IGZpbGVsb2NrX2luaXQodm9pZClcXG4zMTU4OlxcdHtcXG4zMTU5OlxcdFxcdGludCBpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjozMTowNS40NzcxNzU2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzAwODk4Nzg2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIE1hY3JvIFVzYWdlIGluIFRoaXMgQ29kZWJhc2UqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gY29udGV4dCBmb3IgYHByb2NfbG9ja3NfaW5pdGAgYW5kIGBsb2Nrc19zaG93YC4gTGV0J3Mgc3RlcCB0aHJvdWdoIHRoaXMgbWV0aG9kaWNhbGx5LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgYCNpZmRlZmAgZGlyZWN0aXZlcyB0aGF0IG1pZ2h0IGNvbnRyb2wgdGhlaXIgaW5jbHVzaW9uLiBJJ2xsIG5lZWQgdG8gd29yayBiYWNrd2FyZCB0aHJvdWdoIHRoZSBmaWxlLCBzdGFydGluZyB3aXRoIHRoZXNlIGZ1bmN0aW9ucy4gVGhlIGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgKndoeSogdGhlc2UgZnVuY3Rpb25zIG1pZ2h0IGJlIHNlbGVjdGl2ZWx5IGNvbXBpbGVkLiBBcmUgd2UgZGVhbGluZyB3aXRoIGZlYXR1cmUgZmxhZ3MsIGRpZmZlcmVudCBoYXJkd2FyZSBwbGF0Zm9ybXMsIGRlYnVnIG1vZGVzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQSBxdWljayBzZWFyY2ggZm9yIHRoZSBtYWNybyBkZWZpbml0aW9ucyBzdXJyb3VuZGluZyB0aGVzZSBmdW5jdGlvbiBjYWxscyBzaG91bGQgcmV2ZWFsIHRoZSBkZXBlbmRlbmN5LiBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODc5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjozMTowOC40ODYxNzY2NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM4NzQwMzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNpZi4qUFJPQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9sb2Nrcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2xvY2tzLmM9MjkxMD1FWFBPUlRfU1lNQk9MX0dQTCh2ZnNfaW5vZGVfaGFzX2xvY2tzKTtcXG5mcy9sb2Nrcy5jLTI5MTEtXFxuZnMvbG9ja3MuYzoyOTEyOiNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbmZzL2xvY2tzLmMtMjkxMy0jaW5jbHVkZSBcXHUwMDNjbGludXgvcHJvY19mcy5oXFx1MDAzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjozMTowOS4xMjQ5MjI4NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTU1MTQwOTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBmcy9sb2Nrcy5jYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gdGhpbmtpbmcsIGJhc2VkIG9uIHRoZSBjb250ZXh0LCB0aGF0IHRoZSBpc3N1ZSBsaWtlbHkgcmVzaWRlcyB3aXRoaW4gYGZzL2xvY2tzLmNgLiBTcGVjaWZpY2FsbHksIEknbSB6ZXJvaW5nIGluIG9uIHRoZSBhcmVhIGFyb3VuZCBsaW5lIDI5MTIuIFRoYXQgbG9jYXRpb24gaXMgdXN1YWxseSB3aGVyZSB0aGUgY29kZSBoYW5kbGVzLi4uIHdlbGwsIGl0J3Mgd2hlcmUgdGhlIGltcGxlbWVudGF0aW9uIGZvciBbaW5zZXJ0IHJlbGV2YW50IGxvY2sgcmVsYXRlZCBmdW5jdGlvbmFsaXR5IHRoZSBleHBlcnQgd291bGQga25vdywgZS5nLiwgdGhlIHNwZWNpZmljIGxvY2tpbmcgbWVjaGFuaXNtLCBhIHBhcnRpY3VsYXIgZXJyb3IgY29uZGl0aW9uLCBvciBhIHJlbGF0ZWQgZnVuY3Rpb24gY2FsbCwgZGVwZW5kaW5nIG9uIGNvbnRleHRdLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBvYnNlcnZlZCBiZWhhdmlvciBpbiB0aGF0IHBhcnRpY3VsYXIgc2VjdGlvbi4gSSdsbCBuZWVkIHRvIGNhcmVmdWxseSBhbmFseXplIHRoZSBjb2RlIGFyb3VuZCB0aGF0IHBvaW50LCBsb29raW5nIGZvciBob3cgW21lbnRpb24gc29tZXRoaW5nIHJlbGV2YW50IHRvIGxvb2sgZm9yLCBlLmcuLCB0aGUgbG9jayBpcyBhY3F1aXJlZC9yZWxlYXNlZCwgdGhlIHN0YXRlIGlzIHRyYW5zaXRpb25lZCwgb3IgYSBzcGVjaWZpYyB2YWx1ZSBpcyBoYW5kbGVkXS4gVGhlIGRldmlsIGlzIGFsd2F5cyBpbiB0aGUgZGV0YWlscywgc28gbGV0J3Mgc3RhcnQgcmVhZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE4NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjMxOjExLjI4MDA2NzMzNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY5MDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2xvY2tzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjkxMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjkxMDpcXHRFWFBPUlRfU1lNQk9MX0dQTCh2ZnNfaW5vZGVfaGFzX2xvY2tzKTtcXG4yOTExOlxcdFxcbjI5MTI6XFx0I2lmZGVmIENPTkZJR19QUk9DX0ZTXFxuMjkxMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcHJvY19mcy5oXFx1MDAzZVxcbjI5MTQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NlcV9maWxlLmhcXHUwMDNlXFxuMjkxNTpcXHRcXG4yOTE2OlxcdHN0cnVjdCBsb2Nrc19pdGVyYXRvciB7XFxuMjkxNzpcXHRcXHRpbnRcXHRsaV9jcHU7XFxuMjkxODpcXHRcXHRsb2ZmX3RcXHRsaV9wb3M7XFxuMjkxOTpcXHR9O1xcbjI5MjA6XFx0XFxuMjkyMTpcXHRzdGF0aWMgdm9pZCBsb2NrX2dldF9zdGF0dXMoc3RydWN0IHNlcV9maWxlICpmLCBzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmZsYyxcXG4yOTIyOlxcdFxcdFxcdFxcdCAgICBsb2ZmX3QgaWQsIGNoYXIgKnBmeCwgaW50IHJlcGVhdClcXG4yOTIzOlxcdHtcXG4yOTI0OlxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMO1xcbjI5MjU6XFx0XFx0dW5zaWduZWQgaW50IHBpZDtcXG4yOTI2OlxcdFxcdHN0cnVjdCBwaWRfbmFtZXNwYWNlICpwcm9jX3BpZG5zID0gcHJvY19waWRfbnMoZmlsZV9pbm9kZShmLVxcdTAwM2VmaWxlKS1cXHUwMDNlaV9zYik7XFxuMjkyNzpcXHRcXHRpbnQgdHlwZSA9IGZsYy1cXHUwMDNlZmxjX3R5cGU7XFxuMjkyODpcXHRcXHRzdHJ1Y3QgZmlsZV9sb2NrICpmbCA9IGZpbGVfbG9jayhmbGMpO1xcbjI5Mjk6XFx0XFxuMjkzMDpcXHRcXHRwaWQgPSBsb2Nrc190cmFuc2xhdGVfcGlkKGZsYywgcHJvY19waWRucyk7XFxuMjkzMTpcXHRcXG4yOTMyOlxcdFxcdC8qXFxuMjkzMzpcXHRcXHQgKiBJZiBsb2NrIG93bmVyIGlzIGRlYWQgKGFuZCBwaWQgaXMgZnJlZWQpIG9yIG5vdCB2aXNpYmxlIGluIGN1cnJlbnRcXG4yOTM0OlxcdFxcdCAqIHBpZG5zLCB6ZXJvIGlzIHNob3duIGFzIGEgcGlkIHZhbHVlLiBDaGVjayBsb2NrIGluZm8gZnJvbVxcbjI5MzU6XFx0XFx0ICogaW5pdF9waWRfbnMgdG8gZ2V0IHNhdmVkIGxvY2sgcGlkIHZhbHVlLlxcbjI5MzY6XFx0XFx0ICovXFxuMjkzNzpcXHRcXHRpZiAoZmxjLVxcdTAwM2VmbGNfZmlsZSAhPSBOVUxMKVxcbjI5Mzg6XFx0XFx0XFx0aW5vZGUgPSBmaWxlX2lub2RlKGZsYy1cXHUwMDNlZmxjX2ZpbGUpO1xcbjI5Mzk6XFx0XFxuMjk0MDpcXHRcXHRzZXFfcHJpbnRmKGYsIFxcXCIlbGxkOiBcXFwiLCBpZCk7XFxuMjk0MTpcXHRcXG4yOTQyOlxcdFxcdGlmIChyZXBlYXQpXFxuMjk0MzpcXHRcXHRcXHRzZXFfcHJpbnRmKGYsIFxcXCIlKnNcXFwiLCByZXBlYXQgLSAxICsgKGludClzdHJsZW4ocGZ4KSwgcGZ4KTtcXG4yOTQ0OlxcdFxcbjI5NDU6XFx0XFx0aWYgKGZsYy1cXHUwMDNlZmxjX2ZsYWdzIFxcdTAwMjYgRkxfUE9TSVgpIHtcXG4yOTQ2OlxcdFxcdFxcdGlmIChmbGMtXFx1MDAzZWZsY19mbGFncyBcXHUwMDI2IEZMX0FDQ0VTUylcXG4yOTQ3OlxcdFxcdFxcdFxcdHNlcV9wdXRzKGYsIFxcXCJBQ0NFU1NcXFwiKTtcXG4yOTQ4OlxcdFxcdFxcdGVsc2UgaWYgKGZsYy1cXHUwMDNlZmxjX2ZsYWdzIFxcdTAwMjYgRkxfT0ZETENLKVxcbjI5NDk6XFx0XFx0XFx0XFx0c2VxX3B1dHMoZiwgXFxcIk9GRExDS1xcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjozMToxMS4yODEyNDAxNTVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjExMTI3Mzk3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2U6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgRmlsZSBMb2NraW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIGZpbGUgbG9ja2luZywgc3BlY2lmaWNhbGx5LCBob3cgaXQncyBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUga2VybmVsLiBNeSBjdXJyZW50IGh1bmNoIGlzIHRoYXQgYGZzL2xvY2tzLmNgIGlzIG9ubHkgY29tcGlsZWQgaW50byB0aGUga2VybmVsIHdoZW4gdGhlIGBDT05GSUdfRklMRV9MT0NLSU5HYCBvcHRpb24gaXMgZW5hYmxlZC4gVGhhdCBmZWVscyBsb2dpY2FsLCBhIGNvbW1vbiBwYXR0ZXJuIGluIGtlcm5lbCBidWlsZCBzeXN0ZW1zLiBUbyBjb25maXJtIHRoYXQgaHlwb3RoZXNpcywgdGhlIGZpcnN0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24g4oCTIHNwZWNpZmljYWxseSwgdGhlIGBmcy9NYWtlZmlsZWAuIEl0J2xsIGNsZWFybHkgb3V0bGluZSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzIGZvciB0aGlzIHBhcnRpY3VsYXIgbW9kdWxlLCBsZXR0aW5nIG1lIHZlcmlmeSB0aGUgbGluayBiZXR3ZWVuIHRoZSBjb2RlIGFuZCB0aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGRlcGVuZGVuY2llcyBJIHNob3VsZCBiZSBhd2FyZSBvZi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzExNCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MzE6MTMuMzkyNTE3NzdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5NDcyMjU2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsb2Nrc1xcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvTWFrZWZpbGU9MzM9b2JqLSQoQ09ORklHX0ZTX1ZFUklUWSlcXHRcXHQrPSB2ZXJpdHkvXFxuZnMvTWFrZWZpbGU6MzQ6b2JqLSQoQ09ORklHX0ZJTEVfTE9DS0lORykgICAgICArPSBsb2Nrcy5vXFxuZnMvTWFrZWZpbGUtMzUtb2JqLSQoQ09ORklHX0JJTkZNVF9NSVNDKVxcdCs9IGJpbmZtdF9taXNjLm9cXG4tLVxcbmZzL2NlcGgvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfQ0VQSF9GUykgKz0gY2VwaC5vXFxuZnMvY2VwaC9NYWtlZmlsZS03LVxcbmZzL2NlcGgvTWFrZWZpbGU6ODpjZXBoLXkgOj0gc3VwZXIubyBpbm9kZS5vIGRpci5vIGZpbGUubyBsb2Nrcy5vIGFkZHIubyBpb2N0bC5vIFxcXFxcXG5mcy9jZXBoL01ha2VmaWxlLTktXFx0ZXhwb3J0Lm8gY2Fwcy5vIHNuYXAubyB4YXR0ci5vIHF1b3RhLm8gaW8ubyBcXFxcXFxuLS1cXG5mcy9vY2ZzMi9NYWtlZmlsZT0xMT1vY2ZzMi1vYmpzIDo9IFxcXFxcXG4tLVxcbmZzL29jZnMyL01ha2VmaWxlLTI2LVxcdGxvY2FsYWxsb2MubyBcXHRcXHRcXFxcXFxuZnMvb2NmczIvTWFrZWZpbGU6Mjc6XFx0bG9ja3Mub1xcdFxcdFxcdFxcXFxcXG5mcy9vY2ZzMi9NYWtlZmlsZS0yOC1cXHRtbWFwLm8gXFx0XFx0XFx0XFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjozMToxNC4zODcyNDg1MTRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI4OTY4NTUzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSBhIGZldyBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBGaXJzdCwgSSdsbCBqdW1wIGludG8gdGhlIEtjb25maWcgZmlsZXMuIEkgbmVlZCB0byB2ZXJpZnkgdGhlIHN0YXRlIG9mIHRocmVlIHBhcnRpY3VsYXIgb3B0aW9uczogYEZJTEVfTE9DS0lOR2AsIGBQUk9DX0ZTYCwgYW5kIGBQSURfTlNgLiBUaGVzZSBhcmUgZnVuZGFtZW50YWwsIGFuZCBpdCdzIGFsd2F5cyBhIGdvb2QgaWRlYSB0byBkb3VibGUtY2hlY2sgdGhlaXIgc3RhdHVzIGJlZm9yZSBtb3Zpbmcgb24uIExldCdzIHN0YXJ0IHdpdGggYEZJTEVfTE9DS0lOR2AgYW5kIHNlYXJjaCBmb3IgdGhhdCBpbiB0aGUgS2NvbmZpZyBmaWxlcy4gVGhhdCB3aWxsIGJlIHRoZSBzdGFydGluZyBwb2ludCB0byBnZXQgbXkgYmVhcmluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1OTQsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjozMToxNi42NzY5MzY3NzZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjUxOTA2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRklMRV9MT0NLSU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTEwOD1jb25maWcgRVhQT1JURlNfQkxPQ0tfT1BTXFxuLS1cXG5mcy9LY29uZmlnLTExMy1cXG5mcy9LY29uZmlnOjExNDpjb25maWcgRklMRV9MT0NLSU5HXFxuZnMvS2NvbmZpZy0xMTUtXFx0Ym9vbCBcXFwiRW5hYmxlIFBPU0lYIGZpbGUgbG9ja2luZyBBUElcXFwiIGlmIEVYUEVSVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjozMToxNi44Mjk0NjAzMzRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQxODE1OTAzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgbGV0J3MgemVybyBpbiBvbiBhIHNwZWNpZmljIGFyZWEgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwgY29uZmlndXJhdGlvbiBzeXN0ZW0uIEknbSBnb2luZyB0byBuYXZpZ2F0ZSB0byB0aGUgYGZzL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMTQuIFRoYXQgbG9jYXRpb24gbGlrZWx5IGhvbGRzIHNvbWUgY3J1Y2lhbCBkZWZpbml0aW9ucyBvciBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBmaWxlc3lzdGVtIGNvbmZpZ3VyYXRpb25zLiBJJ20gYW50aWNpcGF0aW5nIGZpbmRpbmcgZWl0aGVyIGEgcmVsZXZhbnQgbW9kdWxlJ3MgS2NvbmZpZyBmcmFnbWVudCBpbmNsdXNpb24sIGEgdG9wLWxldmVsIGNob2ljZSwgb3IgcGVyaGFwcyB0aGUgZGVmaW5pdGlvbiBvZiBhIHNwZWNpZmljIGZpbGVzeXN0ZW0ncyBzZXR0aW5ncy4gVGhlIGNvbnRleHQgb2YgYGZzL2Agc3VnZ2VzdHMgdGhpcyB3aWxsIGJlIHJlbGF0ZWQgdG8gZmlsZSBzeXN0ZW0gZmVhdHVyZXMsIG5vdCBnZW5lcmljIGtlcm5lbCBvcHRpb25zLiBNeSBleHBlcnRpc2UgdGVsbHMgbWUgdGhpcyBsaWtlbHkgcmVsYXRlcyB0byBob3cgdmFyaW91cyBmaWxlIHN5c3RlbSBvcHRpb25zIGxpa2UgWEZTLCBleHQ0LCBvciBldmVuIG5ldHdvcmsgZmlsZSBzeXN0ZW1zIGFyZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIgZHVyaW5nIHRoZSBrZXJuZWwgYnVpbGQgcHJvY2Vzcywgb3IgaG93IHRoZWlyIGRlcGVuZGVuY2llcyBhcmUgaGFuZGxlZC4gSSdtIHByZXBhcmluZyB0byBzZWUgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgdGhhdCBJIGFscmVhZHkgaGF2ZSBpbiBteSBoZWFkIGluIGFic3RyYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODU5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MzE6MTkuMjQ3NjIxNDc0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTEwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTEwOlxcdFxcdGhlbHBcXG4gMTExOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgZXhwb3J0IG9wZXJhdGlvbnMgZm9yIGEgZmlsZXN5c3RlbSB0byBzdXBwb3J0XFxuIDExMjpcXHRcXHQgIGV4dGVybmFsIGJsb2NrIElPLlxcbiAxMTM6XFx0XFxuIDExNDpcXHRjb25maWcgRklMRV9MT0NLSU5HXFxuIDExNTpcXHRcXHRib29sIFxcXCJFbmFibGUgUE9TSVggZmlsZSBsb2NraW5nIEFQSVxcXCIgaWYgRVhQRVJUXFxuIDExNjpcXHRcXHRkZWZhdWx0IHlcXG4gMTE3OlxcdFxcdGhlbHBcXG4gMTE4OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdGFuZGFyZCBmaWxlIGxvY2tpbmcgc3VwcG9ydCwgcmVxdWlyZWRcXG4gMTE5OlxcdFxcdCAgZm9yIGZpbGVzeXN0ZW1zIGxpa2UgTkZTIGFuZCBmb3IgdGhlIGZsb2NrKCkgc3lzdGVtXFxuIDEyMDpcXHRcXHQgIGNhbGwuIERpc2FibGluZyB0aGlzIG9wdGlvbiBzYXZlcyBhYm91dCAxMWsuXFxuIDEyMTpcXHRcXG4gMTIyOlxcdHNvdXJjZSBcXFwiZnMvY3J5cHRvL0tjb25maWdcXFwiXFxuIDEyMzpcXHRcXG4gMTI0OlxcdHNvdXJjZSBcXFwiZnMvdmVyaXR5L0tjb25maWdcXFwiXFxuIDEyNTpcXHRcXG4gMTI2OlxcdHNvdXJjZSBcXFwiZnMvbm90aWZ5L0tjb25maWdcXFwiXFxuIDEyNzpcXHRcXG4gMTI4OlxcdHNvdXJjZSBcXFwiZnMvcXVvdGEvS2NvbmZpZ1xcXCJcXG4gMTI5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjozMToxOS4yNDc3MDIxOTRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIxMDY1MjA3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgY3J1Y2lhbCBpbiB0aGlzIGNvbmZpZ3VyYXRpb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRvdWJsZS1jaGVjayB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBwcm9jZXNzIG5hbWVzcGFjZXMgYW5kIHRoZSBgL3Byb2NgIGZpbGVzeXN0ZW0uIFRoZXJlZm9yZSwgbGV0J3MgY2lyY2xlIGJhY2sgYW5kIGV4YW1pbmUgYENPTkZJR19QUk9DX0ZTYCBhbmQgYENPTkZJR19QSURfTlNgIOKAkyBJIHdhbnQgdG8gYmUgY2VydGFpbiB0aGUgcmVsZXZhbnQgZmVhdHVyZXMgYXJlIGVuYWJsZWQsIGFuZCBjb3JyZWN0bHkgY29uZmlndXJlZCwgYW5kIHRoYXQgSSdtIG5vdCBtaXNzaW5nIGFueSBjb25mbGljdHMuIFRoaXMgYWxzbyBtZWFucyBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYGluaXRfcGlkX25zYCB0byBnZXQgYSBnb29kIGhhbmRsZSBvbiBob3cgUElEIG5hbWVzcGFjZXMgYXJlIGluaXRpYWxpemVkIGFuZCBob3cgdGhleSBhcmUgaGFuZGxlZCBhdCB0aGUgdmVyeSBzdGFydCBvZiB0aGUgYm9vdCBwcm9jZXNzLiBGaW5hbGx5LCBhIHF1aWNrIHNlYXJjaCBpbiB0aGUgYGZzL3Byb2MvS2NvbmZpZ2AgYW5kIGBpbml0L0tjb25maWdgIGZpbGVzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZXNlIGZlYXR1cmVzIGFyZSBjb25kaXRpb25hbGx5IGVuYWJsZWQgYW5kIHRoZWlyIGRlcGVuZGVuY2llcy4gVGhpcyB3aWxsIGVuc3VyZSBJJ20gbm90IG92ZXJsb29raW5nIGFueSBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3IgcG90ZW50aWFsIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM3NSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MzE6MjEuNDU4MzU2ODc4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTE5MDQzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUElEX05TXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xNDQ2PWNvbmZpZyBVU0VSX05TXFxuLS1cXG5pbml0L0tjb25maWctMTQ1OS1cXG5pbml0L0tjb25maWc6MTQ2MDpjb25maWcgUElEX05TXFxuaW5pdC9LY29uZmlnLTE0NjEtXFx0Ym9vbCBcXFwiUElEIE5hbWVzcGFjZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjMxOjIxLjU0NzU1MTMxNloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjU3NTYxNzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgUHJvY2ZzIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBgL3Byb2NgIGZpbGVzeXN0ZW0uIFRpbWUgdG8gZGlnIGludG8gdGhlIGNvbmZpZ3VyYXRpb24uIExldCdzIHN0YXJ0IHdpdGggdGhlIG9idmlvdXM6IEknbGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGUgcHJvYyBmaWxlc3lzdGVtLiBTcGVjaWZpY2FsbHksIHRoYXQgc2hvdWxkIGJlIGBmcy9wcm9jL0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gSSdtIGFmdGVyLCBtb3N0IGxpa2VseSBuYW1lZCBzb21ldGhpbmcgbGlrZSBgQ09ORklHX1BST0NfRlNgLiBUaGF0J3Mgd2hlcmUgSSdsbCBmaW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhlbHAgdGV4dCBmb3IgdGhhdCBwYXJ0aWN1bGFyIGZlYXR1cmUuIEZyb20gdGhlcmUgSSdsbCBzdGFydCBjaGVja2luZyB0aGUgZGV0YWlscyBvZiB0aGUgZGVwZW5kZW5jaWVzLCBhbmQgc2VlIGlmIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gYW55IG90aGVyIGZpbGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzMyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MzE6MjQuODA1MTE2MTczWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU2NTczNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBST0NfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvcHJvYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcHJvYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvcHJvYy9LY29uZmlnOjI6Y29uZmlnIFBST0NfRlNcXG5mcy9wcm9jL0tjb25maWctMy1cXHRib29sIFxcXCIvcHJvYyBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MzE6MjQuOTQwNzc4MDgxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2NzUwNjg3MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgTG9jayBEaXNwbGF5KipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGVzZSBjaGFuZ2VzIGluIGBmcy9sb2Nrcy5jYC4gV2UncmUgZGVhbGluZyB3aXRoIHRoZSBkaXNwbGF5IG9mIGxvY2tzIHdpdGhpbiBgL3Byb2MvbG9ja3NgLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gaG93IE9wZW4gRmlsZSBEZXNjcmlwdG9yIChPRkQpIGxvY2tzIGFyZSBoYW5kbGVkLiBJIHNlZSBhIGNvbmRpdGlvbmFsIGJsb2NrIHdpdGhpbiBgbG9ja3Nfc2hvd2AgdGhhdCBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIHRoZXNlIE9GRCBsb2Nrcy4gVGhlIGNvbW1lbnQgaW1tZWRpYXRlbHkgZHJhd3MgbXkgYXR0ZW50aW9uOiBpdCBub3RlcyB0aGF0IE9GRCBsb2NrcyBhcmUgcmVwb3J0ZWQgd2l0aCBhIFBJRCBvZiAtMS4gVGhpcyBtZWFucyB0aGUgc3RhbmRhcmQgb3duZXIgZmlsdGVyaW5nIHdvbid0IHdvcmssIHNvIHRoZSBjb2RlIGNsZXZlcmx5IHVzZXMgYGZsY19waWRgLCB3aGljaCBob2xkcyB0aGUgb3duZXIncyBUaHJlYWQgR3JvdXAgSUQgKFRHSUQpIGluc3RlYWQuXG5cblRoZSBjb2RlIHRoZW4gY2hlY2tzIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhbiBPRkQgbG9jayBhbmQgaWYgd2UgYXJlICpub3QqIGluIHRoZSBpbml0aWFsIFBJRCBuYW1lc3BhY2UuIEkgdW5kZXJzdGFuZCB0aGF0IGNvbnRleHQuIEluc2lkZSB0aGUgY29uZGl0aW9uYWwsIHdlIHNlZSBzb21lIGNhcmVmdWwgUkNVIChSZWFkLUNvcHktVXBkYXRlKSB1c2FnZSB0byBzYWZlbHkgZGVyZWZlcmVuY2UgdGhlIGBmbGNfcGlkYC4gSXQncyBnZXR0aW5nIHRoZSBQSUQgZnJvbSB0aGUgaW5pdGlhbCBuYW1lc3BhY2UsIGFuZCB0aGVuIGNoZWNrcyBpZiB0aGF0IHBpZCBpcyB2aXNpYmxlIGluIHRoZSBjdXJyZW50IHByb2Nlc3MncyBuYW1lc3BhY2UuIElmIHRoZSBQSUQgaXMgbm90IHZpc2libGUsIHRoZW4gd2UnbGwgc2tpcCB0aGF0IGVudHJ5LlxuXG5GaW5hbGx5LCB3ZSd2ZSBnb3QgdGhlIGBsb2Nrc190cmFuc2xhdGVfcGlkYCBmdW5jdGlvbiwgYW5kIHRoYXQncyB0aGUga2V5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gZG9lcy4gRnJvbSB0aGUgbG9va3Mgb2YgaXQsIHRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IHRoZSBQSUQgZnJvbSB0aGUgbG9jayB0byB3aGF0ZXZlciB0aGUgUElEIG5hbWVzcGFjZSBpcyBuZWVkZWQgZm9yLiBJZiB0aGlzIGNhbGwgcmV0dXJucyB6ZXJvLCBpdCBsb29rcyBsaWtlIHdlJ3JlIHNraXBwaW5nIHRoYXQgZW50cnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwMTAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MzE6MjguNjE1ODUwMDcxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzM0NTQyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsb2Nrc190cmFuc2xhdGVfcGlkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2xvY2tzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbG9ja3MuYz0yMzY1PUVYUE9SVF9TWU1CT0xfR1BMKHZmc190ZXN0X2xvY2spO1xcbi0tXFxuZnMvbG9ja3MuYy0yMzY3LS8qKlxcbmZzL2xvY2tzLmM6MjM2ODogKiBsb2Nrc190cmFuc2xhdGVfcGlkIC0gdHJhbnNsYXRlIGEgZmlsZV9sb2NrJ3MgZmxfcGlkIG51bWJlciBpbnRvIGEgbmFtZXNwYWNlXFxuZnMvbG9ja3MuYy0yMzY5LSAqIEBmbDogVGhlIGZpbGVfbG9jayB3aG8ncyBmbF9waWQgc2hvdWxkIGJlIHRyYW5zbGF0ZWRcXG4tLVxcbmZzL2xvY2tzLmMtMjM3My0gKi9cXG5mcy9sb2Nrcy5jOjIzNzQ6c3RhdGljIHBpZF90IGxvY2tzX3RyYW5zbGF0ZV9waWQoc3RydWN0IGZpbGVfbG9ja19jb3JlICpmbCwgc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zKVxcbmZzL2xvY2tzLmMtMjM3NS17XFxuLS1cXG5mcy9sb2Nrcy5jPTI0MDE9c3RhdGljIGludCBwb3NpeF9sb2NrX3RvX2Zsb2NrKHN0cnVjdCBmbG9jayAqZmxvY2ssIHN0cnVjdCBmaWxlX2xvY2sgKmZsKVxcbmZzL2xvY2tzLmMtMjQwMi17XFxuZnMvbG9ja3MuYzoyNDAzOlxcdGZsb2NrLVxcdTAwM2VsX3BpZCA9IGxvY2tzX3RyYW5zbGF0ZV9waWQoXFx1MDAyNmZsLVxcdTAwM2VjLCB0YXNrX2FjdGl2ZV9waWRfbnMoY3VycmVudCkpO1xcbmZzL2xvY2tzLmMtMjQwNC0jaWYgQklUU19QRVJfTE9ORyA9PSAzMlxcbi0tXFxuZnMvbG9ja3MuYz0yNDIzPXN0YXRpYyB2b2lkIHBvc2l4X2xvY2tfdG9fZmxvY2s2NChzdHJ1Y3QgZmxvY2s2NCAqZmxvY2ssIHN0cnVjdCBmaWxlX2xvY2sgKmZsKVxcbmZzL2xvY2tzLmMtMjQyNC17XFxuZnMvbG9ja3MuYzoyNDI1OlxcdGZsb2NrLVxcdTAwM2VsX3BpZCA9IGxvY2tzX3RyYW5zbGF0ZV9waWQoXFx1MDAyNmZsLVxcdTAwM2VjLCB0YXNrX2FjdGl2ZV9waWRfbnMoY3VycmVudCkpO1xcbmZzL2xvY2tzLmMtMjQyNi1cXHRmbG9jay1cXHUwMDNlbF9zdGFydCA9IGZsLVxcdTAwM2VmbF9zdGFydDtcXG4tLVxcbmZzL2xvY2tzLmM9MjkyMT1zdGF0aWMgdm9pZCBsb2NrX2dldF9zdGF0dXMoc3RydWN0IHNlcV9maWxlICpmLCBzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmZsYyxcXG4tLVxcbmZzL2xvY2tzLmMtMjkyOS1cXG5mcy9sb2Nrcy5jOjI5MzA6XFx0cGlkID0gbG9ja3NfdHJhbnNsYXRlX3BpZChmbGMsIHByb2NfcGlkbnMpO1xcbmZzL2xvY2tzLmMtMjkzMS1cXG4tLVxcbmZzL2xvY2tzLmM9MzAxNj1zdGF0aWMgaW50IGxvY2tzX3Nob3coc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICp2KVxcbi0tXFxuZnMvbG9ja3MuYy0zMDQxLVxcbmZzL2xvY2tzLmM6MzA0MjpcXHRpZiAobG9ja3NfdHJhbnNsYXRlX3BpZChjdXIsIHByb2NfcGlkbnMpID09IDApXFxuZnMvbG9ja3MuYy0zMDQzLVxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjozMToyOC42ODMyMDAzM1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzQ4OTM0NTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgY29uc2lkZXJpbmcgSSdtIGluIHRoZSB0aGljayBvZiB0aGlzOlxuXG4qKkRlZXAgRGl2ZSBpbnRvIGBsb2Nrc190cmFuc2xhdGVfcGlkYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgdGhlIGBsb2Nrc190cmFuc2xhdGVfcGlkYCBmdW5jdGlvbiwgcmVzaWRpbmcgaW4gdGhlIGBmcy9sb2Nrcy5jYCBmaWxlLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHBpZWNlIG9mIGNvZGUgaW50ZXJhY3RzIHdpdGggcHJvY2VzcyBJRHMsIGFuZCBJJ20gZ3Vlc3NpbmcgaXQgbGlrZWx5IGludm9sdmVzIHNvbWUgdHJhbnNsYXRpb24gb3IgbWFwcGluZyB3aXRoaW4gdGhlIGZpbGUgbG9ja2luZyBzdWJzeXN0ZW0uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgaW5mb3JtYXRpb24gaXMgYmVpbmcgZXh0cmFjdGVkIG9yIGFkanVzdGVkLiBJcyBpdCB1c2VkIHRvIG1hcCBQSURzIGFjcm9zcyBuYW1lc3BhY2VzLCBvciBkZWFsIHdpdGggZGlmZmVyZW50IFVJRC9HSUQgbWFwcGluZyBzY2VuYXJpb3MsIG9yIGlzIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5IGdvaW5nIG9uPyBJIGtub3cgdGhlIGZpbGVzeXN0ZW0gbG9ja2luZyBpcyBpbmNyZWRpYmx5IG51YW5jZWQsIHNvIGl0IGNvdWxkIGJlIGFueSBudW1iZXIgb2Ygc3VidGxldGllcy4gSSdsbCBuZWVkIHRvIGRpc3NlY3QgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBsYXJnZXIgbG9ja2luZyBhcmNoaXRlY3R1cmUuIEknbSBlc3BlY2lhbGx5IGtlZW4gdG8gc2VlIGhvdyBpdCBoYW5kbGVzIGVkZ2UgY2FzZXMgbGlrZSBzaWduYWwgZGVsaXZlcnkgYW5kIHByb2Nlc3MgdGVybWluYXRpb24sIHRob3NlIGFyZSB1c3VhbGx5IHdoZXJlIGxvY2tpbmcgZ2V0cyByZWFsbHkgaW50ZXJlc3RpbmcuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyMzMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjozMTozMS4wMzIxMzY4NDFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2xvY2tzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjM2OCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjM2ODpcXHQgKiBsb2Nrc190cmFuc2xhdGVfcGlkIC0gdHJhbnNsYXRlIGEgZmlsZV9sb2NrJ3MgZmxfcGlkIG51bWJlciBpbnRvIGEgbmFtZXNwYWNlXFxuMjM2OTpcXHQgKiBAZmw6IFRoZSBmaWxlX2xvY2sgd2hvJ3MgZmxfcGlkIHNob3VsZCBiZSB0cmFuc2xhdGVkXFxuMjM3MDpcXHQgKiBAbnM6IFRoZSBuYW1lc3BhY2UgaW50byB3aGljaCB0aGUgcGlkIHNob3VsZCBiZSB0cmFuc2xhdGVkXFxuMjM3MTpcXHQgKlxcbjIzNzI6XFx0ICogVXNlZCB0byB0cmFuc2xhdGUgYSBmbF9waWQgaW50byBhIG5hbWVzcGFjZSB2aXJ0dWFsIHBpZCBudW1iZXJcXG4yMzczOlxcdCAqL1xcbjIzNzQ6XFx0c3RhdGljIHBpZF90IGxvY2tzX3RyYW5zbGF0ZV9waWQoc3RydWN0IGZpbGVfbG9ja19jb3JlICpmbCwgc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zKVxcbjIzNzU6XFx0e1xcbjIzNzY6XFx0XFx0cGlkX3Qgdm5yO1xcbjIzNzc6XFx0XFx0c3RydWN0IHBpZCAqcGlkO1xcbjIzNzg6XFx0XFxuMjM3OTpcXHRcXHRpZiAoZmwtXFx1MDAzZWZsY19mbGFncyBcXHUwMDI2IEZMX09GRExDSylcXG4yMzgwOlxcdFxcdFxcdHJldHVybiAtMTtcXG4yMzgxOlxcdFxcbjIzODI6XFx0XFx0LyogUmVtb3RlIGxvY2tzIHJlcG9ydCBhIG5lZ2F0aXZlIHBpZCB2YWx1ZSAqL1xcbjIzODM6XFx0XFx0aWYgKGZsLVxcdTAwM2VmbGNfcGlkIFxcdTAwM2M9IDApXFxuMjM4NDpcXHRcXHRcXHRyZXR1cm4gZmwtXFx1MDAzZWZsY19waWQ7XFxuMjM4NTpcXHRcXG4yMzg2OlxcdFxcdC8qXFxuMjM4NzpcXHRcXHQgKiBJZiB0aGUgZmxvY2sgb3duZXIgcHJvY2VzcyBpcyBkZWFkIGFuZCBpdHMgcGlkIGhhcyBiZWVuIGFscmVhZHlcXG4yMzg4OlxcdFxcdCAqIGZyZWVkLCB0aGUgdHJhbnNsYXRpb24gYmVsb3cgd29uJ3Qgd29yaywgYnV0IHdlIHN0aWxsIHdhbnQgdG8gc2hvd1xcbjIzODk6XFx0XFx0ICogZmxvY2sgb3duZXIgcGlkIG51bWJlciBpbiBpbml0IHBpZG5zLlxcbjIzOTA6XFx0XFx0ICovXFxuMjM5MTpcXHRcXHRpZiAobnMgPT0gXFx1MDAyNmluaXRfcGlkX25zKVxcbjIzOTI6XFx0XFx0XFx0cmV0dXJuIChwaWRfdCkgZmwtXFx1MDAzZWZsY19waWQ7XFxuMjM5MzpcXHRcXG4yMzk0OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4yMzk1OlxcdFxcdHBpZCA9IGZpbmRfcGlkX25zKGZsLVxcdTAwM2VmbGNfcGlkLCBcXHUwMDI2aW5pdF9waWRfbnMpO1xcbjIzOTY6XFx0XFx0dm5yID0gcGlkX25yX25zKHBpZCwgbnMpO1xcbjIzOTc6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMjM5ODpcXHRcXHRyZXR1cm4gdm5yO1xcbjIzOTk6XFx0fVxcbjI0MDA6XFx0XFxuMjQwMTpcXHRzdGF0aWMgaW50IHBvc2l4X2xvY2tfdG9fZmxvY2soc3RydWN0IGZsb2NrICpmbG9jaywgc3RydWN0IGZpbGVfbG9jayAqZmwpXFxuMjQwMjpcXHR7XFxuMjQwMzpcXHRcXHRmbG9jay1cXHUwMDNlbF9waWQgPSBsb2Nrc190cmFuc2xhdGVfcGlkKFxcdTAwMjZmbC1cXHUwMDNlYywgdGFza19hY3RpdmVfcGlkX25zKGN1cnJlbnQpKTtcXG4yNDA0OlxcdCNpZiBCSVRTX1BFUl9MT05HID09IDMyXFxuMjQwNTpcXHRcXHQvKlxcbjI0MDY6XFx0XFx0ICogTWFrZSBzdXJlIHdlIGNhbiByZXByZXNlbnQgdGhlIHBvc2l4IGxvY2sgdmlhXFxuMjQwNzpcXHRcXHQgKiBsZWdhY3kgMzJiaXQgZmxvY2suXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjMxOjMxLjAzMjI2ODE1MVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MjQ5MTA3NzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIGAvcHJvYy9sb2Nrc2AgRml4OiBXb3J0aCBGdXp6aW5nPyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoaW5raW5nIHRocm91Z2ggd2hhdCBpdCBkb2VzLiBJdCBsb29rcyBsaWtlIHdoZW4gYC9wcm9jL2xvY2tzYCBpcyBiZWluZyBhY2Nlc3NlZCwgc3BlY2lmaWNhbGx5IHdoZW4gYGxvY2tzX3Nob3dgIGlzIGNhbGxlZCwgdGhlcmUncyBiZWVuIGEgcHJvYmxlbSB3aXRoIGhvdyBPRkQgbG9ja3MgKG9wZW4gZmlsZSBkZXNjcmlwdGlvbiBsb2Nrcykgd2VyZSBiZWluZyBoYW5kbGVkIGFjcm9zcyBQSUQgbmFtZXNwYWNlcy4gUHJldmlvdXNseSwgdGhlIGBsb2Nrc190cmFuc2xhdGVfcGlkYCBmdW5jdGlvbiB3YXMgcmV0dXJuaW5nIC0xIGZvciB0aGVzZSBPRkQgbG9ja3MuIFRoaXMgbWVhbnQgdGhlIGNoZWNrIGBsb2Nrc190cmFuc2xhdGVfcGlkKGN1ciwgcHJvY19waWRucykgPT0gMGAgd2FzIGZhaWxpbmcsIGFuZCB3ZSB3ZXJlbid0IGZpbHRlcmluZyBvdXQgT0ZEIGxvY2tzIGZyb20gZGlmZmVyZW50IFBJRCBuYW1lc3BhY2VzIGNvcnJlY3RseS4gRXNzZW50aWFsbHksIGAvcHJvYy9sb2Nrc2AgaW4gYSBub24taW5pdCBQSUQgbmFtZXNwYWNlIHdhcyBkaXNwbGF5aW5nIE9GRCBsb2NrcyBmcm9tICphbnkqIFBJRCBuYW1lc3BhY2UsIGV2ZW4gaWYgdGhlIHByb2Nlc3MgdGhhdCBjcmVhdGVkIHRoZW0gd2Fzbid0IGFjdHVhbGx5IHZpc2libGUgaW4gdGhhdCBuYW1lc3BhY2UuIFRoaXMgcGF0Y2ggYWRkcmVzc2VzIHRoaXMgYnkgY2hlY2tpbmcgaWYgdGhlIG93bmVyJ3MgdGdpZCAoYGN1ci1cdTAwM2VmbGNfcGlkYCkgaXMgbWFwcGVkIGluIHRoZSBjdXJyZW50IFBJRCBuYW1lc3BhY2UgKGBwcm9jX3BpZG5zYCkuIElmIGl0J3Mgbm90IHZpc2libGUsIHdlIHNraXAgZGlzcGxheWluZyB0aGUgbG9jayBpbiBgL3Byb2MvbG9ja3NgLlxuXG5TbywgaXMgdGhpcyBhIHJlYWwtd29ybGQsIGZ1bmN0aW9uYWwgY2hhbmdlPyBZZXMhIEl0J3MgcmVhY2hhYmxlIHdoZW4gcmVhZGluZyBgL3Byb2MvbG9ja3NgIHdpdGggZmlsZSBsb2Nrcywgc3BlY2lmaWNhbGx5IE9GRCBsb2NrcywgaW5zaWRlIGEgUElEIG5hbWVzcGFjZS4gSXQgYWZmZWN0cyBjb3JlIGtlcm5lbCBsb2dpYywgc3BlY2lmaWNhbGx5IHRoZSBgZnMvbG9ja3MuY2AgZmlsZSBhbmQgaG93IGAvcHJvYy9sb2Nrc2AgaGFuZGxlcyBmaWx0ZXJpbmcgZm9yIE9GRCBsb2NrcyBpbiBub24taW5pdCBuYW1lc3BhY2VzLlxuXG5UaGUgYmlnIHF1ZXN0aW9uOiBJcyB0aGlzIHNvbWV0aGluZyB3ZSBzaG91bGQgY29uc2lkZXIgZnV6emluZz8gTGV0J3MgY2hlY2sgdGhlIGd1aWRlbGluZXMuIEl0ICpkZWZpbml0ZWx5KiBpc24ndCBhIGRvY3VtZW50YXRpb24gY2hhbmdlLCBjb21tZW50LCBvciBkZWNvcmF0aXZlIGxvZ2dpbmcuIFRoaXMgKm1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyogaW4gYGZzL2xvY2tzLmNgIGluIGhvdyBgL3Byb2MvbG9ja3NgIGRpc3BsYXlzLiBTbywgdGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUga2VybmVsIGxvZ2ljLiBJdCBhZmZlY3RzIGhvdyBgL3Byb2MvbG9ja3NgIGZpbHRlcnMgbG9ja3MgZm9yIG5vbi1pbml0IHBpZCBuYW1lc3BhY2VzIHdoZW4gT0ZEIGxvY2tzIGV4aXN0LiBZZXMuIEJhc2VkIG9uIHRoaXMsIGl0IGxvb2tzIGxpa2UgaXQncyB3b3J0aCBmdXp6aW5nLlxuXG5Ob3csIGFib3V0IHRoZSBmdXp6aW5nIGl0c2VsZjogU2hvdWxkIHdlIGlkZW50aWZ5IHJlbGV2YW50IHN5bWJvbHM/IFRoZSBndWlkZWxpbmVzIHN1Z2dlc3QgZm9jdXNpbmcgb24gc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBhbmQgYXZvaWRpbmcgZ2VuZXJpYyBob3RwYXRocy4gV2Ugc2hvdWxkIHByaW9yaXRpemUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBMZXQncyB0aGluayBhYm91dCB0aGlzOiBgbG9ja3Nfc2hvd2AgaXMsIHVuZm9ydHVuYXRlbHksIHN0YXRpYy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUncyBhIG5vbi1zdGF0aWMgZW50cnlwb2ludCBvciBzb21lIGBzZXFfb3BzYCBpbnZvbHZlZC4gSSBuZWVkIHRvIGV4YW1pbmUgYGZzL2xvY2tzLmNgIG1vcmUgY2xvc2VseSBhbmQgdGhpbmsgYWJvdXQgdGhlIHByb2Nlc3Mgb2YgYWNjZXNzaW5nIGAvcHJvYy9sb2Nrc2AgYW5kIHNldHRpbmcgbG9ja3MgaW4gdGhlIGZpcnN0IHBsYWNlLiBJIHNob3VsZCBsb29rIGZvciBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiBgZnMvbG9ja3MuY2Agb3IgZnVuY3Rpb25zIGNhbGxlZCB3aGVuIGAvcHJvYy9sb2Nrc2AgaXMgYWNjZXNzZWQgb3IgbG9ja3MgYXJlIHNldC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGV4YW1pbmluZyBhbGwgcmVsZXZhbnQgZW50cnlwb2ludHMgZm9yIHRoZSBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE1MywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjMxOjM3LjI4MTM3OTA3OVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ0Nzc4ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfXVthLXpBLVowLTlfXSouKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2xvY2tzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1OTUgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmZzL2xvY2tzLmMtNzEtXFxuZnMvbG9ja3MuYzo3MjpzdGF0aWMgc3RydWN0IGZpbGVfbG9jayAqZmlsZV9sb2NrKHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqZmxjKVxcbmZzL2xvY2tzLmMtNzMte1xcbi0tXFxuZnMvbG9ja3MuYy03Ni1cXG5mcy9sb2Nrcy5jOjc3OnN0YXRpYyBzdHJ1Y3QgZmlsZV9sZWFzZSAqZmlsZV9sZWFzZShzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmZsYylcXG5mcy9sb2Nrcy5jLTc4LXtcXG4tLVxcbmZzL2xvY2tzLmMtODEtXFxuZnMvbG9ja3MuYzo4MjpzdGF0aWMgYm9vbCBsZWFzZV9icmVha2luZyhzdHJ1Y3QgZmlsZV9sZWFzZSAqZmwpXFxuZnMvbG9ja3MuYy04My17XFxuLS1cXG5mcy9sb2Nrcy5jLTg2LVxcbmZzL2xvY2tzLmM6ODc6c3RhdGljIGludCB0YXJnZXRfbGVhc2V0eXBlKHN0cnVjdCBmaWxlX2xlYXNlICpmbClcXG5mcy9sb2Nrcy5jLTg4LXtcXG4tLVxcbmZzL2xvY2tzLmM9MTAwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGxvY2tzX3N5c2N0bHNbXSA9IHtcXG4tLVxcbmZzL2xvY2tzLmMtMTE4LVxcbmZzL2xvY2tzLmM6MTE5OnN0YXRpYyBpbnQgX19pbml0IGluaXRfZnNfbG9ja3Nfc3lzY3Rscyh2b2lkKVxcbmZzL2xvY2tzLmMtMTIwLXtcXG4tLVxcbmZzL2xvY2tzLmMtMTIzLX1cXG5mcy9sb2Nrcy5jOjEyNDplYXJseV9pbml0Y2FsbChpbml0X2ZzX2xvY2tzX3N5c2N0bHMpO1xcbmZzL2xvY2tzLmMtMTI1LSNlbmRpZiAvKiBDT05GSUdfU1lTQ1RMICovXFxuLS1cXG5mcy9sb2Nrcy5jPTEzNT1zdHJ1Y3QgZmlsZV9sb2NrX2xpc3Rfc3RydWN0IHtcXG4tLVxcbmZzL2xvY2tzLmMtMTM4LX07XFxuZnMvbG9ja3MuYzoxMzk6c3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBmaWxlX2xvY2tfbGlzdF9zdHJ1Y3QsIGZpbGVfbG9ja19saXN0KTtcXG5mcy9sb2Nrcy5jOjE0MDpERUZJTkVfU1RBVElDX1BFUkNQVV9SV1NFTShmaWxlX3J3c2VtKTtcXG5mcy9sb2Nrcy5jLTE0MS1cXG4tLVxcbmZzL2xvY2tzLmMtMTU0LSNkZWZpbmUgQkxPQ0tFRF9IQVNIX0JJVFNcXHQ3XFxuZnMvbG9ja3MuYzoxNTU6c3RhdGljIERFRklORV9IQVNIVEFCTEUoYmxvY2tlZF9oYXNoLCBCTE9DS0VEX0hBU0hfQklUUyk7XFxuZnMvbG9ja3MuYy0xNTYtXFxuLS1cXG5mcy9sb2Nrcy5jLTE2OS0gKi9cXG5mcy9sb2Nrcy5jOjE3MDpzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGJsb2NrZWRfbG9ja19sb2NrKTtcXG5mcy9sb2Nrcy5jLTE3MS1cXG4tLVxcbmZzL2xvY2tzLmM9MTc2PXN0YXRpYyBzdHJ1Y3QgZmlsZV9sb2NrX2NvbnRleHQgKlxcbmZzL2xvY2tzLmM6MTc3OmxvY2tzX2dldF9sb2NrX2NvbnRleHQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUpXFxuZnMvbG9ja3MuYy0xNzgte1xcbi0tXFxuZnMvbG9ja3MuYz0yMTg9c3RhdGljIHZvaWRcXG5mcy9sb2Nrcy5jOjIxOTpsb2Nrc19kdW1wX2N0eF9saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGNoYXIgKmxpc3RfdHlwZSlcXG5mcy9sb2Nrcy5jLTIyMC17XFxuLS1cXG5mcy9sb2Nrcy5jPTIyOT1zdGF0aWMgdm9pZFxcbmZzL2xvY2tzLmM6MjMwOmxvY2tzX2NoZWNrX2N0eF9saXN0cyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2xvY2tzLmMtMjMxLXtcXG4tLVxcbmZzL2xvY2tzLmM9MjQ2PXN0YXRpYyB2b2lkXFxuZnMvbG9ja3MuYzoyNDc6bG9ja3NfY2hlY2tfY3R4X2ZpbGVfbGlzdChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgY2hhciAqbGlzdF90eXBlKVxcbmZzL2xvY2tzLmMtMjQ4LXtcXG4tLVxcbmZzL2xvY2tzLmM9MjYyPXZvaWRcXG5mcy9sb2Nrcy5jOjI2Mzpsb2Nrc19mcmVlX2xvY2tfY29udGV4dChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2xvY2tzLmMtMjY0LXtcXG4tLVxcbmZzL2xvY2tzLmMtMjcyLVxcbmZzL2xvY2tzLmM6MjczOnN0YXRpYyB2b2lkIGxvY2tzX2luaXRfbG9ja19oZWFkcyhzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmZsYylcXG5mcy9sb2Nrcy5jLTI3NC17XFxuLS1cXG5mcy9sb2Nrcy5jLTI4Mi0vKiBBbGxvY2F0ZSBhbiBlbXB0eSBsb2NrIHN0cnVjdHVyZS4gKi9cXG5mcy9sb2Nrcy5jOjI4MzpzdHJ1Y3QgZmlsZV9sb2NrICpsb2Nrc19hbGxvY19sb2NrKHZvaWQpXFxuZnMvbG9ja3MuYy0yODQte1xcbi0tXFxuZnMvbG9ja3MuYy0yOTEtfVxcbmZzL2xvY2tzLmM6MjkyOkVYUE9SVF9TWU1CT0xfR1BMKGxvY2tzX2FsbG9jX2xvY2spO1xcbmZzL2xvY2tzLmMtMjkzLVxcbmZzL2xvY2tzLmMtMjk0LS8qIEFsbG9jYXRlIGFuIGVtcHR5IGxvY2sgc3RydWN0dXJlLiAqL1xcbmZzL2xvY2tzLmM6Mjk1OnN0cnVjdCBmaWxlX2xlYXNlICpsb2Nrc19hbGxvY19sZWFzZSh2b2lkKVxcbmZzL2xvY2tzLmMtMjk2LXtcXG4tLVxcbmZzL2xvY2tzLmMtMzAzLX1cXG5mcy9sb2Nrcy5jOjMwNDpFWFBPUlRfU1lNQk9MX0dQTChsb2Nrc19hbGxvY19sZWFzZSk7XFxuZnMvbG9ja3MuYy0zMDUtXFxuZnMvbG9ja3MuYzozMDY6dm9pZCBsb2Nrc19yZWxlYXNlX3ByaXZhdGUoc3RydWN0IGZpbGVfbG9jayAqZmwpXFxuZnMvbG9ja3MuYy0zMDcte1xcbi0tXFxuZnMvbG9ja3MuYy0zMjktfVxcbmZzL2xvY2tzLmM6MzMwOkVYUE9SVF9TWU1CT0xfR1BMKGxvY2tzX3JlbGVhc2VfcHJpdmF0ZSk7XFxuZnMvbG9ja3MuYy0zMzEtXFxuLS1cXG5mcy9sb2Nrcy5jLTM0MC0gKi9cXG5mcy9sb2Nrcy5jOjM0MTpib29sIGxvY2tzX293bmVyX2hhc19ibG9ja2VycyhzdHJ1Y3QgZmlsZV9sb2NrX2NvbnRleHQgKmZsY3R4LCBmbF9vd25lcl90IG93bmVyKVxcbmZzL2xvY2tzLmMtMzQyLXtcXG4tLVxcbmZzL2xvY2tzLmMtMzU2LX1cXG5mcy9sb2Nrcy5jOjM1NzpFWFBPUlRfU1lNQk9MX0dQTChsb2Nrc19vd25lcl9oYXNfYmxvY2tlcnMpO1xcbmZzL2xvY2tzLmMtMzU4LVxcbmZzL2xvY2tzLmMtMzU5LS8qIEZyZWUgYSBsb2NrIHdoaWNoIGlzIG5vdCBpbiB1c2UuICovXFxuZnMvbG9ja3MuYzozNjA6dm9pZCBsb2Nrc19mcmVlX2xvY2soc3RydWN0IGZpbGVfbG9jayAqZmwpXFxuZnMvbG9ja3MuYy0zNjEte1xcbi0tXFxuZnMvbG9ja3MuYy0zNjQtfVxcbmZzL2xvY2tzLmM6MzY1OkVYUE9SVF9TWU1CT0wobG9ja3NfZnJlZV9sb2NrKTtcXG5mcy9sb2Nrcy5jLTM2Ni1cXG5mcy9sb2Nrcy5jLTM2Ny0vKiBGcmVlIGEgbGVhc2Ugd2hpY2ggaXMgbm90IGluIHVzZS4gKi9cXG5mcy9sb2Nrcy5jOjM2ODp2b2lkIGxvY2tzX2ZyZWVfbGVhc2Uoc3RydWN0IGZpbGVfbGVhc2UgKmZsKVxcbmZzL2xvY2tzLmMtMzY5LXtcXG4tLVxcbmZzL2xvY2tzLmMtMzcxLX1cXG5mcy9sb2Nrcy5jOjM3MjpFWFBPUlRfU1lNQk9MKGxvY2tzX2ZyZWVfbGVhc2UpO1xcbmZzL2xvY2tzLmMtMzczLVxcbmZzL2xvY2tzLmM9Mzc0PXN0YXRpYyB2b2lkXFxuZnMvbG9ja3MuYzozNzU6bG9ja3NfZGlzcG9zZV9saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmRpc3Bvc2UpXFxuZnMvbG9ja3MuYy0zNzYte1xcbi0tXFxuZnMvbG9ja3MuYz0zODY9c3RhdGljIHZvaWRcXG5mcy9sb2Nrcy5jOjM4NzpsZWFzZV9kaXNwb3NlX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZGlzcG9zZSlcXG5mcy9sb2Nrcy5jLTM4OC17XFxuLS1cXG5mcy9sb2Nrcy5jLTM5Ny1cXG5mcy9sb2Nrcy5jOjM5ODp2b2lkIGxvY2tzX2luaXRfbG9jayhzdHJ1Y3QgZmlsZV9sb2NrICpmbClcXG5mcy9sb2Nrcy5jLTM5OS17XFxuLS1cXG5mcy9sb2Nrcy5jLTQwMi19XFxuZnMvbG9ja3MuYzo0MDM6RVhQT1JUX1NZTUJPTChsb2Nrc19pbml0X2xvY2spO1xcbmZzL2xvY2tzLmMtNDA0LVxcbmZzL2xvY2tzLmM6NDA1OnZvaWQgbG9ja3NfaW5pdF9sZWFzZShzdHJ1Y3QgZmlsZV9sZWFzZSAqZmwpXFxuZnMvbG9ja3MuYy00MDYte1xcbi0tXFxuZnMvbG9ja3MuYy00MDktfVxcbmZzL2xvY2tzLmM6NDEwOkVYUE9SVF9TWU1CT0wobG9ja3NfaW5pdF9sZWFzZSk7XFxuZnMvbG9ja3MuYy00MTEtXFxuLS1cXG5mcy9sb2Nrcy5jLTQxNC0gKi9cXG5mcy9sb2Nrcy5jOjQxNTp2b2lkIGxvY2tzX2NvcHlfY29uZmxvY2soc3RydWN0IGZpbGVfbG9jayAqbmV3LCBzdHJ1Y3QgZmlsZV9sb2NrICpmbClcXG5mcy9sb2Nrcy5jLTQxNi17XFxuLS1cXG5mcy9sb2Nrcy5jLTQzMS19XFxuZnMvbG9ja3MuYzo0MzI6RVhQT1JUX1NZTUJPTChsb2Nrc19jb3B5X2NvbmZsb2NrKTtcXG5mcy9sb2Nrcy5jLTQzMy1cXG5mcy9sb2Nrcy5jOjQzNDp2b2lkIGxvY2tzX2NvcHlfbG9jayhzdHJ1Y3QgZmlsZV9sb2NrICpuZXcsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKVxcbmZzL2xvY2tzLmMtNDM1LXtcXG4tLVxcbmZzL2xvY2tzLmMtNDQ4LX1cXG5mcy9sb2Nrcy5jOjQ0OTpFWFBPUlRfU1lNQk9MKGxvY2tzX2NvcHlfbG9jayk7XFxuZnMvbG9ja3MuYy00NTAtXFxuZnMvbG9ja3MuYzo0NTE6c3RhdGljIHZvaWQgbG9ja3NfbW92ZV9ibG9ja3Moc3RydWN0IGZpbGVfbG9jayAqbmV3LCBzdHJ1Y3QgZmlsZV9sb2NrICpmbClcXG5mcy9sb2Nrcy5jLTQ1Mi17XFxuLS1cXG5mcy9sb2Nrcy5jLTQ3MC1cXG5mcy9sb2Nrcy5jOjQ3MTpzdGF0aWMgaW5saW5lIGludCBmbG9ja190cmFuc2xhdGVfY21kKGludCBjbWQpIHtcXG5mcy9sb2Nrcy5jLTQ3Mi1cXHRzd2l0Y2ggKGNtZCkge1xcbi0tXFxuZnMvbG9ja3MuYy00ODMtLyogRmlsbCBpbiBhIGZpbGVfbG9jayBzdHJ1Y3R1cmUgd2l0aCBhbiBhcHByb3ByaWF0ZSBGTE9DSyBsb2NrLiAqL1xcbmZzL2xvY2tzLmM6NDg0OnN0YXRpYyB2b2lkIGZsb2NrX21ha2VfbG9jayhzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGZpbGVfbG9jayAqZmwsIGludCB0eXBlKVxcbmZzL2xvY2tzLmMtNDg1LXtcXG4tLVxcbmZzL2xvY2tzLmMtNDk1LVxcbmZzL2xvY2tzLmM6NDk2OnN0YXRpYyBpbnQgYXNzaWduX3R5cGUoc3RydWN0IGZpbGVfbG9ja19jb3JlICpmbGMsIGludCB0eXBlKVxcbmZzL2xvY2tzLmMtNDk3LXtcXG4tLVxcbmZzL2xvY2tzLmMtNTA5LVxcbmZzL2xvY2tzLmM6NTEwOnN0YXRpYyBpbnQgZmxvY2s2NF90b19wb3NpeF9sb2NrKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCxcXG5mcy9sb2Nrcy5jLTUxMS1cXHRcXHRcXHRcXHQgc3RydWN0IGZsb2NrNjQgKmwpXFxuLS1cXG5mcy9sb2Nrcy5jLTU1OS0gKi9cXG5mcy9sb2Nrcy5jOjU2MDpzdGF0aWMgaW50IGZsb2NrX3RvX3Bvc2l4X2xvY2soc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBmaWxlX2xvY2sgKmZsLFxcbmZzL2xvY2tzLmMtNTYxLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZmxvY2sgKmwpXFxuLS1cXG5mcy9sb2Nrcy5jPTU3ND1zdGF0aWMgYm9vbFxcbmZzL2xvY2tzLmM6NTc1OmxlYXNlX2JyZWFrX2NhbGxiYWNrKHN0cnVjdCBmaWxlX2xlYXNlICpmbClcXG5mcy9sb2Nrcy5jLTU3Ni17XFxuLS1cXG5mcy9sb2Nrcy5jPTU4MT1zdGF0aWMgdm9pZFxcbmZzL2xvY2tzLmM6NTgyOmxlYXNlX3NldHVwKHN0cnVjdCBmaWxlX2xlYXNlICpmbCwgdm9pZCAqKnByaXYpXFxuZnMvbG9ja3MuYy01ODMte1xcbi0tXFxuZnMvbG9ja3MuYz02MDg9c3RhdGljIGludFxcbmZzL2xvY2tzLmM6NjA5OmxlYXNlX29wZW5fY29uZmxpY3Qoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGludCBhcmcpXFxuZnMvbG9ja3MuYy02MTAte1xcbi0tXFxuZnMvbG9ja3MuYz02Mzc9c3RhdGljIGNvbnN0IHN0cnVjdCBsZWFzZV9tYW5hZ2VyX29wZXJhdGlvbnMgbGVhc2VfbWFuYWdlcl9vcHMgPSB7XFxuLS1cXG5mcy9sb2Nrcy5jLTY0Ni0gKi9cXG5mcy9sb2Nrcy5jOjY0NzpzdGF0aWMgaW50IGxlYXNlX2luaXQoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBmbGFncywgaW50IHR5cGUsIHN0cnVjdCBmaWxlX2xlYXNlICpmbClcXG5mcy9sb2Nrcy5jLTY0OC17XFxuLS1cXG5mcy9sb2Nrcy5jLTY2MS0vKiBBbGxvY2F0ZSBhIGZpbGVfbG9jayBpbml0aWFsaXNlZCB0byB0aGlzIHR5cGUgb2YgbGVhc2UgKi9cXG5mcy9sb2Nrcy5jOjY2MjpzdGF0aWMgc3RydWN0IGZpbGVfbGVhc2UgKmxlYXNlX2FsbG9jKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIGludCB0eXBlKVxcbmZzL2xvY2tzLmMtNjYzLXtcXG4tLVxcbmZzL2xvY2tzLmMtNjc5LSAqL1xcbmZzL2xvY2tzLmM6NjgwOnN0YXRpYyBpbmxpbmUgaW50IGxvY2tzX292ZXJsYXAoc3RydWN0IGZpbGVfbG9jayAqZmwxLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbDIpXFxuZnMvbG9ja3MuYy02ODEte1xcbi0tXFxuZnMvbG9ja3MuYy02ODgtICovXFxuZnMvbG9ja3MuYzo2ODk6c3RhdGljIGludCBwb3NpeF9zYW1lX293bmVyKHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqZmwxLCBzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmZsMilcXG5mcy9sb2Nrcy5jLTY5MC17XFxuLS1cXG5mcy9sb2Nrcy5jLTY5NC0vKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBmbGNfbG9jayBoZWxkISAqL1xcbmZzL2xvY2tzLmM6Njk1OnN0YXRpYyB2b2lkIGxvY2tzX2luc2VydF9nbG9iYWxfbG9ja3Moc3RydWN0IGZpbGVfbG9ja19jb3JlICpmbGMpXFxuZnMvbG9ja3MuYy02OTYte1xcbi0tXFxuZnMvbG9ja3MuYy03MDctLyogTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgZmxjX2xvY2sgaGVsZCEgKi9cXG5mcy9sb2Nrcy5jOjcwODpzdGF0aWMgdm9pZCBsb2Nrc19kZWxldGVfZ2xvYmFsX2xvY2tzKHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqZmxjKVxcbmZzL2xvY2tzLmMtNzA5LXtcXG4tLVxcbmZzL2xvY2tzLmM9NzI4PXN0YXRpYyB1bnNpZ25lZCBsb25nXFxuZnMvbG9ja3MuYzo3Mjk6cG9zaXhfb3duZXJfa2V5KHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqZmxjKVxcbmZzL2xvY2tzLmMtNzMwLXtcXG4tLVxcbmZzL2xvY2tzLmMtNzMzLVxcbmZzL2xvY2tzLmM6NzM0OnN0YXRpYyB2b2lkIGxvY2tzX2luc2VydF9nbG9iYWxfYmxvY2tlZChzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKndhaXRlcilcXG5mcy9sb2Nrcy5jLTczNS17XFxuLS1cXG5mcy9sb2Nrcy5jLTc0MC1cXG5mcy9sb2Nrcy5jOjc0MTpzdGF0aWMgdm9pZCBsb2Nrc19kZWxldGVfZ2xvYmFsX2Jsb2NrZWQoc3RydWN0IGZpbGVfbG9ja19jb3JlICp3YWl0ZXIpXFxuZnMvbG9ja3MuYy03NDIte1xcbi0tXFxuZnMvbG9ja3MuYy03NTItICovXFxuZnMvbG9ja3MuYzo3NTM6c3RhdGljIHZvaWQgX19sb2Nrc191bmxpbmtfYmxvY2soc3RydWN0IGZpbGVfbG9ja19jb3JlICp3YWl0ZXIpXFxuZnMvbG9ja3MuYy03NTQte1xcbi0tXFxuZnMvbG9ja3MuYy03NTgtXFxuZnMvbG9ja3MuYzo3NTk6c3RhdGljIHZvaWQgX19sb2Nrc193YWtlX3VwX2Jsb2NrcyhzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmJsb2NrZXIpXFxuZnMvbG9ja3MuYy03NjAte1xcbi0tXFxuZnMvbG9ja3MuYy03ODQtXFxuZnMvbG9ja3MuYzo3ODU6c3RhdGljIGludCBfX2xvY2tzX2RlbGV0ZV9ibG9jayhzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKndhaXRlcilcXG5mcy9sb2Nrcy5jLTc4Ni17XFxuLS1cXG5mcy9sb2Nrcy5jLTgzNC0gKi9cXG5mcy9sb2Nrcy5jOjgzNTppbnQgbG9ja3NfZGVsZXRlX2Jsb2NrKHN0cnVjdCBmaWxlX2xvY2sgKndhaXRlcilcXG5mcy9sb2Nrcy5jLTgzNi17XFxuLS1cXG5mcy9sb2Nrcy5jLTgzOC19XFxuZnMvbG9ja3MuYzo4Mzk6RVhQT1JUX1NZTUJPTChsb2Nrc19kZWxldGVfYmxvY2spO1xcbmZzL2xvY2tzLmMtODQwLVxcbi0tXFxuZnMvbG9ja3MuYy04NTUtICovXFxuZnMvbG9ja3MuYzo4NTY6c3RhdGljIHZvaWQgX19sb2Nrc19pbnNlcnRfYmxvY2soc3RydWN0IGZpbGVfbG9ja19jb3JlICpibG9ja2VyLFxcbmZzL2xvY2tzLmMtODU3LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKndhaXRlcixcXG4tLVxcbmZzL2xvY2tzLmMtODg0LS8qIE11c3QgYmUgY2FsbGVkIHdpdGggZmxjX2xvY2sgaGVsZC4gKi9cXG5mcy9sb2Nrcy5jOjg4NTpzdGF0aWMgdm9pZCBsb2Nrc19pbnNlcnRfYmxvY2soc3RydWN0IGZpbGVfbG9ja19jb3JlICpibG9ja2VyLFxcbmZzL2xvY2tzLmMtODg2LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKndhaXRlcixcXG4tLVxcbmZzL2xvY2tzLmMtODk5LSAqL1xcbmZzL2xvY2tzLmM6OTAwOnN0YXRpYyB2b2lkIGxvY2tzX3dha2VfdXBfYmxvY2tzKHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqYmxvY2tlcilcXG5mcy9sb2Nrcy5jLTkwMS17XFxuLS1cXG5mcy9sb2Nrcy5jPTkxNz1zdGF0aWMgdm9pZFxcbmZzL2xvY2tzLmM6OTE4OmxvY2tzX2luc2VydF9sb2NrX2N0eChzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmZsLCBzdHJ1Y3QgbGlzdF9oZWFkICpiZWZvcmUpXFxuZnMvbG9ja3MuYy05MTkte1xcbi0tXFxuZnMvbG9ja3MuYz05MjQ9c3RhdGljIHZvaWRcXG5mcy9sb2Nrcy5jOjkyNTpsb2Nrc191bmxpbmtfbG9ja19jdHgoc3RydWN0IGZpbGVfbG9ja19jb3JlICpmbClcXG5mcy9sb2Nrcy5jLTkyNi17XFxuLS1cXG5mcy9sb2Nrcy5jPTkzMj1zdGF0aWMgdm9pZFxcbmZzL2xvY2tzLmM6OTMzOmxvY2tzX2RlbGV0ZV9sb2NrX2N0eChzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmZsLCBzdHJ1Y3QgbGlzdF9oZWFkICpkaXNwb3NlKVxcbmZzL2xvY2tzLmMtOTM0LXtcXG4tLVxcbmZzL2xvY2tzLmMtOTQ0LSAqL1xcbmZzL2xvY2tzLmM6OTQ1OnN0YXRpYyBib29sIGxvY2tzX2NvbmZsaWN0KHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqY2FsbGVyX2ZsYyxcXG5mcy9sb2Nrcy5jLTk0Ni1cXHRcXHRcXHQgICBzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKnN5c19mbGMpXFxuLS1cXG5mcy9sb2Nrcy5jLTk1Ny0gKi9cXG5mcy9sb2Nrcy5jOjk1ODpzdGF0aWMgYm9vbCBwb3NpeF9sb2Nrc19jb25mbGljdChzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmNhbGxlcl9mbGMsXFxuZnMvbG9ja3MuYy05NTktXFx0XFx0XFx0XFx0IHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqc3lzX2ZsYylcXG4tLVxcbmZzL2xvY2tzLmMtOTc5LSAqL1xcbmZzL2xvY2tzLmM6OTgwOnN0YXRpYyBib29sIHBvc2l4X3Rlc3RfbG9ja3NfY29uZmxpY3Qoc3RydWN0IGZpbGVfbG9jayAqY2FsbGVyX2ZsLFxcbmZzL2xvY2tzLmMtOTgxLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBmaWxlX2xvY2sgKnN5c19mbClcXG4tLVxcbmZzL2xvY2tzLmMtOTk3LSAqL1xcbmZzL2xvY2tzLmM6OTk4OnN0YXRpYyBib29sIGZsb2NrX2xvY2tzX2NvbmZsaWN0KHN0cnVjdCBmaWxlX2xvY2tfY29yZSAqY2FsbGVyX2ZsYyxcXG5mcy9sb2Nrcy5jLTk5OS1cXHRcXHRcXHRcXHQgc3RydWN0IGZpbGVfbG9ja19jb3JlICpzeXNfZmxjKVxcbi0tXFxuZnMvbG9ja3MuYz0xMDEwPXZvaWRcXG5mcy9sb2Nrcy5jOjEwMTE6cG9zaXhfdGVzdF9sb2NrKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbClcXG5mcy9sb2Nrcy5jLTEwMTIte1xcbi0tXFxuZnMvbG9ja3MuYy0xMDQ3LX1cXG5mcy9sb2Nrcy5jOjEwNDg6RVhQT1JUX1NZTUJPTChwb3NpeF90ZXN0X2xvY2spO1xcbmZzL2xvY2tzLmMtMTA0OS1cXG4tLVxcbmZzL2xvY2tzLmMtMTA4NS0vKiBGaW5kIGEgbG9jayB0aGF0IHRoZSBvd25lciBvZiB0aGUgZ2l2ZW4gQGJsb2NrZXIgaXMgYmxvY2tpbmcgb24uICovXFxuZnMvbG9ja3MuYzoxMDg2OnN0YXRpYyBzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKndoYXRfb3duZXJfaXNfd2FpdGluZ19mb3Ioc3RydWN0IGZpbGVfbG9ja19jb3JlICpibG9ja2VyKVxcbmZzL2xvY2tzLmMtMTA4Ny17XFxuLS1cXG5mcy9sb2Nrcy5jLTExMDAtLyogTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgYmxvY2tlZF9sb2NrX2xvY2sgaGVsZCEgKi9cXG5mcy9sb2Nrcy5jOjExMDE6c3RhdGljIGJvb2wgcG9zaXhfbG9ja3NfZGVhZGxvY2soc3RydWN0IGZpbGVfbG9jayAqY2FsbGVyX2ZsLFxcbmZzL2xvY2tzLmMtMTEwMi1cXHRcXHRcXHRcXHQgc3RydWN0IGZpbGVfbG9jayAqYmxvY2tfZmwpXFxuLS1cXG5mcy9sb2Nrcy5jLTExMzItICovXFxuZnMvbG9ja3MuYzoxMTMzOnN0YXRpYyBpbnQgZmxvY2tfbG9ja19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZV9sb2NrICpyZXF1ZXN0KVxcbmZzL2xvY2tzLmMtMTEzNC17XFxuLS1cXG5mcy9sb2Nrcy5jLTEyMDQtXFxuZnMvbG9ja3MuYzoxMjA1OnN0YXRpYyBpbnQgcG9zaXhfbG9ja19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZV9sb2NrICpyZXF1ZXN0LFxcbmZzL2xvY2tzLmMtMTIwNi1cXHRcXHRcXHQgICAgc3RydWN0IGZpbGVfbG9jayAqY29uZmxvY2spXFxuLS1cXG5mcy9sb2Nrcy5jLTE0NTctICovXFxuZnMvbG9ja3MuYzoxNDU4OmludCBwb3NpeF9sb2NrX2ZpbGUoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBmaWxlX2xvY2sgKmZsLFxcbmZzL2xvY2tzLmMtMTQ1OS1cXHRcXHRcXHRzdHJ1Y3QgZmlsZV9sb2NrICpjb25mbG9jaylcXG4tLVxcbmZzL2xvY2tzLmMtMTQ2Mi19XFxuZnMvbG9ja3MuYzoxNDYzOkVYUE9SVF9TWU1CT0wocG9zaXhfbG9ja19maWxlKTtcXG5mcy9sb2Nrcy5jLTE0NjQtXFxuLS1cXG5mcy9sb2Nrcy5jLTE0NzEtICovXFxuZnMvbG9ja3MuYzoxNDcyOnN0YXRpYyBpbnQgcG9zaXhfbG9ja19pbm9kZV93YWl0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKVxcbmZzL2xvY2tzLmMtMTQ3My17XFxuLS1cXG5mcy9sb2Nrcy5jLTE0ODgtXFxuZnMvbG9ja3MuYzoxNDg5OnN0YXRpYyB2b2lkIGxlYXNlX2NsZWFyX3BlbmRpbmcoc3RydWN0IGZpbGVfbGVhc2UgKmZsLCBpbnQgYXJnKVxcbmZzL2xvY2tzLmMtMTQ5MC17XFxuLS1cXG5mcy9sb2Nrcy5jLTE1MDAtLyogV2UgYWxyZWFkeSBoYWQgYSBsZWFzZSBvbiB0aGlzIGZpbGU7IGp1c3QgY2hhbmdlIGl0cyB0eXBlICovXFxuZnMvbG9ja3MuYzoxNTAxOmludCBsZWFzZV9tb2RpZnkoc3RydWN0IGZpbGVfbGVhc2UgKmZsLCBpbnQgYXJnLCBzdHJ1Y3QgbGlzdF9oZWFkICpkaXNwb3NlKVxcbmZzL2xvY2tzLmMtMTUwMi17XFxuLS1cXG5mcy9sb2Nrcy5jLTE1MjItfVxcbmZzL2xvY2tzLmM6MTUyMzpFWFBPUlRfU1lNQk9MKGxlYXNlX21vZGlmeSk7XFxuZnMvbG9ja3MuYy0xNTI0LVxcbmZzL2xvY2tzLmM6MTUyNTpzdGF0aWMgYm9vbCBwYXN0X3RpbWUodW5zaWduZWQgbG9uZyB0aGVuKVxcbmZzL2xvY2tzLmMtMTUyNi17XFxuLS1cXG5mcy9sb2Nrcy5jLTE1MzItXFxuZnMvbG9ja3MuYzoxNTMzOnN0YXRpYyB2b2lkIHRpbWVfb3V0X2xlYXNlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbGlzdF9oZWFkICpkaXNwb3NlKVxcbmZzL2xvY2tzLmMtMTUzNC17XFxuLS1cXG5mcy9sb2Nrcy5jLTE1NjAtXFxuZnMvbG9ja3MuYzoxNTYxOnN0YXRpYyBib29sIGxlYXNlc19jb25mbGljdChzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmxjLCBzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmJjKVxcbmZzL2xvY2tzLmMtMTU2Mi17XFxuLS1cXG5mcy9sb2Nrcy5jPTE1OTQ9dTMyXFxuZnMvbG9ja3MuYzoxNTk1Omlub2RlX2xlYXNlX2lnbm9yZV9tYXNrKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvbG9ja3MuYy0xNTk2LXtcXG4tLVxcbmZzL2xvY2tzLmMtMTYxNC19XFxuZnMvbG9ja3MuYzoxNjE1OkVYUE9SVF9TWU1CT0xfR1BMKGlub2RlX2xlYXNlX2lnbm9yZV9tYXNrKTtcXG5mcy9sb2Nrcy5jLTE2MTYtXFxuZnMvbG9ja3MuYz0xNjE3PXN0YXRpYyBib29sXFxuZnMvbG9ja3MuYzoxNjE4Omlnbm9yZV9kaXJfZGVsZWdfYnJlYWsoc3RydWN0IGZpbGVfbGVhc2UgKmZsLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuZnMvbG9ja3MuYy0xNjE5LXtcXG4tLVxcbmZzL2xvY2tzLmM9MTYzMD1zdGF0aWMgdW5zaWduZWQgaW50XFxuZnMvbG9ja3MuYzoxNjMxOmJyZWFrX2xlYXNlX2ZsYWdzX3RvX3R5cGUodW5zaWduZWQgaW50IGZsYWdzKVxcbmZzL2xvY2tzLmMtMTYzMi17XFxuLS1cXG5mcy9sb2Nrcy5jPTE2NDQ9c3RhdGljIHN0cnVjdCBmaWxlX2xlYXNlICpcXG5mcy9sb2Nrcy5jOjE2NDU6Zmlyc3RfdmlzaWJsZV9sZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZV9sZWFzZSAqbmV3X2ZsLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuZnMvbG9ja3MuYy0xNjQ2LXtcXG4tLVxcbmZzL2xvY2tzLmMtMTY3NS0gKi9cXG5mcy9sb2Nrcy5jOjE2NzY6aW50IF9fYnJlYWtfbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgaW50IGZsYWdzKVxcbmZzL2xvY2tzLmMtMTY3Ny17XFxuLS1cXG5mcy9sb2Nrcy5jLTE3OTEtfVxcbmZzL2xvY2tzLmM6MTc5MjpFWFBPUlRfU1lNQk9MKF9fYnJlYWtfbGVhc2UpO1xcbmZzL2xvY2tzLmMtMTc5My1cXG4tLVxcbmZzL2xvY2tzLmMtMTgwMi0gKi9cXG5mcy9sb2Nrcy5jOjE4MDM6dm9pZCBsZWFzZV9nZXRfbXRpbWUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHRpbWVzcGVjNjQgKnRpbWUpXFxuZnMvbG9ja3MuYy0xODA0LXtcXG4tLVxcbmZzL2xvY2tzLmMtMTgyMS19XFxuZnMvbG9ja3MuYzoxODIyOkVYUE9SVF9TWU1CT0wobGVhc2VfZ2V0X210aW1lKTtcXG5mcy9sb2Nrcy5jLTE4MjMtXFxuLS1cXG5mcy9sb2Nrcy5jLTE4NDctICovXFxuZnMvbG9ja3MuYzoxODQ4OnN0YXRpYyBpbnQgX19mY250bF9nZXRsZWFzZShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGZsYXZvcilcXG5mcy9sb2Nrcy5jLTE4NDkte1xcbi0tXFxuZnMvbG9ja3MuYy0xODc1LVxcbmZzL2xvY2tzLmM6MTg3NjppbnQgZmNudGxfZ2V0bGVhc2Uoc3RydWN0IGZpbGUgKmZpbHApXFxuZnMvbG9ja3MuYy0xODc3LXtcXG4tLVxcbmZzL2xvY2tzLmMtMTg4MC1cXG5mcy9sb2Nrcy5jOjE4ODE6aW50IGZjbnRsX2dldGRlbGVnKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgZGVsZWdhdGlvbiAqZGVsZWcpXFxuZnMvbG9ja3MuYy0xODgyLXtcXG4tLVxcbmZzL2xvY2tzLmM9MTg4OT1zdGF0aWMgaW50XFxuZnMvbG9ja3MuYzoxODkwOmdlbmVyaWNfYWRkX2xlYXNlKHN0cnVjdCBmaWxlICpmaWxwLCBpbnQgYXJnLCBzdHJ1Y3QgZmlsZV9sZWFzZSAqKmZscCwgdm9pZCAqKnByaXYpXFxuZnMvbG9ja3MuYy0xODkxLXtcXG4tLVxcbmZzL2xvY2tzLmMtMjAwMS1cXG5mcy9sb2Nrcy5jOjIwMDI6c3RhdGljIGludCBnZW5lcmljX2RlbGV0ZV9sZWFzZShzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqb3duZXIpXFxuZnMvbG9ja3MuYy0yMDAzLXtcXG4tLVxcbmZzL2xvY2tzLmMtMjA0NC0gKi9cXG5mcy9sb2Nrcy5jOjIwNDU6aW50IGdlbmVyaWNfc2V0bGVhc2Uoc3RydWN0IGZpbGUgKmZpbHAsIGludCBhcmcsIHN0cnVjdCBmaWxlX2xlYXNlICoqZmxwLFxcbmZzL2xvY2tzLmMtMjA0Ni1cXHRcXHRcXHR2b2lkICoqcHJpdilcXG4tLVxcbmZzL2xvY2tzLmMtMjA3MC19XFxuZnMvbG9ja3MuYzoyMDcxOkVYUE9SVF9TWU1CT0woZ2VuZXJpY19zZXRsZWFzZSk7XFxuZnMvbG9ja3MuYy0yMDcyLVxcbi0tXFxuZnMvbG9ja3MuYz0yMDgxPXN0YXRpYyBpbmxpbmUgdm9pZFxcbmZzL2xvY2tzLmM6MjA4MjpsZWFzZV9ub3RpZmllcl9jaGFpbl9pbml0KHZvaWQpXFxuZnMvbG9ja3MuYy0yMDgzLXtcXG4tLVxcbmZzL2xvY2tzLmM9MjA4Nz1zdGF0aWMgaW5saW5lIHZvaWRcXG5mcy9sb2Nrcy5jOjIwODg6c2V0bGVhc2Vfbm90aWZpZXIoaW50IGFyZywgc3RydWN0IGZpbGVfbGVhc2UgKmxlYXNlKVxcbmZzL2xvY2tzLmMtMjA4OS17XFxuLS1cXG5mcy9sb2Nrcy5jLTIwOTMtXFxuZnMvbG9ja3MuYzoyMDk0OmludCBsZWFzZV9yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKVxcbmZzL2xvY2tzLmMtMjA5NS17XFxuLS1cXG5mcy9sb2Nrcy5jLTIwOTctfVxcbmZzL2xvY2tzLmM6MjA5ODpFWFBPUlRfU1lNQk9MX0dQTChsZWFzZV9yZWdpc3Rlcl9ub3RpZmllcik7XFxuZnMvbG9ja3MuYy0yMDk5LVxcbmZzL2xvY2tzLmM6MjEwMDp2b2lkIGxlYXNlX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYilcXG5mcy9sb2Nrcy5jLTIxMDEte1xcbi0tXFxuZnMvbG9ja3MuYy0yMTAzLX1cXG5mcy9sb2Nrcy5jOjIxMDQ6RVhQT1JUX1NZTUJPTF9HUEwobGVhc2VfdW5yZWdpc3Rlcl9ub3RpZmllcik7XFxuZnMvbG9ja3MuYy0yMTA1LVxcbi0tXFxuZnMvbG9ja3MuYz0yMTA3PWludFxcbmZzL2xvY2tzLmM6MjEwODprZXJuZWxfc2V0bGVhc2Uoc3RydWN0IGZpbGUgKmZpbHAsIGludCBhcmcsIHN0cnVjdCBmaWxlX2xlYXNlICoqbGVhc2UsIHZvaWQgKipwcml2KVxcbmZzL2xvY2tzLmMtMjEwOS17XFxuLS1cXG5mcy9sb2Nrcy5jLTIxMTUtfVxcbmZzL2xvY2tzLmM6MjExNjpFWFBPUlRfU1lNQk9MX0dQTChrZXJuZWxfc2V0bGVhc2UpO1xcbmZzL2xvY2tzLmMtMjExNy1cXG4tLVxcbmZzL2xvY2tzLmM9MjEzNT1pbnRcXG5mcy9sb2Nrcy5jOjIxMzY6dmZzX3NldGxlYXNlKHN0cnVjdCBmaWxlICpmaWxwLCBpbnQgYXJnLCBzdHJ1Y3QgZmlsZV9sZWFzZSAqKmxlYXNlLCB2b2lkICoqcHJpdilcXG5mcy9sb2Nrcy5jLTIxMzcte1xcbi0tXFxuZnMvbG9ja3MuYy0yMTQ4LX1cXG5mcy9sb2Nrcy5jOjIxNDk6RVhQT1JUX1NZTUJPTF9HUEwodmZzX3NldGxlYXNlKTtcXG5mcy9sb2Nrcy5jLTIxNTAtXFxuZnMvbG9ja3MuYzoyMTUxOnN0YXRpYyBpbnQgZG9fZmNudGxfYWRkX2xlYXNlKHVuc2lnbmVkIGludCBmZCwgc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBmbGF2b3IsIGludCBhcmcpXFxuZnMvbG9ja3MuYy0yMTUyLXtcXG4tLVxcbmZzL2xvY2tzLmMtMjE4NS0gKi9cXG5mcy9sb2Nrcy5jOjIxODY6aW50IGZjbnRsX3NldGxlYXNlKHVuc2lnbmVkIGludCBmZCwgc3RydWN0IGZpbGUgKmZpbHAsIGludCBhcmcpXFxuZnMvbG9ja3MuYy0yMTg3LXtcXG4tLVxcbmZzL2xvY2tzLmMtMjIwNS0gKi9cXG5mcy9sb2Nrcy5jOjIyMDY6aW50IGZjbnRsX3NldGRlbGVnKHVuc2lnbmVkIGludCBmZCwgc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBkZWxlZ2F0aW9uICpkZWxlZylcXG5mcy9sb2Nrcy5jLTIyMDcte1xcbi0tXFxuZnMvbG9ja3MuYy0yMjIzLSAqL1xcbmZzL2xvY2tzLmM6MjIyNDpzdGF0aWMgaW50IGZsb2NrX2xvY2tfaW5vZGVfd2FpdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbClcXG5mcy9sb2Nrcy5jLTIyMjUte1xcbi0tXFxuZnMvbG9ja3MuYy0yMjQ3LSAqL1xcbmZzL2xvY2tzLmM6MjI0ODppbnQgbG9ja3NfbG9ja19pbm9kZV93YWl0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKVxcbmZzL2xvY2tzLmMtMjI0OS17XFxuLS1cXG5mcy9sb2Nrcy5jLTIyNjItfVxcbmZzL2xvY2tzLmM6MjI2MzpFWFBPUlRfU1lNQk9MKGxvY2tzX2xvY2tfaW5vZGVfd2FpdCk7XFxuZnMvbG9ja3MuYy0yMjY0LVxcbi0tXFxuZnMvbG9ja3MuYy0yMjc5LSAqL1xcbmZzL2xvY2tzLmM6MjI4MDpTWVNDQUxMX0RFRklORTIoZmxvY2ssIHVuc2lnbmVkIGludCwgZmQsIHVuc2lnbmVkIGludCwgY21kKVxcbmZzL2xvY2tzLmMtMjI4MS17XFxuLS1cXG5mcy9sb2Nrcy5jLTIzNDQtICovXFxuZnMvbG9ja3MuYzoyMzQ1OmludCB2ZnNfdGVzdF9sb2NrKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbClcXG5mcy9sb2Nrcy5jLTIzNDYte1xcbi0tXFxuZnMvbG9ja3MuYy0yMzY0LX1cXG5mcy9sb2Nrcy5jOjIzNjU6RVhQT1JUX1NZTUJPTF9HUEwodmZzX3Rlc3RfbG9jayk7XFxuZnMvbG9ja3MuYy0yMzY2LVxcbi0tXFxuZnMvbG9ja3MuYy0yMzczLSAqL1xcbmZzL2xvY2tzLmM6MjM3NDpzdGF0aWMgcGlkX3QgbG9ja3NfdHJhbnNsYXRlX3BpZChzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmZsLCBzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMpXFxuZnMvbG9ja3MuYy0yMzc1LXtcXG4tLVxcbmZzL2xvY2tzLmMtMjQwMC1cXG5mcy9sb2Nrcy5jOjI0MDE6c3RhdGljIGludCBwb3NpeF9sb2NrX3RvX2Zsb2NrKHN0cnVjdCBmbG9jayAqZmxvY2ssIHN0cnVjdCBmaWxlX2xvY2sgKmZsKVxcbmZzL2xvY2tzLmMtMjQwMi17XFxuLS1cXG5mcy9sb2Nrcy5jLTI0MjItI2lmIEJJVFNfUEVSX0xPTkcgPT0gMzJcXG5mcy9sb2Nrcy5jOjI0MjM6c3RhdGljIHZvaWQgcG9zaXhfbG9ja190b19mbG9jazY0KHN0cnVjdCBmbG9jazY0ICpmbG9jaywgc3RydWN0IGZpbGVfbG9jayAqZmwpXFxuZnMvbG9ja3MuYy0yNDI0LXtcXG4tLVxcbmZzL2xvY2tzLmMtMjQzNi0gKi9cXG5mcy9sb2Nrcy5jOjI0Mzc6aW50IGZjbnRsX2dldGxrKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCBzdHJ1Y3QgZmxvY2sgKmZsb2NrKVxcbmZzL2xvY2tzLmMtMjQzOC17XFxuLS1cXG5mcy9sb2Nrcy5jLTI1MTItICovXFxuZnMvbG9ja3MuYzoyNTEzOmludCB2ZnNfbG9ja19maWxlKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCwgc3RydWN0IGZpbGVfbG9jayAqY29uZilcXG5mcy9sb2Nrcy5jLTI1MTQte1xcbi0tXFxuZnMvbG9ja3MuYy0yNTIwLX1cXG5mcy9sb2Nrcy5jOjI1MjE6RVhQT1JUX1NZTUJPTF9HUEwodmZzX2xvY2tfZmlsZSk7XFxuZnMvbG9ja3MuYy0yNTIyLVxcbmZzL2xvY2tzLmM6MjUyMzpzdGF0aWMgaW50IGRvX2xvY2tfZmlsZV93YWl0KHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLFxcbmZzL2xvY2tzLmMtMjUyNC1cXHRcXHRcXHQgICAgIHN0cnVjdCBmaWxlX2xvY2sgKmZsKVxcbi0tXFxuZnMvbG9ja3MuYz0yNTQ3PXN0YXRpYyBpbnRcXG5mcy9sb2Nrcy5jOjI1NDg6Y2hlY2tfZm1vZGVfZm9yX3NldGxrKHN0cnVjdCBmaWxlX2xvY2sgKmZsKVxcbmZzL2xvY2tzLmMtMjU0OS17XFxuLS1cXG5mcy9sb2Nrcy5jLTI1NjQtICovXFxuZnMvbG9ja3MuYzoyNTY1OmludCBmY250bF9zZXRsayh1bnNpZ25lZCBpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLFxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjozMTozNy4zNTU4NzY3ODhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTIxOTQ5ODQ2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS2VybmVsIExvY2tpbmcgQ29uZmlndXJhdGlvbiBhbmQgU3ltYm9sIFZpc2liaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGBmY250bF9zZXRsa2AsIGBmY250bF9zZXRsazY0YCwgYW5kIGBsb2Nrc19zaG93YC4gRmlyc3QgcXVlc3Rpb246IGlzIGBsb2Nrc19zaG93YCBzdGF0aWMgd2l0aGluIGBmcy9sb2Nrcy5jYD8gVGhhdCdzIGtleSBiZWNhdXNlIHRoZSBkb2N1bWVudGF0aW9uIHByZWZlcnMgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMsIGFzIHN0YXRpYyBmdW5jdGlvbnMgY2FuIGJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLCBsb3NpbmcgdGhlaXIgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy5cblxuUmlnaHQsIHNvIGNhbiBgbG9ja3Nfc2hvd2AgZXZlbiAqYmUqIGEgXCJGb2N1c1N5bWJvbFwiIGlmIGl0J3MgcG90ZW50aWFsbHkgaW5saW5lZD8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0IGFjdHVhbGx5IGhhcyBhIHN5bWJvbC4gQWhhISBJdCAqaXMqIHJlZmVyZW5jZWQgaW4gYGxvY2tzX3NlcV9vcGVyYXRpb25zYCBiZWNhdXNlIGl0cyBhZGRyZXNzIGlzIHRha2VuIChgLnNob3cgPSBsb2Nrc19zaG93YCkuIFRoYXQgbWVhbnMgdGhlIGNvbXBpbGVyIGNhbid0IGlubGluZSBpdDsgaXQgaGFzIHRvIGdlbmVyYXRlIGEgZnVuY3Rpb24gcG9pbnRlciBhbmQsIHRoZXJlZm9yZSwgYSBkaXN0aW5jdCBzeW1ib2wuIEdvb2QuXG5cbk5leHQsIEkgbmVlZCB0byBjb25zaWRlciBwb3RlbnRpYWwgcmVsZXZhbnQgZW50cnlwb2ludHMuIE9idmlvdXNseSBgZmNudGxfc2V0bGtgLCBhbmQgYGZjbnRsX2dldGxrYCwgd2hpY2ggYXJlIHVzZWQgaW4gYGZjbnRsYC4gSXQgYWxzbyBzZWVtcyB0aGF0IHRoaW5ncyBsaWtlIGBzeXNfZmxvY2tgIGNvdWxkIGJlIHJlbGV2YW50LCBhbG9uZ3NpZGUgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBvZiB0aGUgYGxvY2tzX3Nob3dgIHN5c3RlbSBhcyB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byB2aWV3IHRoZSBsb2Nrcy5cblxuU28sIGxldCdzIG1hcCBvdXQgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlncy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ3ZlIGdvdCBldmVyeXRoaW5nIGVuYWJsZWQ6XG5cbjEuICBgRklMRV9MT0NLSU5HYDogVGhpcyBpcyBlc3NlbnRpYWwsIGFzIGl0IGVuYWJsZXMgYGxvY2tzLmNgLlxuMi4gIGBQUk9DX0ZTYDogTmVlZGVkIGJlY2F1c2UgYGZzL2xvY2tzLmNgIHVzZXMgYCNpZmRlZiBDT05GSUdfUFJPQ19GU2AsIGFuZCB0aGF0J3Mgd2hlcmUgYGxvY2tzX3Nob3dgIGFuZCB0aGUgYC9wcm9jL2xvY2tzYCBmaWxlIGFyZSBkZWZpbmVkLlxuMy4gIGBQSURfTlNgOiBUaGlzIGlzIG5lZWRlZCB0byBlbmFibGUgdGhlIHVzYWdlIG9mIHBpZCBuYW1lc3BhY2VzIGFuZCBlbnN1cmluZyB0aGF0IGBwcm9jX3BpZG5zICE9IFx1MDAyNmluaXRfcGlkX25zYC5cblxuQWxyaWdodCwgbGV0J3MgZG91YmxlIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcy4gQmFjayB0byBgZnMvbG9ja3MuY2AgZm9yIGFueSBtb3JlIGNsdWVzLlxuXG5ZdXAsIEknbSBzZWVpbmcgdGhhdCBgQ09ORklHX1BST0NfRlNgIHN1cnJvdW5kcyB0aGUgY29kZSBmcm9tIGxpbmVzIDI5MTItMzE1NS4gYENPTkZJR19GSUxFX0xPQ0tJTkdgIGlzIGRlZmluZWQgaW4gYGZzL01ha2VmaWxlYCBhcyBgb2JqLSQoQ09ORklHX0ZJTEVfTE9DS0lORykgKz0gbG9ja3Mub2AuIEFuZCBgQ09ORklHX1BJRF9OU2AgaXMgaW4gYGluaXQvS2NvbmZpZ2AuIExldCdzIGRpZyBpbnRvIHRoYXQgYGluaXQvS2NvbmZpZ2AgZm9yIGBQSURfTlNgOlxuXG5gYGBcbmNvbmZpZyBQSURfTlNcblx0Ym9vbCBcIlBJRCBOYW1lc3BhY2VzXCJcblx0ZGVmYXVsdCB5XG5cdGRlcGVuZHMgb24gTkFNRVNQQUNFU1xuXHRkZXBlbmRzIG9uIENIRUNLUE9JTlRfUkVTVE9SRSB8fCBORVRcbmBgYFxuXG5XYWl0LCBob2xkIG9uISBJIG5lZWQgdG8gYmUgKnN1cmUqIEkgdW5kZXJzdGFuZCB0aG9zZSBkZXBlbmRlbmNpZXMuIExldCdzIHNlZSBleGFjdGx5IHdoYXQgYFBJRF9OU2AgcmVsaWVzIG9uIGluIGRldGFpbC4gVGhhdCdzIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MjAwMzcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MzE6NDIuNTc1Mzc5NjEyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTc0MTQ3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUElEX05TXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTQ0Nj1jb25maWcgVVNFUl9OU1xcbi0tXFxuaW5pdC9LY29uZmlnLTE0NTktXFxuaW5pdC9LY29uZmlnOjE0NjA6Y29uZmlnIFBJRF9OU1xcbmluaXQvS2NvbmZpZy0xNDYxLVxcdGJvb2wgXFxcIlBJRCBOYW1lc3BhY2VzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjozMTo0Mi42NDcxMjU5NzFaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU2OTM0MzUxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgb2YgdGhlIGBpbml0L0tjb25maWdgIGZpbGUsIGFzIEkgdW5kZXJzdGFuZCB0aGVtOlxuXG4qKkRpc3NlY3RpbmcgaW5pdC9LY29uZmlnIExpbmVzIDE0NTAtMTQ4MCoqXG5cbk9rYXksIHNvIGxldCdzIGRpZyBpbnRvIGxpbmVzIDE0NTAgdG8gMTQ4MCBvZiBgaW5pdC9LY29uZmlnYC4gSSdtIGdvaW5nIHRvIHBhcnNlIHdoYXQncyBnb2luZyBvbiB3aXRoaW4gdGhvc2UgbGluZXMgb2YgY29uZmlnLiBJdCdzIGxpa2VseSByZWxhdGVkIHRvIHNvbWUgY29yZSBzeXN0ZW0gaW5pdGlhbGl6YXRpb24sIHBvc3NpYmx5IGxpbmtlZCB0byB0aGUgZWFybHkgYm9vdCBwcm9jZXNzIG9yIGZ1bmRhbWVudGFsIGhhcmR3YXJlIHNldHVwLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoZXNlIGtpbmRzIG9mIHNldHRpbmdzIGFyZSB1c3VhbGx5IGludHJpY2F0ZWx5IGludGVydHdpbmVkLlxuXG5JIGFudGljaXBhdGUgdGhlIGNvbmZpZyBvcHRpb25zIGluIHRoYXQgc2VjdGlvbiB3aWxsIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBvcHRpb25zLCBvciBkZWZhdWx0cywgdGhhdCBhZmZlY3QgaG93IHRoZSBrZXJuZWwgaW5pdGlhbGl6ZXMgdmFyaW91cyBjb21wb25lbnRzIGR1cmluZyB0aGUgdmVyeSBmaXJzdCBzdGFnZXMgb2YgYm9vdGluZyB0aGUgc3lzdGVtLiBJJ20gZ3Vlc3NpbmcgaXQgbWlnaHQgY29udGFpbiBzZXR0aW5ncyBmb3IgdGhpbmdzIGxpa2UgY29uc29sZSBpbml0aWFsaXphdGlvbiwgZWFybHkgbWVtb3J5IGFsbG9jYXRpb24sIG9yIHBlcmhhcHMgZXZlbiBpbml0aWFsIGludGVycnVwdCBzZXR1cC4gVGhlIGRlcGVuZGVuY3kgc3RydWN0dXJlIGlzIGtleSBoZXJlLiBJJ2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgYW55IGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljYWwgZmxvdyBhbmQgaG93IHRoZXNlIG9wdGlvbnMgcmVsYXRlIHRvIG90aGVyLCBwb3RlbnRpYWxseSBtb3JlIGZ1bmRhbWVudGFsLCBrZXJuZWwgZmVhdHVyZXMuXG5cbkl0J3MgYWxzbyBsaWtlbHkgSSB3aWxsIG9ic2VydmUgdGhlIGludGVycGxheSBiZXR3ZWVuIHVzZXItZmFjaW5nIGNvbmZpZyBvcHRpb25zIGFuZCBpbnRlcm5hbCBrZXJuZWwgZGVmYXVsdHMuIEkgd2FudCB0byBsb29rIGZvciBhbnl0aGluZyB0aGF0IGNhbiBiZSBhZGp1c3RlZC4gVGhpcyBpcyBhIGNydWNpYWwgc2VjdGlvbiBmb3IgY29udHJvbGxpbmcgc3lzdGVtIGJlaGF2aW9yIGZyb20gdGhlIHZlcnkgc3RhcnQuIEnigJltIGVzcGVjaWFsbHkgbG9va2luZyBmb3IgYW55IHN1YnRsZSBoaW50cyByZWdhcmRpbmcgcGVyZm9ybWFuY2Ugb3Igc2VjdXJpdHkgdHJhZGVvZmZzIHRoYXQgYXJlIG9mdGVuIHByZXNlbnQgaW4gdGhlc2UgbG93LWxldmVsIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTI2NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjMxOjQ1LjIxNjQ3NDExOVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODQ0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0NTAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0NTA6XFx0XFx0ICBUaGlzIGFsbG93cyBjb250YWluZXJzLCBpLmUuIHZzZXJ2ZXJzLCB0byB1c2UgdXNlciBuYW1lc3BhY2VzXFxuMTQ1MTpcXHRcXHQgIHRvIHByb3ZpZGUgZGlmZmVyZW50IHVzZXIgaW5mbyBmb3IgZGlmZmVyZW50IHNlcnZlcnMuXFxuMTQ1MjpcXHRcXG4xNDUzOlxcdFxcdCAgV2hlbiB1c2VyIG5hbWVzcGFjZXMgYXJlIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBpdCBpc1xcbjE0NTQ6XFx0XFx0ICByZWNvbW1lbmRlZCB0aGF0IHRoZSBNRU1DRyBvcHRpb24gYWxzbyBiZSBlbmFibGVkIGFuZCB0aGF0XFxuMTQ1NTpcXHRcXHQgIHVzZXItc3BhY2UgdXNlIHRoZSBtZW1vcnkgY29udHJvbCBncm91cHMgdG8gbGltaXQgdGhlIGFtb3VudFxcbjE0NTY6XFx0XFx0ICBvZiBtZW1vcnkgYSBtZW1vcnkgdW5wcml2aWxlZ2VkIHVzZXJzIGNhbiB1c2UuXFxuMTQ1NzpcXHRcXG4xNDU4OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4xNDU5OlxcdFxcbjE0NjA6XFx0Y29uZmlnIFBJRF9OU1xcbjE0NjE6XFx0XFx0Ym9vbCBcXFwiUElEIE5hbWVzcGFjZXNcXFwiXFxuMTQ2MjpcXHRcXHRkZWZhdWx0IHlcXG4xNDYzOlxcdFxcdGhlbHBcXG4xNDY0OlxcdFxcdCAgU3VwcG9ydCBwcm9jZXNzIGlkIG5hbWVzcGFjZXMuICBUaGlzIGFsbG93cyBoYXZpbmcgbXVsdGlwbGVcXG4xNDY1OlxcdFxcdCAgcHJvY2Vzc2VzIHdpdGggdGhlIHNhbWUgcGlkIGFzIGxvbmcgYXMgdGhleSBhcmUgaW4gZGlmZmVyZW50XFxuMTQ2NjpcXHRcXHQgIHBpZCBuYW1lc3BhY2VzLiAgVGhpcyBpcyBhIGJ1aWxkaW5nIGJsb2NrIG9mIGNvbnRhaW5lcnMuXFxuMTQ2NzpcXHRcXG4xNDY4OlxcdGNvbmZpZyBORVRfTlNcXG4xNDY5OlxcdFxcdGJvb2wgXFxcIk5ldHdvcmsgbmFtZXNwYWNlXFxcIlxcbjE0NzA6XFx0XFx0ZGVwZW5kcyBvbiBORVRcXG4xNDcxOlxcdFxcdGRlZmF1bHQgeVxcbjE0NzI6XFx0XFx0aGVscFxcbjE0NzM6XFx0XFx0ICBBbGxvdyB1c2VyIHNwYWNlIHRvIGNyZWF0ZSB3aGF0IGFwcGVhciB0byBiZSBtdWx0aXBsZSBpbnN0YW5jZXNcXG4xNDc0OlxcdFxcdCAgb2YgdGhlIG5ldHdvcmsgc3RhY2suXFxuMTQ3NTpcXHRcXG4xNDc2OlxcdGVuZGlmICMgTkFNRVNQQUNFU1xcbjE0Nzc6XFx0XFxuMTQ3ODpcXHRjb25maWcgQ0hFQ0tQT0lOVF9SRVNUT1JFXFxuMTQ3OTpcXHRcXHRib29sIFxcXCJDaGVja3BvaW50L3Jlc3RvcmUgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MzE6NDUuMjE2NjYxNDI5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NTU4MzE4MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBLY29uZmlnIExhYnlyaW50aDogQSBQcmUtTGluZSAxNDUwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgaW5pdC9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGJlZm9yZSBsaW5lIDE0NTAuIFRoZSBtZW50aW9uIG9mIE5BTUVTUEFDRVMgaXMgdGhlIHRyaWdnZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0LiBJJ20gYXNzdW1pbmcsIGdpdmVuIHRoZSBmaWxlIGFuZCB0aGUgZ2VuZXJhbCBjb250ZXh0IG9mIGtlcm5lbCBjb25maWd1cmF0aW9uLCB0aGF0IHdlIGFyZSBkZWFsaW5nIHdpdGggc29tZSBhc3BlY3Qgb2YgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbSwgbGlrZWx5IHJlbGF0ZWQgdG8gbmFtZXNwYWNlcyBpbiBzb21lIHdheS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHJlbGF0aW9uc2hpcHMgYXJlIGRlZmluZWQgb3IgdXNlZCBwcmlvciB0byB0aGF0IGxpbmUuIEkgbmVlZCB0byBkaXNjb3ZlciB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSBvdmVyYWxsIHBpY3R1cmUgYmVmb3JlIEkgY2FuIHVuZGVyc3RhbmQgd2hhdCB0aGUgbGluZSBpcyBkb2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIwMjMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjMxOjQ4LjA3MjQ5NjE0MloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzAxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0MzA6XFx0XFx0ZGVmYXVsdCB5XFxuMTQzMTpcXHRcXHRoZWxwXFxuMTQzMjpcXHRcXHQgIEluIHRoaXMgbmFtZXNwYWNlIGJvb3R0aW1lIGFuZCBtb25vdG9uaWMgY2xvY2tzIGNhbiBiZSBzZXQuXFxuMTQzMzpcXHRcXHQgIFRoZSB0aW1lIHdpbGwga2VlcCBnb2luZyB3aXRoIHRoZSBzYW1lIHBhY2UuXFxuMTQzNDpcXHRcXG4xNDM1OlxcdGNvbmZpZyBUSU1FX05TX1ZEU09cXG4xNDM2OlxcdFxcdGRlZl9ib29sIFRJTUVfTlMgXFx1MDAyNlxcdTAwMjYgR0VORVJJQ19HRVRUSU1FT0ZEQVlcXG4xNDM3OlxcdFxcbjE0Mzg6XFx0Y29uZmlnIElQQ19OU1xcbjE0Mzk6XFx0XFx0Ym9vbCBcXFwiSVBDIG5hbWVzcGFjZVxcXCJcXG4xNDQwOlxcdFxcdGRlcGVuZHMgb24gKFNZU1ZJUEMgfHwgUE9TSVhfTVFVRVVFKVxcbjE0NDE6XFx0XFx0ZGVmYXVsdCB5XFxuMTQ0MjpcXHRcXHRoZWxwXFxuMTQ0MzpcXHRcXHQgIEluIHRoaXMgbmFtZXNwYWNlIHRhc2tzIHdvcmsgd2l0aCBJUEMgaWRzIHdoaWNoIGNvcnJlc3BvbmQgdG9cXG4xNDQ0OlxcdFxcdCAgZGlmZmVyZW50IElQQyBvYmplY3RzIGluIGRpZmZlcmVudCBuYW1lc3BhY2VzLlxcbjE0NDU6XFx0XFxuMTQ0NjpcXHRjb25maWcgVVNFUl9OU1xcbjE0NDc6XFx0XFx0Ym9vbCBcXFwiVXNlciBuYW1lc3BhY2VcXFwiXFxuMTQ0ODpcXHRcXHRkZWZhdWx0IG5cXG4xNDQ5OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MzE6NDguMDcyNjcwMzUzWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxMDgyNTY0NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTmF2aWdhdGluZyB0aGUgTmFtZXNwYWNlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBgbWVudWNvbmZpZ2AgZm9yIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgbmFtZXNwYWNlIGNvbmZpZ3VyYXRpb25zLiBXaGVyZSBkbyBJIGV2ZW4gYmVnaW4/IFJpZ2h0LCBsZXQncyBzdGFydCB3aXRoIGEgc2VhcmNoLiBJJ2xsIG5lZWQgdG8gbG9jYXRlIHdoZXJlIGBOQU1FU1BBQ0VTYCBpcyBkZWZpbmVkIGluIHRoZSBtZW51IHN0cnVjdHVyZS4gVW5kZXJzdGFuZGluZyB0aGUgYnJhbmNoaW5nIGxvZ2ljIGZyb20gdGhhdCBwb2ludCBpcyBrZXkuIEl0J3Mgbm90IGp1c3QgYWJvdXQgZmluZGluZyB0aGUgaW5pdGlhbCBlbnRyeSwgYnV0IGFsc28gdHJhY2luZyB0aGUgZGVwZW5kZW5jaWVzLCBkZWZhdWx0cywgYW5kIGFueSBjb25kaXRpb25hbCBidWlsZCBvcHRpb25zIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuIE15IGd1dCB0ZWxscyBtZSB0aGVyZSdzIHByb2JhYmx5IGEgaGllcmFyY2hpY2FsIHNldHVwLCBzbyBJIHNob3VsZCBiZSBwcmVwYXJlZCB0byBkaWcgdGhyb3VnaCBzZXZlcmFsIGxldmVscyBvZiBpbmNsdWRlcyBhbmQgY29uZGl0aW9uYWwgc3RhdGVtZW50cyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBrZXJuZWwgZmVhdHVyZXMgYW5kIGNvbmZpZ3VyYXRpb25zIG1pZ2h0IGltcGFjdCBvciBiZSBpbXBhY3RlZCBieSB0aGUgbmFtZXNwYWNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI0OTIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjMxOjUxLjE4MDkyOTU0MVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2OTk4OTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbnVjb25maWcgTkFNRVNQQUNFU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE0MDc9ZW5kaWYgIyBDR1JPVVBTXFxuaW5pdC9LY29uZmlnLTE0MDgtXFxuaW5pdC9LY29uZmlnOjE0MDk6bWVudWNvbmZpZyBOQU1FU1BBQ0VTXFxuaW5pdC9LY29uZmlnLTE0MTAtXFx0Ym9vbCBcXFwiTmFtZXNwYWNlcyBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MzE6NTEuMzQ3OTM1Njg4WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMjMwNDM0MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgLSBBIFF1aWNrIEF1ZGl0KipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIEkgbmVlZCB0byBxdWlja2x5IGdyYXNwIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gYSBmZXcga2V5IGFyZWFzOiBOQU1FU1BBQ0VTLCBQSURfTlMsIEZJTEVfTE9DS0lORywgYW5kIFBST0NfRlMuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gZW5zdXJpbmcgdGhlc2UgYXJlIGNvcnJlY3RseSBzZXQgYW5kIGludGVyYWN0IHByb3Blcmx5LlxuXG5UaGUgcGxhbiBpcyB0byBkaXZlIGRlZXBlciBpbnRvIGBDT05GSUdfRklMRV9MT0NLSU5HYCBhbmQgYENPTkZJR19QUk9DX0ZTYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBpbnZvbHZlZCB0aGF0IG1pZ2h0IG5vdCBiZSBpbW1lZGlhdGVseSBvYnZpb3VzLiBTcGVjaWZpY2FsbHksIEknbGwgZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZSwgY2hlY2tpbmcgYGZzL3Byb2MvS2NvbmZpZ2AgZm9yIHRoZSBkZXBlbmRlbmNpZXMgb2YgUFJPQ19GUy4gVGhpcyB3aWxsIGdpdmUgYSBnb29kIG92ZXJ2aWV3IGFuZCBoZWxwIG1lIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIG9yIGFyZWFzIHRoYXQgbmVlZCBmdXJ0aGVyIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNzg4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MzE6NTMuNjcwOTgzODNaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0MTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3Byb2MvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFBST0NfRlNcXG4gICAzOlxcdFxcdGJvb2wgXFxcIi9wcm9jIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbiAgIDQ6XFx0XFx0ZGVmYXVsdCB5XFxuICAgNTpcXHRcXHRoZWxwXFxuICAgNjpcXHRcXHQgIFRoaXMgaXMgYSB2aXJ0dWFsIGZpbGUgc3lzdGVtIHByb3ZpZGluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3RhdHVzXFxuICAgNzpcXHRcXHQgIG9mIHRoZSBzeXN0ZW0uIFxcXCJWaXJ0dWFsXFxcIiBtZWFucyB0aGF0IGl0IGRvZXNuJ3QgdGFrZSB1cCBhbnkgc3BhY2Ugb25cXG4gICA4OlxcdFxcdCAgeW91ciBoYXJkIGRpc2s6IHRoZSBmaWxlcyBhcmUgY3JlYXRlZCBvbiB0aGUgZmx5IGJ5IHRoZSBrZXJuZWwgd2hlblxcbiAgIDk6XFx0XFx0ICB5b3UgdHJ5IHRvIGFjY2VzcyB0aGVtLiBBbHNvLCB5b3UgY2Fubm90IHJlYWQgdGhlIGZpbGVzIHdpdGggb2xkZXJcXG4gIDEwOlxcdFxcdCAgdmVyc2lvbiBvZiB0aGUgcHJvZ3JhbSBsZXNzOiB5b3UgbmVlZCB0byB1c2UgbW9yZSBvciBjYXQuXFxuICAxMTpcXHRcXG4gIDEyOlxcdFxcdCAgSXQncyB0b3RhbGx5IGNvb2w7IGZvciBleGFtcGxlLCBcXFwiY2F0IC9wcm9jL2ludGVycnVwdHNcXFwiIGdpdmVzXFxuICAxMzpcXHRcXHQgIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgdGhlIGRpZmZlcmVudCBJUlFzIGFyZSB1c2VkIGZvciBhdCB0aGUgbW9tZW50XFxuICAxNDpcXHRcXHQgICh0aGVyZSBpcyBhIHNtYWxsIG51bWJlciBvZiBJbnRlcnJ1cHQgUmVRdWVzdCBsaW5lcyBpbiB5b3VyIGNvbXB1dGVyXFxuICAxNTpcXHRcXHQgIHRoYXQgYXJlIHVzZWQgYnkgdGhlIGF0dGFjaGVkIGRldmljZXMgdG8gZ2FpbiB0aGUgQ1BVJ3MgYXR0ZW50aW9uIC0tXFxuICAxNjpcXHRcXHQgIG9mdGVuIGEgc291cmNlIG9mIHRyb3VibGUgaWYgdHdvIGRldmljZXMgYXJlIG1pc3Rha2VubHkgY29uZmlndXJlZFxcbiAgMTc6XFx0XFx0ICB0byB1c2UgdGhlIHNhbWUgSVJRKS4gVGhlIHByb2dyYW0gcHJvY2luZm8gdG8gZGlzcGxheSBzb21lXFxuICAxODpcXHRcXHQgIGluZm9ybWF0aW9uIGFib3V0IHlvdXIgc3lzdGVtIGdhdGhlcmVkIGZyb20gdGhlIC9wcm9jIGZpbGUgc3lzdGVtLlxcbiAgMTk6XFx0XFxuICAyMDpcXHRcXHQgIEJlZm9yZSB5b3UgY2FuIHVzZSB0aGUgL3Byb2MgZmlsZSBzeXN0ZW0sIGl0IGhhcyB0byBiZSBtb3VudGVkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjozMTo1My42NzExMjA1M1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MDUwMzI0Njc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IEFzc2Vzc21lbnQ6IE9GRCBMb2NrIEZpbHRlcmluZyBpbiBgL3Byb2MvbG9ja3NgKipcblxuQWxyaWdodCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cy4gRmlyc3QsIGxldCdzIHZlcmlmeSB3aGF0IHdlJ3JlIGtleWluZyBpbiBvbiB3aXRoIGBGb2N1c1N5bWJvbHNgLiBPa2F5LCB3ZSd2ZSBnb3QgYGxvY2tzX3Nob3dgLCB3aGljaCBpcyB0aGUgYC9wcm9jL2xvY2tzYCBkaXNwbGF5LCByaWdodCB3aGVyZSB0aGUgbmV3IGxvZ2ljIHJlc2lkZXMuIFRoZW4sIGBmY250bF9zZXRsa2AgYW5kIGBmY250bF9nZXRsa2AsIGFzIHRoZXkgaGFuZGxlIGxvY2sgY3JlYXRpb24gYW5kIHJldHJpZXZhbCwgaW5jbHVkaW5nIHRoZSBvcGVuIGZpbGUgZGVzY3JpcHRpb24gKE9GRCkgbG9ja3MgdGhhdCBhcmUgdGhlIGZvY2FsIHBvaW50IGhlcmUuIEZpbmFsbHksIGBsb2Nrc190cmFuc2xhdGVfcGlkYCBmb3IgY29udGV4dCwgYWx0aG91Z2ggaXQgYXBwZWFycyB0aGlzIGlzIHdoYXQgdGhlIHBhdGNoICpieXBhc3NlcyogZm9yIE9GRCBsb2Nrcy5cblxuTm93LCB0aGUgcmVhbCBxdWVzdGlvbjogaXMgdGhpcyBgV29ydGhGdXp6aW5nYD8gVGhpcyBjaGFuZ2UgZGlyZWN0bHkgbW9kaWZpZXMgdGhlIHZpc2liaWxpdHkgZmlsdGVyaW5nIGluIGAvcHJvYy9sb2Nrc2Agd2hlbiBPRkQgbG9ja3MgYXJlIGludm9sdmVkLCBlc3BlY2lhbGx5IHdoZW4gUElEIG5hbWVzcGFjZXMgYXJlIGluIHBsYXkuIEl0IHNlZW1zIHRoZSBjb3JlIGlzc3VlIGxpZXMgaW4gdGhlIGZhY3QgdGhhdCBPRkQgbG9ja3MgaGF2ZSBhIFBJRCBvZiAtMS4gVGhlIHBhdGNoIGludHJvZHVjZXMgdGhpcyBuZXcgUElEIGxvb2t1cCBhbmQgZmlsdGVyaW5nIHVzaW5nIGBmbGNfcGlkYCAodGhlIHByb2Nlc3MncyBUR0lEKSB3aGljaCBpcyBtdWNoIGJldHRlci5cblxuVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBhcmVhIG9mIHRoZSBWRlMgbG9ja2luZyBpbXBsZW1lbnRhdGlvbiBhbmQgcHJvY2ZzLiBXZSdyZSB0YWxraW5nIGNvcmUga2VybmVsIGxvZ2ljLCBzb21ldGhpbmcgdGhhdCdzIHJlbGF0aXZlbHkgZWFzeSB0byBoaXQgc2ltcGx5IGJ5IHVzaW5nIGBmY250bGAgdG8gY3JlYXRlIGxvY2tzIChzcGVjaWZpY2FsbHkgYEZfT0ZEX1NFVExLYCkgYW5kIHRoZW4gcmVhZGluZyBgL3Byb2MvbG9ja3NgIGVpdGhlciBpbnNpZGUgb3Igb3V0c2lkZSBQSUQgbmFtZXNwYWNlcy4gSXQgc2VlbXMgbGlrZSBpdCdzIHdpdGhpbiByZWFjaCwgdGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgc2hvdWxkIGJlIHNldCB0byBgdHJ1ZWAuXG5cbkxldCdzIGRvIGEgZmluYWwgY2hlY2s6IHRoZSBlbmFibGluZyBjb25maWdzLCBgRklMRV9MT0NLSU5HYCwgYFBST0NfRlNgLCBgUElEX05TYCwgYW5kIGBOQU1FU1BBQ0VTYCBhcmUgYWxsIHByZXNlbnQuIFRoZSBmb2N1cyBzeW1ib2xzIGFyZSBzdGlsbCBzb2xpZDogYGxvY2tzX3Nob3dgLCBgZmNudGxfc2V0bGtgLCBhbmQgYGZjbnRsX2dldGxrYC4gVGhlIHBhdGNoIGFsdGVycyBgL3Byb2MvbG9ja3NgIHRvIGZpbHRlciBwcm9wZXJseSBmb3IgT0ZEIGxvY2tzIHdoZW4gcmVhZGluZyBmcm9tIFBJRCBuYW1lc3BhY2VzLCBhcyB0aGUgbG9jayBvd25lcidzIGBmbGNfcGlkYCBpcyBiZWluZyBjaGVja2VkIGFnYWluc3QgYHByb2NfcGlkbnNgIHZpYSBSQ1UuIFN0YW5kYXJkIGZpbGUgbG9ja2luZyBhbmQgcHJvY2ZzIGxvZ2ljLlxuXG5SaWdodC4gVGltZSB0byBpbnZva2UgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM0MDksIk91dHB1dFRva2VucyI6MTg5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTA0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MzI6MDAuNzIxNDQ4ODc3WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5MjY2ODg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGSUxFX0xPQ0tJTkdcIixcbiAgICBcIlBST0NfRlNcIixcbiAgICBcIk5BTUVTUEFDRVNcIixcbiAgICBcIlBJRF9OU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxvY2tzX3Nob3dcIixcbiAgICBcImZjbnRsX3NldGxrXCIsXG4gICAgXCJmY250bF9nZXRsa1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBsb2Nrc19zaG93KClgIGluIGZzL2xvY2tzLmMgdG8gcHJvcGVybHkgZmlsdGVyIE9wZW4gRmlsZSBEZXNjcmlwdGlvbiAoT0ZEKSBsb2NrcyB3aGVuIGAvcHJvYy9sb2Nrc2AgaXMgcmVhZCBmcm9tIHdpdGhpbiBhIG5vbi1pbml0aWFsIFBJRCBuYW1lc3BhY2UuIEJlY2F1c2UgT0ZEIGxvY2tzIHJlcG9ydCBwaWQgLTEsIHByZXZpb3VzIG5hbWVzcGFjZSBmaWx0ZXJpbmcgZmFpbGVkIHRvIGNvbmNlYWwgT0ZEIGxvY2tzIG93bmVkIGJ5IHByb2Nlc3NlcyBvdXRzaWRlIHRoZSBQSUQgbmFtZXNwYWNlLiBUaGUgcGF0Y2ggYWRkcyBSQ1UtYmFzZWQgUElEIGxvb2t1cCBhbmQgbmFtZXNwYWNlIHZpc2liaWxpdHkgY2hlY2tzIG9uIGBmbGNfcGlkYC4gVGhpcyBjaGFuZ2VzIHJlYWNoYWJsZSBjb3JlIFZGUyAvIHByb2NmcyBsb2dpYyB0aGF0IGNhbiBiZSBleGVyY2lzZWQgdmlhIGZpbGUgbG9ja2luZyBzeXNjYWxscyBhbmQgcHJvY2ZzIHJlYWRzIGFjcm9zcyBQSUQgbmFtZXNwYWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGSUxFX0xPQ0tJTkdcIixcbiAgICBcIlBST0NfRlNcIixcbiAgICBcIk5BTUVTUEFDRVNcIixcbiAgICBcIlBJRF9OU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxvY2tzX3Nob3dcIixcbiAgICBcImZjbnRsX3NldGxrXCIsXG4gICAgXCJmY250bF9nZXRsa1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBsb2Nrc19zaG93KClgIGluIGZzL2xvY2tzLmMgdG8gcHJvcGVybHkgZmlsdGVyIE9wZW4gRmlsZSBEZXNjcmlwdGlvbiAoT0ZEKSBsb2NrcyB3aGVuIGAvcHJvYy9sb2Nrc2AgaXMgcmVhZCBmcm9tIHdpdGhpbiBhIG5vbi1pbml0aWFsIFBJRCBuYW1lc3BhY2UuIEJlY2F1c2UgT0ZEIGxvY2tzIHJlcG9ydCBwaWQgLTEsIHByZXZpb3VzIG5hbWVzcGFjZSBmaWx0ZXJpbmcgZmFpbGVkIHRvIGNvbmNlYWwgT0ZEIGxvY2tzIG93bmVkIGJ5IHByb2Nlc3NlcyBvdXRzaWRlIHRoZSBQSUQgbmFtZXNwYWNlLiBUaGUgcGF0Y2ggYWRkcyBSQ1UtYmFzZWQgUElEIGxvb2t1cCBhbmQgbmFtZXNwYWNlIHZpc2liaWxpdHkgY2hlY2tzIG9uIGBmbGNfcGlkYC4gVGhpcyBjaGFuZ2VzIHJlYWNoYWJsZSBjb3JlIFZGUyAvIHByb2NmcyBsb2dpYyB0aGF0IGNhbiBiZSBleGVyY2lzZWQgdmlhIGZpbGUgbG9ja2luZyBzeXNjYWxscyBhbmQgcHJvY2ZzIHJlYWRzIGFjcm9zcyBQSUQgbmFtZXNwYWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MzI6MDAuODQwNzI0MzE1WiIsIlNlcSI6NDEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQzNTU1NDI5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjMyOjAwLjg0MTM2Njc3NVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE3NDM0OTA3Mjg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbG9ja3Nfc2hvd2AgaW4gYGZzL2xvY2tzLmNgIHRvIGZpbHRlciBvdXQgb3BlbiBmaWxlIGRlc2NyaXB0aW9uIChPRkQpIGxvY2tzIGZyb20gYC9wcm9jL2xvY2tzYCB3aGVuIHZpZXdlZCBmcm9tIGEgbm9uLWluaXQgUElEIG5hbWVzcGFjZSBpZiB0aGUgb3duaW5nIFBJRCBpcyBub3QgdmlzaWJsZSB3aXRoaW4gdGhhdCBuYW1lc3BhY2UuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlLCBhbmQgaW5pdGlhbGl6ZXMgYWxsIGxvY2FsIHZhcmlhYmxlcyAoYHZpc2libGUgPSBmYWxzZWApLiBJdCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RocyBvciBjcmVhdGUgYW55IHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4OWFmNmFlZGQ4NDM0YTc0ZDE3MWM3ZjRjNDI0YThkYmM0Yzc1NWMyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAyMjozMDo1MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2xvY2tzLmMgYi9mcy9sb2Nrcy5jXG5pbmRleCA2ZTRmZjdmY2VjMDUzLi5kYjE3ODc5ZDkzMTk1IDEwMDY0NFxuLS0tIGEvZnMvbG9ja3MuY1xuKysrIGIvZnMvbG9ja3MuY1xuQEAgLTMwMjIsNiArMzAyMiwyMyBAQCBzdGF0aWMgaW50IGxvY2tzX3Nob3coc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICp2KVxuIFxuIFx0Y3VyID0gaGxpc3RfZW50cnkodiwgc3RydWN0IGZpbGVfbG9ja19jb3JlLCBmbGNfbGluayk7XG4gXG4rXHQvKlxuK1x0ICogT0ZEIGxvY2tzIGFyZSByZXBvcnRlZCB3aXRoIHBpZCAtMSwgc28gdGhlIGZpbHRlciBiZWxvdyBjYW5ub3Qgc2VlXG4rXHQgKiB0aGVpciBvd25lcjsgZmxjX3BpZCBob2xkcyB0aGUgb3duZXIgdGdpZCwgc28gZmlsdGVyIG9uIGl0LlxuK1x0ICovXG4rXHRpZiAoKGN1ci1cdTAwM2VmbGNfZmxhZ3MgXHUwMDI2IEZMX09GRExDSykgXHUwMDI2XHUwMDI2IHByb2NfcGlkbnMgIT0gXHUwMDI2aW5pdF9waWRfbnMpIHtcbitcdFx0c3RydWN0IHBpZCAqcGlkO1xuK1x0XHRib29sIHZpc2libGUgPSBmYWxzZTtcbitcbitcdFx0cmN1X3JlYWRfbG9jaygpO1xuK1x0XHRwaWQgPSBmaW5kX3BpZF9ucyhjdXItXHUwMDNlZmxjX3BpZCwgXHUwMDI2aW5pdF9waWRfbnMpO1xuK1x0XHRpZiAocGlkKVxuK1x0XHRcdHZpc2libGUgPSBwaWRfbnJfbnMocGlkLCBwcm9jX3BpZG5zKSAhPSAwO1xuK1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcdFx0aWYgKCF2aXNpYmxlKVxuK1x0XHRcdHJldHVybiAwO1xuK1x0fVxuK1xuIFx0aWYgKGxvY2tzX3RyYW5zbGF0ZV9waWQoY3VyLCBwcm9jX3BpZG5zKSA9PSAwKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjMyOjAwLjg0MTM2ODAwNVoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NjA1NzU5Mjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgZGlyZWN0aXZlcywgcmVuZGVyZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6XG5cbioqRGl2aW5nIGludG8gdGhlIGBmcy9sb2Nrcy5jYCBDb2RlKipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byB6b29tIGluIG9uIHRoZSBzcGVjaWZpYyBjb2RlIG1vZGlmaWNhdGlvbnMgd2l0aGluIGBmcy9sb2Nrcy5jYC4gS25vd2luZyBob3cgdGhpcyBzdWJzeXN0ZW0gd29ya3MsIEkgd2FudCB0byBlc3RhYmxpc2ggc29tZSBjb250ZXh0LiBJJ20gdGhpbmtpbmcsIFwiTGV0J3Mgc3RhcnQgYnkgc2NydXRpbml6aW5nIHRoZSBwYXRjaCBpdHNlbGYsIHRoZW4gYnJvYWRlbiB0aGUgc2NvcGUgdG8gYW5hbHl6ZSB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiB0aGF0IGZpbGUsIGBmcy9sb2Nrcy5jYC5cIiBJdCdzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSBcIndoeVwiIGJlaGluZCBhbnkgY2hhbmdlLiBPZnRlbiB0aGUgc3Vycm91bmRpbmcgY29kZSB3aWxsIGV4cGxhaW4gdGhlIG1vdGl2YXRpb24gZm9yIHRoZSBjb2RlLiBUaGlzIGdpdmVzIG1lIGEgZ29vZCBwbGFjZSB0byBzdGFydC4gQW5kIG9mIGNvdXJzZSwgc2luY2UgSSBrbm93IHRoZSBjb2RlIHByZXR0eSB3ZWxsLCBJIHNob3VsZCBzdGFydCBhdCBsaW5lIDMwMjIuIEkgY2FuIHN0YXJ0IGJ5IGluc3BlY3RpbmcgaXQgZm9yIGEgZ29vZCBwbGFjZSB0byBiZWdpbi4gVGhlbiBJIGNhbiB1c2UgYGdpdCBibGFtZWAgb3IgbXkgZmF2b3JpdGUgY29kZSBleHBsb3JhdGlvbiB0b29scyB0byBpbnZlc3RpZ2F0ZSwgc28gSSBjYW4gc2VlIHdoYXQgb3RoZXIgY2hhbmdlcyBhcmUgcmVsYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIyMiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MzI6MDYuNDQ3MTMwMTQxWiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9sb2Nrcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwMDAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMwMDA6XFx0XFxuMzAwMTpcXHRcXHQvKiBOVUxMIG5vZGUgb3Igcm9vdCBub2RlICovXFxuMzAwMjpcXHRcXHRpZiAobm9kZSA9PSBOVUxMIHx8IG5vZGUtXFx1MDAzZWZsY19ibG9ja2VyID09IE5VTEwpXFxuMzAwMzpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4zMDA0OlxcdFxcbjMwMDU6XFx0XFx0LyogTmV4dCBtZW1iZXIgaW4gdGhlIGxpbmtlZCBsaXN0IGNvdWxkIGJlIGl0c2VsZiAqL1xcbjMwMDY6XFx0XFx0dG1wID0gbGlzdF9uZXh0X2VudHJ5KG5vZGUsIGZsY19ibG9ja2VkX21lbWJlcik7XFxuMzAwNzpcXHRcXHRpZiAobGlzdF9lbnRyeV9pc19oZWFkKHRtcCwgXFx1MDAyNm5vZGUtXFx1MDAzZWZsY19ibG9ja2VyLVxcdTAwM2VmbGNfYmxvY2tlZF9yZXF1ZXN0cyxcXG4zMDA4OlxcdFxcdFxcdFxcdCAgICAgICBmbGNfYmxvY2tlZF9tZW1iZXIpXFxuMzAwOTpcXHRcXHRcXHR8fCB0bXAgPT0gbm9kZSkge1xcbjMwMTA6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMzAxMTpcXHRcXHR9XFxuMzAxMjpcXHRcXG4zMDEzOlxcdFxcdHJldHVybiB0bXA7XFxuMzAxNDpcXHR9XFxuMzAxNTpcXHRcXG4zMDE2OlxcdHN0YXRpYyBpbnQgbG9ja3Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIHZvaWQgKnYpXFxuMzAxNzpcXHR7XFxuMzAxODpcXHRcXHRzdHJ1Y3QgbG9ja3NfaXRlcmF0b3IgKml0ZXIgPSBmLVxcdTAwM2Vwcml2YXRlO1xcbjMwMTk6XFx0XFx0c3RydWN0IGZpbGVfbG9ja19jb3JlICpjdXIsICp0bXA7XFxuMzAyMDpcXHRcXHRzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqcHJvY19waWRucyA9IHByb2NfcGlkX25zKGZpbGVfaW5vZGUoZi1cXHUwMDNlZmlsZSktXFx1MDAzZWlfc2IpO1xcbjMwMjE6XFx0XFx0aW50IGxldmVsID0gMDtcXG4zMDIyOlxcdFxcbjMwMjM6XFx0XFx0Y3VyID0gaGxpc3RfZW50cnkodiwgc3RydWN0IGZpbGVfbG9ja19jb3JlLCBmbGNfbGluayk7XFxuMzAyNDpcXHRcXG4zMDI1OlxcdFxcdC8qXFxuMzAyNjpcXHRcXHQgKiBPRkQgbG9ja3MgYXJlIHJlcG9ydGVkIHdpdGggcGlkIC0xLCBzbyB0aGUgZmlsdGVyIGJlbG93IGNhbm5vdCBzZWVcXG4zMDI3OlxcdFxcdCAqIHRoZWlyIG93bmVyOyBmbGNfcGlkIGhvbGRzIHRoZSBvd25lciB0Z2lkLCBzbyBmaWx0ZXIgb24gaXQuXFxuMzAyODpcXHRcXHQgKi9cXG4zMDI5OlxcdFxcdGlmICgoY3VyLVxcdTAwM2VmbGNfZmxhZ3MgXFx1MDAyNiBGTF9PRkRMQ0spIFxcdTAwMjZcXHUwMDI2IHByb2NfcGlkbnMgIT0gXFx1MDAyNmluaXRfcGlkX25zKSB7XFxuMzAzMDpcXHRcXHRcXHRzdHJ1Y3QgcGlkICpwaWQ7XFxuMzAzMTpcXHRcXHRcXHRib29sIHZpc2libGUgPSBmYWxzZTtcXG4zMDMyOlxcdFxcbjMwMzM6XFx0XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjMwMzQ6XFx0XFx0XFx0cGlkID0gZmluZF9waWRfbnMoY3VyLVxcdTAwM2VmbGNfcGlkLCBcXHUwMDI2aW5pdF9waWRfbnMpO1xcbjMwMzU6XFx0XFx0XFx0aWYgKHBpZClcXG4zMDM2OlxcdFxcdFxcdFxcdHZpc2libGUgPSBwaWRfbnJfbnMocGlkLCBwcm9jX3BpZG5zKSAhPSAwO1xcbjMwMzc6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMzAzODpcXHRcXHRcXHRpZiAoIXZpc2libGUpXFxuMzAzOTpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4zMDQwOlxcdFxcdH1cXG4zMDQxOlxcdFxcbjMwNDI6XFx0XFx0aWYgKGxvY2tzX3RyYW5zbGF0ZV9waWQoY3VyLCBwcm9jX3BpZG5zKSA9PSAwKVxcbjMwNDM6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMzA0NDpcXHRcXG4zMDQ1OlxcdFxcdC8qIFZpZXcgdGhpcyBjcm9zc2VkIGxpbmtlZCBsaXN0IGFzIGEgYmluYXJ5IHRyZWUsIHRoZSBmaXJzdCBtZW1iZXIgb2YgZmxjX2Jsb2NrZWRfcmVxdWVzdHNcXG4zMDQ2OlxcdFxcdCAqIGlzIHRoZSBsZWZ0IGNoaWxkIG9mIGN1cnJlbnQgbm9kZSwgdGhlIG5leHQgc2lsaWJpbmcgaW4gZmxjX2Jsb2NrZWRfbWVtYmVyIGlzIHRoZVxcbjMwNDc6XFx0XFx0ICogcmlnaHQgY2hpbGQsIHdlIGNhbiBhbHNlIGdldCB0aGUgcGFyZW50IG9mIGN1cnJlbnQgbm9kZSBmcm9tIGZsY19ibG9ja2VyLCBzbyB0aGlzXFxuMzA0ODpcXHRcXHQgKiBxdWVzdGlvbiBiZWNvbWVzIHRyYXZlcnNhbCBvZiBhIGJpbmFyeSB0cmVlXFxuMzA0OTpcXHRcXHQgKi9cXG4zMDUwOlxcdFxcdHdoaWxlIChjdXIgIT0gTlVMTCkge1xcbjMwNTE6XFx0XFx0XFx0aWYgKGxldmVsKVxcbjMwNTI6XFx0XFx0XFx0XFx0bG9ja19nZXRfc3RhdHVzKGYsIGN1ciwgaXRlci1cXHUwMDNlbGlfcG9zLCBcXFwiLVxcdTAwM2UgXFxcIiwgbGV2ZWwpO1xcbjMwNTM6XFx0XFx0XFx0ZWxzZVxcbjMwNTQ6XFx0XFx0XFx0XFx0bG9ja19nZXRfc3RhdHVzKGYsIGN1ciwgaXRlci1cXHUwMDNlbGlfcG9zLCBcXFwiXFxcIiwgbGV2ZWwpO1xcbjMwNTU6XFx0XFxuMzA1NjpcXHRcXHRcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNmN1ci1cXHUwMDNlZmxjX2Jsb2NrZWRfcmVxdWVzdHMpKSB7XFxuMzA1NzpcXHRcXHRcXHRcXHQvKiBUdXJuIGxlZnQgKi9cXG4zMDU4OlxcdFxcdFxcdFxcdGN1ciA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbChcXHUwMDI2Y3VyLVxcdTAwM2VmbGNfYmxvY2tlZF9yZXF1ZXN0cyxcXG4zMDU5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUsXFxuMzA2MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgZmxjX2Jsb2NrZWRfbWVtYmVyKTtcXG4zMDYxOlxcdFxcdFxcdFxcdGxldmVsKys7XFxuMzA2MjpcXHRcXHRcXHR9IGVsc2Uge1xcbjMwNjM6XFx0XFx0XFx0XFx0LyogVHVybiByaWdodCAqL1xcbjMwNjQ6XFx0XFx0XFx0XFx0dG1wID0gZ2V0X25leHRfYmxvY2tlZF9tZW1iZXIoY3VyKTtcXG4zMDY1OlxcdFxcdFxcdFxcdC8qIEZhbGwgYmFjayB0byBwYXJlbnQgbm9kZSAqL1xcbjMwNjY6XFx0XFx0XFx0XFx0d2hpbGUgKHRtcCA9PSBOVUxMIFxcdTAwMjZcXHUwMDI2IGN1ci1cXHUwMDNlZmxjX2Jsb2NrZXIgIT0gTlVMTCkge1xcbjMwNjc6XFx0XFx0XFx0XFx0XFx0Y3VyID0gY3VyLVxcdTAwM2VmbGNfYmxvY2tlcjtcXG4zMDY4OlxcdFxcdFxcdFxcdFxcdGxldmVsLS07XFxuMzA2OTpcXHRcXHRcXHRcXHRcXHR0bXAgPSBnZXRfbmV4dF9ibG9ja2VkX21lbWJlcihjdXIpO1xcbjMwNzA6XFx0XFx0XFx0XFx0fVxcbjMwNzE6XFx0XFx0XFx0XFx0Y3VyID0gdG1wO1xcbjMwNzI6XFx0XFx0XFx0fVxcbjMwNzM6XFx0XFx0fVxcbjMwNzQ6XFx0XFxuMzA3NTpcXHRcXHRyZXR1cm4gMDtcXG4zMDc2OlxcdH1cXG4zMDc3OlxcdFxcbjMwNzg6XFx0c3RhdGljIHZvaWQgX19zaG93X2ZkX2xvY2tzKHN0cnVjdCBzZXFfZmlsZSAqZixcXG4zMDc5OlxcdFxcdFxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIGludCAqaWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjMyOjA2LjQ0NzM1Njg4MVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzAyMDI3MjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYGxvY2tzX3RyYW5zbGF0ZV9waWRgIGFuZCBgbG9ja19nZXRfc3RhdHVzYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGBsb2Nrc190cmFuc2xhdGVfcGlkYCBhbmQgYGxvY2tfZ2V0X3N0YXR1c2AuIEknbSBnb2luZyB0byBzdGFydCBieSBnZXR0aW5nIGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgKmRvaW5nKi4gSSdtIGd1ZXNzaW5nIHRoYXQgYGxvY2tzX3RyYW5zbGF0ZV9waWRgIGlzIHByb2JhYmx5IGludm9sdmVkIGluIHNvbWUgZm9ybSBvZiBwcm9jZXNzIElEIG1hcHBpbmcgb3IgdHJhbnNsYXRpb24gcmVsYXRlZCB0byBsb2NrcywgcGVyaGFwcyB3aXRoaW4gYSBkaXN0cmlidXRlZCBsb2NraW5nIHN5c3RlbSwgb3IgbWF5YmUgaXQgaXMgcGFydCBvZiBob3cgdGhlIGtlcm5lbCBtYW5hZ2VzIGxvY2tzLiBgbG9ja19nZXRfc3RhdHVzYCBvYnZpb3VzbHkgc291bmRzIGxpa2UgaXQncyBxdWVyeWluZyB0aGUgY3VycmVudCBzdGF0ZSBvZiBhIGxvY2suIEknbGwgbmVlZCB0byBrbm93IHdoZXRoZXIgaXRzIHJldHJpZXZpbmcgZGF0YSBmcm9tIHRoZSBjYWNoZSwgb3IgdGhlIGRldmljZSwgb3Igd2hldGhlciB0aGF0IGlzIGFuIG9wdGltaXphdGlvbi4gSSdsbCBiZSBsb29raW5nIGZvciBkZXRhaWxzIGxpa2Ugd2hhdCBraW5kIG9mIGluZm9ybWF0aW9uIHRoZXkgcHJvdmlkZSAoZS5nLiwgb3duZXIgUElELCBsb2NrIHR5cGUsIGNvbnRlbnRpb24gZGV0YWlscywgd2FpdCBxdWV1ZSBzdGF0dXMpLiBEZXBlbmRpbmcgb24gdGhlIGNvbnRleHQsIHRoaXMgY291bGQgYmUgY3J1Y2lhbCBmb3IgZGVidWdnaW5nIGxvY2sgY29udGVudGlvbiBpc3N1ZXMsIHBlcmZvcm1hbmNlIHByb2ZpbGluZywgb3IgZXZlbiB1bmRlcnN0YW5kaW5nIGhvdyBvdXIgb3duIGxvY2sgaW1wbGVtZW50YXRpb24gaXMgYmVoYXZpbmcuIEknbGwgbmVlZCB0byBjb25maXJtIGFueSBhc3N1bXB0aW9ucyBhYm91dCB0aGVzZSBmdW5jdGlvbnMgYW5kIHdoZXJlIHRoZXkgZml0IGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzQ3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjozMjowOC43NDkzODc1NTNaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NTU0NTIzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsb2Nrc190cmFuc2xhdGVfcGlkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2xvY2tzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbG9ja3MuYz0yMzY1PUVYUE9SVF9TWU1CT0xfR1BMKHZmc190ZXN0X2xvY2spO1xcbi0tXFxuZnMvbG9ja3MuYy0yMzY3LS8qKlxcbmZzL2xvY2tzLmM6MjM2ODogKiBsb2Nrc190cmFuc2xhdGVfcGlkIC0gdHJhbnNsYXRlIGEgZmlsZV9sb2NrJ3MgZmxfcGlkIG51bWJlciBpbnRvIGEgbmFtZXNwYWNlXFxuZnMvbG9ja3MuYy0yMzY5LSAqIEBmbDogVGhlIGZpbGVfbG9jayB3aG8ncyBmbF9waWQgc2hvdWxkIGJlIHRyYW5zbGF0ZWRcXG4tLVxcbmZzL2xvY2tzLmMtMjM3My0gKi9cXG5mcy9sb2Nrcy5jOjIzNzQ6c3RhdGljIHBpZF90IGxvY2tzX3RyYW5zbGF0ZV9waWQoc3RydWN0IGZpbGVfbG9ja19jb3JlICpmbCwgc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zKVxcbmZzL2xvY2tzLmMtMjM3NS17XFxuLS1cXG5mcy9sb2Nrcy5jPTI0MDE9c3RhdGljIGludCBwb3NpeF9sb2NrX3RvX2Zsb2NrKHN0cnVjdCBmbG9jayAqZmxvY2ssIHN0cnVjdCBmaWxlX2xvY2sgKmZsKVxcbmZzL2xvY2tzLmMtMjQwMi17XFxuZnMvbG9ja3MuYzoyNDAzOlxcdGZsb2NrLVxcdTAwM2VsX3BpZCA9IGxvY2tzX3RyYW5zbGF0ZV9waWQoXFx1MDAyNmZsLVxcdTAwM2VjLCB0YXNrX2FjdGl2ZV9waWRfbnMoY3VycmVudCkpO1xcbmZzL2xvY2tzLmMtMjQwNC0jaWYgQklUU19QRVJfTE9ORyA9PSAzMlxcbi0tXFxuZnMvbG9ja3MuYz0yNDIzPXN0YXRpYyB2b2lkIHBvc2l4X2xvY2tfdG9fZmxvY2s2NChzdHJ1Y3QgZmxvY2s2NCAqZmxvY2ssIHN0cnVjdCBmaWxlX2xvY2sgKmZsKVxcbmZzL2xvY2tzLmMtMjQyNC17XFxuZnMvbG9ja3MuYzoyNDI1OlxcdGZsb2NrLVxcdTAwM2VsX3BpZCA9IGxvY2tzX3RyYW5zbGF0ZV9waWQoXFx1MDAyNmZsLVxcdTAwM2VjLCB0YXNrX2FjdGl2ZV9waWRfbnMoY3VycmVudCkpO1xcbmZzL2xvY2tzLmMtMjQyNi1cXHRmbG9jay1cXHUwMDNlbF9zdGFydCA9IGZsLVxcdTAwM2VmbF9zdGFydDtcXG4tLVxcbmZzL2xvY2tzLmM9MjkyMT1zdGF0aWMgdm9pZCBsb2NrX2dldF9zdGF0dXMoc3RydWN0IHNlcV9maWxlICpmLCBzdHJ1Y3QgZmlsZV9sb2NrX2NvcmUgKmZsYyxcXG4tLVxcbmZzL2xvY2tzLmMtMjkyOS1cXG5mcy9sb2Nrcy5jOjI5MzA6XFx0cGlkID0gbG9ja3NfdHJhbnNsYXRlX3BpZChmbGMsIHByb2NfcGlkbnMpO1xcbmZzL2xvY2tzLmMtMjkzMS1cXG4tLVxcbmZzL2xvY2tzLmM9MzAxNj1zdGF0aWMgaW50IGxvY2tzX3Nob3coc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICp2KVxcbi0tXFxuZnMvbG9ja3MuYy0zMDQxLVxcbmZzL2xvY2tzLmM6MzA0MjpcXHRpZiAobG9ja3NfdHJhbnNsYXRlX3BpZChjdXIsIHByb2NfcGlkbnMpID09IDApXFxuZnMvbG9ja3MuYy0zMDQzLVxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjozMjowOS40MzQ5MzgyMDFaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzIzNDQwNDQwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIExvY2sgTWFuYWdlbWVudCBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGxvY2sgbWVjaGFuaXNtcyBhcmUgd29ya2luZywgcGFydGljdWxhcmx5IGhvdyB0aGV5IHJlbGF0ZSB0byBQSURzLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGNvZGUgZm9yIGBsb2Nrc190cmFuc2xhdGVfcGlkYC4gSSdtIGN1cmlvdXMgdG8gc2VlIGhvdyBhIHByb2Nlc3MgSUQgaXMgbWFwcGVkLCB0cmFuc2xhdGVkLCBvciB1c2VkIHdpdGhpbiB0aGUgbG9jayBtYW5hZ2VtZW50IGZyYW1ld29yay4gV2hhdCBhcmUgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgaXQgaW50ZXJhY3RzIHdpdGg/IElzIHRoZXJlIGFueSBQSUQtc3BlY2lmaWMgbG9naWMgd2l0aGluIHRoZSBsb2NraW5nIG1lY2hhbmlzbT8gSSdtIGFudGljaXBhdGluZyB0aGlzIG1pZ2h0IHJldmVhbCBob3cgcHJvY2Vzc2VzIGNvbnRlbmQgZm9yIHJlc291cmNlcyBhbmQgaG93IHRoZSBzeXN0ZW0gdHJhY2tzIGxvY2sgb3duZXJzaGlwLlxuXG5UaGVuLCBJJ2xsIG5lZWQgdG8gaW1tZWRpYXRlbHkgZm9sbG93IHRoYXQgd2l0aCBhIGxvb2sgYXQgYGxvY2tfZ2V0X3N0YXR1c2AuIFRoaXMgc2hvdWxkIHNoZWQgbGlnaHQgb24gdGhlIHN0YXRlIG9mIHRoZSBsb2Nrcy4gSSdsbCBiZSBsb29raW5nIGZvciBob3cgdGhlIGxvY2sgc3RhdHVzIGlzIHJldHJpZXZlZCwgd2hhdCBpbmZvcm1hdGlvbiBpcyBtYWRlIGF2YWlsYWJsZSAob3duZXIgUElEcywgY3VycmVudCBzdGF0ZSBsaWtlIGxvY2tlZC91bmxvY2tlZCwgYW55IHdhaXRpbmcgcHJvY2Vzc2VzKSwgYW5kIHdoYXQgdGhlIHJldHVybiB2YWx1ZXMgbWVhbi4gVGhlIGNvbWJpbmF0aW9uIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMgc2hvdWxkIHByb3ZpZGUgYSBzb2xpZCBwaWN0dXJlIG9mIGhvdyBQSUQncyBhcmUgaW50ZWdyYXRlZCBhbmQgaG93IGxvY2sgc3RhdHVzZXMgYXJlIGNoZWNrZWQgd2l0aGluIHRoZSBsb2NraW5nIHN5c3RlbS4gVW5kZXJzdGFuZGluZyB0aGUgc3RhdHVzIHF1ZXJ5aW5nIHdpbGwgZGVmaW5pdGVseSBpbmZvcm0gaG93IHRvIGludGVycHJldCB0aGUgcmVzdWx0cyBvZiBgbG9ja3NfdHJhbnNsYXRlX3BpZGAuIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGhvdyB0aGUgZnJhbWV3b3JrIHByb3ZpZGVzIGFuZCBpbnRlcnByZXRzIGxvY2sgc3RhdHVzIHJlbGF0aXZlIHRvIHRoZSBwcm9jZXNzIGF0dGVtcHRpbmcgdG8gZ2FpbiBhIGxvY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NjUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjozMjoxMi42NjkzNDU5NDdaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA1MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2xvY2tzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjM2OCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjM2ODpcXHQgKiBsb2Nrc190cmFuc2xhdGVfcGlkIC0gdHJhbnNsYXRlIGEgZmlsZV9sb2NrJ3MgZmxfcGlkIG51bWJlciBpbnRvIGEgbmFtZXNwYWNlXFxuMjM2OTpcXHQgKiBAZmw6IFRoZSBmaWxlX2xvY2sgd2hvJ3MgZmxfcGlkIHNob3VsZCBiZSB0cmFuc2xhdGVkXFxuMjM3MDpcXHQgKiBAbnM6IFRoZSBuYW1lc3BhY2UgaW50byB3aGljaCB0aGUgcGlkIHNob3VsZCBiZSB0cmFuc2xhdGVkXFxuMjM3MTpcXHQgKlxcbjIzNzI6XFx0ICogVXNlZCB0byB0cmFuc2xhdGUgYSBmbF9waWQgaW50byBhIG5hbWVzcGFjZSB2aXJ0dWFsIHBpZCBudW1iZXJcXG4yMzczOlxcdCAqL1xcbjIzNzQ6XFx0c3RhdGljIHBpZF90IGxvY2tzX3RyYW5zbGF0ZV9waWQoc3RydWN0IGZpbGVfbG9ja19jb3JlICpmbCwgc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zKVxcbjIzNzU6XFx0e1xcbjIzNzY6XFx0XFx0cGlkX3Qgdm5yO1xcbjIzNzc6XFx0XFx0c3RydWN0IHBpZCAqcGlkO1xcbjIzNzg6XFx0XFxuMjM3OTpcXHRcXHRpZiAoZmwtXFx1MDAzZWZsY19mbGFncyBcXHUwMDI2IEZMX09GRExDSylcXG4yMzgwOlxcdFxcdFxcdHJldHVybiAtMTtcXG4yMzgxOlxcdFxcbjIzODI6XFx0XFx0LyogUmVtb3RlIGxvY2tzIHJlcG9ydCBhIG5lZ2F0aXZlIHBpZCB2YWx1ZSAqL1xcbjIzODM6XFx0XFx0aWYgKGZsLVxcdTAwM2VmbGNfcGlkIFxcdTAwM2M9IDApXFxuMjM4NDpcXHRcXHRcXHRyZXR1cm4gZmwtXFx1MDAzZWZsY19waWQ7XFxuMjM4NTpcXHRcXG4yMzg2OlxcdFxcdC8qXFxuMjM4NzpcXHRcXHQgKiBJZiB0aGUgZmxvY2sgb3duZXIgcHJvY2VzcyBpcyBkZWFkIGFuZCBpdHMgcGlkIGhhcyBiZWVuIGFscmVhZHlcXG4yMzg4OlxcdFxcdCAqIGZyZWVkLCB0aGUgdHJhbnNsYXRpb24gYmVsb3cgd29uJ3Qgd29yaywgYnV0IHdlIHN0aWxsIHdhbnQgdG8gc2hvd1xcbjIzODk6XFx0XFx0ICogZmxvY2sgb3duZXIgcGlkIG51bWJlciBpbiBpbml0IHBpZG5zLlxcbjIzOTA6XFx0XFx0ICovXFxuMjM5MTpcXHRcXHRpZiAobnMgPT0gXFx1MDAyNmluaXRfcGlkX25zKVxcbjIzOTI6XFx0XFx0XFx0cmV0dXJuIChwaWRfdCkgZmwtXFx1MDAzZWZsY19waWQ7XFxuMjM5MzpcXHRcXG4yMzk0OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4yMzk1OlxcdFxcdHBpZCA9IGZpbmRfcGlkX25zKGZsLVxcdTAwM2VmbGNfcGlkLCBcXHUwMDI2aW5pdF9waWRfbnMpO1xcbjIzOTY6XFx0XFx0dm5yID0gcGlkX25yX25zKHBpZCwgbnMpO1xcbjIzOTc6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMjM5ODpcXHRcXHRyZXR1cm4gdm5yO1xcbjIzOTk6XFx0fVxcbjI0MDA6XFx0XFxuMjQwMTpcXHRzdGF0aWMgaW50IHBvc2l4X2xvY2tfdG9fZmxvY2soc3RydWN0IGZsb2NrICpmbG9jaywgc3RydWN0IGZpbGVfbG9jayAqZmwpXFxuMjQwMjpcXHR7XFxuMjQwMzpcXHRcXHRmbG9jay1cXHUwMDNlbF9waWQgPSBsb2Nrc190cmFuc2xhdGVfcGlkKFxcdTAwMjZmbC1cXHUwMDNlYywgdGFza19hY3RpdmVfcGlkX25zKGN1cnJlbnQpKTtcXG4yNDA0OlxcdCNpZiBCSVRTX1BFUl9MT05HID09IDMyXFxuMjQwNTpcXHRcXHQvKlxcbjI0MDY6XFx0XFx0ICogTWFrZSBzdXJlIHdlIGNhbiByZXByZXNlbnQgdGhlIHBvc2l4IGxvY2sgdmlhXFxuMjQwNzpcXHRcXHQgKiBsZWdhY3kgMzJiaXQgZmxvY2suXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjMyOjEyLjY2OTY1Mzg2N1oiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NjA2NTkyMzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgL3Byb2MvbG9ja3MgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGBsb2Nrc19zaG93YCB3aXRoaW4gYGZzL2xvY2tzLmNgLCBzcGVjaWZpY2FsbHkgaG93IGAvcHJvYy9sb2Nrc2AgaGFuZGxlcyBPcGVuIEZpbGUgRGVzY3JpcHRvciAoT0ZEKSBsb2Nrcy4gVGhlIGNvcmUgaXNzdWUgaXMgYWJvdXQgUElEIG5hbWVzcGFjZSB2aXNpYmlsaXR5LiBQcmV2aW91c2x5LCB0aGUgc3lzdGVtIHdhc24ndCBwcm9wZXJseSBmaWx0ZXJpbmcgT0ZEIGxvY2tzIGJhc2VkIG9uIHRoZWlyIG93bmVyJ3MgUElEIG5hbWVzcGFjZS4gQmVjYXVzZSBvZiBob3cgT0ZEIGxvY2tzIGFyZSBpZGVudGlmaWVkICh3aXRoIHBpZCAtMSksIHRoZSBvbGQgYGxvY2tzX3RyYW5zbGF0ZV9waWRgIGZ1bmN0aW9uIGFsd2F5cyByZXR1cm5lZCBub24temVyby4gIFRoaXMgbWVhbnQgT0ZEIGxvY2tzIGZyb20gcHJvY2Vzc2VzIG5vdCBpbiB0aGUgY3VycmVudCBQSUQgbmFtZXNwYWNlIHdlcmUgc3RpbGwgYmVpbmcgc2hvd24gaW4gYC9wcm9jL2xvY2tzYCwgd2hpY2ggaXMgaW5jb3JyZWN0LlxuXG5UaGlzIHBhdGNoIGFkZHJlc3NlcyB0aGF0LiBJdCBhZGRzIGEgY2hlY2sgd2l0aGluIHRoZSBgbG9ja3Nfc2hvd2AgZnVuY3Rpb24uIE5vdywgaWYgYW4gT0ZEIGxvY2sgaXMgZW5jb3VudGVyZWQgKGluZGljYXRlZCBieSBgRkxfT0ZETENLYCksIGFuZCB0aGUgcHJvY2VzcyBpc24ndCBpbiB0aGUgaW5pdCBQSUQgbmFtZXNwYWNlLCBpdCBwZXJmb3JtcyBhIGxvb2t1cCB1c2luZyBgZmluZF9waWRfbnNgIHRvIGRldGVybWluZSBpZiB0aGUgb3duZXIgb2YgdGhlIGxvY2sgKGlkZW50aWZpZWQgYnkgYGN1ci1cdTAwM2VmbGNfcGlkYCkgaXMgYWN0dWFsbHkgdmlzaWJsZSBpbiB0aGUgY3VycmVudCBgL3Byb2MvbG9ja3NgIG5hbWVzcGFjZSAoYHByb2NfcGlkbnNgKS4gVGhlIGByY3VfcmVhZF9sb2NrYCBhbmQgYHJjdV9yZWFkX3VubG9ja2AgY2FsbHMgZW5zdXJlIHRoaXMgaXMgZG9uZSBzYWZlbHkuIFRoZSBuZXcgYHZpc2libGVgIHZhcmlhYmxlIGRldGVybWluZXMgaWYgdGhlIGxvY2sgb3duZXIgaXMgdmlzaWJsZSwgYW5kIGlmIG5vdCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgMCwgbWVhbmluZyB0aGUgbG9jayBlbnRyeSBpc24ndCBkaXNwbGF5ZWQgaW4gYC9wcm9jL2xvY2tzYC5cblxuTm93LCBsZXQncyB0aGluayBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIHBhdGNoIGlzbid0IGludHJvZHVjaW5nIGFueSByaXNrcy4gSSBzZWUgYHN0cnVjdCBwaWQgKnBpZGAgYW5kIGBib29sIHZpc2libGUgPSBmYWxzZTtgIGFyZSBpbnRyb2R1Y2VkLiBCdXQgYHZpc2libGVgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIGFuZCBgcGlkYCBlaXRoZXIgZ2V0cyBhIHZhbHVlIGZyb20gYGZpbmRfcGlkX25zYCBvciByZW1haW5zIG51bGwuIFRoZXJlIGFyZSBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBubyBjb3B5aW5nIHRvIHVzZXJzcGFjZSB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJlYWRzLCBhbmQgbm8gYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGlzIGlzIGFsbCBjb250YWluZWQgd2l0aGluIGEgc2luZ2xlIGBsb2Nrc19zaG93YCBmdW5jdGlvbiwgc28gaXQgY2FuJ3QgY2hhbmdlIHRoZSBiZWhhdmlvciBvZiBhbm90aGVyIHBhcnQgb2YgdGhlIHN5c3RlbSBhbmQsIHRoZXJlZm9yZSwgaXMgdmVyeSBsb2NhbGl6ZWQuIFRoZSBvdXRwdXQgaXMgYSBgc2VxX2ZpbGVgIG91dHB1dCB0byBgL3Byb2MvbG9ja3NgLCBzbyB3ZSBhcmUgbm90IGRlYWxpbmcgd2l0aCBidWZmZXJzLiBUaGVyZWZvcmUsIG5vLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYXNwZWN0cyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlLiBJdCdzIHNpbXBseSBhYm91dCBuYW1lc3BhY2UgdmlzaWJpbGl0eSBmaWx0ZXJpbmcuXG5cblRoaW5raW5nIGFib3V0IEtNU0FOIHNwZWNpZmljYWxseeKApiBOby4gS0FTQU4gaXMgaW1wb3J0YW50IGZvciB0aGlzLCBhcyBpdCBoYW5kbGVzIGdlbmVyYWwgbWVtb3J5IHNhZmV0eSwgYnV0IHRoaXMgcGF0Y2ggZG9lc27igJl0IGludHJvZHVjZSBhbnkgcmlza3Mgc3BlY2lmaWMgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIEknbSBpbnRyb2R1Y2luZyBhIGxvY2FsIHZhcmlhYmxlIGFuZCBhIFBJRCBsb29rdXAsIGFsbCB1bmRlciBhbiBSQ1UgbG9jaywgc28gdGhlcmUgYXJlIG5vIHBhcnRpYWwgc3RydWN0IGluaXRpYWxpemF0aW9ucyBvciBjb3BpZXMgdG8gdXNlcnNwYWNlLlxuXG5TbywgdGhlIHZlcmRpY3QgaXMgTmVlZHNLTVNBTjogZmFsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2NTgsIk91dHB1dFRva2VucyI6MTQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MzI6MTguMjc2MjQ5MjExWiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbG9ja3Nfc2hvd2AgaW4gYGZzL2xvY2tzLmNgIHRvIGZpbHRlciBvdXQgb3BlbiBmaWxlIGRlc2NyaXB0aW9uIChPRkQpIGxvY2tzIGZyb20gYC9wcm9jL2xvY2tzYCB3aGVuIHZpZXdlZCBmcm9tIGEgbm9uLWluaXQgUElEIG5hbWVzcGFjZSBpZiB0aGUgb3duaW5nIFBJRCBpcyBub3QgdmlzaWJsZSB3aXRoaW4gdGhhdCBuYW1lc3BhY2UuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlLCBhbmQgaW5pdGlhbGl6ZXMgYWxsIGxvY2FsIHZhcmlhYmxlcyAoYHZpc2libGUgPSBmYWxzZWApLiBJdCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RocyBvciBjcmVhdGUgYW55IHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbG9ja3Nfc2hvd2AgaW4gYGZzL2xvY2tzLmNgIHRvIGZpbHRlciBvdXQgb3BlbiBmaWxlIGRlc2NyaXB0aW9uIChPRkQpIGxvY2tzIGZyb20gYC9wcm9jL2xvY2tzYCB3aGVuIHZpZXdlZCBmcm9tIGEgbm9uLWluaXQgUElEIG5hbWVzcGFjZSBpZiB0aGUgb3duaW5nIFBJRCBpcyBub3QgdmlzaWJsZSB3aXRoaW4gdGhhdCBuYW1lc3BhY2UuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlLCBhbmQgaW5pdGlhbGl6ZXMgYWxsIGxvY2FsIHZhcmlhYmxlcyAoYHZpc2libGUgPSBmYWxzZWApLiBJdCBkb2VzIG5vdCBhbHRlciBidWZmZXIgbGVuZ3RocyBvciBjcmVhdGUgYW55IHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowtpln2[1] Phase: Succeeded StartedAt: 2026-09-02 22:32:29 +0000 UTC FinishedAt: 2026-09-02 22:32:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtpln2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-02 22:32:29 +0000 UTC FinishedAt: 2026-09-02 22:32:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtpln2[2] Phase: Succeeded StartedAt: 2026-09-02 22:32:29 +0000 UTC FinishedAt: 2026-09-03 02:13:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtpln2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["locks_show","fcntl_setlk","fcntl_getlk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"6c4eb154-4d0f-4495-babc-21ab83c3f76f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-02 22:32:29 +0000 UTC FinishedAt: 2026-09-03 02:13:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["locks_show","fcntl_setlk","fcntl_getlk"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"6c4eb154-4d0f-4495-babc-21ab83c3f76f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowtpln2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["locks_show","fcntl_setlk","fcntl_getlk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"6c4eb154-4d0f-4495-babc-21ab83c3f76f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-02 22:32:29 +0000 UTC FinishedAt: 2026-09-02 22:32:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtpln2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["locks_show","fcntl_setlk","fcntl_getlk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"6c4eb154-4d0f-4495-babc-21ab83c3f76f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-02 22:32:29 +0000 UTC FinishedAt: 2026-09-02 22:32:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtpln2/series-workflowtpln2-convert-artifact-1909862162/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtpln2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["locks_show","fcntl_setlk","fcntl_getlk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"6c4eb154-4d0f-4495-babc-21ab83c3f76f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-02 22:32:39 +0000 UTC FinishedAt: 2026-09-02 22:48:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtpln2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["locks_show","fcntl_setlk","fcntl_getlk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"6c4eb154-4d0f-4495-babc-21ab83c3f76f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-02 22:32:39 +0000 UTC FinishedAt: 2026-09-02 22:48:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*21cb2b5b-bcfe-4de0-b55a-bc03ce0c2433,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-workflowtpln2/series-workflowtpln2-convert-artifact-1909862162/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": "11d8bfd8-14b1-48e6-9ba3-9f4f00579e6f", "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-workflowtpln2/series-workflowtpln2-build-action-32551056/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtpln2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["locks_show","fcntl_setlk","fcntl_getlk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"6c4eb154-4d0f-4495-babc-21ab83c3f76f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-02 22:32:39 +0000 UTC FinishedAt: 2026-09-02 22:48:45 +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:*21cb2b5b-bcfe-4de0-b55a-bc03ce0c2433,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-workflowtpln2/series-workflowtpln2-convert-artifact-1909862162/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": "11d8bfd8-14b1-48e6-9ba3-9f4f00579e6f", "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-workflowtpln2/series-workflowtpln2-build-action-32551056/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtpln2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["locks_show","fcntl_setlk","fcntl_getlk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"6c4eb154-4d0f-4495-babc-21ab83c3f76f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-02 22:48:55 +0000 UTC FinishedAt: 2026-09-02 22:48:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtpln2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["locks_show","fcntl_setlk","fcntl_getlk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"6c4eb154-4d0f-4495-babc-21ab83c3f76f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-02 22:48:55 +0000 UTC FinishedAt: 2026-09-02 22:48:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtpln2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["locks_show","fcntl_setlk","fcntl_getlk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"6c4eb154-4d0f-4495-babc-21ab83c3f76f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-02 22:48:55 +0000 UTC FinishedAt: 2026-09-02 22:49:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtpln2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["locks_show","fcntl_setlk","fcntl_getlk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"6c4eb154-4d0f-4495-babc-21ab83c3f76f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-02 22:48:55 +0000 UTC FinishedAt: 2026-09-02 22:48:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"6c4eb154-4d0f-4495-babc-21ab83c3f76f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtpln2/series-workflowtpln2-convert-artifact-1838461229/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtpln2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["locks_show","fcntl_setlk","fcntl_getlk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"6c4eb154-4d0f-4495-babc-21ab83c3f76f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-02 22:49:05 +0000 UTC FinishedAt: 2026-09-02 22:51:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtpln2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["locks_show","fcntl_setlk","fcntl_getlk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"6c4eb154-4d0f-4495-babc-21ab83c3f76f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-02 22:49:05 +0000 UTC FinishedAt: 2026-09-02 22:50:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*11d8bfd8-14b1-48e6-9ba3-9f4f00579e6f,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-workflowtpln2/series-workflowtpln2-build-action-32551056/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-workflowtpln2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["locks_show","fcntl_setlk","fcntl_getlk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"6c4eb154-4d0f-4495-babc-21ab83c3f76f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-02 22:51:02 +0000 UTC FinishedAt: 2026-09-02 22:51:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtpln2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["locks_show","fcntl_setlk","fcntl_getlk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"6c4eb154-4d0f-4495-babc-21ab83c3f76f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-02 22:51:02 +0000 UTC FinishedAt: 2026-09-02 22:51:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtpln2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["locks_show","fcntl_setlk","fcntl_getlk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"6c4eb154-4d0f-4495-babc-21ab83c3f76f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-02 22:51:02 +0000 UTC FinishedAt: 2026-09-02 23:07:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtpln2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["locks_show","fcntl_setlk","fcntl_getlk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"6c4eb154-4d0f-4495-babc-21ab83c3f76f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-02 22:51:02 +0000 UTC FinishedAt: 2026-09-02 23:07:36 +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:*21cb2b5b-bcfe-4de0-b55a-bc03ce0c2433,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-workflowtpln2/series-workflowtpln2-convert-artifact-1838461229/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": "8e1300ba-9b8e-46a4-a0e9-5d95ace42837", "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-workflowtpln2/series-workflowtpln2-build-action-1591276937/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtpln2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["locks_show","fcntl_setlk","fcntl_getlk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"6c4eb154-4d0f-4495-babc-21ab83c3f76f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-02 22:51:02 +0000 UTC FinishedAt: 2026-09-02 23:07:26 +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:*21cb2b5b-bcfe-4de0-b55a-bc03ce0c2433,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-workflowtpln2/series-workflowtpln2-convert-artifact-1838461229/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": "8e1300ba-9b8e-46a4-a0e9-5d95ace42837", "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-workflowtpln2/series-workflowtpln2-build-action-1591276937/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtpln2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["locks_show","fcntl_setlk","fcntl_getlk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"6c4eb154-4d0f-4495-babc-21ab83c3f76f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-02 23:07:36 +0000 UTC FinishedAt: 2026-09-02 23:07:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtpln2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["locks_show","fcntl_setlk","fcntl_getlk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"6c4eb154-4d0f-4495-babc-21ab83c3f76f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-02 23:07:36 +0000 UTC FinishedAt: 2026-09-02 23:07:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtpln2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["locks_show","fcntl_setlk","fcntl_getlk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"6c4eb154-4d0f-4495-babc-21ab83c3f76f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-02 23:07:36 +0000 UTC FinishedAt: 2026-09-02 23:09:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtpln2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["locks_show","fcntl_setlk","fcntl_getlk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"6c4eb154-4d0f-4495-babc-21ab83c3f76f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-02 23:07:36 +0000 UTC FinishedAt: 2026-09-02 23:09:30 +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:*8e1300ba-9b8e-46a4-a0e9-5d95ace42837,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-workflowtpln2/series-workflowtpln2-build-action-1591276937/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-workflowtpln2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["locks_show","fcntl_setlk","fcntl_getlk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"6c4eb154-4d0f-4495-babc-21ab83c3f76f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-02 23:09:40 +0000 UTC FinishedAt: 2026-09-03 02:13:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtpln2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["locks_show","fcntl_setlk","fcntl_getlk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"6c4eb154-4d0f-4495-babc-21ab83c3f76f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-02 23:09:40 +0000 UTC FinishedAt: 2026-09-03 02:13:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["locks_show","fcntl_setlk","fcntl_getlk"],"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:*11d8bfd8-14b1-48e6-9ba3-9f4f00579e6f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8e1300ba-9b8e-46a4-a0e9-5d95ace42837,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-workflowtpln2/series-workflowtpln2-build-action-32551056/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-workflowtpln2/series-workflowtpln2-build-action-1591276937/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowtpln2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["locks_show","fcntl_setlk","fcntl_getlk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"6c4eb154-4d0f-4495-babc-21ab83c3f76f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-02 23:09:40 +0000 UTC FinishedAt: 2026-09-02 23:09:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtpln2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["locks_show","fcntl_setlk","fcntl_getlk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"6c4eb154-4d0f-4495-babc-21ab83c3f76f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-02 23:09:40 +0000 UTC FinishedAt: 2026-09-02 23:09:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["locks_show","fcntl_setlk","fcntl_getlk"],"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-workflowtpln2/series-workflowtpln2-convert-artifact-1406895506/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtpln2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["locks_show","fcntl_setlk","fcntl_getlk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"6c4eb154-4d0f-4495-babc-21ab83c3f76f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-02 23:09:40 +0000 UTC FinishedAt: 2026-09-02 23:09:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtpln2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["locks_show","fcntl_setlk","fcntl_getlk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"6c4eb154-4d0f-4495-babc-21ab83c3f76f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-02 23:09:40 +0000 UTC FinishedAt: 2026-09-02 23:09:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtpln2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["locks_show","fcntl_setlk","fcntl_getlk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"6c4eb154-4d0f-4495-babc-21ab83c3f76f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-02 23:09:40 +0000 UTC FinishedAt: 2026-09-02 23:09:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtpln2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["locks_show","fcntl_setlk","fcntl_getlk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"6c4eb154-4d0f-4495-babc-21ab83c3f76f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-02 23:09:50 +0000 UTC FinishedAt: 2026-09-03 02:13:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtpln2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["locks_show","fcntl_setlk","fcntl_getlk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1094a8359b2741107c97cd2f86cd2cdbb21b5aa7","config_name":"upstream-apparmor-kasan.config","enable_configs":["FILE_LOCKING","PROC_FS","NAMESPACES","PID_NS"],"series_id":"6c4eb154-4d0f-4495-babc-21ab83c3f76f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-02 23:09:50 +0000 UTC FinishedAt: 2026-09-03 02:12:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*11d8bfd8-14b1-48e6-9ba3-9f4f00579e6f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8e1300ba-9b8e-46a4-a0e9-5d95ace42837,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-workflowtpln2/series-workflowtpln2-build-action-32551056/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-workflowtpln2/series-workflowtpln2-build-action-1591276937/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-workflowtpln2/series-workflowtpln2-convert-artifact-1406895506/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,}