Name: series-workflow8mkk7 Phase: Succeeded StartedAt: 2026-08-29 12:37:11 +0000 UTC FinishedAt: 2026-08-29 17:00:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8mkk7[0] Phase: Succeeded StartedAt: 2026-08-29 12:37:11 +0000 UTC FinishedAt: 2026-08-29 13:19:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8mkk7[0].run-triage Phase: Succeeded StartedAt: 2026-08-29 12:37:11 +0000 UTC FinishedAt: 2026-08-29 13:19:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563", "config_name": "upstream-apparmor-kasan.config", "series_id": "e83b5fdf-a11c-4ee8-8c53-467755b3e062" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "folio_end_dropbehind", "folio_unmap_invalidate" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Zm9saW9fZW5kX2Ryb3BiZWhpbmQmIzM0OywKICAgICYjMzQ7Zm9saW9fdW5tYXBfaW52YWxpZGF0ZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayBgIWZvbGlvX21hcHBlZChmb2xpbylgIGJlZm9yZSBpbnZva2luZyBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZSgpYCBpbiBgZmlsZW1hcF9lbmRfZHJvcGJlaGluZCgpYC4gVGhpcyBtb2RpZmllcyBwYWdlIGNhY2hlIGRyb3AtYmVoaW5kIGxvZ2ljIHRvIHNraXAgaW52YWxpZGF0aW5nIGZvbGlvcyB0aGF0IGFyZSBjdXJyZW50bHkgbWFwcGVkIGludG8gdXNlciBwYWdlIHRhYmxlcy4gSXQgb3BlcmF0ZXMgZW50aXJlbHkgb24gZXhpc3RpbmcsIHZhbGlkIHN0cnVjdCBmb2xpbyBmbGFncyBhbmQgbWFwcGluZyByZWZlcmVuY2VzLiBUaGVyZSBhcmUgbm8gYWxsb2NhdGlvbnMsIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwYWRkaW5nIGxlYWtzLCBvciB1c2VyLXNwYWNlIGNvcGllcyBpbnZvbHZlZC4gU3RhbmRhcmQgS0FTQU4va2VybmVsIGRlYnVnZ2VycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIChzdWNoIGFzIHJlZmNvdW50aW5nLCBsb2NraW5nLCBvciBVQUYgYnVncykuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBkcm9wYmVoaW5kIGZvbGlvIGludmFsaWRhdGlvbiBpbiBtbS9maWxlbWFwLmMgYnkgYWRkaW5nIGEgY2hlY2sgZm9yICFmb2xpb19tYXBwZWQoZm9saW8pIGJlZm9yZSBjYWxsaW5nIGZvbGlvX3VubWFwX2ludmFsaWRhdGUoKS4gVGhpcyBhbHRlcnMgY29yZSBwYWdlIGNhY2hlIGludmFsaWRhdGlvbiBiZWhhdmlvciBmb3IgY2FjaGVkL2Ryb3BiZWhpbmQgZm9saW9zIChzdWNoIGFzIHRob3NlIHVzZWQgd2l0aCBSV0ZfRE9OVENBQ0hFIC8gSU9DQl9ET05UQ0FDSEUpIGFuZCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4ZGU3NGJlNDA2ZjI2ZTRjNWE0MTJhNTFiYzg1MmM4NDkxMWY2MWM1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjkgMTM6MTY6NDIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jXG5pbmRleCA2YWZlYzYzNjg4MWZiLi4wMGZkODljZjZmNTUwIDEwMDY0NFxuLS0tIGEvbW0vZmlsZW1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9maWxlbWFwLmNcbkBAIC0xNjE2LDcgJiM0MzsxNjE2LDcgQEAgc3RhdGljIHZvaWQgZmlsZW1hcF9lbmRfZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0XHRyZXR1cm47XG4gXHRpZiAoIWZvbGlvX3Rlc3RfY2xlYXJfZHJvcGJlaGluZChmb2xpbykpXG4gXHRcdHJldHVybjtcbi1cdGlmIChtYXBwaW5nKVxuJiM0MztcdGlmIChtYXBwaW5nIFx1MDAyNlx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSlcbiBcdFx0Zm9saW9fdW5tYXBfaW52YWxpZGF0ZShtYXBwaW5nLCBmb2xpbywgMCk7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjE2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Zm9saW9fZW5kX2Ryb3BiZWhpbmQmIzM0OywKICAgICYjMzQ7Zm9saW9fdW5tYXBfaW52YWxpZGF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBkcm9wYmVoaW5kIGZvbGlvIGludmFsaWRhdGlvbiBpbiBtbS9maWxlbWFwLmMgYnkgYWRkaW5nIGEgY2hlY2sgZm9yICFmb2xpb19tYXBwZWQoZm9saW8pIGJlZm9yZSBjYWxsaW5nIGZvbGlvX3VubWFwX2ludmFsaWRhdGUoKS4gVGhpcyBhbHRlcnMgY29yZSBwYWdlIGNhY2hlIGludmFsaWRhdGlvbiBiZWhhdmlvciBmb3IgY2FjaGVkL2Ryb3BiZWhpbmQgZm9saW9zIChzdWNoIGFzIHRob3NlIHVzZWQgd2l0aCBSV0ZfRE9OVENBQ0hFIC8gSU9DQl9ET05UQ0FDSEUpIGFuZCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4ZGU3NGJlNDA2ZjI2ZTRjNWE0MTJhNTFiYzg1MmM4NDkxMWY2MWM1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjkgMTM6MTY6NDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmMKaW5kZXggNmFmZWM2MzY4ODFmYi4uMDBmZDg5Y2Y2ZjU1MCAxMDA2NDQKLS0tIGEvbW0vZmlsZW1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2ZpbGVtYXAuYwpAQCAtMTYxNiw3ICYjNDM7MTYxNiw3IEBAIHN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbykKIAkJcmV0dXJuOwogCWlmICghZm9saW9fdGVzdF9jbGVhcl9kcm9wYmVoaW5kKGZvbGlvKSkKIAkJcmV0dXJuOwotCWlmIChtYXBwaW5nKQomIzQzOwlpZiAobWFwcGluZyAmYW1wOyZhbXA7ICFmb2xpb19tYXBwZWQoZm9saW8pKQogCQlmb2xpb191bm1hcF9pbnZhbGlkYXRlKG1hcHBpbmcsIGZvbGlvLCAwKTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDQzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRmlsZW1hcCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGNoYW5naW5nIHNvbWV0aGluZyBpbiBgbW0vZmlsZW1hcC5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgZGlmZiBmb2N1c2VzIG9uIHRoZSBgZmlsZW1hcF9lbmRfZHJvcGJlaGluZGAgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGFwcGVhcnMgdG8gYmUgaW4gdGhhdCBjb25kaXRpb25hbCBzdGF0ZW1lbnQuIFdlIGFyZSBhZGRpbmcgYW4gYWRkaXRpb25hbCBjaGVjay4gUHJldmlvdXNseSwgaXQganVzdCBjaGVja2VkIGlmIGBtYXBwaW5nYCB3YXMgdmFsaWQsIGJ1dCBub3cgd2UmIzM5O3JlIGludHJvZHVjaW5nIGAhZm9saW9fbWFwcGVkKGZvbGlvKWAuIFNvLCB0aGUgYGZvbGlvX3VubWFwX2ludmFsaWRhdGVgIGNhbGwgd2lsbCBvbmx5IGhhcHBlbiBpZiB0aGUgbWFwcGluZyBleGlzdHMgQU5EIHRoZSBmb2xpbyBpc24mIzM5O3QgY3VycmVudGx5IG1hcHBlZC4gSW50ZXJlc3RpbmcuCgpJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgc3Vycm91bmRpbmcgY29kZS4gSSYjMzk7bGwgdXNlIGVpdGhlciBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZXhhbWluZSBgbW0vZmlsZW1hcC5jYCBhcm91bmQgbGluZSAxNjE2IHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHRoZSBwdXJwb3NlIG9mIHRoaXMgY2hhbmdlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgd2Ugd291bGQgd2FudCB0byAqcHJldmVudCogdW5tYXBwaW5nIGluIHRoZSBjYXNlIG9mIGEgbWFwcGVkIGZvbGlvIHdoZW4gZHJvcHBpbmcgYmVoaW5kLiBXaGF0JiMzOTtzIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoaXMgY29uZGl0aW9uPyBJcyB0aGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBhIGJ1ZyBmaXgsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaW1lIHRvIGRpZyBkZWVwZXIgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZmlsZW1hcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTYwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNjAwOlx0XHRcdHJldCA9IGZvbGlvX3dhaXRfYml0X2tpbGxhYmxlKGZvbGlvLCBQR19wcml2YXRlXzIpO1xuMTYwMTpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTYwMjpcdFx0XHRcdGJyZWFrO1xuMTYwMzpcdFx0fVxuMTYwNDpcdFxuMTYwNTpcdFx0cmV0dXJuIHJldDtcbjE2MDY6XHR9XG4xNjA3Olx0RVhQT1JUX1NZTUJPTChmb2xpb193YWl0X3ByaXZhdGVfMl9raWxsYWJsZSk7XG4xNjA4Olx0XG4xNjA5Olx0c3RhdGljIHZvaWQgZmlsZW1hcF9lbmRfZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuMTYxMDpcdHtcbjE2MTE6XHRcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZm9saW8tXHUwMDNlbWFwcGluZztcbjE2MTI6XHRcbjE2MTM6XHRcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7XG4xNjE0Olx0XG4xNjE1Olx0XHRpZiAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pIHx8IGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKVxuMTYxNjpcdFx0XHRyZXR1cm47XG4xNjE3Olx0XHRpZiAoIWZvbGlvX3Rlc3RfY2xlYXJfZHJvcGJlaGluZChmb2xpbykpXG4xNjE4Olx0XHRcdHJldHVybjtcbjE2MTk6XHRcdGlmIChtYXBwaW5nIFx1MDAyNlx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSlcbjE2MjA6XHRcdFx0Zm9saW9fdW5tYXBfaW52YWxpZGF0ZShtYXBwaW5nLCBmb2xpbywgMCk7XG4xNjIxOlx0fVxuMTYyMjpcdFxuMTYyMzpcdC8qXG4xNjI0Olx0ICogSWYgZm9saW8gd2FzIG1hcmtlZCBhcyBkcm9wYmVoaW5kLCB0aGVuIHBhZ2VzIHNob3VsZCBiZSBkcm9wcGVkIHdoZW4gd3JpdGViYWNrXG4xNjI1Olx0ICogY29tcGxldGVzLiBEbyB0aGF0IG5vdy4gSWYgd2UgZmFpbCwgaXQmIzM5O3MgbGlrZWx5IGJlY2F1c2Ugb2YgYSBiaWcgZm9saW8gLVxuMTYyNjpcdCAqIGp1c3QgcmVzZXQgZHJvcGJlaGluZCBmb3IgdGhhdCBjYXNlIGFuZCBsYXR0ZXIgY29tcGxldGlvbnMgc2hvdWxkIGludmFsaWRhdGUuXG4xNjI3Olx0ICovXG4xNjI4Olx0dm9pZCBmb2xpb19lbmRfZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuMTYyOTpcdHtcbjE2MzA6XHRcdGlmICghZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSlcbjE2MzE6XHRcdFx0cmV0dXJuO1xuMTYzMjpcdFxuMTYzMzpcdFx0LypcbjE2MzQ6XHRcdCAqIEhpdHRpbmcgIWluX3Rhc2soKSBzaG91bGQgbm90IGhhcHBlbiBvZmYgUldGX0RPTlRDQUNIRSB3cml0ZWJhY2ssXG4xNjM1Olx0XHQgKiBidXQgY2FuIGhhcHBlbiBpZiBub3JtYWwgd3JpdGViYWNrIGp1c3QgaGFwcGVucyB0byBmaW5kIGRpcnR5IGZvbGlvc1xuMTYzNjpcdFx0ICogdGhhdCB3ZXJlIGNyZWF0ZWQgYXMgcGFydCBvZiB1bmNhY2hlZCB3cml0ZWJhY2ssIGFuZCB0aGF0IHdyaXRlYmFja1xuMTYzNzpcdFx0ICogd291bGQgb3RoZXJ3aXNlIG5vdCBuZWVkIG5vbi1JUlEgaGFuZGxpbmcuIEp1c3Qgc2tpcCB0aGVcbjE2Mzg6XHRcdCAqIGludmFsaWRhdGlvbiBpbiB0aGF0IGNhc2UuXG4xNjM5Olx0XHQgKi9cbjE2NDA6XHRcdGlmIChpbl90YXNrKCkgXHUwMDI2XHUwMDI2IGZvbGlvX3RyeWxvY2soZm9saW8pKSB7XG4xNjQxOlx0XHRcdGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoZm9saW8pO1xuMTY0MjpcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuMTY0MzpcdFx0fVxuMTY0NDpcdH1cbjE2NDU6XHRFWFBPUlRfU1lNQk9MX0dQTChmb2xpb19lbmRfZHJvcGJlaGluZCk7XG4xNjQ2Olx0XG4xNjQ3Olx0LyoqXG4xNjQ4Olx0ICogZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kIC0gRW5kIHdyaXRlYmFjayBhZ2FpbnN0IGEgZm9saW8uXG4xNjQ5Olx0ICogQGZvbGlvOiBUaGUgZm9saW8uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIyNwoJCQkJCQkJb3V0cHV0OiAxNgoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgRGF0YSBDYWNoaW5nIFN0cmF0ZWdpZXMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB3ZSYjMzk7cmUgY29udHJvbGxpbmcgY2FjaGUgYmVoYXZpb3IsIHNwZWNpZmljYWxseSBhcm91bmQgZHJvcHBpbmcgcGFnZXMgZnJvbSB0aGUgY2FjaGUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBleGFtaW5lIHRoZSBrZXkgZnVuY3Rpb25zIG9yIGZsYWdzIHVzZWQgdG8gbWFuYWdlIHRoaXM6IGBmb2xpb19lbmRfZHJvcGJlaGluZGAsIGBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kYCwgdGhlIGdlbmVyYWwgYGRyb3BiZWhpbmRgIGZ1bmN0aW9uYWxpdHksIGFuZCwgb2YgY291cnNlLCBgUldGX0RPTlRDQUNIRWAuIEl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQg4oCTIHRvIGdldCBhIGdyYXNwIG9mIHRoZWlyIHVzYWdlLCBJIHNob3VsZCBpbml0aWF0ZSBhIGNvZGUgc2VhcmNoLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgaW5zdGFuY2VzIHdoZXJlIGBkcm9wYmVoaW5kYCBvciBgUldGX0RPTlRDQUNIRWAgYXJlIHJlZmVyZW5jZWQgd2l0aGluIHRoZSBjb2RlYmFzZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZWlyIGFwcGxpY2F0aW9uIGFuZCBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHJvcGJlaGluZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9idWZmZXIuYz0xMDg1PXN0YXRpYyB2b2lkIF9fYmhfc3VibWl0KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcGYsXG4tLVxuZnMvYnVmZmVyLmMtMTEwOS1cbmZzL2J1ZmZlci5jOjExMTA6XHRpZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLVx1MDAzZWJfZm9saW8pIFx1MDAyNlx1MDAyNiBvcF9pc193cml0ZShvcGYpKVxuZnMvYnVmZmVyLmMtMTExMS1cdFx0YmlvX3NldF9mbGFnKGJpbywgQklPX0NPTVBMRVRFX0lOX1RBU0spO1xuLS1cbmZzL2ZzLXdyaXRlYmFjay5jPTQwNT1zdGF0aWMgYm9vbCBpbm9kZV9kb19zd2l0Y2hfd2JzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZnMtd3JpdGViYWNrLmMtNDM1LVx0XHRcdHdiX3N0YXRfbW9kKG5ld193YiwgV0JfUkVDTEFJTUFCTEUsIG5yKTtcbmZzL2ZzLXdyaXRlYmFjay5jOjQzNjpcdFx0XHRpZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSkge1xuZnMvZnMtd3JpdGViYWNrLmMtNDM3LVx0XHRcdFx0d2Jfc3RhdF9tb2Qob2xkX3diLCBXQl9ET05UQ0FDSEVfRElSVFksIC1ucik7XG4tLVxuZnMvaW9tYXAvaW9lbmQuYz0yMTM9c3NpemVfdCBpb21hcF9hZGRfdG9faW9lbmQoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5mcy9pb21hcC9pb2VuZC5jLTI1Ny1cbmZzL2lvbWFwL2lvZW5kLmM6MjU4Olx0aWYgKGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykpXG5mcy9pb21hcC9pb2VuZC5jLTI1OS1cdFx0YmlvX3NldF9mbGFnKFx1MDAyNmlvZW5kLVx1MDAzZWlvX2JpbywgQklPX0NPTVBMRVRFX0lOX1RBU0spO1xuLS1cbmZzL25mcy9maWxlLmM9MzYwPXN0YXRpYyBib29sIG5mc193YW50X3JlYWRfbW9kaWZ5X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmZzL25mcy9maWxlLmMtMzcyLVx0XHRyZXR1cm4gdHJ1ZTtcbmZzL25mcy9maWxlLmM6MzczOlx0aWYgKGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykpXG5mcy9uZnMvZmlsZS5jLTM3NC1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmZzL25mcy9maWxlLmM9Mzg5PXN0YXRpYyBpbnQgbmZzX3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcbi0tXG5mcy9uZnMvZmlsZS5jLTQxOS1cdFx0b25jZV90aHJ1ID0gMTtcbmZzL25mcy9maWxlLmM6NDIwOlx0XHRmb2xpb19jbGVhcl9kcm9wYmVoaW5kKGZvbGlvKTtcbmZzL25mcy9maWxlLmMtNDIxLVx0XHRyZXQgPSBuZnNfcmVhZF9mb2xpbyhmaWxlLCBmb2xpbyk7XG4tLVxuZnMvbmZzL3dyaXRlLmM9Mjk1PXN0YXRpYyB2b2lkIG5mc19mb2xpb19lbmRfd3JpdGViYWNrKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuZnMvbmZzL3dyaXRlLmMtMjk4LVxuZnMvbmZzL3dyaXRlLmM6Mjk5Olx0Zm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKGZvbGlvKTtcbmZzL25mcy93cml0ZS5jLTMwMC1cdGlmIChhdG9taWNfbG9uZ19kZWNfcmV0dXJuKFx1MDAyNm5mc3MtXHUwMDNld3JpdGViYWNrKSBcdTAwM2Ncbi0tXG5mcy9uZnMvd3JpdGUuYz03MzU9c3RhdGljIHZvaWQgbmZzX2lub2RlX3JlbW92ZV9yZXF1ZXN0KHN0cnVjdCBuZnNfcGFnZSAqcmVxKVxuLS1cbmZzL25mcy93cml0ZS5jLTc1MS1cbmZzL25mcy93cml0ZS5jOjc1MjpcdFx0XHRmb2xpb19lbmRfZHJvcGJlaGluZChmb2xpbyk7XG5mcy9uZnMvd3JpdGUuYy03NTMtXHRcdH1cbi0tXG5mcy9uZnNkL2RlYnVnZnMuYz0zOT1ERUZJTkVfREVCVUdGU19BVFRSSUJVVEUobmZzZF9kc3JfZm9wcywgbmZzZF9kc3JfZ2V0LCBuZnNkX2Rzcl9zZXQsIFwmIzM0OyVsbHVcXG5cJiMzNDspO1xuLS1cbmZzL25mc2QvZGVidWdmcy5jLTQ1LSAqICAgJTA6IE5GUyBSRUFEIHdpbGwgdXNlIGJ1ZmZlcmVkIElPXG5mcy9uZnNkL2RlYnVnZnMuYzo0NjogKiAgICUxOiBORlMgUkVBRCB3aWxsIHVzZSBkb250Y2FjaGUgKGJ1ZmZlcmVkIElPIHcvIGRyb3BiZWhpbmQpXG5mcy9uZnNkL2RlYnVnZnMuYy00Ny0gKiAgICUyOiBORlMgUkVBRCB3aWxsIHVzZSBkaXJlY3QgSU9cbi0tXG5mcy9uZnNkL2RlYnVnZnMuYz04ND1ERUZJTkVfREVCVUdGU19BVFRSSUJVVEUobmZzZF9pb19jYWNoZV9yZWFkX2ZvcHMsIG5mc2RfaW9fY2FjaGVfcmVhZF9nZXQsXG4tLVxuZnMvbmZzZC9kZWJ1Z2ZzLmMtOTEtICogICAlMDogTkZTIFdSSVRFIHdpbGwgdXNlIGJ1ZmZlcmVkIElPXG5mcy9uZnNkL2RlYnVnZnMuYzo5MjogKiAgICUxOiBORlMgV1JJVEUgd2lsbCB1c2UgZG9udGNhY2hlIChidWZmZXJlZCBJTyB3LyBkcm9wYmVoaW5kKVxuZnMvbmZzZC9kZWJ1Z2ZzLmMtOTMtICpcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD05Mz1lbnVtIHBhZ2VmbGFncyB7XG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTEyLVx0UEdfdW5ldmljdGFibGUsXHRcdC8qIFBhZ2UgaXMgXCYjMzQ7dW5ldmljdGFibGVcJiMzNDsgICovXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoxMTM6XHRQR19kcm9wYmVoaW5kLFx0XHQvKiBkcm9wIHBhZ2VzIG9uIElPIGNvbXBsZXRpb24gKi9cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTExNC0jaWZkZWYgQ09ORklHX01NVVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTU5OD1GT0xJT19GTEFHKHJlYWRhaGVhZCwgRk9MSU9fSEVBRF9QQUdFKVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTYwMC1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjYwMTpGT0xJT19GTEFHKGRyb3BiZWhpbmQsIEZPTElPX0hFQURfUEFHRSlcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjYwMjpcdEZPTElPX1RFU1RfQ0xFQVJfRkxBRyhkcm9wYmVoaW5kLCBGT0xJT19IRUFEX1BBR0UpXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo2MDM6XHRfX0ZPTElPX1NFVF9GTEFHKGRyb3BiZWhpbmQsIEZPTElPX0hFQURfUEFHRSlcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTYwNC1cbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaD0xMzEwPXZvaWQgZm9saW9fZW5kX3dyaXRlYmFjayhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oOjEzMTE6dm9pZCBmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbyk7XG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaDoxMzEyOnZvaWQgZm9saW9fZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbyk7XG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC0xMzEzLXZvaWQgZm9saW9fd2FpdF9zdGFibGUoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tLVxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg9MTQwOD1zdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wge1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTE0MTUtXHR1bnNpZ25lZCBpbnQgX2JhdGNoX2NvdW50O1xuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg6MTQxNjpcdGJvb2wgZHJvcGJlaGluZDtcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTE0MTctXHRib29sIF93b3JraW5nc2V0O1xuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21tZmxhZ3MuaD02OT1UUkFDRV9ERUZJTkVfRU5VTShfX19HRlBfTEFTVF9CSVQpO1xuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21tZmxhZ3MuaC0xNTMtXHRERUZfUEFHRUZMQUdfTkFNRSh1bmV2aWN0YWJsZSksXHRcdFx0XHRcdFxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9tbWZsYWdzLmg6MTU0Olx0REVGX1BBR0VGTEFHX05BTUUoZHJvcGJlaGluZClcdFx0XHRcdFx0XFxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21tZmxhZ3MuaC0xNTUtSUZfSEFWRV9QR19NTE9DSyhtbG9ja2VkKVx0XHRcdFx0XHRcdFxcXG4tLVxubW0vZmlsZW1hcC5jPTE2MDc9RVhQT1JUX1NZTUJPTChmb2xpb193YWl0X3ByaXZhdGVfMl9raWxsYWJsZSk7XG5tbS9maWxlbWFwLmMtMTYwOC1cbm1tL2ZpbGVtYXAuYzoxNjA5OnN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL2ZpbGVtYXAuYy0xNjEwLXtcbi0tXG5tbS9maWxlbWFwLmMtMTYxNi1cdFx0cmV0dXJuO1xubW0vZmlsZW1hcC5jOjE2MTc6XHRpZiAoIWZvbGlvX3Rlc3RfY2xlYXJfZHJvcGJlaGluZChmb2xpbykpXG5tbS9maWxlbWFwLmMtMTYxOC1cdFx0cmV0dXJuO1xuLS1cbm1tL2ZpbGVtYXAuYy0xNjIzLS8qXG5tbS9maWxlbWFwLmM6MTYyNDogKiBJZiBmb2xpbyB3YXMgbWFya2VkIGFzIGRyb3BiZWhpbmQsIHRoZW4gcGFnZXMgc2hvdWxkIGJlIGRyb3BwZWQgd2hlbiB3cml0ZWJhY2tcbm1tL2ZpbGVtYXAuYy0xNjI1LSAqIGNvbXBsZXRlcy4gRG8gdGhhdCBub3cuIElmIHdlIGZhaWwsIGl0JiMzOTtzIGxpa2VseSBiZWNhdXNlIG9mIGEgYmlnIGZvbGlvIC1cbm1tL2ZpbGVtYXAuYzoxNjI2OiAqIGp1c3QgcmVzZXQgZHJvcGJlaGluZCBmb3IgdGhhdCBjYXNlIGFuZCBsYXR0ZXIgY29tcGxldGlvbnMgc2hvdWxkIGludmFsaWRhdGUuXG5tbS9maWxlbWFwLmMtMTYyNy0gKi9cbm1tL2ZpbGVtYXAuYzoxNjI4OnZvaWQgZm9saW9fZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL2ZpbGVtYXAuYy0xNjI5LXtcbm1tL2ZpbGVtYXAuYzoxNjMwOlx0aWYgKCFmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKVxubW0vZmlsZW1hcC5jLTE2MzEtXHRcdHJldHVybjtcbi0tXG5tbS9maWxlbWFwLmMtMTY0MC1cdGlmIChpbl90YXNrKCkgXHUwMDI2XHUwMDI2IGZvbGlvX3RyeWxvY2soZm9saW8pKSB7XG5tbS9maWxlbWFwLmM6MTY0MTpcdFx0ZmlsZW1hcF9lbmRfZHJvcGJlaGluZChmb2xpbyk7XG5tbS9maWxlbWFwLmMtMTY0Mi1cdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbi0tXG5tbS9maWxlbWFwLmMtMTY0NC19XG5tbS9maWxlbWFwLmM6MTY0NTpFWFBPUlRfU1lNQk9MX0dQTChmb2xpb19lbmRfZHJvcGJlaGluZCk7XG5tbS9maWxlbWFwLmMtMTY0Ni1cbm1tL2ZpbGVtYXAuYy0xNjQ3LS8qKlxubW0vZmlsZW1hcC5jOjE2NDg6ICogZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kIC0gRW5kIHdyaXRlYmFjayBhZ2FpbnN0IGEgZm9saW8uXG5tbS9maWxlbWFwLmMtMTY0OS0gKiBAZm9saW86IFRoZSBmb2xpby5cbi0tXG5tbS9maWxlbWFwLmMtMTY1MS0gKiBUaGUgZm9saW8gbXVzdCBhY3R1YWxseSBiZSB1bmRlciB3cml0ZWJhY2suXG5tbS9maWxlbWFwLmM6MTY1MjogKiBUaGlzIGNhbGwgaXMgaW50ZW5kZWQgZm9yIGZpbGVzeXN0ZW1zIHRoYXQgbmVlZCB0byBkZWZlciBkcm9wYmVoaW5kLlxubW0vZmlsZW1hcC5jLTE2NTMtICpcbi0tXG5tbS9maWxlbWFwLmMtMTY1NS0gKi9cbm1tL2ZpbGVtYXAuYzoxNjU2OnZvaWQgZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9maWxlbWFwLmMtMTY1Ny17XG4tLVxubW0vZmlsZW1hcC5jLTE2NzYtfVxubW0vZmlsZW1hcC5jOjE2Nzc6RVhQT1JUX1NZTUJPTF9HUEwoZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKTtcbm1tL2ZpbGVtYXAuYy0xNjc4LVxuLS1cbm1tL2ZpbGVtYXAuYz0xNjg3PXZvaWQgZm9saW9fZW5kX3dyaXRlYmFjayhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2ZpbGVtYXAuYy0xNjk3LVx0Zm9saW9fZ2V0KGZvbGlvKTtcbm1tL2ZpbGVtYXAuYzoxNjk4Olx0Zm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKGZvbGlvKTtcbm1tL2ZpbGVtYXAuYzoxNjk5Olx0Zm9saW9fZW5kX2Ryb3BiZWhpbmQoZm9saW8pO1xubW0vZmlsZW1hcC5jLTE3MDAtXHRmb2xpb19wdXQoZm9saW8pO1xuLS1cbm1tL2ZpbGVtYXAuYz0xOTQ3PXN0cnVjdCBmb2xpbyAqX19maWxlbWFwX2dldF9mb2xpb19tcG9sKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL2ZpbGVtYXAuYy0yMDI1LVx0XHRcdGlmIChmZ3BfZmxhZ3MgXHUwMDI2IEZHUF9ET05UQ0FDSEUpXG5tbS9maWxlbWFwLmM6MjAyNjpcdFx0XHRcdF9fZm9saW9fc2V0X2Ryb3BiZWhpbmQoZm9saW8pO1xubW0vZmlsZW1hcC5jLTIwMjctXG4tLVxubW0vZmlsZW1hcC5jLTIwNjAtXHQvKiBub3QgYW4gdW5jYWNoZWQgbG9va3VwLCBjbGVhciB1bmNhY2hlZCBpZiBzZXQgKi9cbm1tL2ZpbGVtYXAuYzoyMDYxOlx0aWYgKCEoZmdwX2ZsYWdzIFx1MDAyNiBGR1BfRE9OVENBQ0hFKSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9jbGVhcl9kcm9wYmVoaW5kKGZvbGlvKSkge1xubW0vZmlsZW1hcC5jLTIwNjItXHRcdGlmIChmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSBcdTAwMjZcdTAwMjZcbi0tXG5tbS9maWxlbWFwLmM9MjYxOT1zdGF0aWMgaW50IGZpbGVtYXBfY3JlYXRlX2ZvbGlvKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gpXG4tLVxubW0vZmlsZW1hcC5jLTI2MzMtXHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9ET05UQ0FDSEUpXG5tbS9maWxlbWFwLmM6MjYzNDpcdFx0X19mb2xpb19zZXRfZHJvcGJlaGluZChmb2xpbyk7XG5tbS9maWxlbWFwLmMtMjYzNS1cbi0tXG5tbS9maWxlbWFwLmM9MjY3Mj1zdGF0aWMgaW50IGZpbGVtYXBfcmVhZGFoZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxubW0vZmlsZW1hcC5jLTI2ODAtXHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9ET05UQ0FDSEUpXG5tbS9maWxlbWFwLmM6MjY4MTpcdFx0cmFjdGwuZHJvcGJlaGluZCA9IDE7XG5tbS9maWxlbWFwLmMtMjY4Mi1cdHBhZ2VfY2FjaGVfYXN5bmNfcmEoXHUwMDI2cmFjdGwsIGZvbGlvLCBsYXN0X2luZGV4IC0gZm9saW8tXHUwMDNlaW5kZXgpO1xuLS1cbm1tL2ZpbGVtYXAuYz0yNjg2PXN0YXRpYyBpbnQgZmlsZW1hcF9nZXRfcGFnZXMoc3RydWN0IGtpb2NiICppb2NiLCBzaXplX3QgY291bnQsXG4tLVxubW0vZmlsZW1hcC5jLTI3MTItXHRcdGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX0RPTlRDQUNIRSlcbm1tL2ZpbGVtYXAuYzoyNzEzOlx0XHRcdHJhY3RsLmRyb3BiZWhpbmQgPSAxO1xubW0vZmlsZW1hcC5jLTI3MTQtXHRcdHBhZ2VfY2FjaGVfc3luY19yYShcdTAwMjZyYWN0bCwgbGFzdF9pbmRleCAtIGluZGV4KTtcbi0tXG5tbS9maWxlbWFwLmM9Mjc1NT1zdGF0aWMgaW5saW5lIGJvb2wgcG9zX3NhbWVfZm9saW8obG9mZl90IHBvczEsIGxvZmZfdCBwb3MyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2ZpbGVtYXAuYy0yNzYxLVxubW0vZmlsZW1hcC5jOjI3NjI6c3RhdGljIHZvaWQgZmlsZW1hcF9lbmRfZHJvcGJlaGluZF9yZWFkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9maWxlbWFwLmMtMjc2My17XG5tbS9maWxlbWFwLmM6Mjc2NDpcdGlmICghZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSlcbm1tL2ZpbGVtYXAuYy0yNzY1LVx0XHRyZXR1cm47XG4tLVxubW0vZmlsZW1hcC5jLTI3NjgtXHRpZiAoZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcbm1tL2ZpbGVtYXAuYzoyNzY5Olx0XHRmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKGZvbGlvKTtcbm1tL2ZpbGVtYXAuYy0yNzcwLVx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuLS1cbm1tL2ZpbGVtYXAuYz0yNzg3PXNzaXplX3QgZmlsZW1hcF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbm1tL2ZpbGVtYXAuYy0yODg5LVxubW0vZmlsZW1hcC5jOjI4OTA6XHRcdFx0ZmlsZW1hcF9lbmRfZHJvcGJlaGluZF9yZWFkKGZvbGlvKTtcbm1tL2ZpbGVtYXAuYy0yODkxLVx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4tLVxubW0vZm9saW8uYz00MjI9dm9pZCBmb2xpb19tYXJrX2FjY2Vzc2VkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9mb2xpby5jLTQyMy17XG5tbS9mb2xpby5jOjQyNDpcdGlmIChmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKVxubW0vZm9saW8uYy00MjUtXHRcdHJldHVybjtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTM2ODU9c3RhdGljIHZvaWQgX19zcGxpdF9mb2xpb190b19vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzc0NC1cdFx0XHRcdCAoMUwgXHUwMDNjXHUwMDNjIFBHX2RpcnR5KSB8XG5tbS9odWdlX21lbW9yeS5jOjM3NDU6XHRcdFx0XHQgKDFMIFx1MDAzY1x1MDAzYyBQR19kcm9wYmVoaW5kKSB8XG5tbS9odWdlX21lbW9yeS5jLTM3NDYtXHRcdFx0XHQgTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfTUFTSykpO1xuLS1cbm1tL3BhZ2Utd3JpdGViYWNrLmM9MjYwMz1zdGF0aWMgdm9pZCBmb2xpb19hY2NvdW50X2RpcnRpZWQoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9wYWdlLXdyaXRlYmFjay5jLTI2MTctXHRcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9ESVJUWSwgbnIpO1xubW0vcGFnZS13cml0ZWJhY2suYzoyNjE4Olx0XHRpZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSlcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjYxOS1cdFx0XHR3Yl9zdGF0X21vZCh3YiwgV0JfRE9OVENBQ0hFX0RJUlRZLCBucik7XG4tLVxubW0vcGFnZS13cml0ZWJhY2suYz0yNjM2PXZvaWQgZm9saW9fYWNjb3VudF9jbGVhbmVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBiZGlfd3JpdGViYWNrICp3Yilcbi0tXG5tbS9wYWdlLXdyaXRlYmFjay5jLTI2NDAtXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfRElSVFksIC1ucik7XG5tbS9wYWdlLXdyaXRlYmFjay5jOjI2NDE6XHRpZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSlcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjY0Mi1cdFx0d2Jfc3RhdF9tb2Qod2IsIFdCX0RPTlRDQUNIRV9ESVJUWSwgLW5yKTtcbi0tXG5tbS9wYWdlLXdyaXRlYmFjay5jPTI4NjY9Ym9vbCBmb2xpb19jbGVhcl9kaXJ0eV9mb3JfaW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9wYWdlLXdyaXRlYmFjay5jLTI5MTYtXHRcdFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX0RJUlRZLCAtbnIpO1xubW0vcGFnZS13cml0ZWJhY2suYzoyOTE3Olx0XHRcdGlmIChmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKVxubW0vcGFnZS13cml0ZWJhY2suYy0yOTE4LVx0XHRcdFx0d2Jfc3RhdF9tb2Qod2IsIFdCX0RPTlRDQUNIRV9ESVJUWSwgLW5yKTtcbi0tXG5tbS9yZWFkYWhlYWQuYz0xOTU9c3RhdGljIHN0cnVjdCBmb2xpbyAqcmFjdGxfYWxsb2NfZm9saW8oc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWN0bCxcbi0tXG5tbS9yZWFkYWhlYWQuYy0yMDAtXHRmb2xpbyA9IGZpbGVtYXBfYWxsb2NfZm9saW8oZ2ZwX21hc2ssIG9yZGVyLCBOVUxMKTtcbm1tL3JlYWRhaGVhZC5jOjIwMTpcdGlmIChmb2xpbyBcdTAwMjZcdTAwMjYgcmFjdGwtXHUwMDNlZHJvcGJlaGluZClcbm1tL3JlYWRhaGVhZC5jOjIwMjpcdFx0X19mb2xpb19zZXRfZHJvcGJlaGluZChmb2xpbyk7XG5tbS9yZWFkYWhlYWQuYy0yMDMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU4NQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDYzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldDogTU0gRHJvcGJlaGluZCBPcHRpbWl6YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kYCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYGZvbGlvX2VuZF9kcm9wYmVoaW5kYCBhbmQgYGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmRfcmVhZGAuIERyb3BiZWhpbmQgaXMgdHJpZ2dlcmVkIGJ5IGBSV0ZfRE9OVENBQ0hFYCBvciBgSU9DQl9ET05UQ0FDSEVgLCBlZmZlY3RpdmVseSB3aXRoIG9wZXJhdGlvbnMgbGlrZSBgcHJlYWR2MmAvYHB3cml0ZXYyYCB3aXRoIGBSV0ZfRE9OVENBQ0hFYCwgb3IgaW9fdXJpbmcgd2l0aCBgSU9SSU5HX1JFQ1ZTRU5EX1BPTExfRklSU1RgLiBUaGF0JiMzOTtzIHRoZSBjb250ZXh0LgoKTm93LCBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZWAgaXMgdGhlIGtleSBmdW5jdGlvbjsgaXQgaGFuZGxlcyB1bm1hcHBpbmcgYW5kIGludmFsaWRhdGluZyBhIGZvbGlvLiBCdXQgaGVyZSYjMzk7cyB0aGUgY2F0Y2g6IElmIGEgZm9saW8gaXMgbWFwcGVkIGludG8gdXNlciBzcGFjZSAodGhpbmsgYG1tYXBgKSwgYGZvbGlvX21hcHBlZChmb2xpbylgIGlzIHRydWUuIElmIHdlIGNhbGwgYGZvbGlvX3VubWFwX2ludmFsaWRhdGVgIG9uIGEgbWFwcGVkIGZvbGlvLCB3ZSBjb3VsZCBjYXVzZSBpc3N1ZXMgYnkgaW52YWxpZGF0aW5nIHRoZSBtYXAuIFRoaXMgcGF0Y2ggc2tpcHMgdGhlIGBmb2xpb191bm1hcF9pbnZhbGlkYXRlYCBjYWxsIGZvciBtYXBwZWQgZm9saW9zLgoKVGhpcyBpcyBjb3JlIGtlcm5lbCBNTSBsb2dpYyBpbiBgbW0vZmlsZW1hcC5jYCwgYW5kIGl0JiMzOTtzIHJlYWNoYWJsZSB0aHJvdWdoIHN0YW5kYXJkIGZpbGUgcmVhZC93cml0ZSBvcGVyYXRpb25zIChsaWtlIGBwcmVhZHYyYCB3aXRoIGBSV0ZfRE9OVENBQ0hFYCkuIFNvLCBpcyB0aGlzIGZ1enphYmxlPyBMZXQmIzM5O3MgY2hlY2s6CgoqICAgKipEb2N1bWVudGF0aW9uL0tjb25maWcvQ29tbWVudHM/KiogTm9wZS4KKiAgICoqRGVjb3JhdGl2ZSBDaGFuZ2VzPyoqIE5vcGUuCiogICAqKk51bWVyaWMgQ29uc3RhbnRzL01hY3Jvcz8qKiBOb3BlLgoqICAgKipWaXJ0dWFsaXplZCBFbnZpcm9ubWVudCBJbXBvc3NpYmxlIFBhdGhzPyoqIE5vIHdheSwgd2UgY2FuIHRlc3QgdGhpcyBlYXNpbHkgaW4gUUVNVSBvciBHQ0UuCiogICAqKlZlbmRvci1TcGVjaWZpYyBIYXJkd2FyZT8qKiBOb3BlLgoqICAgKipEcml2ZXIgUmVtb3ZhbC9TaHV0ZG93bj8qKiBOb3BlLgoKVGhpcyBtb2RpZmllcyBjb3JlIGtlcm5lbCBNTSBsb2dpYyDigJMgc3BlY2lmaWNhbGx5LCB0aGUgZXhlY3V0aW9uIGZsb3cuIFRoZSBrZXkgY2hhbmdlIGlzIHRvICpza2lwKiBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZWAgd2hlbiBgZm9saW9fbWFwcGVkKGZvbGlvKWAgaXMgdHJ1ZS4gU28sIFdvcnRoRnV6emluZyA9IFRydWUuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgbGlrZWx5IGZ1bmN0aW9ucyBhbmQgY29uZmlncy4gSSBuZWVkIHRvIGZvY3VzIG9uIG5vbi1ob3QtcGF0aCBzeW1ib2xzLiBSZWxldmFudCBmdW5jdGlvbnMgYXJlOgoKKiAgIGBmb2xpb19lbmRfZHJvcGJlaGluZGAKKiAgIGBmaWxlbWFwX3JlYWRgICh0aGlzIGlzIGEgc3RhbmRhcmQgcmVhZCBhbmQgbGlrZWx5IGlzIGhvdC1wYXRoLCBidXQgbWF5IHRyaWdnZXIgYGZvbGlvX2VuZF9kcm9wYmVoaW5kYCBvciBgZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kYCBvciBgZm9saW9fZW5kX3dyaXRlYmFja2ApLgoKU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBiZSBsb29raW5nIGF0IG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50czoKCiogICBgZm9saW9fZW5kX2Ryb3BiZWhpbmRgIC0gaXMgbm9uLXN0YXRpYyBhbmQgYEVYUE9SVF9TWU1CT0xfR1BMKGZvbGlvX2VuZF9kcm9wYmVoaW5kKWAuCiogICBgZm9saW9fZW5kX3dyaXRlYmFja2AgLSBpcyBub24tc3RhdGljIGFuZCBgRVhQT1JUX1NZTUJPTChmb2xpb19lbmRfd3JpdGViYWNrKWAuCiogICBgZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kYCAtIGlzIG5vbi1zdGF0aWMgYW5kIGBFWFBPUlRfU1lNQk9MX0dQTChmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQpYC4KCkkmIzM5O2xsIGFsc28gZ3JlcCBmb3IgYGZvbGlvX3VubWFwX2ludmFsaWRhdGVgIHRvIHNlZSBpdHMgZGVjbGFyYXRpb24uIFRoYXQmIzM5O3MgdGhlIHRhcmdldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xpb191bm1hcF9pbnZhbGlkYXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ZpbGVtYXAuYz0xNjA5PXN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9maWxlbWFwLmMtMTYxOS1cdGlmIChtYXBwaW5nIFx1MDAyNlx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSlcbm1tL2ZpbGVtYXAuYzoxNjIwOlx0XHRmb2xpb191bm1hcF9pbnZhbGlkYXRlKG1hcHBpbmcsIGZvbGlvLCAwKTtcbm1tL2ZpbGVtYXAuYy0xNjIxLX1cbi0tXG5tbS9pbnRlcm5hbC5oPTU5Nz1pbnQgemFwX3ZtYV9mb3JfcmVhcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG5tbS9pbnRlcm5hbC5oOjU5ODppbnQgZm9saW9fdW5tYXBfaW52YWxpZGF0ZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL2ludGVybmFsLmgtNTk5LVx0XHRcdCAgIGdmcF90IGdmcCk7XG4tLVxubW0vdHJ1bmNhdGUuYz02MDY9c3RhdGljIGludCBmb2xpb19sYXVuZGVyKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3RydW5jYXRlLmMtNjIxLSAqL1xubW0vdHJ1bmNhdGUuYzo2MjI6aW50IGZvbGlvX3VubWFwX2ludmFsaWRhdGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS90cnVuY2F0ZS5jLTYyMy1cdFx0XHQgICBnZnBfdCBnZnApXG4tLVxubW0vdHJ1bmNhdGUuYz02NzY9aW50IGludmFsaWRhdGVfaW5vZGVfcGFnZXMyX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL3RydW5jYXRlLmMtNzI1LVx0XHRcdGZvbGlvX3dhaXRfd3JpdGViYWNrKGZvbGlvKTtcbm1tL3RydW5jYXRlLmM6NzI2Olx0XHRcdHJldDIgPSBmb2xpb191bm1hcF9pbnZhbGlkYXRlKG1hcHBpbmcsIGZvbGlvLCBHRlBfS0VSTkVMKTtcbm1tL3RydW5jYXRlLmMtNzI3LVx0XHRcdGlmIChyZXQyIFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzMDMKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZWAgYW5kIFJlbGF0ZWQgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGBmb2xpb191bm1hcF9pbnZhbGlkYXRlYC4gSSBrbm93IGl0JiMzOTtzIGRlZmluZWQgaW4gYG1tL3RydW5jYXRlLmNgLCBhbmQgaW1wb3J0YW50bHksIGl0JiMzOTtzIG5vdCBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQmIzM5O3MgbGlrZWx5IHVzZWQgb3V0c2lkZSB0aGF0IHNwZWNpZmljIGZpbGUuIEkgYWxzbyBzZWUgdGhhdCBgZm9saW9fZW5kX2Ryb3BiZWhpbmRgIGFuZCBgZm9saW9fZW5kX3dyaXRlYmFja2AgYXJlIGRlZmluZWQgaW4gYG1tL2ZpbGVtYXAuY2AsIGFsc28gbm9uLXN0YXRpYy4gTWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBjb250ZXh0LgoKTXkgbmV4dCBtb3ZlIGlzIHRvIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhlIGNvbXBpbGF0aW9uIG9yIGJlaGF2aW9yIGFyb3VuZCBgbW0vZmlsZW1hcC5jYCBvciwgbW9yZSBzcGVjaWZpY2FsbHksIHRoZSAmIzM0O2Ryb3BiZWhpbmQmIzM0OyBmdW5jdGlvbmFsaXR5LCBzaW5jZSBgZm9saW9fZW5kX2Ryb3BiZWhpbmRgIGlzIGluIHBsYXkuIEkga25vdyBgZmlsZW1hcC5jYCBpcyBjb3JlIE1NLCBzbyBpdCAqc2hvdWxkKiBhbHdheXMgYmUgY29tcGlsZWQsIGJ1dCBJJiMzOTtsbCBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgd2VpcmQgY29uZmlnIGRlcGVuZGVuY2llcyB0aGF0IGNvdWxkIG1ha2UgdGhpbmdzIHdvbmt5LgoKTm93LCBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiAoYCNpZmRlZmAgY29uc3RydWN0cykgYXJvdW5kIHRoZSBmdW5jdGlvbnMgSSYjMzk7bSBpbnRlcmVzdGVkIGluLCBwYXJ0aWN1bGFybHkgYGZvbGlvX2VuZF9kcm9wYmVoaW5kYC4gTGV0JiMzOTtzIHRha2UgYSBsb29rIGluIGBtbS9maWxlbWFwLmNgIGluIHRoZSB2aWNpbml0eSBvZiBgcmVhZC1maWxlYCBhcm91bmQgbGluZSAxNjAwLTE2NTAuLi5Ob3BlLCBubyBpZmRlZnMgdGhlcmUuIFRoYXQmIzM5O3MgZ29vZDsgZmV3ZXIgcG90ZW50aWFsIGdvdGNoYXMuCgpGaW5hbGx5LCBJJiMzOTttIGN1cmlvdXMgYWJvdXQgdGhlIGBSV0ZfRE9OVENBQ0hFYCBmbGFnLCBiZWNhdXNlIEkgaGF2ZSBhIGh1bmNoIGl0IG1pZ2h0IGJlIHJlbGF0ZWQuIEkmIzM5O2xsIHNlYXJjaCB0aGUgY29kZWJhc2UgZm9yIGBJT0NCX0RPTlRDQUNIRWAgb3IgYFJXRl9ET05UQ0FDSEVgIHRvIHNlZSBob3cgd2lkZWx5IHRoZXkmIzM5O3JlIHN1cHBvcnRlZCBhY3Jvc3MgZmlsZXN5c3RlbXMgYW5kIGRpZmZlcmVudCBjb25maWd1cmF0aW9uIHNjZW5hcmlvcy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciBwaWN0dXJlIG9mIGhvdyB0aGlzICYjMzQ7ZG9uJiMzOTt0IGNhY2hlJiMzNDsgYmVoYXZpb3IgaW50ZXJhY3RzIHdpdGggdGhlc2UgZmlsZSBtYXBwaW5nIG9wZXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1JXRl9ET05UQ0FDSEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzZC1pby1tb2Rlcy5yc3Q9NjA9Rm9yIG1vcmUgY29udGV4dCBvbiBET05UQ0FDSEUsIHBsZWFzZSBzZWUgdGhlc2UgTGludXggY29tbWl0IGhlYWRlcnM6XG4tLVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzZC1pby1tb2Rlcy5yc3QtNjQtLSBmb3IgUkVBRDogIDgwMjZlNDliZmY5YjEgKFwmIzM0O21tL2ZpbGVtYXA6IGFkZCByZWFkIHN1cHBvcnQgZm9yXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9uZnNkLWlvLW1vZGVzLnJzdDo2NTogIFJXRl9ET05UQ0FDSEVcJiMzNDspXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9uZnNkLWlvLW1vZGVzLnJzdC02Ni0tIGZvciBXUklURTogOTc0YzVlNjEzOWRiMyAoXCYjMzQ7eGZzOiBmbGFnIGFzIHN1cHBvcnRpbmcgRk9QX0RPTlRDQUNIRVwmIzM0Oylcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmg9MzM2PXN0cnVjdCByZWFkYWhlYWRfY29udHJvbDtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMzQ0LSNkZWZpbmUgSU9DQl9BVE9NSUNcdFx0KF9fZm9yY2UgaW50KSBSV0ZfQVRPTUlDXG5pbmNsdWRlL2xpbnV4L2ZzLmg6MzQ1OiNkZWZpbmUgSU9DQl9ET05UQ0FDSEVcdFx0KF9fZm9yY2UgaW50KSBSV0ZfRE9OVENBQ0hFXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMzQ2LSNkZWZpbmUgSU9DQl9OT1NJR05BTFx0XHQoX19mb3JjZSBpbnQpIFJXRl9OT1NJR05BTFxuLS1cbmluY2x1ZGUvbGludXgvZnMuaD0zNDQ3PXN0YXRpYyBpbmxpbmUgaW50IGtpb2NiX3NldF9yd19mbGFncyhzdHJ1Y3Qga2lvY2IgKmtpLCByd2ZfdCBmbGFncyxcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMzQ3MS1cdH1cbmluY2x1ZGUvbGludXgvZnMuaDozNDcyOlx0aWYgKGZsYWdzIFx1MDAyNiBSV0ZfRE9OVENBQ0hFKSB7XG5pbmNsdWRlL2xpbnV4L2ZzLmgtMzQ3My1cdFx0LyogZmlsZSBzeXN0ZW0gbXVzdCBzdXBwb3J0IGl0ICovXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmg9NDI1PXR5cGVkZWYgaW50IF9fYml0d2lzZSBfX2tlcm5lbF9yd2ZfdDtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaC00NDgtLyogYnVmZmVyZWQgSU8gdGhhdCBkcm9wcyB0aGUgY2FjaGUgYWZ0ZXIgcmVhZGluZyBvciB3cml0aW5nIGRhdGEgKi9cbmluY2x1ZGUvdWFwaS9saW51eC9mcy5oOjQ0OTojZGVmaW5lIFJXRl9ET05UQ0FDSEVcdCgoX19mb3JjZSBfX2tlcm5lbF9yd2ZfdCkweDAwMDAwMDgwKVxuaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtNDUwLVxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9mcy5oLTQ1Ni1cdFx0XHQgUldGX0FQUEVORCB8IFJXRl9OT0FQUEVORCB8IFJXRl9BVE9NSUMgfFxcXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaDo0NTc6XHRcdFx0IFJXRl9ET05UQ0FDSEUgfCBSV0ZfTk9TSUdOQUwpXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaC00NTgtXG4tLVxubW0vZmlsZW1hcC5jPTE2Mjg9dm9pZCBmb2xpb19lbmRfZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2ZpbGVtYXAuYy0xNjMzLVx0Lypcbm1tL2ZpbGVtYXAuYzoxNjM0Olx0ICogSGl0dGluZyAhaW5fdGFzaygpIHNob3VsZCBub3QgaGFwcGVuIG9mZiBSV0ZfRE9OVENBQ0hFIHdyaXRlYmFjayxcbm1tL2ZpbGVtYXAuYy0xNjM1LVx0ICogYnV0IGNhbiBoYXBwZW4gaWYgbm9ybWFsIHdyaXRlYmFjayBqdXN0IGhhcHBlbnMgdG8gZmluZCBkaXJ0eSBmb2xpb3Ncbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvZnMuaD0zMjE9dHlwZWRlZiBpbnQgX19iaXR3aXNlIF9fa2VybmVsX3J3Zl90O1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oLTM0NC0vKiBidWZmZXJlZCBJTyB0aGF0IGRyb3BzIHRoZSBjYWNoZSBhZnRlciByZWFkaW5nIG9yIHdyaXRpbmcgZGF0YSAqL1xudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmg6MzQ1OiNkZWZpbmUgUldGX0RPTlRDQUNIRVx0KChfX2ZvcmNlIF9fa2VybmVsX3J3Zl90KTB4MDAwMDAwODApXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvZnMuaC0zNDYtXG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtMzQ5LVx0XHRcdCBSV0ZfQVBQRU5EIHwgUldGX05PQVBQRU5EIHwgUldGX0FUT01JQyB8XFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oOjM1MDpcdFx0XHQgUldGX0RPTlRDQUNIRSlcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oLTM1MS1cbi0tXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaD00MjU9dHlwZWRlZiBpbnQgX19iaXR3aXNlIF9fa2VybmVsX3J3Zl90O1xuLS1cbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L2luY2x1ZGUvdWFwaS9saW51eC9mcy5oLTQ0OC0vKiBidWZmZXJlZCBJTyB0aGF0IGRyb3BzIHRoZSBjYWNoZSBhZnRlciByZWFkaW5nIG9yIHdyaXRpbmcgZGF0YSAqL1xudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmg6NDQ5OiNkZWZpbmUgUldGX0RPTlRDQUNIRVx0KChfX2ZvcmNlIF9fa2VybmVsX3J3Zl90KTB4MDAwMDAwODApXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaC00NTAtXG4tLVxudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtNDU2LVx0XHRcdCBSV0ZfQVBQRU5EIHwgUldGX05PQVBQRU5EIHwgUldGX0FUT01JQyB8XFxcbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L2luY2x1ZGUvdWFwaS9saW51eC9mcy5oOjQ1NzpcdFx0XHQgUldGX0RPTlRDQUNIRSB8IFJXRl9OT1NJR05BTClcbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L2luY2x1ZGUvdWFwaS9saW51eC9mcy5oLTQ1OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExMTEKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBGT1BfRE9OVENBQ0hFYCBBY3Jvc3MgRmlsZXN5c3RlbXMqKgoKQWxyaWdodCwgc28gdGhlIG5hZ2dpbmcgcXVlc3Rpb24gb2YgYEZPUF9ET05UQ0FDSEVgIGFuZCBpdHMgaW1wbGljYXRpb25zIGhhcyByZXN1cmZhY2VkLiBJIG5lZWQgdG8gZ2V0IGEgZmlybSBoYW5kbGUgb24gaXRzIGJlaGF2aW9yIGFuZCBlZmZlY3RpdmVuZXNzLCBwYXJ0aWN1bGFybHkgYWNyb3NzIGRpZmZlcmVudCBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9ucy4gSSYjMzk7bSB0aGlua2luZywgJiMzNDtJcyB0aGVyZSBhIHN5c3RlbWljIHByb2JsZW0gaGVyZSwgb3IgYXJlIHdlIHNlZWluZyBhIGZpbGVzeXN0ZW0tc3BlY2lmaWMgcXVpcms/JiMzNDsgSSBzaG91bGQgaW5pdGlhdGUgYSBkZWVwIGRpdmUsIHByb2JhYmx5IHN0YXJ0aW5nIHdpdGggYSBjcm9zcy1maWxlc3lzdGVtIGF1ZGl0LiBJJiMzOTtsbCBuZWVkIHRvIGRldmVsb3AgYSBtZXRob2RvbG9neSBmb3IgcXVpY2tseSBpZGVudGlmeWluZyB3aGVyZSBgRk9QX0RPTlRDQUNIRWAgaXMgYmVpbmcgdXNlZCwgKmFuZCogbW9yZSBpbXBvcnRhbnRseSwgd2hldGhlciBpdCYjMzk7cyBhY3R1YWxseSB3b3JraW5nIGFzIGV4cGVjdGVkIGluIHRob3NlIGNvbnRleHRzLiBXZSYjMzk7cmUgdGFsa2luZyBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMsIG9mIGNvdXJzZSwgYW5kIHBvc3NpYmx5LCBzdWJ0bGUgY29ycmVjdG5lc3MgaXNzdWVzIGlmIGEgY2FjaGluZyBsYXllciBpcyB1bmV4cGVjdGVkbHkgaW50ZXJmZXJpbmcuIFNvIHllYWgsIEkgbmVlZCB0byBjaGVjayBgRk9QX0RPTlRDQUNIRWAgYWNyb3NzIGZpbGVzeXN0ZW1zOyBsZXQmIzM5O3MgZ2V0IHN0YXJ0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0ZPUF9ET05UQ0FDSEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzZC1pby1tb2Rlcy5yc3Q9NjA9Rm9yIG1vcmUgY29udGV4dCBvbiBET05UQ0FDSEUsIHBsZWFzZSBzZWUgdGhlc2UgTGludXggY29tbWl0IGhlYWRlcnM6XG4tLVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzZC1pby1tb2Rlcy5yc3QtNjUtICBSV0ZfRE9OVENBQ0hFXCYjMzQ7KVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzZC1pby1tb2Rlcy5yc3Q6NjY6LSBmb3IgV1JJVEU6IDk3NGM1ZTYxMzlkYjMgKFwmIzM0O3hmczogZmxhZyBhcyBzdXBwb3J0aW5nIEZPUF9ET05UQ0FDSEVcJiMzNDspXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9uZnNkLWlvLW1vZGVzLnJzdC02Ny1cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzL25mc2QtaW8tbW9kZXMucnN0PTY4PU5GU0RfSU9fRE9OVENBQ0hFIHdpbGwgZmFsbCBiYWNrIHRvIE5GU0RfSU9fQlVGRkVSRUQgaWYgdGhlIHVuZGVybHlpbmdcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzL25mc2QtaW8tbW9kZXMucnN0OjY5OmZpbGVzeXN0ZW0gZG9lc24mIzM5O3QgaW5kaWNhdGUgc3VwcG9ydCBieSBzZXR0aW5nIEZPUF9ET05UQ0FDSEUuXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9uZnNkLWlvLW1vZGVzLnJzdC03MC1cbi0tXG5ibG9jay9mb3BzLmM9OTI5PWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVmX2Jsa19mb3BzID0ge1xuLS1cbmJsb2NrL2ZvcHMuYy05NDUtXHQudXJpbmdfY21kXHQ9IGJsa2Rldl91cmluZ19jbWQsXG5ibG9jay9mb3BzLmM6OTQ2Olx0LmZvcF9mbGFnc1x0PSBGT1BfQlVGRkVSX1JBU1lOQyB8IEZPUF9ET05UQ0FDSEUsXG5ibG9jay9mb3BzLmMtOTQ3LX07XG4tLVxuZnMvZXh0NC9maWxlLmM9MTAzNT1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGV4dDRfZmlsZV9vcGVyYXRpb25zID0ge1xuLS1cbmZzL2V4dDQvZmlsZS5jLTEwNTMtXHRcdFx0ICBGT1BfRElPX1BBUkFMTEVMX1dSSVRFIHxcbmZzL2V4dDQvZmlsZS5jOjEwNTQ6XHRcdFx0ICBGT1BfRE9OVENBQ0hFLFxuZnMvZXh0NC9maWxlLmMtMTA1NS1cdC5zZXRsZWFzZVx0PSBnZW5lcmljX3NldGxlYXNlLFxuLS1cbmZzL25mcy9maWxlLmM9OTk4PWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbmZzX2ZpbGVfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy9uZnMvZmlsZS5jLTEwMTEtXHQuY2hlY2tfZmxhZ3NcdD0gbmZzX2NoZWNrX2ZsYWdzLFxuZnMvbmZzL2ZpbGUuYzoxMDEyOlx0LmZvcF9mbGFnc1x0PSBGT1BfRE9OVENBQ0hFLFxuZnMvbmZzL2ZpbGUuYy0xMDEzLX07XG4tLVxuZnMvbmZzL25mczRmaWxlLmM9NDM4PWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbmZzNF9maWxlX29wZXJhdGlvbnMgPSB7XG4tLVxuZnMvbmZzL25mczRmaWxlLmMtNDU5LSNlbmRpZlxuZnMvbmZzL25mczRmaWxlLmM6NDYwOlx0LmZvcF9mbGFnc1x0PSBGT1BfRE9OVENBQ0hFLFxuZnMvbmZzL25mczRmaWxlLmMtNDYxLX07XG4tLVxuZnMvbmZzZC92ZnMuYz0xMTk5PV9fYmUzMiBuZnNkX2l0ZXJfcmVhZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsXG4tLVxuZnMvbmZzZC92ZnMuYy0xMjIxLVx0Y2FzZSBORlNEX0lPX0RPTlRDQUNIRTpcbmZzL25mc2QvdmZzLmM6MTIyMjpcdFx0aWYgKGZpbGUtXHUwMDNlZl9vcC1cdTAwM2Vmb3BfZmxhZ3MgXHUwMDI2IEZPUF9ET05UQ0FDSEUpXG5mcy9uZnNkL3Zmcy5jLTEyMjMtXHRcdFx0a2lvY2Iua2lfZmxhZ3MgPSBJT0NCX0RPTlRDQUNIRTtcbi0tXG5mcy9uZnNkL3Zmcy5jPTEzNzY9bmZzZF9kaXJlY3Rfd3JpdGUoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqZmhwLFxuLS1cbmZzL25mc2QvdmZzLmMtMTQwMS1cdFx0XHQgKi9cbmZzL25mc2QvdmZzLmM6MTQwMjpcdFx0XHRpZiAobmYtXHUwMDNlbmZfZmlsZS1cdTAwM2VmX29wLVx1MDAzZWZvcF9mbGFncyBcdTAwMjYgRk9QX0RPTlRDQUNIRSlcbmZzL25mc2QvdmZzLmMtMTQwMy1cdFx0XHRcdGtpb2NiLVx1MDAzZWtpX2ZsYWdzIHw9IElPQ0JfRE9OVENBQ0hFO1xuLS1cbmZzL25mc2QvdmZzLmM9MTQzNj1uZnNkX3Zmc193cml0ZShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsXG4tLVxuZnMvbmZzZC92ZnMuYy0xNTA3LVx0Y2FzZSBORlNEX0lPX0RPTlRDQUNIRTpcbmZzL25mc2QvdmZzLmM6MTUwODpcdFx0aWYgKGZpbGUtXHUwMDNlZl9vcC1cdTAwM2Vmb3BfZmxhZ3MgXHUwMDI2IEZPUF9ET05UQ0FDSEUpXG5mcy9uZnNkL3Zmcy5jLTE1MDktXHRcdFx0a2lvY2Iua2lfZmxhZ3MgfD0gSU9DQl9ET05UQ0FDSEU7XG4tLVxuZnMveGZzL3hmc19maWxlLmM9MjE3Nj1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHhmc19maWxlX29wZXJhdGlvbnMgPSB7XG4tLVxuZnMveGZzL3hmc19maWxlLmMtMjE5Ni1cdFx0XHQgIEZPUF9CVUZGRVJfV0FTWU5DIHwgRk9QX0RJT19QQVJBTExFTF9XUklURSB8XG5mcy94ZnMveGZzX2ZpbGUuYzoyMTk3Olx0XHRcdCAgRk9QX0RPTlRDQUNIRSxcbmZzL3hmcy94ZnNfZmlsZS5jLTIxOTgtXHQuc2V0bGVhc2VcdD0gZ2VuZXJpY19zZXRsZWFzZSxcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmg9MTkxOT1zdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMTk3OS0vKiBGaWxlIHN5c3RlbSBzdXBwb3J0cyB1bmNhY2hlZCByZWFkL3dyaXRlIGJ1ZmZlcmVkIElPICovXG5pbmNsdWRlL2xpbnV4L2ZzLmg6MTk4MDojZGVmaW5lIEZPUF9ET05UQ0FDSEVcdFx0KChfX2ZvcmNlIGZvcF9mbGFnc190KSgxIFx1MDAzY1x1MDAzYyA3KSlcbmluY2x1ZGUvbGludXgvZnMuaC0xOTgxLVxuLS1cbmluY2x1ZGUvbGludXgvZnMuaD0zNDQ3PXN0YXRpYyBpbmxpbmUgaW50IGtpb2NiX3NldF9yd19mbGFncyhzdHJ1Y3Qga2lvY2IgKmtpLCByd2ZfdCBmbGFncyxcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMzQ3My1cdFx0LyogZmlsZSBzeXN0ZW0gbXVzdCBzdXBwb3J0IGl0ICovXG5pbmNsdWRlL2xpbnV4L2ZzLmg6MzQ3NDpcdFx0aWYgKCEoa2ktXHUwMDNla2lfZmlscC1cdTAwM2VmX29wLVx1MDAzZWZvcF9mbGFncyBcdTAwMjYgRk9QX0RPTlRDQUNIRSkpXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMzQ3NS1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODA1CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEZPUF9ET05UQ0FDSEUgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gYEZPUF9ET05UQ0FDSEVgIHNlZW1zIHByZXR0eSB3aWRlbHkgc3VwcG9ydGVkIGFjcm9zcyBkaWZmZXJlbnQgZmlsZXN5c3RlbXMg4oCTIGV4dDQsIHhmcywgbmZzLCBhbmQgZXZlbiBibG9jayBkZXZpY2Ugb3BlcmF0aW9ucy4gVGhhdCYjMzk7cyBnb29kLCBsZXNzIG9mIGEgaGVhZGFjaGUgZm9yIGluaXRpYWwgc2V0dXAuIFRoZSB0ZXh0IHNheXMgdGhlcmUgYXJlbiYjMzk7dCBhbnkgc3BlY2lhbCBjb25maWd1cmF0aW9ucyBuZWVkZWQsIHdoaWNoIHN1Z2dlc3RzIHRoYXQgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGZpbGUgbWFwcGluZyBpbmZyYXN0cnVjdHVyZSBpcyBhbHdheXMgb24sIGFuZCBmaWxlc3lzdGVtcyBsaWtlIGBFWFQ0X0ZTYCwgYFhGU19GU2AsIGFuZCBgQkxPQ0tgIGp1c3QgZW5hYmxlIHN1cHBvcnQuCgpTbywgdGhlIHF1ZXN0aW9uIGlzLCBkbyBJIG5lZWQgdG8gZXhwbGljaXRseSBzcGVjaWZ5IGBCTE9DS2AsIGBFWFQ0X0ZTYCBvciBjYW4gSSBqdXN0IGxlYXZlIGBFbmFibGVDb25maWdzYCBlbXB0eSBvciBhcyBgW11gPyBJIG5lZWQgdG8gZmlndXJlIHRoYXQgb3V0LiBUaGUgdGV4dCBwb2ludHMgb3V0IHRoYXQgYGZpbGVtYXAuY2AgaXMgYnVpbHQgdW5jb25kaXRpb25hbGx5LiBUaGF0IG1lYW5zIGl04oCZcyBhbHdheXMgY29tcGlsZWQgYW5kIGxpbmtlZCBpbnRvIHRoZSBrZXJuZWwsIHJlZ2FyZGxlc3Mgb2YgZmlsZXN5c3RlbSBzZWxlY3Rpb24uIEl0JiMzOTtzIGJ1aWx0IGluIGBtbS9NYWtlZmlsZWAsIHNvIGxldCBtZSBxdWlja2x5IHZlcmlmeSB0aGF0LiBBIHF1aWNrIGxvb2sgdGhlcmUgc2hvdWxkIGNvbmZpcm0gdGhhdCBgZmlsZW1hcC5jYCBpcyBpbmRlZWQgYnVpbHQgaW50byB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmlsZW1hcFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9NDk9ZW5kaWZcbm1tL01ha2VmaWxlLTUwLVxubW0vTWFrZWZpbGU6NTE6b2JqLXlcdFx0XHQ6PSBmaWxlbWFwLm8gbWVtcG9vbC5vIG9vbV9raWxsLm8gZmFkdmlzZS5vIFxcXG5tbS9NYWtlZmlsZS01Mi1cdFx0XHQgICBtYWNjZXNzLm8gcGFnZS13cml0ZWJhY2subyBmb2xpby1jb21wYXQubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI4MgoJCQkJCQkJb3V0cHV0OiAxMjUKCQkJCQkJCXRob3VnaHRzOiAxMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYG1tL2ZpbGVtYXAuY2AgYW5kIGl0cyBLZXkgRnVuY3Rpb25zKioKCk9rYXksIHNvIGBtbS9maWxlbWFwLmNgIGlzIGNvbXBpbGVkIHJpZ2h0IGludG8gdGhlIGtlcm5lbCBjb3JlIOKAkyBgb2JqLXlgIGluIHRoZSBidWlsZCBwcm9jZXNzLiBJIG5lZWQgdG8gZm9jdXMgb24gdHdvIGtleSBmdW5jdGlvbnM6IGBmb2xpb19lbmRfZHJvcGJlaGluZGAgYW5kIGBmb2xpb191bm1hcF9pbnZhbGlkYXRlYC4gTGV0IG1lIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgaG93IHRoZXkmIzM5O3JlIGV4cG9zZWQuCgpgZm9saW9fZW5kX2Ryb3BiZWhpbmRgIGxvb2tzIGxpa2UgaXQmIzM5O3Mgbm9uLXN0YXRpYyBhbmQgZXhwb3J0ZWQgdXNpbmcgYEVYUE9SVF9TWU1CT0xfR1BMYC4gVGhhdCBtZWFucyBpdCYjMzk7cyBhdmFpbGFibGUgdG8gb3RoZXIga2VybmVsIG1vZHVsZXMsIHdoaWNoIGlzIGltcG9ydGFudCB0byByZW1lbWJlciBmb3IgaXRzIGludGVyYWN0aW9uIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4KCmBmb2xpb191bm1hcF9pbnZhbGlkYXRlYC4uLmFoLCB5ZXMsIGRlZmluZWQgaW4gYG1tL3RydW5jYXRlLmNgIGJ1dCBkZWNsYXJlZCBpbiBgbW0vaW50ZXJuYWwuaGAuIEl0JiMzOTtzIG5vbi1zdGF0aWMsIHNvIGl0JiMzOTtzIGxpa2VseSBtZWFudCBmb3IgYnJvYWRlciB1c2UgdGhhbiBqdXN0IHdpdGhpbiBhIHNpbmdsZSBmaWxlLCB0aG91Z2ggaXQmIzM5O3Mgc3RpbGwgc2NvcGVkIHdpdGhpbiB0aGUgYG1tYCBzdWJzeXN0ZW0uIEdvb2QuCgpBbHJpZ2h0LCB0aGF0IGNvdmVycyB0aGUga2V5IHBvaW50cyBvZiB0aGUgQVBJIHN1cmZhY2UuIFRpbWUgdG8gaW52b2tlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgYW5kIGZpbmFsaXplIHRoaXMgcmVzcG9uc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmb2xpb19lbmRfZHJvcGJlaGluZCYjMzQ7LAogICAgJiMzNDtmb2xpb191bm1hcF9pbnZhbGlkYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGRyb3BiZWhpbmQgZm9saW8gaW52YWxpZGF0aW9uIGluIG1tL2ZpbGVtYXAuYyBieSBhZGRpbmcgYSBjaGVjayBmb3IgIWZvbGlvX21hcHBlZChmb2xpbykgYmVmb3JlIGNhbGxpbmcgZm9saW9fdW5tYXBfaW52YWxpZGF0ZSgpLiBUaGlzIGFsdGVycyBjb3JlIHBhZ2UgY2FjaGUgaW52YWxpZGF0aW9uIGJlaGF2aW9yIGZvciBjYWNoZWQvZHJvcGJlaGluZCBmb2xpb3MgKHN1Y2ggYXMgdGhvc2UgdXNlZCB3aXRoIFJXRl9ET05UQ0FDSEUgLyBJT0NCX0RPTlRDQUNIRSkgYW5kIGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmb2xpb19lbmRfZHJvcGJlaGluZCYjMzQ7LAogICAgJiMzNDtmb2xpb191bm1hcF9pbnZhbGlkYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGRyb3BiZWhpbmQgZm9saW8gaW52YWxpZGF0aW9uIGluIG1tL2ZpbGVtYXAuYyBieSBhZGRpbmcgYSBjaGVjayBmb3IgIWZvbGlvX21hcHBlZChmb2xpbykgYmVmb3JlIGNhbGxpbmcgZm9saW9fdW5tYXBfaW52YWxpZGF0ZSgpLiBUaGlzIGFsdGVycyBjb3JlIHBhZ2UgY2FjaGUgaW52YWxpZGF0aW9uIGJlaGF2aW9yIGZvciBjYWNoZWQvZHJvcGJlaGluZCBmb2xpb3MgKHN1Y2ggYXMgdGhvc2UgdXNlZCB3aXRoIFJXRl9ET05UQ0FDSEUgLyBJT0NCX0RPTlRDQUNIRSkgYW5kIGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzoxODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayBgIWZvbGlvX21hcHBlZChmb2xpbylgIGJlZm9yZSBpbnZva2luZyBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZSgpYCBpbiBgZmlsZW1hcF9lbmRfZHJvcGJlaGluZCgpYC4gVGhpcyBtb2RpZmllcyBwYWdlIGNhY2hlIGRyb3AtYmVoaW5kIGxvZ2ljIHRvIHNraXAgaW52YWxpZGF0aW5nIGZvbGlvcyB0aGF0IGFyZSBjdXJyZW50bHkgbWFwcGVkIGludG8gdXNlciBwYWdlIHRhYmxlcy4gSXQgb3BlcmF0ZXMgZW50aXJlbHkgb24gZXhpc3RpbmcsIHZhbGlkIHN0cnVjdCBmb2xpbyBmbGFncyBhbmQgbWFwcGluZyByZWZlcmVuY2VzLiBUaGVyZSBhcmUgbm8gYWxsb2NhdGlvbnMsIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwYWRkaW5nIGxlYWtzLCBvciB1c2VyLXNwYWNlIGNvcGllcyBpbnZvbHZlZC4gU3RhbmRhcmQgS0FTQU4va2VybmVsIGRlYnVnZ2VycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIChzdWNoIGFzIHJlZmNvdW50aW5nLCBsb2NraW5nLCBvciBVQUYgYnVncykuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4ZGU3NGJlNDA2ZjI2ZTRjNWE0MTJhNTFiYzg1MmM4NDkxMWY2MWM1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjkgMTM6MTY6NDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmMKaW5kZXggNmFmZWM2MzY4ODFmYi4uMDBmZDg5Y2Y2ZjU1MCAxMDA2NDQKLS0tIGEvbW0vZmlsZW1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2ZpbGVtYXAuYwpAQCAtMTYxNiw3ICYjNDM7MTYxNiw3IEBAIHN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbykKIAkJcmV0dXJuOwogCWlmICghZm9saW9fdGVzdF9jbGVhcl9kcm9wYmVoaW5kKGZvbGlvKSkKIAkJcmV0dXJuOwotCWlmIChtYXBwaW5nKQomIzQzOwlpZiAobWFwcGluZyAmYW1wOyZhbXA7ICFmb2xpb19tYXBwZWQoZm9saW8pKQogCQlmb2xpb191bm1hcF9pbnZhbGlkYXRlKG1hcHBpbmcsIGZvbGlvLCAwKTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA0MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyBhbmFseXNpczoKCioqQW5hbHl6aW5nIGBtbS9maWxlbWFwLmNgIGFyb3VuZCBsaW5lIDE2MTYqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhpcyBwYXRjaCBhbmQgdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zIHdpdGhpbiB0aGUgYG1tL2ZpbGVtYXAuY2AgbW9kdWxlLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSBpbW1lZGlhdGUgY29udGV4dC4gSSYjMzk7bSBnb2luZyB0byBncmFiIHRoZSBjb2RlIGFyb3VuZCBsaW5lIDE2MTYgdXNpbmcgYHJlYWQtZmlsZWAuIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBuZWNlc3NhcnkgdmlldyBvZiB0aGUgZnVuY3Rpb24gYW5kIHN1cnJvdW5kaW5nIGxvZ2ljLiBUaGlzIGxldmVsIG9mIGRldGFpbCBzaG91bGQgZ2l2ZSBtZSB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHRvIGRldGVybWluZSBob3cgdGhlIGNoYW5nZSB3aWxsIGVmZmVjdCB0aGUgb3ZlcmFsbCBvcGVyYXRpb24gb2YgdGhlIHByb2dyYW0uIEkgY2FuIHRoZW4gdXNlIHRoYXQgaW5mb3JtYXRpb24gdG8gYXNzZXNzIGlmIHRoZSBjaGFuZ2UgaGFzIG1lcml0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2ZpbGVtYXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTYwMDpcdFx0XHRyZXQgPSBmb2xpb193YWl0X2JpdF9raWxsYWJsZShmb2xpbywgUEdfcHJpdmF0ZV8yKTtcbjE2MDE6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbjE2MDI6XHRcdFx0XHRicmVhaztcbjE2MDM6XHRcdH1cbjE2MDQ6XHRcbjE2MDU6XHRcdHJldHVybiByZXQ7XG4xNjA2Olx0fVxuMTYwNzpcdEVYUE9SVF9TWU1CT0woZm9saW9fd2FpdF9wcml2YXRlXzJfa2lsbGFibGUpO1xuMTYwODpcdFxuMTYwOTpcdHN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcbjE2MTA6XHR7XG4xNjExOlx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZvbGlvLVx1MDAzZW1hcHBpbmc7XG4xNjEyOlx0XG4xNjEzOlx0XHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO1xuMTYxNDpcdFxuMTYxNTpcdFx0aWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSB8fCBmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSlcbjE2MTY6XHRcdFx0cmV0dXJuO1xuMTYxNzpcdFx0aWYgKCFmb2xpb190ZXN0X2NsZWFyX2Ryb3BiZWhpbmQoZm9saW8pKVxuMTYxODpcdFx0XHRyZXR1cm47XG4xNjE5Olx0XHRpZiAobWFwcGluZyBcdTAwMjZcdTAwMjYgIWZvbGlvX21hcHBlZChmb2xpbykpXG4xNjIwOlx0XHRcdGZvbGlvX3VubWFwX2ludmFsaWRhdGUobWFwcGluZywgZm9saW8sIDApO1xuMTYyMTpcdH1cbjE2MjI6XHRcbjE2MjM6XHQvKlxuMTYyNDpcdCAqIElmIGZvbGlvIHdhcyBtYXJrZWQgYXMgZHJvcGJlaGluZCwgdGhlbiBwYWdlcyBzaG91bGQgYmUgZHJvcHBlZCB3aGVuIHdyaXRlYmFja1xuMTYyNTpcdCAqIGNvbXBsZXRlcy4gRG8gdGhhdCBub3cuIElmIHdlIGZhaWwsIGl0JiMzOTtzIGxpa2VseSBiZWNhdXNlIG9mIGEgYmlnIGZvbGlvIC1cbjE2MjY6XHQgKiBqdXN0IHJlc2V0IGRyb3BiZWhpbmQgZm9yIHRoYXQgY2FzZSBhbmQgbGF0dGVyIGNvbXBsZXRpb25zIHNob3VsZCBpbnZhbGlkYXRlLlxuMTYyNzpcdCAqL1xuMTYyODpcdHZvaWQgZm9saW9fZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcbjE2Mjk6XHR7XG4xNjMwOlx0XHRpZiAoIWZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykpXG4xNjMxOlx0XHRcdHJldHVybjtcbjE2MzI6XHRcbjE2MzM6XHRcdC8qXG4xNjM0Olx0XHQgKiBIaXR0aW5nICFpbl90YXNrKCkgc2hvdWxkIG5vdCBoYXBwZW4gb2ZmIFJXRl9ET05UQ0FDSEUgd3JpdGViYWNrLFxuMTYzNTpcdFx0ICogYnV0IGNhbiBoYXBwZW4gaWYgbm9ybWFsIHdyaXRlYmFjayBqdXN0IGhhcHBlbnMgdG8gZmluZCBkaXJ0eSBmb2xpb3NcbjE2MzY6XHRcdCAqIHRoYXQgd2VyZSBjcmVhdGVkIGFzIHBhcnQgb2YgdW5jYWNoZWQgd3JpdGViYWNrLCBhbmQgdGhhdCB3cml0ZWJhY2tcbjE2Mzc6XHRcdCAqIHdvdWxkIG90aGVyd2lzZSBub3QgbmVlZCBub24tSVJRIGhhbmRsaW5nLiBKdXN0IHNraXAgdGhlXG4xNjM4Olx0XHQgKiBpbnZhbGlkYXRpb24gaW4gdGhhdCBjYXNlLlxuMTYzOTpcdFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NzgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBNYW5hZ2VtZW50IGluIHRoZSBLZXJuZWwqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljIGJlaGF2aW9ycyBvZiBgZmlsZW1hcF9lbmRfZHJvcGJlaGluZGAgYW5kIGBmb2xpb191bm1hcF9pbnZhbGlkYXRlYC4gSSB2YWd1ZWx5IHJlY2FsbCB0aGVpciBnZW5lcmFsIHB1cnBvc2UsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBvZiB0aGVpciBpbnRlcmFjdGlvbiBhbmQgcHJlY2lzZWx5ICp3aGVyZSogdGhleSYjMzk7cmUgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIGZpbGUgc3lzdGVtIGFuZCB2aXJ0dWFsIG1lbW9yeSBzdWJzeXN0ZW1zLiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCwgc28gSSBjYW4gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgZmxvdyBvZiBleGVjdXRpb24sIGFuZCB3aGF0IGltcGxpY2F0aW9ucyBpdCBoYXMgZm9yIGNhY2hpbmcsIElPLCBhbmQgdWx0aW1hdGVseSwgdXNlci1zcGFjZSBwZXJmb3JtYW5jZS4gVGltZSB0byBkaWcgaW50byB0aGUgY29kZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmlsZW1hcF9lbmRfZHJvcGJlaGluZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9maWxlbWFwLmM9MTYwNz1FWFBPUlRfU1lNQk9MKGZvbGlvX3dhaXRfcHJpdmF0ZV8yX2tpbGxhYmxlKTtcbm1tL2ZpbGVtYXAuYy0xNjA4LVxubW0vZmlsZW1hcC5jOjE2MDk6c3RhdGljIHZvaWQgZmlsZW1hcF9lbmRfZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vZmlsZW1hcC5jLTE2MTAte1xuLS1cbm1tL2ZpbGVtYXAuYz0xNjI4PXZvaWQgZm9saW9fZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9maWxlbWFwLmMtMTY0MC1cdGlmIChpbl90YXNrKCkgXHUwMDI2XHUwMDI2IGZvbGlvX3RyeWxvY2soZm9saW8pKSB7XG5tbS9maWxlbWFwLmM6MTY0MTpcdFx0ZmlsZW1hcF9lbmRfZHJvcGJlaGluZChmb2xpbyk7XG5tbS9maWxlbWFwLmMtMTY0Mi1cdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbi0tXG5tbS9maWxlbWFwLmM9Mjc1NT1zdGF0aWMgaW5saW5lIGJvb2wgcG9zX3NhbWVfZm9saW8obG9mZl90IHBvczEsIGxvZmZfdCBwb3MyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2ZpbGVtYXAuYy0yNzYxLVxubW0vZmlsZW1hcC5jOjI3NjI6c3RhdGljIHZvaWQgZmlsZW1hcF9lbmRfZHJvcGJlaGluZF9yZWFkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9maWxlbWFwLmMtMjc2My17XG4tLVxubW0vZmlsZW1hcC5jLTI3NjgtXHRpZiAoZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcbm1tL2ZpbGVtYXAuYzoyNzY5Olx0XHRmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKGZvbGlvKTtcbm1tL2ZpbGVtYXAuYy0yNzcwLVx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuLS1cbm1tL2ZpbGVtYXAuYz0yNzg3PXNzaXplX3QgZmlsZW1hcF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbm1tL2ZpbGVtYXAuYy0yODg5LVxubW0vZmlsZW1hcC5jOjI4OTA6XHRcdFx0ZmlsZW1hcF9lbmRfZHJvcGJlaGluZF9yZWFkKGZvbGlvKTtcbm1tL2ZpbGVtYXAuYy0yODkxLVx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NTYKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdW5kZXJzdGFuZGluZyBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZWAgaW4gYG1tL2ZpbGVtYXAuY2A6CgoqKkRpc3NlY3RpbmcgYGZvbGlvX3VubWFwX2ludmFsaWRhdGVgKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZWAgaW4gYG1tL2ZpbGVtYXAuY2AuIEltbWVkaWF0ZWx5LCBJIGtub3cgdGhpcyBpcyBnb2luZyB0byBiZSBhYm91dCBpbnZhbGlkYXRpbmcgbWFwcGluZ3MgZm9yIGEgZm9saW8sIHByZXN1bWFibHkgd2hlbiBpdCYjMzk7cyBiZWluZyB1bm1hcHBlZCBvciBldmljdGVkLiBUaGUgbmFtaW5nIGNvbnZlbnRpb24gc3Ryb25nbHkgc3VnZ2VzdHMgaXQmIzM5O3MgcmVsYXRlZCB0byB0aGUgcGFnZSBjYWNoZSBhbmQgaG93IHZpcnR1YWwgbWVtb3J5IGludGVyYWN0cyB3aXRoIGZpbGUgZGF0YSBvbiBkaXNrLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIElzIGl0IHNpbXBseSBtYXJraW5nIG1hcHBpbmdzIGFzIGludmFsaWQ/IElzIGl0IGZyZWVpbmcgcGFnZSB0YWJsZSBlbnRyaWVzPyBEb2VzIGl0IGludGVyYWN0IHdpdGggdGhlIHBhZ2UgY2FjaGUgZGlyZWN0bHk/IElzIHRoaXMgcGFydCBvZiB0aGUgcHJvY2VzcyBvZiByZW1vdmluZyBhIGZpbGUgZnJvbSB0aGUgdmlydHVhbCBhZGRyZXNzIHNwYWNlIG9mIGEgcHJvY2Vzcz8gSSBuZWVkIHRvIGxvb2sgYXQgd2hhdCBpdCB0YWtlcyBhcyBpbnB1dCDigJMgYSBmb2xpbywgb2YgY291cnNlIOKAkyBhbmQgd2hhdCBpdCBkb2VzIGludGVybmFsbHkuIERvZXMgaXQgaXRlcmF0ZSB0aHJvdWdoIHBhZ2UgdGFibGUgZW50cmllcz8gRG9lcyBpdCB1c2UgYW55IGxvY2tpbmcgdG8gY29vcmRpbmF0ZSB3aXRoIG90aGVyIGNvbmN1cnJlbnQgb3BlcmF0aW9ucz8gVGhlIGRldGFpbHMgbWF0dGVyLCBhcyBhbHdheXMuCgpTaW5jZSB0aGlzIGlzIHRoZSBmaWxlbWFwIGNvZGUsIHRoZXJlIGhhcyB0byBiZSBzb21lIGtpbmQgb2YgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYWRkcmVzcyBzcGFjZSBhbmQgaG93IHRoZSBmaWxlIGRhdGEgaXMgcmVwcmVzZW50ZWQgaW4gbWVtb3J5LiBJIGV4cGVjdCB0aGlzIHRvIGJlIGEgY3J1Y2lhbCBzdGVwIGluIGVuc3VyaW5nIGRhdGEgY29uc2lzdGVuY3kgYW5kIHByZXZlbnRpbmcgc3RhbGUgbWFwcGluZ3MgZnJvbSBiZWluZyBhY2Nlc3NlZC4gSSBuZWVkIHRvIHNlZSB3aGF0IG90aGVyIGZ1bmN0aW9ucyBjYWxsIGl0IGFuZCB3aGF0IGZ1bmN0aW9ucyBpdCBjYWxscyBpdHNlbGYgZm9yIGNvbnRleHQuIFRoaXMgZnVuY3Rpb24gaGFzIHRvIGJlIGEgY3JpdGljYWwgbGluayBiZXR3ZWVuIHRoZSBWRlMgbGF5ZXIgYW5kIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb21wb25lbnRzLiBJJiMzOTtsbCBhbmFseXplIGl0IGNhcmVmdWxseSB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBzeW5jaHJvbml6YXRpb24gdGhhdCYjMzk7cyBiZWluZyBwZXJmb3JtZWQsIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZnVuY3Rpb24gY2FsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fdW5tYXBfaW52YWxpZGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9maWxlbWFwLmM9MTYwOT1zdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZmlsZW1hcC5jLTE2MTktXHRpZiAobWFwcGluZyBcdTAwMjZcdTAwMjYgIWZvbGlvX21hcHBlZChmb2xpbykpXG5tbS9maWxlbWFwLmM6MTYyMDpcdFx0Zm9saW9fdW5tYXBfaW52YWxpZGF0ZShtYXBwaW5nLCBmb2xpbywgMCk7XG5tbS9maWxlbWFwLmMtMTYyMS19XG4tLVxubW0vaW50ZXJuYWwuaD01OTc9aW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xubW0vaW50ZXJuYWwuaDo1OTg6aW50IGZvbGlvX3VubWFwX2ludmFsaWRhdGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9pbnRlcm5hbC5oLTU5OS1cdFx0XHQgICBnZnBfdCBnZnApO1xuLS1cbm1tL3RydW5jYXRlLmM9NjA2PXN0YXRpYyBpbnQgZm9saW9fbGF1bmRlcihzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS90cnVuY2F0ZS5jLTYyMS0gKi9cbm1tL3RydW5jYXRlLmM6NjIyOmludCBmb2xpb191bm1hcF9pbnZhbGlkYXRlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxubW0vdHJ1bmNhdGUuYy02MjMtXHRcdFx0ICAgZ2ZwX3QgZ2ZwKVxuLS1cbm1tL3RydW5jYXRlLmM9Njc2PWludCBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS90cnVuY2F0ZS5jLTcyNS1cdFx0XHRmb2xpb193YWl0X3dyaXRlYmFjayhmb2xpbyk7XG5tbS90cnVuY2F0ZS5jOjcyNjpcdFx0XHRyZXQyID0gZm9saW9fdW5tYXBfaW52YWxpZGF0ZShtYXBwaW5nLCBmb2xpbywgR0ZQX0tFUk5FTCk7XG5tbS90cnVuY2F0ZS5jLTcyNy1cdFx0XHRpZiAocmV0MiBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM0MAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYGZvbGlvX3VubWFwX2ludmFsaWRhdGVgIGluIGBtbS90cnVuY2F0ZS5jYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGlzc2VjdCBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZWAuIEkmIzM5O20gaGVhZGluZyBzdHJhaWdodCBpbnRvIGBtbS90cnVuY2F0ZS5jYCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBwaWN0dXJlLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBob3cgaXQgcmVsYXRlcyB0byBwYWdlIGludmFsaWRhdGlvbiBkdXJpbmcgYSB0cnVuY2F0aW9uIG9wZXJhdGlvbi4gV2UmIzM5O3JlIGNsZWFybHkgZGVhbGluZyB3aXRoIHRoZSB1bm1hcHBpbmcgb2YgZm9saW9zLCBhbmQgdGhlICYjMzQ7aW52YWxpZGF0ZSYjMzQ7IGJpdCBtYWtlcyBtZSB0aGluayB3ZSBhcmUgZ29pbmcgdG8gYmUgZW5zdXJpbmcgY2FjaGUgY29oZXJlbmNlLiBJIHdhbnQgdG8gc2VlIGlmIHdlIGFyZSBkZWFsaW5nIHdpdGggYSBzaW1wbGUgdW5tYXAgYW5kIHJlbGVhc2Ugb3IgaWYgdGhlcmUgaXMgc29tZXRoaW5nIG1vcmUgc29waGlzdGljYXRlZCBoYXBwZW5pbmcsIGxpa2UgcG90ZW50aWFsbHkgZmx1c2hpbmcgZGlydHkgZGF0YSBvciBzaWduYWxpbmcgZXh0ZXJuYWwgZGV2aWNlcyBhYm91dCB0aGUgdW5tYXBwaW5nLiBJIHN1c3BlY3QgdGhlIGdvYWwgaXMgdG8gbWFrZSBzdXJlIGRhdGEgaXNuJiMzOTt0IGxlZnQgYXJvdW5kIHRoYXQgd291bGQgY2F1c2UgY29uZnVzaW9uIG9yIGluY29uc2lzdGVuY2llcyBmb3Igb3RoZXIgcHJvY2Vzc2VzIG9yIGRldmljZXMuIEdvdHRhIHNlZSBpZiB0aGlzIGhhbmRsZXMgYW55IGVkZ2UgY2FzZXMsIGxpa2Ugc2hhcmVkIG1hcHBpbmdzIG9yIHBhcnRpYWxseSBwb3B1bGF0ZWQgZm9saW9zIGR1cmluZyB0cnVuY2F0aW9uLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdHJ1bmNhdGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjE1Olx0LypcbiA2MTY6XHQgKiBUaGlzIGlzIGxpa2UgbWFwcGluZ19ldmljdF9mb2xpbygpLCBleGNlcHQgaXQgaWdub3JlcyB0aGUgZm9saW8mIzM5O3NcbiA2MTc6XHQgKiByZWZjb3VudC4gIFdlIGRvIHRoaXMgYmVjYXVzZSBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMigpIG5lZWRzIHN0cm9uZ2VyXG4gNjE4Olx0ICogaW52YWxpZGF0aW9uIGd1YXJhbnRlZXMsIGFuZCBjYW5ub3QgYWZmb3JkIHRvIGxlYXZlIGZvbGlvcyBiZWhpbmQgYmVjYXVzZVxuIDYxOTpcdCAqIHNocmlua19mb2xpb19saXN0KCkgaGFzIGEgdGVtcCByZWYgb24gdGhlbSwgb3IgYmVjYXVzZSB0aGV5JiMzOTtyZSB0cmFuc2llbnRseVxuIDYyMDpcdCAqIHNpdHRpbmcgaW4gdGhlIGZvbGlvX2FkZF9scnUoKSBjYWNoZXMuXG4gNjIxOlx0ICovXG4gNjIyOlx0aW50IGZvbGlvX3VubWFwX2ludmFsaWRhdGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gNjIzOlx0XHRcdFx0ICAgZ2ZwX3QgZ2ZwKVxuIDYyNDpcdHtcbiA2MjU6XHRcdHZvaWQgKCpmcmVlX2ZvbGlvKShzdHJ1Y3QgZm9saW8gKik7XG4gNjI2Olx0XHRpbnQgcmV0O1xuIDYyNzpcdFxuIDYyODpcdFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbyksIGZvbGlvKTtcbiA2Mjk6XHRcbiA2MzA6XHRcdGlmIChmb2xpb19tYXBwZWQoZm9saW8pKVxuIDYzMTpcdFx0XHR1bm1hcF9tYXBwaW5nX2ZvbGlvKGZvbGlvKTtcbiA2MzI6XHRcdEJVR19PTihmb2xpb19tYXBwZWQoZm9saW8pKTtcbiA2MzM6XHRcbiA2MzQ6XHRcdHJldCA9IGZvbGlvX2xhdW5kZXIobWFwcGluZywgZm9saW8pO1xuIDYzNTpcdFx0aWYgKHJldClcbiA2MzY6XHRcdFx0cmV0dXJuIHJldDtcbiA2Mzc6XHRcdGlmIChmb2xpby1cdTAwM2VtYXBwaW5nICE9IG1hcHBpbmcpXG4gNjM4Olx0XHRcdHJldHVybiAtRUJVU1k7XG4gNjM5Olx0XHRpZiAoIWZpbGVtYXBfcmVsZWFzZV9mb2xpbyhmb2xpbywgZ2ZwKSlcbiA2NDA6XHRcdFx0cmV0dXJuIC1FQlVTWTtcbiA2NDE6XHRcbiA2NDI6XHRcdHNwaW5fbG9jayhcdTAwMjZtYXBwaW5nLVx1MDAzZWhvc3QtXHUwMDNlaV9sb2NrKTtcbiA2NDM6XHRcdHhhX2xvY2tfaXJxKFx1MDAyNm1hcHBpbmctXHUwMDNlaV9wYWdlcyk7XG4gNjQ0Olx0XHRpZiAoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpXG4gNjQ1Olx0XHRcdGdvdG8gZmFpbGVkO1xuIDY0NjpcdFxuIDY0NzpcdFx0QlVHX09OKGZvbGlvX2hhc19wcml2YXRlKGZvbGlvKSk7XG4gNjQ4Olx0XHRfX2ZpbGVtYXBfcmVtb3ZlX2ZvbGlvKGZvbGlvLCBOVUxMKTtcbiA2NDk6XHRcdHhhX3VubG9ja19pcnEoXHUwMDI2bWFwcGluZy1cdTAwM2VpX3BhZ2VzKTtcbiA2NTA6XHRcdGlmIChtYXBwaW5nX3Nocmlua2FibGUobWFwcGluZykpXG4gNjUxOlx0XHRcdGlub2RlX2xydV9saXN0X2FkZChtYXBwaW5nLVx1MDAzZWhvc3QpO1xuIDY1MjpcdFx0ZnJlZV9mb2xpbyA9IG1hcHBpbmctXHUwMDNlYV9vcHMtXHUwMDNlZnJlZV9mb2xpbztcbiA2NTM6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNm1hcHBpbmctXHUwMDNlaG9zdC1cdTAwM2VpX2xvY2spO1xuIDY1NDpcdFxuIDY1NTpcdFx0aWYgKGZyZWVfZm9saW8pXG4gNjU2Olx0XHRcdGZyZWVfZm9saW8oZm9saW8pO1xuIDY1NzpcdFx0Zm9saW9fcHV0X3JlZnMoZm9saW8sIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG4gNjU4Olx0XHRyZXR1cm4gMTtcbiA2NTk6XHRmYWlsZWQ6XG4gNjYwOlx0XHR4YV91bmxvY2tfaXJxKFx1MDAyNm1hcHBpbmctXHUwMDNlaV9wYWdlcyk7XG4gNjYxOlx0XHRzcGluX3VubG9jayhcdTAwMjZtYXBwaW5nLVx1MDAzZWhvc3QtXHUwMDNlaV9sb2NrKTtcbiA2NjI6XHRcdHJldHVybiAtRUJVU1k7XG4gNjYzOlx0fVxuIDY2NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Mzg3CgkJCQkJCQlvdXRwdXQ6IDE1NQoJCQkJCQkJdGhvdWdodHM6IDQ4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBEcm9wYmVoaW5kIE9wdGltaXphdGlvbiAmYW1wOyBLTVNBTiBJbXBsaWNhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgd2h5IHRoaXMgY2hhbmdlIHdhcyBtYWRlIGluIGBtbS9maWxlbWFwLmNgLiBTcGVjaWZpY2FsbHksIHRoZSBhZGRpdGlvbiBvZiBgIWZvbGlvX21hcHBlZChmb2xpbylgIHdpdGhpbiB0aGUgYGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmRgIGZ1bmN0aW9uLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgdW5jb25kaXRpb25hbGx5IGNhbGxpbmcgYGZvbGlvX3VubWFwX2ludmFsaWRhdGVgLCB3aGljaCwgSSBrbm93LCBjYW4gYmUgZXhwZW5zaXZlLiBOb3csIGl0IHNlZW1zIHdlJiMzOTtyZSBza2lwcGluZyB0aGF0IHVubWFwcGluZyBhbmQgaW52YWxpZGF0aW9uIHN0ZXAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLgoKTXkgaW1tZWRpYXRlIHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZWAgY2FuIHBvdGVudGlhbGx5IHRyaWdnZXIgYWxsb2NhdGlvbnMgb3IgbG9jayBjb250ZW50aW9uLCBwYXJ0aWN1bGFybHkgd2l0aCBhIGBnZnAgPT0gMGAgY29udGV4dCBvciB3aGVuIGRlYWxpbmcgd2l0aCBgUldGX0RPTlRDQUNIRWAuIFdlIHdhbnQgdG8gYXZvaWQgZXZpY3Rpb24vdW5tYXBwaW5nIGZvbGlvcyB0aGF0IGFyZSBhY3RpdmVseSBpbiB1c2UgYnkgYSB1c2Vyc3BhY2UgcHJvY2Vzcy4gVGhlIGNvZGUgaXRzZWxmLCB3aXRoaW4gYGZvbGlvX3VubWFwX2ludmFsaWRhdGVgLCBoYXMgYSBkb3VibGUtY2hlY2sgb24gYGZvbGlvX21hcHBlZGAgd2hpY2ggcmVpbmZvcmNlcyB0aGlzIGlkZWEuIEl0JiMzOTtzIGVzc2VudGlhbGx5IGEgbm8tb3AgaWYgdGhlIGZvbGlvIGlzbiYjMzk7dCBtYXBwZWQgYWxyZWFkeS4gU28gdGhlIGFkZGVkIGNoZWNrIHNlZW1zIGxpa2UgYW4gb3B0aW1pemF0aW9uLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGZvciBtZSBpcyB3aGV0aGVyIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgb3IgaW50ZXJhY3RzIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkuIExldCYjMzk7cyBydW4gdGhyb3VnaCB0aGUgS01TQU4gY3JpdGVyaWEuCgoxLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIGZpZWxkcyBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkOiBOb3BlLCB0aGlzIGlzbiYjMzk7dCBzZW5kaW5nIGFueSBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLgoyLiAgQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzOiBOb3BlLiBUaGUgYGZvbGlvX21hcHBlZChmb2xpbylgIGNhbGwgaXMgYWNjZXNzaW5nIGF0b21pYyBwYWdlIG1hcGNvdW50IGZpZWxkcyBvbiBhIHZhbGlkIGxvY2tlZCBmb2xpby4KMy4gIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRoczogTm8sIG5vdCBhdCBhbGwsIHRoaXMgZnVuY3Rpb24gZGVhbHMgc29sZWx5IHdpdGggdGhlIGNhY2hlIGRyb3AvaW52YWxpZGF0aW9uLgo0LiAgQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzOiBOb3BlLCB0aGlzIGlzbiYjMzk7dCB0b3VjaGluZyBleGlzdGluZyBidWZmZXJzIGluIGEgd2F5IHRoYXQgaW50cm9kdWNlcyB0aGlzIHR5cGUgb2YgdnVsbmVyYWJpbGl0eS4KClRoZXJlZm9yZSwgdGhpcyBwYXRjaCBzaG91bGQgYmUgY2xlYW4gZnJvbSBhIEtNU0FOIHN0YW5kcG9pbnQuIEl0JiMzOTtzIGEgbWVtb3J5IG1hbmFnZW1lbnQgb3B0aW1pemF0aW9uLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGNhY2hlIGJlaGF2aW9yLCBhbmQgaXQgZG9lc24mIzM5O3QgYXBwZWFyIHRvIHJlYWQgb3IgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeS4KCkFscmlnaHQsIGxldCYjMzk7cyBqdXN0IGRvdWJsZS1jaGVjayBldmVyeXRoaW5nLCBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgc3VidGxlLCBhbmQgdGhlbiBJJiMzOTtsbCBmb3JtdWxhdGUgdGhlIGBzZXQtcmVzdWx0c2AgY2FsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGAhZm9saW9fbWFwcGVkKGZvbGlvKWAgYmVmb3JlIGludm9raW5nIGBmb2xpb191bm1hcF9pbnZhbGlkYXRlKClgIGluIGBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKClgLiBUaGlzIG1vZGlmaWVzIHBhZ2UgY2FjaGUgZHJvcC1iZWhpbmQgbG9naWMgdG8gc2tpcCBpbnZhbGlkYXRpbmcgZm9saW9zIHRoYXQgYXJlIGN1cnJlbnRseSBtYXBwZWQgaW50byB1c2VyIHBhZ2UgdGFibGVzLiBJdCBvcGVyYXRlcyBlbnRpcmVseSBvbiBleGlzdGluZywgdmFsaWQgc3RydWN0IGZvbGlvIGZsYWdzIGFuZCBtYXBwaW5nIHJlZmVyZW5jZXMuIFRoZXJlIGFyZSBubyBhbGxvY2F0aW9ucywgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIHBhZGRpbmcgbGVha3MsIG9yIHVzZXItc3BhY2UgY29waWVzIGludm9sdmVkLiBTdGFuZGFyZCBLQVNBTi9rZXJuZWwgZGVidWdnZXJzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgKHN1Y2ggYXMgcmVmY291bnRpbmcsIGxvY2tpbmcsIG9yIFVBRiBidWdzKS4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgYCFmb2xpb19tYXBwZWQoZm9saW8pYCBiZWZvcmUgaW52b2tpbmcgYGZvbGlvX3VubWFwX2ludmFsaWRhdGUoKWAgaW4gYGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoKWAuIFRoaXMgbW9kaWZpZXMgcGFnZSBjYWNoZSBkcm9wLWJlaGluZCBsb2dpYyB0byBza2lwIGludmFsaWRhdGluZyBmb2xpb3MgdGhhdCBhcmUgY3VycmVudGx5IG1hcHBlZCBpbnRvIHVzZXIgcGFnZSB0YWJsZXMuIEl0IG9wZXJhdGVzIGVudGlyZWx5IG9uIGV4aXN0aW5nLCB2YWxpZCBzdHJ1Y3QgZm9saW8gZmxhZ3MgYW5kIG1hcHBpbmcgcmVmZXJlbmNlcy4gVGhlcmUgYXJlIG5vIGFsbG9jYXRpb25zLCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZyBsZWFrcywgb3IgdXNlci1zcGFjZSBjb3BpZXMgaW52b2x2ZWQuIFN0YW5kYXJkIEtBU0FOL2tlcm5lbCBkZWJ1Z2dlcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyAoc3VjaCBhcyByZWZjb3VudGluZywgbG9ja2luZywgb3IgVUFGIGJ1Z3MpLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MTY6NDQuNjM2OTcyNTAyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0NTc5ODcxNDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZvbGlvX2VuZF9kcm9wYmVoaW5kXCIsXG4gICAgXCJmb2xpb191bm1hcF9pbnZhbGlkYXRlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgYCFmb2xpb19tYXBwZWQoZm9saW8pYCBiZWZvcmUgaW52b2tpbmcgYGZvbGlvX3VubWFwX2ludmFsaWRhdGUoKWAgaW4gYGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoKWAuIFRoaXMgbW9kaWZpZXMgcGFnZSBjYWNoZSBkcm9wLWJlaGluZCBsb2dpYyB0byBza2lwIGludmFsaWRhdGluZyBmb2xpb3MgdGhhdCBhcmUgY3VycmVudGx5IG1hcHBlZCBpbnRvIHVzZXIgcGFnZSB0YWJsZXMuIEl0IG9wZXJhdGVzIGVudGlyZWx5IG9uIGV4aXN0aW5nLCB2YWxpZCBzdHJ1Y3QgZm9saW8gZmxhZ3MgYW5kIG1hcHBpbmcgcmVmZXJlbmNlcy4gVGhlcmUgYXJlIG5vIGFsbG9jYXRpb25zLCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZyBsZWFrcywgb3IgdXNlci1zcGFjZSBjb3BpZXMgaW52b2x2ZWQuIFN0YW5kYXJkIEtBU0FOL2tlcm5lbCBkZWJ1Z2dlcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyAoc3VjaCBhcyByZWZjb3VudGluZywgbG9ja2luZywgb3IgVUFGIGJ1Z3MpLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkcm9wYmVoaW5kIGZvbGlvIGludmFsaWRhdGlvbiBpbiBtbS9maWxlbWFwLmMgYnkgYWRkaW5nIGEgY2hlY2sgZm9yICFmb2xpb19tYXBwZWQoZm9saW8pIGJlZm9yZSBjYWxsaW5nIGZvbGlvX3VubWFwX2ludmFsaWRhdGUoKS4gVGhpcyBhbHRlcnMgY29yZSBwYWdlIGNhY2hlIGludmFsaWRhdGlvbiBiZWhhdmlvciBmb3IgY2FjaGVkL2Ryb3BiZWhpbmQgZm9saW9zIChzdWNoIGFzIHRob3NlIHVzZWQgd2l0aCBSV0ZfRE9OVENBQ0hFIC8gSU9DQl9ET05UQ0FDSEUpIGFuZCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjE2OjQ0LjYzNjk3ODI5MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1Mzk2MjU3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDhkZTc0YmU0MDZmMjZlNGM1YTQxMmE1MWJjODUyYzg0OTExZjYxYzVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMjkgMTM6MTY6NDIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jXFxuaW5kZXggNmFmZWM2MzY4ODFmYi4uMDBmZDg5Y2Y2ZjU1MCAxMDA2NDRcXG4tLS0gYS9tbS9maWxlbWFwLmNcXG4rKysgYi9tbS9maWxlbWFwLmNcXG5AQCAtMTYxNiw3ICsxNjE2LDcgQEAgc3RhdGljIHZvaWQgZmlsZW1hcF9lbmRfZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdGlmICghZm9saW9fdGVzdF9jbGVhcl9kcm9wYmVoaW5kKGZvbGlvKSlcXG4gXFx0XFx0cmV0dXJuO1xcbi1cXHRpZiAobWFwcGluZylcXG4rXFx0aWYgKG1hcHBpbmcgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX21hcHBlZChmb2xpbykpXFxuIFxcdFxcdGZvbGlvX3VubWFwX2ludmFsaWRhdGUobWFwcGluZywgZm9saW8sIDApO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzoxNjo0Ni4wOTE1NDgyMjJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjk0MDYyMDUwNDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZvbGlvX2VuZF9kcm9wYmVoaW5kXCIsXG4gICAgXCJmb2xpb191bm1hcF9pbnZhbGlkYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZHJvcGJlaGluZCBmb2xpbyBpbnZhbGlkYXRpb24gaW4gbW0vZmlsZW1hcC5jIGJ5IGFkZGluZyBhIGNoZWNrIGZvciAhZm9saW9fbWFwcGVkKGZvbGlvKSBiZWZvcmUgY2FsbGluZyBmb2xpb191bm1hcF9pbnZhbGlkYXRlKCkuIFRoaXMgYWx0ZXJzIGNvcmUgcGFnZSBjYWNoZSBpbnZhbGlkYXRpb24gYmVoYXZpb3IgZm9yIGNhY2hlZC9kcm9wYmVoaW5kIGZvbGlvcyAoc3VjaCBhcyB0aG9zZSB1c2VkIHdpdGggUldGX0RPTlRDQUNIRSAvIElPQ0JfRE9OVENBQ0hFKSBhbmQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4ZGU3NGJlNDA2ZjI2ZTRjNWE0MTJhNTFiYzg1MmM4NDkxMWY2MWM1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjkgMTM6MTY6NDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmNcbmluZGV4IDZhZmVjNjM2ODgxZmIuLjAwZmQ4OWNmNmY1NTAgMTAwNjQ0XG4tLS0gYS9tbS9maWxlbWFwLmNcbisrKyBiL21tL2ZpbGVtYXAuY1xuQEAgLTE2MTYsNyArMTYxNiw3IEBAIHN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFx0cmV0dXJuO1xuIFx0aWYgKCFmb2xpb190ZXN0X2NsZWFyX2Ryb3BiZWhpbmQoZm9saW8pKVxuIFx0XHRyZXR1cm47XG4tXHRpZiAobWFwcGluZylcbitcdGlmIChtYXBwaW5nIFx1MDAyNlx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSlcbiBcdFx0Zm9saW9fdW5tYXBfaW52YWxpZGF0ZShtYXBwaW5nLCBmb2xpbywgMCk7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MTY6NDYuMDkxNTQ5NTIyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA0NDk3NzAzODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGaWxlbWFwIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2Ugd2UncmUgY2hhbmdpbmcgc29tZXRoaW5nIGluIGBtbS9maWxlbWFwLmNgLiBTcGVjaWZpY2FsbHksIHRoZSBkaWZmIGZvY3VzZXMgb24gdGhlIGBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kYCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2UgYXBwZWFycyB0byBiZSBpbiB0aGF0IGNvbmRpdGlvbmFsIHN0YXRlbWVudC4gV2UgYXJlIGFkZGluZyBhbiBhZGRpdGlvbmFsIGNoZWNrLiBQcmV2aW91c2x5LCBpdCBqdXN0IGNoZWNrZWQgaWYgYG1hcHBpbmdgIHdhcyB2YWxpZCwgYnV0IG5vdyB3ZSdyZSBpbnRyb2R1Y2luZyBgIWZvbGlvX21hcHBlZChmb2xpbylgLiBTbywgdGhlIGBmb2xpb191bm1hcF9pbnZhbGlkYXRlYCBjYWxsIHdpbGwgb25seSBoYXBwZW4gaWYgdGhlIG1hcHBpbmcgZXhpc3RzIEFORCB0aGUgZm9saW8gaXNuJ3QgY3VycmVudGx5IG1hcHBlZC4gSW50ZXJlc3RpbmcuXG5cbkkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJJ2xsIHVzZSBlaXRoZXIgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGV4YW1pbmUgYG1tL2ZpbGVtYXAuY2AgYXJvdW5kIGxpbmUgMTYxNiB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCB0aGUgcHVycG9zZSBvZiB0aGlzIGNoYW5nZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2h5IHdlIHdvdWxkIHdhbnQgdG8gKnByZXZlbnQqIHVubWFwcGluZyBpbiB0aGUgY2FzZSBvZiBhIG1hcHBlZCBmb2xpbyB3aGVuIGRyb3BwaW5nIGJlaGluZC4gV2hhdCdzIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoaXMgY29uZGl0aW9uPyBJcyB0aGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBhIGJ1ZyBmaXgsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaW1lIHRvIGRpZyBkZWVwZXIgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDQzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MTc6MDYuNTQxMzIyMzUzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxNzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2ZpbGVtYXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjAwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjAwOlxcdFxcdFxcdHJldCA9IGZvbGlvX3dhaXRfYml0X2tpbGxhYmxlKGZvbGlvLCBQR19wcml2YXRlXzIpO1xcbjE2MDE6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTYwMjpcXHRcXHRcXHRcXHRicmVhaztcXG4xNjAzOlxcdFxcdH1cXG4xNjA0OlxcdFxcbjE2MDU6XFx0XFx0cmV0dXJuIHJldDtcXG4xNjA2OlxcdH1cXG4xNjA3OlxcdEVYUE9SVF9TWU1CT0woZm9saW9fd2FpdF9wcml2YXRlXzJfa2lsbGFibGUpO1xcbjE2MDg6XFx0XFxuMTYwOTpcXHRzdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuMTYxMDpcXHR7XFxuMTYxMTpcXHRcXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZvbGlvLVxcdTAwM2VtYXBwaW5nO1xcbjE2MTI6XFx0XFxuMTYxMzpcXHRcXHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO1xcbjE2MTQ6XFx0XFxuMTYxNTpcXHRcXHRpZiAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pIHx8IGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKVxcbjE2MTY6XFx0XFx0XFx0cmV0dXJuO1xcbjE2MTc6XFx0XFx0aWYgKCFmb2xpb190ZXN0X2NsZWFyX2Ryb3BiZWhpbmQoZm9saW8pKVxcbjE2MTg6XFx0XFx0XFx0cmV0dXJuO1xcbjE2MTk6XFx0XFx0aWYgKG1hcHBpbmcgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX21hcHBlZChmb2xpbykpXFxuMTYyMDpcXHRcXHRcXHRmb2xpb191bm1hcF9pbnZhbGlkYXRlKG1hcHBpbmcsIGZvbGlvLCAwKTtcXG4xNjIxOlxcdH1cXG4xNjIyOlxcdFxcbjE2MjM6XFx0LypcXG4xNjI0OlxcdCAqIElmIGZvbGlvIHdhcyBtYXJrZWQgYXMgZHJvcGJlaGluZCwgdGhlbiBwYWdlcyBzaG91bGQgYmUgZHJvcHBlZCB3aGVuIHdyaXRlYmFja1xcbjE2MjU6XFx0ICogY29tcGxldGVzLiBEbyB0aGF0IG5vdy4gSWYgd2UgZmFpbCwgaXQncyBsaWtlbHkgYmVjYXVzZSBvZiBhIGJpZyBmb2xpbyAtXFxuMTYyNjpcXHQgKiBqdXN0IHJlc2V0IGRyb3BiZWhpbmQgZm9yIHRoYXQgY2FzZSBhbmQgbGF0dGVyIGNvbXBsZXRpb25zIHNob3VsZCBpbnZhbGlkYXRlLlxcbjE2Mjc6XFx0ICovXFxuMTYyODpcXHR2b2lkIGZvbGlvX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuMTYyOTpcXHR7XFxuMTYzMDpcXHRcXHRpZiAoIWZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykpXFxuMTYzMTpcXHRcXHRcXHRyZXR1cm47XFxuMTYzMjpcXHRcXG4xNjMzOlxcdFxcdC8qXFxuMTYzNDpcXHRcXHQgKiBIaXR0aW5nICFpbl90YXNrKCkgc2hvdWxkIG5vdCBoYXBwZW4gb2ZmIFJXRl9ET05UQ0FDSEUgd3JpdGViYWNrLFxcbjE2MzU6XFx0XFx0ICogYnV0IGNhbiBoYXBwZW4gaWYgbm9ybWFsIHdyaXRlYmFjayBqdXN0IGhhcHBlbnMgdG8gZmluZCBkaXJ0eSBmb2xpb3NcXG4xNjM2OlxcdFxcdCAqIHRoYXQgd2VyZSBjcmVhdGVkIGFzIHBhcnQgb2YgdW5jYWNoZWQgd3JpdGViYWNrLCBhbmQgdGhhdCB3cml0ZWJhY2tcXG4xNjM3OlxcdFxcdCAqIHdvdWxkIG90aGVyd2lzZSBub3QgbmVlZCBub24tSVJRIGhhbmRsaW5nLiBKdXN0IHNraXAgdGhlXFxuMTYzODpcXHRcXHQgKiBpbnZhbGlkYXRpb24gaW4gdGhhdCBjYXNlLlxcbjE2Mzk6XFx0XFx0ICovXFxuMTY0MDpcXHRcXHRpZiAoaW5fdGFzaygpIFxcdTAwMjZcXHUwMDI2IGZvbGlvX3RyeWxvY2soZm9saW8pKSB7XFxuMTY0MTpcXHRcXHRcXHRmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKGZvbGlvKTtcXG4xNjQyOlxcdFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuMTY0MzpcXHRcXHR9XFxuMTY0NDpcXHR9XFxuMTY0NTpcXHRFWFBPUlRfU1lNQk9MX0dQTChmb2xpb19lbmRfZHJvcGJlaGluZCk7XFxuMTY0NjpcXHRcXG4xNjQ3OlxcdC8qKlxcbjE2NDg6XFx0ICogZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kIC0gRW5kIHdyaXRlYmFjayBhZ2FpbnN0IGEgZm9saW8uXFxuMTY0OTpcXHQgKiBAZm9saW86IFRoZSBmb2xpby5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MTc6MDYuNTQxNTI2MDUzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTc1OTkwNzk3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIERhdGEgQ2FjaGluZyBTdHJhdGVnaWVzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdlJ3JlIGNvbnRyb2xsaW5nIGNhY2hlIGJlaGF2aW9yLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGRyb3BwaW5nIHBhZ2VzIGZyb20gdGhlIGNhY2hlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXhhbWluZSB0aGUga2V5IGZ1bmN0aW9ucyBvciBmbGFncyB1c2VkIHRvIG1hbmFnZSB0aGlzOiBgZm9saW9fZW5kX2Ryb3BiZWhpbmRgLCBgZmlsZW1hcF9lbmRfZHJvcGJlaGluZGAsIHRoZSBnZW5lcmFsIGBkcm9wYmVoaW5kYCBmdW5jdGlvbmFsaXR5LCBhbmQsIG9mIGNvdXJzZSwgYFJXRl9ET05UQ0FDSEVgLiBJdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQg4oCTIHRvIGdldCBhIGdyYXNwIG9mIHRoZWlyIHVzYWdlLCBJIHNob3VsZCBpbml0aWF0ZSBhIGNvZGUgc2VhcmNoLiBJJ2xsIG5lZWQgdG8gdXNlIGBncmVwYCB0byBxdWlja2x5IGlkZW50aWZ5IGFsbCBpbnN0YW5jZXMgd2hlcmUgYGRyb3BiZWhpbmRgIG9yIGBSV0ZfRE9OVENBQ0hFYCBhcmUgcmVmZXJlbmNlZCB3aXRoaW4gdGhlIGNvZGViYXNlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlaXIgYXBwbGljYXRpb24gYW5kIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIyNywiT3V0cHV0VG9rZW5zIjoxNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MTc6MTIuMzAxNDM2MDc1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MTEyMDI2NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHJvcGJlaGluZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9idWZmZXIuYz0xMDg1PXN0YXRpYyB2b2lkIF9fYmhfc3VibWl0KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcGYsXFxuLS1cXG5mcy9idWZmZXIuYy0xMTA5LVxcbmZzL2J1ZmZlci5jOjExMTA6XFx0aWYgKGZvbGlvX3Rlc3RfZHJvcGJlaGluZChiaC1cXHUwMDNlYl9mb2xpbykgXFx1MDAyNlxcdTAwMjYgb3BfaXNfd3JpdGUob3BmKSlcXG5mcy9idWZmZXIuYy0xMTExLVxcdFxcdGJpb19zZXRfZmxhZyhiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKTtcXG4tLVxcbmZzL2ZzLXdyaXRlYmFjay5jPTQwNT1zdGF0aWMgYm9vbCBpbm9kZV9kb19zd2l0Y2hfd2JzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9mcy13cml0ZWJhY2suYy00MzUtXFx0XFx0XFx0d2Jfc3RhdF9tb2QobmV3X3diLCBXQl9SRUNMQUlNQUJMRSwgbnIpO1xcbmZzL2ZzLXdyaXRlYmFjay5jOjQzNjpcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSkge1xcbmZzL2ZzLXdyaXRlYmFjay5jLTQzNy1cXHRcXHRcXHRcXHR3Yl9zdGF0X21vZChvbGRfd2IsIFdCX0RPTlRDQUNIRV9ESVJUWSwgLW5yKTtcXG4tLVxcbmZzL2lvbWFwL2lvZW5kLmM9MjEzPXNzaXplX3QgaW9tYXBfYWRkX3RvX2lvZW5kKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5mcy9pb21hcC9pb2VuZC5jLTI1Ny1cXG5mcy9pb21hcC9pb2VuZC5jOjI1ODpcXHRpZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSlcXG5mcy9pb21hcC9pb2VuZC5jLTI1OS1cXHRcXHRiaW9fc2V0X2ZsYWcoXFx1MDAyNmlvZW5kLVxcdTAwM2Vpb19iaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKTtcXG4tLVxcbmZzL25mcy9maWxlLmM9MzYwPXN0YXRpYyBib29sIG5mc193YW50X3JlYWRfbW9kaWZ5X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxuZnMvbmZzL2ZpbGUuYy0zNzItXFx0XFx0cmV0dXJuIHRydWU7XFxuZnMvbmZzL2ZpbGUuYzozNzM6XFx0aWYgKGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykpXFxuZnMvbmZzL2ZpbGUuYy0zNzQtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuZnMvbmZzL2ZpbGUuYz0zODk9c3RhdGljIGludCBuZnNfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxcbi0tXFxuZnMvbmZzL2ZpbGUuYy00MTktXFx0XFx0b25jZV90aHJ1ID0gMTtcXG5mcy9uZnMvZmlsZS5jOjQyMDpcXHRcXHRmb2xpb19jbGVhcl9kcm9wYmVoaW5kKGZvbGlvKTtcXG5mcy9uZnMvZmlsZS5jLTQyMS1cXHRcXHRyZXQgPSBuZnNfcmVhZF9mb2xpbyhmaWxlLCBmb2xpbyk7XFxuLS1cXG5mcy9uZnMvd3JpdGUuYz0yOTU9c3RhdGljIHZvaWQgbmZzX2ZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmZzL25mcy93cml0ZS5jLTI5OC1cXG5mcy9uZnMvd3JpdGUuYzoyOTk6XFx0Zm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKGZvbGlvKTtcXG5mcy9uZnMvd3JpdGUuYy0zMDAtXFx0aWYgKGF0b21pY19sb25nX2RlY19yZXR1cm4oXFx1MDAyNm5mc3MtXFx1MDAzZXdyaXRlYmFjaykgXFx1MDAzY1xcbi0tXFxuZnMvbmZzL3dyaXRlLmM9NzM1PXN0YXRpYyB2b2lkIG5mc19pbm9kZV9yZW1vdmVfcmVxdWVzdChzdHJ1Y3QgbmZzX3BhZ2UgKnJlcSlcXG4tLVxcbmZzL25mcy93cml0ZS5jLTc1MS1cXG5mcy9uZnMvd3JpdGUuYzo3NTI6XFx0XFx0XFx0Zm9saW9fZW5kX2Ryb3BiZWhpbmQoZm9saW8pO1xcbmZzL25mcy93cml0ZS5jLTc1My1cXHRcXHR9XFxuLS1cXG5mcy9uZnNkL2RlYnVnZnMuYz0zOT1ERUZJTkVfREVCVUdGU19BVFRSSUJVVEUobmZzZF9kc3JfZm9wcywgbmZzZF9kc3JfZ2V0LCBuZnNkX2Rzcl9zZXQsIFxcXCIlbGx1XFxcXG5cXFwiKTtcXG4tLVxcbmZzL25mc2QvZGVidWdmcy5jLTQ1LSAqICAgJTA6IE5GUyBSRUFEIHdpbGwgdXNlIGJ1ZmZlcmVkIElPXFxuZnMvbmZzZC9kZWJ1Z2ZzLmM6NDY6ICogICAlMTogTkZTIFJFQUQgd2lsbCB1c2UgZG9udGNhY2hlIChidWZmZXJlZCBJTyB3LyBkcm9wYmVoaW5kKVxcbmZzL25mc2QvZGVidWdmcy5jLTQ3LSAqICAgJTI6IE5GUyBSRUFEIHdpbGwgdXNlIGRpcmVjdCBJT1xcbi0tXFxuZnMvbmZzZC9kZWJ1Z2ZzLmM9ODQ9REVGSU5FX0RFQlVHRlNfQVRUUklCVVRFKG5mc2RfaW9fY2FjaGVfcmVhZF9mb3BzLCBuZnNkX2lvX2NhY2hlX3JlYWRfZ2V0LFxcbi0tXFxuZnMvbmZzZC9kZWJ1Z2ZzLmMtOTEtICogICAlMDogTkZTIFdSSVRFIHdpbGwgdXNlIGJ1ZmZlcmVkIElPXFxuZnMvbmZzZC9kZWJ1Z2ZzLmM6OTI6ICogICAlMTogTkZTIFdSSVRFIHdpbGwgdXNlIGRvbnRjYWNoZSAoYnVmZmVyZWQgSU8gdy8gZHJvcGJlaGluZClcXG5mcy9uZnNkL2RlYnVnZnMuYy05My0gKlxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9OTM9ZW51bSBwYWdlZmxhZ3Mge1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTEyLVxcdFBHX3VuZXZpY3RhYmxlLFxcdFxcdC8qIFBhZ2UgaXMgXFxcInVuZXZpY3RhYmxlXFxcIiAgKi9cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoxMTM6XFx0UEdfZHJvcGJlaGluZCxcXHRcXHQvKiBkcm9wIHBhZ2VzIG9uIElPIGNvbXBsZXRpb24gKi9cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMTQtI2lmZGVmIENPTkZJR19NTVVcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTU5OD1GT0xJT19GTEFHKHJlYWRhaGVhZCwgRk9MSU9fSEVBRF9QQUdFKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNjAwLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjYwMTpGT0xJT19GTEFHKGRyb3BiZWhpbmQsIEZPTElPX0hFQURfUEFHRSlcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo2MDI6XFx0Rk9MSU9fVEVTVF9DTEVBUl9GTEFHKGRyb3BiZWhpbmQsIEZPTElPX0hFQURfUEFHRSlcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo2MDM6XFx0X19GT0xJT19TRVRfRkxBRyhkcm9wYmVoaW5kLCBGT0xJT19IRUFEX1BBR0UpXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNjA0LVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg9MTMxMD12b2lkIGZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg6MTMxMTp2b2lkIGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaDoxMzEyOnZvaWQgZm9saW9fZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMTMxMy12b2lkIGZvbGlvX3dhaXRfc3RhYmxlKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg9MTQwOD1zdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wge1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMTQxNS1cXHR1bnNpZ25lZCBpbnQgX2JhdGNoX2NvdW50O1xcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oOjE0MTY6XFx0Ym9vbCBkcm9wYmVoaW5kO1xcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTE0MTctXFx0Ym9vbCBfd29ya2luZ3NldDtcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21tZmxhZ3MuaD02OT1UUkFDRV9ERUZJTkVfRU5VTShfX19HRlBfTEFTVF9CSVQpO1xcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbW1mbGFncy5oLTE1My1cXHRERUZfUEFHRUZMQUdfTkFNRSh1bmV2aWN0YWJsZSksXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21tZmxhZ3MuaDoxNTQ6XFx0REVGX1BBR0VGTEFHX05BTUUoZHJvcGJlaGluZClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbW1mbGFncy5oLTE1NS1JRl9IQVZFX1BHX01MT0NLKG1sb2NrZWQpXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxubW0vZmlsZW1hcC5jPTE2MDc9RVhQT1JUX1NZTUJPTChmb2xpb193YWl0X3ByaXZhdGVfMl9raWxsYWJsZSk7XFxubW0vZmlsZW1hcC5jLTE2MDgtXFxubW0vZmlsZW1hcC5jOjE2MDk6c3RhdGljIHZvaWQgZmlsZW1hcF9lbmRfZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2ZpbGVtYXAuYy0xNjEwLXtcXG4tLVxcbm1tL2ZpbGVtYXAuYy0xNjE2LVxcdFxcdHJldHVybjtcXG5tbS9maWxlbWFwLmM6MTYxNzpcXHRpZiAoIWZvbGlvX3Rlc3RfY2xlYXJfZHJvcGJlaGluZChmb2xpbykpXFxubW0vZmlsZW1hcC5jLTE2MTgtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vZmlsZW1hcC5jLTE2MjMtLypcXG5tbS9maWxlbWFwLmM6MTYyNDogKiBJZiBmb2xpbyB3YXMgbWFya2VkIGFzIGRyb3BiZWhpbmQsIHRoZW4gcGFnZXMgc2hvdWxkIGJlIGRyb3BwZWQgd2hlbiB3cml0ZWJhY2tcXG5tbS9maWxlbWFwLmMtMTYyNS0gKiBjb21wbGV0ZXMuIERvIHRoYXQgbm93LiBJZiB3ZSBmYWlsLCBpdCdzIGxpa2VseSBiZWNhdXNlIG9mIGEgYmlnIGZvbGlvIC1cXG5tbS9maWxlbWFwLmM6MTYyNjogKiBqdXN0IHJlc2V0IGRyb3BiZWhpbmQgZm9yIHRoYXQgY2FzZSBhbmQgbGF0dGVyIGNvbXBsZXRpb25zIHNob3VsZCBpbnZhbGlkYXRlLlxcbm1tL2ZpbGVtYXAuYy0xNjI3LSAqL1xcbm1tL2ZpbGVtYXAuYzoxNjI4OnZvaWQgZm9saW9fZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9maWxlbWFwLmMtMTYyOS17XFxubW0vZmlsZW1hcC5jOjE2MzA6XFx0aWYgKCFmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKVxcbm1tL2ZpbGVtYXAuYy0xNjMxLVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL2ZpbGVtYXAuYy0xNjQwLVxcdGlmIChpbl90YXNrKCkgXFx1MDAyNlxcdTAwMjYgZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcXG5tbS9maWxlbWFwLmM6MTY0MTpcXHRcXHRmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKGZvbGlvKTtcXG5tbS9maWxlbWFwLmMtMTY0Mi1cXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbi0tXFxubW0vZmlsZW1hcC5jLTE2NDQtfVxcbm1tL2ZpbGVtYXAuYzoxNjQ1OkVYUE9SVF9TWU1CT0xfR1BMKGZvbGlvX2VuZF9kcm9wYmVoaW5kKTtcXG5tbS9maWxlbWFwLmMtMTY0Ni1cXG5tbS9maWxlbWFwLmMtMTY0Ny0vKipcXG5tbS9maWxlbWFwLmM6MTY0ODogKiBmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQgLSBFbmQgd3JpdGViYWNrIGFnYWluc3QgYSBmb2xpby5cXG5tbS9maWxlbWFwLmMtMTY0OS0gKiBAZm9saW86IFRoZSBmb2xpby5cXG4tLVxcbm1tL2ZpbGVtYXAuYy0xNjUxLSAqIFRoZSBmb2xpbyBtdXN0IGFjdHVhbGx5IGJlIHVuZGVyIHdyaXRlYmFjay5cXG5tbS9maWxlbWFwLmM6MTY1MjogKiBUaGlzIGNhbGwgaXMgaW50ZW5kZWQgZm9yIGZpbGVzeXN0ZW1zIHRoYXQgbmVlZCB0byBkZWZlciBkcm9wYmVoaW5kLlxcbm1tL2ZpbGVtYXAuYy0xNjUzLSAqXFxuLS1cXG5tbS9maWxlbWFwLmMtMTY1NS0gKi9cXG5tbS9maWxlbWFwLmM6MTY1Njp2b2lkIGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2ZpbGVtYXAuYy0xNjU3LXtcXG4tLVxcbm1tL2ZpbGVtYXAuYy0xNjc2LX1cXG5tbS9maWxlbWFwLmM6MTY3NzpFWFBPUlRfU1lNQk9MX0dQTChmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQpO1xcbm1tL2ZpbGVtYXAuYy0xNjc4LVxcbi0tXFxubW0vZmlsZW1hcC5jPTE2ODc9dm9pZCBmb2xpb19lbmRfd3JpdGViYWNrKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9maWxlbWFwLmMtMTY5Ny1cXHRmb2xpb19nZXQoZm9saW8pO1xcbm1tL2ZpbGVtYXAuYzoxNjk4OlxcdGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChmb2xpbyk7XFxubW0vZmlsZW1hcC5jOjE2OTk6XFx0Zm9saW9fZW5kX2Ryb3BiZWhpbmQoZm9saW8pO1xcbm1tL2ZpbGVtYXAuYy0xNzAwLVxcdGZvbGlvX3B1dChmb2xpbyk7XFxuLS1cXG5tbS9maWxlbWFwLmM9MTk0Nz1zdHJ1Y3QgZm9saW8gKl9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbm1tL2ZpbGVtYXAuYy0yMDI1LVxcdFxcdFxcdGlmIChmZ3BfZmxhZ3MgXFx1MDAyNiBGR1BfRE9OVENBQ0hFKVxcbm1tL2ZpbGVtYXAuYzoyMDI2OlxcdFxcdFxcdFxcdF9fZm9saW9fc2V0X2Ryb3BiZWhpbmQoZm9saW8pO1xcbm1tL2ZpbGVtYXAuYy0yMDI3LVxcbi0tXFxubW0vZmlsZW1hcC5jLTIwNjAtXFx0Lyogbm90IGFuIHVuY2FjaGVkIGxvb2t1cCwgY2xlYXIgdW5jYWNoZWQgaWYgc2V0ICovXFxubW0vZmlsZW1hcC5jOjIwNjE6XFx0aWYgKCEoZmdwX2ZsYWdzIFxcdTAwMjYgRkdQX0RPTlRDQUNIRSkgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9jbGVhcl9kcm9wYmVoaW5kKGZvbGlvKSkge1xcbm1tL2ZpbGVtYXAuYy0yMDYyLVxcdFxcdGlmIChmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubW0vZmlsZW1hcC5jPTI2MTk9c3RhdGljIGludCBmaWxlbWFwX2NyZWF0ZV9mb2xpbyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBmb2xpb19iYXRjaCAqZmJhdGNoKVxcbi0tXFxubW0vZmlsZW1hcC5jLTI2MzMtXFx0aWYgKGlvY2ItXFx1MDAzZWtpX2ZsYWdzIFxcdTAwMjYgSU9DQl9ET05UQ0FDSEUpXFxubW0vZmlsZW1hcC5jOjI2MzQ6XFx0XFx0X19mb2xpb19zZXRfZHJvcGJlaGluZChmb2xpbyk7XFxubW0vZmlsZW1hcC5jLTI2MzUtXFxuLS1cXG5tbS9maWxlbWFwLmM9MjY3Mj1zdGF0aWMgaW50IGZpbGVtYXBfcmVhZGFoZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5tbS9maWxlbWFwLmMtMjY4MC1cXHRpZiAoaW9jYi1cXHUwMDNla2lfZmxhZ3MgXFx1MDAyNiBJT0NCX0RPTlRDQUNIRSlcXG5tbS9maWxlbWFwLmM6MjY4MTpcXHRcXHRyYWN0bC5kcm9wYmVoaW5kID0gMTtcXG5tbS9maWxlbWFwLmMtMjY4Mi1cXHRwYWdlX2NhY2hlX2FzeW5jX3JhKFxcdTAwMjZyYWN0bCwgZm9saW8sIGxhc3RfaW5kZXggLSBmb2xpby1cXHUwMDNlaW5kZXgpO1xcbi0tXFxubW0vZmlsZW1hcC5jPTI2ODY9c3RhdGljIGludCBmaWxlbWFwX2dldF9wYWdlcyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNpemVfdCBjb3VudCxcXG4tLVxcbm1tL2ZpbGVtYXAuYy0yNzEyLVxcdFxcdGlmIChpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfRE9OVENBQ0hFKVxcbm1tL2ZpbGVtYXAuYzoyNzEzOlxcdFxcdFxcdHJhY3RsLmRyb3BiZWhpbmQgPSAxO1xcbm1tL2ZpbGVtYXAuYy0yNzE0LVxcdFxcdHBhZ2VfY2FjaGVfc3luY19yYShcXHUwMDI2cmFjdGwsIGxhc3RfaW5kZXggLSBpbmRleCk7XFxuLS1cXG5tbS9maWxlbWFwLmM9Mjc1NT1zdGF0aWMgaW5saW5lIGJvb2wgcG9zX3NhbWVfZm9saW8obG9mZl90IHBvczEsIGxvZmZfdCBwb3MyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZmlsZW1hcC5jLTI3NjEtXFxubW0vZmlsZW1hcC5jOjI3NjI6c3RhdGljIHZvaWQgZmlsZW1hcF9lbmRfZHJvcGJlaGluZF9yZWFkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vZmlsZW1hcC5jLTI3NjMte1xcbm1tL2ZpbGVtYXAuYzoyNzY0OlxcdGlmICghZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSlcXG5tbS9maWxlbWFwLmMtMjc2NS1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS9maWxlbWFwLmMtMjc2OC1cXHRpZiAoZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcXG5tbS9maWxlbWFwLmM6Mjc2OTpcXHRcXHRmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKGZvbGlvKTtcXG5tbS9maWxlbWFwLmMtMjc3MC1cXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbi0tXFxubW0vZmlsZW1hcC5jPTI3ODc9c3NpemVfdCBmaWxlbWFwX3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLS1cXG5tbS9maWxlbWFwLmMtMjg4OS1cXG5tbS9maWxlbWFwLmM6Mjg5MDpcXHRcXHRcXHRmaWxlbWFwX2VuZF9kcm9wYmVoaW5kX3JlYWQoZm9saW8pO1xcbm1tL2ZpbGVtYXAuYy0yODkxLVxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuLS1cXG5tbS9mb2xpby5jPTQyMj12b2lkIGZvbGlvX21hcmtfYWNjZXNzZWQoc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9mb2xpby5jLTQyMy17XFxubW0vZm9saW8uYzo0MjQ6XFx0aWYgKGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykpXFxubW0vZm9saW8uYy00MjUtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zNjg1PXN0YXRpYyB2b2lkIF9fc3BsaXRfZm9saW9fdG9fb3JkZXIoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9sZF9vcmRlcixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzc0NC1cXHRcXHRcXHRcXHQgKDFMIFxcdTAwM2NcXHUwMDNjIFBHX2RpcnR5KSB8XFxubW0vaHVnZV9tZW1vcnkuYzozNzQ1OlxcdFxcdFxcdFxcdCAoMUwgXFx1MDAzY1xcdTAwM2MgUEdfZHJvcGJlaGluZCkgfFxcbm1tL2h1Z2VfbWVtb3J5LmMtMzc0Ni1cXHRcXHRcXHRcXHQgTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfTUFTSykpO1xcbi0tXFxubW0vcGFnZS13cml0ZWJhY2suYz0yNjAzPXN0YXRpYyB2b2lkIGZvbGlvX2FjY291bnRfZGlydGllZChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vcGFnZS13cml0ZWJhY2suYy0yNjE3LVxcdFxcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9ESVJUWSwgbnIpO1xcbm1tL3BhZ2Utd3JpdGViYWNrLmM6MjYxODpcXHRcXHRpZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSlcXG5tbS9wYWdlLXdyaXRlYmFjay5jLTI2MTktXFx0XFx0XFx0d2Jfc3RhdF9tb2Qod2IsIFdCX0RPTlRDQUNIRV9ESVJUWSwgbnIpO1xcbi0tXFxubW0vcGFnZS13cml0ZWJhY2suYz0yNjM2PXZvaWQgZm9saW9fYWNjb3VudF9jbGVhbmVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YilcXG4tLVxcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjY0MC1cXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfRElSVFksIC1ucik7XFxubW0vcGFnZS13cml0ZWJhY2suYzoyNjQxOlxcdGlmIChmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKVxcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjY0Mi1cXHRcXHR3Yl9zdGF0X21vZCh3YiwgV0JfRE9OVENBQ0hFX0RJUlRZLCAtbnIpO1xcbi0tXFxubW0vcGFnZS13cml0ZWJhY2suYz0yODY2PWJvb2wgZm9saW9fY2xlYXJfZGlydHlfZm9yX2lvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9wYWdlLXdyaXRlYmFjay5jLTI5MTYtXFx0XFx0XFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX0RJUlRZLCAtbnIpO1xcbm1tL3BhZ2Utd3JpdGViYWNrLmM6MjkxNzpcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSlcXG5tbS9wYWdlLXdyaXRlYmFjay5jLTI5MTgtXFx0XFx0XFx0XFx0d2Jfc3RhdF9tb2Qod2IsIFdCX0RPTlRDQUNIRV9ESVJUWSwgLW5yKTtcXG4tLVxcbm1tL3JlYWRhaGVhZC5jPTE5NT1zdGF0aWMgc3RydWN0IGZvbGlvICpyYWN0bF9hbGxvY19mb2xpbyhzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxcbi0tXFxubW0vcmVhZGFoZWFkLmMtMjAwLVxcdGZvbGlvID0gZmlsZW1hcF9hbGxvY19mb2xpbyhnZnBfbWFzaywgb3JkZXIsIE5VTEwpO1xcbm1tL3JlYWRhaGVhZC5jOjIwMTpcXHRpZiAoZm9saW8gXFx1MDAyNlxcdTAwMjYgcmFjdGwtXFx1MDAzZWRyb3BiZWhpbmQpXFxubW0vcmVhZGFoZWFkLmM6MjAyOlxcdFxcdF9fZm9saW9fc2V0X2Ryb3BiZWhpbmQoZm9saW8pO1xcbm1tL3JlYWRhaGVhZC5jLTIwMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MTc6MTUuMTEyNjQ2NjA3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzMyNDU1MzgxODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQ6IE1NIERyb3BiZWhpbmQgT3B0aW1pemF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBgZmlsZW1hcF9lbmRfZHJvcGJlaGluZGAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBmb2xpb19lbmRfZHJvcGJlaGluZGAgYW5kIGBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kX3JlYWRgLiBEcm9wYmVoaW5kIGlzIHRyaWdnZXJlZCBieSBgUldGX0RPTlRDQUNIRWAgb3IgYElPQ0JfRE9OVENBQ0hFYCwgZWZmZWN0aXZlbHkgd2l0aCBvcGVyYXRpb25zIGxpa2UgYHByZWFkdjJgL2Bwd3JpdGV2MmAgd2l0aCBgUldGX0RPTlRDQUNIRWAsIG9yIGlvX3VyaW5nIHdpdGggYElPUklOR19SRUNWU0VORF9QT0xMX0ZJUlNUYC4gVGhhdCdzIHRoZSBjb250ZXh0LlxuXG5Ob3csIGBmb2xpb191bm1hcF9pbnZhbGlkYXRlYCBpcyB0aGUga2V5IGZ1bmN0aW9uOyBpdCBoYW5kbGVzIHVubWFwcGluZyBhbmQgaW52YWxpZGF0aW5nIGEgZm9saW8uIEJ1dCBoZXJlJ3MgdGhlIGNhdGNoOiBJZiBhIGZvbGlvIGlzIG1hcHBlZCBpbnRvIHVzZXIgc3BhY2UgKHRoaW5rIGBtbWFwYCksIGBmb2xpb19tYXBwZWQoZm9saW8pYCBpcyB0cnVlLiBJZiB3ZSBjYWxsIGBmb2xpb191bm1hcF9pbnZhbGlkYXRlYCBvbiBhIG1hcHBlZCBmb2xpbywgd2UgY291bGQgY2F1c2UgaXNzdWVzIGJ5IGludmFsaWRhdGluZyB0aGUgbWFwLiBUaGlzIHBhdGNoIHNraXBzIHRoZSBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZWAgY2FsbCBmb3IgbWFwcGVkIGZvbGlvcy5cblxuVGhpcyBpcyBjb3JlIGtlcm5lbCBNTSBsb2dpYyBpbiBgbW0vZmlsZW1hcC5jYCwgYW5kIGl0J3MgcmVhY2hhYmxlIHRocm91Z2ggc3RhbmRhcmQgZmlsZSByZWFkL3dyaXRlIG9wZXJhdGlvbnMgKGxpa2UgYHByZWFkdjJgIHdpdGggYFJXRl9ET05UQ0FDSEVgKS4gU28sIGlzIHRoaXMgZnV6emFibGU/IExldCdzIGNoZWNrOlxuXG4qICAgKipEb2N1bWVudGF0aW9uL0tjb25maWcvQ29tbWVudHM/KiogTm9wZS5cbiogICAqKkRlY29yYXRpdmUgQ2hhbmdlcz8qKiBOb3BlLlxuKiAgICoqTnVtZXJpYyBDb25zdGFudHMvTWFjcm9zPyoqIE5vcGUuXG4qICAgKipWaXJ0dWFsaXplZCBFbnZpcm9ubWVudCBJbXBvc3NpYmxlIFBhdGhzPyoqIE5vIHdheSwgd2UgY2FuIHRlc3QgdGhpcyBlYXNpbHkgaW4gUUVNVSBvciBHQ0UuXG4qICAgKipWZW5kb3ItU3BlY2lmaWMgSGFyZHdhcmU/KiogTm9wZS5cbiogICAqKkRyaXZlciBSZW1vdmFsL1NodXRkb3duPyoqIE5vcGUuXG5cblRoaXMgbW9kaWZpZXMgY29yZSBrZXJuZWwgTU0gbG9naWMg4oCTIHNwZWNpZmljYWxseSwgdGhlIGV4ZWN1dGlvbiBmbG93LiBUaGUga2V5IGNoYW5nZSBpcyB0byAqc2tpcCogYGZvbGlvX3VubWFwX2ludmFsaWRhdGVgIHdoZW4gYGZvbGlvX21hcHBlZChmb2xpbylgIGlzIHRydWUuIFNvLCBXb3J0aEZ1enppbmcgPSBUcnVlLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBsaWtlbHkgZnVuY3Rpb25zIGFuZCBjb25maWdzLiBJIG5lZWQgdG8gZm9jdXMgb24gbm9uLWhvdC1wYXRoIHN5bWJvbHMuIFJlbGV2YW50IGZ1bmN0aW9ucyBhcmU6XG5cbiogICBgZm9saW9fZW5kX2Ryb3BiZWhpbmRgXG4qICAgYGZpbGVtYXBfcmVhZGAgKHRoaXMgaXMgYSBzdGFuZGFyZCByZWFkIGFuZCBsaWtlbHkgaXMgaG90LXBhdGgsIGJ1dCBtYXkgdHJpZ2dlciBgZm9saW9fZW5kX2Ryb3BiZWhpbmRgIG9yIGBmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmRgIG9yIGBmb2xpb19lbmRfd3JpdGViYWNrYCkuXG5cblNwZWNpZmljYWxseSwgSSdsbCBiZSBsb29raW5nIGF0IG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50czpcblxuKiAgIGBmb2xpb19lbmRfZHJvcGJlaGluZGAgLSBpcyBub24tc3RhdGljIGFuZCBgRVhQT1JUX1NZTUJPTF9HUEwoZm9saW9fZW5kX2Ryb3BiZWhpbmQpYC5cbiogICBgZm9saW9fZW5kX3dyaXRlYmFja2AgLSBpcyBub24tc3RhdGljIGFuZCBgRVhQT1JUX1NZTUJPTChmb2xpb19lbmRfd3JpdGViYWNrKWAuXG4qICAgYGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZGAgLSBpcyBub24tc3RhdGljIGFuZCBgRVhQT1JUX1NZTUJPTF9HUEwoZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKWAuXG5cbkknbGwgYWxzbyBncmVwIGZvciBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZWAgdG8gc2VlIGl0cyBkZWNsYXJhdGlvbi4gVGhhdCdzIHRoZSB0YXJnZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1ODUsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MTc6NDguMzU4MTg3NDM1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Mjk1NTYwNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9saW9fdW5tYXBfaW52YWxpZGF0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9maWxlbWFwLmM9MTYwOT1zdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9maWxlbWFwLmMtMTYxOS1cXHRpZiAobWFwcGluZyBcXHUwMDI2XFx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSlcXG5tbS9maWxlbWFwLmM6MTYyMDpcXHRcXHRmb2xpb191bm1hcF9pbnZhbGlkYXRlKG1hcHBpbmcsIGZvbGlvLCAwKTtcXG5tbS9maWxlbWFwLmMtMTYyMS19XFxuLS1cXG5tbS9pbnRlcm5hbC5oPTU5Nz1pbnQgemFwX3ZtYV9mb3JfcmVhcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxubW0vaW50ZXJuYWwuaDo1OTg6aW50IGZvbGlvX3VubWFwX2ludmFsaWRhdGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vaW50ZXJuYWwuaC01OTktXFx0XFx0XFx0ICAgZ2ZwX3QgZ2ZwKTtcXG4tLVxcbm1tL3RydW5jYXRlLmM9NjA2PXN0YXRpYyBpbnQgZm9saW9fbGF1bmRlcihzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3RydW5jYXRlLmMtNjIxLSAqL1xcbm1tL3RydW5jYXRlLmM6NjIyOmludCBmb2xpb191bm1hcF9pbnZhbGlkYXRlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL3RydW5jYXRlLmMtNjIzLVxcdFxcdFxcdCAgIGdmcF90IGdmcClcXG4tLVxcbm1tL3RydW5jYXRlLmM9Njc2PWludCBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbm1tL3RydW5jYXRlLmMtNzI1LVxcdFxcdFxcdGZvbGlvX3dhaXRfd3JpdGViYWNrKGZvbGlvKTtcXG5tbS90cnVuY2F0ZS5jOjcyNjpcXHRcXHRcXHRyZXQyID0gZm9saW9fdW5tYXBfaW52YWxpZGF0ZShtYXBwaW5nLCBmb2xpbywgR0ZQX0tFUk5FTCk7XFxubW0vdHJ1bmNhdGUuYy03MjctXFx0XFx0XFx0aWYgKHJldDIgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzoxNzo0OS45ODc3NDgwMjNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1Mjk1MTUzNDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgYGZvbGlvX3VubWFwX2ludmFsaWRhdGVgIGFuZCBSZWxhdGVkIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYGZvbGlvX3VubWFwX2ludmFsaWRhdGVgLiBJIGtub3cgaXQncyBkZWZpbmVkIGluIGBtbS90cnVuY2F0ZS5jYCwgYW5kIGltcG9ydGFudGx5LCBpdCdzIG5vdCBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQncyBsaWtlbHkgdXNlZCBvdXRzaWRlIHRoYXQgc3BlY2lmaWMgZmlsZS4gSSBhbHNvIHNlZSB0aGF0IGBmb2xpb19lbmRfZHJvcGJlaGluZGAgYW5kIGBmb2xpb19lbmRfd3JpdGViYWNrYCBhcmUgZGVmaW5lZCBpbiBgbW0vZmlsZW1hcC5jYCwgYWxzbyBub24tc3RhdGljLiBNYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIGNvbnRleHQuXG5cbk15IG5leHQgbW92ZSBpcyB0byBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHRoZSBjb21waWxhdGlvbiBvciBiZWhhdmlvciBhcm91bmQgYG1tL2ZpbGVtYXAuY2Agb3IsIG1vcmUgc3BlY2lmaWNhbGx5LCB0aGUgXCJkcm9wYmVoaW5kXCIgZnVuY3Rpb25hbGl0eSwgc2luY2UgYGZvbGlvX2VuZF9kcm9wYmVoaW5kYCBpcyBpbiBwbGF5LiBJIGtub3cgYGZpbGVtYXAuY2AgaXMgY29yZSBNTSwgc28gaXQgKnNob3VsZCogYWx3YXlzIGJlIGNvbXBpbGVkLCBidXQgSSdsbCBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSB3ZWlyZCBjb25maWcgZGVwZW5kZW5jaWVzIHRoYXQgY291bGQgbWFrZSB0aGluZ3Mgd29ua3kuXG5cbk5vdywgSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiAoYCNpZmRlZmAgY29uc3RydWN0cykgYXJvdW5kIHRoZSBmdW5jdGlvbnMgSSdtIGludGVyZXN0ZWQgaW4sIHBhcnRpY3VsYXJseSBgZm9saW9fZW5kX2Ryb3BiZWhpbmRgLiBMZXQncyB0YWtlIGEgbG9vayBpbiBgbW0vZmlsZW1hcC5jYCBpbiB0aGUgdmljaW5pdHkgb2YgYHJlYWQtZmlsZWAgYXJvdW5kIGxpbmUgMTYwMC0xNjUwLi4uTm9wZSwgbm8gaWZkZWZzIHRoZXJlLiBUaGF0J3MgZ29vZDsgZmV3ZXIgcG90ZW50aWFsIGdvdGNoYXMuXG5cbkZpbmFsbHksIEknbSBjdXJpb3VzIGFib3V0IHRoZSBgUldGX0RPTlRDQUNIRWAgZmxhZywgYmVjYXVzZSBJIGhhdmUgYSBodW5jaCBpdCBtaWdodCBiZSByZWxhdGVkLiBJJ2xsIHNlYXJjaCB0aGUgY29kZWJhc2UgZm9yIGBJT0NCX0RPTlRDQUNIRWAgb3IgYFJXRl9ET05UQ0FDSEVgIHRvIHNlZSBob3cgd2lkZWx5IHRoZXkncmUgc3VwcG9ydGVkIGFjcm9zcyBmaWxlc3lzdGVtcyBhbmQgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gc2NlbmFyaW9zLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIHBpY3R1cmUgb2YgaG93IHRoaXMgXCJkb24ndCBjYWNoZVwiIGJlaGF2aW9yIGludGVyYWN0cyB3aXRoIHRoZXNlIGZpbGUgbWFwcGluZyBvcGVyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzAzLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjE3OjU1LjI4MjkwMzY3MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwMDg2MzI4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJSV0ZfRE9OVENBQ0hFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzL25mc2QtaW8tbW9kZXMucnN0PTYwPUZvciBtb3JlIGNvbnRleHQgb24gRE9OVENBQ0hFLCBwbGVhc2Ugc2VlIHRoZXNlIExpbnV4IGNvbW1pdCBoZWFkZXJzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzZC1pby1tb2Rlcy5yc3QtNjQtLSBmb3IgUkVBRDogIDgwMjZlNDliZmY5YjEgKFxcXCJtbS9maWxlbWFwOiBhZGQgcmVhZCBzdXBwb3J0IGZvclxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzL25mc2QtaW8tbW9kZXMucnN0OjY1OiAgUldGX0RPTlRDQUNIRVxcXCIpXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzZC1pby1tb2Rlcy5yc3QtNjYtLSBmb3IgV1JJVEU6IDk3NGM1ZTYxMzlkYjMgKFxcXCJ4ZnM6IGZsYWcgYXMgc3VwcG9ydGluZyBGT1BfRE9OVENBQ0hFXFxcIilcXG4tLVxcbmluY2x1ZGUvbGludXgvZnMuaD0zMzY9c3RydWN0IHJlYWRhaGVhZF9jb250cm9sO1xcbi0tXFxuaW5jbHVkZS9saW51eC9mcy5oLTM0NC0jZGVmaW5lIElPQ0JfQVRPTUlDXFx0XFx0KF9fZm9yY2UgaW50KSBSV0ZfQVRPTUlDXFxuaW5jbHVkZS9saW51eC9mcy5oOjM0NTojZGVmaW5lIElPQ0JfRE9OVENBQ0hFXFx0XFx0KF9fZm9yY2UgaW50KSBSV0ZfRE9OVENBQ0hFXFxuaW5jbHVkZS9saW51eC9mcy5oLTM0Ni0jZGVmaW5lIElPQ0JfTk9TSUdOQUxcXHRcXHQoX19mb3JjZSBpbnQpIFJXRl9OT1NJR05BTFxcbi0tXFxuaW5jbHVkZS9saW51eC9mcy5oPTM0NDc9c3RhdGljIGlubGluZSBpbnQga2lvY2Jfc2V0X3J3X2ZsYWdzKHN0cnVjdCBraW9jYiAqa2ksIHJ3Zl90IGZsYWdzLFxcbi0tXFxuaW5jbHVkZS9saW51eC9mcy5oLTM0NzEtXFx0fVxcbmluY2x1ZGUvbGludXgvZnMuaDozNDcyOlxcdGlmIChmbGFncyBcXHUwMDI2IFJXRl9ET05UQ0FDSEUpIHtcXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMzQ3My1cXHRcXHQvKiBmaWxlIHN5c3RlbSBtdXN0IHN1cHBvcnQgaXQgKi9cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9mcy5oPTQyNT10eXBlZGVmIGludCBfX2JpdHdpc2UgX19rZXJuZWxfcndmX3Q7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaC00NDgtLyogYnVmZmVyZWQgSU8gdGhhdCBkcm9wcyB0aGUgY2FjaGUgYWZ0ZXIgcmVhZGluZyBvciB3cml0aW5nIGRhdGEgKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaDo0NDk6I2RlZmluZSBSV0ZfRE9OVENBQ0hFXFx0KChfX2ZvcmNlIF9fa2VybmVsX3J3Zl90KTB4MDAwMDAwODApXFxuaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtNDUwLVxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtNDU2LVxcdFxcdFxcdCBSV0ZfQVBQRU5EIHwgUldGX05PQVBQRU5EIHwgUldGX0FUT01JQyB8XFxcXFxcbmluY2x1ZGUvdWFwaS9saW51eC9mcy5oOjQ1NzpcXHRcXHRcXHQgUldGX0RPTlRDQUNIRSB8IFJXRl9OT1NJR05BTClcXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaC00NTgtXFxuLS1cXG5tbS9maWxlbWFwLmM9MTYyOD12b2lkIGZvbGlvX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9maWxlbWFwLmMtMTYzMy1cXHQvKlxcbm1tL2ZpbGVtYXAuYzoxNjM0OlxcdCAqIEhpdHRpbmcgIWluX3Rhc2soKSBzaG91bGQgbm90IGhhcHBlbiBvZmYgUldGX0RPTlRDQUNIRSB3cml0ZWJhY2ssXFxubW0vZmlsZW1hcC5jLTE2MzUtXFx0ICogYnV0IGNhbiBoYXBwZW4gaWYgbm9ybWFsIHdyaXRlYmFjayBqdXN0IGhhcHBlbnMgdG8gZmluZCBkaXJ0eSBmb2xpb3NcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oPTMyMT10eXBlZGVmIGludCBfX2JpdHdpc2UgX19rZXJuZWxfcndmX3Q7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvZnMuaC0zNDQtLyogYnVmZmVyZWQgSU8gdGhhdCBkcm9wcyB0aGUgY2FjaGUgYWZ0ZXIgcmVhZGluZyBvciB3cml0aW5nIGRhdGEgKi9cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvZnMuaDozNDU6I2RlZmluZSBSV0ZfRE9OVENBQ0hFXFx0KChfX2ZvcmNlIF9fa2VybmVsX3J3Zl90KTB4MDAwMDAwODApXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtMzQ2LVxcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtMzQ5LVxcdFxcdFxcdCBSV0ZfQVBQRU5EIHwgUldGX05PQVBQRU5EIHwgUldGX0FUT01JQyB8XFxcXFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oOjM1MDpcXHRcXHRcXHQgUldGX0RPTlRDQUNIRSlcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvZnMuaC0zNTEtXFxuLS1cXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaD00MjU9dHlwZWRlZiBpbnQgX19iaXR3aXNlIF9fa2VybmVsX3J3Zl90O1xcbi0tXFxudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtNDQ4LS8qIGJ1ZmZlcmVkIElPIHRoYXQgZHJvcHMgdGhlIGNhY2hlIGFmdGVyIHJlYWRpbmcgb3Igd3JpdGluZyBkYXRhICovXFxudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmg6NDQ5OiNkZWZpbmUgUldGX0RPTlRDQUNIRVxcdCgoX19mb3JjZSBfX2tlcm5lbF9yd2ZfdCkweDAwMDAwMDgwKVxcbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L2luY2x1ZGUvdWFwaS9saW51eC9mcy5oLTQ1MC1cXG4tLVxcbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L2luY2x1ZGUvdWFwaS9saW51eC9mcy5oLTQ1Ni1cXHRcXHRcXHQgUldGX0FQUEVORCB8IFJXRl9OT0FQUEVORCB8IFJXRl9BVE9NSUMgfFxcXFxcXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaDo0NTc6XFx0XFx0XFx0IFJXRl9ET05UQ0FDSEUgfCBSV0ZfTk9TSUdOQUwpXFxudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtNDU4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzoxNzo1Ni42ODM3NzM1NDJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTM0MjM3NDM1NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYEZPUF9ET05UQ0FDSEVgIEFjcm9zcyBGaWxlc3lzdGVtcyoqXG5cbkFscmlnaHQsIHNvIHRoZSBuYWdnaW5nIHF1ZXN0aW9uIG9mIGBGT1BfRE9OVENBQ0hFYCBhbmQgaXRzIGltcGxpY2F0aW9ucyBoYXMgcmVzdXJmYWNlZC4gSSBuZWVkIHRvIGdldCBhIGZpcm0gaGFuZGxlIG9uIGl0cyBiZWhhdmlvciBhbmQgZWZmZWN0aXZlbmVzcywgcGFydGljdWxhcmx5IGFjcm9zcyBkaWZmZXJlbnQgZmlsZXN5c3RlbSBpbXBsZW1lbnRhdGlvbnMuIEknbSB0aGlua2luZywgXCJJcyB0aGVyZSBhIHN5c3RlbWljIHByb2JsZW0gaGVyZSwgb3IgYXJlIHdlIHNlZWluZyBhIGZpbGVzeXN0ZW0tc3BlY2lmaWMgcXVpcms/XCIgSSBzaG91bGQgaW5pdGlhdGUgYSBkZWVwIGRpdmUsIHByb2JhYmx5IHN0YXJ0aW5nIHdpdGggYSBjcm9zcy1maWxlc3lzdGVtIGF1ZGl0LiBJJ2xsIG5lZWQgdG8gZGV2ZWxvcCBhIG1ldGhvZG9sb2d5IGZvciBxdWlja2x5IGlkZW50aWZ5aW5nIHdoZXJlIGBGT1BfRE9OVENBQ0hFYCBpcyBiZWluZyB1c2VkLCAqYW5kKiBtb3JlIGltcG9ydGFudGx5LCB3aGV0aGVyIGl0J3MgYWN0dWFsbHkgd29ya2luZyBhcyBleHBlY3RlZCBpbiB0aG9zZSBjb250ZXh0cy4gV2UncmUgdGFsa2luZyBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMsIG9mIGNvdXJzZSwgYW5kIHBvc3NpYmx5LCBzdWJ0bGUgY29ycmVjdG5lc3MgaXNzdWVzIGlmIGEgY2FjaGluZyBsYXllciBpcyB1bmV4cGVjdGVkbHkgaW50ZXJmZXJpbmcuIFNvIHllYWgsIEkgbmVlZCB0byBjaGVjayBgRk9QX0RPTlRDQUNIRWAgYWNyb3NzIGZpbGVzeXN0ZW1zOyBsZXQncyBnZXQgc3RhcnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExMTEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzoxODoxMC4xMDc1MTk3NTlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDIxMzcwNjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRk9QX0RPTlRDQUNIRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9uZnNkLWlvLW1vZGVzLnJzdD02MD1Gb3IgbW9yZSBjb250ZXh0IG9uIERPTlRDQUNIRSwgcGxlYXNlIHNlZSB0aGVzZSBMaW51eCBjb21taXQgaGVhZGVyczpcXG4tLVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzL25mc2QtaW8tbW9kZXMucnN0LTY1LSAgUldGX0RPTlRDQUNIRVxcXCIpXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzZC1pby1tb2Rlcy5yc3Q6NjY6LSBmb3IgV1JJVEU6IDk3NGM1ZTYxMzlkYjMgKFxcXCJ4ZnM6IGZsYWcgYXMgc3VwcG9ydGluZyBGT1BfRE9OVENBQ0hFXFxcIilcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9uZnNkLWlvLW1vZGVzLnJzdC02Ny1cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9uZnNkLWlvLW1vZGVzLnJzdD02OD1ORlNEX0lPX0RPTlRDQUNIRSB3aWxsIGZhbGwgYmFjayB0byBORlNEX0lPX0JVRkZFUkVEIGlmIHRoZSB1bmRlcmx5aW5nXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzZC1pby1tb2Rlcy5yc3Q6Njk6ZmlsZXN5c3RlbSBkb2Vzbid0IGluZGljYXRlIHN1cHBvcnQgYnkgc2V0dGluZyBGT1BfRE9OVENBQ0hFLlxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzL25mc2QtaW8tbW9kZXMucnN0LTcwLVxcbi0tXFxuYmxvY2svZm9wcy5jPTkyOT1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlZl9ibGtfZm9wcyA9IHtcXG4tLVxcbmJsb2NrL2ZvcHMuYy05NDUtXFx0LnVyaW5nX2NtZFxcdD0gYmxrZGV2X3VyaW5nX2NtZCxcXG5ibG9jay9mb3BzLmM6OTQ2OlxcdC5mb3BfZmxhZ3NcXHQ9IEZPUF9CVUZGRVJfUkFTWU5DIHwgRk9QX0RPTlRDQUNIRSxcXG5ibG9jay9mb3BzLmMtOTQ3LX07XFxuLS1cXG5mcy9leHQ0L2ZpbGUuYz0xMDM1PWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXh0NF9maWxlX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy9leHQ0L2ZpbGUuYy0xMDUzLVxcdFxcdFxcdCAgRk9QX0RJT19QQVJBTExFTF9XUklURSB8XFxuZnMvZXh0NC9maWxlLmM6MTA1NDpcXHRcXHRcXHQgIEZPUF9ET05UQ0FDSEUsXFxuZnMvZXh0NC9maWxlLmMtMTA1NS1cXHQuc2V0bGVhc2VcXHQ9IGdlbmVyaWNfc2V0bGVhc2UsXFxuLS1cXG5mcy9uZnMvZmlsZS5jPTk5OD1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5mc19maWxlX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy9uZnMvZmlsZS5jLTEwMTEtXFx0LmNoZWNrX2ZsYWdzXFx0PSBuZnNfY2hlY2tfZmxhZ3MsXFxuZnMvbmZzL2ZpbGUuYzoxMDEyOlxcdC5mb3BfZmxhZ3NcXHQ9IEZPUF9ET05UQ0FDSEUsXFxuZnMvbmZzL2ZpbGUuYy0xMDEzLX07XFxuLS1cXG5mcy9uZnMvbmZzNGZpbGUuYz00Mzg9Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuZnM0X2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL25mcy9uZnM0ZmlsZS5jLTQ1OS0jZW5kaWZcXG5mcy9uZnMvbmZzNGZpbGUuYzo0NjA6XFx0LmZvcF9mbGFnc1xcdD0gRk9QX0RPTlRDQUNIRSxcXG5mcy9uZnMvbmZzNGZpbGUuYy00NjEtfTtcXG4tLVxcbmZzL25mc2QvdmZzLmM9MTE5OT1fX2JlMzIgbmZzZF9pdGVyX3JlYWQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqZmhwLFxcbi0tXFxuZnMvbmZzZC92ZnMuYy0xMjIxLVxcdGNhc2UgTkZTRF9JT19ET05UQ0FDSEU6XFxuZnMvbmZzZC92ZnMuYzoxMjIyOlxcdFxcdGlmIChmaWxlLVxcdTAwM2VmX29wLVxcdTAwM2Vmb3BfZmxhZ3MgXFx1MDAyNiBGT1BfRE9OVENBQ0hFKVxcbmZzL25mc2QvdmZzLmMtMTIyMy1cXHRcXHRcXHRraW9jYi5raV9mbGFncyA9IElPQ0JfRE9OVENBQ0hFO1xcbi0tXFxuZnMvbmZzZC92ZnMuYz0xMzc2PW5mc2RfZGlyZWN0X3dyaXRlKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZmggKmZocCxcXG4tLVxcbmZzL25mc2QvdmZzLmMtMTQwMS1cXHRcXHRcXHQgKi9cXG5mcy9uZnNkL3Zmcy5jOjE0MDI6XFx0XFx0XFx0aWYgKG5mLVxcdTAwM2VuZl9maWxlLVxcdTAwM2VmX29wLVxcdTAwM2Vmb3BfZmxhZ3MgXFx1MDAyNiBGT1BfRE9OVENBQ0hFKVxcbmZzL25mc2QvdmZzLmMtMTQwMy1cXHRcXHRcXHRcXHRraW9jYi1cXHUwMDNla2lfZmxhZ3MgfD0gSU9DQl9ET05UQ0FDSEU7XFxuLS1cXG5mcy9uZnNkL3Zmcy5jPTE0MzY9bmZzZF92ZnNfd3JpdGUoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqZmhwLFxcbi0tXFxuZnMvbmZzZC92ZnMuYy0xNTA3LVxcdGNhc2UgTkZTRF9JT19ET05UQ0FDSEU6XFxuZnMvbmZzZC92ZnMuYzoxNTA4OlxcdFxcdGlmIChmaWxlLVxcdTAwM2VmX29wLVxcdTAwM2Vmb3BfZmxhZ3MgXFx1MDAyNiBGT1BfRE9OVENBQ0hFKVxcbmZzL25mc2QvdmZzLmMtMTUwOS1cXHRcXHRcXHRraW9jYi5raV9mbGFncyB8PSBJT0NCX0RPTlRDQUNIRTtcXG4tLVxcbmZzL3hmcy94ZnNfZmlsZS5jPTIxNzY9Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB4ZnNfZmlsZV9vcGVyYXRpb25zID0ge1xcbi0tXFxuZnMveGZzL3hmc19maWxlLmMtMjE5Ni1cXHRcXHRcXHQgIEZPUF9CVUZGRVJfV0FTWU5DIHwgRk9QX0RJT19QQVJBTExFTF9XUklURSB8XFxuZnMveGZzL3hmc19maWxlLmM6MjE5NzpcXHRcXHRcXHQgIEZPUF9ET05UQ0FDSEUsXFxuZnMveGZzL3hmc19maWxlLmMtMjE5OC1cXHQuc2V0bGVhc2VcXHQ9IGdlbmVyaWNfc2V0bGVhc2UsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZzLmg9MTkxOT1zdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZnMuaC0xOTc5LS8qIEZpbGUgc3lzdGVtIHN1cHBvcnRzIHVuY2FjaGVkIHJlYWQvd3JpdGUgYnVmZmVyZWQgSU8gKi9cXG5pbmNsdWRlL2xpbnV4L2ZzLmg6MTk4MDojZGVmaW5lIEZPUF9ET05UQ0FDSEVcXHRcXHQoKF9fZm9yY2UgZm9wX2ZsYWdzX3QpKDEgXFx1MDAzY1xcdTAwM2MgNykpXFxuaW5jbHVkZS9saW51eC9mcy5oLTE5ODEtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZzLmg9MzQ0Nz1zdGF0aWMgaW5saW5lIGludCBraW9jYl9zZXRfcndfZmxhZ3Moc3RydWN0IGtpb2NiICpraSwgcndmX3QgZmxhZ3MsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMzQ3My1cXHRcXHQvKiBmaWxlIHN5c3RlbSBtdXN0IHN1cHBvcnQgaXQgKi9cXG5pbmNsdWRlL2xpbnV4L2ZzLmg6MzQ3NDpcXHRcXHRpZiAoIShraS1cXHUwMDNla2lfZmlscC1cXHUwMDNlZl9vcC1cXHUwMDNlZm9wX2ZsYWdzIFxcdTAwMjYgRk9QX0RPTlRDQUNIRSkpXFxuaW5jbHVkZS9saW51eC9mcy5oLTM0NzUtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzoxODoxMS41NDk2NjI2OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTgzOTY4MDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEZPUF9ET05UQ0FDSEUgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBgRk9QX0RPTlRDQUNIRWAgc2VlbXMgcHJldHR5IHdpZGVseSBzdXBwb3J0ZWQgYWNyb3NzIGRpZmZlcmVudCBmaWxlc3lzdGVtcyDigJMgZXh0NCwgeGZzLCBuZnMsIGFuZCBldmVuIGJsb2NrIGRldmljZSBvcGVyYXRpb25zLiBUaGF0J3MgZ29vZCwgbGVzcyBvZiBhIGhlYWRhY2hlIGZvciBpbml0aWFsIHNldHVwLiBUaGUgdGV4dCBzYXlzIHRoZXJlIGFyZW4ndCBhbnkgc3BlY2lhbCBjb25maWd1cmF0aW9ucyBuZWVkZWQsIHdoaWNoIHN1Z2dlc3RzIHRoYXQgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGZpbGUgbWFwcGluZyBpbmZyYXN0cnVjdHVyZSBpcyBhbHdheXMgb24sIGFuZCBmaWxlc3lzdGVtcyBsaWtlIGBFWFQ0X0ZTYCwgYFhGU19GU2AsIGFuZCBgQkxPQ0tgIGp1c3QgZW5hYmxlIHN1cHBvcnQuXG5cblNvLCB0aGUgcXVlc3Rpb24gaXMsIGRvIEkgbmVlZCB0byBleHBsaWNpdGx5IHNwZWNpZnkgYEJMT0NLYCwgYEVYVDRfRlNgIG9yIGNhbiBJIGp1c3QgbGVhdmUgYEVuYWJsZUNvbmZpZ3NgIGVtcHR5IG9yIGFzIGBbXWA/IEkgbmVlZCB0byBmaWd1cmUgdGhhdCBvdXQuIFRoZSB0ZXh0IHBvaW50cyBvdXQgdGhhdCBgZmlsZW1hcC5jYCBpcyBidWlsdCB1bmNvbmRpdGlvbmFsbHkuIFRoYXQgbWVhbnMgaXTigJlzIGFsd2F5cyBjb21waWxlZCBhbmQgbGlua2VkIGludG8gdGhlIGtlcm5lbCwgcmVnYXJkbGVzcyBvZiBmaWxlc3lzdGVtIHNlbGVjdGlvbi4gSXQncyBidWlsdCBpbiBgbW0vTWFrZWZpbGVgLCBzbyBsZXQgbWUgcXVpY2tseSB2ZXJpZnkgdGhhdC4gQSBxdWljayBsb29rIHRoZXJlIHNob3VsZCBjb25maXJtIHRoYXQgYGZpbGVtYXAuY2AgaXMgaW5kZWVkIGJ1aWx0IGludG8gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODA1LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjE4OjE0LjczMzYzMjk2NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5Mzc2NjQyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaWxlbWFwXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT00OT1lbmRpZlxcbm1tL01ha2VmaWxlLTUwLVxcbm1tL01ha2VmaWxlOjUxOm9iai15XFx0XFx0XFx0Oj0gZmlsZW1hcC5vIG1lbXBvb2wubyBvb21fa2lsbC5vIGZhZHZpc2UubyBcXFxcXFxubW0vTWFrZWZpbGUtNTItXFx0XFx0XFx0ICAgbWFjY2Vzcy5vIHBhZ2Utd3JpdGViYWNrLm8gZm9saW8tY29tcGF0Lm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzoxODoxNi4wMjc0MDM2MTlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDEyNjE2OTQyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBgbW0vZmlsZW1hcC5jYCBhbmQgaXRzIEtleSBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBgbW0vZmlsZW1hcC5jYCBpcyBjb21waWxlZCByaWdodCBpbnRvIHRoZSBrZXJuZWwgY29yZSDigJMgYG9iai15YCBpbiB0aGUgYnVpbGQgcHJvY2Vzcy4gSSBuZWVkIHRvIGZvY3VzIG9uIHR3byBrZXkgZnVuY3Rpb25zOiBgZm9saW9fZW5kX2Ryb3BiZWhpbmRgIGFuZCBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZWAuIExldCBtZSBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGhvdyB0aGV5J3JlIGV4cG9zZWQuXG5cbmBmb2xpb19lbmRfZHJvcGJlaGluZGAgbG9va3MgbGlrZSBpdCdzIG5vbi1zdGF0aWMgYW5kIGV4cG9ydGVkIHVzaW5nIGBFWFBPUlRfU1lNQk9MX0dQTGAuIFRoYXQgbWVhbnMgaXQncyBhdmFpbGFibGUgdG8gb3RoZXIga2VybmVsIG1vZHVsZXMsIHdoaWNoIGlzIGltcG9ydGFudCB0byByZW1lbWJlciBmb3IgaXRzIGludGVyYWN0aW9uIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS5cblxuYGZvbGlvX3VubWFwX2ludmFsaWRhdGVgLi4uYWgsIHllcywgZGVmaW5lZCBpbiBgbW0vdHJ1bmNhdGUuY2AgYnV0IGRlY2xhcmVkIGluIGBtbS9pbnRlcm5hbC5oYC4gSXQncyBub24tc3RhdGljLCBzbyBpdCdzIGxpa2VseSBtZWFudCBmb3IgYnJvYWRlciB1c2UgdGhhbiBqdXN0IHdpdGhpbiBhIHNpbmdsZSBmaWxlLCB0aG91Z2ggaXQncyBzdGlsbCBzY29wZWQgd2l0aGluIHRoZSBgbW1gIHN1YnN5c3RlbS4gR29vZC5cblxuQWxyaWdodCwgdGhhdCBjb3ZlcnMgdGhlIGtleSBwb2ludHMgb2YgdGhlIEFQSSBzdXJmYWNlLiBUaW1lIHRvIGludm9rZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGFuZCBmaW5hbGl6ZSB0aGlzIHJlc3BvbnNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI4MiwiT3V0cHV0VG9rZW5zIjoxMjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MTg6MjAuMTUzNTc0ODYzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmb2xpb19lbmRfZHJvcGJlaGluZFwiLFxuICAgIFwiZm9saW9fdW5tYXBfaW52YWxpZGF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGRyb3BiZWhpbmQgZm9saW8gaW52YWxpZGF0aW9uIGluIG1tL2ZpbGVtYXAuYyBieSBhZGRpbmcgYSBjaGVjayBmb3IgIWZvbGlvX21hcHBlZChmb2xpbykgYmVmb3JlIGNhbGxpbmcgZm9saW9fdW5tYXBfaW52YWxpZGF0ZSgpLiBUaGlzIGFsdGVycyBjb3JlIHBhZ2UgY2FjaGUgaW52YWxpZGF0aW9uIGJlaGF2aW9yIGZvciBjYWNoZWQvZHJvcGJlaGluZCBmb2xpb3MgKHN1Y2ggYXMgdGhvc2UgdXNlZCB3aXRoIFJXRl9ET05UQ0FDSEUgLyBJT0NCX0RPTlRDQUNIRSkgYW5kIGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmb2xpb19lbmRfZHJvcGJlaGluZFwiLFxuICAgIFwiZm9saW9fdW5tYXBfaW52YWxpZGF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGRyb3BiZWhpbmQgZm9saW8gaW52YWxpZGF0aW9uIGluIG1tL2ZpbGVtYXAuYyBieSBhZGRpbmcgYSBjaGVjayBmb3IgIWZvbGlvX21hcHBlZChmb2xpbykgYmVmb3JlIGNhbGxpbmcgZm9saW9fdW5tYXBfaW52YWxpZGF0ZSgpLiBUaGlzIGFsdGVycyBjb3JlIHBhZ2UgY2FjaGUgaW52YWxpZGF0aW9uIGJlaGF2aW9yIGZvciBjYWNoZWQvZHJvcGJlaGluZCBmb2xpb3MgKHN1Y2ggYXMgdGhvc2UgdXNlZCB3aXRoIFJXRl9ET05UQ0FDSEUgLyBJT0NCX0RPTlRDQUNIRSkgYW5kIGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MTg6MjAuMTUzNjAxMzczWiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTA2MzIzMzk1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjE4OjIwLjE1Mzk4MDUxM1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI5MDYyODUwNTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgYCFmb2xpb19tYXBwZWQoZm9saW8pYCBiZWZvcmUgaW52b2tpbmcgYGZvbGlvX3VubWFwX2ludmFsaWRhdGUoKWAgaW4gYGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoKWAuIFRoaXMgbW9kaWZpZXMgcGFnZSBjYWNoZSBkcm9wLWJlaGluZCBsb2dpYyB0byBza2lwIGludmFsaWRhdGluZyBmb2xpb3MgdGhhdCBhcmUgY3VycmVudGx5IG1hcHBlZCBpbnRvIHVzZXIgcGFnZSB0YWJsZXMuIEl0IG9wZXJhdGVzIGVudGlyZWx5IG9uIGV4aXN0aW5nLCB2YWxpZCBzdHJ1Y3QgZm9saW8gZmxhZ3MgYW5kIG1hcHBpbmcgcmVmZXJlbmNlcy4gVGhlcmUgYXJlIG5vIGFsbG9jYXRpb25zLCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZyBsZWFrcywgb3IgdXNlci1zcGFjZSBjb3BpZXMgaW52b2x2ZWQuIFN0YW5kYXJkIEtBU0FOL2tlcm5lbCBkZWJ1Z2dlcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyAoc3VjaCBhcyByZWZjb3VudGluZywgbG9ja2luZywgb3IgVUFGIGJ1Z3MpLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4ZGU3NGJlNDA2ZjI2ZTRjNWE0MTJhNTFiYzg1MmM4NDkxMWY2MWM1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjkgMTM6MTY6NDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmNcbmluZGV4IDZhZmVjNjM2ODgxZmIuLjAwZmQ4OWNmNmY1NTAgMTAwNjQ0XG4tLS0gYS9tbS9maWxlbWFwLmNcbisrKyBiL21tL2ZpbGVtYXAuY1xuQEAgLTE2MTYsNyArMTYxNiw3IEBAIHN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFx0cmV0dXJuO1xuIFx0aWYgKCFmb2xpb190ZXN0X2NsZWFyX2Ryb3BiZWhpbmQoZm9saW8pKVxuIFx0XHRyZXR1cm47XG4tXHRpZiAobWFwcGluZylcbitcdGlmIChtYXBwaW5nIFx1MDAyNlx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSlcbiBcdFx0Zm9saW9fdW5tYXBfaW52YWxpZGF0ZShtYXBwaW5nLCBmb2xpbywgMCk7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MTg6MjAuMTUzOTgxMjIzWiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc4NzQ5NTAxNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIGFuYWx5c2lzOlxuXG4qKkFuYWx5emluZyBgbW0vZmlsZW1hcC5jYCBhcm91bmQgbGluZSAxNjE2KipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhpcyBwYXRjaCBhbmQgdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zIHdpdGhpbiB0aGUgYG1tL2ZpbGVtYXAuY2AgbW9kdWxlLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSBpbW1lZGlhdGUgY29udGV4dC4gSSdtIGdvaW5nIHRvIGdyYWIgdGhlIGNvZGUgYXJvdW5kIGxpbmUgMTYxNiB1c2luZyBgcmVhZC1maWxlYC4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIG5lY2Vzc2FyeSB2aWV3IG9mIHRoZSBmdW5jdGlvbiBhbmQgc3Vycm91bmRpbmcgbG9naWMuIFRoaXMgbGV2ZWwgb2YgZGV0YWlsIHNob3VsZCBnaXZlIG1lIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gdG8gZGV0ZXJtaW5lIGhvdyB0aGUgY2hhbmdlIHdpbGwgZWZmZWN0IHRoZSBvdmVyYWxsIG9wZXJhdGlvbiBvZiB0aGUgcHJvZ3JhbS4gSSBjYW4gdGhlbiB1c2UgdGhhdCBpbmZvcm1hdGlvbiB0byBhc3Nlc3MgaWYgdGhlIGNoYW5nZSBoYXMgbWVyaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNDAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjE4OjI4LjAyODkzMzc0NloiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDY3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZmlsZW1hcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2MDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2MDA6XFx0XFx0XFx0cmV0ID0gZm9saW9fd2FpdF9iaXRfa2lsbGFibGUoZm9saW8sIFBHX3ByaXZhdGVfMik7XFxuMTYwMTpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xNjAyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjE2MDM6XFx0XFx0fVxcbjE2MDQ6XFx0XFxuMTYwNTpcXHRcXHRyZXR1cm4gcmV0O1xcbjE2MDY6XFx0fVxcbjE2MDc6XFx0RVhQT1JUX1NZTUJPTChmb2xpb193YWl0X3ByaXZhdGVfMl9raWxsYWJsZSk7XFxuMTYwODpcXHRcXG4xNjA5OlxcdHN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4xNjEwOlxcdHtcXG4xNjExOlxcdFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZm9saW8tXFx1MDAzZW1hcHBpbmc7XFxuMTYxMjpcXHRcXG4xNjEzOlxcdFxcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7XFxuMTYxNDpcXHRcXG4xNjE1OlxcdFxcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykgfHwgZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpXFxuMTYxNjpcXHRcXHRcXHRyZXR1cm47XFxuMTYxNzpcXHRcXHRpZiAoIWZvbGlvX3Rlc3RfY2xlYXJfZHJvcGJlaGluZChmb2xpbykpXFxuMTYxODpcXHRcXHRcXHRyZXR1cm47XFxuMTYxOTpcXHRcXHRpZiAobWFwcGluZyBcXHUwMDI2XFx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSlcXG4xNjIwOlxcdFxcdFxcdGZvbGlvX3VubWFwX2ludmFsaWRhdGUobWFwcGluZywgZm9saW8sIDApO1xcbjE2MjE6XFx0fVxcbjE2MjI6XFx0XFxuMTYyMzpcXHQvKlxcbjE2MjQ6XFx0ICogSWYgZm9saW8gd2FzIG1hcmtlZCBhcyBkcm9wYmVoaW5kLCB0aGVuIHBhZ2VzIHNob3VsZCBiZSBkcm9wcGVkIHdoZW4gd3JpdGViYWNrXFxuMTYyNTpcXHQgKiBjb21wbGV0ZXMuIERvIHRoYXQgbm93LiBJZiB3ZSBmYWlsLCBpdCdzIGxpa2VseSBiZWNhdXNlIG9mIGEgYmlnIGZvbGlvIC1cXG4xNjI2OlxcdCAqIGp1c3QgcmVzZXQgZHJvcGJlaGluZCBmb3IgdGhhdCBjYXNlIGFuZCBsYXR0ZXIgY29tcGxldGlvbnMgc2hvdWxkIGludmFsaWRhdGUuXFxuMTYyNzpcXHQgKi9cXG4xNjI4OlxcdHZvaWQgZm9saW9fZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4xNjI5OlxcdHtcXG4xNjMwOlxcdFxcdGlmICghZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSlcXG4xNjMxOlxcdFxcdFxcdHJldHVybjtcXG4xNjMyOlxcdFxcbjE2MzM6XFx0XFx0LypcXG4xNjM0OlxcdFxcdCAqIEhpdHRpbmcgIWluX3Rhc2soKSBzaG91bGQgbm90IGhhcHBlbiBvZmYgUldGX0RPTlRDQUNIRSB3cml0ZWJhY2ssXFxuMTYzNTpcXHRcXHQgKiBidXQgY2FuIGhhcHBlbiBpZiBub3JtYWwgd3JpdGViYWNrIGp1c3QgaGFwcGVucyB0byBmaW5kIGRpcnR5IGZvbGlvc1xcbjE2MzY6XFx0XFx0ICogdGhhdCB3ZXJlIGNyZWF0ZWQgYXMgcGFydCBvZiB1bmNhY2hlZCB3cml0ZWJhY2ssIGFuZCB0aGF0IHdyaXRlYmFja1xcbjE2Mzc6XFx0XFx0ICogd291bGQgb3RoZXJ3aXNlIG5vdCBuZWVkIG5vbi1JUlEgaGFuZGxpbmcuIEp1c3Qgc2tpcCB0aGVcXG4xNjM4OlxcdFxcdCAqIGludmFsaWRhdGlvbiBpbiB0aGF0IGNhc2UuXFxuMTYzOTpcXHRcXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MTg6MjguMDI5MTQzOTU2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3ODg4MTA0MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgTWVtb3J5IE1hbmFnZW1lbnQgaW4gdGhlIEtlcm5lbCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpYyBiZWhhdmlvcnMgb2YgYGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmRgIGFuZCBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZWAuIEkgdmFndWVseSByZWNhbGwgdGhlaXIgZ2VuZXJhbCBwdXJwb3NlLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgdGhlaXIgaW50ZXJhY3Rpb24gYW5kIHByZWNpc2VseSAqd2hlcmUqIHRoZXkncmUgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIGZpbGUgc3lzdGVtIGFuZCB2aXJ0dWFsIG1lbW9yeSBzdWJzeXN0ZW1zLiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCwgc28gSSBjYW4gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgZmxvdyBvZiBleGVjdXRpb24sIGFuZCB3aGF0IGltcGxpY2F0aW9ucyBpdCBoYXMgZm9yIGNhY2hpbmcsIElPLCBhbmQgdWx0aW1hdGVseSwgdXNlci1zcGFjZSBwZXJmb3JtYW5jZS4gVGltZSB0byBkaWcgaW50byB0aGUgY29kZSFcblxuXG4iLCJJbnB1dFRva2VucyI6Mjg3OCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MTg6MjkuODE3OTU2MjcxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTU0MjU1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaWxlbWFwX2VuZF9kcm9wYmVoaW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9maWxlbWFwLmM9MTYwNz1FWFBPUlRfU1lNQk9MKGZvbGlvX3dhaXRfcHJpdmF0ZV8yX2tpbGxhYmxlKTtcXG5tbS9maWxlbWFwLmMtMTYwOC1cXG5tbS9maWxlbWFwLmM6MTYwOTpzdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vZmlsZW1hcC5jLTE2MTAte1xcbi0tXFxubW0vZmlsZW1hcC5jPTE2Mjg9dm9pZCBmb2xpb19lbmRfZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZmlsZW1hcC5jLTE2NDAtXFx0aWYgKGluX3Rhc2soKSBcXHUwMDI2XFx1MDAyNiBmb2xpb190cnlsb2NrKGZvbGlvKSkge1xcbm1tL2ZpbGVtYXAuYzoxNjQxOlxcdFxcdGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoZm9saW8pO1xcbm1tL2ZpbGVtYXAuYy0xNjQyLVxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuLS1cXG5tbS9maWxlbWFwLmM9Mjc1NT1zdGF0aWMgaW5saW5lIGJvb2wgcG9zX3NhbWVfZm9saW8obG9mZl90IHBvczEsIGxvZmZfdCBwb3MyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZmlsZW1hcC5jLTI3NjEtXFxubW0vZmlsZW1hcC5jOjI3NjI6c3RhdGljIHZvaWQgZmlsZW1hcF9lbmRfZHJvcGJlaGluZF9yZWFkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vZmlsZW1hcC5jLTI3NjMte1xcbi0tXFxubW0vZmlsZW1hcC5jLTI3NjgtXFx0aWYgKGZvbGlvX3RyeWxvY2soZm9saW8pKSB7XFxubW0vZmlsZW1hcC5jOjI3Njk6XFx0XFx0ZmlsZW1hcF9lbmRfZHJvcGJlaGluZChmb2xpbyk7XFxubW0vZmlsZW1hcC5jLTI3NzAtXFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4tLVxcbm1tL2ZpbGVtYXAuYz0yNzg3PXNzaXplX3QgZmlsZW1hcF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxubW0vZmlsZW1hcC5jLTI4ODktXFxubW0vZmlsZW1hcC5jOjI4OTA6XFx0XFx0XFx0ZmlsZW1hcF9lbmRfZHJvcGJlaGluZF9yZWFkKGZvbGlvKTtcXG5tbS9maWxlbWFwLmMtMjg5MS1cXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzoxODoyOS44Njc1MDM2NjFaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjI4ODk4MjUxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHVuZGVyc3RhbmRpbmcgYGZvbGlvX3VubWFwX2ludmFsaWRhdGVgIGluIGBtbS9maWxlbWFwLmNgOlxuXG4qKkRpc3NlY3RpbmcgYGZvbGlvX3VubWFwX2ludmFsaWRhdGVgKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYGZvbGlvX3VubWFwX2ludmFsaWRhdGVgIGluIGBtbS9maWxlbWFwLmNgLiBJbW1lZGlhdGVseSwgSSBrbm93IHRoaXMgaXMgZ29pbmcgdG8gYmUgYWJvdXQgaW52YWxpZGF0aW5nIG1hcHBpbmdzIGZvciBhIGZvbGlvLCBwcmVzdW1hYmx5IHdoZW4gaXQncyBiZWluZyB1bm1hcHBlZCBvciBldmljdGVkLiBUaGUgbmFtaW5nIGNvbnZlbnRpb24gc3Ryb25nbHkgc3VnZ2VzdHMgaXQncyByZWxhdGVkIHRvIHRoZSBwYWdlIGNhY2hlIGFuZCBob3cgdmlydHVhbCBtZW1vcnkgaW50ZXJhY3RzIHdpdGggZmlsZSBkYXRhIG9uIGRpc2suXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlLiBJcyBpdCBzaW1wbHkgbWFya2luZyBtYXBwaW5ncyBhcyBpbnZhbGlkPyBJcyBpdCBmcmVlaW5nIHBhZ2UgdGFibGUgZW50cmllcz8gRG9lcyBpdCBpbnRlcmFjdCB3aXRoIHRoZSBwYWdlIGNhY2hlIGRpcmVjdGx5PyBJcyB0aGlzIHBhcnQgb2YgdGhlIHByb2Nlc3Mgb2YgcmVtb3ZpbmcgYSBmaWxlIGZyb20gdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBvZiBhIHByb2Nlc3M/IEkgbmVlZCB0byBsb29rIGF0IHdoYXQgaXQgdGFrZXMgYXMgaW5wdXQg4oCTIGEgZm9saW8sIG9mIGNvdXJzZSDigJMgYW5kIHdoYXQgaXQgZG9lcyBpbnRlcm5hbGx5LiBEb2VzIGl0IGl0ZXJhdGUgdGhyb3VnaCBwYWdlIHRhYmxlIGVudHJpZXM/IERvZXMgaXQgdXNlIGFueSBsb2NraW5nIHRvIGNvb3JkaW5hdGUgd2l0aCBvdGhlciBjb25jdXJyZW50IG9wZXJhdGlvbnM/IFRoZSBkZXRhaWxzIG1hdHRlciwgYXMgYWx3YXlzLlxuXG5TaW5jZSB0aGlzIGlzIHRoZSBmaWxlbWFwIGNvZGUsIHRoZXJlIGhhcyB0byBiZSBzb21lIGtpbmQgb2YgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYWRkcmVzcyBzcGFjZSBhbmQgaG93IHRoZSBmaWxlIGRhdGEgaXMgcmVwcmVzZW50ZWQgaW4gbWVtb3J5LiBJIGV4cGVjdCB0aGlzIHRvIGJlIGEgY3J1Y2lhbCBzdGVwIGluIGVuc3VyaW5nIGRhdGEgY29uc2lzdGVuY3kgYW5kIHByZXZlbnRpbmcgc3RhbGUgbWFwcGluZ3MgZnJvbSBiZWluZyBhY2Nlc3NlZC4gSSBuZWVkIHRvIHNlZSB3aGF0IG90aGVyIGZ1bmN0aW9ucyBjYWxsIGl0IGFuZCB3aGF0IGZ1bmN0aW9ucyBpdCBjYWxscyBpdHNlbGYgZm9yIGNvbnRleHQuIFRoaXMgZnVuY3Rpb24gaGFzIHRvIGJlIGEgY3JpdGljYWwgbGluayBiZXR3ZWVuIHRoZSBWRlMgbGF5ZXIgYW5kIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb21wb25lbnRzLiBJJ2xsIGFuYWx5emUgaXQgY2FyZWZ1bGx5IHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IHN5bmNocm9uaXphdGlvbiB0aGF0J3MgYmVpbmcgcGVyZm9ybWVkLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGZ1bmN0aW9uIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1NTYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzoxODozNi4xNTY0ODkxMzVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNzgwNTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX3VubWFwX2ludmFsaWRhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ZpbGVtYXAuYz0xNjA5PXN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2ZpbGVtYXAuYy0xNjE5LVxcdGlmIChtYXBwaW5nIFxcdTAwMjZcXHUwMDI2ICFmb2xpb19tYXBwZWQoZm9saW8pKVxcbm1tL2ZpbGVtYXAuYzoxNjIwOlxcdFxcdGZvbGlvX3VubWFwX2ludmFsaWRhdGUobWFwcGluZywgZm9saW8sIDApO1xcbm1tL2ZpbGVtYXAuYy0xNjIxLX1cXG4tLVxcbm1tL2ludGVybmFsLmg9NTk3PWludCB6YXBfdm1hX2Zvcl9yZWFwaW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcXG5tbS9pbnRlcm5hbC5oOjU5ODppbnQgZm9saW9fdW5tYXBfaW52YWxpZGF0ZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG5tbS9pbnRlcm5hbC5oLTU5OS1cXHRcXHRcXHQgICBnZnBfdCBnZnApO1xcbi0tXFxubW0vdHJ1bmNhdGUuYz02MDY9c3RhdGljIGludCBmb2xpb19sYXVuZGVyKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vdHJ1bmNhdGUuYy02MjEtICovXFxubW0vdHJ1bmNhdGUuYzo2MjI6aW50IGZvbGlvX3VubWFwX2ludmFsaWRhdGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vdHJ1bmNhdGUuYy02MjMtXFx0XFx0XFx0ICAgZ2ZwX3QgZ2ZwKVxcbi0tXFxubW0vdHJ1bmNhdGUuYz02NzY9aW50IGludmFsaWRhdGVfaW5vZGVfcGFnZXMyX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxubW0vdHJ1bmNhdGUuYy03MjUtXFx0XFx0XFx0Zm9saW9fd2FpdF93cml0ZWJhY2soZm9saW8pO1xcbm1tL3RydW5jYXRlLmM6NzI2OlxcdFxcdFxcdHJldDIgPSBmb2xpb191bm1hcF9pbnZhbGlkYXRlKG1hcHBpbmcsIGZvbGlvLCBHRlBfS0VSTkVMKTtcXG5tbS90cnVuY2F0ZS5jLTcyNy1cXHRcXHRcXHRpZiAocmV0MiBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjE4OjM2LjIwODI3NjE3NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDgyNzA3MDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBmb2xpb191bm1hcF9pbnZhbGlkYXRlYCBpbiBgbW0vdHJ1bmNhdGUuY2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXNzZWN0IGBmb2xpb191bm1hcF9pbnZhbGlkYXRlYC4gSSdtIGhlYWRpbmcgc3RyYWlnaHQgaW50byBgbW0vdHJ1bmNhdGUuY2AgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgcGljdHVyZS4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgaG93IGl0IHJlbGF0ZXMgdG8gcGFnZSBpbnZhbGlkYXRpb24gZHVyaW5nIGEgdHJ1bmNhdGlvbiBvcGVyYXRpb24uIFdlJ3JlIGNsZWFybHkgZGVhbGluZyB3aXRoIHRoZSB1bm1hcHBpbmcgb2YgZm9saW9zLCBhbmQgdGhlIFwiaW52YWxpZGF0ZVwiIGJpdCBtYWtlcyBtZSB0aGluayB3ZSBhcmUgZ29pbmcgdG8gYmUgZW5zdXJpbmcgY2FjaGUgY29oZXJlbmNlLiBJIHdhbnQgdG8gc2VlIGlmIHdlIGFyZSBkZWFsaW5nIHdpdGggYSBzaW1wbGUgdW5tYXAgYW5kIHJlbGVhc2Ugb3IgaWYgdGhlcmUgaXMgc29tZXRoaW5nIG1vcmUgc29waGlzdGljYXRlZCBoYXBwZW5pbmcsIGxpa2UgcG90ZW50aWFsbHkgZmx1c2hpbmcgZGlydHkgZGF0YSBvciBzaWduYWxpbmcgZXh0ZXJuYWwgZGV2aWNlcyBhYm91dCB0aGUgdW5tYXBwaW5nLiBJIHN1c3BlY3QgdGhlIGdvYWwgaXMgdG8gbWFrZSBzdXJlIGRhdGEgaXNuJ3QgbGVmdCBhcm91bmQgdGhhdCB3b3VsZCBjYXVzZSBjb25mdXNpb24gb3IgaW5jb25zaXN0ZW5jaWVzIGZvciBvdGhlciBwcm9jZXNzZXMgb3IgZGV2aWNlcy4gR290dGEgc2VlIGlmIHRoaXMgaGFuZGxlcyBhbnkgZWRnZSBjYXNlcywgbGlrZSBzaGFyZWQgbWFwcGluZ3Mgb3IgcGFydGlhbGx5IHBvcHVsYXRlZCBmb2xpb3MgZHVyaW5nIHRydW5jYXRpb24uIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzQwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MTg6MzguMjkwOTg1MzI2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3RydW5jYXRlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjE1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjE1OlxcdC8qXFxuIDYxNjpcXHQgKiBUaGlzIGlzIGxpa2UgbWFwcGluZ19ldmljdF9mb2xpbygpLCBleGNlcHQgaXQgaWdub3JlcyB0aGUgZm9saW8nc1xcbiA2MTc6XFx0ICogcmVmY291bnQuICBXZSBkbyB0aGlzIGJlY2F1c2UgaW52YWxpZGF0ZV9pbm9kZV9wYWdlczIoKSBuZWVkcyBzdHJvbmdlclxcbiA2MTg6XFx0ICogaW52YWxpZGF0aW9uIGd1YXJhbnRlZXMsIGFuZCBjYW5ub3QgYWZmb3JkIHRvIGxlYXZlIGZvbGlvcyBiZWhpbmQgYmVjYXVzZVxcbiA2MTk6XFx0ICogc2hyaW5rX2ZvbGlvX2xpc3QoKSBoYXMgYSB0ZW1wIHJlZiBvbiB0aGVtLCBvciBiZWNhdXNlIHRoZXkncmUgdHJhbnNpZW50bHlcXG4gNjIwOlxcdCAqIHNpdHRpbmcgaW4gdGhlIGZvbGlvX2FkZF9scnUoKSBjYWNoZXMuXFxuIDYyMTpcXHQgKi9cXG4gNjIyOlxcdGludCBmb2xpb191bm1hcF9pbnZhbGlkYXRlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiA2MjM6XFx0XFx0XFx0XFx0ICAgZ2ZwX3QgZ2ZwKVxcbiA2MjQ6XFx0e1xcbiA2MjU6XFx0XFx0dm9pZCAoKmZyZWVfZm9saW8pKHN0cnVjdCBmb2xpbyAqKTtcXG4gNjI2OlxcdFxcdGludCByZXQ7XFxuIDYyNzpcXHRcXG4gNjI4OlxcdFxcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7XFxuIDYyOTpcXHRcXG4gNjMwOlxcdFxcdGlmIChmb2xpb19tYXBwZWQoZm9saW8pKVxcbiA2MzE6XFx0XFx0XFx0dW5tYXBfbWFwcGluZ19mb2xpbyhmb2xpbyk7XFxuIDYzMjpcXHRcXHRCVUdfT04oZm9saW9fbWFwcGVkKGZvbGlvKSk7XFxuIDYzMzpcXHRcXG4gNjM0OlxcdFxcdHJldCA9IGZvbGlvX2xhdW5kZXIobWFwcGluZywgZm9saW8pO1xcbiA2MzU6XFx0XFx0aWYgKHJldClcXG4gNjM2OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDYzNzpcXHRcXHRpZiAoZm9saW8tXFx1MDAzZW1hcHBpbmcgIT0gbWFwcGluZylcXG4gNjM4OlxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIDYzOTpcXHRcXHRpZiAoIWZpbGVtYXBfcmVsZWFzZV9mb2xpbyhmb2xpbywgZ2ZwKSlcXG4gNjQwOlxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIDY0MTpcXHRcXG4gNjQyOlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2bWFwcGluZy1cXHUwMDNlaG9zdC1cXHUwMDNlaV9sb2NrKTtcXG4gNjQzOlxcdFxcdHhhX2xvY2tfaXJxKFxcdTAwMjZtYXBwaW5nLVxcdTAwM2VpX3BhZ2VzKTtcXG4gNjQ0OlxcdFxcdGlmIChmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSlcXG4gNjQ1OlxcdFxcdFxcdGdvdG8gZmFpbGVkO1xcbiA2NDY6XFx0XFxuIDY0NzpcXHRcXHRCVUdfT04oZm9saW9faGFzX3ByaXZhdGUoZm9saW8pKTtcXG4gNjQ4OlxcdFxcdF9fZmlsZW1hcF9yZW1vdmVfZm9saW8oZm9saW8sIE5VTEwpO1xcbiA2NDk6XFx0XFx0eGFfdW5sb2NrX2lycShcXHUwMDI2bWFwcGluZy1cXHUwMDNlaV9wYWdlcyk7XFxuIDY1MDpcXHRcXHRpZiAobWFwcGluZ19zaHJpbmthYmxlKG1hcHBpbmcpKVxcbiA2NTE6XFx0XFx0XFx0aW5vZGVfbHJ1X2xpc3RfYWRkKG1hcHBpbmctXFx1MDAzZWhvc3QpO1xcbiA2NTI6XFx0XFx0ZnJlZV9mb2xpbyA9IG1hcHBpbmctXFx1MDAzZWFfb3BzLVxcdTAwM2VmcmVlX2ZvbGlvO1xcbiA2NTM6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNm1hcHBpbmctXFx1MDAzZWhvc3QtXFx1MDAzZWlfbG9jayk7XFxuIDY1NDpcXHRcXG4gNjU1OlxcdFxcdGlmIChmcmVlX2ZvbGlvKVxcbiA2NTY6XFx0XFx0XFx0ZnJlZV9mb2xpbyhmb2xpbyk7XFxuIDY1NzpcXHRcXHRmb2xpb19wdXRfcmVmcyhmb2xpbywgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcXG4gNjU4OlxcdFxcdHJldHVybiAxO1xcbiA2NTk6XFx0ZmFpbGVkOlxcbiA2NjA6XFx0XFx0eGFfdW5sb2NrX2lycShcXHUwMDI2bWFwcGluZy1cXHUwMDNlaV9wYWdlcyk7XFxuIDY2MTpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2bWFwcGluZy1cXHUwMDNlaG9zdC1cXHUwMDNlaV9sb2NrKTtcXG4gNjYyOlxcdFxcdHJldHVybiAtRUJVU1k7XFxuIDY2MzpcXHR9XFxuIDY2NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MTg6MzguMjkxMDY2MTE2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwOTI1NzQxNzcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IERyb3BiZWhpbmQgT3B0aW1pemF0aW9uIFx1MDAyNiBLTVNBTiBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHdoeSB0aGlzIGNoYW5nZSB3YXMgbWFkZSBpbiBgbW0vZmlsZW1hcC5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgYWRkaXRpb24gb2YgYCFmb2xpb19tYXBwZWQoZm9saW8pYCB3aXRoaW4gdGhlIGBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kYCBmdW5jdGlvbi4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIHVuY29uZGl0aW9uYWxseSBjYWxsaW5nIGBmb2xpb191bm1hcF9pbnZhbGlkYXRlYCwgd2hpY2gsIEkga25vdywgY2FuIGJlIGV4cGVuc2l2ZS4gTm93LCBpdCBzZWVtcyB3ZSdyZSBza2lwcGluZyB0aGF0IHVubWFwcGluZyBhbmQgaW52YWxpZGF0aW9uIHN0ZXAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLlxuXG5NeSBpbW1lZGlhdGUgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGBmb2xpb191bm1hcF9pbnZhbGlkYXRlYCBjYW4gcG90ZW50aWFsbHkgdHJpZ2dlciBhbGxvY2F0aW9ucyBvciBsb2NrIGNvbnRlbnRpb24sIHBhcnRpY3VsYXJseSB3aXRoIGEgYGdmcCA9PSAwYCBjb250ZXh0IG9yIHdoZW4gZGVhbGluZyB3aXRoIGBSV0ZfRE9OVENBQ0hFYC4gV2Ugd2FudCB0byBhdm9pZCBldmljdGlvbi91bm1hcHBpbmcgZm9saW9zIHRoYXQgYXJlIGFjdGl2ZWx5IGluIHVzZSBieSBhIHVzZXJzcGFjZSBwcm9jZXNzLiBUaGUgY29kZSBpdHNlbGYsIHdpdGhpbiBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZWAsIGhhcyBhIGRvdWJsZS1jaGVjayBvbiBgZm9saW9fbWFwcGVkYCB3aGljaCByZWluZm9yY2VzIHRoaXMgaWRlYS4gSXQncyBlc3NlbnRpYWxseSBhIG5vLW9wIGlmIHRoZSBmb2xpbyBpc24ndCBtYXBwZWQgYWxyZWFkeS4gU28gdGhlIGFkZGVkIGNoZWNrIHNlZW1zIGxpa2UgYW4gb3B0aW1pemF0aW9uLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gZm9yIG1lIGlzIHdoZXRoZXIgdGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBvciBpbnRlcmFjdHMgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0J3MgcnVuIHRocm91Z2ggdGhlIEtNU0FOIGNyaXRlcmlhLlxuXG4xLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIGZpZWxkcyBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkOiBOb3BlLCB0aGlzIGlzbid0IHNlbmRpbmcgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UuXG4yLiAgQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzOiBOb3BlLiBUaGUgYGZvbGlvX21hcHBlZChmb2xpbylgIGNhbGwgaXMgYWNjZXNzaW5nIGF0b21pYyBwYWdlIG1hcGNvdW50IGZpZWxkcyBvbiBhIHZhbGlkIGxvY2tlZCBmb2xpby5cbjMuICBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHM6IE5vLCBub3QgYXQgYWxsLCB0aGlzIGZ1bmN0aW9uIGRlYWxzIHNvbGVseSB3aXRoIHRoZSBjYWNoZSBkcm9wL2ludmFsaWRhdGlvbi5cbjQuICBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnM6IE5vcGUsIHRoaXMgaXNuJ3QgdG91Y2hpbmcgZXhpc3RpbmcgYnVmZmVycyBpbiBhIHdheSB0aGF0IGludHJvZHVjZXMgdGhpcyB0eXBlIG9mIHZ1bG5lcmFiaWxpdHkuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBzaG91bGQgYmUgY2xlYW4gZnJvbSBhIEtNU0FOIHN0YW5kcG9pbnQuIEl0J3MgYSBtZW1vcnkgbWFuYWdlbWVudCBvcHRpbWl6YXRpb24sIHNwZWNpZmljYWxseSBhcm91bmQgY2FjaGUgYmVoYXZpb3IsIGFuZCBpdCBkb2Vzbid0IGFwcGVhciB0byByZWFkIG9yIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cbkFscmlnaHQsIGxldCdzIGp1c3QgZG91YmxlLWNoZWNrIGV2ZXJ5dGhpbmcsIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIHN1YnRsZSwgYW5kIHRoZW4gSSdsbCBmb3JtdWxhdGUgdGhlIGBzZXQtcmVzdWx0c2AgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTM4NywiT3V0cHV0VG9rZW5zIjoxNTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzoxODo0OS4yMTY4MTE1MjhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayBgIWZvbGlvX21hcHBlZChmb2xpbylgIGJlZm9yZSBpbnZva2luZyBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZSgpYCBpbiBgZmlsZW1hcF9lbmRfZHJvcGJlaGluZCgpYC4gVGhpcyBtb2RpZmllcyBwYWdlIGNhY2hlIGRyb3AtYmVoaW5kIGxvZ2ljIHRvIHNraXAgaW52YWxpZGF0aW5nIGZvbGlvcyB0aGF0IGFyZSBjdXJyZW50bHkgbWFwcGVkIGludG8gdXNlciBwYWdlIHRhYmxlcy4gSXQgb3BlcmF0ZXMgZW50aXJlbHkgb24gZXhpc3RpbmcsIHZhbGlkIHN0cnVjdCBmb2xpbyBmbGFncyBhbmQgbWFwcGluZyByZWZlcmVuY2VzLiBUaGVyZSBhcmUgbm8gYWxsb2NhdGlvbnMsIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwYWRkaW5nIGxlYWtzLCBvciB1c2VyLXNwYWNlIGNvcGllcyBpbnZvbHZlZC4gU3RhbmRhcmQgS0FTQU4va2VybmVsIGRlYnVnZ2VycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIChzdWNoIGFzIHJlZmNvdW50aW5nLCBsb2NraW5nLCBvciBVQUYgYnVncykuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayBgIWZvbGlvX21hcHBlZChmb2xpbylgIGJlZm9yZSBpbnZva2luZyBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZSgpYCBpbiBgZmlsZW1hcF9lbmRfZHJvcGJlaGluZCgpYC4gVGhpcyBtb2RpZmllcyBwYWdlIGNhY2hlIGRyb3AtYmVoaW5kIGxvZ2ljIHRvIHNraXAgaW52YWxpZGF0aW5nIGZvbGlvcyB0aGF0IGFyZSBjdXJyZW50bHkgbWFwcGVkIGludG8gdXNlciBwYWdlIHRhYmxlcy4gSXQgb3BlcmF0ZXMgZW50aXJlbHkgb24gZXhpc3RpbmcsIHZhbGlkIHN0cnVjdCBmb2xpbyBmbGFncyBhbmQgbWFwcGluZyByZWZlcmVuY2VzLiBUaGVyZSBhcmUgbm8gYWxsb2NhdGlvbnMsIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwYWRkaW5nIGxlYWtzLCBvciB1c2VyLXNwYWNlIGNvcGllcyBpbnZvbHZlZC4gU3RhbmRhcmQgS0FTQU4va2VybmVsIGRlYnVnZ2VycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIChzdWNoIGFzIHJlZmNvdW50aW5nLCBsb2NraW5nLCBvciBVQUYgYnVncykuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow8mkk7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-29 12:37:11 +0000 UTC FinishedAt: 2026-08-29 13:18:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563", "config_name": "upstream-apparmor-kasan.config", "series_id": "e83b5fdf-a11c-4ee8-8c53-467755b3e062" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "folio_end_dropbehind", "folio_unmap_invalidate" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Zm9saW9fZW5kX2Ryb3BiZWhpbmQmIzM0OywKICAgICYjMzQ7Zm9saW9fdW5tYXBfaW52YWxpZGF0ZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayBgIWZvbGlvX21hcHBlZChmb2xpbylgIGJlZm9yZSBpbnZva2luZyBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZSgpYCBpbiBgZmlsZW1hcF9lbmRfZHJvcGJlaGluZCgpYC4gVGhpcyBtb2RpZmllcyBwYWdlIGNhY2hlIGRyb3AtYmVoaW5kIGxvZ2ljIHRvIHNraXAgaW52YWxpZGF0aW5nIGZvbGlvcyB0aGF0IGFyZSBjdXJyZW50bHkgbWFwcGVkIGludG8gdXNlciBwYWdlIHRhYmxlcy4gSXQgb3BlcmF0ZXMgZW50aXJlbHkgb24gZXhpc3RpbmcsIHZhbGlkIHN0cnVjdCBmb2xpbyBmbGFncyBhbmQgbWFwcGluZyByZWZlcmVuY2VzLiBUaGVyZSBhcmUgbm8gYWxsb2NhdGlvbnMsIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwYWRkaW5nIGxlYWtzLCBvciB1c2VyLXNwYWNlIGNvcGllcyBpbnZvbHZlZC4gU3RhbmRhcmQgS0FTQU4va2VybmVsIGRlYnVnZ2VycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIChzdWNoIGFzIHJlZmNvdW50aW5nLCBsb2NraW5nLCBvciBVQUYgYnVncykuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBkcm9wYmVoaW5kIGZvbGlvIGludmFsaWRhdGlvbiBpbiBtbS9maWxlbWFwLmMgYnkgYWRkaW5nIGEgY2hlY2sgZm9yICFmb2xpb19tYXBwZWQoZm9saW8pIGJlZm9yZSBjYWxsaW5nIGZvbGlvX3VubWFwX2ludmFsaWRhdGUoKS4gVGhpcyBhbHRlcnMgY29yZSBwYWdlIGNhY2hlIGludmFsaWRhdGlvbiBiZWhhdmlvciBmb3IgY2FjaGVkL2Ryb3BiZWhpbmQgZm9saW9zIChzdWNoIGFzIHRob3NlIHVzZWQgd2l0aCBSV0ZfRE9OVENBQ0hFIC8gSU9DQl9ET05UQ0FDSEUpIGFuZCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4ZGU3NGJlNDA2ZjI2ZTRjNWE0MTJhNTFiYzg1MmM4NDkxMWY2MWM1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjkgMTM6MTY6NDIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jXG5pbmRleCA2YWZlYzYzNjg4MWZiLi4wMGZkODljZjZmNTUwIDEwMDY0NFxuLS0tIGEvbW0vZmlsZW1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9maWxlbWFwLmNcbkBAIC0xNjE2LDcgJiM0MzsxNjE2LDcgQEAgc3RhdGljIHZvaWQgZmlsZW1hcF9lbmRfZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0XHRyZXR1cm47XG4gXHRpZiAoIWZvbGlvX3Rlc3RfY2xlYXJfZHJvcGJlaGluZChmb2xpbykpXG4gXHRcdHJldHVybjtcbi1cdGlmIChtYXBwaW5nKVxuJiM0MztcdGlmIChtYXBwaW5nIFx1MDAyNlx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSlcbiBcdFx0Zm9saW9fdW5tYXBfaW52YWxpZGF0ZShtYXBwaW5nLCBmb2xpbywgMCk7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjE2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Zm9saW9fZW5kX2Ryb3BiZWhpbmQmIzM0OywKICAgICYjMzQ7Zm9saW9fdW5tYXBfaW52YWxpZGF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBkcm9wYmVoaW5kIGZvbGlvIGludmFsaWRhdGlvbiBpbiBtbS9maWxlbWFwLmMgYnkgYWRkaW5nIGEgY2hlY2sgZm9yICFmb2xpb19tYXBwZWQoZm9saW8pIGJlZm9yZSBjYWxsaW5nIGZvbGlvX3VubWFwX2ludmFsaWRhdGUoKS4gVGhpcyBhbHRlcnMgY29yZSBwYWdlIGNhY2hlIGludmFsaWRhdGlvbiBiZWhhdmlvciBmb3IgY2FjaGVkL2Ryb3BiZWhpbmQgZm9saW9zIChzdWNoIGFzIHRob3NlIHVzZWQgd2l0aCBSV0ZfRE9OVENBQ0hFIC8gSU9DQl9ET05UQ0FDSEUpIGFuZCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4ZGU3NGJlNDA2ZjI2ZTRjNWE0MTJhNTFiYzg1MmM4NDkxMWY2MWM1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjkgMTM6MTY6NDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmMKaW5kZXggNmFmZWM2MzY4ODFmYi4uMDBmZDg5Y2Y2ZjU1MCAxMDA2NDQKLS0tIGEvbW0vZmlsZW1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2ZpbGVtYXAuYwpAQCAtMTYxNiw3ICYjNDM7MTYxNiw3IEBAIHN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbykKIAkJcmV0dXJuOwogCWlmICghZm9saW9fdGVzdF9jbGVhcl9kcm9wYmVoaW5kKGZvbGlvKSkKIAkJcmV0dXJuOwotCWlmIChtYXBwaW5nKQomIzQzOwlpZiAobWFwcGluZyAmYW1wOyZhbXA7ICFmb2xpb19tYXBwZWQoZm9saW8pKQogCQlmb2xpb191bm1hcF9pbnZhbGlkYXRlKG1hcHBpbmcsIGZvbGlvLCAwKTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDQzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRmlsZW1hcCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGNoYW5naW5nIHNvbWV0aGluZyBpbiBgbW0vZmlsZW1hcC5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgZGlmZiBmb2N1c2VzIG9uIHRoZSBgZmlsZW1hcF9lbmRfZHJvcGJlaGluZGAgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGFwcGVhcnMgdG8gYmUgaW4gdGhhdCBjb25kaXRpb25hbCBzdGF0ZW1lbnQuIFdlIGFyZSBhZGRpbmcgYW4gYWRkaXRpb25hbCBjaGVjay4gUHJldmlvdXNseSwgaXQganVzdCBjaGVja2VkIGlmIGBtYXBwaW5nYCB3YXMgdmFsaWQsIGJ1dCBub3cgd2UmIzM5O3JlIGludHJvZHVjaW5nIGAhZm9saW9fbWFwcGVkKGZvbGlvKWAuIFNvLCB0aGUgYGZvbGlvX3VubWFwX2ludmFsaWRhdGVgIGNhbGwgd2lsbCBvbmx5IGhhcHBlbiBpZiB0aGUgbWFwcGluZyBleGlzdHMgQU5EIHRoZSBmb2xpbyBpc24mIzM5O3QgY3VycmVudGx5IG1hcHBlZC4gSW50ZXJlc3RpbmcuCgpJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgc3Vycm91bmRpbmcgY29kZS4gSSYjMzk7bGwgdXNlIGVpdGhlciBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZXhhbWluZSBgbW0vZmlsZW1hcC5jYCBhcm91bmQgbGluZSAxNjE2IHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHRoZSBwdXJwb3NlIG9mIHRoaXMgY2hhbmdlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgd2Ugd291bGQgd2FudCB0byAqcHJldmVudCogdW5tYXBwaW5nIGluIHRoZSBjYXNlIG9mIGEgbWFwcGVkIGZvbGlvIHdoZW4gZHJvcHBpbmcgYmVoaW5kLiBXaGF0JiMzOTtzIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoaXMgY29uZGl0aW9uPyBJcyB0aGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBhIGJ1ZyBmaXgsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaW1lIHRvIGRpZyBkZWVwZXIgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZmlsZW1hcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTYwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNjAwOlx0XHRcdHJldCA9IGZvbGlvX3dhaXRfYml0X2tpbGxhYmxlKGZvbGlvLCBQR19wcml2YXRlXzIpO1xuMTYwMTpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTYwMjpcdFx0XHRcdGJyZWFrO1xuMTYwMzpcdFx0fVxuMTYwNDpcdFxuMTYwNTpcdFx0cmV0dXJuIHJldDtcbjE2MDY6XHR9XG4xNjA3Olx0RVhQT1JUX1NZTUJPTChmb2xpb193YWl0X3ByaXZhdGVfMl9raWxsYWJsZSk7XG4xNjA4Olx0XG4xNjA5Olx0c3RhdGljIHZvaWQgZmlsZW1hcF9lbmRfZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuMTYxMDpcdHtcbjE2MTE6XHRcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZm9saW8tXHUwMDNlbWFwcGluZztcbjE2MTI6XHRcbjE2MTM6XHRcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7XG4xNjE0Olx0XG4xNjE1Olx0XHRpZiAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pIHx8IGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKVxuMTYxNjpcdFx0XHRyZXR1cm47XG4xNjE3Olx0XHRpZiAoIWZvbGlvX3Rlc3RfY2xlYXJfZHJvcGJlaGluZChmb2xpbykpXG4xNjE4Olx0XHRcdHJldHVybjtcbjE2MTk6XHRcdGlmIChtYXBwaW5nIFx1MDAyNlx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSlcbjE2MjA6XHRcdFx0Zm9saW9fdW5tYXBfaW52YWxpZGF0ZShtYXBwaW5nLCBmb2xpbywgMCk7XG4xNjIxOlx0fVxuMTYyMjpcdFxuMTYyMzpcdC8qXG4xNjI0Olx0ICogSWYgZm9saW8gd2FzIG1hcmtlZCBhcyBkcm9wYmVoaW5kLCB0aGVuIHBhZ2VzIHNob3VsZCBiZSBkcm9wcGVkIHdoZW4gd3JpdGViYWNrXG4xNjI1Olx0ICogY29tcGxldGVzLiBEbyB0aGF0IG5vdy4gSWYgd2UgZmFpbCwgaXQmIzM5O3MgbGlrZWx5IGJlY2F1c2Ugb2YgYSBiaWcgZm9saW8gLVxuMTYyNjpcdCAqIGp1c3QgcmVzZXQgZHJvcGJlaGluZCBmb3IgdGhhdCBjYXNlIGFuZCBsYXR0ZXIgY29tcGxldGlvbnMgc2hvdWxkIGludmFsaWRhdGUuXG4xNjI3Olx0ICovXG4xNjI4Olx0dm9pZCBmb2xpb19lbmRfZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuMTYyOTpcdHtcbjE2MzA6XHRcdGlmICghZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSlcbjE2MzE6XHRcdFx0cmV0dXJuO1xuMTYzMjpcdFxuMTYzMzpcdFx0LypcbjE2MzQ6XHRcdCAqIEhpdHRpbmcgIWluX3Rhc2soKSBzaG91bGQgbm90IGhhcHBlbiBvZmYgUldGX0RPTlRDQUNIRSB3cml0ZWJhY2ssXG4xNjM1Olx0XHQgKiBidXQgY2FuIGhhcHBlbiBpZiBub3JtYWwgd3JpdGViYWNrIGp1c3QgaGFwcGVucyB0byBmaW5kIGRpcnR5IGZvbGlvc1xuMTYzNjpcdFx0ICogdGhhdCB3ZXJlIGNyZWF0ZWQgYXMgcGFydCBvZiB1bmNhY2hlZCB3cml0ZWJhY2ssIGFuZCB0aGF0IHdyaXRlYmFja1xuMTYzNzpcdFx0ICogd291bGQgb3RoZXJ3aXNlIG5vdCBuZWVkIG5vbi1JUlEgaGFuZGxpbmcuIEp1c3Qgc2tpcCB0aGVcbjE2Mzg6XHRcdCAqIGludmFsaWRhdGlvbiBpbiB0aGF0IGNhc2UuXG4xNjM5Olx0XHQgKi9cbjE2NDA6XHRcdGlmIChpbl90YXNrKCkgXHUwMDI2XHUwMDI2IGZvbGlvX3RyeWxvY2soZm9saW8pKSB7XG4xNjQxOlx0XHRcdGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoZm9saW8pO1xuMTY0MjpcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuMTY0MzpcdFx0fVxuMTY0NDpcdH1cbjE2NDU6XHRFWFBPUlRfU1lNQk9MX0dQTChmb2xpb19lbmRfZHJvcGJlaGluZCk7XG4xNjQ2Olx0XG4xNjQ3Olx0LyoqXG4xNjQ4Olx0ICogZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kIC0gRW5kIHdyaXRlYmFjayBhZ2FpbnN0IGEgZm9saW8uXG4xNjQ5Olx0ICogQGZvbGlvOiBUaGUgZm9saW8uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIyNwoJCQkJCQkJb3V0cHV0OiAxNgoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgRGF0YSBDYWNoaW5nIFN0cmF0ZWdpZXMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB3ZSYjMzk7cmUgY29udHJvbGxpbmcgY2FjaGUgYmVoYXZpb3IsIHNwZWNpZmljYWxseSBhcm91bmQgZHJvcHBpbmcgcGFnZXMgZnJvbSB0aGUgY2FjaGUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBleGFtaW5lIHRoZSBrZXkgZnVuY3Rpb25zIG9yIGZsYWdzIHVzZWQgdG8gbWFuYWdlIHRoaXM6IGBmb2xpb19lbmRfZHJvcGJlaGluZGAsIGBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kYCwgdGhlIGdlbmVyYWwgYGRyb3BiZWhpbmRgIGZ1bmN0aW9uYWxpdHksIGFuZCwgb2YgY291cnNlLCBgUldGX0RPTlRDQUNIRWAuIEl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQg4oCTIHRvIGdldCBhIGdyYXNwIG9mIHRoZWlyIHVzYWdlLCBJIHNob3VsZCBpbml0aWF0ZSBhIGNvZGUgc2VhcmNoLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgaW5zdGFuY2VzIHdoZXJlIGBkcm9wYmVoaW5kYCBvciBgUldGX0RPTlRDQUNIRWAgYXJlIHJlZmVyZW5jZWQgd2l0aGluIHRoZSBjb2RlYmFzZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZWlyIGFwcGxpY2F0aW9uIGFuZCBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHJvcGJlaGluZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9idWZmZXIuYz0xMDg1PXN0YXRpYyB2b2lkIF9fYmhfc3VibWl0KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcGYsXG4tLVxuZnMvYnVmZmVyLmMtMTEwOS1cbmZzL2J1ZmZlci5jOjExMTA6XHRpZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGJoLVx1MDAzZWJfZm9saW8pIFx1MDAyNlx1MDAyNiBvcF9pc193cml0ZShvcGYpKVxuZnMvYnVmZmVyLmMtMTExMS1cdFx0YmlvX3NldF9mbGFnKGJpbywgQklPX0NPTVBMRVRFX0lOX1RBU0spO1xuLS1cbmZzL2ZzLXdyaXRlYmFjay5jPTQwNT1zdGF0aWMgYm9vbCBpbm9kZV9kb19zd2l0Y2hfd2JzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZnMtd3JpdGViYWNrLmMtNDM1LVx0XHRcdHdiX3N0YXRfbW9kKG5ld193YiwgV0JfUkVDTEFJTUFCTEUsIG5yKTtcbmZzL2ZzLXdyaXRlYmFjay5jOjQzNjpcdFx0XHRpZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSkge1xuZnMvZnMtd3JpdGViYWNrLmMtNDM3LVx0XHRcdFx0d2Jfc3RhdF9tb2Qob2xkX3diLCBXQl9ET05UQ0FDSEVfRElSVFksIC1ucik7XG4tLVxuZnMvaW9tYXAvaW9lbmQuYz0yMTM9c3NpemVfdCBpb21hcF9hZGRfdG9faW9lbmQoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5mcy9pb21hcC9pb2VuZC5jLTI1Ny1cbmZzL2lvbWFwL2lvZW5kLmM6MjU4Olx0aWYgKGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykpXG5mcy9pb21hcC9pb2VuZC5jLTI1OS1cdFx0YmlvX3NldF9mbGFnKFx1MDAyNmlvZW5kLVx1MDAzZWlvX2JpbywgQklPX0NPTVBMRVRFX0lOX1RBU0spO1xuLS1cbmZzL25mcy9maWxlLmM9MzYwPXN0YXRpYyBib29sIG5mc193YW50X3JlYWRfbW9kaWZ5X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmZzL25mcy9maWxlLmMtMzcyLVx0XHRyZXR1cm4gdHJ1ZTtcbmZzL25mcy9maWxlLmM6MzczOlx0aWYgKGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykpXG5mcy9uZnMvZmlsZS5jLTM3NC1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmZzL25mcy9maWxlLmM9Mzg5PXN0YXRpYyBpbnQgbmZzX3dyaXRlX2JlZ2luKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcbi0tXG5mcy9uZnMvZmlsZS5jLTQxOS1cdFx0b25jZV90aHJ1ID0gMTtcbmZzL25mcy9maWxlLmM6NDIwOlx0XHRmb2xpb19jbGVhcl9kcm9wYmVoaW5kKGZvbGlvKTtcbmZzL25mcy9maWxlLmMtNDIxLVx0XHRyZXQgPSBuZnNfcmVhZF9mb2xpbyhmaWxlLCBmb2xpbyk7XG4tLVxuZnMvbmZzL3dyaXRlLmM9Mjk1PXN0YXRpYyB2b2lkIG5mc19mb2xpb19lbmRfd3JpdGViYWNrKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuZnMvbmZzL3dyaXRlLmMtMjk4LVxuZnMvbmZzL3dyaXRlLmM6Mjk5Olx0Zm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKGZvbGlvKTtcbmZzL25mcy93cml0ZS5jLTMwMC1cdGlmIChhdG9taWNfbG9uZ19kZWNfcmV0dXJuKFx1MDAyNm5mc3MtXHUwMDNld3JpdGViYWNrKSBcdTAwM2Ncbi0tXG5mcy9uZnMvd3JpdGUuYz03MzU9c3RhdGljIHZvaWQgbmZzX2lub2RlX3JlbW92ZV9yZXF1ZXN0KHN0cnVjdCBuZnNfcGFnZSAqcmVxKVxuLS1cbmZzL25mcy93cml0ZS5jLTc1MS1cbmZzL25mcy93cml0ZS5jOjc1MjpcdFx0XHRmb2xpb19lbmRfZHJvcGJlaGluZChmb2xpbyk7XG5mcy9uZnMvd3JpdGUuYy03NTMtXHRcdH1cbi0tXG5mcy9uZnNkL2RlYnVnZnMuYz0zOT1ERUZJTkVfREVCVUdGU19BVFRSSUJVVEUobmZzZF9kc3JfZm9wcywgbmZzZF9kc3JfZ2V0LCBuZnNkX2Rzcl9zZXQsIFwmIzM0OyVsbHVcXG5cJiMzNDspO1xuLS1cbmZzL25mc2QvZGVidWdmcy5jLTQ1LSAqICAgJTA6IE5GUyBSRUFEIHdpbGwgdXNlIGJ1ZmZlcmVkIElPXG5mcy9uZnNkL2RlYnVnZnMuYzo0NjogKiAgICUxOiBORlMgUkVBRCB3aWxsIHVzZSBkb250Y2FjaGUgKGJ1ZmZlcmVkIElPIHcvIGRyb3BiZWhpbmQpXG5mcy9uZnNkL2RlYnVnZnMuYy00Ny0gKiAgICUyOiBORlMgUkVBRCB3aWxsIHVzZSBkaXJlY3QgSU9cbi0tXG5mcy9uZnNkL2RlYnVnZnMuYz04ND1ERUZJTkVfREVCVUdGU19BVFRSSUJVVEUobmZzZF9pb19jYWNoZV9yZWFkX2ZvcHMsIG5mc2RfaW9fY2FjaGVfcmVhZF9nZXQsXG4tLVxuZnMvbmZzZC9kZWJ1Z2ZzLmMtOTEtICogICAlMDogTkZTIFdSSVRFIHdpbGwgdXNlIGJ1ZmZlcmVkIElPXG5mcy9uZnNkL2RlYnVnZnMuYzo5MjogKiAgICUxOiBORlMgV1JJVEUgd2lsbCB1c2UgZG9udGNhY2hlIChidWZmZXJlZCBJTyB3LyBkcm9wYmVoaW5kKVxuZnMvbmZzZC9kZWJ1Z2ZzLmMtOTMtICpcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD05Mz1lbnVtIHBhZ2VmbGFncyB7XG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTEyLVx0UEdfdW5ldmljdGFibGUsXHRcdC8qIFBhZ2UgaXMgXCYjMzQ7dW5ldmljdGFibGVcJiMzNDsgICovXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoxMTM6XHRQR19kcm9wYmVoaW5kLFx0XHQvKiBkcm9wIHBhZ2VzIG9uIElPIGNvbXBsZXRpb24gKi9cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTExNC0jaWZkZWYgQ09ORklHX01NVVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTU5OD1GT0xJT19GTEFHKHJlYWRhaGVhZCwgRk9MSU9fSEVBRF9QQUdFKVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTYwMC1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjYwMTpGT0xJT19GTEFHKGRyb3BiZWhpbmQsIEZPTElPX0hFQURfUEFHRSlcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjYwMjpcdEZPTElPX1RFU1RfQ0xFQVJfRkxBRyhkcm9wYmVoaW5kLCBGT0xJT19IRUFEX1BBR0UpXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo2MDM6XHRfX0ZPTElPX1NFVF9GTEFHKGRyb3BiZWhpbmQsIEZPTElPX0hFQURfUEFHRSlcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTYwNC1cbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaD0xMzEwPXZvaWQgZm9saW9fZW5kX3dyaXRlYmFjayhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oOjEzMTE6dm9pZCBmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbyk7XG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaDoxMzEyOnZvaWQgZm9saW9fZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbyk7XG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaC0xMzEzLXZvaWQgZm9saW9fd2FpdF9zdGFibGUoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tLVxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg9MTQwOD1zdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wge1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTE0MTUtXHR1bnNpZ25lZCBpbnQgX2JhdGNoX2NvdW50O1xuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg6MTQxNjpcdGJvb2wgZHJvcGJlaGluZDtcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTE0MTctXHRib29sIF93b3JraW5nc2V0O1xuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21tZmxhZ3MuaD02OT1UUkFDRV9ERUZJTkVfRU5VTShfX19HRlBfTEFTVF9CSVQpO1xuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21tZmxhZ3MuaC0xNTMtXHRERUZfUEFHRUZMQUdfTkFNRSh1bmV2aWN0YWJsZSksXHRcdFx0XHRcdFxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9tbWZsYWdzLmg6MTU0Olx0REVGX1BBR0VGTEFHX05BTUUoZHJvcGJlaGluZClcdFx0XHRcdFx0XFxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21tZmxhZ3MuaC0xNTUtSUZfSEFWRV9QR19NTE9DSyhtbG9ja2VkKVx0XHRcdFx0XHRcdFxcXG4tLVxubW0vZmlsZW1hcC5jPTE2MDc9RVhQT1JUX1NZTUJPTChmb2xpb193YWl0X3ByaXZhdGVfMl9raWxsYWJsZSk7XG5tbS9maWxlbWFwLmMtMTYwOC1cbm1tL2ZpbGVtYXAuYzoxNjA5OnN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL2ZpbGVtYXAuYy0xNjEwLXtcbi0tXG5tbS9maWxlbWFwLmMtMTYxNi1cdFx0cmV0dXJuO1xubW0vZmlsZW1hcC5jOjE2MTc6XHRpZiAoIWZvbGlvX3Rlc3RfY2xlYXJfZHJvcGJlaGluZChmb2xpbykpXG5tbS9maWxlbWFwLmMtMTYxOC1cdFx0cmV0dXJuO1xuLS1cbm1tL2ZpbGVtYXAuYy0xNjIzLS8qXG5tbS9maWxlbWFwLmM6MTYyNDogKiBJZiBmb2xpbyB3YXMgbWFya2VkIGFzIGRyb3BiZWhpbmQsIHRoZW4gcGFnZXMgc2hvdWxkIGJlIGRyb3BwZWQgd2hlbiB3cml0ZWJhY2tcbm1tL2ZpbGVtYXAuYy0xNjI1LSAqIGNvbXBsZXRlcy4gRG8gdGhhdCBub3cuIElmIHdlIGZhaWwsIGl0JiMzOTtzIGxpa2VseSBiZWNhdXNlIG9mIGEgYmlnIGZvbGlvIC1cbm1tL2ZpbGVtYXAuYzoxNjI2OiAqIGp1c3QgcmVzZXQgZHJvcGJlaGluZCBmb3IgdGhhdCBjYXNlIGFuZCBsYXR0ZXIgY29tcGxldGlvbnMgc2hvdWxkIGludmFsaWRhdGUuXG5tbS9maWxlbWFwLmMtMTYyNy0gKi9cbm1tL2ZpbGVtYXAuYzoxNjI4OnZvaWQgZm9saW9fZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL2ZpbGVtYXAuYy0xNjI5LXtcbm1tL2ZpbGVtYXAuYzoxNjMwOlx0aWYgKCFmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKVxubW0vZmlsZW1hcC5jLTE2MzEtXHRcdHJldHVybjtcbi0tXG5tbS9maWxlbWFwLmMtMTY0MC1cdGlmIChpbl90YXNrKCkgXHUwMDI2XHUwMDI2IGZvbGlvX3RyeWxvY2soZm9saW8pKSB7XG5tbS9maWxlbWFwLmM6MTY0MTpcdFx0ZmlsZW1hcF9lbmRfZHJvcGJlaGluZChmb2xpbyk7XG5tbS9maWxlbWFwLmMtMTY0Mi1cdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbi0tXG5tbS9maWxlbWFwLmMtMTY0NC19XG5tbS9maWxlbWFwLmM6MTY0NTpFWFBPUlRfU1lNQk9MX0dQTChmb2xpb19lbmRfZHJvcGJlaGluZCk7XG5tbS9maWxlbWFwLmMtMTY0Ni1cbm1tL2ZpbGVtYXAuYy0xNjQ3LS8qKlxubW0vZmlsZW1hcC5jOjE2NDg6ICogZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kIC0gRW5kIHdyaXRlYmFjayBhZ2FpbnN0IGEgZm9saW8uXG5tbS9maWxlbWFwLmMtMTY0OS0gKiBAZm9saW86IFRoZSBmb2xpby5cbi0tXG5tbS9maWxlbWFwLmMtMTY1MS0gKiBUaGUgZm9saW8gbXVzdCBhY3R1YWxseSBiZSB1bmRlciB3cml0ZWJhY2suXG5tbS9maWxlbWFwLmM6MTY1MjogKiBUaGlzIGNhbGwgaXMgaW50ZW5kZWQgZm9yIGZpbGVzeXN0ZW1zIHRoYXQgbmVlZCB0byBkZWZlciBkcm9wYmVoaW5kLlxubW0vZmlsZW1hcC5jLTE2NTMtICpcbi0tXG5tbS9maWxlbWFwLmMtMTY1NS0gKi9cbm1tL2ZpbGVtYXAuYzoxNjU2OnZvaWQgZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9maWxlbWFwLmMtMTY1Ny17XG4tLVxubW0vZmlsZW1hcC5jLTE2NzYtfVxubW0vZmlsZW1hcC5jOjE2Nzc6RVhQT1JUX1NZTUJPTF9HUEwoZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKTtcbm1tL2ZpbGVtYXAuYy0xNjc4LVxuLS1cbm1tL2ZpbGVtYXAuYz0xNjg3PXZvaWQgZm9saW9fZW5kX3dyaXRlYmFjayhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2ZpbGVtYXAuYy0xNjk3LVx0Zm9saW9fZ2V0KGZvbGlvKTtcbm1tL2ZpbGVtYXAuYzoxNjk4Olx0Zm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKGZvbGlvKTtcbm1tL2ZpbGVtYXAuYzoxNjk5Olx0Zm9saW9fZW5kX2Ryb3BiZWhpbmQoZm9saW8pO1xubW0vZmlsZW1hcC5jLTE3MDAtXHRmb2xpb19wdXQoZm9saW8pO1xuLS1cbm1tL2ZpbGVtYXAuYz0xOTQ3PXN0cnVjdCBmb2xpbyAqX19maWxlbWFwX2dldF9mb2xpb19tcG9sKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL2ZpbGVtYXAuYy0yMDI1LVx0XHRcdGlmIChmZ3BfZmxhZ3MgXHUwMDI2IEZHUF9ET05UQ0FDSEUpXG5tbS9maWxlbWFwLmM6MjAyNjpcdFx0XHRcdF9fZm9saW9fc2V0X2Ryb3BiZWhpbmQoZm9saW8pO1xubW0vZmlsZW1hcC5jLTIwMjctXG4tLVxubW0vZmlsZW1hcC5jLTIwNjAtXHQvKiBub3QgYW4gdW5jYWNoZWQgbG9va3VwLCBjbGVhciB1bmNhY2hlZCBpZiBzZXQgKi9cbm1tL2ZpbGVtYXAuYzoyMDYxOlx0aWYgKCEoZmdwX2ZsYWdzIFx1MDAyNiBGR1BfRE9OVENBQ0hFKSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9jbGVhcl9kcm9wYmVoaW5kKGZvbGlvKSkge1xubW0vZmlsZW1hcC5jLTIwNjItXHRcdGlmIChmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSBcdTAwMjZcdTAwMjZcbi0tXG5tbS9maWxlbWFwLmM9MjYxOT1zdGF0aWMgaW50IGZpbGVtYXBfY3JlYXRlX2ZvbGlvKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gpXG4tLVxubW0vZmlsZW1hcC5jLTI2MzMtXHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9ET05UQ0FDSEUpXG5tbS9maWxlbWFwLmM6MjYzNDpcdFx0X19mb2xpb19zZXRfZHJvcGJlaGluZChmb2xpbyk7XG5tbS9maWxlbWFwLmMtMjYzNS1cbi0tXG5tbS9maWxlbWFwLmM9MjY3Mj1zdGF0aWMgaW50IGZpbGVtYXBfcmVhZGFoZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxubW0vZmlsZW1hcC5jLTI2ODAtXHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9ET05UQ0FDSEUpXG5tbS9maWxlbWFwLmM6MjY4MTpcdFx0cmFjdGwuZHJvcGJlaGluZCA9IDE7XG5tbS9maWxlbWFwLmMtMjY4Mi1cdHBhZ2VfY2FjaGVfYXN5bmNfcmEoXHUwMDI2cmFjdGwsIGZvbGlvLCBsYXN0X2luZGV4IC0gZm9saW8tXHUwMDNlaW5kZXgpO1xuLS1cbm1tL2ZpbGVtYXAuYz0yNjg2PXN0YXRpYyBpbnQgZmlsZW1hcF9nZXRfcGFnZXMoc3RydWN0IGtpb2NiICppb2NiLCBzaXplX3QgY291bnQsXG4tLVxubW0vZmlsZW1hcC5jLTI3MTItXHRcdGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX0RPTlRDQUNIRSlcbm1tL2ZpbGVtYXAuYzoyNzEzOlx0XHRcdHJhY3RsLmRyb3BiZWhpbmQgPSAxO1xubW0vZmlsZW1hcC5jLTI3MTQtXHRcdHBhZ2VfY2FjaGVfc3luY19yYShcdTAwMjZyYWN0bCwgbGFzdF9pbmRleCAtIGluZGV4KTtcbi0tXG5tbS9maWxlbWFwLmM9Mjc1NT1zdGF0aWMgaW5saW5lIGJvb2wgcG9zX3NhbWVfZm9saW8obG9mZl90IHBvczEsIGxvZmZfdCBwb3MyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2ZpbGVtYXAuYy0yNzYxLVxubW0vZmlsZW1hcC5jOjI3NjI6c3RhdGljIHZvaWQgZmlsZW1hcF9lbmRfZHJvcGJlaGluZF9yZWFkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9maWxlbWFwLmMtMjc2My17XG5tbS9maWxlbWFwLmM6Mjc2NDpcdGlmICghZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSlcbm1tL2ZpbGVtYXAuYy0yNzY1LVx0XHRyZXR1cm47XG4tLVxubW0vZmlsZW1hcC5jLTI3NjgtXHRpZiAoZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcbm1tL2ZpbGVtYXAuYzoyNzY5Olx0XHRmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKGZvbGlvKTtcbm1tL2ZpbGVtYXAuYy0yNzcwLVx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuLS1cbm1tL2ZpbGVtYXAuYz0yNzg3PXNzaXplX3QgZmlsZW1hcF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbm1tL2ZpbGVtYXAuYy0yODg5LVxubW0vZmlsZW1hcC5jOjI4OTA6XHRcdFx0ZmlsZW1hcF9lbmRfZHJvcGJlaGluZF9yZWFkKGZvbGlvKTtcbm1tL2ZpbGVtYXAuYy0yODkxLVx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4tLVxubW0vZm9saW8uYz00MjI9dm9pZCBmb2xpb19tYXJrX2FjY2Vzc2VkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9mb2xpby5jLTQyMy17XG5tbS9mb2xpby5jOjQyNDpcdGlmIChmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKVxubW0vZm9saW8uYy00MjUtXHRcdHJldHVybjtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTM2ODU9c3RhdGljIHZvaWQgX19zcGxpdF9mb2xpb190b19vcmRlcihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzc0NC1cdFx0XHRcdCAoMUwgXHUwMDNjXHUwMDNjIFBHX2RpcnR5KSB8XG5tbS9odWdlX21lbW9yeS5jOjM3NDU6XHRcdFx0XHQgKDFMIFx1MDAzY1x1MDAzYyBQR19kcm9wYmVoaW5kKSB8XG5tbS9odWdlX21lbW9yeS5jLTM3NDYtXHRcdFx0XHQgTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfTUFTSykpO1xuLS1cbm1tL3BhZ2Utd3JpdGViYWNrLmM9MjYwMz1zdGF0aWMgdm9pZCBmb2xpb19hY2NvdW50X2RpcnRpZWQoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9wYWdlLXdyaXRlYmFjay5jLTI2MTctXHRcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9ESVJUWSwgbnIpO1xubW0vcGFnZS13cml0ZWJhY2suYzoyNjE4Olx0XHRpZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSlcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjYxOS1cdFx0XHR3Yl9zdGF0X21vZCh3YiwgV0JfRE9OVENBQ0hFX0RJUlRZLCBucik7XG4tLVxubW0vcGFnZS13cml0ZWJhY2suYz0yNjM2PXZvaWQgZm9saW9fYWNjb3VudF9jbGVhbmVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBiZGlfd3JpdGViYWNrICp3Yilcbi0tXG5tbS9wYWdlLXdyaXRlYmFjay5jLTI2NDAtXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfRElSVFksIC1ucik7XG5tbS9wYWdlLXdyaXRlYmFjay5jOjI2NDE6XHRpZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSlcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjY0Mi1cdFx0d2Jfc3RhdF9tb2Qod2IsIFdCX0RPTlRDQUNIRV9ESVJUWSwgLW5yKTtcbi0tXG5tbS9wYWdlLXdyaXRlYmFjay5jPTI4NjY9Ym9vbCBmb2xpb19jbGVhcl9kaXJ0eV9mb3JfaW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9wYWdlLXdyaXRlYmFjay5jLTI5MTYtXHRcdFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX0RJUlRZLCAtbnIpO1xubW0vcGFnZS13cml0ZWJhY2suYzoyOTE3Olx0XHRcdGlmIChmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKVxubW0vcGFnZS13cml0ZWJhY2suYy0yOTE4LVx0XHRcdFx0d2Jfc3RhdF9tb2Qod2IsIFdCX0RPTlRDQUNIRV9ESVJUWSwgLW5yKTtcbi0tXG5tbS9yZWFkYWhlYWQuYz0xOTU9c3RhdGljIHN0cnVjdCBmb2xpbyAqcmFjdGxfYWxsb2NfZm9saW8oc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWN0bCxcbi0tXG5tbS9yZWFkYWhlYWQuYy0yMDAtXHRmb2xpbyA9IGZpbGVtYXBfYWxsb2NfZm9saW8oZ2ZwX21hc2ssIG9yZGVyLCBOVUxMKTtcbm1tL3JlYWRhaGVhZC5jOjIwMTpcdGlmIChmb2xpbyBcdTAwMjZcdTAwMjYgcmFjdGwtXHUwMDNlZHJvcGJlaGluZClcbm1tL3JlYWRhaGVhZC5jOjIwMjpcdFx0X19mb2xpb19zZXRfZHJvcGJlaGluZChmb2xpbyk7XG5tbS9yZWFkYWhlYWQuYy0yMDMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU4NQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDYzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldDogTU0gRHJvcGJlaGluZCBPcHRpbWl6YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kYCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYGZvbGlvX2VuZF9kcm9wYmVoaW5kYCBhbmQgYGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmRfcmVhZGAuIERyb3BiZWhpbmQgaXMgdHJpZ2dlcmVkIGJ5IGBSV0ZfRE9OVENBQ0hFYCBvciBgSU9DQl9ET05UQ0FDSEVgLCBlZmZlY3RpdmVseSB3aXRoIG9wZXJhdGlvbnMgbGlrZSBgcHJlYWR2MmAvYHB3cml0ZXYyYCB3aXRoIGBSV0ZfRE9OVENBQ0hFYCwgb3IgaW9fdXJpbmcgd2l0aCBgSU9SSU5HX1JFQ1ZTRU5EX1BPTExfRklSU1RgLiBUaGF0JiMzOTtzIHRoZSBjb250ZXh0LgoKTm93LCBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZWAgaXMgdGhlIGtleSBmdW5jdGlvbjsgaXQgaGFuZGxlcyB1bm1hcHBpbmcgYW5kIGludmFsaWRhdGluZyBhIGZvbGlvLiBCdXQgaGVyZSYjMzk7cyB0aGUgY2F0Y2g6IElmIGEgZm9saW8gaXMgbWFwcGVkIGludG8gdXNlciBzcGFjZSAodGhpbmsgYG1tYXBgKSwgYGZvbGlvX21hcHBlZChmb2xpbylgIGlzIHRydWUuIElmIHdlIGNhbGwgYGZvbGlvX3VubWFwX2ludmFsaWRhdGVgIG9uIGEgbWFwcGVkIGZvbGlvLCB3ZSBjb3VsZCBjYXVzZSBpc3N1ZXMgYnkgaW52YWxpZGF0aW5nIHRoZSBtYXAuIFRoaXMgcGF0Y2ggc2tpcHMgdGhlIGBmb2xpb191bm1hcF9pbnZhbGlkYXRlYCBjYWxsIGZvciBtYXBwZWQgZm9saW9zLgoKVGhpcyBpcyBjb3JlIGtlcm5lbCBNTSBsb2dpYyBpbiBgbW0vZmlsZW1hcC5jYCwgYW5kIGl0JiMzOTtzIHJlYWNoYWJsZSB0aHJvdWdoIHN0YW5kYXJkIGZpbGUgcmVhZC93cml0ZSBvcGVyYXRpb25zIChsaWtlIGBwcmVhZHYyYCB3aXRoIGBSV0ZfRE9OVENBQ0hFYCkuIFNvLCBpcyB0aGlzIGZ1enphYmxlPyBMZXQmIzM5O3MgY2hlY2s6CgoqICAgKipEb2N1bWVudGF0aW9uL0tjb25maWcvQ29tbWVudHM/KiogTm9wZS4KKiAgICoqRGVjb3JhdGl2ZSBDaGFuZ2VzPyoqIE5vcGUuCiogICAqKk51bWVyaWMgQ29uc3RhbnRzL01hY3Jvcz8qKiBOb3BlLgoqICAgKipWaXJ0dWFsaXplZCBFbnZpcm9ubWVudCBJbXBvc3NpYmxlIFBhdGhzPyoqIE5vIHdheSwgd2UgY2FuIHRlc3QgdGhpcyBlYXNpbHkgaW4gUUVNVSBvciBHQ0UuCiogICAqKlZlbmRvci1TcGVjaWZpYyBIYXJkd2FyZT8qKiBOb3BlLgoqICAgKipEcml2ZXIgUmVtb3ZhbC9TaHV0ZG93bj8qKiBOb3BlLgoKVGhpcyBtb2RpZmllcyBjb3JlIGtlcm5lbCBNTSBsb2dpYyDigJMgc3BlY2lmaWNhbGx5LCB0aGUgZXhlY3V0aW9uIGZsb3cuIFRoZSBrZXkgY2hhbmdlIGlzIHRvICpza2lwKiBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZWAgd2hlbiBgZm9saW9fbWFwcGVkKGZvbGlvKWAgaXMgdHJ1ZS4gU28sIFdvcnRoRnV6emluZyA9IFRydWUuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgbGlrZWx5IGZ1bmN0aW9ucyBhbmQgY29uZmlncy4gSSBuZWVkIHRvIGZvY3VzIG9uIG5vbi1ob3QtcGF0aCBzeW1ib2xzLiBSZWxldmFudCBmdW5jdGlvbnMgYXJlOgoKKiAgIGBmb2xpb19lbmRfZHJvcGJlaGluZGAKKiAgIGBmaWxlbWFwX3JlYWRgICh0aGlzIGlzIGEgc3RhbmRhcmQgcmVhZCBhbmQgbGlrZWx5IGlzIGhvdC1wYXRoLCBidXQgbWF5IHRyaWdnZXIgYGZvbGlvX2VuZF9kcm9wYmVoaW5kYCBvciBgZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kYCBvciBgZm9saW9fZW5kX3dyaXRlYmFja2ApLgoKU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBiZSBsb29raW5nIGF0IG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50czoKCiogICBgZm9saW9fZW5kX2Ryb3BiZWhpbmRgIC0gaXMgbm9uLXN0YXRpYyBhbmQgYEVYUE9SVF9TWU1CT0xfR1BMKGZvbGlvX2VuZF9kcm9wYmVoaW5kKWAuCiogICBgZm9saW9fZW5kX3dyaXRlYmFja2AgLSBpcyBub24tc3RhdGljIGFuZCBgRVhQT1JUX1NZTUJPTChmb2xpb19lbmRfd3JpdGViYWNrKWAuCiogICBgZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kYCAtIGlzIG5vbi1zdGF0aWMgYW5kIGBFWFBPUlRfU1lNQk9MX0dQTChmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQpYC4KCkkmIzM5O2xsIGFsc28gZ3JlcCBmb3IgYGZvbGlvX3VubWFwX2ludmFsaWRhdGVgIHRvIHNlZSBpdHMgZGVjbGFyYXRpb24uIFRoYXQmIzM5O3MgdGhlIHRhcmdldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xpb191bm1hcF9pbnZhbGlkYXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ZpbGVtYXAuYz0xNjA5PXN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9maWxlbWFwLmMtMTYxOS1cdGlmIChtYXBwaW5nIFx1MDAyNlx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSlcbm1tL2ZpbGVtYXAuYzoxNjIwOlx0XHRmb2xpb191bm1hcF9pbnZhbGlkYXRlKG1hcHBpbmcsIGZvbGlvLCAwKTtcbm1tL2ZpbGVtYXAuYy0xNjIxLX1cbi0tXG5tbS9pbnRlcm5hbC5oPTU5Nz1pbnQgemFwX3ZtYV9mb3JfcmVhcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG5tbS9pbnRlcm5hbC5oOjU5ODppbnQgZm9saW9fdW5tYXBfaW52YWxpZGF0ZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL2ludGVybmFsLmgtNTk5LVx0XHRcdCAgIGdmcF90IGdmcCk7XG4tLVxubW0vdHJ1bmNhdGUuYz02MDY9c3RhdGljIGludCBmb2xpb19sYXVuZGVyKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3RydW5jYXRlLmMtNjIxLSAqL1xubW0vdHJ1bmNhdGUuYzo2MjI6aW50IGZvbGlvX3VubWFwX2ludmFsaWRhdGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS90cnVuY2F0ZS5jLTYyMy1cdFx0XHQgICBnZnBfdCBnZnApXG4tLVxubW0vdHJ1bmNhdGUuYz02NzY9aW50IGludmFsaWRhdGVfaW5vZGVfcGFnZXMyX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL3RydW5jYXRlLmMtNzI1LVx0XHRcdGZvbGlvX3dhaXRfd3JpdGViYWNrKGZvbGlvKTtcbm1tL3RydW5jYXRlLmM6NzI2Olx0XHRcdHJldDIgPSBmb2xpb191bm1hcF9pbnZhbGlkYXRlKG1hcHBpbmcsIGZvbGlvLCBHRlBfS0VSTkVMKTtcbm1tL3RydW5jYXRlLmMtNzI3LVx0XHRcdGlmIChyZXQyIFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzMDMKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZWAgYW5kIFJlbGF0ZWQgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGBmb2xpb191bm1hcF9pbnZhbGlkYXRlYC4gSSBrbm93IGl0JiMzOTtzIGRlZmluZWQgaW4gYG1tL3RydW5jYXRlLmNgLCBhbmQgaW1wb3J0YW50bHksIGl0JiMzOTtzIG5vdCBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQmIzM5O3MgbGlrZWx5IHVzZWQgb3V0c2lkZSB0aGF0IHNwZWNpZmljIGZpbGUuIEkgYWxzbyBzZWUgdGhhdCBgZm9saW9fZW5kX2Ryb3BiZWhpbmRgIGFuZCBgZm9saW9fZW5kX3dyaXRlYmFja2AgYXJlIGRlZmluZWQgaW4gYG1tL2ZpbGVtYXAuY2AsIGFsc28gbm9uLXN0YXRpYy4gTWFrZXMgc2Vuc2UsIGdpdmVuIHRoZSBjb250ZXh0LgoKTXkgbmV4dCBtb3ZlIGlzIHRvIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhlIGNvbXBpbGF0aW9uIG9yIGJlaGF2aW9yIGFyb3VuZCBgbW0vZmlsZW1hcC5jYCBvciwgbW9yZSBzcGVjaWZpY2FsbHksIHRoZSAmIzM0O2Ryb3BiZWhpbmQmIzM0OyBmdW5jdGlvbmFsaXR5LCBzaW5jZSBgZm9saW9fZW5kX2Ryb3BiZWhpbmRgIGlzIGluIHBsYXkuIEkga25vdyBgZmlsZW1hcC5jYCBpcyBjb3JlIE1NLCBzbyBpdCAqc2hvdWxkKiBhbHdheXMgYmUgY29tcGlsZWQsIGJ1dCBJJiMzOTtsbCBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgd2VpcmQgY29uZmlnIGRlcGVuZGVuY2llcyB0aGF0IGNvdWxkIG1ha2UgdGhpbmdzIHdvbmt5LgoKTm93LCBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiAoYCNpZmRlZmAgY29uc3RydWN0cykgYXJvdW5kIHRoZSBmdW5jdGlvbnMgSSYjMzk7bSBpbnRlcmVzdGVkIGluLCBwYXJ0aWN1bGFybHkgYGZvbGlvX2VuZF9kcm9wYmVoaW5kYC4gTGV0JiMzOTtzIHRha2UgYSBsb29rIGluIGBtbS9maWxlbWFwLmNgIGluIHRoZSB2aWNpbml0eSBvZiBgcmVhZC1maWxlYCBhcm91bmQgbGluZSAxNjAwLTE2NTAuLi5Ob3BlLCBubyBpZmRlZnMgdGhlcmUuIFRoYXQmIzM5O3MgZ29vZDsgZmV3ZXIgcG90ZW50aWFsIGdvdGNoYXMuCgpGaW5hbGx5LCBJJiMzOTttIGN1cmlvdXMgYWJvdXQgdGhlIGBSV0ZfRE9OVENBQ0hFYCBmbGFnLCBiZWNhdXNlIEkgaGF2ZSBhIGh1bmNoIGl0IG1pZ2h0IGJlIHJlbGF0ZWQuIEkmIzM5O2xsIHNlYXJjaCB0aGUgY29kZWJhc2UgZm9yIGBJT0NCX0RPTlRDQUNIRWAgb3IgYFJXRl9ET05UQ0FDSEVgIHRvIHNlZSBob3cgd2lkZWx5IHRoZXkmIzM5O3JlIHN1cHBvcnRlZCBhY3Jvc3MgZmlsZXN5c3RlbXMgYW5kIGRpZmZlcmVudCBjb25maWd1cmF0aW9uIHNjZW5hcmlvcy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciBwaWN0dXJlIG9mIGhvdyB0aGlzICYjMzQ7ZG9uJiMzOTt0IGNhY2hlJiMzNDsgYmVoYXZpb3IgaW50ZXJhY3RzIHdpdGggdGhlc2UgZmlsZSBtYXBwaW5nIG9wZXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1JXRl9ET05UQ0FDSEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzZC1pby1tb2Rlcy5yc3Q9NjA9Rm9yIG1vcmUgY29udGV4dCBvbiBET05UQ0FDSEUsIHBsZWFzZSBzZWUgdGhlc2UgTGludXggY29tbWl0IGhlYWRlcnM6XG4tLVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzZC1pby1tb2Rlcy5yc3QtNjQtLSBmb3IgUkVBRDogIDgwMjZlNDliZmY5YjEgKFwmIzM0O21tL2ZpbGVtYXA6IGFkZCByZWFkIHN1cHBvcnQgZm9yXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9uZnNkLWlvLW1vZGVzLnJzdDo2NTogIFJXRl9ET05UQ0FDSEVcJiMzNDspXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9uZnNkLWlvLW1vZGVzLnJzdC02Ni0tIGZvciBXUklURTogOTc0YzVlNjEzOWRiMyAoXCYjMzQ7eGZzOiBmbGFnIGFzIHN1cHBvcnRpbmcgRk9QX0RPTlRDQUNIRVwmIzM0Oylcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmg9MzM2PXN0cnVjdCByZWFkYWhlYWRfY29udHJvbDtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMzQ0LSNkZWZpbmUgSU9DQl9BVE9NSUNcdFx0KF9fZm9yY2UgaW50KSBSV0ZfQVRPTUlDXG5pbmNsdWRlL2xpbnV4L2ZzLmg6MzQ1OiNkZWZpbmUgSU9DQl9ET05UQ0FDSEVcdFx0KF9fZm9yY2UgaW50KSBSV0ZfRE9OVENBQ0hFXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMzQ2LSNkZWZpbmUgSU9DQl9OT1NJR05BTFx0XHQoX19mb3JjZSBpbnQpIFJXRl9OT1NJR05BTFxuLS1cbmluY2x1ZGUvbGludXgvZnMuaD0zNDQ3PXN0YXRpYyBpbmxpbmUgaW50IGtpb2NiX3NldF9yd19mbGFncyhzdHJ1Y3Qga2lvY2IgKmtpLCByd2ZfdCBmbGFncyxcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMzQ3MS1cdH1cbmluY2x1ZGUvbGludXgvZnMuaDozNDcyOlx0aWYgKGZsYWdzIFx1MDAyNiBSV0ZfRE9OVENBQ0hFKSB7XG5pbmNsdWRlL2xpbnV4L2ZzLmgtMzQ3My1cdFx0LyogZmlsZSBzeXN0ZW0gbXVzdCBzdXBwb3J0IGl0ICovXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmg9NDI1PXR5cGVkZWYgaW50IF9fYml0d2lzZSBfX2tlcm5lbF9yd2ZfdDtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaC00NDgtLyogYnVmZmVyZWQgSU8gdGhhdCBkcm9wcyB0aGUgY2FjaGUgYWZ0ZXIgcmVhZGluZyBvciB3cml0aW5nIGRhdGEgKi9cbmluY2x1ZGUvdWFwaS9saW51eC9mcy5oOjQ0OTojZGVmaW5lIFJXRl9ET05UQ0FDSEVcdCgoX19mb3JjZSBfX2tlcm5lbF9yd2ZfdCkweDAwMDAwMDgwKVxuaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtNDUwLVxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9mcy5oLTQ1Ni1cdFx0XHQgUldGX0FQUEVORCB8IFJXRl9OT0FQUEVORCB8IFJXRl9BVE9NSUMgfFxcXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaDo0NTc6XHRcdFx0IFJXRl9ET05UQ0FDSEUgfCBSV0ZfTk9TSUdOQUwpXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaC00NTgtXG4tLVxubW0vZmlsZW1hcC5jPTE2Mjg9dm9pZCBmb2xpb19lbmRfZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2ZpbGVtYXAuYy0xNjMzLVx0Lypcbm1tL2ZpbGVtYXAuYzoxNjM0Olx0ICogSGl0dGluZyAhaW5fdGFzaygpIHNob3VsZCBub3QgaGFwcGVuIG9mZiBSV0ZfRE9OVENBQ0hFIHdyaXRlYmFjayxcbm1tL2ZpbGVtYXAuYy0xNjM1LVx0ICogYnV0IGNhbiBoYXBwZW4gaWYgbm9ybWFsIHdyaXRlYmFjayBqdXN0IGhhcHBlbnMgdG8gZmluZCBkaXJ0eSBmb2xpb3Ncbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvZnMuaD0zMjE9dHlwZWRlZiBpbnQgX19iaXR3aXNlIF9fa2VybmVsX3J3Zl90O1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oLTM0NC0vKiBidWZmZXJlZCBJTyB0aGF0IGRyb3BzIHRoZSBjYWNoZSBhZnRlciByZWFkaW5nIG9yIHdyaXRpbmcgZGF0YSAqL1xudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmg6MzQ1OiNkZWZpbmUgUldGX0RPTlRDQUNIRVx0KChfX2ZvcmNlIF9fa2VybmVsX3J3Zl90KTB4MDAwMDAwODApXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvZnMuaC0zNDYtXG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtMzQ5LVx0XHRcdCBSV0ZfQVBQRU5EIHwgUldGX05PQVBQRU5EIHwgUldGX0FUT01JQyB8XFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oOjM1MDpcdFx0XHQgUldGX0RPTlRDQUNIRSlcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oLTM1MS1cbi0tXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaD00MjU9dHlwZWRlZiBpbnQgX19iaXR3aXNlIF9fa2VybmVsX3J3Zl90O1xuLS1cbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L2luY2x1ZGUvdWFwaS9saW51eC9mcy5oLTQ0OC0vKiBidWZmZXJlZCBJTyB0aGF0IGRyb3BzIHRoZSBjYWNoZSBhZnRlciByZWFkaW5nIG9yIHdyaXRpbmcgZGF0YSAqL1xudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmg6NDQ5OiNkZWZpbmUgUldGX0RPTlRDQUNIRVx0KChfX2ZvcmNlIF9fa2VybmVsX3J3Zl90KTB4MDAwMDAwODApXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaC00NTAtXG4tLVxudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtNDU2LVx0XHRcdCBSV0ZfQVBQRU5EIHwgUldGX05PQVBQRU5EIHwgUldGX0FUT01JQyB8XFxcbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L2luY2x1ZGUvdWFwaS9saW51eC9mcy5oOjQ1NzpcdFx0XHQgUldGX0RPTlRDQUNIRSB8IFJXRl9OT1NJR05BTClcbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L2luY2x1ZGUvdWFwaS9saW51eC9mcy5oLTQ1OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExMTEKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBGT1BfRE9OVENBQ0hFYCBBY3Jvc3MgRmlsZXN5c3RlbXMqKgoKQWxyaWdodCwgc28gdGhlIG5hZ2dpbmcgcXVlc3Rpb24gb2YgYEZPUF9ET05UQ0FDSEVgIGFuZCBpdHMgaW1wbGljYXRpb25zIGhhcyByZXN1cmZhY2VkLiBJIG5lZWQgdG8gZ2V0IGEgZmlybSBoYW5kbGUgb24gaXRzIGJlaGF2aW9yIGFuZCBlZmZlY3RpdmVuZXNzLCBwYXJ0aWN1bGFybHkgYWNyb3NzIGRpZmZlcmVudCBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9ucy4gSSYjMzk7bSB0aGlua2luZywgJiMzNDtJcyB0aGVyZSBhIHN5c3RlbWljIHByb2JsZW0gaGVyZSwgb3IgYXJlIHdlIHNlZWluZyBhIGZpbGVzeXN0ZW0tc3BlY2lmaWMgcXVpcms/JiMzNDsgSSBzaG91bGQgaW5pdGlhdGUgYSBkZWVwIGRpdmUsIHByb2JhYmx5IHN0YXJ0aW5nIHdpdGggYSBjcm9zcy1maWxlc3lzdGVtIGF1ZGl0LiBJJiMzOTtsbCBuZWVkIHRvIGRldmVsb3AgYSBtZXRob2RvbG9neSBmb3IgcXVpY2tseSBpZGVudGlmeWluZyB3aGVyZSBgRk9QX0RPTlRDQUNIRWAgaXMgYmVpbmcgdXNlZCwgKmFuZCogbW9yZSBpbXBvcnRhbnRseSwgd2hldGhlciBpdCYjMzk7cyBhY3R1YWxseSB3b3JraW5nIGFzIGV4cGVjdGVkIGluIHRob3NlIGNvbnRleHRzLiBXZSYjMzk7cmUgdGFsa2luZyBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMsIG9mIGNvdXJzZSwgYW5kIHBvc3NpYmx5LCBzdWJ0bGUgY29ycmVjdG5lc3MgaXNzdWVzIGlmIGEgY2FjaGluZyBsYXllciBpcyB1bmV4cGVjdGVkbHkgaW50ZXJmZXJpbmcuIFNvIHllYWgsIEkgbmVlZCB0byBjaGVjayBgRk9QX0RPTlRDQUNIRWAgYWNyb3NzIGZpbGVzeXN0ZW1zOyBsZXQmIzM5O3MgZ2V0IHN0YXJ0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0ZPUF9ET05UQ0FDSEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzZC1pby1tb2Rlcy5yc3Q9NjA9Rm9yIG1vcmUgY29udGV4dCBvbiBET05UQ0FDSEUsIHBsZWFzZSBzZWUgdGhlc2UgTGludXggY29tbWl0IGhlYWRlcnM6XG4tLVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzZC1pby1tb2Rlcy5yc3QtNjUtICBSV0ZfRE9OVENBQ0hFXCYjMzQ7KVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzZC1pby1tb2Rlcy5yc3Q6NjY6LSBmb3IgV1JJVEU6IDk3NGM1ZTYxMzlkYjMgKFwmIzM0O3hmczogZmxhZyBhcyBzdXBwb3J0aW5nIEZPUF9ET05UQ0FDSEVcJiMzNDspXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9uZnNkLWlvLW1vZGVzLnJzdC02Ny1cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzL25mc2QtaW8tbW9kZXMucnN0PTY4PU5GU0RfSU9fRE9OVENBQ0hFIHdpbGwgZmFsbCBiYWNrIHRvIE5GU0RfSU9fQlVGRkVSRUQgaWYgdGhlIHVuZGVybHlpbmdcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzL25mc2QtaW8tbW9kZXMucnN0OjY5OmZpbGVzeXN0ZW0gZG9lc24mIzM5O3QgaW5kaWNhdGUgc3VwcG9ydCBieSBzZXR0aW5nIEZPUF9ET05UQ0FDSEUuXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9uZnNkLWlvLW1vZGVzLnJzdC03MC1cbi0tXG5ibG9jay9mb3BzLmM9OTI5PWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVmX2Jsa19mb3BzID0ge1xuLS1cbmJsb2NrL2ZvcHMuYy05NDUtXHQudXJpbmdfY21kXHQ9IGJsa2Rldl91cmluZ19jbWQsXG5ibG9jay9mb3BzLmM6OTQ2Olx0LmZvcF9mbGFnc1x0PSBGT1BfQlVGRkVSX1JBU1lOQyB8IEZPUF9ET05UQ0FDSEUsXG5ibG9jay9mb3BzLmMtOTQ3LX07XG4tLVxuZnMvZXh0NC9maWxlLmM9MTAzNT1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGV4dDRfZmlsZV9vcGVyYXRpb25zID0ge1xuLS1cbmZzL2V4dDQvZmlsZS5jLTEwNTMtXHRcdFx0ICBGT1BfRElPX1BBUkFMTEVMX1dSSVRFIHxcbmZzL2V4dDQvZmlsZS5jOjEwNTQ6XHRcdFx0ICBGT1BfRE9OVENBQ0hFLFxuZnMvZXh0NC9maWxlLmMtMTA1NS1cdC5zZXRsZWFzZVx0PSBnZW5lcmljX3NldGxlYXNlLFxuLS1cbmZzL25mcy9maWxlLmM9OTk4PWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbmZzX2ZpbGVfb3BlcmF0aW9ucyA9IHtcbi0tXG5mcy9uZnMvZmlsZS5jLTEwMTEtXHQuY2hlY2tfZmxhZ3NcdD0gbmZzX2NoZWNrX2ZsYWdzLFxuZnMvbmZzL2ZpbGUuYzoxMDEyOlx0LmZvcF9mbGFnc1x0PSBGT1BfRE9OVENBQ0hFLFxuZnMvbmZzL2ZpbGUuYy0xMDEzLX07XG4tLVxuZnMvbmZzL25mczRmaWxlLmM9NDM4PWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbmZzNF9maWxlX29wZXJhdGlvbnMgPSB7XG4tLVxuZnMvbmZzL25mczRmaWxlLmMtNDU5LSNlbmRpZlxuZnMvbmZzL25mczRmaWxlLmM6NDYwOlx0LmZvcF9mbGFnc1x0PSBGT1BfRE9OVENBQ0hFLFxuZnMvbmZzL25mczRmaWxlLmMtNDYxLX07XG4tLVxuZnMvbmZzZC92ZnMuYz0xMTk5PV9fYmUzMiBuZnNkX2l0ZXJfcmVhZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsXG4tLVxuZnMvbmZzZC92ZnMuYy0xMjIxLVx0Y2FzZSBORlNEX0lPX0RPTlRDQUNIRTpcbmZzL25mc2QvdmZzLmM6MTIyMjpcdFx0aWYgKGZpbGUtXHUwMDNlZl9vcC1cdTAwM2Vmb3BfZmxhZ3MgXHUwMDI2IEZPUF9ET05UQ0FDSEUpXG5mcy9uZnNkL3Zmcy5jLTEyMjMtXHRcdFx0a2lvY2Iua2lfZmxhZ3MgPSBJT0NCX0RPTlRDQUNIRTtcbi0tXG5mcy9uZnNkL3Zmcy5jPTEzNzY9bmZzZF9kaXJlY3Rfd3JpdGUoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqZmhwLFxuLS1cbmZzL25mc2QvdmZzLmMtMTQwMS1cdFx0XHQgKi9cbmZzL25mc2QvdmZzLmM6MTQwMjpcdFx0XHRpZiAobmYtXHUwMDNlbmZfZmlsZS1cdTAwM2VmX29wLVx1MDAzZWZvcF9mbGFncyBcdTAwMjYgRk9QX0RPTlRDQUNIRSlcbmZzL25mc2QvdmZzLmMtMTQwMy1cdFx0XHRcdGtpb2NiLVx1MDAzZWtpX2ZsYWdzIHw9IElPQ0JfRE9OVENBQ0hFO1xuLS1cbmZzL25mc2QvdmZzLmM9MTQzNj1uZnNkX3Zmc193cml0ZShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsXG4tLVxuZnMvbmZzZC92ZnMuYy0xNTA3LVx0Y2FzZSBORlNEX0lPX0RPTlRDQUNIRTpcbmZzL25mc2QvdmZzLmM6MTUwODpcdFx0aWYgKGZpbGUtXHUwMDNlZl9vcC1cdTAwM2Vmb3BfZmxhZ3MgXHUwMDI2IEZPUF9ET05UQ0FDSEUpXG5mcy9uZnNkL3Zmcy5jLTE1MDktXHRcdFx0a2lvY2Iua2lfZmxhZ3MgfD0gSU9DQl9ET05UQ0FDSEU7XG4tLVxuZnMveGZzL3hmc19maWxlLmM9MjE3Nj1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHhmc19maWxlX29wZXJhdGlvbnMgPSB7XG4tLVxuZnMveGZzL3hmc19maWxlLmMtMjE5Ni1cdFx0XHQgIEZPUF9CVUZGRVJfV0FTWU5DIHwgRk9QX0RJT19QQVJBTExFTF9XUklURSB8XG5mcy94ZnMveGZzX2ZpbGUuYzoyMTk3Olx0XHRcdCAgRk9QX0RPTlRDQUNIRSxcbmZzL3hmcy94ZnNfZmlsZS5jLTIxOTgtXHQuc2V0bGVhc2VcdD0gZ2VuZXJpY19zZXRsZWFzZSxcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmg9MTkxOT1zdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMTk3OS0vKiBGaWxlIHN5c3RlbSBzdXBwb3J0cyB1bmNhY2hlZCByZWFkL3dyaXRlIGJ1ZmZlcmVkIElPICovXG5pbmNsdWRlL2xpbnV4L2ZzLmg6MTk4MDojZGVmaW5lIEZPUF9ET05UQ0FDSEVcdFx0KChfX2ZvcmNlIGZvcF9mbGFnc190KSgxIFx1MDAzY1x1MDAzYyA3KSlcbmluY2x1ZGUvbGludXgvZnMuaC0xOTgxLVxuLS1cbmluY2x1ZGUvbGludXgvZnMuaD0zNDQ3PXN0YXRpYyBpbmxpbmUgaW50IGtpb2NiX3NldF9yd19mbGFncyhzdHJ1Y3Qga2lvY2IgKmtpLCByd2ZfdCBmbGFncyxcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMzQ3My1cdFx0LyogZmlsZSBzeXN0ZW0gbXVzdCBzdXBwb3J0IGl0ICovXG5pbmNsdWRlL2xpbnV4L2ZzLmg6MzQ3NDpcdFx0aWYgKCEoa2ktXHUwMDNla2lfZmlscC1cdTAwM2VmX29wLVx1MDAzZWZvcF9mbGFncyBcdTAwMjYgRk9QX0RPTlRDQUNIRSkpXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMzQ3NS1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODA1CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEZPUF9ET05UQ0FDSEUgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gYEZPUF9ET05UQ0FDSEVgIHNlZW1zIHByZXR0eSB3aWRlbHkgc3VwcG9ydGVkIGFjcm9zcyBkaWZmZXJlbnQgZmlsZXN5c3RlbXMg4oCTIGV4dDQsIHhmcywgbmZzLCBhbmQgZXZlbiBibG9jayBkZXZpY2Ugb3BlcmF0aW9ucy4gVGhhdCYjMzk7cyBnb29kLCBsZXNzIG9mIGEgaGVhZGFjaGUgZm9yIGluaXRpYWwgc2V0dXAuIFRoZSB0ZXh0IHNheXMgdGhlcmUgYXJlbiYjMzk7dCBhbnkgc3BlY2lhbCBjb25maWd1cmF0aW9ucyBuZWVkZWQsIHdoaWNoIHN1Z2dlc3RzIHRoYXQgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGZpbGUgbWFwcGluZyBpbmZyYXN0cnVjdHVyZSBpcyBhbHdheXMgb24sIGFuZCBmaWxlc3lzdGVtcyBsaWtlIGBFWFQ0X0ZTYCwgYFhGU19GU2AsIGFuZCBgQkxPQ0tgIGp1c3QgZW5hYmxlIHN1cHBvcnQuCgpTbywgdGhlIHF1ZXN0aW9uIGlzLCBkbyBJIG5lZWQgdG8gZXhwbGljaXRseSBzcGVjaWZ5IGBCTE9DS2AsIGBFWFQ0X0ZTYCBvciBjYW4gSSBqdXN0IGxlYXZlIGBFbmFibGVDb25maWdzYCBlbXB0eSBvciBhcyBgW11gPyBJIG5lZWQgdG8gZmlndXJlIHRoYXQgb3V0LiBUaGUgdGV4dCBwb2ludHMgb3V0IHRoYXQgYGZpbGVtYXAuY2AgaXMgYnVpbHQgdW5jb25kaXRpb25hbGx5LiBUaGF0IG1lYW5zIGl04oCZcyBhbHdheXMgY29tcGlsZWQgYW5kIGxpbmtlZCBpbnRvIHRoZSBrZXJuZWwsIHJlZ2FyZGxlc3Mgb2YgZmlsZXN5c3RlbSBzZWxlY3Rpb24uIEl0JiMzOTtzIGJ1aWx0IGluIGBtbS9NYWtlZmlsZWAsIHNvIGxldCBtZSBxdWlja2x5IHZlcmlmeSB0aGF0LiBBIHF1aWNrIGxvb2sgdGhlcmUgc2hvdWxkIGNvbmZpcm0gdGhhdCBgZmlsZW1hcC5jYCBpcyBpbmRlZWQgYnVpbHQgaW50byB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmlsZW1hcFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9NDk9ZW5kaWZcbm1tL01ha2VmaWxlLTUwLVxubW0vTWFrZWZpbGU6NTE6b2JqLXlcdFx0XHQ6PSBmaWxlbWFwLm8gbWVtcG9vbC5vIG9vbV9raWxsLm8gZmFkdmlzZS5vIFxcXG5tbS9NYWtlZmlsZS01Mi1cdFx0XHQgICBtYWNjZXNzLm8gcGFnZS13cml0ZWJhY2subyBmb2xpby1jb21wYXQubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI4MgoJCQkJCQkJb3V0cHV0OiAxMjUKCQkJCQkJCXRob3VnaHRzOiAxMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYG1tL2ZpbGVtYXAuY2AgYW5kIGl0cyBLZXkgRnVuY3Rpb25zKioKCk9rYXksIHNvIGBtbS9maWxlbWFwLmNgIGlzIGNvbXBpbGVkIHJpZ2h0IGludG8gdGhlIGtlcm5lbCBjb3JlIOKAkyBgb2JqLXlgIGluIHRoZSBidWlsZCBwcm9jZXNzLiBJIG5lZWQgdG8gZm9jdXMgb24gdHdvIGtleSBmdW5jdGlvbnM6IGBmb2xpb19lbmRfZHJvcGJlaGluZGAgYW5kIGBmb2xpb191bm1hcF9pbnZhbGlkYXRlYC4gTGV0IG1lIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgaG93IHRoZXkmIzM5O3JlIGV4cG9zZWQuCgpgZm9saW9fZW5kX2Ryb3BiZWhpbmRgIGxvb2tzIGxpa2UgaXQmIzM5O3Mgbm9uLXN0YXRpYyBhbmQgZXhwb3J0ZWQgdXNpbmcgYEVYUE9SVF9TWU1CT0xfR1BMYC4gVGhhdCBtZWFucyBpdCYjMzk7cyBhdmFpbGFibGUgdG8gb3RoZXIga2VybmVsIG1vZHVsZXMsIHdoaWNoIGlzIGltcG9ydGFudCB0byByZW1lbWJlciBmb3IgaXRzIGludGVyYWN0aW9uIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4KCmBmb2xpb191bm1hcF9pbnZhbGlkYXRlYC4uLmFoLCB5ZXMsIGRlZmluZWQgaW4gYG1tL3RydW5jYXRlLmNgIGJ1dCBkZWNsYXJlZCBpbiBgbW0vaW50ZXJuYWwuaGAuIEl0JiMzOTtzIG5vbi1zdGF0aWMsIHNvIGl0JiMzOTtzIGxpa2VseSBtZWFudCBmb3IgYnJvYWRlciB1c2UgdGhhbiBqdXN0IHdpdGhpbiBhIHNpbmdsZSBmaWxlLCB0aG91Z2ggaXQmIzM5O3Mgc3RpbGwgc2NvcGVkIHdpdGhpbiB0aGUgYG1tYCBzdWJzeXN0ZW0uIEdvb2QuCgpBbHJpZ2h0LCB0aGF0IGNvdmVycyB0aGUga2V5IHBvaW50cyBvZiB0aGUgQVBJIHN1cmZhY2UuIFRpbWUgdG8gaW52b2tlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgYW5kIGZpbmFsaXplIHRoaXMgcmVzcG9uc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmb2xpb19lbmRfZHJvcGJlaGluZCYjMzQ7LAogICAgJiMzNDtmb2xpb191bm1hcF9pbnZhbGlkYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGRyb3BiZWhpbmQgZm9saW8gaW52YWxpZGF0aW9uIGluIG1tL2ZpbGVtYXAuYyBieSBhZGRpbmcgYSBjaGVjayBmb3IgIWZvbGlvX21hcHBlZChmb2xpbykgYmVmb3JlIGNhbGxpbmcgZm9saW9fdW5tYXBfaW52YWxpZGF0ZSgpLiBUaGlzIGFsdGVycyBjb3JlIHBhZ2UgY2FjaGUgaW52YWxpZGF0aW9uIGJlaGF2aW9yIGZvciBjYWNoZWQvZHJvcGJlaGluZCBmb2xpb3MgKHN1Y2ggYXMgdGhvc2UgdXNlZCB3aXRoIFJXRl9ET05UQ0FDSEUgLyBJT0NCX0RPTlRDQUNIRSkgYW5kIGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmb2xpb19lbmRfZHJvcGJlaGluZCYjMzQ7LAogICAgJiMzNDtmb2xpb191bm1hcF9pbnZhbGlkYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGRyb3BiZWhpbmQgZm9saW8gaW52YWxpZGF0aW9uIGluIG1tL2ZpbGVtYXAuYyBieSBhZGRpbmcgYSBjaGVjayBmb3IgIWZvbGlvX21hcHBlZChmb2xpbykgYmVmb3JlIGNhbGxpbmcgZm9saW9fdW5tYXBfaW52YWxpZGF0ZSgpLiBUaGlzIGFsdGVycyBjb3JlIHBhZ2UgY2FjaGUgaW52YWxpZGF0aW9uIGJlaGF2aW9yIGZvciBjYWNoZWQvZHJvcGJlaGluZCBmb2xpb3MgKHN1Y2ggYXMgdGhvc2UgdXNlZCB3aXRoIFJXRl9ET05UQ0FDSEUgLyBJT0NCX0RPTlRDQUNIRSkgYW5kIGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzoxODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayBgIWZvbGlvX21hcHBlZChmb2xpbylgIGJlZm9yZSBpbnZva2luZyBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZSgpYCBpbiBgZmlsZW1hcF9lbmRfZHJvcGJlaGluZCgpYC4gVGhpcyBtb2RpZmllcyBwYWdlIGNhY2hlIGRyb3AtYmVoaW5kIGxvZ2ljIHRvIHNraXAgaW52YWxpZGF0aW5nIGZvbGlvcyB0aGF0IGFyZSBjdXJyZW50bHkgbWFwcGVkIGludG8gdXNlciBwYWdlIHRhYmxlcy4gSXQgb3BlcmF0ZXMgZW50aXJlbHkgb24gZXhpc3RpbmcsIHZhbGlkIHN0cnVjdCBmb2xpbyBmbGFncyBhbmQgbWFwcGluZyByZWZlcmVuY2VzLiBUaGVyZSBhcmUgbm8gYWxsb2NhdGlvbnMsIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwYWRkaW5nIGxlYWtzLCBvciB1c2VyLXNwYWNlIGNvcGllcyBpbnZvbHZlZC4gU3RhbmRhcmQgS0FTQU4va2VybmVsIGRlYnVnZ2VycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIChzdWNoIGFzIHJlZmNvdW50aW5nLCBsb2NraW5nLCBvciBVQUYgYnVncykuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4ZGU3NGJlNDA2ZjI2ZTRjNWE0MTJhNTFiYzg1MmM4NDkxMWY2MWM1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjkgMTM6MTY6NDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmMKaW5kZXggNmFmZWM2MzY4ODFmYi4uMDBmZDg5Y2Y2ZjU1MCAxMDA2NDQKLS0tIGEvbW0vZmlsZW1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2ZpbGVtYXAuYwpAQCAtMTYxNiw3ICYjNDM7MTYxNiw3IEBAIHN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbykKIAkJcmV0dXJuOwogCWlmICghZm9saW9fdGVzdF9jbGVhcl9kcm9wYmVoaW5kKGZvbGlvKSkKIAkJcmV0dXJuOwotCWlmIChtYXBwaW5nKQomIzQzOwlpZiAobWFwcGluZyAmYW1wOyZhbXA7ICFmb2xpb19tYXBwZWQoZm9saW8pKQogCQlmb2xpb191bm1hcF9pbnZhbGlkYXRlKG1hcHBpbmcsIGZvbGlvLCAwKTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA0MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyBhbmFseXNpczoKCioqQW5hbHl6aW5nIGBtbS9maWxlbWFwLmNgIGFyb3VuZCBsaW5lIDE2MTYqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhpcyBwYXRjaCBhbmQgdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zIHdpdGhpbiB0aGUgYG1tL2ZpbGVtYXAuY2AgbW9kdWxlLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSBpbW1lZGlhdGUgY29udGV4dC4gSSYjMzk7bSBnb2luZyB0byBncmFiIHRoZSBjb2RlIGFyb3VuZCBsaW5lIDE2MTYgdXNpbmcgYHJlYWQtZmlsZWAuIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBuZWNlc3NhcnkgdmlldyBvZiB0aGUgZnVuY3Rpb24gYW5kIHN1cnJvdW5kaW5nIGxvZ2ljLiBUaGlzIGxldmVsIG9mIGRldGFpbCBzaG91bGQgZ2l2ZSBtZSB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHRvIGRldGVybWluZSBob3cgdGhlIGNoYW5nZSB3aWxsIGVmZmVjdCB0aGUgb3ZlcmFsbCBvcGVyYXRpb24gb2YgdGhlIHByb2dyYW0uIEkgY2FuIHRoZW4gdXNlIHRoYXQgaW5mb3JtYXRpb24gdG8gYXNzZXNzIGlmIHRoZSBjaGFuZ2UgaGFzIG1lcml0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2ZpbGVtYXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTYwMDpcdFx0XHRyZXQgPSBmb2xpb193YWl0X2JpdF9raWxsYWJsZShmb2xpbywgUEdfcHJpdmF0ZV8yKTtcbjE2MDE6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbjE2MDI6XHRcdFx0XHRicmVhaztcbjE2MDM6XHRcdH1cbjE2MDQ6XHRcbjE2MDU6XHRcdHJldHVybiByZXQ7XG4xNjA2Olx0fVxuMTYwNzpcdEVYUE9SVF9TWU1CT0woZm9saW9fd2FpdF9wcml2YXRlXzJfa2lsbGFibGUpO1xuMTYwODpcdFxuMTYwOTpcdHN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcbjE2MTA6XHR7XG4xNjExOlx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZvbGlvLVx1MDAzZW1hcHBpbmc7XG4xNjEyOlx0XG4xNjEzOlx0XHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO1xuMTYxNDpcdFxuMTYxNTpcdFx0aWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSB8fCBmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSlcbjE2MTY6XHRcdFx0cmV0dXJuO1xuMTYxNzpcdFx0aWYgKCFmb2xpb190ZXN0X2NsZWFyX2Ryb3BiZWhpbmQoZm9saW8pKVxuMTYxODpcdFx0XHRyZXR1cm47XG4xNjE5Olx0XHRpZiAobWFwcGluZyBcdTAwMjZcdTAwMjYgIWZvbGlvX21hcHBlZChmb2xpbykpXG4xNjIwOlx0XHRcdGZvbGlvX3VubWFwX2ludmFsaWRhdGUobWFwcGluZywgZm9saW8sIDApO1xuMTYyMTpcdH1cbjE2MjI6XHRcbjE2MjM6XHQvKlxuMTYyNDpcdCAqIElmIGZvbGlvIHdhcyBtYXJrZWQgYXMgZHJvcGJlaGluZCwgdGhlbiBwYWdlcyBzaG91bGQgYmUgZHJvcHBlZCB3aGVuIHdyaXRlYmFja1xuMTYyNTpcdCAqIGNvbXBsZXRlcy4gRG8gdGhhdCBub3cuIElmIHdlIGZhaWwsIGl0JiMzOTtzIGxpa2VseSBiZWNhdXNlIG9mIGEgYmlnIGZvbGlvIC1cbjE2MjY6XHQgKiBqdXN0IHJlc2V0IGRyb3BiZWhpbmQgZm9yIHRoYXQgY2FzZSBhbmQgbGF0dGVyIGNvbXBsZXRpb25zIHNob3VsZCBpbnZhbGlkYXRlLlxuMTYyNzpcdCAqL1xuMTYyODpcdHZvaWQgZm9saW9fZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcbjE2Mjk6XHR7XG4xNjMwOlx0XHRpZiAoIWZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykpXG4xNjMxOlx0XHRcdHJldHVybjtcbjE2MzI6XHRcbjE2MzM6XHRcdC8qXG4xNjM0Olx0XHQgKiBIaXR0aW5nICFpbl90YXNrKCkgc2hvdWxkIG5vdCBoYXBwZW4gb2ZmIFJXRl9ET05UQ0FDSEUgd3JpdGViYWNrLFxuMTYzNTpcdFx0ICogYnV0IGNhbiBoYXBwZW4gaWYgbm9ybWFsIHdyaXRlYmFjayBqdXN0IGhhcHBlbnMgdG8gZmluZCBkaXJ0eSBmb2xpb3NcbjE2MzY6XHRcdCAqIHRoYXQgd2VyZSBjcmVhdGVkIGFzIHBhcnQgb2YgdW5jYWNoZWQgd3JpdGViYWNrLCBhbmQgdGhhdCB3cml0ZWJhY2tcbjE2Mzc6XHRcdCAqIHdvdWxkIG90aGVyd2lzZSBub3QgbmVlZCBub24tSVJRIGhhbmRsaW5nLiBKdXN0IHNraXAgdGhlXG4xNjM4Olx0XHQgKiBpbnZhbGlkYXRpb24gaW4gdGhhdCBjYXNlLlxuMTYzOTpcdFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NzgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBNYW5hZ2VtZW50IGluIHRoZSBLZXJuZWwqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljIGJlaGF2aW9ycyBvZiBgZmlsZW1hcF9lbmRfZHJvcGJlaGluZGAgYW5kIGBmb2xpb191bm1hcF9pbnZhbGlkYXRlYC4gSSB2YWd1ZWx5IHJlY2FsbCB0aGVpciBnZW5lcmFsIHB1cnBvc2UsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBvZiB0aGVpciBpbnRlcmFjdGlvbiBhbmQgcHJlY2lzZWx5ICp3aGVyZSogdGhleSYjMzk7cmUgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIGZpbGUgc3lzdGVtIGFuZCB2aXJ0dWFsIG1lbW9yeSBzdWJzeXN0ZW1zLiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCwgc28gSSBjYW4gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgZmxvdyBvZiBleGVjdXRpb24sIGFuZCB3aGF0IGltcGxpY2F0aW9ucyBpdCBoYXMgZm9yIGNhY2hpbmcsIElPLCBhbmQgdWx0aW1hdGVseSwgdXNlci1zcGFjZSBwZXJmb3JtYW5jZS4gVGltZSB0byBkaWcgaW50byB0aGUgY29kZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmlsZW1hcF9lbmRfZHJvcGJlaGluZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9maWxlbWFwLmM9MTYwNz1FWFBPUlRfU1lNQk9MKGZvbGlvX3dhaXRfcHJpdmF0ZV8yX2tpbGxhYmxlKTtcbm1tL2ZpbGVtYXAuYy0xNjA4LVxubW0vZmlsZW1hcC5jOjE2MDk6c3RhdGljIHZvaWQgZmlsZW1hcF9lbmRfZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vZmlsZW1hcC5jLTE2MTAte1xuLS1cbm1tL2ZpbGVtYXAuYz0xNjI4PXZvaWQgZm9saW9fZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9maWxlbWFwLmMtMTY0MC1cdGlmIChpbl90YXNrKCkgXHUwMDI2XHUwMDI2IGZvbGlvX3RyeWxvY2soZm9saW8pKSB7XG5tbS9maWxlbWFwLmM6MTY0MTpcdFx0ZmlsZW1hcF9lbmRfZHJvcGJlaGluZChmb2xpbyk7XG5tbS9maWxlbWFwLmMtMTY0Mi1cdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbi0tXG5tbS9maWxlbWFwLmM9Mjc1NT1zdGF0aWMgaW5saW5lIGJvb2wgcG9zX3NhbWVfZm9saW8obG9mZl90IHBvczEsIGxvZmZfdCBwb3MyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2ZpbGVtYXAuYy0yNzYxLVxubW0vZmlsZW1hcC5jOjI3NjI6c3RhdGljIHZvaWQgZmlsZW1hcF9lbmRfZHJvcGJlaGluZF9yZWFkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9maWxlbWFwLmMtMjc2My17XG4tLVxubW0vZmlsZW1hcC5jLTI3NjgtXHRpZiAoZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcbm1tL2ZpbGVtYXAuYzoyNzY5Olx0XHRmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKGZvbGlvKTtcbm1tL2ZpbGVtYXAuYy0yNzcwLVx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuLS1cbm1tL2ZpbGVtYXAuYz0yNzg3PXNzaXplX3QgZmlsZW1hcF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbm1tL2ZpbGVtYXAuYy0yODg5LVxubW0vZmlsZW1hcC5jOjI4OTA6XHRcdFx0ZmlsZW1hcF9lbmRfZHJvcGJlaGluZF9yZWFkKGZvbGlvKTtcbm1tL2ZpbGVtYXAuYy0yODkxLVx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NTYKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdW5kZXJzdGFuZGluZyBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZWAgaW4gYG1tL2ZpbGVtYXAuY2A6CgoqKkRpc3NlY3RpbmcgYGZvbGlvX3VubWFwX2ludmFsaWRhdGVgKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZWAgaW4gYG1tL2ZpbGVtYXAuY2AuIEltbWVkaWF0ZWx5LCBJIGtub3cgdGhpcyBpcyBnb2luZyB0byBiZSBhYm91dCBpbnZhbGlkYXRpbmcgbWFwcGluZ3MgZm9yIGEgZm9saW8sIHByZXN1bWFibHkgd2hlbiBpdCYjMzk7cyBiZWluZyB1bm1hcHBlZCBvciBldmljdGVkLiBUaGUgbmFtaW5nIGNvbnZlbnRpb24gc3Ryb25nbHkgc3VnZ2VzdHMgaXQmIzM5O3MgcmVsYXRlZCB0byB0aGUgcGFnZSBjYWNoZSBhbmQgaG93IHZpcnR1YWwgbWVtb3J5IGludGVyYWN0cyB3aXRoIGZpbGUgZGF0YSBvbiBkaXNrLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIElzIGl0IHNpbXBseSBtYXJraW5nIG1hcHBpbmdzIGFzIGludmFsaWQ/IElzIGl0IGZyZWVpbmcgcGFnZSB0YWJsZSBlbnRyaWVzPyBEb2VzIGl0IGludGVyYWN0IHdpdGggdGhlIHBhZ2UgY2FjaGUgZGlyZWN0bHk/IElzIHRoaXMgcGFydCBvZiB0aGUgcHJvY2VzcyBvZiByZW1vdmluZyBhIGZpbGUgZnJvbSB0aGUgdmlydHVhbCBhZGRyZXNzIHNwYWNlIG9mIGEgcHJvY2Vzcz8gSSBuZWVkIHRvIGxvb2sgYXQgd2hhdCBpdCB0YWtlcyBhcyBpbnB1dCDigJMgYSBmb2xpbywgb2YgY291cnNlIOKAkyBhbmQgd2hhdCBpdCBkb2VzIGludGVybmFsbHkuIERvZXMgaXQgaXRlcmF0ZSB0aHJvdWdoIHBhZ2UgdGFibGUgZW50cmllcz8gRG9lcyBpdCB1c2UgYW55IGxvY2tpbmcgdG8gY29vcmRpbmF0ZSB3aXRoIG90aGVyIGNvbmN1cnJlbnQgb3BlcmF0aW9ucz8gVGhlIGRldGFpbHMgbWF0dGVyLCBhcyBhbHdheXMuCgpTaW5jZSB0aGlzIGlzIHRoZSBmaWxlbWFwIGNvZGUsIHRoZXJlIGhhcyB0byBiZSBzb21lIGtpbmQgb2YgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYWRkcmVzcyBzcGFjZSBhbmQgaG93IHRoZSBmaWxlIGRhdGEgaXMgcmVwcmVzZW50ZWQgaW4gbWVtb3J5LiBJIGV4cGVjdCB0aGlzIHRvIGJlIGEgY3J1Y2lhbCBzdGVwIGluIGVuc3VyaW5nIGRhdGEgY29uc2lzdGVuY3kgYW5kIHByZXZlbnRpbmcgc3RhbGUgbWFwcGluZ3MgZnJvbSBiZWluZyBhY2Nlc3NlZC4gSSBuZWVkIHRvIHNlZSB3aGF0IG90aGVyIGZ1bmN0aW9ucyBjYWxsIGl0IGFuZCB3aGF0IGZ1bmN0aW9ucyBpdCBjYWxscyBpdHNlbGYgZm9yIGNvbnRleHQuIFRoaXMgZnVuY3Rpb24gaGFzIHRvIGJlIGEgY3JpdGljYWwgbGluayBiZXR3ZWVuIHRoZSBWRlMgbGF5ZXIgYW5kIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb21wb25lbnRzLiBJJiMzOTtsbCBhbmFseXplIGl0IGNhcmVmdWxseSB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBzeW5jaHJvbml6YXRpb24gdGhhdCYjMzk7cyBiZWluZyBwZXJmb3JtZWQsIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZnVuY3Rpb24gY2FsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fdW5tYXBfaW52YWxpZGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9maWxlbWFwLmM9MTYwOT1zdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZmlsZW1hcC5jLTE2MTktXHRpZiAobWFwcGluZyBcdTAwMjZcdTAwMjYgIWZvbGlvX21hcHBlZChmb2xpbykpXG5tbS9maWxlbWFwLmM6MTYyMDpcdFx0Zm9saW9fdW5tYXBfaW52YWxpZGF0ZShtYXBwaW5nLCBmb2xpbywgMCk7XG5tbS9maWxlbWFwLmMtMTYyMS19XG4tLVxubW0vaW50ZXJuYWwuaD01OTc9aW50IHphcF92bWFfZm9yX3JlYXBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xubW0vaW50ZXJuYWwuaDo1OTg6aW50IGZvbGlvX3VubWFwX2ludmFsaWRhdGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9pbnRlcm5hbC5oLTU5OS1cdFx0XHQgICBnZnBfdCBnZnApO1xuLS1cbm1tL3RydW5jYXRlLmM9NjA2PXN0YXRpYyBpbnQgZm9saW9fbGF1bmRlcihzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS90cnVuY2F0ZS5jLTYyMS0gKi9cbm1tL3RydW5jYXRlLmM6NjIyOmludCBmb2xpb191bm1hcF9pbnZhbGlkYXRlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxubW0vdHJ1bmNhdGUuYy02MjMtXHRcdFx0ICAgZ2ZwX3QgZ2ZwKVxuLS1cbm1tL3RydW5jYXRlLmM9Njc2PWludCBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS90cnVuY2F0ZS5jLTcyNS1cdFx0XHRmb2xpb193YWl0X3dyaXRlYmFjayhmb2xpbyk7XG5tbS90cnVuY2F0ZS5jOjcyNjpcdFx0XHRyZXQyID0gZm9saW9fdW5tYXBfaW52YWxpZGF0ZShtYXBwaW5nLCBmb2xpbywgR0ZQX0tFUk5FTCk7XG5tbS90cnVuY2F0ZS5jLTcyNy1cdFx0XHRpZiAocmV0MiBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM0MAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYGZvbGlvX3VubWFwX2ludmFsaWRhdGVgIGluIGBtbS90cnVuY2F0ZS5jYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGlzc2VjdCBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZWAuIEkmIzM5O20gaGVhZGluZyBzdHJhaWdodCBpbnRvIGBtbS90cnVuY2F0ZS5jYCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBwaWN0dXJlLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBob3cgaXQgcmVsYXRlcyB0byBwYWdlIGludmFsaWRhdGlvbiBkdXJpbmcgYSB0cnVuY2F0aW9uIG9wZXJhdGlvbi4gV2UmIzM5O3JlIGNsZWFybHkgZGVhbGluZyB3aXRoIHRoZSB1bm1hcHBpbmcgb2YgZm9saW9zLCBhbmQgdGhlICYjMzQ7aW52YWxpZGF0ZSYjMzQ7IGJpdCBtYWtlcyBtZSB0aGluayB3ZSBhcmUgZ29pbmcgdG8gYmUgZW5zdXJpbmcgY2FjaGUgY29oZXJlbmNlLiBJIHdhbnQgdG8gc2VlIGlmIHdlIGFyZSBkZWFsaW5nIHdpdGggYSBzaW1wbGUgdW5tYXAgYW5kIHJlbGVhc2Ugb3IgaWYgdGhlcmUgaXMgc29tZXRoaW5nIG1vcmUgc29waGlzdGljYXRlZCBoYXBwZW5pbmcsIGxpa2UgcG90ZW50aWFsbHkgZmx1c2hpbmcgZGlydHkgZGF0YSBvciBzaWduYWxpbmcgZXh0ZXJuYWwgZGV2aWNlcyBhYm91dCB0aGUgdW5tYXBwaW5nLiBJIHN1c3BlY3QgdGhlIGdvYWwgaXMgdG8gbWFrZSBzdXJlIGRhdGEgaXNuJiMzOTt0IGxlZnQgYXJvdW5kIHRoYXQgd291bGQgY2F1c2UgY29uZnVzaW9uIG9yIGluY29uc2lzdGVuY2llcyBmb3Igb3RoZXIgcHJvY2Vzc2VzIG9yIGRldmljZXMuIEdvdHRhIHNlZSBpZiB0aGlzIGhhbmRsZXMgYW55IGVkZ2UgY2FzZXMsIGxpa2Ugc2hhcmVkIG1hcHBpbmdzIG9yIHBhcnRpYWxseSBwb3B1bGF0ZWQgZm9saW9zIGR1cmluZyB0cnVuY2F0aW9uLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdHJ1bmNhdGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjE1Olx0LypcbiA2MTY6XHQgKiBUaGlzIGlzIGxpa2UgbWFwcGluZ19ldmljdF9mb2xpbygpLCBleGNlcHQgaXQgaWdub3JlcyB0aGUgZm9saW8mIzM5O3NcbiA2MTc6XHQgKiByZWZjb3VudC4gIFdlIGRvIHRoaXMgYmVjYXVzZSBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMigpIG5lZWRzIHN0cm9uZ2VyXG4gNjE4Olx0ICogaW52YWxpZGF0aW9uIGd1YXJhbnRlZXMsIGFuZCBjYW5ub3QgYWZmb3JkIHRvIGxlYXZlIGZvbGlvcyBiZWhpbmQgYmVjYXVzZVxuIDYxOTpcdCAqIHNocmlua19mb2xpb19saXN0KCkgaGFzIGEgdGVtcCByZWYgb24gdGhlbSwgb3IgYmVjYXVzZSB0aGV5JiMzOTtyZSB0cmFuc2llbnRseVxuIDYyMDpcdCAqIHNpdHRpbmcgaW4gdGhlIGZvbGlvX2FkZF9scnUoKSBjYWNoZXMuXG4gNjIxOlx0ICovXG4gNjIyOlx0aW50IGZvbGlvX3VubWFwX2ludmFsaWRhdGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gNjIzOlx0XHRcdFx0ICAgZ2ZwX3QgZ2ZwKVxuIDYyNDpcdHtcbiA2MjU6XHRcdHZvaWQgKCpmcmVlX2ZvbGlvKShzdHJ1Y3QgZm9saW8gKik7XG4gNjI2Olx0XHRpbnQgcmV0O1xuIDYyNzpcdFxuIDYyODpcdFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbyksIGZvbGlvKTtcbiA2Mjk6XHRcbiA2MzA6XHRcdGlmIChmb2xpb19tYXBwZWQoZm9saW8pKVxuIDYzMTpcdFx0XHR1bm1hcF9tYXBwaW5nX2ZvbGlvKGZvbGlvKTtcbiA2MzI6XHRcdEJVR19PTihmb2xpb19tYXBwZWQoZm9saW8pKTtcbiA2MzM6XHRcbiA2MzQ6XHRcdHJldCA9IGZvbGlvX2xhdW5kZXIobWFwcGluZywgZm9saW8pO1xuIDYzNTpcdFx0aWYgKHJldClcbiA2MzY6XHRcdFx0cmV0dXJuIHJldDtcbiA2Mzc6XHRcdGlmIChmb2xpby1cdTAwM2VtYXBwaW5nICE9IG1hcHBpbmcpXG4gNjM4Olx0XHRcdHJldHVybiAtRUJVU1k7XG4gNjM5Olx0XHRpZiAoIWZpbGVtYXBfcmVsZWFzZV9mb2xpbyhmb2xpbywgZ2ZwKSlcbiA2NDA6XHRcdFx0cmV0dXJuIC1FQlVTWTtcbiA2NDE6XHRcbiA2NDI6XHRcdHNwaW5fbG9jayhcdTAwMjZtYXBwaW5nLVx1MDAzZWhvc3QtXHUwMDNlaV9sb2NrKTtcbiA2NDM6XHRcdHhhX2xvY2tfaXJxKFx1MDAyNm1hcHBpbmctXHUwMDNlaV9wYWdlcyk7XG4gNjQ0Olx0XHRpZiAoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpXG4gNjQ1Olx0XHRcdGdvdG8gZmFpbGVkO1xuIDY0NjpcdFxuIDY0NzpcdFx0QlVHX09OKGZvbGlvX2hhc19wcml2YXRlKGZvbGlvKSk7XG4gNjQ4Olx0XHRfX2ZpbGVtYXBfcmVtb3ZlX2ZvbGlvKGZvbGlvLCBOVUxMKTtcbiA2NDk6XHRcdHhhX3VubG9ja19pcnEoXHUwMDI2bWFwcGluZy1cdTAwM2VpX3BhZ2VzKTtcbiA2NTA6XHRcdGlmIChtYXBwaW5nX3Nocmlua2FibGUobWFwcGluZykpXG4gNjUxOlx0XHRcdGlub2RlX2xydV9saXN0X2FkZChtYXBwaW5nLVx1MDAzZWhvc3QpO1xuIDY1MjpcdFx0ZnJlZV9mb2xpbyA9IG1hcHBpbmctXHUwMDNlYV9vcHMtXHUwMDNlZnJlZV9mb2xpbztcbiA2NTM6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNm1hcHBpbmctXHUwMDNlaG9zdC1cdTAwM2VpX2xvY2spO1xuIDY1NDpcdFxuIDY1NTpcdFx0aWYgKGZyZWVfZm9saW8pXG4gNjU2Olx0XHRcdGZyZWVfZm9saW8oZm9saW8pO1xuIDY1NzpcdFx0Zm9saW9fcHV0X3JlZnMoZm9saW8sIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG4gNjU4Olx0XHRyZXR1cm4gMTtcbiA2NTk6XHRmYWlsZWQ6XG4gNjYwOlx0XHR4YV91bmxvY2tfaXJxKFx1MDAyNm1hcHBpbmctXHUwMDNlaV9wYWdlcyk7XG4gNjYxOlx0XHRzcGluX3VubG9jayhcdTAwMjZtYXBwaW5nLVx1MDAzZWhvc3QtXHUwMDNlaV9sb2NrKTtcbiA2NjI6XHRcdHJldHVybiAtRUJVU1k7XG4gNjYzOlx0fVxuIDY2NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Mzg3CgkJCQkJCQlvdXRwdXQ6IDE1NQoJCQkJCQkJdGhvdWdodHM6IDQ4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBEcm9wYmVoaW5kIE9wdGltaXphdGlvbiAmYW1wOyBLTVNBTiBJbXBsaWNhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgd2h5IHRoaXMgY2hhbmdlIHdhcyBtYWRlIGluIGBtbS9maWxlbWFwLmNgLiBTcGVjaWZpY2FsbHksIHRoZSBhZGRpdGlvbiBvZiBgIWZvbGlvX21hcHBlZChmb2xpbylgIHdpdGhpbiB0aGUgYGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmRgIGZ1bmN0aW9uLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgdW5jb25kaXRpb25hbGx5IGNhbGxpbmcgYGZvbGlvX3VubWFwX2ludmFsaWRhdGVgLCB3aGljaCwgSSBrbm93LCBjYW4gYmUgZXhwZW5zaXZlLiBOb3csIGl0IHNlZW1zIHdlJiMzOTtyZSBza2lwcGluZyB0aGF0IHVubWFwcGluZyBhbmQgaW52YWxpZGF0aW9uIHN0ZXAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLgoKTXkgaW1tZWRpYXRlIHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZWAgY2FuIHBvdGVudGlhbGx5IHRyaWdnZXIgYWxsb2NhdGlvbnMgb3IgbG9jayBjb250ZW50aW9uLCBwYXJ0aWN1bGFybHkgd2l0aCBhIGBnZnAgPT0gMGAgY29udGV4dCBvciB3aGVuIGRlYWxpbmcgd2l0aCBgUldGX0RPTlRDQUNIRWAuIFdlIHdhbnQgdG8gYXZvaWQgZXZpY3Rpb24vdW5tYXBwaW5nIGZvbGlvcyB0aGF0IGFyZSBhY3RpdmVseSBpbiB1c2UgYnkgYSB1c2Vyc3BhY2UgcHJvY2Vzcy4gVGhlIGNvZGUgaXRzZWxmLCB3aXRoaW4gYGZvbGlvX3VubWFwX2ludmFsaWRhdGVgLCBoYXMgYSBkb3VibGUtY2hlY2sgb24gYGZvbGlvX21hcHBlZGAgd2hpY2ggcmVpbmZvcmNlcyB0aGlzIGlkZWEuIEl0JiMzOTtzIGVzc2VudGlhbGx5IGEgbm8tb3AgaWYgdGhlIGZvbGlvIGlzbiYjMzk7dCBtYXBwZWQgYWxyZWFkeS4gU28gdGhlIGFkZGVkIGNoZWNrIHNlZW1zIGxpa2UgYW4gb3B0aW1pemF0aW9uLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGZvciBtZSBpcyB3aGV0aGVyIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgb3IgaW50ZXJhY3RzIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkuIExldCYjMzk7cyBydW4gdGhyb3VnaCB0aGUgS01TQU4gY3JpdGVyaWEuCgoxLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIGZpZWxkcyBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkOiBOb3BlLCB0aGlzIGlzbiYjMzk7dCBzZW5kaW5nIGFueSBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLgoyLiAgQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzOiBOb3BlLiBUaGUgYGZvbGlvX21hcHBlZChmb2xpbylgIGNhbGwgaXMgYWNjZXNzaW5nIGF0b21pYyBwYWdlIG1hcGNvdW50IGZpZWxkcyBvbiBhIHZhbGlkIGxvY2tlZCBmb2xpby4KMy4gIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRoczogTm8sIG5vdCBhdCBhbGwsIHRoaXMgZnVuY3Rpb24gZGVhbHMgc29sZWx5IHdpdGggdGhlIGNhY2hlIGRyb3AvaW52YWxpZGF0aW9uLgo0LiAgQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzOiBOb3BlLCB0aGlzIGlzbiYjMzk7dCB0b3VjaGluZyBleGlzdGluZyBidWZmZXJzIGluIGEgd2F5IHRoYXQgaW50cm9kdWNlcyB0aGlzIHR5cGUgb2YgdnVsbmVyYWJpbGl0eS4KClRoZXJlZm9yZSwgdGhpcyBwYXRjaCBzaG91bGQgYmUgY2xlYW4gZnJvbSBhIEtNU0FOIHN0YW5kcG9pbnQuIEl0JiMzOTtzIGEgbWVtb3J5IG1hbmFnZW1lbnQgb3B0aW1pemF0aW9uLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGNhY2hlIGJlaGF2aW9yLCBhbmQgaXQgZG9lc24mIzM5O3QgYXBwZWFyIHRvIHJlYWQgb3IgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeS4KCkFscmlnaHQsIGxldCYjMzk7cyBqdXN0IGRvdWJsZS1jaGVjayBldmVyeXRoaW5nLCBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgc3VidGxlLCBhbmQgdGhlbiBJJiMzOTtsbCBmb3JtdWxhdGUgdGhlIGBzZXQtcmVzdWx0c2AgY2FsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTM6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGAhZm9saW9fbWFwcGVkKGZvbGlvKWAgYmVmb3JlIGludm9raW5nIGBmb2xpb191bm1hcF9pbnZhbGlkYXRlKClgIGluIGBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKClgLiBUaGlzIG1vZGlmaWVzIHBhZ2UgY2FjaGUgZHJvcC1iZWhpbmQgbG9naWMgdG8gc2tpcCBpbnZhbGlkYXRpbmcgZm9saW9zIHRoYXQgYXJlIGN1cnJlbnRseSBtYXBwZWQgaW50byB1c2VyIHBhZ2UgdGFibGVzLiBJdCBvcGVyYXRlcyBlbnRpcmVseSBvbiBleGlzdGluZywgdmFsaWQgc3RydWN0IGZvbGlvIGZsYWdzIGFuZCBtYXBwaW5nIHJlZmVyZW5jZXMuIFRoZXJlIGFyZSBubyBhbGxvY2F0aW9ucywgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIHBhZGRpbmcgbGVha3MsIG9yIHVzZXItc3BhY2UgY29waWVzIGludm9sdmVkLiBTdGFuZGFyZCBLQVNBTi9rZXJuZWwgZGVidWdnZXJzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgKHN1Y2ggYXMgcmVmY291bnRpbmcsIGxvY2tpbmcsIG9yIFVBRiBidWdzKS4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgYCFmb2xpb19tYXBwZWQoZm9saW8pYCBiZWZvcmUgaW52b2tpbmcgYGZvbGlvX3VubWFwX2ludmFsaWRhdGUoKWAgaW4gYGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoKWAuIFRoaXMgbW9kaWZpZXMgcGFnZSBjYWNoZSBkcm9wLWJlaGluZCBsb2dpYyB0byBza2lwIGludmFsaWRhdGluZyBmb2xpb3MgdGhhdCBhcmUgY3VycmVudGx5IG1hcHBlZCBpbnRvIHVzZXIgcGFnZSB0YWJsZXMuIEl0IG9wZXJhdGVzIGVudGlyZWx5IG9uIGV4aXN0aW5nLCB2YWxpZCBzdHJ1Y3QgZm9saW8gZmxhZ3MgYW5kIG1hcHBpbmcgcmVmZXJlbmNlcy4gVGhlcmUgYXJlIG5vIGFsbG9jYXRpb25zLCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZyBsZWFrcywgb3IgdXNlci1zcGFjZSBjb3BpZXMgaW52b2x2ZWQuIFN0YW5kYXJkIEtBU0FOL2tlcm5lbCBkZWJ1Z2dlcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyAoc3VjaCBhcyByZWZjb3VudGluZywgbG9ja2luZywgb3IgVUFGIGJ1Z3MpLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MTY6NDQuNjM2OTcyNTAyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0NTc5ODcxNDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZvbGlvX2VuZF9kcm9wYmVoaW5kXCIsXG4gICAgXCJmb2xpb191bm1hcF9pbnZhbGlkYXRlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgYCFmb2xpb19tYXBwZWQoZm9saW8pYCBiZWZvcmUgaW52b2tpbmcgYGZvbGlvX3VubWFwX2ludmFsaWRhdGUoKWAgaW4gYGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoKWAuIFRoaXMgbW9kaWZpZXMgcGFnZSBjYWNoZSBkcm9wLWJlaGluZCBsb2dpYyB0byBza2lwIGludmFsaWRhdGluZyBmb2xpb3MgdGhhdCBhcmUgY3VycmVudGx5IG1hcHBlZCBpbnRvIHVzZXIgcGFnZSB0YWJsZXMuIEl0IG9wZXJhdGVzIGVudGlyZWx5IG9uIGV4aXN0aW5nLCB2YWxpZCBzdHJ1Y3QgZm9saW8gZmxhZ3MgYW5kIG1hcHBpbmcgcmVmZXJlbmNlcy4gVGhlcmUgYXJlIG5vIGFsbG9jYXRpb25zLCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZyBsZWFrcywgb3IgdXNlci1zcGFjZSBjb3BpZXMgaW52b2x2ZWQuIFN0YW5kYXJkIEtBU0FOL2tlcm5lbCBkZWJ1Z2dlcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyAoc3VjaCBhcyByZWZjb3VudGluZywgbG9ja2luZywgb3IgVUFGIGJ1Z3MpLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkcm9wYmVoaW5kIGZvbGlvIGludmFsaWRhdGlvbiBpbiBtbS9maWxlbWFwLmMgYnkgYWRkaW5nIGEgY2hlY2sgZm9yICFmb2xpb19tYXBwZWQoZm9saW8pIGJlZm9yZSBjYWxsaW5nIGZvbGlvX3VubWFwX2ludmFsaWRhdGUoKS4gVGhpcyBhbHRlcnMgY29yZSBwYWdlIGNhY2hlIGludmFsaWRhdGlvbiBiZWhhdmlvciBmb3IgY2FjaGVkL2Ryb3BiZWhpbmQgZm9saW9zIChzdWNoIGFzIHRob3NlIHVzZWQgd2l0aCBSV0ZfRE9OVENBQ0hFIC8gSU9DQl9ET05UQ0FDSEUpIGFuZCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjE2OjQ0LjYzNjk3ODI5MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1Mzk2MjU3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDhkZTc0YmU0MDZmMjZlNGM1YTQxMmE1MWJjODUyYzg0OTExZjYxYzVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMjkgMTM6MTY6NDIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jXFxuaW5kZXggNmFmZWM2MzY4ODFmYi4uMDBmZDg5Y2Y2ZjU1MCAxMDA2NDRcXG4tLS0gYS9tbS9maWxlbWFwLmNcXG4rKysgYi9tbS9maWxlbWFwLmNcXG5AQCAtMTYxNiw3ICsxNjE2LDcgQEAgc3RhdGljIHZvaWQgZmlsZW1hcF9lbmRfZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdGlmICghZm9saW9fdGVzdF9jbGVhcl9kcm9wYmVoaW5kKGZvbGlvKSlcXG4gXFx0XFx0cmV0dXJuO1xcbi1cXHRpZiAobWFwcGluZylcXG4rXFx0aWYgKG1hcHBpbmcgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX21hcHBlZChmb2xpbykpXFxuIFxcdFxcdGZvbGlvX3VubWFwX2ludmFsaWRhdGUobWFwcGluZywgZm9saW8sIDApO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzoxNjo0Ni4wOTE1NDgyMjJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjk0MDYyMDUwNDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZvbGlvX2VuZF9kcm9wYmVoaW5kXCIsXG4gICAgXCJmb2xpb191bm1hcF9pbnZhbGlkYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZHJvcGJlaGluZCBmb2xpbyBpbnZhbGlkYXRpb24gaW4gbW0vZmlsZW1hcC5jIGJ5IGFkZGluZyBhIGNoZWNrIGZvciAhZm9saW9fbWFwcGVkKGZvbGlvKSBiZWZvcmUgY2FsbGluZyBmb2xpb191bm1hcF9pbnZhbGlkYXRlKCkuIFRoaXMgYWx0ZXJzIGNvcmUgcGFnZSBjYWNoZSBpbnZhbGlkYXRpb24gYmVoYXZpb3IgZm9yIGNhY2hlZC9kcm9wYmVoaW5kIGZvbGlvcyAoc3VjaCBhcyB0aG9zZSB1c2VkIHdpdGggUldGX0RPTlRDQUNIRSAvIElPQ0JfRE9OVENBQ0hFKSBhbmQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4ZGU3NGJlNDA2ZjI2ZTRjNWE0MTJhNTFiYzg1MmM4NDkxMWY2MWM1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjkgMTM6MTY6NDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmNcbmluZGV4IDZhZmVjNjM2ODgxZmIuLjAwZmQ4OWNmNmY1NTAgMTAwNjQ0XG4tLS0gYS9tbS9maWxlbWFwLmNcbisrKyBiL21tL2ZpbGVtYXAuY1xuQEAgLTE2MTYsNyArMTYxNiw3IEBAIHN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFx0cmV0dXJuO1xuIFx0aWYgKCFmb2xpb190ZXN0X2NsZWFyX2Ryb3BiZWhpbmQoZm9saW8pKVxuIFx0XHRyZXR1cm47XG4tXHRpZiAobWFwcGluZylcbitcdGlmIChtYXBwaW5nIFx1MDAyNlx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSlcbiBcdFx0Zm9saW9fdW5tYXBfaW52YWxpZGF0ZShtYXBwaW5nLCBmb2xpbywgMCk7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MTY6NDYuMDkxNTQ5NTIyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA0NDk3NzAzODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGaWxlbWFwIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2Ugd2UncmUgY2hhbmdpbmcgc29tZXRoaW5nIGluIGBtbS9maWxlbWFwLmNgLiBTcGVjaWZpY2FsbHksIHRoZSBkaWZmIGZvY3VzZXMgb24gdGhlIGBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kYCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2UgYXBwZWFycyB0byBiZSBpbiB0aGF0IGNvbmRpdGlvbmFsIHN0YXRlbWVudC4gV2UgYXJlIGFkZGluZyBhbiBhZGRpdGlvbmFsIGNoZWNrLiBQcmV2aW91c2x5LCBpdCBqdXN0IGNoZWNrZWQgaWYgYG1hcHBpbmdgIHdhcyB2YWxpZCwgYnV0IG5vdyB3ZSdyZSBpbnRyb2R1Y2luZyBgIWZvbGlvX21hcHBlZChmb2xpbylgLiBTbywgdGhlIGBmb2xpb191bm1hcF9pbnZhbGlkYXRlYCBjYWxsIHdpbGwgb25seSBoYXBwZW4gaWYgdGhlIG1hcHBpbmcgZXhpc3RzIEFORCB0aGUgZm9saW8gaXNuJ3QgY3VycmVudGx5IG1hcHBlZC4gSW50ZXJlc3RpbmcuXG5cbkkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJJ2xsIHVzZSBlaXRoZXIgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGV4YW1pbmUgYG1tL2ZpbGVtYXAuY2AgYXJvdW5kIGxpbmUgMTYxNiB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCB0aGUgcHVycG9zZSBvZiB0aGlzIGNoYW5nZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2h5IHdlIHdvdWxkIHdhbnQgdG8gKnByZXZlbnQqIHVubWFwcGluZyBpbiB0aGUgY2FzZSBvZiBhIG1hcHBlZCBmb2xpbyB3aGVuIGRyb3BwaW5nIGJlaGluZC4gV2hhdCdzIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoaXMgY29uZGl0aW9uPyBJcyB0aGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBhIGJ1ZyBmaXgsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaW1lIHRvIGRpZyBkZWVwZXIgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDQzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MTc6MDYuNTQxMzIyMzUzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxNzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2ZpbGVtYXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjAwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjAwOlxcdFxcdFxcdHJldCA9IGZvbGlvX3dhaXRfYml0X2tpbGxhYmxlKGZvbGlvLCBQR19wcml2YXRlXzIpO1xcbjE2MDE6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTYwMjpcXHRcXHRcXHRcXHRicmVhaztcXG4xNjAzOlxcdFxcdH1cXG4xNjA0OlxcdFxcbjE2MDU6XFx0XFx0cmV0dXJuIHJldDtcXG4xNjA2OlxcdH1cXG4xNjA3OlxcdEVYUE9SVF9TWU1CT0woZm9saW9fd2FpdF9wcml2YXRlXzJfa2lsbGFibGUpO1xcbjE2MDg6XFx0XFxuMTYwOTpcXHRzdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuMTYxMDpcXHR7XFxuMTYxMTpcXHRcXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZvbGlvLVxcdTAwM2VtYXBwaW5nO1xcbjE2MTI6XFx0XFxuMTYxMzpcXHRcXHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO1xcbjE2MTQ6XFx0XFxuMTYxNTpcXHRcXHRpZiAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pIHx8IGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKVxcbjE2MTY6XFx0XFx0XFx0cmV0dXJuO1xcbjE2MTc6XFx0XFx0aWYgKCFmb2xpb190ZXN0X2NsZWFyX2Ryb3BiZWhpbmQoZm9saW8pKVxcbjE2MTg6XFx0XFx0XFx0cmV0dXJuO1xcbjE2MTk6XFx0XFx0aWYgKG1hcHBpbmcgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX21hcHBlZChmb2xpbykpXFxuMTYyMDpcXHRcXHRcXHRmb2xpb191bm1hcF9pbnZhbGlkYXRlKG1hcHBpbmcsIGZvbGlvLCAwKTtcXG4xNjIxOlxcdH1cXG4xNjIyOlxcdFxcbjE2MjM6XFx0LypcXG4xNjI0OlxcdCAqIElmIGZvbGlvIHdhcyBtYXJrZWQgYXMgZHJvcGJlaGluZCwgdGhlbiBwYWdlcyBzaG91bGQgYmUgZHJvcHBlZCB3aGVuIHdyaXRlYmFja1xcbjE2MjU6XFx0ICogY29tcGxldGVzLiBEbyB0aGF0IG5vdy4gSWYgd2UgZmFpbCwgaXQncyBsaWtlbHkgYmVjYXVzZSBvZiBhIGJpZyBmb2xpbyAtXFxuMTYyNjpcXHQgKiBqdXN0IHJlc2V0IGRyb3BiZWhpbmQgZm9yIHRoYXQgY2FzZSBhbmQgbGF0dGVyIGNvbXBsZXRpb25zIHNob3VsZCBpbnZhbGlkYXRlLlxcbjE2Mjc6XFx0ICovXFxuMTYyODpcXHR2b2lkIGZvbGlvX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuMTYyOTpcXHR7XFxuMTYzMDpcXHRcXHRpZiAoIWZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykpXFxuMTYzMTpcXHRcXHRcXHRyZXR1cm47XFxuMTYzMjpcXHRcXG4xNjMzOlxcdFxcdC8qXFxuMTYzNDpcXHRcXHQgKiBIaXR0aW5nICFpbl90YXNrKCkgc2hvdWxkIG5vdCBoYXBwZW4gb2ZmIFJXRl9ET05UQ0FDSEUgd3JpdGViYWNrLFxcbjE2MzU6XFx0XFx0ICogYnV0IGNhbiBoYXBwZW4gaWYgbm9ybWFsIHdyaXRlYmFjayBqdXN0IGhhcHBlbnMgdG8gZmluZCBkaXJ0eSBmb2xpb3NcXG4xNjM2OlxcdFxcdCAqIHRoYXQgd2VyZSBjcmVhdGVkIGFzIHBhcnQgb2YgdW5jYWNoZWQgd3JpdGViYWNrLCBhbmQgdGhhdCB3cml0ZWJhY2tcXG4xNjM3OlxcdFxcdCAqIHdvdWxkIG90aGVyd2lzZSBub3QgbmVlZCBub24tSVJRIGhhbmRsaW5nLiBKdXN0IHNraXAgdGhlXFxuMTYzODpcXHRcXHQgKiBpbnZhbGlkYXRpb24gaW4gdGhhdCBjYXNlLlxcbjE2Mzk6XFx0XFx0ICovXFxuMTY0MDpcXHRcXHRpZiAoaW5fdGFzaygpIFxcdTAwMjZcXHUwMDI2IGZvbGlvX3RyeWxvY2soZm9saW8pKSB7XFxuMTY0MTpcXHRcXHRcXHRmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKGZvbGlvKTtcXG4xNjQyOlxcdFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuMTY0MzpcXHRcXHR9XFxuMTY0NDpcXHR9XFxuMTY0NTpcXHRFWFBPUlRfU1lNQk9MX0dQTChmb2xpb19lbmRfZHJvcGJlaGluZCk7XFxuMTY0NjpcXHRcXG4xNjQ3OlxcdC8qKlxcbjE2NDg6XFx0ICogZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kIC0gRW5kIHdyaXRlYmFjayBhZ2FpbnN0IGEgZm9saW8uXFxuMTY0OTpcXHQgKiBAZm9saW86IFRoZSBmb2xpby5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MTc6MDYuNTQxNTI2MDUzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTc1OTkwNzk3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIERhdGEgQ2FjaGluZyBTdHJhdGVnaWVzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdlJ3JlIGNvbnRyb2xsaW5nIGNhY2hlIGJlaGF2aW9yLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGRyb3BwaW5nIHBhZ2VzIGZyb20gdGhlIGNhY2hlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXhhbWluZSB0aGUga2V5IGZ1bmN0aW9ucyBvciBmbGFncyB1c2VkIHRvIG1hbmFnZSB0aGlzOiBgZm9saW9fZW5kX2Ryb3BiZWhpbmRgLCBgZmlsZW1hcF9lbmRfZHJvcGJlaGluZGAsIHRoZSBnZW5lcmFsIGBkcm9wYmVoaW5kYCBmdW5jdGlvbmFsaXR5LCBhbmQsIG9mIGNvdXJzZSwgYFJXRl9ET05UQ0FDSEVgLiBJdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQg4oCTIHRvIGdldCBhIGdyYXNwIG9mIHRoZWlyIHVzYWdlLCBJIHNob3VsZCBpbml0aWF0ZSBhIGNvZGUgc2VhcmNoLiBJJ2xsIG5lZWQgdG8gdXNlIGBncmVwYCB0byBxdWlja2x5IGlkZW50aWZ5IGFsbCBpbnN0YW5jZXMgd2hlcmUgYGRyb3BiZWhpbmRgIG9yIGBSV0ZfRE9OVENBQ0hFYCBhcmUgcmVmZXJlbmNlZCB3aXRoaW4gdGhlIGNvZGViYXNlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlaXIgYXBwbGljYXRpb24gYW5kIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIyNywiT3V0cHV0VG9rZW5zIjoxNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MTc6MTIuMzAxNDM2MDc1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MTEyMDI2NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHJvcGJlaGluZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9idWZmZXIuYz0xMDg1PXN0YXRpYyB2b2lkIF9fYmhfc3VibWl0KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcGYsXFxuLS1cXG5mcy9idWZmZXIuYy0xMTA5LVxcbmZzL2J1ZmZlci5jOjExMTA6XFx0aWYgKGZvbGlvX3Rlc3RfZHJvcGJlaGluZChiaC1cXHUwMDNlYl9mb2xpbykgXFx1MDAyNlxcdTAwMjYgb3BfaXNfd3JpdGUob3BmKSlcXG5mcy9idWZmZXIuYy0xMTExLVxcdFxcdGJpb19zZXRfZmxhZyhiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKTtcXG4tLVxcbmZzL2ZzLXdyaXRlYmFjay5jPTQwNT1zdGF0aWMgYm9vbCBpbm9kZV9kb19zd2l0Y2hfd2JzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9mcy13cml0ZWJhY2suYy00MzUtXFx0XFx0XFx0d2Jfc3RhdF9tb2QobmV3X3diLCBXQl9SRUNMQUlNQUJMRSwgbnIpO1xcbmZzL2ZzLXdyaXRlYmFjay5jOjQzNjpcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSkge1xcbmZzL2ZzLXdyaXRlYmFjay5jLTQzNy1cXHRcXHRcXHRcXHR3Yl9zdGF0X21vZChvbGRfd2IsIFdCX0RPTlRDQUNIRV9ESVJUWSwgLW5yKTtcXG4tLVxcbmZzL2lvbWFwL2lvZW5kLmM9MjEzPXNzaXplX3QgaW9tYXBfYWRkX3RvX2lvZW5kKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5mcy9pb21hcC9pb2VuZC5jLTI1Ny1cXG5mcy9pb21hcC9pb2VuZC5jOjI1ODpcXHRpZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSlcXG5mcy9pb21hcC9pb2VuZC5jLTI1OS1cXHRcXHRiaW9fc2V0X2ZsYWcoXFx1MDAyNmlvZW5kLVxcdTAwM2Vpb19iaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKTtcXG4tLVxcbmZzL25mcy9maWxlLmM9MzYwPXN0YXRpYyBib29sIG5mc193YW50X3JlYWRfbW9kaWZ5X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxuZnMvbmZzL2ZpbGUuYy0zNzItXFx0XFx0cmV0dXJuIHRydWU7XFxuZnMvbmZzL2ZpbGUuYzozNzM6XFx0aWYgKGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykpXFxuZnMvbmZzL2ZpbGUuYy0zNzQtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuZnMvbmZzL2ZpbGUuYz0zODk9c3RhdGljIGludCBuZnNfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxcbi0tXFxuZnMvbmZzL2ZpbGUuYy00MTktXFx0XFx0b25jZV90aHJ1ID0gMTtcXG5mcy9uZnMvZmlsZS5jOjQyMDpcXHRcXHRmb2xpb19jbGVhcl9kcm9wYmVoaW5kKGZvbGlvKTtcXG5mcy9uZnMvZmlsZS5jLTQyMS1cXHRcXHRyZXQgPSBuZnNfcmVhZF9mb2xpbyhmaWxlLCBmb2xpbyk7XFxuLS1cXG5mcy9uZnMvd3JpdGUuYz0yOTU9c3RhdGljIHZvaWQgbmZzX2ZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmZzL25mcy93cml0ZS5jLTI5OC1cXG5mcy9uZnMvd3JpdGUuYzoyOTk6XFx0Zm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKGZvbGlvKTtcXG5mcy9uZnMvd3JpdGUuYy0zMDAtXFx0aWYgKGF0b21pY19sb25nX2RlY19yZXR1cm4oXFx1MDAyNm5mc3MtXFx1MDAzZXdyaXRlYmFjaykgXFx1MDAzY1xcbi0tXFxuZnMvbmZzL3dyaXRlLmM9NzM1PXN0YXRpYyB2b2lkIG5mc19pbm9kZV9yZW1vdmVfcmVxdWVzdChzdHJ1Y3QgbmZzX3BhZ2UgKnJlcSlcXG4tLVxcbmZzL25mcy93cml0ZS5jLTc1MS1cXG5mcy9uZnMvd3JpdGUuYzo3NTI6XFx0XFx0XFx0Zm9saW9fZW5kX2Ryb3BiZWhpbmQoZm9saW8pO1xcbmZzL25mcy93cml0ZS5jLTc1My1cXHRcXHR9XFxuLS1cXG5mcy9uZnNkL2RlYnVnZnMuYz0zOT1ERUZJTkVfREVCVUdGU19BVFRSSUJVVEUobmZzZF9kc3JfZm9wcywgbmZzZF9kc3JfZ2V0LCBuZnNkX2Rzcl9zZXQsIFxcXCIlbGx1XFxcXG5cXFwiKTtcXG4tLVxcbmZzL25mc2QvZGVidWdmcy5jLTQ1LSAqICAgJTA6IE5GUyBSRUFEIHdpbGwgdXNlIGJ1ZmZlcmVkIElPXFxuZnMvbmZzZC9kZWJ1Z2ZzLmM6NDY6ICogICAlMTogTkZTIFJFQUQgd2lsbCB1c2UgZG9udGNhY2hlIChidWZmZXJlZCBJTyB3LyBkcm9wYmVoaW5kKVxcbmZzL25mc2QvZGVidWdmcy5jLTQ3LSAqICAgJTI6IE5GUyBSRUFEIHdpbGwgdXNlIGRpcmVjdCBJT1xcbi0tXFxuZnMvbmZzZC9kZWJ1Z2ZzLmM9ODQ9REVGSU5FX0RFQlVHRlNfQVRUUklCVVRFKG5mc2RfaW9fY2FjaGVfcmVhZF9mb3BzLCBuZnNkX2lvX2NhY2hlX3JlYWRfZ2V0LFxcbi0tXFxuZnMvbmZzZC9kZWJ1Z2ZzLmMtOTEtICogICAlMDogTkZTIFdSSVRFIHdpbGwgdXNlIGJ1ZmZlcmVkIElPXFxuZnMvbmZzZC9kZWJ1Z2ZzLmM6OTI6ICogICAlMTogTkZTIFdSSVRFIHdpbGwgdXNlIGRvbnRjYWNoZSAoYnVmZmVyZWQgSU8gdy8gZHJvcGJlaGluZClcXG5mcy9uZnNkL2RlYnVnZnMuYy05My0gKlxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9OTM9ZW51bSBwYWdlZmxhZ3Mge1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMTEyLVxcdFBHX3VuZXZpY3RhYmxlLFxcdFxcdC8qIFBhZ2UgaXMgXFxcInVuZXZpY3RhYmxlXFxcIiAgKi9cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDoxMTM6XFx0UEdfZHJvcGJlaGluZCxcXHRcXHQvKiBkcm9wIHBhZ2VzIG9uIElPIGNvbXBsZXRpb24gKi9cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0xMTQtI2lmZGVmIENPTkZJR19NTVVcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTU5OD1GT0xJT19GTEFHKHJlYWRhaGVhZCwgRk9MSU9fSEVBRF9QQUdFKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNjAwLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjYwMTpGT0xJT19GTEFHKGRyb3BiZWhpbmQsIEZPTElPX0hFQURfUEFHRSlcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo2MDI6XFx0Rk9MSU9fVEVTVF9DTEVBUl9GTEFHKGRyb3BiZWhpbmQsIEZPTElPX0hFQURfUEFHRSlcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo2MDM6XFx0X19GT0xJT19TRVRfRkxBRyhkcm9wYmVoaW5kLCBGT0xJT19IRUFEX1BBR0UpXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNjA0LVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg9MTMxMD12b2lkIGZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg6MTMxMTp2b2lkIGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaDoxMzEyOnZvaWQgZm9saW9fZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMTMxMy12b2lkIGZvbGlvX3dhaXRfc3RhYmxlKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg9MTQwOD1zdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wge1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMTQxNS1cXHR1bnNpZ25lZCBpbnQgX2JhdGNoX2NvdW50O1xcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oOjE0MTY6XFx0Ym9vbCBkcm9wYmVoaW5kO1xcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTE0MTctXFx0Ym9vbCBfd29ya2luZ3NldDtcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21tZmxhZ3MuaD02OT1UUkFDRV9ERUZJTkVfRU5VTShfX19HRlBfTEFTVF9CSVQpO1xcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbW1mbGFncy5oLTE1My1cXHRERUZfUEFHRUZMQUdfTkFNRSh1bmV2aWN0YWJsZSksXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21tZmxhZ3MuaDoxNTQ6XFx0REVGX1BBR0VGTEFHX05BTUUoZHJvcGJlaGluZClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbW1mbGFncy5oLTE1NS1JRl9IQVZFX1BHX01MT0NLKG1sb2NrZWQpXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxubW0vZmlsZW1hcC5jPTE2MDc9RVhQT1JUX1NZTUJPTChmb2xpb193YWl0X3ByaXZhdGVfMl9raWxsYWJsZSk7XFxubW0vZmlsZW1hcC5jLTE2MDgtXFxubW0vZmlsZW1hcC5jOjE2MDk6c3RhdGljIHZvaWQgZmlsZW1hcF9lbmRfZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2ZpbGVtYXAuYy0xNjEwLXtcXG4tLVxcbm1tL2ZpbGVtYXAuYy0xNjE2LVxcdFxcdHJldHVybjtcXG5tbS9maWxlbWFwLmM6MTYxNzpcXHRpZiAoIWZvbGlvX3Rlc3RfY2xlYXJfZHJvcGJlaGluZChmb2xpbykpXFxubW0vZmlsZW1hcC5jLTE2MTgtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vZmlsZW1hcC5jLTE2MjMtLypcXG5tbS9maWxlbWFwLmM6MTYyNDogKiBJZiBmb2xpbyB3YXMgbWFya2VkIGFzIGRyb3BiZWhpbmQsIHRoZW4gcGFnZXMgc2hvdWxkIGJlIGRyb3BwZWQgd2hlbiB3cml0ZWJhY2tcXG5tbS9maWxlbWFwLmMtMTYyNS0gKiBjb21wbGV0ZXMuIERvIHRoYXQgbm93LiBJZiB3ZSBmYWlsLCBpdCdzIGxpa2VseSBiZWNhdXNlIG9mIGEgYmlnIGZvbGlvIC1cXG5tbS9maWxlbWFwLmM6MTYyNjogKiBqdXN0IHJlc2V0IGRyb3BiZWhpbmQgZm9yIHRoYXQgY2FzZSBhbmQgbGF0dGVyIGNvbXBsZXRpb25zIHNob3VsZCBpbnZhbGlkYXRlLlxcbm1tL2ZpbGVtYXAuYy0xNjI3LSAqL1xcbm1tL2ZpbGVtYXAuYzoxNjI4OnZvaWQgZm9saW9fZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9maWxlbWFwLmMtMTYyOS17XFxubW0vZmlsZW1hcC5jOjE2MzA6XFx0aWYgKCFmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKVxcbm1tL2ZpbGVtYXAuYy0xNjMxLVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL2ZpbGVtYXAuYy0xNjQwLVxcdGlmIChpbl90YXNrKCkgXFx1MDAyNlxcdTAwMjYgZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcXG5tbS9maWxlbWFwLmM6MTY0MTpcXHRcXHRmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKGZvbGlvKTtcXG5tbS9maWxlbWFwLmMtMTY0Mi1cXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbi0tXFxubW0vZmlsZW1hcC5jLTE2NDQtfVxcbm1tL2ZpbGVtYXAuYzoxNjQ1OkVYUE9SVF9TWU1CT0xfR1BMKGZvbGlvX2VuZF9kcm9wYmVoaW5kKTtcXG5tbS9maWxlbWFwLmMtMTY0Ni1cXG5tbS9maWxlbWFwLmMtMTY0Ny0vKipcXG5tbS9maWxlbWFwLmM6MTY0ODogKiBmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQgLSBFbmQgd3JpdGViYWNrIGFnYWluc3QgYSBmb2xpby5cXG5tbS9maWxlbWFwLmMtMTY0OS0gKiBAZm9saW86IFRoZSBmb2xpby5cXG4tLVxcbm1tL2ZpbGVtYXAuYy0xNjUxLSAqIFRoZSBmb2xpbyBtdXN0IGFjdHVhbGx5IGJlIHVuZGVyIHdyaXRlYmFjay5cXG5tbS9maWxlbWFwLmM6MTY1MjogKiBUaGlzIGNhbGwgaXMgaW50ZW5kZWQgZm9yIGZpbGVzeXN0ZW1zIHRoYXQgbmVlZCB0byBkZWZlciBkcm9wYmVoaW5kLlxcbm1tL2ZpbGVtYXAuYy0xNjUzLSAqXFxuLS1cXG5tbS9maWxlbWFwLmMtMTY1NS0gKi9cXG5tbS9maWxlbWFwLmM6MTY1Njp2b2lkIGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2ZpbGVtYXAuYy0xNjU3LXtcXG4tLVxcbm1tL2ZpbGVtYXAuYy0xNjc2LX1cXG5tbS9maWxlbWFwLmM6MTY3NzpFWFBPUlRfU1lNQk9MX0dQTChmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQpO1xcbm1tL2ZpbGVtYXAuYy0xNjc4LVxcbi0tXFxubW0vZmlsZW1hcC5jPTE2ODc9dm9pZCBmb2xpb19lbmRfd3JpdGViYWNrKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9maWxlbWFwLmMtMTY5Ny1cXHRmb2xpb19nZXQoZm9saW8pO1xcbm1tL2ZpbGVtYXAuYzoxNjk4OlxcdGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChmb2xpbyk7XFxubW0vZmlsZW1hcC5jOjE2OTk6XFx0Zm9saW9fZW5kX2Ryb3BiZWhpbmQoZm9saW8pO1xcbm1tL2ZpbGVtYXAuYy0xNzAwLVxcdGZvbGlvX3B1dChmb2xpbyk7XFxuLS1cXG5tbS9maWxlbWFwLmM9MTk0Nz1zdHJ1Y3QgZm9saW8gKl9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbm1tL2ZpbGVtYXAuYy0yMDI1LVxcdFxcdFxcdGlmIChmZ3BfZmxhZ3MgXFx1MDAyNiBGR1BfRE9OVENBQ0hFKVxcbm1tL2ZpbGVtYXAuYzoyMDI2OlxcdFxcdFxcdFxcdF9fZm9saW9fc2V0X2Ryb3BiZWhpbmQoZm9saW8pO1xcbm1tL2ZpbGVtYXAuYy0yMDI3LVxcbi0tXFxubW0vZmlsZW1hcC5jLTIwNjAtXFx0Lyogbm90IGFuIHVuY2FjaGVkIGxvb2t1cCwgY2xlYXIgdW5jYWNoZWQgaWYgc2V0ICovXFxubW0vZmlsZW1hcC5jOjIwNjE6XFx0aWYgKCEoZmdwX2ZsYWdzIFxcdTAwMjYgRkdQX0RPTlRDQUNIRSkgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9jbGVhcl9kcm9wYmVoaW5kKGZvbGlvKSkge1xcbm1tL2ZpbGVtYXAuYy0yMDYyLVxcdFxcdGlmIChmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubW0vZmlsZW1hcC5jPTI2MTk9c3RhdGljIGludCBmaWxlbWFwX2NyZWF0ZV9mb2xpbyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBmb2xpb19iYXRjaCAqZmJhdGNoKVxcbi0tXFxubW0vZmlsZW1hcC5jLTI2MzMtXFx0aWYgKGlvY2ItXFx1MDAzZWtpX2ZsYWdzIFxcdTAwMjYgSU9DQl9ET05UQ0FDSEUpXFxubW0vZmlsZW1hcC5jOjI2MzQ6XFx0XFx0X19mb2xpb19zZXRfZHJvcGJlaGluZChmb2xpbyk7XFxubW0vZmlsZW1hcC5jLTI2MzUtXFxuLS1cXG5tbS9maWxlbWFwLmM9MjY3Mj1zdGF0aWMgaW50IGZpbGVtYXBfcmVhZGFoZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5tbS9maWxlbWFwLmMtMjY4MC1cXHRpZiAoaW9jYi1cXHUwMDNla2lfZmxhZ3MgXFx1MDAyNiBJT0NCX0RPTlRDQUNIRSlcXG5tbS9maWxlbWFwLmM6MjY4MTpcXHRcXHRyYWN0bC5kcm9wYmVoaW5kID0gMTtcXG5tbS9maWxlbWFwLmMtMjY4Mi1cXHRwYWdlX2NhY2hlX2FzeW5jX3JhKFxcdTAwMjZyYWN0bCwgZm9saW8sIGxhc3RfaW5kZXggLSBmb2xpby1cXHUwMDNlaW5kZXgpO1xcbi0tXFxubW0vZmlsZW1hcC5jPTI2ODY9c3RhdGljIGludCBmaWxlbWFwX2dldF9wYWdlcyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNpemVfdCBjb3VudCxcXG4tLVxcbm1tL2ZpbGVtYXAuYy0yNzEyLVxcdFxcdGlmIChpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfRE9OVENBQ0hFKVxcbm1tL2ZpbGVtYXAuYzoyNzEzOlxcdFxcdFxcdHJhY3RsLmRyb3BiZWhpbmQgPSAxO1xcbm1tL2ZpbGVtYXAuYy0yNzE0LVxcdFxcdHBhZ2VfY2FjaGVfc3luY19yYShcXHUwMDI2cmFjdGwsIGxhc3RfaW5kZXggLSBpbmRleCk7XFxuLS1cXG5tbS9maWxlbWFwLmM9Mjc1NT1zdGF0aWMgaW5saW5lIGJvb2wgcG9zX3NhbWVfZm9saW8obG9mZl90IHBvczEsIGxvZmZfdCBwb3MyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZmlsZW1hcC5jLTI3NjEtXFxubW0vZmlsZW1hcC5jOjI3NjI6c3RhdGljIHZvaWQgZmlsZW1hcF9lbmRfZHJvcGJlaGluZF9yZWFkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vZmlsZW1hcC5jLTI3NjMte1xcbm1tL2ZpbGVtYXAuYzoyNzY0OlxcdGlmICghZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSlcXG5tbS9maWxlbWFwLmMtMjc2NS1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS9maWxlbWFwLmMtMjc2OC1cXHRpZiAoZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcXG5tbS9maWxlbWFwLmM6Mjc2OTpcXHRcXHRmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKGZvbGlvKTtcXG5tbS9maWxlbWFwLmMtMjc3MC1cXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbi0tXFxubW0vZmlsZW1hcC5jPTI3ODc9c3NpemVfdCBmaWxlbWFwX3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLS1cXG5tbS9maWxlbWFwLmMtMjg4OS1cXG5tbS9maWxlbWFwLmM6Mjg5MDpcXHRcXHRcXHRmaWxlbWFwX2VuZF9kcm9wYmVoaW5kX3JlYWQoZm9saW8pO1xcbm1tL2ZpbGVtYXAuYy0yODkxLVxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuLS1cXG5tbS9mb2xpby5jPTQyMj12b2lkIGZvbGlvX21hcmtfYWNjZXNzZWQoc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9mb2xpby5jLTQyMy17XFxubW0vZm9saW8uYzo0MjQ6XFx0aWYgKGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykpXFxubW0vZm9saW8uYy00MjUtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zNjg1PXN0YXRpYyB2b2lkIF9fc3BsaXRfZm9saW9fdG9fb3JkZXIoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9sZF9vcmRlcixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzc0NC1cXHRcXHRcXHRcXHQgKDFMIFxcdTAwM2NcXHUwMDNjIFBHX2RpcnR5KSB8XFxubW0vaHVnZV9tZW1vcnkuYzozNzQ1OlxcdFxcdFxcdFxcdCAoMUwgXFx1MDAzY1xcdTAwM2MgUEdfZHJvcGJlaGluZCkgfFxcbm1tL2h1Z2VfbWVtb3J5LmMtMzc0Ni1cXHRcXHRcXHRcXHQgTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfTUFTSykpO1xcbi0tXFxubW0vcGFnZS13cml0ZWJhY2suYz0yNjAzPXN0YXRpYyB2b2lkIGZvbGlvX2FjY291bnRfZGlydGllZChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vcGFnZS13cml0ZWJhY2suYy0yNjE3LVxcdFxcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9ESVJUWSwgbnIpO1xcbm1tL3BhZ2Utd3JpdGViYWNrLmM6MjYxODpcXHRcXHRpZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSlcXG5tbS9wYWdlLXdyaXRlYmFjay5jLTI2MTktXFx0XFx0XFx0d2Jfc3RhdF9tb2Qod2IsIFdCX0RPTlRDQUNIRV9ESVJUWSwgbnIpO1xcbi0tXFxubW0vcGFnZS13cml0ZWJhY2suYz0yNjM2PXZvaWQgZm9saW9fYWNjb3VudF9jbGVhbmVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YilcXG4tLVxcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjY0MC1cXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfRElSVFksIC1ucik7XFxubW0vcGFnZS13cml0ZWJhY2suYzoyNjQxOlxcdGlmIChmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKVxcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjY0Mi1cXHRcXHR3Yl9zdGF0X21vZCh3YiwgV0JfRE9OVENBQ0hFX0RJUlRZLCAtbnIpO1xcbi0tXFxubW0vcGFnZS13cml0ZWJhY2suYz0yODY2PWJvb2wgZm9saW9fY2xlYXJfZGlydHlfZm9yX2lvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9wYWdlLXdyaXRlYmFjay5jLTI5MTYtXFx0XFx0XFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX0RJUlRZLCAtbnIpO1xcbm1tL3BhZ2Utd3JpdGViYWNrLmM6MjkxNzpcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSlcXG5tbS9wYWdlLXdyaXRlYmFjay5jLTI5MTgtXFx0XFx0XFx0XFx0d2Jfc3RhdF9tb2Qod2IsIFdCX0RPTlRDQUNIRV9ESVJUWSwgLW5yKTtcXG4tLVxcbm1tL3JlYWRhaGVhZC5jPTE5NT1zdGF0aWMgc3RydWN0IGZvbGlvICpyYWN0bF9hbGxvY19mb2xpbyhzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxcbi0tXFxubW0vcmVhZGFoZWFkLmMtMjAwLVxcdGZvbGlvID0gZmlsZW1hcF9hbGxvY19mb2xpbyhnZnBfbWFzaywgb3JkZXIsIE5VTEwpO1xcbm1tL3JlYWRhaGVhZC5jOjIwMTpcXHRpZiAoZm9saW8gXFx1MDAyNlxcdTAwMjYgcmFjdGwtXFx1MDAzZWRyb3BiZWhpbmQpXFxubW0vcmVhZGFoZWFkLmM6MjAyOlxcdFxcdF9fZm9saW9fc2V0X2Ryb3BiZWhpbmQoZm9saW8pO1xcbm1tL3JlYWRhaGVhZC5jLTIwMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MTc6MTUuMTEyNjQ2NjA3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzMyNDU1MzgxODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQ6IE1NIERyb3BiZWhpbmQgT3B0aW1pemF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBgZmlsZW1hcF9lbmRfZHJvcGJlaGluZGAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBmb2xpb19lbmRfZHJvcGJlaGluZGAgYW5kIGBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kX3JlYWRgLiBEcm9wYmVoaW5kIGlzIHRyaWdnZXJlZCBieSBgUldGX0RPTlRDQUNIRWAgb3IgYElPQ0JfRE9OVENBQ0hFYCwgZWZmZWN0aXZlbHkgd2l0aCBvcGVyYXRpb25zIGxpa2UgYHByZWFkdjJgL2Bwd3JpdGV2MmAgd2l0aCBgUldGX0RPTlRDQUNIRWAsIG9yIGlvX3VyaW5nIHdpdGggYElPUklOR19SRUNWU0VORF9QT0xMX0ZJUlNUYC4gVGhhdCdzIHRoZSBjb250ZXh0LlxuXG5Ob3csIGBmb2xpb191bm1hcF9pbnZhbGlkYXRlYCBpcyB0aGUga2V5IGZ1bmN0aW9uOyBpdCBoYW5kbGVzIHVubWFwcGluZyBhbmQgaW52YWxpZGF0aW5nIGEgZm9saW8uIEJ1dCBoZXJlJ3MgdGhlIGNhdGNoOiBJZiBhIGZvbGlvIGlzIG1hcHBlZCBpbnRvIHVzZXIgc3BhY2UgKHRoaW5rIGBtbWFwYCksIGBmb2xpb19tYXBwZWQoZm9saW8pYCBpcyB0cnVlLiBJZiB3ZSBjYWxsIGBmb2xpb191bm1hcF9pbnZhbGlkYXRlYCBvbiBhIG1hcHBlZCBmb2xpbywgd2UgY291bGQgY2F1c2UgaXNzdWVzIGJ5IGludmFsaWRhdGluZyB0aGUgbWFwLiBUaGlzIHBhdGNoIHNraXBzIHRoZSBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZWAgY2FsbCBmb3IgbWFwcGVkIGZvbGlvcy5cblxuVGhpcyBpcyBjb3JlIGtlcm5lbCBNTSBsb2dpYyBpbiBgbW0vZmlsZW1hcC5jYCwgYW5kIGl0J3MgcmVhY2hhYmxlIHRocm91Z2ggc3RhbmRhcmQgZmlsZSByZWFkL3dyaXRlIG9wZXJhdGlvbnMgKGxpa2UgYHByZWFkdjJgIHdpdGggYFJXRl9ET05UQ0FDSEVgKS4gU28sIGlzIHRoaXMgZnV6emFibGU/IExldCdzIGNoZWNrOlxuXG4qICAgKipEb2N1bWVudGF0aW9uL0tjb25maWcvQ29tbWVudHM/KiogTm9wZS5cbiogICAqKkRlY29yYXRpdmUgQ2hhbmdlcz8qKiBOb3BlLlxuKiAgICoqTnVtZXJpYyBDb25zdGFudHMvTWFjcm9zPyoqIE5vcGUuXG4qICAgKipWaXJ0dWFsaXplZCBFbnZpcm9ubWVudCBJbXBvc3NpYmxlIFBhdGhzPyoqIE5vIHdheSwgd2UgY2FuIHRlc3QgdGhpcyBlYXNpbHkgaW4gUUVNVSBvciBHQ0UuXG4qICAgKipWZW5kb3ItU3BlY2lmaWMgSGFyZHdhcmU/KiogTm9wZS5cbiogICAqKkRyaXZlciBSZW1vdmFsL1NodXRkb3duPyoqIE5vcGUuXG5cblRoaXMgbW9kaWZpZXMgY29yZSBrZXJuZWwgTU0gbG9naWMg4oCTIHNwZWNpZmljYWxseSwgdGhlIGV4ZWN1dGlvbiBmbG93LiBUaGUga2V5IGNoYW5nZSBpcyB0byAqc2tpcCogYGZvbGlvX3VubWFwX2ludmFsaWRhdGVgIHdoZW4gYGZvbGlvX21hcHBlZChmb2xpbylgIGlzIHRydWUuIFNvLCBXb3J0aEZ1enppbmcgPSBUcnVlLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBsaWtlbHkgZnVuY3Rpb25zIGFuZCBjb25maWdzLiBJIG5lZWQgdG8gZm9jdXMgb24gbm9uLWhvdC1wYXRoIHN5bWJvbHMuIFJlbGV2YW50IGZ1bmN0aW9ucyBhcmU6XG5cbiogICBgZm9saW9fZW5kX2Ryb3BiZWhpbmRgXG4qICAgYGZpbGVtYXBfcmVhZGAgKHRoaXMgaXMgYSBzdGFuZGFyZCByZWFkIGFuZCBsaWtlbHkgaXMgaG90LXBhdGgsIGJ1dCBtYXkgdHJpZ2dlciBgZm9saW9fZW5kX2Ryb3BiZWhpbmRgIG9yIGBmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmRgIG9yIGBmb2xpb19lbmRfd3JpdGViYWNrYCkuXG5cblNwZWNpZmljYWxseSwgSSdsbCBiZSBsb29raW5nIGF0IG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50czpcblxuKiAgIGBmb2xpb19lbmRfZHJvcGJlaGluZGAgLSBpcyBub24tc3RhdGljIGFuZCBgRVhQT1JUX1NZTUJPTF9HUEwoZm9saW9fZW5kX2Ryb3BiZWhpbmQpYC5cbiogICBgZm9saW9fZW5kX3dyaXRlYmFja2AgLSBpcyBub24tc3RhdGljIGFuZCBgRVhQT1JUX1NZTUJPTChmb2xpb19lbmRfd3JpdGViYWNrKWAuXG4qICAgYGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZGAgLSBpcyBub24tc3RhdGljIGFuZCBgRVhQT1JUX1NZTUJPTF9HUEwoZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKWAuXG5cbkknbGwgYWxzbyBncmVwIGZvciBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZWAgdG8gc2VlIGl0cyBkZWNsYXJhdGlvbi4gVGhhdCdzIHRoZSB0YXJnZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1ODUsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MTc6NDguMzU4MTg3NDM1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Mjk1NTYwNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9saW9fdW5tYXBfaW52YWxpZGF0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9maWxlbWFwLmM9MTYwOT1zdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9maWxlbWFwLmMtMTYxOS1cXHRpZiAobWFwcGluZyBcXHUwMDI2XFx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSlcXG5tbS9maWxlbWFwLmM6MTYyMDpcXHRcXHRmb2xpb191bm1hcF9pbnZhbGlkYXRlKG1hcHBpbmcsIGZvbGlvLCAwKTtcXG5tbS9maWxlbWFwLmMtMTYyMS19XFxuLS1cXG5tbS9pbnRlcm5hbC5oPTU5Nz1pbnQgemFwX3ZtYV9mb3JfcmVhcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxubW0vaW50ZXJuYWwuaDo1OTg6aW50IGZvbGlvX3VubWFwX2ludmFsaWRhdGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vaW50ZXJuYWwuaC01OTktXFx0XFx0XFx0ICAgZ2ZwX3QgZ2ZwKTtcXG4tLVxcbm1tL3RydW5jYXRlLmM9NjA2PXN0YXRpYyBpbnQgZm9saW9fbGF1bmRlcihzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3RydW5jYXRlLmMtNjIxLSAqL1xcbm1tL3RydW5jYXRlLmM6NjIyOmludCBmb2xpb191bm1hcF9pbnZhbGlkYXRlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL3RydW5jYXRlLmMtNjIzLVxcdFxcdFxcdCAgIGdmcF90IGdmcClcXG4tLVxcbm1tL3RydW5jYXRlLmM9Njc2PWludCBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbm1tL3RydW5jYXRlLmMtNzI1LVxcdFxcdFxcdGZvbGlvX3dhaXRfd3JpdGViYWNrKGZvbGlvKTtcXG5tbS90cnVuY2F0ZS5jOjcyNjpcXHRcXHRcXHRyZXQyID0gZm9saW9fdW5tYXBfaW52YWxpZGF0ZShtYXBwaW5nLCBmb2xpbywgR0ZQX0tFUk5FTCk7XFxubW0vdHJ1bmNhdGUuYy03MjctXFx0XFx0XFx0aWYgKHJldDIgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzoxNzo0OS45ODc3NDgwMjNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1Mjk1MTUzNDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgYGZvbGlvX3VubWFwX2ludmFsaWRhdGVgIGFuZCBSZWxhdGVkIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYGZvbGlvX3VubWFwX2ludmFsaWRhdGVgLiBJIGtub3cgaXQncyBkZWZpbmVkIGluIGBtbS90cnVuY2F0ZS5jYCwgYW5kIGltcG9ydGFudGx5LCBpdCdzIG5vdCBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQncyBsaWtlbHkgdXNlZCBvdXRzaWRlIHRoYXQgc3BlY2lmaWMgZmlsZS4gSSBhbHNvIHNlZSB0aGF0IGBmb2xpb19lbmRfZHJvcGJlaGluZGAgYW5kIGBmb2xpb19lbmRfd3JpdGViYWNrYCBhcmUgZGVmaW5lZCBpbiBgbW0vZmlsZW1hcC5jYCwgYWxzbyBub24tc3RhdGljLiBNYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIGNvbnRleHQuXG5cbk15IG5leHQgbW92ZSBpcyB0byBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHRoZSBjb21waWxhdGlvbiBvciBiZWhhdmlvciBhcm91bmQgYG1tL2ZpbGVtYXAuY2Agb3IsIG1vcmUgc3BlY2lmaWNhbGx5LCB0aGUgXCJkcm9wYmVoaW5kXCIgZnVuY3Rpb25hbGl0eSwgc2luY2UgYGZvbGlvX2VuZF9kcm9wYmVoaW5kYCBpcyBpbiBwbGF5LiBJIGtub3cgYGZpbGVtYXAuY2AgaXMgY29yZSBNTSwgc28gaXQgKnNob3VsZCogYWx3YXlzIGJlIGNvbXBpbGVkLCBidXQgSSdsbCBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSB3ZWlyZCBjb25maWcgZGVwZW5kZW5jaWVzIHRoYXQgY291bGQgbWFrZSB0aGluZ3Mgd29ua3kuXG5cbk5vdywgSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiAoYCNpZmRlZmAgY29uc3RydWN0cykgYXJvdW5kIHRoZSBmdW5jdGlvbnMgSSdtIGludGVyZXN0ZWQgaW4sIHBhcnRpY3VsYXJseSBgZm9saW9fZW5kX2Ryb3BiZWhpbmRgLiBMZXQncyB0YWtlIGEgbG9vayBpbiBgbW0vZmlsZW1hcC5jYCBpbiB0aGUgdmljaW5pdHkgb2YgYHJlYWQtZmlsZWAgYXJvdW5kIGxpbmUgMTYwMC0xNjUwLi4uTm9wZSwgbm8gaWZkZWZzIHRoZXJlLiBUaGF0J3MgZ29vZDsgZmV3ZXIgcG90ZW50aWFsIGdvdGNoYXMuXG5cbkZpbmFsbHksIEknbSBjdXJpb3VzIGFib3V0IHRoZSBgUldGX0RPTlRDQUNIRWAgZmxhZywgYmVjYXVzZSBJIGhhdmUgYSBodW5jaCBpdCBtaWdodCBiZSByZWxhdGVkLiBJJ2xsIHNlYXJjaCB0aGUgY29kZWJhc2UgZm9yIGBJT0NCX0RPTlRDQUNIRWAgb3IgYFJXRl9ET05UQ0FDSEVgIHRvIHNlZSBob3cgd2lkZWx5IHRoZXkncmUgc3VwcG9ydGVkIGFjcm9zcyBmaWxlc3lzdGVtcyBhbmQgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gc2NlbmFyaW9zLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIHBpY3R1cmUgb2YgaG93IHRoaXMgXCJkb24ndCBjYWNoZVwiIGJlaGF2aW9yIGludGVyYWN0cyB3aXRoIHRoZXNlIGZpbGUgbWFwcGluZyBvcGVyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzAzLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjE3OjU1LjI4MjkwMzY3MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwMDg2MzI4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJSV0ZfRE9OVENBQ0hFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzL25mc2QtaW8tbW9kZXMucnN0PTYwPUZvciBtb3JlIGNvbnRleHQgb24gRE9OVENBQ0hFLCBwbGVhc2Ugc2VlIHRoZXNlIExpbnV4IGNvbW1pdCBoZWFkZXJzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzZC1pby1tb2Rlcy5yc3QtNjQtLSBmb3IgUkVBRDogIDgwMjZlNDliZmY5YjEgKFxcXCJtbS9maWxlbWFwOiBhZGQgcmVhZCBzdXBwb3J0IGZvclxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzL25mc2QtaW8tbW9kZXMucnN0OjY1OiAgUldGX0RPTlRDQUNIRVxcXCIpXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzZC1pby1tb2Rlcy5yc3QtNjYtLSBmb3IgV1JJVEU6IDk3NGM1ZTYxMzlkYjMgKFxcXCJ4ZnM6IGZsYWcgYXMgc3VwcG9ydGluZyBGT1BfRE9OVENBQ0hFXFxcIilcXG4tLVxcbmluY2x1ZGUvbGludXgvZnMuaD0zMzY9c3RydWN0IHJlYWRhaGVhZF9jb250cm9sO1xcbi0tXFxuaW5jbHVkZS9saW51eC9mcy5oLTM0NC0jZGVmaW5lIElPQ0JfQVRPTUlDXFx0XFx0KF9fZm9yY2UgaW50KSBSV0ZfQVRPTUlDXFxuaW5jbHVkZS9saW51eC9mcy5oOjM0NTojZGVmaW5lIElPQ0JfRE9OVENBQ0hFXFx0XFx0KF9fZm9yY2UgaW50KSBSV0ZfRE9OVENBQ0hFXFxuaW5jbHVkZS9saW51eC9mcy5oLTM0Ni0jZGVmaW5lIElPQ0JfTk9TSUdOQUxcXHRcXHQoX19mb3JjZSBpbnQpIFJXRl9OT1NJR05BTFxcbi0tXFxuaW5jbHVkZS9saW51eC9mcy5oPTM0NDc9c3RhdGljIGlubGluZSBpbnQga2lvY2Jfc2V0X3J3X2ZsYWdzKHN0cnVjdCBraW9jYiAqa2ksIHJ3Zl90IGZsYWdzLFxcbi0tXFxuaW5jbHVkZS9saW51eC9mcy5oLTM0NzEtXFx0fVxcbmluY2x1ZGUvbGludXgvZnMuaDozNDcyOlxcdGlmIChmbGFncyBcXHUwMDI2IFJXRl9ET05UQ0FDSEUpIHtcXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMzQ3My1cXHRcXHQvKiBmaWxlIHN5c3RlbSBtdXN0IHN1cHBvcnQgaXQgKi9cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9mcy5oPTQyNT10eXBlZGVmIGludCBfX2JpdHdpc2UgX19rZXJuZWxfcndmX3Q7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaC00NDgtLyogYnVmZmVyZWQgSU8gdGhhdCBkcm9wcyB0aGUgY2FjaGUgYWZ0ZXIgcmVhZGluZyBvciB3cml0aW5nIGRhdGEgKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaDo0NDk6I2RlZmluZSBSV0ZfRE9OVENBQ0hFXFx0KChfX2ZvcmNlIF9fa2VybmVsX3J3Zl90KTB4MDAwMDAwODApXFxuaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtNDUwLVxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtNDU2LVxcdFxcdFxcdCBSV0ZfQVBQRU5EIHwgUldGX05PQVBQRU5EIHwgUldGX0FUT01JQyB8XFxcXFxcbmluY2x1ZGUvdWFwaS9saW51eC9mcy5oOjQ1NzpcXHRcXHRcXHQgUldGX0RPTlRDQUNIRSB8IFJXRl9OT1NJR05BTClcXG5pbmNsdWRlL3VhcGkvbGludXgvZnMuaC00NTgtXFxuLS1cXG5tbS9maWxlbWFwLmM9MTYyOD12b2lkIGZvbGlvX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9maWxlbWFwLmMtMTYzMy1cXHQvKlxcbm1tL2ZpbGVtYXAuYzoxNjM0OlxcdCAqIEhpdHRpbmcgIWluX3Rhc2soKSBzaG91bGQgbm90IGhhcHBlbiBvZmYgUldGX0RPTlRDQUNIRSB3cml0ZWJhY2ssXFxubW0vZmlsZW1hcC5jLTE2MzUtXFx0ICogYnV0IGNhbiBoYXBwZW4gaWYgbm9ybWFsIHdyaXRlYmFjayBqdXN0IGhhcHBlbnMgdG8gZmluZCBkaXJ0eSBmb2xpb3NcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oPTMyMT10eXBlZGVmIGludCBfX2JpdHdpc2UgX19rZXJuZWxfcndmX3Q7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvZnMuaC0zNDQtLyogYnVmZmVyZWQgSU8gdGhhdCBkcm9wcyB0aGUgY2FjaGUgYWZ0ZXIgcmVhZGluZyBvciB3cml0aW5nIGRhdGEgKi9cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvZnMuaDozNDU6I2RlZmluZSBSV0ZfRE9OVENBQ0hFXFx0KChfX2ZvcmNlIF9fa2VybmVsX3J3Zl90KTB4MDAwMDAwODApXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtMzQ2LVxcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtMzQ5LVxcdFxcdFxcdCBSV0ZfQVBQRU5EIHwgUldGX05PQVBQRU5EIHwgUldGX0FUT01JQyB8XFxcXFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9mcy5oOjM1MDpcXHRcXHRcXHQgUldGX0RPTlRDQUNIRSlcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvZnMuaC0zNTEtXFxuLS1cXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaD00MjU9dHlwZWRlZiBpbnQgX19iaXR3aXNlIF9fa2VybmVsX3J3Zl90O1xcbi0tXFxudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtNDQ4LS8qIGJ1ZmZlcmVkIElPIHRoYXQgZHJvcHMgdGhlIGNhY2hlIGFmdGVyIHJlYWRpbmcgb3Igd3JpdGluZyBkYXRhICovXFxudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmg6NDQ5OiNkZWZpbmUgUldGX0RPTlRDQUNIRVxcdCgoX19mb3JjZSBfX2tlcm5lbF9yd2ZfdCkweDAwMDAwMDgwKVxcbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L2luY2x1ZGUvdWFwaS9saW51eC9mcy5oLTQ1MC1cXG4tLVxcbnRvb2xzL3BlcmYvdHJhY2UvYmVhdXR5L2luY2x1ZGUvdWFwaS9saW51eC9mcy5oLTQ1Ni1cXHRcXHRcXHQgUldGX0FQUEVORCB8IFJXRl9OT0FQUEVORCB8IFJXRl9BVE9NSUMgfFxcXFxcXG50b29scy9wZXJmL3RyYWNlL2JlYXV0eS9pbmNsdWRlL3VhcGkvbGludXgvZnMuaDo0NTc6XFx0XFx0XFx0IFJXRl9ET05UQ0FDSEUgfCBSV0ZfTk9TSUdOQUwpXFxudG9vbHMvcGVyZi90cmFjZS9iZWF1dHkvaW5jbHVkZS91YXBpL2xpbnV4L2ZzLmgtNDU4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzoxNzo1Ni42ODM3NzM1NDJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTM0MjM3NDM1NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYEZPUF9ET05UQ0FDSEVgIEFjcm9zcyBGaWxlc3lzdGVtcyoqXG5cbkFscmlnaHQsIHNvIHRoZSBuYWdnaW5nIHF1ZXN0aW9uIG9mIGBGT1BfRE9OVENBQ0hFYCBhbmQgaXRzIGltcGxpY2F0aW9ucyBoYXMgcmVzdXJmYWNlZC4gSSBuZWVkIHRvIGdldCBhIGZpcm0gaGFuZGxlIG9uIGl0cyBiZWhhdmlvciBhbmQgZWZmZWN0aXZlbmVzcywgcGFydGljdWxhcmx5IGFjcm9zcyBkaWZmZXJlbnQgZmlsZXN5c3RlbSBpbXBsZW1lbnRhdGlvbnMuIEknbSB0aGlua2luZywgXCJJcyB0aGVyZSBhIHN5c3RlbWljIHByb2JsZW0gaGVyZSwgb3IgYXJlIHdlIHNlZWluZyBhIGZpbGVzeXN0ZW0tc3BlY2lmaWMgcXVpcms/XCIgSSBzaG91bGQgaW5pdGlhdGUgYSBkZWVwIGRpdmUsIHByb2JhYmx5IHN0YXJ0aW5nIHdpdGggYSBjcm9zcy1maWxlc3lzdGVtIGF1ZGl0LiBJJ2xsIG5lZWQgdG8gZGV2ZWxvcCBhIG1ldGhvZG9sb2d5IGZvciBxdWlja2x5IGlkZW50aWZ5aW5nIHdoZXJlIGBGT1BfRE9OVENBQ0hFYCBpcyBiZWluZyB1c2VkLCAqYW5kKiBtb3JlIGltcG9ydGFudGx5LCB3aGV0aGVyIGl0J3MgYWN0dWFsbHkgd29ya2luZyBhcyBleHBlY3RlZCBpbiB0aG9zZSBjb250ZXh0cy4gV2UncmUgdGFsa2luZyBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMsIG9mIGNvdXJzZSwgYW5kIHBvc3NpYmx5LCBzdWJ0bGUgY29ycmVjdG5lc3MgaXNzdWVzIGlmIGEgY2FjaGluZyBsYXllciBpcyB1bmV4cGVjdGVkbHkgaW50ZXJmZXJpbmcuIFNvIHllYWgsIEkgbmVlZCB0byBjaGVjayBgRk9QX0RPTlRDQUNIRWAgYWNyb3NzIGZpbGVzeXN0ZW1zOyBsZXQncyBnZXQgc3RhcnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExMTEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzoxODoxMC4xMDc1MTk3NTlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDIxMzcwNjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRk9QX0RPTlRDQUNIRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9uZnNkLWlvLW1vZGVzLnJzdD02MD1Gb3IgbW9yZSBjb250ZXh0IG9uIERPTlRDQUNIRSwgcGxlYXNlIHNlZSB0aGVzZSBMaW51eCBjb21taXQgaGVhZGVyczpcXG4tLVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzL25mc2QtaW8tbW9kZXMucnN0LTY1LSAgUldGX0RPTlRDQUNIRVxcXCIpXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzZC1pby1tb2Rlcy5yc3Q6NjY6LSBmb3IgV1JJVEU6IDk3NGM1ZTYxMzlkYjMgKFxcXCJ4ZnM6IGZsYWcgYXMgc3VwcG9ydGluZyBGT1BfRE9OVENBQ0hFXFxcIilcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9uZnNkLWlvLW1vZGVzLnJzdC02Ny1cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9uZnNkLWlvLW1vZGVzLnJzdD02OD1ORlNEX0lPX0RPTlRDQUNIRSB3aWxsIGZhbGwgYmFjayB0byBORlNEX0lPX0JVRkZFUkVEIGlmIHRoZSB1bmRlcmx5aW5nXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzZC1pby1tb2Rlcy5yc3Q6Njk6ZmlsZXN5c3RlbSBkb2Vzbid0IGluZGljYXRlIHN1cHBvcnQgYnkgc2V0dGluZyBGT1BfRE9OVENBQ0hFLlxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzL25mc2QtaW8tbW9kZXMucnN0LTcwLVxcbi0tXFxuYmxvY2svZm9wcy5jPTkyOT1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlZl9ibGtfZm9wcyA9IHtcXG4tLVxcbmJsb2NrL2ZvcHMuYy05NDUtXFx0LnVyaW5nX2NtZFxcdD0gYmxrZGV2X3VyaW5nX2NtZCxcXG5ibG9jay9mb3BzLmM6OTQ2OlxcdC5mb3BfZmxhZ3NcXHQ9IEZPUF9CVUZGRVJfUkFTWU5DIHwgRk9QX0RPTlRDQUNIRSxcXG5ibG9jay9mb3BzLmMtOTQ3LX07XFxuLS1cXG5mcy9leHQ0L2ZpbGUuYz0xMDM1PWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXh0NF9maWxlX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy9leHQ0L2ZpbGUuYy0xMDUzLVxcdFxcdFxcdCAgRk9QX0RJT19QQVJBTExFTF9XUklURSB8XFxuZnMvZXh0NC9maWxlLmM6MTA1NDpcXHRcXHRcXHQgIEZPUF9ET05UQ0FDSEUsXFxuZnMvZXh0NC9maWxlLmMtMTA1NS1cXHQuc2V0bGVhc2VcXHQ9IGdlbmVyaWNfc2V0bGVhc2UsXFxuLS1cXG5mcy9uZnMvZmlsZS5jPTk5OD1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5mc19maWxlX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy9uZnMvZmlsZS5jLTEwMTEtXFx0LmNoZWNrX2ZsYWdzXFx0PSBuZnNfY2hlY2tfZmxhZ3MsXFxuZnMvbmZzL2ZpbGUuYzoxMDEyOlxcdC5mb3BfZmxhZ3NcXHQ9IEZPUF9ET05UQ0FDSEUsXFxuZnMvbmZzL2ZpbGUuYy0xMDEzLX07XFxuLS1cXG5mcy9uZnMvbmZzNGZpbGUuYz00Mzg9Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuZnM0X2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL25mcy9uZnM0ZmlsZS5jLTQ1OS0jZW5kaWZcXG5mcy9uZnMvbmZzNGZpbGUuYzo0NjA6XFx0LmZvcF9mbGFnc1xcdD0gRk9QX0RPTlRDQUNIRSxcXG5mcy9uZnMvbmZzNGZpbGUuYy00NjEtfTtcXG4tLVxcbmZzL25mc2QvdmZzLmM9MTE5OT1fX2JlMzIgbmZzZF9pdGVyX3JlYWQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqZmhwLFxcbi0tXFxuZnMvbmZzZC92ZnMuYy0xMjIxLVxcdGNhc2UgTkZTRF9JT19ET05UQ0FDSEU6XFxuZnMvbmZzZC92ZnMuYzoxMjIyOlxcdFxcdGlmIChmaWxlLVxcdTAwM2VmX29wLVxcdTAwM2Vmb3BfZmxhZ3MgXFx1MDAyNiBGT1BfRE9OVENBQ0hFKVxcbmZzL25mc2QvdmZzLmMtMTIyMy1cXHRcXHRcXHRraW9jYi5raV9mbGFncyA9IElPQ0JfRE9OVENBQ0hFO1xcbi0tXFxuZnMvbmZzZC92ZnMuYz0xMzc2PW5mc2RfZGlyZWN0X3dyaXRlKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZmggKmZocCxcXG4tLVxcbmZzL25mc2QvdmZzLmMtMTQwMS1cXHRcXHRcXHQgKi9cXG5mcy9uZnNkL3Zmcy5jOjE0MDI6XFx0XFx0XFx0aWYgKG5mLVxcdTAwM2VuZl9maWxlLVxcdTAwM2VmX29wLVxcdTAwM2Vmb3BfZmxhZ3MgXFx1MDAyNiBGT1BfRE9OVENBQ0hFKVxcbmZzL25mc2QvdmZzLmMtMTQwMy1cXHRcXHRcXHRcXHRraW9jYi1cXHUwMDNla2lfZmxhZ3MgfD0gSU9DQl9ET05UQ0FDSEU7XFxuLS1cXG5mcy9uZnNkL3Zmcy5jPTE0MzY9bmZzZF92ZnNfd3JpdGUoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqZmhwLFxcbi0tXFxuZnMvbmZzZC92ZnMuYy0xNTA3LVxcdGNhc2UgTkZTRF9JT19ET05UQ0FDSEU6XFxuZnMvbmZzZC92ZnMuYzoxNTA4OlxcdFxcdGlmIChmaWxlLVxcdTAwM2VmX29wLVxcdTAwM2Vmb3BfZmxhZ3MgXFx1MDAyNiBGT1BfRE9OVENBQ0hFKVxcbmZzL25mc2QvdmZzLmMtMTUwOS1cXHRcXHRcXHRraW9jYi5raV9mbGFncyB8PSBJT0NCX0RPTlRDQUNIRTtcXG4tLVxcbmZzL3hmcy94ZnNfZmlsZS5jPTIxNzY9Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB4ZnNfZmlsZV9vcGVyYXRpb25zID0ge1xcbi0tXFxuZnMveGZzL3hmc19maWxlLmMtMjE5Ni1cXHRcXHRcXHQgIEZPUF9CVUZGRVJfV0FTWU5DIHwgRk9QX0RJT19QQVJBTExFTF9XUklURSB8XFxuZnMveGZzL3hmc19maWxlLmM6MjE5NzpcXHRcXHRcXHQgIEZPUF9ET05UQ0FDSEUsXFxuZnMveGZzL3hmc19maWxlLmMtMjE5OC1cXHQuc2V0bGVhc2VcXHQ9IGdlbmVyaWNfc2V0bGVhc2UsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZzLmg9MTkxOT1zdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZnMuaC0xOTc5LS8qIEZpbGUgc3lzdGVtIHN1cHBvcnRzIHVuY2FjaGVkIHJlYWQvd3JpdGUgYnVmZmVyZWQgSU8gKi9cXG5pbmNsdWRlL2xpbnV4L2ZzLmg6MTk4MDojZGVmaW5lIEZPUF9ET05UQ0FDSEVcXHRcXHQoKF9fZm9yY2UgZm9wX2ZsYWdzX3QpKDEgXFx1MDAzY1xcdTAwM2MgNykpXFxuaW5jbHVkZS9saW51eC9mcy5oLTE5ODEtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZzLmg9MzQ0Nz1zdGF0aWMgaW5saW5lIGludCBraW9jYl9zZXRfcndfZmxhZ3Moc3RydWN0IGtpb2NiICpraSwgcndmX3QgZmxhZ3MsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMzQ3My1cXHRcXHQvKiBmaWxlIHN5c3RlbSBtdXN0IHN1cHBvcnQgaXQgKi9cXG5pbmNsdWRlL2xpbnV4L2ZzLmg6MzQ3NDpcXHRcXHRpZiAoIShraS1cXHUwMDNla2lfZmlscC1cXHUwMDNlZl9vcC1cXHUwMDNlZm9wX2ZsYWdzIFxcdTAwMjYgRk9QX0RPTlRDQUNIRSkpXFxuaW5jbHVkZS9saW51eC9mcy5oLTM0NzUtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzoxODoxMS41NDk2NjI2OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTgzOTY4MDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEZPUF9ET05UQ0FDSEUgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBgRk9QX0RPTlRDQUNIRWAgc2VlbXMgcHJldHR5IHdpZGVseSBzdXBwb3J0ZWQgYWNyb3NzIGRpZmZlcmVudCBmaWxlc3lzdGVtcyDigJMgZXh0NCwgeGZzLCBuZnMsIGFuZCBldmVuIGJsb2NrIGRldmljZSBvcGVyYXRpb25zLiBUaGF0J3MgZ29vZCwgbGVzcyBvZiBhIGhlYWRhY2hlIGZvciBpbml0aWFsIHNldHVwLiBUaGUgdGV4dCBzYXlzIHRoZXJlIGFyZW4ndCBhbnkgc3BlY2lhbCBjb25maWd1cmF0aW9ucyBuZWVkZWQsIHdoaWNoIHN1Z2dlc3RzIHRoYXQgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGZpbGUgbWFwcGluZyBpbmZyYXN0cnVjdHVyZSBpcyBhbHdheXMgb24sIGFuZCBmaWxlc3lzdGVtcyBsaWtlIGBFWFQ0X0ZTYCwgYFhGU19GU2AsIGFuZCBgQkxPQ0tgIGp1c3QgZW5hYmxlIHN1cHBvcnQuXG5cblNvLCB0aGUgcXVlc3Rpb24gaXMsIGRvIEkgbmVlZCB0byBleHBsaWNpdGx5IHNwZWNpZnkgYEJMT0NLYCwgYEVYVDRfRlNgIG9yIGNhbiBJIGp1c3QgbGVhdmUgYEVuYWJsZUNvbmZpZ3NgIGVtcHR5IG9yIGFzIGBbXWA/IEkgbmVlZCB0byBmaWd1cmUgdGhhdCBvdXQuIFRoZSB0ZXh0IHBvaW50cyBvdXQgdGhhdCBgZmlsZW1hcC5jYCBpcyBidWlsdCB1bmNvbmRpdGlvbmFsbHkuIFRoYXQgbWVhbnMgaXTigJlzIGFsd2F5cyBjb21waWxlZCBhbmQgbGlua2VkIGludG8gdGhlIGtlcm5lbCwgcmVnYXJkbGVzcyBvZiBmaWxlc3lzdGVtIHNlbGVjdGlvbi4gSXQncyBidWlsdCBpbiBgbW0vTWFrZWZpbGVgLCBzbyBsZXQgbWUgcXVpY2tseSB2ZXJpZnkgdGhhdC4gQSBxdWljayBsb29rIHRoZXJlIHNob3VsZCBjb25maXJtIHRoYXQgYGZpbGVtYXAuY2AgaXMgaW5kZWVkIGJ1aWx0IGludG8gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODA1LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjE4OjE0LjczMzYzMjk2NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5Mzc2NjQyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaWxlbWFwXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT00OT1lbmRpZlxcbm1tL01ha2VmaWxlLTUwLVxcbm1tL01ha2VmaWxlOjUxOm9iai15XFx0XFx0XFx0Oj0gZmlsZW1hcC5vIG1lbXBvb2wubyBvb21fa2lsbC5vIGZhZHZpc2UubyBcXFxcXFxubW0vTWFrZWZpbGUtNTItXFx0XFx0XFx0ICAgbWFjY2Vzcy5vIHBhZ2Utd3JpdGViYWNrLm8gZm9saW8tY29tcGF0Lm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzoxODoxNi4wMjc0MDM2MTlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDEyNjE2OTQyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBgbW0vZmlsZW1hcC5jYCBhbmQgaXRzIEtleSBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBgbW0vZmlsZW1hcC5jYCBpcyBjb21waWxlZCByaWdodCBpbnRvIHRoZSBrZXJuZWwgY29yZSDigJMgYG9iai15YCBpbiB0aGUgYnVpbGQgcHJvY2Vzcy4gSSBuZWVkIHRvIGZvY3VzIG9uIHR3byBrZXkgZnVuY3Rpb25zOiBgZm9saW9fZW5kX2Ryb3BiZWhpbmRgIGFuZCBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZWAuIExldCBtZSBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGhvdyB0aGV5J3JlIGV4cG9zZWQuXG5cbmBmb2xpb19lbmRfZHJvcGJlaGluZGAgbG9va3MgbGlrZSBpdCdzIG5vbi1zdGF0aWMgYW5kIGV4cG9ydGVkIHVzaW5nIGBFWFBPUlRfU1lNQk9MX0dQTGAuIFRoYXQgbWVhbnMgaXQncyBhdmFpbGFibGUgdG8gb3RoZXIga2VybmVsIG1vZHVsZXMsIHdoaWNoIGlzIGltcG9ydGFudCB0byByZW1lbWJlciBmb3IgaXRzIGludGVyYWN0aW9uIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS5cblxuYGZvbGlvX3VubWFwX2ludmFsaWRhdGVgLi4uYWgsIHllcywgZGVmaW5lZCBpbiBgbW0vdHJ1bmNhdGUuY2AgYnV0IGRlY2xhcmVkIGluIGBtbS9pbnRlcm5hbC5oYC4gSXQncyBub24tc3RhdGljLCBzbyBpdCdzIGxpa2VseSBtZWFudCBmb3IgYnJvYWRlciB1c2UgdGhhbiBqdXN0IHdpdGhpbiBhIHNpbmdsZSBmaWxlLCB0aG91Z2ggaXQncyBzdGlsbCBzY29wZWQgd2l0aGluIHRoZSBgbW1gIHN1YnN5c3RlbS4gR29vZC5cblxuQWxyaWdodCwgdGhhdCBjb3ZlcnMgdGhlIGtleSBwb2ludHMgb2YgdGhlIEFQSSBzdXJmYWNlLiBUaW1lIHRvIGludm9rZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGFuZCBmaW5hbGl6ZSB0aGlzIHJlc3BvbnNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI4MiwiT3V0cHV0VG9rZW5zIjoxMjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MTg6MjAuMTUzNTc0ODYzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmb2xpb19lbmRfZHJvcGJlaGluZFwiLFxuICAgIFwiZm9saW9fdW5tYXBfaW52YWxpZGF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGRyb3BiZWhpbmQgZm9saW8gaW52YWxpZGF0aW9uIGluIG1tL2ZpbGVtYXAuYyBieSBhZGRpbmcgYSBjaGVjayBmb3IgIWZvbGlvX21hcHBlZChmb2xpbykgYmVmb3JlIGNhbGxpbmcgZm9saW9fdW5tYXBfaW52YWxpZGF0ZSgpLiBUaGlzIGFsdGVycyBjb3JlIHBhZ2UgY2FjaGUgaW52YWxpZGF0aW9uIGJlaGF2aW9yIGZvciBjYWNoZWQvZHJvcGJlaGluZCBmb2xpb3MgKHN1Y2ggYXMgdGhvc2UgdXNlZCB3aXRoIFJXRl9ET05UQ0FDSEUgLyBJT0NCX0RPTlRDQUNIRSkgYW5kIGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmb2xpb19lbmRfZHJvcGJlaGluZFwiLFxuICAgIFwiZm9saW9fdW5tYXBfaW52YWxpZGF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGRyb3BiZWhpbmQgZm9saW8gaW52YWxpZGF0aW9uIGluIG1tL2ZpbGVtYXAuYyBieSBhZGRpbmcgYSBjaGVjayBmb3IgIWZvbGlvX21hcHBlZChmb2xpbykgYmVmb3JlIGNhbGxpbmcgZm9saW9fdW5tYXBfaW52YWxpZGF0ZSgpLiBUaGlzIGFsdGVycyBjb3JlIHBhZ2UgY2FjaGUgaW52YWxpZGF0aW9uIGJlaGF2aW9yIGZvciBjYWNoZWQvZHJvcGJlaGluZCBmb2xpb3MgKHN1Y2ggYXMgdGhvc2UgdXNlZCB3aXRoIFJXRl9ET05UQ0FDSEUgLyBJT0NCX0RPTlRDQUNIRSkgYW5kIGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MTg6MjAuMTUzNjAxMzczWiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTA2MzIzMzk1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjE4OjIwLjE1Mzk4MDUxM1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI5MDYyODUwNTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgYCFmb2xpb19tYXBwZWQoZm9saW8pYCBiZWZvcmUgaW52b2tpbmcgYGZvbGlvX3VubWFwX2ludmFsaWRhdGUoKWAgaW4gYGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoKWAuIFRoaXMgbW9kaWZpZXMgcGFnZSBjYWNoZSBkcm9wLWJlaGluZCBsb2dpYyB0byBza2lwIGludmFsaWRhdGluZyBmb2xpb3MgdGhhdCBhcmUgY3VycmVudGx5IG1hcHBlZCBpbnRvIHVzZXIgcGFnZSB0YWJsZXMuIEl0IG9wZXJhdGVzIGVudGlyZWx5IG9uIGV4aXN0aW5nLCB2YWxpZCBzdHJ1Y3QgZm9saW8gZmxhZ3MgYW5kIG1hcHBpbmcgcmVmZXJlbmNlcy4gVGhlcmUgYXJlIG5vIGFsbG9jYXRpb25zLCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZyBsZWFrcywgb3IgdXNlci1zcGFjZSBjb3BpZXMgaW52b2x2ZWQuIFN0YW5kYXJkIEtBU0FOL2tlcm5lbCBkZWJ1Z2dlcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyAoc3VjaCBhcyByZWZjb3VudGluZywgbG9ja2luZywgb3IgVUFGIGJ1Z3MpLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4ZGU3NGJlNDA2ZjI2ZTRjNWE0MTJhNTFiYzg1MmM4NDkxMWY2MWM1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjkgMTM6MTY6NDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmNcbmluZGV4IDZhZmVjNjM2ODgxZmIuLjAwZmQ4OWNmNmY1NTAgMTAwNjQ0XG4tLS0gYS9tbS9maWxlbWFwLmNcbisrKyBiL21tL2ZpbGVtYXAuY1xuQEAgLTE2MTYsNyArMTYxNiw3IEBAIHN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFx0cmV0dXJuO1xuIFx0aWYgKCFmb2xpb190ZXN0X2NsZWFyX2Ryb3BiZWhpbmQoZm9saW8pKVxuIFx0XHRyZXR1cm47XG4tXHRpZiAobWFwcGluZylcbitcdGlmIChtYXBwaW5nIFx1MDAyNlx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSlcbiBcdFx0Zm9saW9fdW5tYXBfaW52YWxpZGF0ZShtYXBwaW5nLCBmb2xpbywgMCk7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MTg6MjAuMTUzOTgxMjIzWiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc4NzQ5NTAxNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIGFuYWx5c2lzOlxuXG4qKkFuYWx5emluZyBgbW0vZmlsZW1hcC5jYCBhcm91bmQgbGluZSAxNjE2KipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhpcyBwYXRjaCBhbmQgdW5kZXJzdGFuZCBpdHMgaW1wbGljYXRpb25zIHdpdGhpbiB0aGUgYG1tL2ZpbGVtYXAuY2AgbW9kdWxlLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSBpbW1lZGlhdGUgY29udGV4dC4gSSdtIGdvaW5nIHRvIGdyYWIgdGhlIGNvZGUgYXJvdW5kIGxpbmUgMTYxNiB1c2luZyBgcmVhZC1maWxlYC4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIG5lY2Vzc2FyeSB2aWV3IG9mIHRoZSBmdW5jdGlvbiBhbmQgc3Vycm91bmRpbmcgbG9naWMuIFRoaXMgbGV2ZWwgb2YgZGV0YWlsIHNob3VsZCBnaXZlIG1lIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gdG8gZGV0ZXJtaW5lIGhvdyB0aGUgY2hhbmdlIHdpbGwgZWZmZWN0IHRoZSBvdmVyYWxsIG9wZXJhdGlvbiBvZiB0aGUgcHJvZ3JhbS4gSSBjYW4gdGhlbiB1c2UgdGhhdCBpbmZvcm1hdGlvbiB0byBhc3Nlc3MgaWYgdGhlIGNoYW5nZSBoYXMgbWVyaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNDAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjE4OjI4LjAyODkzMzc0NloiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDY3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZmlsZW1hcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2MDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2MDA6XFx0XFx0XFx0cmV0ID0gZm9saW9fd2FpdF9iaXRfa2lsbGFibGUoZm9saW8sIFBHX3ByaXZhdGVfMik7XFxuMTYwMTpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xNjAyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjE2MDM6XFx0XFx0fVxcbjE2MDQ6XFx0XFxuMTYwNTpcXHRcXHRyZXR1cm4gcmV0O1xcbjE2MDY6XFx0fVxcbjE2MDc6XFx0RVhQT1JUX1NZTUJPTChmb2xpb193YWl0X3ByaXZhdGVfMl9raWxsYWJsZSk7XFxuMTYwODpcXHRcXG4xNjA5OlxcdHN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4xNjEwOlxcdHtcXG4xNjExOlxcdFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZm9saW8tXFx1MDAzZW1hcHBpbmc7XFxuMTYxMjpcXHRcXG4xNjEzOlxcdFxcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7XFxuMTYxNDpcXHRcXG4xNjE1OlxcdFxcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykgfHwgZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpXFxuMTYxNjpcXHRcXHRcXHRyZXR1cm47XFxuMTYxNzpcXHRcXHRpZiAoIWZvbGlvX3Rlc3RfY2xlYXJfZHJvcGJlaGluZChmb2xpbykpXFxuMTYxODpcXHRcXHRcXHRyZXR1cm47XFxuMTYxOTpcXHRcXHRpZiAobWFwcGluZyBcXHUwMDI2XFx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSlcXG4xNjIwOlxcdFxcdFxcdGZvbGlvX3VubWFwX2ludmFsaWRhdGUobWFwcGluZywgZm9saW8sIDApO1xcbjE2MjE6XFx0fVxcbjE2MjI6XFx0XFxuMTYyMzpcXHQvKlxcbjE2MjQ6XFx0ICogSWYgZm9saW8gd2FzIG1hcmtlZCBhcyBkcm9wYmVoaW5kLCB0aGVuIHBhZ2VzIHNob3VsZCBiZSBkcm9wcGVkIHdoZW4gd3JpdGViYWNrXFxuMTYyNTpcXHQgKiBjb21wbGV0ZXMuIERvIHRoYXQgbm93LiBJZiB3ZSBmYWlsLCBpdCdzIGxpa2VseSBiZWNhdXNlIG9mIGEgYmlnIGZvbGlvIC1cXG4xNjI2OlxcdCAqIGp1c3QgcmVzZXQgZHJvcGJlaGluZCBmb3IgdGhhdCBjYXNlIGFuZCBsYXR0ZXIgY29tcGxldGlvbnMgc2hvdWxkIGludmFsaWRhdGUuXFxuMTYyNzpcXHQgKi9cXG4xNjI4OlxcdHZvaWQgZm9saW9fZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4xNjI5OlxcdHtcXG4xNjMwOlxcdFxcdGlmICghZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSlcXG4xNjMxOlxcdFxcdFxcdHJldHVybjtcXG4xNjMyOlxcdFxcbjE2MzM6XFx0XFx0LypcXG4xNjM0OlxcdFxcdCAqIEhpdHRpbmcgIWluX3Rhc2soKSBzaG91bGQgbm90IGhhcHBlbiBvZmYgUldGX0RPTlRDQUNIRSB3cml0ZWJhY2ssXFxuMTYzNTpcXHRcXHQgKiBidXQgY2FuIGhhcHBlbiBpZiBub3JtYWwgd3JpdGViYWNrIGp1c3QgaGFwcGVucyB0byBmaW5kIGRpcnR5IGZvbGlvc1xcbjE2MzY6XFx0XFx0ICogdGhhdCB3ZXJlIGNyZWF0ZWQgYXMgcGFydCBvZiB1bmNhY2hlZCB3cml0ZWJhY2ssIGFuZCB0aGF0IHdyaXRlYmFja1xcbjE2Mzc6XFx0XFx0ICogd291bGQgb3RoZXJ3aXNlIG5vdCBuZWVkIG5vbi1JUlEgaGFuZGxpbmcuIEp1c3Qgc2tpcCB0aGVcXG4xNjM4OlxcdFxcdCAqIGludmFsaWRhdGlvbiBpbiB0aGF0IGNhc2UuXFxuMTYzOTpcXHRcXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MTg6MjguMDI5MTQzOTU2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3ODg4MTA0MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgTWVtb3J5IE1hbmFnZW1lbnQgaW4gdGhlIEtlcm5lbCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpYyBiZWhhdmlvcnMgb2YgYGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmRgIGFuZCBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZWAuIEkgdmFndWVseSByZWNhbGwgdGhlaXIgZ2VuZXJhbCBwdXJwb3NlLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgdGhlaXIgaW50ZXJhY3Rpb24gYW5kIHByZWNpc2VseSAqd2hlcmUqIHRoZXkncmUgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIGZpbGUgc3lzdGVtIGFuZCB2aXJ0dWFsIG1lbW9yeSBzdWJzeXN0ZW1zLiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCwgc28gSSBjYW4gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgZmxvdyBvZiBleGVjdXRpb24sIGFuZCB3aGF0IGltcGxpY2F0aW9ucyBpdCBoYXMgZm9yIGNhY2hpbmcsIElPLCBhbmQgdWx0aW1hdGVseSwgdXNlci1zcGFjZSBwZXJmb3JtYW5jZS4gVGltZSB0byBkaWcgaW50byB0aGUgY29kZSFcblxuXG4iLCJJbnB1dFRva2VucyI6Mjg3OCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MTg6MjkuODE3OTU2MjcxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTU0MjU1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaWxlbWFwX2VuZF9kcm9wYmVoaW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9maWxlbWFwLmM9MTYwNz1FWFBPUlRfU1lNQk9MKGZvbGlvX3dhaXRfcHJpdmF0ZV8yX2tpbGxhYmxlKTtcXG5tbS9maWxlbWFwLmMtMTYwOC1cXG5tbS9maWxlbWFwLmM6MTYwOTpzdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vZmlsZW1hcC5jLTE2MTAte1xcbi0tXFxubW0vZmlsZW1hcC5jPTE2Mjg9dm9pZCBmb2xpb19lbmRfZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZmlsZW1hcC5jLTE2NDAtXFx0aWYgKGluX3Rhc2soKSBcXHUwMDI2XFx1MDAyNiBmb2xpb190cnlsb2NrKGZvbGlvKSkge1xcbm1tL2ZpbGVtYXAuYzoxNjQxOlxcdFxcdGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoZm9saW8pO1xcbm1tL2ZpbGVtYXAuYy0xNjQyLVxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuLS1cXG5tbS9maWxlbWFwLmM9Mjc1NT1zdGF0aWMgaW5saW5lIGJvb2wgcG9zX3NhbWVfZm9saW8obG9mZl90IHBvczEsIGxvZmZfdCBwb3MyLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZmlsZW1hcC5jLTI3NjEtXFxubW0vZmlsZW1hcC5jOjI3NjI6c3RhdGljIHZvaWQgZmlsZW1hcF9lbmRfZHJvcGJlaGluZF9yZWFkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vZmlsZW1hcC5jLTI3NjMte1xcbi0tXFxubW0vZmlsZW1hcC5jLTI3NjgtXFx0aWYgKGZvbGlvX3RyeWxvY2soZm9saW8pKSB7XFxubW0vZmlsZW1hcC5jOjI3Njk6XFx0XFx0ZmlsZW1hcF9lbmRfZHJvcGJlaGluZChmb2xpbyk7XFxubW0vZmlsZW1hcC5jLTI3NzAtXFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4tLVxcbm1tL2ZpbGVtYXAuYz0yNzg3PXNzaXplX3QgZmlsZW1hcF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxubW0vZmlsZW1hcC5jLTI4ODktXFxubW0vZmlsZW1hcC5jOjI4OTA6XFx0XFx0XFx0ZmlsZW1hcF9lbmRfZHJvcGJlaGluZF9yZWFkKGZvbGlvKTtcXG5tbS9maWxlbWFwLmMtMjg5MS1cXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzoxODoyOS44Njc1MDM2NjFaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjI4ODk4MjUxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHVuZGVyc3RhbmRpbmcgYGZvbGlvX3VubWFwX2ludmFsaWRhdGVgIGluIGBtbS9maWxlbWFwLmNgOlxuXG4qKkRpc3NlY3RpbmcgYGZvbGlvX3VubWFwX2ludmFsaWRhdGVgKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYGZvbGlvX3VubWFwX2ludmFsaWRhdGVgIGluIGBtbS9maWxlbWFwLmNgLiBJbW1lZGlhdGVseSwgSSBrbm93IHRoaXMgaXMgZ29pbmcgdG8gYmUgYWJvdXQgaW52YWxpZGF0aW5nIG1hcHBpbmdzIGZvciBhIGZvbGlvLCBwcmVzdW1hYmx5IHdoZW4gaXQncyBiZWluZyB1bm1hcHBlZCBvciBldmljdGVkLiBUaGUgbmFtaW5nIGNvbnZlbnRpb24gc3Ryb25nbHkgc3VnZ2VzdHMgaXQncyByZWxhdGVkIHRvIHRoZSBwYWdlIGNhY2hlIGFuZCBob3cgdmlydHVhbCBtZW1vcnkgaW50ZXJhY3RzIHdpdGggZmlsZSBkYXRhIG9uIGRpc2suXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlLiBJcyBpdCBzaW1wbHkgbWFya2luZyBtYXBwaW5ncyBhcyBpbnZhbGlkPyBJcyBpdCBmcmVlaW5nIHBhZ2UgdGFibGUgZW50cmllcz8gRG9lcyBpdCBpbnRlcmFjdCB3aXRoIHRoZSBwYWdlIGNhY2hlIGRpcmVjdGx5PyBJcyB0aGlzIHBhcnQgb2YgdGhlIHByb2Nlc3Mgb2YgcmVtb3ZpbmcgYSBmaWxlIGZyb20gdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBvZiBhIHByb2Nlc3M/IEkgbmVlZCB0byBsb29rIGF0IHdoYXQgaXQgdGFrZXMgYXMgaW5wdXQg4oCTIGEgZm9saW8sIG9mIGNvdXJzZSDigJMgYW5kIHdoYXQgaXQgZG9lcyBpbnRlcm5hbGx5LiBEb2VzIGl0IGl0ZXJhdGUgdGhyb3VnaCBwYWdlIHRhYmxlIGVudHJpZXM/IERvZXMgaXQgdXNlIGFueSBsb2NraW5nIHRvIGNvb3JkaW5hdGUgd2l0aCBvdGhlciBjb25jdXJyZW50IG9wZXJhdGlvbnM/IFRoZSBkZXRhaWxzIG1hdHRlciwgYXMgYWx3YXlzLlxuXG5TaW5jZSB0aGlzIGlzIHRoZSBmaWxlbWFwIGNvZGUsIHRoZXJlIGhhcyB0byBiZSBzb21lIGtpbmQgb2YgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYWRkcmVzcyBzcGFjZSBhbmQgaG93IHRoZSBmaWxlIGRhdGEgaXMgcmVwcmVzZW50ZWQgaW4gbWVtb3J5LiBJIGV4cGVjdCB0aGlzIHRvIGJlIGEgY3J1Y2lhbCBzdGVwIGluIGVuc3VyaW5nIGRhdGEgY29uc2lzdGVuY3kgYW5kIHByZXZlbnRpbmcgc3RhbGUgbWFwcGluZ3MgZnJvbSBiZWluZyBhY2Nlc3NlZC4gSSBuZWVkIHRvIHNlZSB3aGF0IG90aGVyIGZ1bmN0aW9ucyBjYWxsIGl0IGFuZCB3aGF0IGZ1bmN0aW9ucyBpdCBjYWxscyBpdHNlbGYgZm9yIGNvbnRleHQuIFRoaXMgZnVuY3Rpb24gaGFzIHRvIGJlIGEgY3JpdGljYWwgbGluayBiZXR3ZWVuIHRoZSBWRlMgbGF5ZXIgYW5kIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb21wb25lbnRzLiBJJ2xsIGFuYWx5emUgaXQgY2FyZWZ1bGx5IHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IHN5bmNocm9uaXphdGlvbiB0aGF0J3MgYmVpbmcgcGVyZm9ybWVkLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGZ1bmN0aW9uIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1NTYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzoxODozNi4xNTY0ODkxMzVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNzgwNTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX3VubWFwX2ludmFsaWRhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ZpbGVtYXAuYz0xNjA5PXN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2ZpbGVtYXAuYy0xNjE5LVxcdGlmIChtYXBwaW5nIFxcdTAwMjZcXHUwMDI2ICFmb2xpb19tYXBwZWQoZm9saW8pKVxcbm1tL2ZpbGVtYXAuYzoxNjIwOlxcdFxcdGZvbGlvX3VubWFwX2ludmFsaWRhdGUobWFwcGluZywgZm9saW8sIDApO1xcbm1tL2ZpbGVtYXAuYy0xNjIxLX1cXG4tLVxcbm1tL2ludGVybmFsLmg9NTk3PWludCB6YXBfdm1hX2Zvcl9yZWFwaW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcXG5tbS9pbnRlcm5hbC5oOjU5ODppbnQgZm9saW9fdW5tYXBfaW52YWxpZGF0ZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG5tbS9pbnRlcm5hbC5oLTU5OS1cXHRcXHRcXHQgICBnZnBfdCBnZnApO1xcbi0tXFxubW0vdHJ1bmNhdGUuYz02MDY9c3RhdGljIGludCBmb2xpb19sYXVuZGVyKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vdHJ1bmNhdGUuYy02MjEtICovXFxubW0vdHJ1bmNhdGUuYzo2MjI6aW50IGZvbGlvX3VubWFwX2ludmFsaWRhdGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vdHJ1bmNhdGUuYy02MjMtXFx0XFx0XFx0ICAgZ2ZwX3QgZ2ZwKVxcbi0tXFxubW0vdHJ1bmNhdGUuYz02NzY9aW50IGludmFsaWRhdGVfaW5vZGVfcGFnZXMyX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxubW0vdHJ1bmNhdGUuYy03MjUtXFx0XFx0XFx0Zm9saW9fd2FpdF93cml0ZWJhY2soZm9saW8pO1xcbm1tL3RydW5jYXRlLmM6NzI2OlxcdFxcdFxcdHJldDIgPSBmb2xpb191bm1hcF9pbnZhbGlkYXRlKG1hcHBpbmcsIGZvbGlvLCBHRlBfS0VSTkVMKTtcXG5tbS90cnVuY2F0ZS5jLTcyNy1cXHRcXHRcXHRpZiAocmV0MiBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEzOjE4OjM2LjIwODI3NjE3NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDgyNzA3MDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBmb2xpb191bm1hcF9pbnZhbGlkYXRlYCBpbiBgbW0vdHJ1bmNhdGUuY2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXNzZWN0IGBmb2xpb191bm1hcF9pbnZhbGlkYXRlYC4gSSdtIGhlYWRpbmcgc3RyYWlnaHQgaW50byBgbW0vdHJ1bmNhdGUuY2AgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgcGljdHVyZS4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgaG93IGl0IHJlbGF0ZXMgdG8gcGFnZSBpbnZhbGlkYXRpb24gZHVyaW5nIGEgdHJ1bmNhdGlvbiBvcGVyYXRpb24uIFdlJ3JlIGNsZWFybHkgZGVhbGluZyB3aXRoIHRoZSB1bm1hcHBpbmcgb2YgZm9saW9zLCBhbmQgdGhlIFwiaW52YWxpZGF0ZVwiIGJpdCBtYWtlcyBtZSB0aGluayB3ZSBhcmUgZ29pbmcgdG8gYmUgZW5zdXJpbmcgY2FjaGUgY29oZXJlbmNlLiBJIHdhbnQgdG8gc2VlIGlmIHdlIGFyZSBkZWFsaW5nIHdpdGggYSBzaW1wbGUgdW5tYXAgYW5kIHJlbGVhc2Ugb3IgaWYgdGhlcmUgaXMgc29tZXRoaW5nIG1vcmUgc29waGlzdGljYXRlZCBoYXBwZW5pbmcsIGxpa2UgcG90ZW50aWFsbHkgZmx1c2hpbmcgZGlydHkgZGF0YSBvciBzaWduYWxpbmcgZXh0ZXJuYWwgZGV2aWNlcyBhYm91dCB0aGUgdW5tYXBwaW5nLiBJIHN1c3BlY3QgdGhlIGdvYWwgaXMgdG8gbWFrZSBzdXJlIGRhdGEgaXNuJ3QgbGVmdCBhcm91bmQgdGhhdCB3b3VsZCBjYXVzZSBjb25mdXNpb24gb3IgaW5jb25zaXN0ZW5jaWVzIGZvciBvdGhlciBwcm9jZXNzZXMgb3IgZGV2aWNlcy4gR290dGEgc2VlIGlmIHRoaXMgaGFuZGxlcyBhbnkgZWRnZSBjYXNlcywgbGlrZSBzaGFyZWQgbWFwcGluZ3Mgb3IgcGFydGlhbGx5IHBvcHVsYXRlZCBmb2xpb3MgZHVyaW5nIHRydW5jYXRpb24uIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzQwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MTg6MzguMjkwOTg1MzI2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3RydW5jYXRlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjE1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjE1OlxcdC8qXFxuIDYxNjpcXHQgKiBUaGlzIGlzIGxpa2UgbWFwcGluZ19ldmljdF9mb2xpbygpLCBleGNlcHQgaXQgaWdub3JlcyB0aGUgZm9saW8nc1xcbiA2MTc6XFx0ICogcmVmY291bnQuICBXZSBkbyB0aGlzIGJlY2F1c2UgaW52YWxpZGF0ZV9pbm9kZV9wYWdlczIoKSBuZWVkcyBzdHJvbmdlclxcbiA2MTg6XFx0ICogaW52YWxpZGF0aW9uIGd1YXJhbnRlZXMsIGFuZCBjYW5ub3QgYWZmb3JkIHRvIGxlYXZlIGZvbGlvcyBiZWhpbmQgYmVjYXVzZVxcbiA2MTk6XFx0ICogc2hyaW5rX2ZvbGlvX2xpc3QoKSBoYXMgYSB0ZW1wIHJlZiBvbiB0aGVtLCBvciBiZWNhdXNlIHRoZXkncmUgdHJhbnNpZW50bHlcXG4gNjIwOlxcdCAqIHNpdHRpbmcgaW4gdGhlIGZvbGlvX2FkZF9scnUoKSBjYWNoZXMuXFxuIDYyMTpcXHQgKi9cXG4gNjIyOlxcdGludCBmb2xpb191bm1hcF9pbnZhbGlkYXRlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiA2MjM6XFx0XFx0XFx0XFx0ICAgZ2ZwX3QgZ2ZwKVxcbiA2MjQ6XFx0e1xcbiA2MjU6XFx0XFx0dm9pZCAoKmZyZWVfZm9saW8pKHN0cnVjdCBmb2xpbyAqKTtcXG4gNjI2OlxcdFxcdGludCByZXQ7XFxuIDYyNzpcXHRcXG4gNjI4OlxcdFxcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7XFxuIDYyOTpcXHRcXG4gNjMwOlxcdFxcdGlmIChmb2xpb19tYXBwZWQoZm9saW8pKVxcbiA2MzE6XFx0XFx0XFx0dW5tYXBfbWFwcGluZ19mb2xpbyhmb2xpbyk7XFxuIDYzMjpcXHRcXHRCVUdfT04oZm9saW9fbWFwcGVkKGZvbGlvKSk7XFxuIDYzMzpcXHRcXG4gNjM0OlxcdFxcdHJldCA9IGZvbGlvX2xhdW5kZXIobWFwcGluZywgZm9saW8pO1xcbiA2MzU6XFx0XFx0aWYgKHJldClcXG4gNjM2OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDYzNzpcXHRcXHRpZiAoZm9saW8tXFx1MDAzZW1hcHBpbmcgIT0gbWFwcGluZylcXG4gNjM4OlxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIDYzOTpcXHRcXHRpZiAoIWZpbGVtYXBfcmVsZWFzZV9mb2xpbyhmb2xpbywgZ2ZwKSlcXG4gNjQwOlxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIDY0MTpcXHRcXG4gNjQyOlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2bWFwcGluZy1cXHUwMDNlaG9zdC1cXHUwMDNlaV9sb2NrKTtcXG4gNjQzOlxcdFxcdHhhX2xvY2tfaXJxKFxcdTAwMjZtYXBwaW5nLVxcdTAwM2VpX3BhZ2VzKTtcXG4gNjQ0OlxcdFxcdGlmIChmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSlcXG4gNjQ1OlxcdFxcdFxcdGdvdG8gZmFpbGVkO1xcbiA2NDY6XFx0XFxuIDY0NzpcXHRcXHRCVUdfT04oZm9saW9faGFzX3ByaXZhdGUoZm9saW8pKTtcXG4gNjQ4OlxcdFxcdF9fZmlsZW1hcF9yZW1vdmVfZm9saW8oZm9saW8sIE5VTEwpO1xcbiA2NDk6XFx0XFx0eGFfdW5sb2NrX2lycShcXHUwMDI2bWFwcGluZy1cXHUwMDNlaV9wYWdlcyk7XFxuIDY1MDpcXHRcXHRpZiAobWFwcGluZ19zaHJpbmthYmxlKG1hcHBpbmcpKVxcbiA2NTE6XFx0XFx0XFx0aW5vZGVfbHJ1X2xpc3RfYWRkKG1hcHBpbmctXFx1MDAzZWhvc3QpO1xcbiA2NTI6XFx0XFx0ZnJlZV9mb2xpbyA9IG1hcHBpbmctXFx1MDAzZWFfb3BzLVxcdTAwM2VmcmVlX2ZvbGlvO1xcbiA2NTM6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNm1hcHBpbmctXFx1MDAzZWhvc3QtXFx1MDAzZWlfbG9jayk7XFxuIDY1NDpcXHRcXG4gNjU1OlxcdFxcdGlmIChmcmVlX2ZvbGlvKVxcbiA2NTY6XFx0XFx0XFx0ZnJlZV9mb2xpbyhmb2xpbyk7XFxuIDY1NzpcXHRcXHRmb2xpb19wdXRfcmVmcyhmb2xpbywgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcXG4gNjU4OlxcdFxcdHJldHVybiAxO1xcbiA2NTk6XFx0ZmFpbGVkOlxcbiA2NjA6XFx0XFx0eGFfdW5sb2NrX2lycShcXHUwMDI2bWFwcGluZy1cXHUwMDNlaV9wYWdlcyk7XFxuIDY2MTpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2bWFwcGluZy1cXHUwMDNlaG9zdC1cXHUwMDNlaV9sb2NrKTtcXG4gNjYyOlxcdFxcdHJldHVybiAtRUJVU1k7XFxuIDY2MzpcXHR9XFxuIDY2NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTM6MTg6MzguMjkxMDY2MTE2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwOTI1NzQxNzcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IERyb3BiZWhpbmQgT3B0aW1pemF0aW9uIFx1MDAyNiBLTVNBTiBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHdoeSB0aGlzIGNoYW5nZSB3YXMgbWFkZSBpbiBgbW0vZmlsZW1hcC5jYC4gU3BlY2lmaWNhbGx5LCB0aGUgYWRkaXRpb24gb2YgYCFmb2xpb19tYXBwZWQoZm9saW8pYCB3aXRoaW4gdGhlIGBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kYCBmdW5jdGlvbi4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIHVuY29uZGl0aW9uYWxseSBjYWxsaW5nIGBmb2xpb191bm1hcF9pbnZhbGlkYXRlYCwgd2hpY2gsIEkga25vdywgY2FuIGJlIGV4cGVuc2l2ZS4gTm93LCBpdCBzZWVtcyB3ZSdyZSBza2lwcGluZyB0aGF0IHVubWFwcGluZyBhbmQgaW52YWxpZGF0aW9uIHN0ZXAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLlxuXG5NeSBpbW1lZGlhdGUgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGBmb2xpb191bm1hcF9pbnZhbGlkYXRlYCBjYW4gcG90ZW50aWFsbHkgdHJpZ2dlciBhbGxvY2F0aW9ucyBvciBsb2NrIGNvbnRlbnRpb24sIHBhcnRpY3VsYXJseSB3aXRoIGEgYGdmcCA9PSAwYCBjb250ZXh0IG9yIHdoZW4gZGVhbGluZyB3aXRoIGBSV0ZfRE9OVENBQ0hFYC4gV2Ugd2FudCB0byBhdm9pZCBldmljdGlvbi91bm1hcHBpbmcgZm9saW9zIHRoYXQgYXJlIGFjdGl2ZWx5IGluIHVzZSBieSBhIHVzZXJzcGFjZSBwcm9jZXNzLiBUaGUgY29kZSBpdHNlbGYsIHdpdGhpbiBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZWAsIGhhcyBhIGRvdWJsZS1jaGVjayBvbiBgZm9saW9fbWFwcGVkYCB3aGljaCByZWluZm9yY2VzIHRoaXMgaWRlYS4gSXQncyBlc3NlbnRpYWxseSBhIG5vLW9wIGlmIHRoZSBmb2xpbyBpc24ndCBtYXBwZWQgYWxyZWFkeS4gU28gdGhlIGFkZGVkIGNoZWNrIHNlZW1zIGxpa2UgYW4gb3B0aW1pemF0aW9uLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gZm9yIG1lIGlzIHdoZXRoZXIgdGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBvciBpbnRlcmFjdHMgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0J3MgcnVuIHRocm91Z2ggdGhlIEtNU0FOIGNyaXRlcmlhLlxuXG4xLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIGZpZWxkcyBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkOiBOb3BlLCB0aGlzIGlzbid0IHNlbmRpbmcgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UuXG4yLiAgQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzOiBOb3BlLiBUaGUgYGZvbGlvX21hcHBlZChmb2xpbylgIGNhbGwgaXMgYWNjZXNzaW5nIGF0b21pYyBwYWdlIG1hcGNvdW50IGZpZWxkcyBvbiBhIHZhbGlkIGxvY2tlZCBmb2xpby5cbjMuICBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHM6IE5vLCBub3QgYXQgYWxsLCB0aGlzIGZ1bmN0aW9uIGRlYWxzIHNvbGVseSB3aXRoIHRoZSBjYWNoZSBkcm9wL2ludmFsaWRhdGlvbi5cbjQuICBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnM6IE5vcGUsIHRoaXMgaXNuJ3QgdG91Y2hpbmcgZXhpc3RpbmcgYnVmZmVycyBpbiBhIHdheSB0aGF0IGludHJvZHVjZXMgdGhpcyB0eXBlIG9mIHZ1bG5lcmFiaWxpdHkuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBzaG91bGQgYmUgY2xlYW4gZnJvbSBhIEtNU0FOIHN0YW5kcG9pbnQuIEl0J3MgYSBtZW1vcnkgbWFuYWdlbWVudCBvcHRpbWl6YXRpb24sIHNwZWNpZmljYWxseSBhcm91bmQgY2FjaGUgYmVoYXZpb3IsIGFuZCBpdCBkb2Vzbid0IGFwcGVhciB0byByZWFkIG9yIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cbkFscmlnaHQsIGxldCdzIGp1c3QgZG91YmxlLWNoZWNrIGV2ZXJ5dGhpbmcsIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIHN1YnRsZSwgYW5kIHRoZW4gSSdsbCBmb3JtdWxhdGUgdGhlIGBzZXQtcmVzdWx0c2AgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTM4NywiT3V0cHV0VG9rZW5zIjoxNTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMzoxODo0OS4yMTY4MTE1MjhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayBgIWZvbGlvX21hcHBlZChmb2xpbylgIGJlZm9yZSBpbnZva2luZyBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZSgpYCBpbiBgZmlsZW1hcF9lbmRfZHJvcGJlaGluZCgpYC4gVGhpcyBtb2RpZmllcyBwYWdlIGNhY2hlIGRyb3AtYmVoaW5kIGxvZ2ljIHRvIHNraXAgaW52YWxpZGF0aW5nIGZvbGlvcyB0aGF0IGFyZSBjdXJyZW50bHkgbWFwcGVkIGludG8gdXNlciBwYWdlIHRhYmxlcy4gSXQgb3BlcmF0ZXMgZW50aXJlbHkgb24gZXhpc3RpbmcsIHZhbGlkIHN0cnVjdCBmb2xpbyBmbGFncyBhbmQgbWFwcGluZyByZWZlcmVuY2VzLiBUaGVyZSBhcmUgbm8gYWxsb2NhdGlvbnMsIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwYWRkaW5nIGxlYWtzLCBvciB1c2VyLXNwYWNlIGNvcGllcyBpbnZvbHZlZC4gU3RhbmRhcmQgS0FTQU4va2VybmVsIGRlYnVnZ2VycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIChzdWNoIGFzIHJlZmNvdW50aW5nLCBsb2NraW5nLCBvciBVQUYgYnVncykuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayBgIWZvbGlvX21hcHBlZChmb2xpbylgIGJlZm9yZSBpbnZva2luZyBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZSgpYCBpbiBgZmlsZW1hcF9lbmRfZHJvcGJlaGluZCgpYC4gVGhpcyBtb2RpZmllcyBwYWdlIGNhY2hlIGRyb3AtYmVoaW5kIGxvZ2ljIHRvIHNraXAgaW52YWxpZGF0aW5nIGZvbGlvcyB0aGF0IGFyZSBjdXJyZW50bHkgbWFwcGVkIGludG8gdXNlciBwYWdlIHRhYmxlcy4gSXQgb3BlcmF0ZXMgZW50aXJlbHkgb24gZXhpc3RpbmcsIHZhbGlkIHN0cnVjdCBmb2xpbyBmbGFncyBhbmQgbWFwcGluZyByZWZlcmVuY2VzLiBUaGVyZSBhcmUgbm8gYWxsb2NhdGlvbnMsIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBwYWRkaW5nIGxlYWtzLCBvciB1c2VyLXNwYWNlIGNvcGllcyBpbnZvbHZlZC4gU3RhbmRhcmQgS0FTQU4va2VybmVsIGRlYnVnZ2VycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIChzdWNoIGFzIHJlZmNvdW50aW5nLCBsb2NraW5nLCBvciBVQUYgYnVncykuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow8mkk7[1] Phase: Succeeded StartedAt: 2026-08-29 13:19:16 +0000 UTC FinishedAt: 2026-08-29 13:19:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8mkk7[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-29 13:19:16 +0000 UTC FinishedAt: 2026-08-29 13:19:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8mkk7[2] Phase: Succeeded StartedAt: 2026-08-29 13:19:16 +0000 UTC FinishedAt: 2026-08-29 17:00:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8mkk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"e83b5fdf-a11c-4ee8-8c53-467755b3e062","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-29 13:19:16 +0000 UTC FinishedAt: 2026-08-29 17:00:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"e83b5fdf-a11c-4ee8-8c53-467755b3e062","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow8mkk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"e83b5fdf-a11c-4ee8-8c53-467755b3e062","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-29 13:19:16 +0000 UTC FinishedAt: 2026-08-29 13:19:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8mkk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"e83b5fdf-a11c-4ee8-8c53-467755b3e062","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-29 13:19:16 +0000 UTC FinishedAt: 2026-08-29 13:19:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8mkk7/series-workflow8mkk7-convert-artifact-2577334325/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8mkk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"e83b5fdf-a11c-4ee8-8c53-467755b3e062","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-29 13:19:26 +0000 UTC FinishedAt: 2026-08-29 13:35:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8mkk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"e83b5fdf-a11c-4ee8-8c53-467755b3e062","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-29 13:19:26 +0000 UTC FinishedAt: 2026-08-29 13:35:22 +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:*3e407dcc-1946-4d91-b487-72f5a5418b0b,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-workflow8mkk7/series-workflow8mkk7-convert-artifact-2577334325/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": "7c4d0610-8623-4c2e-a895-7228ee426ba9", "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-workflow8mkk7/series-workflow8mkk7-build-action-4010589211/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8mkk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"e83b5fdf-a11c-4ee8-8c53-467755b3e062","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-29 13:19:26 +0000 UTC FinishedAt: 2026-08-29 13:35:12 +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:*3e407dcc-1946-4d91-b487-72f5a5418b0b,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-workflow8mkk7/series-workflow8mkk7-convert-artifact-2577334325/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": "7c4d0610-8623-4c2e-a895-7228ee426ba9", "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-workflow8mkk7/series-workflow8mkk7-build-action-4010589211/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8mkk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"e83b5fdf-a11c-4ee8-8c53-467755b3e062","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-29 13:35:22 +0000 UTC FinishedAt: 2026-08-29 13:35:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8mkk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"e83b5fdf-a11c-4ee8-8c53-467755b3e062","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-29 13:35:22 +0000 UTC FinishedAt: 2026-08-29 13:35:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8mkk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"e83b5fdf-a11c-4ee8-8c53-467755b3e062","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-29 13:35:22 +0000 UTC FinishedAt: 2026-08-29 13:35:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8mkk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"e83b5fdf-a11c-4ee8-8c53-467755b3e062","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-29 13:35:22 +0000 UTC FinishedAt: 2026-08-29 13:35:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"e83b5fdf-a11c-4ee8-8c53-467755b3e062","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8mkk7/series-workflow8mkk7-convert-artifact-1107453328/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8mkk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"e83b5fdf-a11c-4ee8-8c53-467755b3e062","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-29 13:35:32 +0000 UTC FinishedAt: 2026-08-29 13:37:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8mkk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"e83b5fdf-a11c-4ee8-8c53-467755b3e062","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-29 13:35:32 +0000 UTC FinishedAt: 2026-08-29 13:37:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7c4d0610-8623-4c2e-a895-7228ee426ba9,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-workflow8mkk7/series-workflow8mkk7-build-action-4010589211/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-workflow8mkk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"e83b5fdf-a11c-4ee8-8c53-467755b3e062","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-29 13:37:26 +0000 UTC FinishedAt: 2026-08-29 13:37:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8mkk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"e83b5fdf-a11c-4ee8-8c53-467755b3e062","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-29 13:37:26 +0000 UTC FinishedAt: 2026-08-29 13:37:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8mkk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"e83b5fdf-a11c-4ee8-8c53-467755b3e062","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-29 13:37:26 +0000 UTC FinishedAt: 2026-08-29 13:54:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8mkk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"e83b5fdf-a11c-4ee8-8c53-467755b3e062","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-29 13:37:26 +0000 UTC FinishedAt: 2026-08-29 13:54:51 +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:*3e407dcc-1946-4d91-b487-72f5a5418b0b,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-workflow8mkk7/series-workflow8mkk7-convert-artifact-1107453328/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": "35e5ec54-2791-426a-bedf-7ac1e875e71b", "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-workflow8mkk7/series-workflow8mkk7-build-action-1418224140/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8mkk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"e83b5fdf-a11c-4ee8-8c53-467755b3e062","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-29 13:37:26 +0000 UTC FinishedAt: 2026-08-29 13:54:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*3e407dcc-1946-4d91-b487-72f5a5418b0b,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-workflow8mkk7/series-workflow8mkk7-convert-artifact-1107453328/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": "35e5ec54-2791-426a-bedf-7ac1e875e71b", "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-workflow8mkk7/series-workflow8mkk7-build-action-1418224140/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8mkk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"e83b5fdf-a11c-4ee8-8c53-467755b3e062","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-29 13:54:51 +0000 UTC FinishedAt: 2026-08-29 13:54:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8mkk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"e83b5fdf-a11c-4ee8-8c53-467755b3e062","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-29 13:54:51 +0000 UTC FinishedAt: 2026-08-29 13:54:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8mkk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"e83b5fdf-a11c-4ee8-8c53-467755b3e062","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-29 13:54:51 +0000 UTC FinishedAt: 2026-08-29 13:56:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8mkk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"e83b5fdf-a11c-4ee8-8c53-467755b3e062","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-29 13:54:51 +0000 UTC FinishedAt: 2026-08-29 13:56:33 +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:*35e5ec54-2791-426a-bedf-7ac1e875e71b,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-workflow8mkk7/series-workflow8mkk7-build-action-1418224140/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-workflow8mkk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"e83b5fdf-a11c-4ee8-8c53-467755b3e062","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-29 13:56:43 +0000 UTC FinishedAt: 2026-08-29 17:00:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8mkk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"e83b5fdf-a11c-4ee8-8c53-467755b3e062","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-29 13:56:43 +0000 UTC FinishedAt: 2026-08-29 17:00:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*7c4d0610-8623-4c2e-a895-7228ee426ba9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*35e5ec54-2791-426a-bedf-7ac1e875e71b,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-workflow8mkk7/series-workflow8mkk7-build-action-4010589211/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-workflow8mkk7/series-workflow8mkk7-build-action-1418224140/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8mkk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"e83b5fdf-a11c-4ee8-8c53-467755b3e062","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-29 13:56:43 +0000 UTC FinishedAt: 2026-08-29 13:56:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8mkk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"e83b5fdf-a11c-4ee8-8c53-467755b3e062","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-29 13:56:43 +0000 UTC FinishedAt: 2026-08-29 13:56:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8mkk7/series-workflow8mkk7-convert-artifact-3219942793/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8mkk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"e83b5fdf-a11c-4ee8-8c53-467755b3e062","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-29 13:56:43 +0000 UTC FinishedAt: 2026-08-29 13:56:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8mkk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"e83b5fdf-a11c-4ee8-8c53-467755b3e062","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-29 13:56:43 +0000 UTC FinishedAt: 2026-08-29 13:56:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8mkk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"e83b5fdf-a11c-4ee8-8c53-467755b3e062","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-29 13:56:43 +0000 UTC FinishedAt: 2026-08-29 13:56:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8mkk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"e83b5fdf-a11c-4ee8-8c53-467755b3e062","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-29 13:56:53 +0000 UTC FinishedAt: 2026-08-29 17:00:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8mkk7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["folio_end_dropbehind","folio_unmap_invalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","series_id":"e83b5fdf-a11c-4ee8-8c53-467755b3e062","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-29 13:56:53 +0000 UTC FinishedAt: 2026-08-29 16:59:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7c4d0610-8623-4c2e-a895-7228ee426ba9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*35e5ec54-2791-426a-bedf-7ac1e875e71b,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-workflow8mkk7/series-workflow8mkk7-build-action-4010589211/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-workflow8mkk7/series-workflow8mkk7-build-action-1418224140/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-workflow8mkk7/series-workflow8mkk7-convert-artifact-3219942793/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,}