Name: series-workflowx7bjq Phase: Succeeded StartedAt: 2026-09-15 05:00:57 +0000 UTC FinishedAt: 2026-09-15 09:44:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7bjq[0] Phase: Succeeded StartedAt: 2026-09-15 05:00:57 +0000 UTC FinishedAt: 2026-09-15 05:52:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7bjq[0].run-triage Phase: Succeeded StartedAt: 2026-09-15 05:00:57 +0000 UTC FinishedAt: 2026-09-15 05:52:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "f5d607b8091438d8416d0e3ae02532a18539b48b", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "f5d607b8091438d8416d0e3ae02532a18539b48b", "config_name": "upstream-apparmor-kasan.config", "series_id": "83e8e15f-cb09-4259-863c-bf6e64bd997c" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "evict_inodes" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "f5d607b8091438d8416d0e3ae02532a18539b48b", "base_tree": "vfs" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA1OjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXZpY3RfaW5vZGVzJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGl0ZXJhdGlvbiBsb2dpYyBhbmQgbG9ja2luZyBpbiBgZXZpY3RfaW5vZGVzKClgIGluIGZzL2lub2RlLmMgdG8gYXZvaWQgcmVzdGFydGluZyB0aGUgaW5vZGUgbGlzdCB3YWxrIChgZ290byBhZ2FpbmApIHdoZW4gcmVzY2hlZHVsaW5nLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBzdGVtbWluZyBmcm9tIHRoaXMgY2hhbmdlIHdvdWxkIGJlIGNvbmN1cnJlbmN5IGlzc3VlcywgbGlzdCBjb3JydXB0aW9uLCBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIChpZiB0aGUgbGlzdCBvciBpbm9kZSBzdGF0ZSBjaGFuZ2VzIHdoaWxlIGBzYi1cdTAwM2VzX2lub2RlX2xpc3RfbG9ja2AgaXMgZHJvcHBlZCksIHdoaWNoIGFyZSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzIChzdWNoIGFzIENPTkZJR19ERUJVR19MSVNUKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHJlYWQgb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgZG9lcyBub3QgY29weSBhbnkgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBWRlMgaW5vZGUgZXZpY3Rpb24gdHJhdmVyc2FsIGluIGV2aWN0X2lub2RlcygpLiBXaGVuIHJlc2NoZWR1bGluZyBpcyByZXF1aXJlZCBkdXJpbmcgdW5tb3VudC9zdXBlcmJsb2NrIHNodXRkb3duLCBpdCBkcm9wcyBhbmQgcmUtYWNxdWlyZXMgc19pbm9kZV9saXN0X2xvY2sgbWlkLWl0ZXJhdGlvbiBpbnN0ZWFkIG9mIHJlc3RhcnRpbmcgdHJhdmVyc2FsIGZyb20gdGhlIGJlZ2lubmluZy4gVGhpcyBtb2RpZmljYXRpb24gaW4gbG9ja2luZyBhbmQgbGlzdCB0cmF2ZXJzYWwgd2l0aGluIGEgY29yZSBzdWJzeXN0ZW0gaXMgcmVhY2hhYmxlIGR1cmluZyB1bm1vdW50IG9wZXJhdGlvbnMgYW5kIGNvdWxkIGludHJvZHVjZSBjb25jdXJyZW5jeSBpc3N1ZXMgb3IgbGlzdCBjb3JydXB0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA1OjUwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNWEwZDk0NGM4MTYzMTdhYWIwNmRjODg0ZTI0ODFhMmZiMWY3NTk5OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDE1IDA1OjUwOjA4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2lub2RlLmMgYi9mcy9pbm9kZS5jXG5pbmRleCBiYTdkYTM5YmU0YTMxLi5hOWQzN2JlMzkwYTE3IDEwMDY0NFxuLS0tIGEvZnMvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaW5vZGUuY1xuQEAgLTg4MCw3ICYjNDM7ODgwLDYgQEAgdm9pZCBldmljdF9pbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4gXHRMSVNUX0hFQUQoZGlzcG9zZSk7XG4gXG4tYWdhaW46XG4gXHRzcGluX2xvY2soXHUwMDI2c2ItXHUwMDNlc19pbm9kZV9saXN0X2xvY2spO1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShpbm9kZSwgXHUwMDI2c2ItXHUwMDNlc19pbm9kZXMsIGlfc2JfbGlzdCkge1xuIFx0XHRpZiAoaWNvdW50X3JlYWRfb25jZShpbm9kZSkpXG5AQCAtODk5LDE5ICYjNDM7ODk4LDE5IEBAIHZvaWQgZXZpY3RfaW5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHRcdGlub2RlX3N0YXRlX3NldChpbm9kZSwgSV9GUkVFSU5HKTtcbiBcdFx0aW5vZGVfbHJ1X2xpc3RfZGVsKGlub2RlKTtcbiBcdFx0c3Bpbl91bmxvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbi1cdFx0bGlzdF9hZGQoXHUwMDI2aW5vZGUtXHUwMDNlaV9scnUsIFx1MDAyNmRpc3Bvc2UpO1xuIFxuIFx0XHQvKlxuLVx0XHQgKiBXZSBjYW4gaGF2ZSBhIHRvbiBvZiBpbm9kZXMgdG8gZXZpY3QgYXQgdW5tb3VudCB0aW1lIGdpdmVuXG4tXHRcdCAqIGVub3VnaCBtZW1vcnksIGNoZWNrIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIGdvIHRvIHNsZWVwIGZvciBhXG4tXHRcdCAqIGJpdCBzbyB3ZSBkb24mIzM5O3QgbGl2ZWxvY2suXG4mIzQzO1x0XHQgKiBLZWVwIHRoaXMgaW5vZGUgb3V0IG9mIGRpc3Bvc2Ugc28gaXQgc3RheXMgb24gc19pbm9kZXMgd2hpbGVcbiYjNDM7XHRcdCAqIHRoZSBsaXN0IGxvY2sgaXMgZHJvcHBlZC4gSV9GUkVFSU5HIHByZXZlbnRzIG5ldyByZWZlcmVuY2VzXG4mIzQzO1x0XHQgKiBhbmQgbGVhdmVzIGV2aWN0aW9uIHRvIHVzLCBzbyB3ZSBjYW4gcmVzdW1lIHRoZSB3YWxrIGZyb20gaXQuXG4gXHRcdCAqL1xuIFx0XHRpZiAobmVlZF9yZXNjaGVkKCkpIHtcbiBcdFx0XHRzcGluX3VubG9jayhcdTAwMjZzYi1cdTAwM2VzX2lub2RlX2xpc3RfbG9jayk7XG4gXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4gXHRcdFx0ZGlzcG9zZV9saXN0KFx1MDAyNmRpc3Bvc2UpO1xuLVx0XHRcdGdvdG8gYWdhaW47XG4mIzQzO1x0XHRcdHNwaW5fbG9jayhcdTAwMjZzYi1cdTAwM2VzX2lub2RlX2xpc3RfbG9jayk7XG4gXHRcdH1cbiYjNDM7XHRcdGxpc3RfYWRkKFx1MDAyNmlub2RlLVx1MDAzZWlfbHJ1LCBcdTAwMjZkaXNwb3NlKTtcbiBcdH1cbiBcdHNwaW5fdW5sb2NrKFx1MDAyNnNiLVx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrKTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNTo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V2aWN0X2lub2RlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBWRlMgaW5vZGUgZXZpY3Rpb24gdHJhdmVyc2FsIGluIGV2aWN0X2lub2RlcygpLiBXaGVuIHJlc2NoZWR1bGluZyBpcyByZXF1aXJlZCBkdXJpbmcgdW5tb3VudC9zdXBlcmJsb2NrIHNodXRkb3duLCBpdCBkcm9wcyBhbmQgcmUtYWNxdWlyZXMgc19pbm9kZV9saXN0X2xvY2sgbWlkLWl0ZXJhdGlvbiBpbnN0ZWFkIG9mIHJlc3RhcnRpbmcgdHJhdmVyc2FsIGZyb20gdGhlIGJlZ2lubmluZy4gVGhpcyBtb2RpZmljYXRpb24gaW4gbG9ja2luZyBhbmQgbGlzdCB0cmF2ZXJzYWwgd2l0aGluIGEgY29yZSBzdWJzeXN0ZW0gaXMgcmVhY2hhYmxlIGR1cmluZyB1bm1vdW50IG9wZXJhdGlvbnMgYW5kIGNvdWxkIGludHJvZHVjZSBjb25jdXJyZW5jeSBpc3N1ZXMgb3IgbGlzdCBjb3JydXB0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNWEwZDk0NGM4MTYzMTdhYWIwNmRjODg0ZTI0ODFhMmZiMWY3NTk5OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDE1IDA1OjUwOjA4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvaW5vZGUuYyBiL2ZzL2lub2RlLmMKaW5kZXggYmE3ZGEzOWJlNGEzMS4uYTlkMzdiZTM5MGExNyAxMDA2NDQKLS0tIGEvZnMvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9pbm9kZS5jCkBAIC04ODAsNyAmIzQzOzg4MCw2IEBAIHZvaWQgZXZpY3RfaW5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiAJc3RydWN0IGlub2RlICppbm9kZTsKIAlMSVNUX0hFQUQoZGlzcG9zZSk7CiAKLWFnYWluOgogCXNwaW5fbG9jaygmYW1wO3NiLSZndDtzX2lub2RlX2xpc3RfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShpbm9kZSwgJmFtcDtzYi0mZ3Q7c19pbm9kZXMsIGlfc2JfbGlzdCkgewogCQlpZiAoaWNvdW50X3JlYWRfb25jZShpbm9kZSkpCkBAIC04OTksMTkgJiM0Mzs4OTgsMTkgQEAgdm9pZCBldmljdF9pbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIAkJaW5vZGVfc3RhdGVfc2V0KGlub2RlLCBJX0ZSRUVJTkcpOwogCQlpbm9kZV9scnVfbGlzdF9kZWwoaW5vZGUpOwogCQlzcGluX3VubG9jaygmYW1wO2lub2RlLSZndDtpX2xvY2spOwotCQlsaXN0X2FkZCgmYW1wO2lub2RlLSZndDtpX2xydSwgJmFtcDtkaXNwb3NlKTsKIAogCQkvKgotCQkgKiBXZSBjYW4gaGF2ZSBhIHRvbiBvZiBpbm9kZXMgdG8gZXZpY3QgYXQgdW5tb3VudCB0aW1lIGdpdmVuCi0JCSAqIGVub3VnaCBtZW1vcnksIGNoZWNrIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIGdvIHRvIHNsZWVwIGZvciBhCi0JCSAqIGJpdCBzbyB3ZSBkb24mIzM5O3QgbGl2ZWxvY2suCiYjNDM7CQkgKiBLZWVwIHRoaXMgaW5vZGUgb3V0IG9mIGRpc3Bvc2Ugc28gaXQgc3RheXMgb24gc19pbm9kZXMgd2hpbGUKJiM0MzsJCSAqIHRoZSBsaXN0IGxvY2sgaXMgZHJvcHBlZC4gSV9GUkVFSU5HIHByZXZlbnRzIG5ldyByZWZlcmVuY2VzCiYjNDM7CQkgKiBhbmQgbGVhdmVzIGV2aWN0aW9uIHRvIHVzLCBzbyB3ZSBjYW4gcmVzdW1lIHRoZSB3YWxrIGZyb20gaXQuCiAJCSAqLwogCQlpZiAobmVlZF9yZXNjaGVkKCkpIHsKIAkJCXNwaW5fdW5sb2NrKCZhbXA7c2ItJmd0O3NfaW5vZGVfbGlzdF9sb2NrKTsKIAkJCWNvbmRfcmVzY2hlZCgpOwogCQkJZGlzcG9zZV9saXN0KCZhbXA7ZGlzcG9zZSk7Ci0JCQlnb3RvIGFnYWluOwomIzQzOwkJCXNwaW5fbG9jaygmYW1wO3NiLSZndDtzX2lub2RlX2xpc3RfbG9jayk7CiAJCX0KJiM0MzsJCWxpc3RfYWRkKCZhbXA7aW5vZGUtJmd0O2lfbHJ1LCAmYW1wO2Rpc3Bvc2UpOwogCX0KIAlzcGluX3VubG9jaygmYW1wO3NiLSZndDtzX2lub2RlX2xpc3RfbG9jayk7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE1OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgSW5vZGUgRXZpY3Rpb24gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyB0aGUgYGZzL2lub2RlLmNgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgYGV2aWN0X2lub2Rlc2AgZnVuY3Rpb24gd2l0aGluIHRoYXQgZmlsZSwgd2hpY2ggaXMgYSBrZXkgYXJlYSBmb3IgaW5vZGUgbWFuYWdlbWVudC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhhdCBmdW5jdGlvbiBhbmQgaXRzIHN1cnJvdW5kaW5nIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBjaGFuZ2VzLgoKSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBoYXBwZW5pbmcuIEkgc2hvdWxkIGNoZWNrIHRoZSBmaWxlIGNvbnRlbnQsIHNvLCBsZXQmIzM5O3MgdXNlIGByZWFkLWZpbGVgIGFuZCBwdWxsIHVwIGBmcy9pbm9kZS5jYCAtIEkmIzM5O2xsIHdhbnQgdG8gZm9jdXMgYXJvdW5kIGxpbmUgODgwLCBhcyB0aGF0JiMzOTtzIGxpa2VseSB0aGUgZm9jYWwgcG9pbnQgb2YgdGhlIHBhdGNoLiBJJiMzOTtsbCByZWFkIHRoZSByZWxldmFudCBzdXJyb3VuZGluZyBsaW5lcyB0byBnZXQgdGhlIG5lY2Vzc2FyeSBjb250ZXh0LiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBleGFjdGx5IGhvdyB0aGUgZXZpY3Rpb24gcHJvY2VzcyBpcyBiZWluZyBhbHRlcmVkIGFuZCB3aGF0IG5ldyBiZWhhdmlvciB0aGUgcGF0Y2ggaW50cm9kdWNlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIHBhdGNoIGlzIG9wdGltaXplZCBmb3IgcGVyZm9ybWFuY2Ugb3IgZml4ZXMgYSBidWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9pbm9kZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NzA6XHQgKiBldmljdF9pbm9kZXNcdC0gZXZpY3QgYWxsIGV2aWN0YWJsZSBpbm9kZXMgZm9yIGEgc3VwZXJibG9ja1xuIDg3MTpcdCAqIEBzYjpcdFx0c3VwZXJibG9jayB0byBvcGVyYXRlIG9uXG4gODcyOlx0ICpcbiA4NzM6XHQgKiBNYWtlIHN1cmUgdGhhdCBubyBpbm9kZXMgd2l0aCB6ZXJvIHJlZmNvdW50IGFyZSByZXRhaW5lZC4gIFRoaXMgaXNcbiA4NzQ6XHQgKiBjYWxsZWQgYnkgc3VwZXJibG9jayBzaHV0ZG93biBhZnRlciBoYXZpbmcgU0JfQUNUSVZFIGZsYWcgcmVtb3ZlZCxcbiA4NzU6XHQgKiBzbyBhbnkgaW5vZGUgcmVhY2hpbmcgemVybyByZWZjb3VudCBkdXJpbmcgb3IgYWZ0ZXIgdGhhdCBjYWxsIHdpbGxcbiA4NzY6XHQgKiBiZSBpbW1lZGlhdGVseSBldmljdGVkLlxuIDg3NzpcdCAqL1xuIDg3ODpcdHZvaWQgZXZpY3RfaW5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gODc5Olx0e1xuIDg4MDpcdFx0c3RydWN0IGlub2RlICppbm9kZTtcbiA4ODE6XHRcdExJU1RfSEVBRChkaXNwb3NlKTtcbiA4ODI6XHRcbiA4ODM6XHRcdHNwaW5fbG9jayhcdTAwMjZzYi1cdTAwM2VzX2lub2RlX2xpc3RfbG9jayk7XG4gODg0Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGlub2RlLCBcdTAwMjZzYi1cdTAwM2VzX2lub2RlcywgaV9zYl9saXN0KSB7XG4gODg1Olx0XHRcdGlmIChpY291bnRfcmVhZF9vbmNlKGlub2RlKSlcbiA4ODY6XHRcdFx0XHRjb250aW51ZTtcbiA4ODc6XHRcbiA4ODg6XHRcdFx0c3Bpbl9sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4gODg5Olx0XHRcdGlmIChpY291bnRfcmVhZChpbm9kZSkpIHtcbiA4OTA6XHRcdFx0XHRzcGluX3VubG9jayhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spO1xuIDg5MTpcdFx0XHRcdGNvbnRpbnVlO1xuIDg5MjpcdFx0XHR9XG4gODkzOlx0XHRcdGlmIChpbm9kZV9zdGF0ZV9yZWFkKGlub2RlKSBcdTAwMjYgKElfTkVXIHwgSV9GUkVFSU5HIHwgSV9XSUxMX0ZSRUUpKSB7XG4gODk0Olx0XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbiA4OTU6XHRcdFx0XHRjb250aW51ZTtcbiA4OTY6XHRcdFx0fVxuIDg5NzpcdFxuIDg5ODpcdFx0XHRpbm9kZV9zdGF0ZV9zZXQoaW5vZGUsIElfRlJFRUlORyk7XG4gODk5Olx0XHRcdGlub2RlX2xydV9saXN0X2RlbChpbm9kZSk7XG4gOTAwOlx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4gOTAxOlx0XG4gOTAyOlx0XHRcdC8qXG4gOTAzOlx0XHRcdCAqIEtlZXAgdGhpcyBpbm9kZSBvdXQgb2YgZGlzcG9zZSBzbyBpdCBzdGF5cyBvbiBzX2lub2RlcyB3aGlsZVxuIDkwNDpcdFx0XHQgKiB0aGUgbGlzdCBsb2NrIGlzIGRyb3BwZWQuIElfRlJFRUlORyBwcmV2ZW50cyBuZXcgcmVmZXJlbmNlc1xuIDkwNTpcdFx0XHQgKiBhbmQgbGVhdmVzIGV2aWN0aW9uIHRvIHVzLCBzbyB3ZSBjYW4gcmVzdW1lIHRoZSB3YWxrIGZyb20gaXQuXG4gOTA2Olx0XHRcdCAqL1xuIDkwNzpcdFx0XHRpZiAobmVlZF9yZXNjaGVkKCkpIHtcbiA5MDg6XHRcdFx0XHRzcGluX3VubG9jayhcdTAwMjZzYi1cdTAwM2VzX2lub2RlX2xpc3RfbG9jayk7XG4gOTA5Olx0XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4gOTEwOlx0XHRcdFx0ZGlzcG9zZV9saXN0KFx1MDAyNmRpc3Bvc2UpO1xuIDkxMTpcdFx0XHRcdHNwaW5fbG9jayhcdTAwMjZzYi1cdTAwM2VzX2lub2RlX2xpc3RfbG9jayk7XG4gOTEyOlx0XHRcdH1cbiA5MTM6XHRcdFx0bGlzdF9hZGQoXHUwMDI2aW5vZGUtXHUwMDNlaV9scnUsIFx1MDAyNmRpc3Bvc2UpO1xuIDkxNDpcdFx0fVxuIDkxNTpcdFx0c3Bpbl91bmxvY2soXHUwMDI2c2ItXHUwMDNlc19pbm9kZV9saXN0X2xvY2spO1xuIDkxNjpcdFxuIDkxNzpcdFx0ZGlzcG9zZV9saXN0KFx1MDAyNmRpc3Bvc2UpO1xuIDkxODpcdH1cbiA5MTk6XHRFWFBPUlRfU1lNQk9MX0dQTChldmljdF9pbm9kZXMpO1xuIDkyMDpcdFxuIDkyMTpcdC8qXG4gOTIyOlx0ICogSXNvbGF0ZSB0aGUgaW5vZGUgZnJvbSB0aGUgTFJVIGluIHByZXBhcmF0aW9uIGZvciBmcmVlaW5nIGl0LlxuIDkyMzpcdCAqXG4gOTI0Olx0ICogSWYgdGhlIGlub2RlIGhhcyB0aGUgSV9SRUZFUkVOQ0VEIGZsYWcgc2V0LCB0aGVuIGl0IG1lYW5zIHRoYXQgaXQgaGFzIGJlZW5cbiA5MjU6XHQgKiB1c2VkIHJlY2VudGx5IC0gdGhlIGZsYWcgaXMgc2V0IGluIGlwdXRfZmluYWwoKS4gV2hlbiB3ZSBlbmNvdW50ZXIgc3VjaCBhblxuIDkyNjpcdCAqIGlub2RlLCBjbGVhciB0aGUgZmxhZyBhbmQgbW92ZSBpdCB0byB0aGUgYmFjayBvZiB0aGUgTFJVIHNvIGl0IGdldHMgYW5vdGhlclxuIDkyNzpcdCAqIHBhc3MgdGhyb3VnaCB0aGUgTFJVIGJlZm9yZSBpdCBnZXRzIHJlY2xhaW1lZC4gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBvZlxuIDkyODpcdCAqIHRoZSBmYWN0IHdlIGFyZSBkb2luZyBsYXp5IExSVSB1cGRhdGVzIHRvIG1pbmltaXNlIGxvY2sgY29udGVudGlvbiBzbyB0aGVcbiA5Mjk6XHQgKiBMUlUgZG9lcyBub3QgaGF2ZSBzdHJpY3Qgb3JkZXJpbmcuIEhlbmNlIHdlIGRvbiYjMzk7dCB3YW50IHRvIHJlY2xhaW0gaW5vZGVzXG4gOTMwOlx0ICogd2l0aCB0aGlzIGZsYWcgc2V0IGJlY2F1c2UgdGhleSBhcmUgdGhlIGlub2RlcyB0aGF0IGFyZSBvdXQgb2Ygb3JkZXIuXG4gOTMxOlx0ICovXG4gOTMyOlx0c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBpbm9kZV9scnVfaXNvbGF0ZShzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLFxuIDkzMzpcdFx0XHRzdHJ1Y3QgbGlzdF9scnVfb25lICpscnUsIHZvaWQgKmFyZylcbiA5MzQ6XHR7XG4gOTM1Olx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpmcmVlYWJsZSA9IGFyZztcbiA5MzY6XHRcdHN0cnVjdCBpbm9kZVx0Kmlub2RlID0gY29udGFpbmVyX29mKGl0ZW0sIHN0cnVjdCBpbm9kZSwgaV9scnUpO1xuIDkzNzpcdFxuIDkzODpcdFx0LypcbiA5Mzk6XHRcdCAqIFdlIGFyZSBpbnZlcnRpbmcgdGhlIGxydSBsb2NrL2lub2RlLVx1MDAzZWlfbG9jayBoZXJlLCBzbyB1c2UgYVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA1OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1ODUKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoaXMgQ29kZSBTbmlwcGV0KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtXaGF0IGluIHRoZSB3b3JsZCBpcyB0aGlzIGNvZGUgZG9pbmc/JiMzNDsgSW1tZWRpYXRlbHksIEkgc2VlIGEgc3BpbmxvY2sgcHJvdGVjdGluZyBhIGxpc3QgaXRlcmF0aW9uOiBgc3Bpbl9sb2NrKCZhbXA7c2ItJmd0O3NfaW5vZGVfbGlzdF9sb2NrKWAgYW5kIHRoZSBmYW1pbGlhciBgbGlzdF9mb3JfZWFjaF9lbnRyeWAgbWFjcm8uIEkga25vdyB0aGF0IHVzdWFsbHkgbWVhbnMgd2UmIzM5O3JlIHRyYXZlcnNpbmcgaW5vZGVzIGFzc29jaWF0ZWQgd2l0aCBhIHN1cGVyYmxvY2suIEJ1dCBob2xkIG9uLCB0aGUgaXRlcmF0aW9uIGlzIGludGVycnVwdGVkIGJ5IGBuZWVkX3Jlc2NoZWQoKWAuIFRoZW4gdGhlcmUmIzM5O3MgYW4gYHVubG9ja2AhCgpNeSBleHBlcnQgaW5zdGluY3Qga2lja3MgaW4gYW5kIHNheXMsICYjMzQ7V2FpdCBhIG1pbnV0ZSwgd2hhdCBoYXBwZW5zIGR1cmluZyB0aGUgdW5sb2NrPyYjMzQ7IGBsaXN0X2Zvcl9lYWNoX2VudHJ5YCBleHBhbmRzIHRvIGEgc3RhbmRhcmQgYGZvcmAgbG9vcCwgc28gSSB1bmRlcnN0YW5kIHRoYXQgdGhlIGxpc3QgdHJhdmVyc2FsIGNvdWxkIGJlIGluIHByb2dyZXNzIHdoZW4gdGhlIHVubG9jayBpcyBjYWxsZWQuIENydWNpYWxseSwgSSBoYXZlIHRvIHRoaW5rIGFib3V0IHdoYXQgb3RoZXIgb3BlcmF0aW9ucyBhcmUgaGFwcGVuaW5nIGluIHRoZSBzeXN0ZW0gdGhhdCBjb3VsZCBpbnRlcmFjdCB3aXRoIHRoZSBsaXN0LiBDYW4gb3RoZXIgcHJvY2Vzc2VzIG1vZGlmeSB0aGUgYCZhbXA7c2ItJmd0O3NfaW5vZGVzYCBsaXN0IHdoaWxlIHRoaXMgdGhyZWFkIGhhcyB0ZW1wb3JhcmlseSByZWxpbnF1aXNoZWQgdGhlIGxvY2s/IFdoYXQgaWYgYW4gaW5vZGUmIzM5O3MgYGlfc2JfbGlzdC5uZXh0YCBwb2ludGVyIGlzIG1vZGlmaWVkIGluIGFub3RoZXIgdGhyZWFkIHdoaWxlIHRoaXMgdGhyZWFkIHVubG9ja3MgYW5kIHRoZW4gcmVsb2Nrcz8gVGhhdCYjMzk7cyBhIGNsYXNzaWMgcmFjZSBjb25kaXRpb24gc2NlbmFyaW8gc2NyZWFtaW5nIGF0IG1lLgoKVGhlbiwgdGhlcmUmIzM5O3MgYGRpc3Bvc2VfbGlzdCgmYW1wO2Rpc3Bvc2UpYC4gJiMzNDtXaGF0IGRvZXMgKnRoYXQqIGRvPyYjMzQ7IE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgZGVmaW5pdGlvbiBvZiBgZGlzcG9zZV9saXN0YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGluIHRoZSBjb250ZXh0IG9mIHRoZSBsb2NrJiMzOTtzIGxpZmVjeWNsZSB0byBjb21wbGV0ZWx5IGV2YWx1YXRlIHRoZSBzYWZldHkgb2YgdGhpcyBpbXBsZW1lbnRhdGlvbi4gSSBoYXZlIHRvIGxvb2sgaW50byB0aGlzIGZ1bmN0aW9uLCBidXQgdGhlIGZhY3QgdGhhdCBpdCBpcyBjYWxsZWQgYWZ0ZXIgdGhlIHVubG9jayBhbmQgYmVmb3JlIHRoZSByZWxvY2sgaXMgZ2l2aW5nIG1lIHBhdXNlLiBUaGlzIG5lZWRzIHRvIGJlIGNoZWNrZWQgY2FyZWZ1bGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA1OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgZGlzcG9zZV9saXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaW5vZGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9pbm9kZS5jPTc5OT1zdGF0aWMgdm9pZCBldmljdChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2lub2RlLmMtODU1LSAqL1xuZnMvaW5vZGUuYzo4NTY6c3RhdGljIHZvaWQgZGlzcG9zZV9saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXG5mcy9pbm9kZS5jLTg1Ny17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM3MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIGNvbnNpZGVyaW5nIEkmIzM5O20gYW4gZXhwZXJ0OgoKKipEaXZpbmcgaW50byBgZGlzcG9zZV9saXN0YCBpbiBgZnMvaW5vZGUuY2AqKgoKT2theSwgdGltZSB0byBnZXQgYSBiaXQgZ3JhbnVsYXIuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBkaXNwb3NlX2xpc3RgIGZ1bmN0aW9uIHdpdGhpbiBgZnMvaW5vZGUuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhleSYjMzk7cmUgaGFuZGxpbmcgaW5vZGUgY2xlYW51cCwgc28gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoZSBjb3JlIGxvZ2ljIGZvciByZWxlYXNpbmcgaW5vZGUgcmVzb3VyY2VzIHdoZW4gdGhleSYjMzk7cmUgbm8gbG9uZ2VyIG5lZWRlZC4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhleSYjMzk7cmUgbWFuYWdpbmcgdGhlIGxpc3QgaXRzZWxmIOKAkyBob3cgaXMgaXQgc3RydWN0dXJlZCwgYW5kIHdoYXQgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgYXJlIHRoZXkgdXNpbmc/IEdpdmVuIHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBjb25jdXJyZW50IGFjY2VzcyB0byBpbm9kZXMsIGVmZmljaWVudCBhbmQgc2FmZSBsaXN0IG1hbmlwdWxhdGlvbiBpcyBjcnVjaWFsLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyB0aGUgY29tbW9uIHNjZW5hcmlvczogYWRkaW5nLCByZW1vdmluZywgaXRlcmF0aW5nLCBhbmQgcGVyaGFwcyByZS11c2luZyBlbnRyaWVzIG9uIHRoZSBsaXN0LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBiZSB3YXRjaGluZyBob3cgdGhleSBkZWFsIHdpdGggdGhlIHJlZmVyZW5jZSBjb3VudHMgYW5kIGlmIHRoZXkmIzM5O3JlIGNvbnNpZGVyaW5nIGFueSBmb3JtIG9mIG9wdGltaXN0aWMgbG9ja2luZyBvciBvdGhlciBhZHZhbmNlZCBzdHJhdGVnaWVzIHRvIG1pbmltaXplIGNvbnRlbnRpb24uIEkgYWxzbyB3YW50IHRvIG9ic2VydmUgaWYgdGhleSYjMzk7cmUgaGFuZGxpbmcgYW55IHNwZWNpYWwgY2FzZXMsIGxpa2Ugb3JwaGFuZWQgaW5vZGVzIG9yIGlub2RlcyB3aXRoIHBlbmRpbmcgSS9PLCBiZWZvcmUgSSBkZWNpZGUgdG8gZGl2ZSBpbnRvIGl0IG1vcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9pbm9kZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NTA6XHQgKiBkaXNwb3NlX2xpc3QgLSBkaXNwb3NlIG9mIHRoZSBjb250ZW50cyBvZiBhIGxvY2FsIGxpc3RcbiA4NTE6XHQgKiBAaGVhZDogdGhlIGhlYWQgb2YgdGhlIGxpc3QgdG8gZnJlZVxuIDg1MjpcdCAqXG4gODUzOlx0ICogRGlzcG9zZS1saXN0IGdldHMgYSBsb2NhbCBsaXN0IHdpdGggbG9jYWwgaW5vZGVzIGluIGl0LCBzbyBpdCBkb2VzbiYjMzk7dFxuIDg1NDpcdCAqIG5lZWQgdG8gd29ycnkgYWJvdXQgbGlzdCBjb3JydXB0aW9uIGFuZCBTTVAgbG9ja3MuXG4gODU1Olx0ICovXG4gODU2Olx0c3RhdGljIHZvaWQgZGlzcG9zZV9saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXG4gODU3Olx0e1xuIDg1ODpcdFx0d2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7XG4gODU5Olx0XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4gODYwOlx0XG4gODYxOlx0XHRcdGlub2RlID0gbGlzdF9maXJzdF9lbnRyeShoZWFkLCBzdHJ1Y3QgaW5vZGUsIGlfbHJ1KTtcbiA4NjI6XHRcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZpbm9kZS1cdTAwM2VpX2xydSk7XG4gODYzOlx0XG4gODY0Olx0XHRcdGV2aWN0KGlub2RlKTtcbiA4NjU6XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4gODY2Olx0XHR9XG4gODY3Olx0fVxuIDg2ODpcdFxuIDg2OTpcdC8qKlxuIDg3MDpcdCAqIGV2aWN0X2lub2Rlc1x0LSBldmljdCBhbGwgZXZpY3RhYmxlIGlub2RlcyBmb3IgYSBzdXBlcmJsb2NrXG4gODcxOlx0ICogQHNiOlx0XHRzdXBlcmJsb2NrIHRvIG9wZXJhdGUgb25cbiA4NzI6XHQgKlxuIDg3MzpcdCAqIE1ha2Ugc3VyZSB0aGF0IG5vIGlub2RlcyB3aXRoIHplcm8gcmVmY291bnQgYXJlIHJldGFpbmVkLiAgVGhpcyBpc1xuIDg3NDpcdCAqIGNhbGxlZCBieSBzdXBlcmJsb2NrIHNodXRkb3duIGFmdGVyIGhhdmluZyBTQl9BQ1RJVkUgZmxhZyByZW1vdmVkLFxuIDg3NTpcdCAqIHNvIGFueSBpbm9kZSByZWFjaGluZyB6ZXJvIHJlZmNvdW50IGR1cmluZyBvciBhZnRlciB0aGF0IGNhbGwgd2lsbFxuIDg3NjpcdCAqIGJlIGltbWVkaWF0ZWx5IGV2aWN0ZWQuXG4gODc3Olx0ICovXG4gODc4Olx0dm9pZCBldmljdF9pbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiA4Nzk6XHR7XG4gODgwOlx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuIDg4MTpcdFx0TElTVF9IRUFEKGRpc3Bvc2UpO1xuIDg4MjpcdFxuIDg4MzpcdFx0c3Bpbl9sb2NrKFx1MDAyNnNiLVx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrKTtcbiA4ODQ6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoaW5vZGUsIFx1MDAyNnNiLVx1MDAzZXNfaW5vZGVzLCBpX3NiX2xpc3QpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjA5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgYGV2aWN0KGlub2RlKWAgZm9yIElub2RlIFJlbW92YWwqKgoKSG9sZCBvbiBhIHNlY29uZCEgSSBuZWVkIHRvIGNsYXJpZnkgc29tZXRoaW5nIGFib3V0IGhvdyBpbm9kZXMgYXJlIGhhbmRsZWQuIFRoZSBmdW5jdGlvbiBgZXZpY3QoaW5vZGUpYCBpcyBzdXBwb3NlZCB0byByZW1vdmUgdGhlIGlub2RlIGZyb20gYHNiLSZndDtzX2lub2Rlc2AsIHJpZ2h0PyBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHRoaXMgaXMgd2hhdCYjMzk7cyBoYXBwZW5pbmcsIHNvIEkgbmVlZCB0byB2ZXJpZnkgaXRzIGJlaGF2aW9yLgoKTGV0JiMzOTtzIGRpZyBpbnRvIGBldmljdChpbm9kZSlgIGFuZCBtYWtlIHN1cmUgaXQmIzM5O3MgZG9pbmcgd2hhdCBJIGV4cGVjdC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGl0JiMzOTtzIGNvcnJlY3RseSByZW1vdmluZyBkaXNwb3NlZCBpbm9kZXMgZnJvbSBgc19pbm9kZXNgLiBJJiMzOTtsbCBmb2N1cyBvbiB0aGUgYXJlYSBhcm91bmQgbGluZSA4MDAgd2l0aGluIHRoZSBgZXZpY3Qoc3RydWN0IGlub2RlICppbm9kZSlgIGZ1bmN0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgcmVhbGx5IGdvaW5nIG9uIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2lub2RlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3OTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc5NTpcdCAqIEFuIGlub2RlIG11c3QgYWxyZWFkeSBiZSByZW1vdmVkIGZyb20gdGhlIExSVSBsaXN0IGJlZm9yZSBiZWluZyBldmljdGVkIGZyb21cbiA3OTY6XHQgKiB0aGUgY2FjaGUuIFRoaXMgc2hvdWxkIG9jY3VyIGF0b21pY2FsbHkgd2l0aCBzZXR0aW5nIHRoZSBJX0ZSRUVJTkcgc3RhdGVcbiA3OTc6XHQgKiBmbGFnLCBzbyBubyBpbm9kZXMgaGVyZSBzaG91bGQgZXZlciBiZSBvbiB0aGUgTFJVIHdoZW4gYmVpbmcgZXZpY3RlZC5cbiA3OTg6XHQgKi9cbiA3OTk6XHRzdGF0aWMgdm9pZCBldmljdChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIDgwMDpcdHtcbiA4MDE6XHRcdGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zICpvcCA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19vcDtcbiA4MDI6XHRcbiA4MDM6XHRcdEJVR19PTighKGlub2RlX3N0YXRlX3JlYWRfb25jZShpbm9kZSkgXHUwMDI2IElfRlJFRUlORykpO1xuIDgwNDpcdFx0QlVHX09OKCFsaXN0X2VtcHR5KFx1MDAyNmlub2RlLVx1MDAzZWlfbHJ1KSk7XG4gODA1Olx0XG4gODA2Olx0XHRpbm9kZV9pb19saXN0X2RlbChpbm9kZSk7XG4gODA3Olx0XHRpbm9kZV9zYl9saXN0X2RlbChpbm9kZSk7XG4gODA4Olx0XG4gODA5Olx0XHRzcGluX2xvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbiA4MTA6XHRcdGlub2RlX3dhaXRfZm9yX2xydV9pc29sYXRpbmcoaW5vZGUpO1xuIDgxMTpcdFxuIDgxMjpcdFx0LypcbiA4MTM6XHRcdCAqIFdhaXQgZm9yIGZsdXNoZXIgdGhyZWFkIHRvIGJlIGRvbmUgd2l0aCB0aGUgaW5vZGUgc28gdGhhdCBmaWxlc3lzdGVtXG4gODE0Olx0XHQgKiBkb2VzIG5vdCBzdGFydCBkZXN0cm95aW5nIGl0IHdoaWxlIHdyaXRlYmFjayBpcyBzdGlsbCBydW5uaW5nLiBTaW5jZVxuIDgxNTpcdFx0ICogdGhlIGlub2RlIGhhcyBJX0ZSRUVJTkcgc2V0LCBmbHVzaGVyIHRocmVhZCB3b24mIzM5O3Qgc3RhcnQgbmV3IHdvcmsgb25cbiA4MTY6XHRcdCAqIHRoZSBpbm9kZS4gIFdlIGp1c3QgaGF2ZSB0byB3YWl0IGZvciBydW5uaW5nIHdyaXRlYmFjayB0byBmaW5pc2guXG4gODE3Olx0XHQgKi9cbiA4MTg6XHRcdGlub2RlX3dhaXRfZm9yX3dyaXRlYmFjayhpbm9kZSk7XG4gODE5Olx0XHRzcGluX3VubG9jayhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spO1xuIDgyMDpcdFxuIDgyMTpcdFx0aWYgKG9wLVx1MDAzZWV2aWN0X2lub2RlKSB7XG4gODIyOlx0XHRcdG9wLVx1MDAzZWV2aWN0X2lub2RlKGlub2RlKTtcbiA4MjM6XHRcdH0gZWxzZSB7XG4gODI0Olx0XHRcdHRydW5jYXRlX2lub2RlX3BhZ2VzX2ZpbmFsKFx1MDAyNmlub2RlLVx1MDAzZWlfZGF0YSk7XG4gODI1Olx0XHRcdGNsZWFyX2lub2RlKGlub2RlKTtcbiA4MjY6XHRcdH1cbiA4Mjc6XHRcdGlmIChTX0lTQ0hSKGlub2RlLVx1MDAzZWlfbW9kZSkgXHUwMDI2XHUwMDI2IGlub2RlLVx1MDAzZWlfY2RldilcbiA4Mjg6XHRcdFx0Y2RfZm9yZ2V0KGlub2RlKTtcbiA4Mjk6XHRcbiA4MzA6XHRcdHJlbW92ZV9pbm9kZV9oYXNoKGlub2RlKTtcbiA4MzE6XHRcbiA4MzI6XHRcdC8qXG4gODMzOlx0XHQgKiBXYWtlIHVwIHdhaXRlcnMgaW4gX193YWl0X29uX2ZyZWVpbmdfaW5vZGUoKS5cbiA4MzQ6XHRcdCAqXG4gODM1Olx0XHQgKiBJdCBpcyBhbiBpbnZhcmlhbnQgdGhhdCBhbnkgdGhyZWFkIHdlIG5lZWQgdG8gd2FrZSB1cCBpcyBhbHJlYWR5XG4gODM2Olx0XHQgKiBhY2NvdW50ZWQgZm9yIGJlZm9yZSByZW1vdmVfaW5vZGVfaGFzaCgpIGFjcXVpcmVzIC1cdTAwM2VpX2xvY2sgLS0gYm90aFxuIDgzNzpcdFx0ICogc2lkZXMgdGFrZSB0aGUgbG9jayBhbmQgc2xlZXAgaXMgYWJvcnRlZCBpZiB0aGUgaW5vZGUgaXMgZm91bmRcbiA4Mzg6XHRcdCAqIHVuaGFzaGVkLiBUaHVzIGVpdGhlciB0aGUgc2xlZXBlciB3aW5zIGFuZCBnb2VzIG9mZiBDUFUsIG9yIHJlbW92YWxcbiA4Mzk6XHRcdCAqIHdpbnMgYW5kIHRoZSBzbGVlcGVyIGFib3J0cyBhZnRlciB0ZXN0aW5nIHdpdGggdGhlIGxvY2suXG4gODQwOlx0XHQgKlxuIDg0MTpcdFx0ICogVGhpcyBhbHNvIG1lYW5zIHdlIGRvbiYjMzk7dCBuZWVkIGFueSBmZW5jZXMgZm9yIHRoZSBjYWxsIGJlbG93LlxuIDg0MjpcdFx0ICovXG4gODQzOlx0XHRpbm9kZV93YWtlX3VwX2JpdChpbm9kZSwgX19JX05FVyk7XG4gODQ0Olx0XHRCVUdfT04oaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSAhPSAoSV9GUkVFSU5HIHwgSV9DTEVBUikpO1xuIDg0NTpcdFxuIDg0NjpcdFx0ZGVzdHJveV9pbm9kZShpbm9kZSk7XG4gODQ3Olx0fVxuIDg0ODpcdFxuIDg0OTpcdC8qXG4gODUwOlx0ICogZGlzcG9zZV9saXN0IC0gZGlzcG9zZSBvZiB0aGUgY29udGVudHMgb2YgYSBsb2NhbCBsaXN0XG4gODUxOlx0ICogQGhlYWQ6IHRoZSBoZWFkIG9mIHRoZSBsaXN0IHRvIGZyZWVcbiA4NTI6XHQgKlxuIDg1MzpcdCAqIERpc3Bvc2UtbGlzdCBnZXRzIGEgbG9jYWwgbGlzdCB3aXRoIGxvY2FsIGlub2RlcyBpbiBpdCwgc28gaXQgZG9lc24mIzM5O3RcbiA4NTQ6XHQgKiBuZWVkIHRvIHdvcnJ5IGFib3V0IGxpc3QgY29ycnVwdGlvbiBhbmQgU01QIGxvY2tzLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDM3CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNjg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgaW5vZGUgbGlzdCBoYW5kbGluZyBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBteSBhdHRlbnRpb24gaXMgZHJhd24gdG8gYGlub2RlX3NiX2xpc3RfZGVsKGlub2RlKWAuIFJpZ2h0LCB0aGF0IHJlbW92ZXMgYW4gaW5vZGUgZnJvbSBgc2ItJmd0O3NfaW5vZGVzYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBCdXQgdGhlIGNvbnRleHQgaXMgd2hhdCYjMzk7cyBtYWtpbmcgbWUgdW5lYXN5LiBMZXQgbWUgc2VlLi4uIHRoZSBvcmlnaW5hbCBjb2RlIGhhZCB0aGlzIGxvb3Agd2l0aCBgc2ItJmd0O3NfaW5vZGVfbGlzdF9sb2NrYCBoZWxkLCBpdGVyYXRpbmcgdGhyb3VnaCBgc2ItJmd0O3NfaW5vZGVzYC4gV2hlbiBgbmVlZF9yZXNjaGVkKClgIHdhcyB0cnVlLCB0aGUgb3JpZ2luYWwgY29kZSBhZGRlZCB0aGUgY3VycmVudCBpbm9kZSB0byBgZGlzcG9zZWAsIHJlbGVhc2VkIHRoZSBsb2NrLCBjYWxsZWQgYGRpc3Bvc2VfbGlzdGAgKHdoaWNoIHdvdWxkIGV2aWN0IHRoZSBpbm9kZSksIGFuZCB0aGVuIHdlbnQgKmJhY2sqIHRvIHRoZSB0b3Agb2YgdGhlIGxpc3QsIGFjcXVpcmluZyB0aGUgbG9jayBhZ2Fpbi4KCk5vdywgdGhlIHBhdGNoIGNoYW5nZXMgdGhlIG9yZGVyLiBOb3csIGl0JiMzOTtzIGFkZGluZyB0aGUgaW5vZGUgdG8gYGRpc3Bvc2VgICphZnRlciogdGhlIGBuZWVkX3Jlc2NoZWQoKWAgY2hlY2sgYW5kIHRoZSBgc3Bpbl91bmxvY2tgLiBIb2xkIG9uIGEgc2Vjb25kLi4uIFRoaXMgbWVhbnMgdGhhdCB3aGlsZSBgc2ItJmd0O3NfaW5vZGVfbGlzdF9sb2NrYCBpcyAqdW5sb2NrZWQqLCBhbnkgb3RoZXIgdGhyZWFkIGNvdWxkIHBvdGVudGlhbGx5IG1vZGlmeSBgc2ItJmd0O3NfaW5vZGVzYCEgV2hhdCBoYXBwZW5zIGlmIGFub3RoZXIgaW5vZGUgbmV4dCB0byBgaW5vZGVgIGlzIGRlbGV0ZWQgb3IgYSBuZXcgb25lIGluc2VydGVkPyBTdWRkZW5seSwgdGhlIGl0ZXJhdG9yIGluIHRoZSBsb29wIG1pZ2h0IGJlIG9wZXJhdGluZyBvbiBhbiBpbmNvbnNpc3RlbnQgZGF0YSBzdHJ1Y3R1cmUhIEFuZCB0aGluayBhYm91dCB0aGUgY2FzZSBvZiBhbiB1bm1vdW50IG9yIHN1cGVyYmxvY2sgc2h1dGRvd24gd2hlcmUgd2UmIzM5O3JlIHByb2JhYmx5IGRvaW5nIGEgbG90IG9mIHRoZXNlIG9wZXJhdGlvbnMgY29uY3VycmVudGx5LiBJcyBgZXZpY3RfaW5vZGVzYCBvbmx5IGNhbGxlZCBkdXJpbmcgdW5tb3VudCwgb3IgYXJlIHRoZXJlIG90aGVyIHBsYWNlcyBpbiB0aGUgZmlsZXN5c3RlbSB3aGVyZSB0aGlzIGNvdWxkIGhhcHBlbj8gTmVlZCB0byBrbm93LiBJIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxlcnMgb2YgYGV2aWN0X2lub2Rlc2AgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXZpY3RfaW5vZGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3Q9MTE3OT1MT09LX0NSRUFURSBvciBMT09LVVBfUkVOQU1FX1RBUkdFVC5cbi0tXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0LTExODMtKiptYW5kYXRvcnkqKlxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdDoxMTg0OmludmFsaWRhdGVfaW5vZGVzKCkgaXMgZ29uZSB1c2UgZXZpY3RfaW5vZGVzKCkgaW5zdGVhZC5cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3QtMTE4NS1cbi0tXG5mcy9mMmZzL3N1cGVyLmM9NTA3Nz1zdGF0aWMgaW50IGYyZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvZjJmcy9zdXBlci5jLTU1MzQtXHQvKiBldmljdCBzb21lIGlub2RlcyBiZWluZyBjYWNoZWQgYnkgR0MgKi9cbmZzL2YyZnMvc3VwZXIuYzo1NTM1Olx0ZXZpY3RfaW5vZGVzKHNiKTtcbmZzL2YyZnMvc3VwZXIuYy01NTM2LVx0ZjJmc191bnJlZ2lzdGVyX3N5c2ZzKHNiaSk7XG4tLVxuZnMvZnVzZS92aXJ0aW9fZnMuYz0xNjI3PXN0YXRpYyB2b2lkIHZpcnRpb19mc19jb25uX2Rlc3Ryb3koc3RydWN0IGZ1c2VfbW91bnQgKmZtKVxuLS1cbmZzL2Z1c2UvdmlydGlvX2ZzLmMtMTYzMi1cbmZzL2Z1c2UvdmlydGlvX2ZzLmM6MTYzMzpcdC8qIFN0b3AgZGF4IHdvcmtlci4gU29vbiBldmljdF9pbm9kZXMoKSB3aWxsIGJlIGNhbGxlZCB3aGljaFxuZnMvZnVzZS92aXJ0aW9fZnMuYy0xNjM0LVx0ICogd2lsbCBmcmVlIGFsbCBtZW1vcnkgcmFuZ2VzIGJlbG9uZ2luZyB0byBhbGwgaW5vZGVzLlxuLS1cbmZzL2dmczIvb3BzX2ZzdHlwZS5jPTE3MTE9c3RhdGljIGludCBnZnMyX21ldGFfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9nZnMyL29wc19mc3R5cGUuYy0xNzIyLS8qKlxuZnMvZ2ZzMi9vcHNfZnN0eXBlLmM6MTcyMzogKiBnZnMyX2V2aWN0X2lub2RlcyAtIGV2aWN0IGlub2RlcyBjb29wZXJhdGl2ZWx5XG5mcy9nZnMyL29wc19mc3R5cGUuYy0xNzI0LSAqIEBzYjogdGhlIHN1cGVyYmxvY2tcbi0tXG5mcy9nZnMyL29wc19mc3R5cGUuYy0xNzM0LSAqXG5mcy9nZnMyL29wc19mc3R5cGUuYzoxNzM1OiAqIEZ1bmN0aW9uIGV2aWN0X2lub2RlcygpIHRyaWVzIHRvIGtlZXAgdGhlIHNfaW5vZGVfbGlzdF9sb2NrIGxpc3QgbG9ja2VkIG92ZXJcbmZzL2dmczIvb3BzX2ZzdHlwZS5jLTE3MzYtICogYSBsb25nIHRpbWUsIHdoaWNoIHByZXZlbnRzIG90aGVyIGlub2RlcyBmcm9tIGJlaW5nIGV2aWN0ZWQgY29uY3VycmVudGx5LlxuZnMvZ2ZzMi9vcHNfZnN0eXBlLmMtMTczNy0gKiBUaGlzIHByZWNsdWRlcyB0aGUgY29vcGVyYXRpdmUgYmVoYXZpb3Igd2UgYXJlIGxvb2tpbmcgZm9yLiAgVGhpcyBzcGVjaWFsXG5mcy9nZnMyL29wc19mc3R5cGUuYzoxNzM4OiAqIHZlcnNpb24gb2YgZXZpY3RfaW5vZGVzKCkgYXZvaWRzIHRoYXQuXG5mcy9nZnMyL29wc19mc3R5cGUuYy0xNzM5LSAqXG4tLVxuZnMvZ2ZzMi9vcHNfZnN0eXBlLmMtMTc0MS0gKi9cbmZzL2dmczIvb3BzX2ZzdHlwZS5jOjE3NDI6c3RhdGljIHZvaWQgZ2ZzMl9ldmljdF9pbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2dmczIvb3BzX2ZzdHlwZS5jLTE3NDMte1xuLS1cbmZzL2dmczIvb3BzX2ZzdHlwZS5jPTE3NzE9c3RhdGljIHZvaWQgZ2ZzMl9raWxsX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZ2ZzMi9vcHNfZnN0eXBlLmMtMTc4Ny1cdHNldF9iaXQoU0RGX0tJTEwsIFx1MDAyNnNkcC1cdTAwM2VzZF9mbGFncyk7XG5mcy9nZnMyL29wc19mc3R5cGUuYzoxNzg4Olx0Z2ZzMl9ldmljdF9pbm9kZXMoc2IpO1xuZnMvZ2ZzMi9vcHNfZnN0eXBlLmMtMTc4OS1cbi0tXG5mcy9pbm9kZS5jPTg1Nj1zdGF0aWMgdm9pZCBkaXNwb3NlX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbi0tXG5mcy9pbm9kZS5jLTg2OS0vKipcbmZzL2lub2RlLmM6ODcwOiAqIGV2aWN0X2lub2Rlc1x0LSBldmljdCBhbGwgZXZpY3RhYmxlIGlub2RlcyBmb3IgYSBzdXBlcmJsb2NrXG5mcy9pbm9kZS5jLTg3MS0gKiBAc2I6XHRcdHN1cGVyYmxvY2sgdG8gb3BlcmF0ZSBvblxuLS1cbmZzL2lub2RlLmMtODc3LSAqL1xuZnMvaW5vZGUuYzo4Nzg6dm9pZCBldmljdF9pbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2lub2RlLmMtODc5LXtcbi0tXG5mcy9pbm9kZS5jLTkxOC19XG5mcy9pbm9kZS5jOjkxOTpFWFBPUlRfU1lNQk9MX0dQTChldmljdF9pbm9kZXMpO1xuZnMvaW5vZGUuYy05MjAtXG4tLVxuZnMvc21iL2NsaWVudC9maWxlLmM9Mzc1PWNpZnNfbWFya19vcGVuX2ZpbGVzX2ludmFsaWQoc3RydWN0IGNpZnNfdGNvbiAqdGNvbilcbi0tXG5mcy9zbWIvY2xpZW50L2ZpbGUuYy00MDgtXHQvKlxuZnMvc21iL2NsaWVudC9maWxlLmM6NDA5Olx0ICogQkIgQWRkIGNhbGwgdG8gZXZpY3RfaW5vZGVzKHNiKSBmb3IgYWxsIHN1cGVyYmxvY2tzIG1vdW50ZWRcbmZzL3NtYi9jbGllbnQvZmlsZS5jLTQxMC1cdCAqIHRvIHRoaXMgdGNvbi5cbi0tXG5mcy9zdXBlci5jPTc0MT12b2lkIGdlbmVyaWNfc2h1dGRvd25fc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9zdXBlci5jLTc1NC1cdFx0LyogRXZpY3QgYWxsIGlub2RlcyB3aXRoIHplcm8gcmVmY291bnQuICovXG5mcy9zdXBlci5jOjc1NTpcdFx0ZXZpY3RfaW5vZGVzKHNiKTtcbmZzL3N1cGVyLmMtNzU2LVxuLS1cbmZzL3N1cGVyLmM9MTUwNz1zdGF0aWMgdm9pZCBmc19iZGV2X21hcmtfZGVhZChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBib29sIHN1cnByaXNlKVxuLS1cbmZzL3N1cGVyLmMtMTUyNC1cdFx0XHRcdHNocmlua19kY2FjaGVfc2Ioc2IpO1xuZnMvc3VwZXIuYzoxNTI1Olx0XHRcdFx0ZXZpY3RfaW5vZGVzKHNiKTtcbmZzL3N1cGVyLmMtMTUyNi1cdFx0XHRcdGlmIChzYi1cdTAwM2VzX29wLVx1MDAzZXNodXRkb3duKVxuLS1cbmZzL3hmcy94ZnNfbG9nLmM9NjYyPXhmc19sb2dfbW91bnRfZmluaXNoKFxuLS1cbmZzL3hmcy94ZnNfbG9nLmMtNjk3LVx0bXAtXHUwMDNlbV9zdXBlci1cdTAwM2VzX2ZsYWdzIFx1MDAyNj0gflNCX0FDVElWRTtcbmZzL3hmcy94ZnNfbG9nLmM6Njk4Olx0ZXZpY3RfaW5vZGVzKG1wLVx1MDAzZW1fc3VwZXIpO1xuZnMveGZzL3hmc19sb2cuYy02OTktXG4tLVxuaW5jbHVkZS9saW51eC9mcy5oPTMwMTM9dW5zaWduZWQgaW50IGdldF9uZXh0X2lubyh2b2lkKTtcbmluY2x1ZGUvbGludXgvZnMuaDozMDE0OnZvaWQgZXZpY3RfaW5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xuaW5jbHVkZS9saW51eC9mcy5oLTMwMTUtdm9pZCBkdW1wX21hcHBpbmcoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKik7XG4tLVxuc2VjdXJpdHkvbGFuZGxvY2svZnMuYz0xMzY0PXN0YXRpYyB2b2lkIGhvb2tfaW5vZGVfZnJlZV9zZWN1cml0eV9yY3Uodm9pZCAqaW5vZGVfc2VjdXJpdHkpXG4tLVxuc2VjdXJpdHkvbGFuZGxvY2svZnMuYy0xMzgwLSAqXG5zZWN1cml0eS9sYW5kbG9jay9mcy5jOjEzODE6ICogQ2YuIGZzbm90aWZ5X3VubW91bnRfaW5vZGVzKCkgYW5kIGV2aWN0X2lub2RlcygpXG5zZWN1cml0eS9sYW5kbG9jay9mcy5jLTEzODItICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA1OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTE4CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmNlcm5zIHdpdGggYGV2aWN0X2lub2Rlc2AgYW5kIFBvdGVudGlhbCBDb25jdXJyZW5jeSBJc3N1ZXMqKgoKT2theSwgc28gYGV2aWN0X2lub2Rlc2AgaXMgYSBwcmV0dHkgaW1wb3J0YW50IGZ1bmN0aW9uLiBJJiMzOTttIHNlZWluZyB0aGF0IGl0IGdldHMgY2FsbGVkIGluIGBnZW5lcmljX3NodXRkb3duX3N1cGVyYCwgd2hpY2ggaXMgYmFzaWNhbGx5IGV2ZXJ5IGZpbGVzeXN0ZW0mIzM5O3MgdW5tb3VudCByb3V0aW5lLiBJdCBhbHNvIHBvcHMgdXAgaW4gc29tZSBvdGhlciBjcml0aWNhbCBwbGFjZXMsIGxpa2UgYGYyZnNfZmlsbF9zdXBlcmAsIGBmc19iZGV2X21hcmtfZGVhZGAsIGFuZCBgeGZzX2xvZ19tb3VudF9maW5pc2hgLiBUaGF0IG1lYW5zIGl0JiMzOTtzIGZ1bmRhbWVudGFsIHRvIHZhcmlvdXMgYXNwZWN0cyBvZiBmaWxlc3lzdGVtIG1hbmFnZW1lbnQsIGZyb20gaW5pdGlhbCBtb3VudGluZyB0byBjbGVhbmluZyB1cCBvbiB1bm1vdW50IG9yIGluIGNhc2VzIG9mIGRldmljZSBkZWF0aC4KCk5vdywgSSYjMzk7bSB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IGhvdyBpdCBpdGVyYXRlcyB0aHJvdWdoIGlub2Rlcy4gVGhlIGNvZGUgdXNlcyBgbGlzdF9mb3JfZWFjaF9lbnRyeShpbm9kZSwgJmFtcDtzYi0mZ3Q7c19pbm9kZXMsIGlfc2JfbGlzdClgLiBUaGF0IGBpbm9kZWAgdGhlcmU/IFRoYXQmIzM5O3MgdGhlIGxvb3AgY3Vyc29yLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGhhcHBlbnMgaWYgdGhhdCBpdGVyYXRvciBpcyBtb2RpZmllZCBtaWQtZmxpZ2h0LgoKQWhhLCBoZXJlJiMzOTtzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIEkgc2VlIGEgYG5lZWRfcmVzY2hlZCgpYCBjaGVjayB3aXRoaW4gdGhlIGxvb3AuIFdoZW4gaXQmIzM5O3MgdHJ1ZSwgdGhlIGxvY2sgYHNiLSZndDtzX2lub2RlX2xpc3RfbG9ja2AgaXMgZHJvcHBlZCwgYGNvbmRfcmVzY2hlZCgpYCBpcyBjYWxsZWQsIHNvbWUga2luZCBvZiBkaXNwb3NhbCBsaXN0IGlzIGhhbmRsZWQsIGFuZCAqdGhlbiogdGhlIGxvY2sgaXMgcmVhY3F1aXJlZC4gVGhlIGtleSBoZXJlIGlzOgoKYHNwaW5fdW5sb2NrKCZhbXA7c2ItJmd0O3NfaW5vZGVfbGlzdF9sb2NrKTtgCmBjb25kX3Jlc2NoZWQoKTtgCmBkaXNwb3NlX2xpc3QoJmFtcDtkaXNwb3NlKTtgCmBzcGluX2xvY2soJmFtcDtzYi0mZ3Q7c19pbm9kZV9saXN0X2xvY2spO2AKYGxpc3RfYWRkKCZhbXA7aW5vZGUtJmd0O2lfbHJ1LCAmYW1wO2Rpc3Bvc2UpO2AKCkhhbmcgb24gYSBzZWNvbmQhIFRoaXMgYGlub2RlYCBsaXN0IG1hbmlwdWxhdGlvbiBvY2N1cnMgKmFmdGVyKiB0aGUgbG9jayBpcyBkcm9wcGVkLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgc2FmZXR5IG9mIGBpbm9kZS0mZ3Q7aV9zYl9saXN0Lm5leHRgIGR1cmluZyB0aGF0IHBlcmlvZCEgSXMgdGhhdCBkYXRhIHN0cnVjdHVyZSBwcm90ZWN0ZWQgY29ycmVjdGx5PyBJcyBzb21ldGhpbmcgZWxzZSBtb2RpZnlpbmcgdGhlIGBpX3NiX2xpc3RgIHdoaWxlIHdlIGFyZSBpbiB0aGUgYG5lZWRfcmVzY2hlZGAgcGF0aCBhbmQgdGhlIGxvY2sgaXMgZHJvcHBlZD8gVGhpcyBjb3VsZCBsZWFkIHRvIGFsbCBzb3J0cyBvZiBuYXN0eSBjb3JydXB0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gYXJlIGFsbG93ZWQgdG8gdG91Y2ggdGhhdCBsaXN0IGR1cmluZyB0aGUgcmVzY2hlZHVsaW5nIHByb2Nlc3MuIEkgbmVlZCB0byBkaWcgaW50byBgaW5vZGVfc2JfbGlzdF9kZWwoaW5vZGUpYCBhbmQgZmluZCBvdXQgZXhhY3RseSB3aG8gaXMgbW9kaWZ5aW5nIGBzX2lub2Rlc2AhIExldCYjMzk7cyBzZWUgd2hvIGlzIG1vZGlmeWluZyBgc19pbm9kZXNgISBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGlzIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gaW4gdGhlIGxvb3AhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA1OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lfc2JfbGlzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9kcm9wX2NhY2hlcy5jPTE5PXN0YXRpYyB2b2lkIGRyb3BfcGFnZWNhY2hlX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKnVudXNlZClcbi0tXG5mcy9kcm9wX2NhY2hlcy5jLTIzLVx0c3Bpbl9sb2NrKFx1MDAyNnNiLVx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrKTtcbmZzL2Ryb3BfY2FjaGVzLmM6MjQ6XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGlub2RlLCBcdTAwMjZzYi1cdTAwM2VzX2lub2RlcywgaV9zYl9saXN0KSB7XG5mcy9kcm9wX2NhY2hlcy5jLTI1LVx0XHRzcGluX2xvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbi0tXG5mcy9nZnMyL29wc19mc3R5cGUuYz0xNzQyPXN0YXRpYyB2b2lkIGdmczJfZXZpY3RfaW5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZ2ZzMi9vcHNfZnN0eXBlLmMtMTc0OS1cdHNwaW5fbG9jayhcdTAwMjZzYi1cdTAwM2VzX2lub2RlX2xpc3RfbG9jayk7XG5mcy9nZnMyL29wc19mc3R5cGUuYzoxNzUwOlx0bGlzdF9mb3JfZWFjaF9lbnRyeShpbm9kZSwgXHUwMDI2c2ItXHUwMDNlc19pbm9kZXMsIGlfc2JfbGlzdCkge1xuZnMvZ2ZzMi9vcHNfZnN0eXBlLmMtMTc1MS1cdFx0c3Bpbl9sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4tLVxuZnMvaW5vZGUuYy0zOS0gKiBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrIHByb3RlY3RzOlxuZnMvaW5vZGUuYzo0MDogKiAgIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19pbm9kZXMsIGlub2RlLVx1MDAzZWlfc2JfbGlzdFxuZnMvaW5vZGUuYy00MS0gKiBiZGktXHUwMDNld2IubGlzdF9sb2NrIHByb3RlY3RzOlxuLS1cbmZzL2lub2RlLmM9NDkzPXZvaWQgaW5vZGVfaW5pdF9vbmNlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvaW5vZGUuYy01MDAtXHRJTklUX0xJU1RfSEVBRChcdTAwMjZpbm9kZS1cdTAwM2VpX2xydSk7XG5mcy9pbm9kZS5jOjUwMTpcdElOSVRfTElTVF9IRUFEKFx1MDAyNmlub2RlLVx1MDAzZWlfc2JfbGlzdCk7XG5mcy9pbm9kZS5jLTUwMi1cdF9fYWRkcmVzc19zcGFjZV9pbml0X29uY2UoXHUwMDI2aW5vZGUtXHUwMDNlaV9kYXRhKTtcbi0tXG5mcy9pbm9kZS5jPTYzND12b2lkIGlub2RlX3NiX2xpc3RfYWRkKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvaW5vZGUuYy02MzgtXHRzcGluX2xvY2soXHUwMDI2c2ItXHUwMDNlc19pbm9kZV9saXN0X2xvY2spO1xuZnMvaW5vZGUuYzo2Mzk6XHRsaXN0X2FkZChcdTAwMjZpbm9kZS1cdTAwM2VpX3NiX2xpc3QsIFx1MDAyNnNiLVx1MDAzZXNfaW5vZGVzKTtcbmZzL2lub2RlLmMtNjQwLVx0c3Bpbl91bmxvY2soXHUwMDI2c2ItXHUwMDNlc19pbm9kZV9saXN0X2xvY2spO1xuLS1cbmZzL2lub2RlLmM9NjQ0PXN0YXRpYyBpbmxpbmUgdm9pZCBpbm9kZV9zYl9saXN0X2RlbChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2lub2RlLmMtNjQ3LVxuZnMvaW5vZGUuYzo2NDg6XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2aW5vZGUtXHUwMDNlaV9zYl9saXN0KSkge1xuZnMvaW5vZGUuYy02NDktXHRcdHNwaW5fbG9jayhcdTAwMjZzYi1cdTAwM2VzX2lub2RlX2xpc3RfbG9jayk7XG5mcy9pbm9kZS5jOjY1MDpcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZpbm9kZS1cdTAwM2VpX3NiX2xpc3QpO1xuZnMvaW5vZGUuYy02NTEtXHRcdHNwaW5fdW5sb2NrKFx1MDAyNnNiLVx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrKTtcbi0tXG5mcy9pbm9kZS5jPTg3OD12b2lkIGV2aWN0X2lub2RlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2lub2RlLmMtODgzLVx0c3Bpbl9sb2NrKFx1MDAyNnNiLVx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrKTtcbmZzL2lub2RlLmM6ODg0Olx0bGlzdF9mb3JfZWFjaF9lbnRyeShpbm9kZSwgXHUwMDI2c2ItXHUwMDNlc19pbm9kZXMsIGlfc2JfbGlzdCkge1xuZnMvaW5vZGUuYy04ODUtXHRcdGlmIChpY291bnRfcmVhZF9vbmNlKGlub2RlKSlcbi0tXG5mcy9pbm9kZS5jPTEyOTY9c3RydWN0IGlub2RlICppbm9kZV9pbnNlcnQ1KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBoYXNodmFsLFxuLS1cbmZzL2lub2RlLmMtMTM0My1cdCAqIEFkZCBpbm9kZSB0byB0aGUgc2IgbGlzdCBpZiBpdCYjMzk7cyBub3QgYWxyZWFkeS4gSXQgaGFzIElfTkVXIGF0IHRoaXNcbmZzL2lub2RlLmM6MTM0NDpcdCAqIHBvaW50LCBzbyBpdCBzaG91bGQgYmUgc2FmZSB0byB0ZXN0IGlfc2JfbGlzdCBsb2NrbGVzc2x5LlxuZnMvaW5vZGUuYy0xMzQ1LVx0ICovXG5mcy9pbm9kZS5jOjEzNDY6XHRpZiAobGlzdF9lbXB0eShcdTAwMjZpbm9kZS1cdTAwM2VpX3NiX2xpc3QpKVxuZnMvaW5vZGUuYy0xMzQ3LVx0XHRpbm9kZV9zYl9saXN0X2FkZChpbm9kZSk7XG4tLVxuZnMvcXVvdGEvZHF1b3QuYz0xMDQ3PXN0YXRpYyBpbnQgYWRkX2RxdW90X3JlZihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSlcbi0tXG5mcy9xdW90YS9kcXVvdC5jLTEwNTUtXHRzcGluX2xvY2soXHUwMDI2c2ItXHUwMDNlc19pbm9kZV9saXN0X2xvY2spO1xuZnMvcXVvdGEvZHF1b3QuYzoxMDU2Olx0bGlzdF9mb3JfZWFjaF9lbnRyeShpbm9kZSwgXHUwMDI2c2ItXHUwMDNlc19pbm9kZXMsIGlfc2JfbGlzdCkge1xuZnMvcXVvdGEvZHF1b3QuYy0xMDU3LVx0XHRzcGluX2xvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbi0tXG5mcy9xdW90YS9kcXVvdC5jPTExMDQ9c3RhdGljIHZvaWQgcmVtb3ZlX2RxdW90X3JlZihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSlcbi0tXG5mcy9xdW90YS9kcXVvdC5jLTExMTEtXHRzcGluX2xvY2soXHUwMDI2c2ItXHUwMDNlc19pbm9kZV9saXN0X2xvY2spO1xuZnMvcXVvdGEvZHF1b3QuYzoxMTEyOlx0bGlzdF9mb3JfZWFjaF9lbnRyeShpbm9kZSwgXHUwMDI2c2ItXHUwMDNlc19pbm9kZXMsIGlfc2JfbGlzdCkge1xuZnMvcXVvdGEvZHF1b3QuYy0xMTEzLVx0XHQvKlxuLS1cbmZzL3N1cGVyLmM9NzQxPXZvaWQgZ2VuZXJpY19zaHV0ZG93bl9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL3N1cGVyLmMtNzg3LVx0XHRcdHNwaW5fbG9jayhcdTAwMjZzYi1cdTAwM2VzX2lub2RlX2xpc3RfbG9jayk7XG5mcy9zdXBlci5jOjc4ODpcdFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGlub2RlLCBcdTAwMjZzYi1cdTAwM2VzX2lub2RlcywgaV9zYl9saXN0KSB7XG5mcy9zdXBlci5jLTc4OS1cdFx0XHRcdGlub2RlLVx1MDAzZWlfb3AgPSBWRlNfUFRSX1BPSVNPTjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyOTcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyMDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFBvdGVudGlhbCBMaXN0IENvcnJ1cHRpb24gaW4gYGV2aWN0X2lub2Rlc2AqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGBldmljdF9pbm9kZXNgIGluIGBmcy9pbm9kZS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBwYXJ0IHdoZXJlIGl0IGl0ZXJhdGVzIHRocm91Z2ggaW5vZGVzIG9uIGEgc3VwZXJibG9jayAoYHNiYCkgYW5kIGV2aWN0cyB0aGVtLiBJIHNlZSBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBpbnZvbHZpbmcgYGlub2RlX3NiX2xpc3RfZGVsKClgIGFuZCB0aGUgZHJvcHBpbmcgb2YgdGhlIGBzX2lub2RlX2xpc3RfbG9ja2AuCgpUaGUgY29kZSBzZXRzIGlub2RlcyB0byBgSV9GUkVFSU5HYCwgYWRkcyB0aGVtIHRvIGEgJiMzNDtkaXNwb3NlJiMzNDsgbGlzdCwgYW5kIHRoZW4sIGlmIGEgYG5lZWRfcmVzY2hlZCgpYCBjYWxsIGlzIG5lZWRlZCwgaXQgcmVsZWFzZXMgdGhlIGBzX2lub2RlX2xpc3RfbG9ja2AsIGNhbGxzIGBjb25kX3Jlc2NoZWQoKWAsIHRoZW4gY2FsbHMgYGRpc3Bvc2VfbGlzdCgmYW1wO2Rpc3Bvc2UpYC4KCkhlcmUmIzM5O3MgdGhlIHByb2JsZW06IGBkaXNwb3NlX2xpc3RgIGNhbGxzIGBldmljdCgpYCBvbiB0aGUgaW5vZGUsIHdoaWNoIGluIHR1cm4gY2FsbHMgYGlub2RlX3NiX2xpc3RfZGVsKClgLiBUaGlzIGZ1bmN0aW9uICphY3F1aXJlcyogdGhlIGBzX2lub2RlX2xpc3RfbG9ja2AgdG8gcmVtb3ZlIHRoZSBpbm9kZSBmcm9tIHRoZSBzdXBlcmJsb2NrJiMzOTtzIGlub2RlIGxpc3QgKGBpX3NiX2xpc3RgKS4KCk5vdywgdGhlIGlzc3VlIGlzIHRoaXM6IEJldHdlZW4gd2hlbiB0aGUgbG9jayBpcyAqcmVsZWFzZWQqIGluIGBldmljdF9pbm9kZXNgIGFuZCB3aGVuIGl0JiMzOTtzIHJlLWFjcXVpcmVkIGluc2lkZSBgaW5vZGVfc2JfbGlzdF9kZWwoKWAsIGFub3RoZXIgdGhyZWFkIGNvdWxkIGJlIGRvaW5nIGFsbCBzb3J0cyBvZiB0aGluZ3Mgd2l0aCBpbm9kZXMuIEl0IGNvdWxkIGJlIGNhbGxpbmcgYGlwdXQoKWAsIHdoaWNoIGNvdWxkIGxlYWQgdG8gY29uY3VycmVudCBjYWxscyB0byBgZXZpY3QoKWAgYW5kIHVsdGltYXRlbHkgYGlub2RlX3NiX2xpc3RfZGVsKClgIG9uIGEgZGlmZmVyZW50IGlub2RlLgoKU3BlY2lmaWNhbGx5LCB3aGlsZSBgZXZpY3RfaW5vZGVzYCBpcyBpdGVyYXRpbmcgd2l0aCBgbGlzdF9uZXh0X2VudHJ5YCwgYnV0IHdoaWxlIGl0IHJlbGVhc2VkIHRoZSBsb2NrIGluIGBpbm9kZWAgYW5kIHNldCBgSV9GUkVFSU5HYCB0byBgQmAsIGFuZCB0aGVuIG90aGVyIHRocmVhZHMgY291bGQgYmUgZnJlZWluZyBgQi0mZ3Q7aV9zYl9saXN0Lm5leHRgLCB3aGljaCBpcyB3aGF0IHRoZSBjdXJyZW50IGl0ZXJhdGlvbiBvZiBgZXZpY3RfaW5vZGVzYCBpcyBhYm91dCB0byBsb29rIGF0LiBUaGlzIG1pZ2h0IGNhdXNlIGBsaXN0X25leHRfZW50cnlgIHRvIGFjY2VzcyBmcmVlZCBtZW1vcnkgb3IgYSBtb2RpZmllZCBsaXN0IGVudHJ5LgoKVGhpcyBtZWFucyB3ZSBjb3VsZCBoYXZlIGEgdXNlLWFmdGVyLWZyZWUgc2l0dWF0aW9uLCBhIGxpc3QgY29ycnVwdGlvbiwgb3Igd29yc2UhIFRoZSBjb21tZW50ICp0cmllcyogdG8gZXhwbGFpbiB0aGUgcmF0aW9uYWxlIGJ1dCBpdCBkb2VzbiYjMzk7dCBjb25zaWRlciAqdGhpcyogcG90ZW50aWFsIGNvbmZsaWN0LiBUaGUgY29kZSBhdHRlbXB0cyB0byBtaXRpZ2F0ZSB0aGlzIHdpdGggYElfRlJFRUlOR2AsIGJ1dCBpdCYjMzk7cyBub3QgZW5vdWdoIHRvIGNvdmVyIHRoZSBkZXNjcmliZWQgY29uZmxpY3QuCgpDcnVjaWFsbHksIGBldmljdF9pbm9kZXNgICppcyogcmVhY2hhYmxlIOKAkyBpdCYjMzk7cyBjYWxsZWQgZHVyaW5nIGZpbGVzeXN0ZW0gdW5tb3VudHMgYW5kIHNodXRkb3duLiBTeXprYWxsZXIgaXMgY2FwYWJsZSBvZiB0cmlnZ2VyaW5nIHRoaXMgY29kZSBwYXRoLgoKT2theSwgbGV0JiMzOTtzIGNvbmZpcm06CgoxLiAgKipXb3J0aEZ1enppbmc9dHJ1ZSoqOiBZZXMhIFRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaW4gYSBjb3JlIFZGUyBmdW5jdGlvbiAoYGV2aWN0X2lub2Rlc2ApIGNhbGxlZCBkdXJpbmcgdW5tb3VudHMuIFRoaXMgaW52b2x2ZXMgbG9naWMgYXJvdW5kIG1lbW9yeSBtYW5hZ2VtZW50LCBsb2NraW5nLCBhbmQgVkZTLCBtYWtpbmcgaXQgcmlwZSBmb3IgZnV6emluZy4KMi4gICoqRm9jdXNTeW1ib2xzKio6IFRoZSBwcmltYXJ5IGZvY3VzIGlzIGBldmljdF9pbm9kZXNgLiBUaGUgcGF0Y2ggZGlyZWN0bHkgbW9kaWZpZXMgdGhpcyBmdW5jdGlvbi4KClRoZXJlZm9yZSwgdGhlIHRhcmdldCBoZXJlIGlzIGZ1enppbmcgYXJvdW5kIGBldmljdF9pbm9kZXNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkaXNwb3NlX2xpc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9pbm9kZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2lub2RlLmM9Nzk5PXN0YXRpYyB2b2lkIGV2aWN0KHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvaW5vZGUuYy04NDktLypcbmZzL2lub2RlLmM6ODUwOiAqIGRpc3Bvc2VfbGlzdCAtIGRpc3Bvc2Ugb2YgdGhlIGNvbnRlbnRzIG9mIGEgbG9jYWwgbGlzdFxuZnMvaW5vZGUuYy04NTEtICogQGhlYWQ6IHRoZSBoZWFkIG9mIHRoZSBsaXN0IHRvIGZyZWVcbi0tXG5mcy9pbm9kZS5jLTg1NS0gKi9cbmZzL2lub2RlLmM6ODU2OnN0YXRpYyB2b2lkIGRpc3Bvc2VfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuZnMvaW5vZGUuYy04NTcte1xuLS1cbmZzL2lub2RlLmM9ODc4PXZvaWQgZXZpY3RfaW5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvaW5vZGUuYy05MDktXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG5mcy9pbm9kZS5jOjkxMDpcdFx0XHRkaXNwb3NlX2xpc3QoXHUwMDI2ZGlzcG9zZSk7XG5mcy9pbm9kZS5jLTkxMS1cdFx0XHRzcGluX2xvY2soXHUwMDI2c2ItXHUwMDNlc19pbm9kZV9saXN0X2xvY2spO1xuLS1cbmZzL2lub2RlLmMtOTE2LVxuZnMvaW5vZGUuYzo5MTc6XHRkaXNwb3NlX2xpc3QoXHUwMDI2ZGlzcG9zZSk7XG5mcy9pbm9kZS5jLTkxOC19XG4tLVxuZnMvaW5vZGUuYz05MzI9c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBpbm9kZV9scnVfaXNvbGF0ZShzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLFxuLS1cbmZzL2lub2RlLmMtMTAwMC0gKiB0byB0cmltIGZyb20gdGhlIExSVS4gSW5vZGVzIHRvIGJlIGZyZWVkIGFyZSBtb3ZlZCB0byBhIHRlbXBvcmFyeSBsaXN0IGFuZFxuZnMvaW5vZGUuYzoxMDAxOiAqIHRoZW4gYXJlIGZyZWVkIG91dHNpZGUgaW5vZGVfbG9jayBieSBkaXNwb3NlX2xpc3QoKS5cbmZzL2lub2RlLmMtMTAwMi0gKi9cbmZzL2lub2RlLmM9MTAwMz1sb25nIHBydW5lX2ljYWNoZV9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuLS1cbmZzL2lub2RlLmMtMTAwOS1cdFx0XHRcdCAgICAgaW5vZGVfbHJ1X2lzb2xhdGUsIFx1MDAyNmZyZWVhYmxlKTtcbmZzL2lub2RlLmM6MTAxMDpcdGRpc3Bvc2VfbGlzdChcdTAwMjZmcmVlYWJsZSk7XG5mcy9pbm9kZS5jLTEwMTEtXHRyZXR1cm4gZnJlZWQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA1OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDY1CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCYjMzk7cyBiZWVuIGNoYW5nZWQgYW5kIHdoZXJlLiBJIHNlZSBgZGlzcG9zZV9saXN0YCBpcyBzdGF0aWMsIHVzZWQgd2l0aGluIGBldmljdF9pbm9kZXNgIGFuZCBgcHJ1bmVfaWNhY2hlX3NiYC4gQnV0LCB0aGUga2V5IG1vZGlmaWNhdGlvbiBpcyBhY3R1YWxseSBpbiBgZXZpY3RfaW5vZGVzYCBpdHNlbGYsIHdoaWNoLCBpbXBvcnRhbnRseSwgaXMgKm5vdCogc3RhdGljLiBJIG5lZWQgdG8gbmFpbCBkb3duIGV4YWN0bHkgd2hpY2ggZnVuY3Rpb25zIGFyZSBhZmZlY3RlZCBmb3IgdGhpcyByZXZpZXcsIHNvIEkmIzM5O20gYXNraW5nIG15c2VsZiwgY2FuIEkgaW5jbHVkZSBgZ2VuZXJpY19zaHV0ZG93bl9zdXBlcmAgYXMgd2VsbCwgb3IgaXMgaXQganVzdCBgZXZpY3RfaW5vZGVzYCB0aGF0JiMzOTtzIHJlbGV2YW50IGhlcmU/IFRoZSBkb2N1bWVudGF0aW9uIHNheXMgdG8gZm9jdXMgb24gZnVuY3Rpb25zIGltcGxlbWVudGluZyB0aGUgYWx0ZXJlZCBsb2dpYyBkaXJlY3RseSwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cy4gVGhhdCBtYWtlcyBpdCBwcmV0dHkgY2xlYXI6IGBldmljdF9pbm9kZXNgIGlzIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UuCgpOb3csIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJIHNob3VsZCBjaGVjayB0aGF0IG5vdGhpbmcgZWxzZSBpbiB0aGUgc3Vycm91bmRpbmcgY29kZSBoYXMgYmVlbiB0b3VjaGVkLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGp1c3QgYGV2aWN0X2lub2Rlc2AuIEdvb2QuIE5leHQsIEkgbmVlZCB0byBjaGVjayBpZiB0aGVzZSBjaGFuZ2VzIGFyZSBjb250aW5nZW50IG9uIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgc2hvdWxkIGNoZWNrIGBmcy9pbm9kZS5jYCBzcGVjaWZpY2FsbHksIGFuZCBzZWUgaWYgdGhlIGNoYW5nZXMgdG8gYGV2aWN0X2lub2Rlc2AgYXJlIGNvbmRpdGlvbmFsIG9uIGFueXRoaW5nLiBMZXQmIzM5O3Mgc2VlIHdoYXQgYGZzL01ha2VmaWxlYCBzYXlzIGFyb3VuZCBgaW5vZGUub2AuIFRoYXQgc2hvdWxkIHRlbGwgbWUgaWYgdGhlcmUgYXJlIGFueSBidWlsZC10aW1lIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA1OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lub2RlXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy85cC9NYWtlZmlsZT0yPW9iai0kKENPTkZJR185UF9GUykgOj0gOXAub1xuLS1cbmZzLzlwL01ha2VmaWxlLTUtXHR2ZnNfc3VwZXIubyBcXFxuZnMvOXAvTWFrZWZpbGU6NjpcdHZmc19pbm9kZS5vIFxcXG5mcy85cC9NYWtlZmlsZS03LVx0dmZzX2lub2RlX2RvdGwubyBcXFxuLS1cbmZzL01ha2VmaWxlPTEwPW9iai15IDo9XHRvcGVuLm8gcmVhZF93cml0ZS5vIGZpbGVfdGFibGUubyBzdXBlci5vIFxcXG5mcy9NYWtlZmlsZS0xMS1cdFx0Y2hhcl9kZXYubyBzdGF0Lm8gZXhlYy5vIHBpcGUubyBuYW1laS5vIGZjbnRsLm8gXFxcbmZzL01ha2VmaWxlOjEyOlx0XHRpb2N0bC5vIHJlYWRkaXIubyBzZWxlY3QubyBkY2FjaGUubyBpbm9kZS5vIFxcXG5mcy9NYWtlZmlsZToxMzpcdFx0YXR0ci5vIGJhZF9pbm9kZS5vIGZpbGUubyBmaWxlc3lzdGVtcy5vIG5hbWVzcGFjZS5vIFxcXG5mcy9NYWtlZmlsZS0xNC1cdFx0c2VxX2ZpbGUubyB4YXR0ci5vIGxpYmZzLm8gZnMtd3JpdGViYWNrLm8gXFxcbi0tXG5mcy9hZGZzL01ha2VmaWxlPTY9b2JqLSQoQ09ORklHX0FERlNfRlMpICYjNDM7PSBhZGZzLm9cbmZzL2FkZnMvTWFrZWZpbGUtNy1cbmZzL2FkZnMvTWFrZWZpbGU6ODphZGZzLW9ianMgOj0gZGlyLm8gZGlyX2YubyBkaXJfZnBsdXMubyBmaWxlLm8gaW5vZGUubyBtYXAubyBzdXBlci5vXG4tLVxuZnMvYWZmcy9NYWtlZmlsZT04PW9iai0kKENPTkZJR19BRkZTX0ZTKSAmIzQzOz0gYWZmcy5vXG5mcy9hZmZzL01ha2VmaWxlLTktXG5mcy9hZmZzL01ha2VmaWxlOjEwOmFmZnMtb2JqcyA6PSBzdXBlci5vIG5hbWVpLm8gaW5vZGUubyBmaWxlLm8gZGlyLm8gYW1pZ2FmZnMubyBiaXRtYXAubyBzeW1saW5rLm9cbi0tXG5mcy9hZnMvTWFrZWZpbGU9Nj1rYWZzLXkgOj0gXFxcbi0tXG5mcy9hZnMvTWFrZWZpbGUtMjItXHRmc19wcm9iZS5vIFxcXG5mcy9hZnMvTWFrZWZpbGU6MjM6XHRpbm9kZS5vIFxcXG5mcy9hZnMvTWFrZWZpbGUtMjQtXHRtYWluLm8gXFxcbi0tXG5mcy9hdXRvZnMvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfQVVUT0ZTX0ZTKSAmIzQzOz0gYXV0b2ZzNC5vXG5mcy9hdXRvZnMvTWFrZWZpbGUtNy1cbmZzL2F1dG9mcy9NYWtlZmlsZTo4OmF1dG9mczQtb2JqcyA6PSBpbml0Lm8gaW5vZGUubyByb290Lm8gc3ltbGluay5vIHdhaXRxLm8gZXhwaXJlLm8gZGV2LWlvY3RsLm9cbi0tXG5mcy9iZWZzL01ha2VmaWxlPTc9Y2NmbGFncy0kKENPTkZJR19CRUZTX0RFQlVHKSAgICAmIzQzOz0gLURERUJVR1xuZnMvYmVmcy9NYWtlZmlsZTo4OmJlZnMtb2JqcyA6PSBkYXRhc3RyZWFtLm8gYnRyZWUubyBzdXBlci5vIGlub2RlLm8gZGVidWcubyBpby5vIGxpbnV4dmZzLm9cbi0tXG5mcy9idHJmcy9NYWtlZmlsZT0yND1idHJmcy15ICYjNDM7PSBzdXBlci5vIGN0cmVlLm8gZXh0ZW50LXRyZWUubyBwcmludC10cmVlLm8gcm9vdC10cmVlLm8gZGlyLWl0ZW0ubyBcXFxuZnMvYnRyZnMvTWFrZWZpbGUtMjUtXHQgICBmaWxlLWl0ZW0ubyBpbm9kZS1pdGVtLm8gZGlzay1pby5vIFxcXG5mcy9idHJmcy9NYWtlZmlsZToyNjpcdCAgIHRyYW5zYWN0aW9uLm8gaW5vZGUubyBmaWxlLm8gZGVmcmFnLm8gXFxcbmZzL2J0cmZzL01ha2VmaWxlLTI3LVx0ICAgZXh0ZW50X21hcC5vIHN5c2ZzLm8gYWNjZXNzb3JzLm8geGF0dHIubyBvcmRlcmVkLWRhdGEubyBcXFxuLS1cbmZzL2J0cmZzL01ha2VmaWxlLTI5LVx0ICAgZXhwb3J0Lm8gdHJlZS1sb2cubyBmcmVlLXNwYWNlLWNhY2hlLm8gemxpYi5vIGx6by5vIHpzdGQubyBcXFxuZnMvYnRyZnMvTWFrZWZpbGU6MzA6XHQgICBjb21wcmVzc2lvbi5vIGRlbGF5ZWQtcmVmLm8gcmVsb2NhdGlvbi5vIGRlbGF5ZWQtaW5vZGUubyBzY3J1Yi5vIFxcXG5mcy9idHJmcy9NYWtlZmlsZS0zMS1cdCAgIGJhY2tyZWYubyB1bGlzdC5vIHFncm91cC5vIHNlbmQubyBkZXYtcmVwbGFjZS5vIHJhaWQ1Ni5vIFxcXG4tLVxuZnMvY2VwaC9NYWtlZmlsZT02PW9iai0kKENPTkZJR19DRVBIX0ZTKSAmIzQzOz0gY2VwaC5vXG5mcy9jZXBoL01ha2VmaWxlLTctXG5mcy9jZXBoL01ha2VmaWxlOjg6Y2VwaC15IDo9IHN1cGVyLm8gaW5vZGUubyBkaXIubyBmaWxlLm8gbG9ja3MubyBhZGRyLm8gaW9jdGwubyBcXFxuZnMvY2VwaC9NYWtlZmlsZS05LVx0ZXhwb3J0Lm8gY2Fwcy5vIHNuYXAubyB4YXR0ci5vIHF1b3RhLm8gaW8ubyBcXFxuLS1cbmZzL2NvZGEvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfQ09EQV9GUykgJiM0Mzs9IGNvZGEub1xuZnMvY29kYS9NYWtlZmlsZS03LVxuZnMvY29kYS9NYWtlZmlsZTo4OmNvZGEtb2JqcyA6PSBwc2Rldi5vIGNhY2hlLm8gY25vZGUubyBpbm9kZS5vIGRpci5vIGZpbGUubyB1cGNhbGwubyBcXFxuZnMvY29kYS9NYWtlZmlsZS05LVx0ICAgICBjb2RhX2xpbnV4Lm8gc3ltbGluay5vIHBpb2N0bC5vXG4tLVxuZnMvY29uZmlnZnMvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfQ09ORklHRlNfRlMpXHQmIzQzOz0gY29uZmlnZnMub1xuZnMvY29uZmlnZnMvTWFrZWZpbGUtNy1cbmZzL2NvbmZpZ2ZzL01ha2VmaWxlOjg6Y29uZmlnZnMtb2Jqc1x0Oj0gaW5vZGUubyBmaWxlLm8gZGlyLm8gc3ltbGluay5vIG1vdW50Lm8gaXRlbS5vXG4tLVxuZnMvY3JhbWZzL01ha2VmaWxlPTY9b2JqLSQoQ09ORklHX0NSQU1GUykgJiM0Mzs9IGNyYW1mcy5vXG5mcy9jcmFtZnMvTWFrZWZpbGUtNy1cbmZzL2NyYW1mcy9NYWtlZmlsZTo4OmNyYW1mcy1vYmpzIDo9IGlub2RlLm8gdW5jb21wcmVzcy5vXG4tLVxuZnMvZGVidWdmcy9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvZGVidWdmcy9NYWtlZmlsZToyOmRlYnVnZnMtb2Jqc1x0Oj0gaW5vZGUubyBmaWxlLm9cbmZzL2RlYnVnZnMvTWFrZWZpbGUtMy1cbi0tXG5mcy9kZXZwdHMvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfVU5JWDk4X1BUWVMpXHRcdCYjNDM7PSBkZXZwdHMub1xuZnMvZGV2cHRzL01ha2VmaWxlLTctXG5mcy9kZXZwdHMvTWFrZWZpbGU6ODpkZXZwdHMtJChDT05GSUdfVU5JWDk4X1BUWVMpXHRcdDo9IGlub2RlLm9cbi0tXG5mcy9lY3J5cHRmcy9NYWtlZmlsZT02PW9iai0kKENPTkZJR19FQ1JZUFRfRlMpICYjNDM7PSBlY3J5cHRmcy5vXG5mcy9lY3J5cHRmcy9NYWtlZmlsZS03LVxuZnMvZWNyeXB0ZnMvTWFrZWZpbGU6ODplY3J5cHRmcy15IDo9IGRlbnRyeS5vIGZpbGUubyBpbm9kZS5vIG1haW4ubyBzdXBlci5vIG1tYXAubyByZWFkX3dyaXRlLm8gXFxcbmZzL2VjcnlwdGZzL01ha2VmaWxlLTktXHQgICAgICBjcnlwdG8ubyBrZXlzdG9yZS5vIGt0aHJlYWQubyBkZWJ1Zy5vXG4tLVxuZnMvZWZpdmFyZnMvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfRUZJVkFSX0ZTKVx0XHQmIzQzOz0gZWZpdmFyZnMub1xuZnMvZWZpdmFyZnMvTWFrZWZpbGUtNy1cbmZzL2VmaXZhcmZzL01ha2VmaWxlOjg6ZWZpdmFyZnMtb2Jqc1x0XHRcdDo9IGlub2RlLm8gZmlsZS5vIHN1cGVyLm8gdmFycy5vXG4tLVxuZnMvZXJvZnMvTWFrZWZpbGU9Mz1vYmotJChDT05GSUdfRVJPRlNfRlMpICYjNDM7PSBlcm9mcy5vXG5mcy9lcm9mcy9NYWtlZmlsZTo0OmVyb2ZzLW9ianMgOj0gc3VwZXIubyBpbm9kZS5vIGRhdGEubyBuYW1laS5vIGRpci5vIHN5c2ZzLm9cbmZzL2Vyb2ZzL01ha2VmaWxlLTUtZXJvZnMtJChDT05GSUdfRVJPRlNfRlNfWEFUVFIpICYjNDM7PSB4YXR0ci5vXG4tLVxuZnMvZXhmYXQvTWFrZWZpbGU9NT1vYmotJChDT05GSUdfRVhGQVRfRlMpICYjNDM7PSBleGZhdC5vXG5mcy9leGZhdC9NYWtlZmlsZS02LVxuZnMvZXhmYXQvTWFrZWZpbGU6NzpleGZhdC15XHQ6PSBpbm9kZS5vIG5hbWVpLm8gZGlyLm8gc3VwZXIubyBmYXRlbnQubyBjYWNoZS5vIG5scy5vIG1pc2MubyBcXFxuZnMvZXhmYXQvTWFrZWZpbGUtOC1cdCAgIGZpbGUubyBiYWxsb2MubyBpb21hcC5vXG4tLVxuZnMvZXh0Mi9NYWtlZmlsZT02PW9iai0kKENPTkZJR19FWFQyX0ZTKSAmIzQzOz0gZXh0Mi5vXG5mcy9leHQyL01ha2VmaWxlLTctXG5mcy9leHQyL01ha2VmaWxlOjg6ZXh0Mi15IDo9IGJhbGxvYy5vIGRpci5vIGZpbGUubyBpYWxsb2MubyBpbm9kZS5vIFxcXG5mcy9leHQyL01ha2VmaWxlLTktXHQgIGlvY3RsLm8gbmFtZWkubyBzdXBlci5vIHN5bWxpbmsubyB0cmFjZS5vXG4tLVxuZnMvZXh0NC9NYWtlZmlsZT04PWV4dDQteVx0Oj0gYmFsbG9jLm8gYml0bWFwLm8gYmxvY2tfdmFsaWRpdHkubyBkaXIubyBleHQ0X2piZDIubyBleHRlbnRzLm8gXFxcbmZzL2V4dDQvTWFrZWZpbGUtOS1cdFx0ZXh0ZW50c19zdGF0dXMubyBmaWxlLm8gZnNtYXAubyBmc3luYy5vIGhhc2gubyBpYWxsb2MubyBcXFxuZnMvZXh0NC9NYWtlZmlsZToxMDpcdFx0aW5kaXJlY3QubyBpbmxpbmUubyBpbm9kZS5vIGlvY3RsLm8gbWJhbGxvYy5vIG1pZ3JhdGUubyBcXFxuZnMvZXh0NC9NYWtlZmlsZS0xMS1cdFx0bW1wLm8gbW92ZV9leHRlbnQubyBuYW1laS5vIHBhZ2UtaW8ubyByZWFkcGFnZS5vIHJlc2l6ZS5vIFxcXG4tLVxuZnMvZjJmcy9NYWtlZmlsZT0yPW9iai0kKENPTkZJR19GMkZTX0ZTKSAmIzQzOz0gZjJmcy5vXG5mcy9mMmZzL01ha2VmaWxlLTMtXG5mcy9mMmZzL01ha2VmaWxlOjQ6ZjJmcy15XHRcdDo9IGRpci5vIGZpbGUubyBpbm9kZS5vIG5hbWVpLm8gaGFzaC5vIHN1cGVyLm8gaW5saW5lLm9cbmZzL2YyZnMvTWFrZWZpbGUtNS1mMmZzLXlcdFx0JiM0Mzs9IGNoZWNrcG9pbnQubyBnYy5vIGRhdGEubyBub2RlLm8gc2VnbWVudC5vIHJlY292ZXJ5Lm9cbi0tXG5mcy9mYXQvTWFrZWZpbGU9OD1vYmotJChDT05GSUdfTVNET1NfRlMpICYjNDM7PSBtc2Rvcy5vXG5mcy9mYXQvTWFrZWZpbGUtOS1cbmZzL2ZhdC9NYWtlZmlsZToxMDpmYXQteSA6PSBjYWNoZS5vIGRpci5vIGZhdGVudC5vIGZpbGUubyBpbm9kZS5vIG1pc2MubyBuZnMub1xuZnMvZmF0L01ha2VmaWxlLTExLXZmYXQteSA6PSBuYW1laV92ZmF0Lm9cbi0tXG5mcy9mdXNlL01ha2VmaWxlPTEzPWZ1c2UteSA6PSB0cmFjZS5vXHQjIHB1dCB0cmFjZS5vIGZpcnN0IHNvIHdlIHNlZSBmdHJhY2UgZXJyb3JzIHNvb25lclxuZnMvZnVzZS9NYWtlZmlsZToxNDpmdXNlLXkgJiM0Mzs9IGRldi5vIGRpci5vIGZpbGUubyBpbm9kZS5vIGNvbnRyb2wubyB4YXR0ci5vIGFjbC5vIHJlYWRkaXIubyBpb2N0bC5vIHJlcV90aW1lb3V0Lm8gcmVxLm9cbmZzL2Z1c2UvTWFrZWZpbGUtMTUtZnVzZS15ICYjNDM7PSBwb2xsLm8gbm90aWZ5Lm9cbi0tXG5mcy9nZnMyL01ha2VmaWxlPTQ9Z2ZzMi15IDo9IGFjbC5vIGJtYXAubyBkaXIubyB4YXR0ci5vIGdsb2NrLm8gXFxcbi0tXG5mcy9nZnMyL01ha2VmaWxlLTYtXHRhb3BzLm8gZGVudHJ5Lm8gZXhwb3J0Lm8gZmlsZS5vIFxcXG5mcy9nZnMyL01ha2VmaWxlOjc6XHRvcHNfZnN0eXBlLm8gaW5vZGUubyBxdW90YS5vIFxcXG5mcy9nZnMyL01ha2VmaWxlLTgtXHRyZWNvdmVyeS5vIHJncnAubyBzdXBlci5vIHN5cy5vIHRyYW5zLm8gdXRpbC5vXG4tLVxuZnMvaGZzL01ha2VmaWxlPTg9aGZzLW9ianMgOj0gYml0bWFwLm8gYmZpbmQubyBibm9kZS5vIGJyZWMubyBidHJlZS5vIFxcXG5mcy9oZnMvTWFrZWZpbGU6OTpcdCAgICBjYXRhbG9nLm8gZGlyLm8gZXh0ZW50Lm8gaW5vZGUubyBhdHRyLm8gbWRiLm8gXFxcbmZzL2hmcy9NYWtlZmlsZS0xMC0gICAgICAgICAgICBwYXJ0X3RibC5vIHN0cmluZy5vIHN1cGVyLm8gc3lzZGVwLm8gdHJhbnMub1xuLS1cbmZzL2hmc3BsdXMvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfSEZTUExVU19GUykgJiM0Mzs9IGhmc3BsdXMub1xuZnMvaGZzcGx1cy9NYWtlZmlsZS03LVxuZnMvaGZzcGx1cy9NYWtlZmlsZTo4Omhmc3BsdXMtb2JqcyA6PSBzdXBlci5vIG9wdGlvbnMubyBpbm9kZS5vIGlvY3RsLm8gZXh0ZW50cy5vIGNhdGFsb2cubyBkaXIubyBidHJlZS5vIFxcXG5mcy9oZnNwbHVzL01ha2VmaWxlLTktXHRcdGJub2RlLm8gYnJlYy5vIGJmaW5kLm8gdGFibGVzLm8gdW5pY29kZS5vIHdyYXBwZXIubyBiaXRtYXAubyBwYXJ0X3RibC5vIFxcXG4tLVxuZnMvaHBmcy9NYWtlZmlsZT04PWhwZnMtb2JqcyA6PSBhbGxvYy5vIGFub2RlLm8gYnVmZmVyLm8gZGVudHJ5Lm8gZGlyLm8gZG5vZGUubyBlYS5vIGZpbGUubyBcXFxuZnMvaHBmcy9NYWtlZmlsZTo5Olx0ICAgICBpbm9kZS5vIG1hcC5vIG5hbWUubyBuYW1laS5vIHN1cGVyLm9cbi0tXG5mcy9odWdldGxiZnMvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfSFVHRVRMQkZTKSAmIzQzOz0gaHVnZXRsYmZzLm9cbmZzL2h1Z2V0bGJmcy9NYWtlZmlsZS03LVxuZnMvaHVnZXRsYmZzL01ha2VmaWxlOjg6aHVnZXRsYmZzLW9ianMgOj0gaW5vZGUub1xuLS1cbmZzL2lzb2ZzL01ha2VmaWxlPTY9b2JqLSQoQ09ORklHX0lTTzk2NjBfRlMpICYjNDM7PSBpc29mcy5vXG5mcy9pc29mcy9NYWtlZmlsZS03LVxuZnMvaXNvZnMvTWFrZWZpbGU6ODppc29mcy15IFx0XHQ6PSBuYW1laS5vIGlub2RlLm8gZGlyLm8gdXRpbC5vIHJvY2subyBleHBvcnQub1xuZnMvaXNvZnMvTWFrZWZpbGUtOS1pc29mcy0kKENPTkZJR19KT0xJRVQpXHQmIzQzOz0gam9saWV0Lm9cbi0tXG5mcy9qZmZzMi9NYWtlZmlsZT05PWpmZnMyLXlcdDo9IGNvbXByLm8gZGlyLm8gZmlsZS5vIGlvY3RsLm8gbm9kZWxpc3QubyBtYWxsb2Mub1xuZnMvamZmczIvTWFrZWZpbGU6MTA6amZmczIteVx0JiM0Mzs9IHJlYWQubyBub2RlbWdtdC5vIHJlYWRpbm9kZS5vIHdyaXRlLm8gc2Nhbi5vIGdjLm9cbmZzL2pmZnMyL01ha2VmaWxlLTExLWpmZnMyLXlcdCYjNDM7PSBzeW1saW5rLm8gYnVpbGQubyBlcmFzZS5vIGJhY2tncm91bmQubyBmcy5vIHdyaXRldi5vXG4tLVxuZnMvamZzL01ha2VmaWxlPTY9b2JqLSQoQ09ORklHX0pGU19GUykgJiM0Mzs9IGpmcy5vXG5mcy9qZnMvTWFrZWZpbGUtNy1cbmZzL2pmcy9NYWtlZmlsZTo4Ompmcy15ICAgIDo9IHN1cGVyLm8gZmlsZS5vIGlub2RlLm8gbmFtZWkubyBqZnNfbW91bnQubyBqZnNfdW1vdW50Lm8gXFxcbmZzL2pmcy9NYWtlZmlsZS05LVx0ICAgIGpmc194dHJlZS5vIGpmc19pbWFwLm8gamZzX2RlYnVnLm8gamZzX2RtYXAubyBcXFxuZnMvamZzL01ha2VmaWxlOjEwOlx0ICAgIGpmc191bmljb2RlLm8gamZzX2R0cmVlLm8gamZzX2lub2RlLm8gamZzX2Rpc2NhcmQubyBcXFxuZnMvamZzL01ha2VmaWxlLTExLVx0ICAgIGpmc19leHRlbnQubyBzeW1saW5rLm8gamZzX21ldGFwYWdlLm8gXFxcbi0tXG5mcy9rZXJuZnMvTWFrZWZpbGUtNS1cbmZzL2tlcm5mcy9NYWtlZmlsZTo2Om9iai15XHRcdDo9IG1vdW50Lm8gaW5vZGUubyBkaXIubyBmaWxlLm8gc3ltbGluay5vXG4tLVxuZnMvbWluaXgvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfTUlOSVhfRlMpICYjNDM7PSBtaW5peC5vXG5mcy9taW5peC9NYWtlZmlsZS03LVxuZnMvbWluaXgvTWFrZWZpbGU6ODptaW5peC1vYmpzIDo9IGJpdG1hcC5vIGl0cmVlX3YxLm8gaXRyZWVfdjIubyBuYW1laS5vIGlub2RlLm8gZmlsZS5vIGRpci5vXG4tLVxuZnMvbmZzL01ha2VmaWxlPTg9Q0ZMQUdTX25mc3RyYWNlLm8gJiM0Mzs9IC1JJChzcmMpXG5mcy9uZnMvTWFrZWZpbGU6OTpuZnMteSBcdFx0XHQ6PSBjbGllbnQubyBkaXIubyBmaWxlLm8gZ2V0cm9vdC5vIGlub2RlLm8gc3VwZXIubyBcXFxuZnMvbmZzL01ha2VmaWxlLTEwLVx0XHRcdCAgIGlvLm8gZGlyZWN0Lm8gcGFnZWxpc3QubyByZWFkLm8gc3ltbGluay5vIHVubGluay5vIFxcXG4tLVxuZnMvbmlsZnMyL01ha2VmaWxlPTI9b2JqLSQoQ09ORklHX05JTEZTMl9GUykgJiM0Mzs9IG5pbGZzMi5vXG5mcy9uaWxmczIvTWFrZWZpbGU6MzpuaWxmczIteSA6PSBpbm9kZS5vIGZpbGUubyBkaXIubyBzdXBlci5vIG5hbWVpLm8gcGFnZS5vIG1kdC5vIFxcXG5mcy9uaWxmczIvTWFrZWZpbGUtNC1cdGJ0bm9kZS5vIGJtYXAubyBidHJlZS5vIGRpcmVjdC5vIGRhdC5vIHJlY292ZXJ5Lm8gXFxcbmZzL25pbGZzMi9NYWtlZmlsZS01LVx0dGhlX25pbGZzLm8gc2VnYnVmLm8gc2VnbWVudC5vIGNwZmlsZS5vIHN1ZmlsZS5vIFxcXG5mcy9uaWxmczIvTWFrZWZpbGU6NjpcdGlmaWxlLm8gYWxsb2MubyBnY2lub2RlLm8gaW9jdGwubyBzeXNmcy5vXG4tLVxuZnMvbnRmcy9NYWtlZmlsZT0zPW9iai0kKENPTkZJR19OVEZTX0ZTKSAmIzQzOz0gbnRmcy5vXG5mcy9udGZzL01ha2VmaWxlLTQtXG5mcy9udGZzL01ha2VmaWxlOjU6bnRmcy15IDo9IGFvcHMubyBhdHRyaWIubyBjb2xsYXRlLm8gZGlyLm8gZmlsZS5vIGluZGV4Lm8gaW5vZGUubyBcXFxuZnMvbnRmcy9NYWtlZmlsZS02LVx0ICBtZnQubyBtc3QubyBuYW1laS5vIHJ1bmxpc3QubyBzdXBlci5vIHVuaXN0ci5vIGF0dHJsaXN0Lm8gZWEubyBcXFxuLS1cbmZzL250ZnMzL01ha2VmaWxlPTMzPW50ZnMzLXkgOj1cdGF0dHJpYi5vIFxcXG4tLVxuZnMvbnRmczMvTWFrZWZpbGUtNDEtXHRcdGZzbG9nLm8gXFxcbmZzL250ZnMzL01ha2VmaWxlOjQyOlx0XHRpbm9kZS5vIFxcXG5mcy9udGZzMy9NYWtlZmlsZS00My1cdFx0aW5kZXgubyBcXFxuLS1cbmZzL29jZnMyL01ha2VmaWxlPTExPW9jZnMyLW9ianMgOj0gXFxcbi0tXG5mcy9vY2ZzMi9NYWtlZmlsZS0yMi1cdGhlYXJ0YmVhdC5vIFx0XHRcXFxuZnMvb2NmczIvTWFrZWZpbGU6MjM6XHRpbm9kZS5vIFx0XHRcXFxuZnMvb2NmczIvTWFrZWZpbGUtMjQtXHRpb2N0bC5vIFx0XHRcXFxuLS1cbmZzL29tZnMvTWFrZWZpbGU9Mz1vYmotJChDT05GSUdfT01GU19GUykgJiM0Mzs9IG9tZnMub1xuZnMvb21mcy9NYWtlZmlsZS00LVxuZnMvb21mcy9NYWtlZmlsZTo1Om9tZnMteSA6PSBiaXRtYXAubyBkaXIubyBmaWxlLm8gaW5vZGUub1xuLS1cbmZzL29wZW5wcm9tZnMvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfU1VOX09QRU5QUk9NRlMpICYjNDM7PSBvcGVucHJvbWZzLm9cbmZzL29wZW5wcm9tZnMvTWFrZWZpbGUtNy1cbmZzL29wZW5wcm9tZnMvTWFrZWZpbGU6ODpvcGVucHJvbWZzLW9ianMgOj0gaW5vZGUub1xuLS1cbmZzL29yYW5nZWZzL01ha2VmaWxlPTg9b3JhbmdlZnMtb2JqcyA6PSBhY2wubyBmaWxlLm8gb3JhbmdlZnMtY2FjaGUubyBvcmFuZ2Vmcy11dGlscy5vIHhhdHRyLm8gXFxcbmZzL29yYW5nZWZzL01ha2VmaWxlOjk6XHRcdCBkY2FjaGUubyBpbm9kZS5vIG9yYW5nZWZzLXN5c2ZzLm8gb3JhbmdlZnMtbW9kLm8gc3VwZXIubyBcXFxuZnMvb3JhbmdlZnMvTWFrZWZpbGUtMTAtXHRcdCBkZXZvcmFuZ2Vmcy1yZXEubyBuYW1laS5vIHN5bWxpbmsubyBkaXIubyBvcmFuZ2Vmcy1idWZtYXAubyBcXFxuLS1cbmZzL292ZXJsYXlmcy9NYWtlZmlsZT02PW9iai0kKENPTkZJR19PVkVSTEFZX0ZTKSAmIzQzOz0gb3ZlcmxheS5vXG5mcy9vdmVybGF5ZnMvTWFrZWZpbGUtNy1cbmZzL292ZXJsYXlmcy9NYWtlZmlsZTo4Om92ZXJsYXktb2JqcyA6PSBzdXBlci5vIG5hbWVpLm8gdXRpbC5vIGlub2RlLm8gZmlsZS5vIGRpci5vIHJlYWRkaXIubyBcXFxuZnMvb3ZlcmxheWZzL01ha2VmaWxlLTktXHRcdGNvcHlfdXAubyBleHBvcnQubyBwYXJhbXMubyB4YXR0cnMub1xuLS1cbmZzL3Byb2MvTWFrZWZpbGU9MTA9cHJvYy0kKENPTkZJR19NTVUpXHQ6PSB0YXNrX21tdS5vXG5mcy9wcm9jL01ha2VmaWxlLTExLVxuZnMvcHJvYy9NYWtlZmlsZToxMjpwcm9jLXkgICAgICAgJiM0Mzs9IGlub2RlLm8gcm9vdC5vIGJhc2UubyBnZW5lcmljLm8gYXJyYXkubyBcXFxuZnMvcHJvYy9NYWtlZmlsZS0xMy1cdFx0ZmQub1xuLS1cbmZzL3BzdG9yZS9NYWtlZmlsZT02PW9iai0kKENPTkZJR19QU1RPUkUpICYjNDM7PSBwc3RvcmUub1xuZnMvcHN0b3JlL01ha2VmaWxlLTctXG5mcy9wc3RvcmUvTWFrZWZpbGU6ODpwc3RvcmUtb2JqcyAmIzQzOz0gaW5vZGUubyBwbGF0Zm9ybS5vXG5mcy9wc3RvcmUvTWFrZWZpbGUtOS1wc3RvcmUtJChDT05GSUdfUFNUT1JFX0ZUUkFDRSlcdCYjNDM7PSBmdHJhY2Uub1xuLS1cbmZzL3FueDQvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfUU5YNEZTX0ZTKSAmIzQzOz0gcW54NC5vXG5mcy9xbng0L01ha2VmaWxlLTctXG5mcy9xbng0L01ha2VmaWxlOjg6cW54NC1vYmpzIDo9IGlub2RlLm8gZGlyLm8gbmFtZWkubyBiaXRtYXAub1xuLS1cbmZzL3FueDYvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfUU5YNkZTX0ZTKSAmIzQzOz0gcW54Ni5vXG5mcy9xbng2L01ha2VmaWxlLTctXG5mcy9xbng2L01ha2VmaWxlOjg6cW54Ni1vYmpzIDo9IGlub2RlLm8gZGlyLm8gbmFtZWkubyBzdXBlcl9tbWkub1xuZnMvcW54Ni9NYWtlZmlsZS05LWNjZmxhZ3MtJChDT05GSUdfUU5YNkZTX0RFQlVHKVx0JiM0Mzs9IC1EREVCVUdcbi0tXG5mcy9yYW1mcy9NYWtlZmlsZT05PWZpbGUtbW11LSQoQ09ORklHX01NVSkgOj0gZmlsZS1tbXUub1xuZnMvcmFtZnMvTWFrZWZpbGU6MTA6cmFtZnMtb2JqcyAmIzQzOz0gaW5vZGUubyAkKGZpbGUtbW11LXkpXG4tLVxuZnMvc21iL2NsaWVudC9NYWtlZmlsZT04PWNpZnMteSA6PSB0cmFjZS5vIGNpZnNmcy5vIGNpZnNfZGVidWcubyBjb25uZWN0Lm8gZGlyLm8gZmlsZS5vIFxcXG5mcy9zbWIvY2xpZW50L01ha2VmaWxlOjk6XHQgIGlub2RlLm8gbGluay5vIG1pc2MubyBuZXRtaXNjLm8gc21iZW5jcnlwdC5vIHRyYW5zcG9ydC5vIFxcXG5mcy9zbWIvY2xpZW50L01ha2VmaWxlLTEwLVx0ICBjYWNoZWRfZGlyLm8gY2lmc191bmljb2RlLm8gY2lmc2VuY3J5cHQubyBcXFxuLS1cbmZzL3NtYi9jbGllbnQvTWFrZWZpbGUtMTItXHQgIHNtYjJvcHMubyBzbWIybWFwZXJyb3IubyBzbWIydHJhbnNwb3J0Lm8gXFxcbmZzL3NtYi9jbGllbnQvTWFrZWZpbGU6MTM6XHQgIHNtYjJtaXNjLm8gc21iMnBkdS5vIHNtYjJpbm9kZS5vIHNtYjJmaWxlLm8gY2lmc2FjbC5vIGZzX2NvbnRleHQubyBcXFxuZnMvc21iL2NsaWVudC9NYWtlZmlsZS0xNC1cdCAgZG5zX3Jlc29sdmUubyBjaWZzX3NwbmVnb19uZWd0b2tlbmluaXQuYXNuMS5vIGFzbjEubyBcXFxuLS1cbmZzL3NxdWFzaGZzL01ha2VmaWxlPTY9b2JqLSQoQ09ORklHX1NRVUFTSEZTKSAmIzQzOz0gc3F1YXNoZnMub1xuZnMvc3F1YXNoZnMvTWFrZWZpbGU6NzpzcXVhc2hmcy15ICYjNDM7PSBibG9jay5vIGNhY2hlLm8gZGlyLm8gZXhwb3J0Lm8gZmlsZS5vIGZyYWdtZW50Lm8gaWQubyBpbm9kZS5vXG5mcy9zcXVhc2hmcy9NYWtlZmlsZS04LXNxdWFzaGZzLXkgJiM0Mzs9IG5hbWVpLm8gc3VwZXIubyBzeW1saW5rLm8gZGVjb21wcmVzc29yLm8gcGFnZV9hY3Rvci5vXG4tLVxuZnMvdHJhY2Vmcy9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvdHJhY2Vmcy9NYWtlZmlsZToyOnRyYWNlZnMtb2Jqc1x0Oj0gaW5vZGUub1xuZnMvdHJhY2Vmcy9NYWtlZmlsZTozOnRyYWNlZnMtb2Jqc1x0JiM0Mzs9IGV2ZW50X2lub2RlLm9cbmZzL3RyYWNlZnMvTWFrZWZpbGUtNC1cbi0tXG5mcy91ZGYvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfVURGX0ZTKSAmIzQzOz0gdWRmLm9cbmZzL3VkZi9NYWtlZmlsZS03LVxuZnMvdWRmL01ha2VmaWxlOjg6dWRmLW9ianMgICAgIDo9IGJhbGxvYy5vIGRpci5vIGZpbGUubyBpYWxsb2MubyBpbm9kZS5vIGxvd2xldmVsLm8gbmFtZWkubyBcXFxuZnMvdWRmL01ha2VmaWxlLTktXHRcdHBhcnRpdGlvbi5vIHN1cGVyLm8gdHJ1bmNhdGUubyBzeW1saW5rLm8gXFxcbi0tXG5mcy91ZnMvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfVUZTX0ZTKSAmIzQzOz0gdWZzLm9cbmZzL3Vmcy9NYWtlZmlsZS03LVxuZnMvdWZzL01ha2VmaWxlOjg6dWZzLW9ianMgOj0gYmFsbG9jLm8gY3lsaW5kZXIubyBkaXIubyBmaWxlLm8gaWFsbG9jLm8gaW5vZGUubyBcXFxuZnMvdWZzL01ha2VmaWxlLTktXHQgICAgbmFtZWkubyBzdXBlci5vIHV0aWwub1xuLS1cbmZzL3hmcy9NYWtlZmlsZT0xNj14ZnMteVx0XHRcdFx0JiM0Mzs9ICQoYWRkcHJlZml4IGxpYnhmcy8sIFxcXG4tLVxuZnMveGZzL01ha2VmaWxlLTU3LVx0XHRcdFx0ICAgeGZzX3N5bWxpbmtfcmVtb3RlLm8gXFxcbmZzL3hmcy9NYWtlZmlsZTo1ODpcdFx0XHRcdCAgIHhmc190cmFuc19pbm9kZS5vIFxcXG5mcy94ZnMvTWFrZWZpbGUtNTktXHRcdFx0XHQgICB4ZnNfdHJhbnNfcmVzdi5vIFxcXG4tLVxuZnMveGZzL01ha2VmaWxlPTcxPXhmcy15XHRcdFx0XHQmIzQzOz0geGZzX2FvcHMubyBcXFxuLS1cbmZzL3hmcy9NYWtlZmlsZS05Ni1cdFx0XHRcdCAgIHhmc19pb3BzLm8gXFxcbmZzL3hmcy9NYWtlZmlsZTo5NzpcdFx0XHRcdCAgIHhmc19pbm9kZS5vIFxcXG5mcy94ZnMvTWFrZWZpbGUtOTgtXHRcdFx0XHQgICB4ZnNfaXRhYmxlLm8gXFxcbi0tXG5mcy94ZnMvTWFrZWZpbGU9MTY5PXhmcy15XHRcdFx0XHQmIzQzOz0gJChhZGRwcmVmaXggc2NydWIvLCBcXFxuLS1cbmZzL3hmcy9NYWtlZmlsZS0xODQtXHRcdFx0XHQgICBpYWxsb2MubyBcXFxuZnMveGZzL01ha2VmaWxlOjE4NTpcdFx0XHRcdCAgIGlub2RlLm8gXFxcbmZzL3hmcy9NYWtlZmlsZS0xODYtXHRcdFx0XHQgICBpc2Nhbi5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA1OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNDU4CgkJCQkJCQlvdXRwdXQ6IDExNQoJCQkJCQkJdGhvdWdodHM6IDI5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgZnMvaW5vZGUuY2AgQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIG1vZGlmaWNhdGlvbiB0byBgZnMvaW5vZGUuY2AsIHNwZWNpZmljYWxseSB0aGUgYGV2aWN0X2lub2RlcygpYCBmdW5jdGlvbiwgd2hpY2ggaXMsIG9mIGNvdXJzZSwgY29tcGlsZWQgaW50byBldmVyeSBMaW51eCBrZXJuZWwuIE5vIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGhlcmUsIGl0JiMzOTtzIGFsd2F5cyBpbmNsdWRlZCBiYXNlZCBvbiB0aGUgYGZzL01ha2VmaWxlYCBkZWZpbml0aW9uLiBHb29kLCB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzLiBObyBzcGVjaWFsIGNvbmZpZ3VyYXRpb24gaXMgbmVlZGVkIHRvIHRyaWdnZXIgdGhlIGNoYW5nZXMuCgpNeSBpbW1lZGlhdGUgY29uY2VybnMgYXJlIHRyaWdnZXJlZDogV29ydGhGdXp6aW5nIGlzIHNldCB0byB0cnVlLCB3aGljaCBpbW1lZGlhdGVseSBncmFicyBteSBhdHRlbnRpb24uIFRoZSBjb21taXQgYWx0ZXJzIGxvY2tpbmcgYW5kIGxpc3QgaGFuZGxpbmcgd2l0aGluIGBldmljdF9pbm9kZXMoKWAsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIHN1cGVyYmxvY2sgaW5vZGUgZXZpY3Rpb24gbG9vcC4gSXQmIzM5O3MgbWVzc2luZyB3aXRoIGBzYi0mZ3Q7c19pbm9kZV9saXN0X2xvY2tgLCBhbHRlcmluZyBpdHMgdXNlIGR1cmluZyByZXNjaGVkdWxpbmcgd2l0aCBgY29uZF9yZXNjaGVkKClgLiBJbnN0ZWFkIG9mIHJlc3RhcnRpbmcgdGhlIHRyYXZlcnNhbCBhZnRlciBkaXNwb3Npbmcgb2YgaW5vZGVzLCB0aGUgY29tbWl0IGlzIGRyb3BwaW5nIGFuZCByZS1hY3F1aXJpbmcgdGhlIGxvY2sgKm1pZC10cmF2ZXJzYWwqIHdoaWxlIGtlZXBpbmcgdGhlIGN1cnJlbnQgaW5vZGUgb3V0IG9mIGBkaXNwb3NlYC4gVGhpcyBpcyBhIGJpZyByZWQgZmxhZyBmb3IgYW55IGV4cGVydC4KClRoaXMga2luZCBvZiBjaGFuZ2UgZGlyZWN0bHkgYWZmZWN0cyBjb3JlIFZGUyBiZWhhdmlvciwgcGFydGljdWxhcmx5IGR1cmluZyBmaWxlc3lzdGVtIHVubW91bnRzIGFuZCBzaHV0ZG93bi4gVGhhdCBtZWFucyB0aGlzIGhhcyB0aGUgcG90ZW50aWFsIHRvIGV4cG9zZSBsaXN0IGNvcnJ1cHRpb24sIHJhY2UgY29uZGl0aW9ucywgb3IgZXZlbiBVc2UtQWZ0ZXItRnJlZSB2dWxuZXJhYmlsaXRpZXMgZHVyaW5nIGNvbmN1cnJlbnQgaW5vZGUgb3BlcmF0aW9ucy4gVGhhdCYjMzk7cyBwcmVjaXNlbHkgdGhlIGtpbmQgb2YgdGhpbmcgdGhhdCBjYW4gbGVhZCB0byBzaWduaWZpY2FudCBzdGFiaWxpdHkgaXNzdWVzLgoKSSYjMzk7bSBmb2N1c2VkIG9uICYjMzQ7ZXZpY3RfaW5vZGVzJiMzNDsg4oCTIHRoZSByZWFzb25pbmcgaGlnaGxpZ2h0cyBpdCwgYW5kIHRoYXQmIzM5O3MgcHJlY2lzZWx5IHRoZSBmdW5jdGlvbiB3aGVyZSB0aGUgY29yZSBsb2dpYyB3YXMgY2hhbmdlZC4gVGhlIGludGVybmFsIGBkaXNwb3NlX2xpc3RgIHZhcmlhYmxlIGlzIHN0YXRpYyBhbmQgdW5leHBvcnRlZCwgc28gdGhhdCYjMzk7cyBub3Qgd2hhdCBJJiMzOTttIGludGVyZXN0ZWQgaW4gaGVyZS4gYGdlbmVyaWNfc2h1dGRvd25fc3VwZXJgIGlzIGFuIGVudHJ5IHBvaW50LCB3aGljaCBpcyB1c2VmdWwsIGJ1dCB0aGUga2V5IGlzIHRoYXQgYGV2aWN0X2lub2Rlc2AgaXRzZWxmIGlzIGEgbm9uLXN0YXRpYywgKmV4cG9ydGVkKiBmdW5jdGlvbiBhbmQgaXMgdGhlcmVmb3JlIGRpcmVjdGx5IHJlYWNoYWJsZSBhbmQgdGVzdGFibGUuIEl0JiMzOTtzICpwZXJmZWN0bHkqIHNwZWNpZmljIGFuZCBub3QgdWJpcXVpdG91cy4gSSB0aGluayB0aGF0JiMzOTtzIHRoZSBiZXN0IGZvY3VzIGZvciB0aGlzIGFuYWx5c2lzLgoKTGV0JiMzOTtzIGNhbGwgdGhlIHJlc3VsdHMgYW5kIGdldCBhIGhhbmRsZSBvbiB3aGF0IHdlJiMzOTtyZSBsb29raW5nIGF0IHdpdGggYSBtdWNoIGRlZXBlciBkaXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXZpY3RfaW5vZGVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIFZGUyBpbm9kZSBldmljdGlvbiB0cmF2ZXJzYWwgaW4gZXZpY3RfaW5vZGVzKCkuIFdoZW4gcmVzY2hlZHVsaW5nIGlzIHJlcXVpcmVkIGR1cmluZyB1bm1vdW50L3N1cGVyYmxvY2sgc2h1dGRvd24sIGl0IGRyb3BzIGFuZCByZS1hY3F1aXJlcyBzX2lub2RlX2xpc3RfbG9jayBtaWQtaXRlcmF0aW9uIGluc3RlYWQgb2YgcmVzdGFydGluZyB0cmF2ZXJzYWwgZnJvbSB0aGUgYmVnaW5uaW5nLiBUaGlzIG1vZGlmaWNhdGlvbiBpbiBsb2NraW5nIGFuZCBsaXN0IHRyYXZlcnNhbCB3aXRoaW4gYSBjb3JlIHN1YnN5c3RlbSBpcyByZWFjaGFibGUgZHVyaW5nIHVubW91bnQgb3BlcmF0aW9ucyBhbmQgY291bGQgaW50cm9kdWNlIGNvbmN1cnJlbmN5IGlzc3VlcyBvciBsaXN0IGNvcnJ1cHRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXZpY3RfaW5vZGVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIFZGUyBpbm9kZSBldmljdGlvbiB0cmF2ZXJzYWwgaW4gZXZpY3RfaW5vZGVzKCkuIFdoZW4gcmVzY2hlZHVsaW5nIGlzIHJlcXVpcmVkIGR1cmluZyB1bm1vdW50L3N1cGVyYmxvY2sgc2h1dGRvd24sIGl0IGRyb3BzIGFuZCByZS1hY3F1aXJlcyBzX2lub2RlX2xpc3RfbG9jayBtaWQtaXRlcmF0aW9uIGluc3RlYWQgb2YgcmVzdGFydGluZyB0cmF2ZXJzYWwgZnJvbSB0aGUgYmVnaW5uaW5nLiBUaGlzIG1vZGlmaWNhdGlvbiBpbiBsb2NraW5nIGFuZCBsaXN0IHRyYXZlcnNhbCB3aXRoaW4gYSBjb3JlIHN1YnN5c3RlbSBpcyByZWFjaGFibGUgZHVyaW5nIHVubW91bnQgb3BlcmF0aW9ucyBhbmQgY291bGQgaW50cm9kdWNlIGNvbmN1cnJlbmN5IGlzc3VlcyBvciBsaXN0IGNvcnJ1cHRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA1OjUyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6NTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaXRlcmF0aW9uIGxvZ2ljIGFuZCBsb2NraW5nIGluIGBldmljdF9pbm9kZXMoKWAgaW4gZnMvaW5vZGUuYyB0byBhdm9pZCByZXN0YXJ0aW5nIHRoZSBpbm9kZSBsaXN0IHdhbGsgKGBnb3RvIGFnYWluYCkgd2hlbiByZXNjaGVkdWxpbmcuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHN0ZW1taW5nIGZyb20gdGhpcyBjaGFuZ2Ugd291bGQgYmUgY29uY3VycmVuY3kgaXNzdWVzLCBsaXN0IGNvcnJ1cHRpb24sIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgKGlmIHRoZSBsaXN0IG9yIGlub2RlIHN0YXRlIGNoYW5nZXMgd2hpbGUgYHNiLVx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrYCBpcyBkcm9wcGVkKSwgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMgKHN1Y2ggYXMgQ09ORklHX0RFQlVHX0xJU1QpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgcmVhZCBvciBicmFuY2ggb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBkb2VzIG5vdCBjb3B5IGFueSBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1YTBkOTQ0YzgxNjMxN2FhYjA2ZGM4ODRlMjQ4MWEyZmIxZjc1OTk4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgMTUgMDU6NTA6MDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9pbm9kZS5jIGIvZnMvaW5vZGUuYwppbmRleCBiYTdkYTM5YmU0YTMxLi5hOWQzN2JlMzkwYTE3IDEwMDY0NAotLS0gYS9mcy9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2lub2RlLmMKQEAgLTg4MCw3ICYjNDM7ODgwLDYgQEAgdm9pZCBldmljdF9pbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCUxJU1RfSEVBRChkaXNwb3NlKTsKIAotYWdhaW46CiAJc3Bpbl9sb2NrKCZhbXA7c2ItJmd0O3NfaW5vZGVfbGlzdF9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlub2RlLCAmYW1wO3NiLSZndDtzX2lub2RlcywgaV9zYl9saXN0KSB7CiAJCWlmIChpY291bnRfcmVhZF9vbmNlKGlub2RlKSkKQEAgLTg5OSwxOSAmIzQzOzg5OCwxOSBAQCB2b2lkIGV2aWN0X2lub2RlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogCQlpbm9kZV9zdGF0ZV9zZXQoaW5vZGUsIElfRlJFRUlORyk7CiAJCWlub2RlX2xydV9saXN0X2RlbChpbm9kZSk7CiAJCXNwaW5fdW5sb2NrKCZhbXA7aW5vZGUtJmd0O2lfbG9jayk7Ci0JCWxpc3RfYWRkKCZhbXA7aW5vZGUtJmd0O2lfbHJ1LCAmYW1wO2Rpc3Bvc2UpOwogCiAJCS8qCi0JCSAqIFdlIGNhbiBoYXZlIGEgdG9uIG9mIGlub2RlcyB0byBldmljdCBhdCB1bm1vdW50IHRpbWUgZ2l2ZW4KLQkJICogZW5vdWdoIG1lbW9yeSwgY2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8gZ28gdG8gc2xlZXAgZm9yIGEKLQkJICogYml0IHNvIHdlIGRvbiYjMzk7dCBsaXZlbG9jay4KJiM0MzsJCSAqIEtlZXAgdGhpcyBpbm9kZSBvdXQgb2YgZGlzcG9zZSBzbyBpdCBzdGF5cyBvbiBzX2lub2RlcyB3aGlsZQomIzQzOwkJICogdGhlIGxpc3QgbG9jayBpcyBkcm9wcGVkLiBJX0ZSRUVJTkcgcHJldmVudHMgbmV3IHJlZmVyZW5jZXMKJiM0MzsJCSAqIGFuZCBsZWF2ZXMgZXZpY3Rpb24gdG8gdXMsIHNvIHdlIGNhbiByZXN1bWUgdGhlIHdhbGsgZnJvbSBpdC4KIAkJICovCiAJCWlmIChuZWVkX3Jlc2NoZWQoKSkgewogCQkJc3Bpbl91bmxvY2soJmFtcDtzYi0mZ3Q7c19pbm9kZV9saXN0X2xvY2spOwogCQkJY29uZF9yZXNjaGVkKCk7CiAJCQlkaXNwb3NlX2xpc3QoJmFtcDtkaXNwb3NlKTsKLQkJCWdvdG8gYWdhaW47CiYjNDM7CQkJc3Bpbl9sb2NrKCZhbXA7c2ItJmd0O3NfaW5vZGVfbGlzdF9sb2NrKTsKIAkJfQomIzQzOwkJbGlzdF9hZGQoJmFtcDtpbm9kZS0mZ3Q7aV9scnUsICZhbXA7ZGlzcG9zZSk7CiAJfQogCXNwaW5fdW5sb2NrKCZhbXA7c2ItJmd0O3NfaW5vZGVfbGlzdF9sb2NrKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM3MAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgRmlsZSBTeXN0ZW0mIzM5O3MgSW5vZGUgSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgY2hhbmdlZCBhbmQgaG93IGl0IGltcGFjdHMgdGhlIGBmcy9pbm9kZS5jYCBjb21wb25lbnQuIEkmIzM5O20gdGhpbmtpbmcgdGhlIGJlc3QgZmlyc3Qgc3RlcCBpcyBhIGNsb3NlIGluc3BlY3Rpb24gb2YgdGhlIGRpZmYgaXRzZWxmLCBidXQgSSB3YW50IHRvIHB1dCB0aGUgY2hhbmdlcyBpbiBjb250ZXh0LiBUbyBkbyB0aGF0LCBJJiMzOTttIGdvaW5nIHRvIGxldmVyYWdlIGByZWFkLWZpbGVgIHRvIGdldCBhIGxvb2sgYXQgdGhlIGNvZGUgYmxvY2sgc3Vycm91bmRpbmcgbGluZXMgODgwLTkyMCBpbiBgZnMvaW5vZGUuY2AuIFRoYXQgYXJlYSBpcyBsaWtlbHkgdG8gcmV2ZWFsIHRoZSBpbW1lZGlhdGUgYmVmb3JlIGFuZCBhZnRlciBmb3IgdGhlIGNoYW5nZXMsIG9yIHBvdGVudGlhbGx5IHRoZSBhcmVhIHRoYXQgdGhvc2UgY2hhbmdlcyByZWxhdGUgdG8uIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24gb2YgdGhlIGNoYW5nZSBpbiB0aGUgb3ZlcmFsbCBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2lub2RlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg3MDpcdCAqIGV2aWN0X2lub2Rlc1x0LSBldmljdCBhbGwgZXZpY3RhYmxlIGlub2RlcyBmb3IgYSBzdXBlcmJsb2NrXG4gODcxOlx0ICogQHNiOlx0XHRzdXBlcmJsb2NrIHRvIG9wZXJhdGUgb25cbiA4NzI6XHQgKlxuIDg3MzpcdCAqIE1ha2Ugc3VyZSB0aGF0IG5vIGlub2RlcyB3aXRoIHplcm8gcmVmY291bnQgYXJlIHJldGFpbmVkLiAgVGhpcyBpc1xuIDg3NDpcdCAqIGNhbGxlZCBieSBzdXBlcmJsb2NrIHNodXRkb3duIGFmdGVyIGhhdmluZyBTQl9BQ1RJVkUgZmxhZyByZW1vdmVkLFxuIDg3NTpcdCAqIHNvIGFueSBpbm9kZSByZWFjaGluZyB6ZXJvIHJlZmNvdW50IGR1cmluZyBvciBhZnRlciB0aGF0IGNhbGwgd2lsbFxuIDg3NjpcdCAqIGJlIGltbWVkaWF0ZWx5IGV2aWN0ZWQuXG4gODc3Olx0ICovXG4gODc4Olx0dm9pZCBldmljdF9pbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiA4Nzk6XHR7XG4gODgwOlx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuIDg4MTpcdFx0TElTVF9IRUFEKGRpc3Bvc2UpO1xuIDg4MjpcdFxuIDg4MzpcdFx0c3Bpbl9sb2NrKFx1MDAyNnNiLVx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrKTtcbiA4ODQ6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoaW5vZGUsIFx1MDAyNnNiLVx1MDAzZXNfaW5vZGVzLCBpX3NiX2xpc3QpIHtcbiA4ODU6XHRcdFx0aWYgKGljb3VudF9yZWFkX29uY2UoaW5vZGUpKVxuIDg4NjpcdFx0XHRcdGNvbnRpbnVlO1xuIDg4NzpcdFxuIDg4ODpcdFx0XHRzcGluX2xvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbiA4ODk6XHRcdFx0aWYgKGljb3VudF9yZWFkKGlub2RlKSkge1xuIDg5MDpcdFx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4gODkxOlx0XHRcdFx0Y29udGludWU7XG4gODkyOlx0XHRcdH1cbiA4OTM6XHRcdFx0aWYgKGlub2RlX3N0YXRlX3JlYWQoaW5vZGUpIFx1MDAyNiAoSV9ORVcgfCBJX0ZSRUVJTkcgfCBJX1dJTExfRlJFRSkpIHtcbiA4OTQ6XHRcdFx0XHRzcGluX3VubG9jayhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spO1xuIDg5NTpcdFx0XHRcdGNvbnRpbnVlO1xuIDg5NjpcdFx0XHR9XG4gODk3Olx0XG4gODk4Olx0XHRcdGlub2RlX3N0YXRlX3NldChpbm9kZSwgSV9GUkVFSU5HKTtcbiA4OTk6XHRcdFx0aW5vZGVfbHJ1X2xpc3RfZGVsKGlub2RlKTtcbiA5MDA6XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbiA5MDE6XHRcbiA5MDI6XHRcdFx0LypcbiA5MDM6XHRcdFx0ICogS2VlcCB0aGlzIGlub2RlIG91dCBvZiBkaXNwb3NlIHNvIGl0IHN0YXlzIG9uIHNfaW5vZGVzIHdoaWxlXG4gOTA0Olx0XHRcdCAqIHRoZSBsaXN0IGxvY2sgaXMgZHJvcHBlZC4gSV9GUkVFSU5HIHByZXZlbnRzIG5ldyByZWZlcmVuY2VzXG4gOTA1Olx0XHRcdCAqIGFuZCBsZWF2ZXMgZXZpY3Rpb24gdG8gdXMsIHNvIHdlIGNhbiByZXN1bWUgdGhlIHdhbGsgZnJvbSBpdC5cbiA5MDY6XHRcdFx0ICovXG4gOTA3Olx0XHRcdGlmIChuZWVkX3Jlc2NoZWQoKSkge1xuIDkwODpcdFx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnNiLVx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrKTtcbiA5MDk6XHRcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiA5MTA6XHRcdFx0XHRkaXNwb3NlX2xpc3QoXHUwMDI2ZGlzcG9zZSk7XG4gOTExOlx0XHRcdFx0c3Bpbl9sb2NrKFx1MDAyNnNiLVx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrKTtcbiA5MTI6XHRcdFx0fVxuIDkxMzpcdFx0XHRsaXN0X2FkZChcdTAwMjZpbm9kZS1cdTAwM2VpX2xydSwgXHUwMDI2ZGlzcG9zZSk7XG4gOTE0Olx0XHR9XG4gOTE1Olx0XHRzcGluX3VubG9jayhcdTAwMjZzYi1cdTAwM2VzX2lub2RlX2xpc3RfbG9jayk7XG4gOTE2Olx0XG4gOTE3Olx0XHRkaXNwb3NlX2xpc3QoXHUwMDI2ZGlzcG9zZSk7XG4gOTE4Olx0fVxuIDkxOTpcdEVYUE9SVF9TWU1CT0xfR1BMKGV2aWN0X2lub2Rlcyk7XG4gOTIwOlx0XG4gOTIxOlx0LypcbiA5MjI6XHQgKiBJc29sYXRlIHRoZSBpbm9kZSBmcm9tIHRoZSBMUlUgaW4gcHJlcGFyYXRpb24gZm9yIGZyZWVpbmcgaXQuXG4gOTIzOlx0ICpcbiA5MjQ6XHQgKiBJZiB0aGUgaW5vZGUgaGFzIHRoZSBJX1JFRkVSRU5DRUQgZmxhZyBzZXQsIHRoZW4gaXQgbWVhbnMgdGhhdCBpdCBoYXMgYmVlblxuIDkyNTpcdCAqIHVzZWQgcmVjZW50bHkgLSB0aGUgZmxhZyBpcyBzZXQgaW4gaXB1dF9maW5hbCgpLiBXaGVuIHdlIGVuY291bnRlciBzdWNoIGFuXG4gOTI2Olx0ICogaW5vZGUsIGNsZWFyIHRoZSBmbGFnIGFuZCBtb3ZlIGl0IHRvIHRoZSBiYWNrIG9mIHRoZSBMUlUgc28gaXQgZ2V0cyBhbm90aGVyXG4gOTI3Olx0ICogcGFzcyB0aHJvdWdoIHRoZSBMUlUgYmVmb3JlIGl0IGdldHMgcmVjbGFpbWVkLiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIG9mXG4gOTI4Olx0ICogdGhlIGZhY3Qgd2UgYXJlIGRvaW5nIGxhenkgTFJVIHVwZGF0ZXMgdG8gbWluaW1pc2UgbG9jayBjb250ZW50aW9uIHNvIHRoZVxuIDkyOTpcdCAqIExSVSBkb2VzIG5vdCBoYXZlIHN0cmljdCBvcmRlcmluZy4gSGVuY2Ugd2UgZG9uJiMzOTt0IHdhbnQgdG8gcmVjbGFpbSBpbm9kZXNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU3MwoJCQkJCQkJb3V0cHV0OiAxODQKCQkJCQkJCXRob3VnaHRzOiAxMzQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IFRoaXMgUGF0Y2ggRG9lc24mIzM5O3QgV2FycmFudCBJdCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGlzIGBldmljdF9pbm9kZXNgIGZ1bmN0aW9uIGlzIG1vZGlmaWVkLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyB0aGUgbGlzdCBpdGVyYXRpb24gYW5kIHJlc2NoZWR1bGluZyBsb2dpYy4gVGhlIG9yaWdpbmFsIGNvZGUgaGFzIGEgYGdvdG8gYWdhaW5gIGFuZCBgY29uZF9yZXNjaGVkKClgIGNhbGwuIFRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgYW4gb3B0aW1pemF0aW9uLiBSYXRoZXIgdGhhbiByZXN0YXJ0aW5nIGZyb20gdGhlIHRvcCBvZiB0aGUgbGlzdCwgaXQmIzM5O3MgbW9kaWZ5aW5nIHRoZSBwcm9jZXNzIG9mIGhvdyBpbm9kZXMgYXJlIG1vdmVkIHRvIHRoZSBgZGlzcG9zZWAgbGlzdCBkdXJpbmcgdGhlIGV2aWN0aW9uIHByb2Nlc3MsIHBhcnRpY3VsYXJseSB0byBhdm9pZCBsaXZlbG9ja3MgZHVyaW5nIHVubW91bnRzLiBUaGUgY3J1Y2lhbCBwYXJ0IGlzIHRoYXQgdGhlIHBhdGNoIHJlb3JkZXJzIHRoZSBzcGlubG9jayBhY3F1aXNpdGlvbiBhbmQgYGxpc3RfYWRkYCBjYWxscyBhcm91bmQgYGNvbmRfcmVzY2hlZCgpYC4KClRoZSBpbW1lZGlhdGUgcmVkIGZsYWdzIGFyZSBhcm91bmQgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBsaXN0cyBhbmQgbG9ja3MuIERyb3BwaW5nIHRoZSBsb2NrIGFuZCB0aGVuIHJlYWNxdWlyaW5nIGl0IHdoaWxlIGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBsaXN0IGltbWVkaWF0ZWx5IHNjcmVhbXMgJiMzNDtyYWNlIGNvbmRpdGlvbnMmIzM0OyBhbmQgcG9zc2libGUgbGlzdCBjb3JydXB0aW9uIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIEl0JiMzOTtzIHRoYXQgYGxpc3RfZm9yX2VhY2hfZW50cnlgIGNvbnRleHQgdGhhdCBJIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoLiBUaGUgcHJldmlvdXMgaW5vZGUgaXMgZmluZSwgYnV0IHRoZSAqbmV4dCogaW5vZGUsIG9yIHRoZSBsaXN0IGl0c2VsZiwgbWlnaHQgYmUgY2hhbmdlZCBieSBhIGNvbmN1cnJlbnQgcHJvY2Vzcy4KCk5vdywgY29uc2lkZXJpbmcgdGhlIHBvc3NpYmlsaXRpZXMgaGVyZSAtIGxpc3QgY29ycnVwdGlvbiwgdXNlLWFmdGVyLWZyZWUsIGNvbmN1cnJlbnQgbGlzdCBtb2RpZmljYXRpb24sIGxvY2tkZXAgdmlvbGF0aW9ucyDigJMgdGhvc2UgYWxsIGZhbGwgc3F1YXJlbHkgaW50byB0aGUgZG9tYWluIG9mIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpLCBMT0NLREVQLCBhbmQgREVCVUdfTElTVC4gVGhlc2UgdG9vbHMgYXJlIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBjYXRjaCB0aGVzZSB0eXBlcyBvZiBtZW1vcnkgc2FmZXR5IGFuZCBjb25jdXJyZW5jeSBidWdzLgoKVGhlIGNlbnRyYWwgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBpbnRyb2R1Y2UgKnVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzKiBvciBwb3RlbnRpYWwgKmtlcm5lbCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UqPyAgTGV0JiMzOTtzIHdhbGsgdGhyb3VnaCB0aGUgY3JpdGVyaWE6CgoxLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2U/KiogTm9wZS4gTm8gYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIG5ldGxpbmssIGlvY3RsLCBub3RoaW5nIHRoYXQgZGlyZWN0bHkgdHJhbnNmZXJzIGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuCjIuICAqKlVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgYnJhbmNoaW5nPyoqICBObywgZXZlcnl0aGluZyBoZXJlIGFwcGVhcnMgdG8gYmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgb3IgZGVyaXZlZCBmcm9tIHRoZSBleGlzdGluZyBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIGxpa2UgYGlub2RlYCBmcm9tIGBsaXN0X2Zvcl9lYWNoX2VudHJ5YC4KMy4gICoqVW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbj8qKiBBYnNvbHV0ZWx5IG5vdC4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9uIGlzIGludHJvZHVjZWQuCjQuICAqKkJvdW5kcyBjaGVja3MgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnk/KiogIE5vLCB0aGUgcGF0Y2ggbW9kaWZpZXMgbG9naWMgYXJvdW5kIGV4aXN0aW5nIGxpc3RzLCB0aGVyZSBhcmUgbm8gY2hhbmdlcyBoZXJlLgoKVGhlIGBpbm9kZWAgcG9pbnRlciBjb21lcyBmcm9tIGBsaXN0X2Zvcl9lYWNoX2VudHJ5YCwgc28gaXQmIzM5O3MgaW5pdGlhbGl6ZWQuIFRoZSBgZGlzcG9zZWAgbGlzdCBpcyBpbml0aWFsaXplZCB2aWEgYExJU1RfSEVBRGAuIEl0JiMzOTtzIGFsbCB2ZXJ5IHN0YW5kYXJkLgoKUmV2aWV3aW5nIHRoZSBLTVNBTiBndWlkZWxpbmVzLCBpdCBiZWNvbWVzIGFidW5kYW50bHkgY2xlYXI6CgoqKiYjMzQ7VEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwgTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4mIzM0OyoqCgpUaGUgcGF0Y2ggY2hhbmdlcyBkb24mIzM5O3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGUgcG90ZW50aWFsIGlzc3VlcyBhcmUgY29uY3VycmVuY3ktcmVsYXRlZCwgd2hpY2ggYXJlICpleGFjdGx5KiB3aGF0IEtBU0FOIGFuZCB0aGUgb3RoZXJzIGFyZSBmb3IuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOPWZhbHNlYCBpcyB0aGUgcmlnaHQgY2FsbCBoZXJlLiBNeSByYXRpb25hbGUgaXM6CgoqICAgVGhlIHBhdGNoIGFsdGVycyB0aGUgaW5vZGUgZXZpY3Rpb24gcHJvY2VzcywgZm9jdXNpbmcgb24gbGlzdCBpdGVyYXRpb24gYW5kIHJlc2NoZWR1bGluZy4KKiAgIFRoZSBwcmltYXJ5IHJpc2tzIGFyZSBjb25jdXJyZW5jeS1yZWxhdGVkIChsaXN0IGNvcnJ1cHRpb24sIHVzZS1hZnRlci1mcmVlKSwgZGV0ZWN0YWJsZSB2aWEgS0FTQU4sIERFQlVHX0xJU1QsIGFuZCBsb2NrIGRlYnVnZ2luZy4KKiAgIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBvciB1c2VyLXRvLWtlcm5lbCBsZWFrcyBhcmUgaW50cm9kdWNlZC4KKiAgIEhlbmNlLCBhIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4KClRpbWUgdG8gaW52b2tlIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA1OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpdGVyYXRpb24gbG9naWMgYW5kIGxvY2tpbmcgaW4gYGV2aWN0X2lub2RlcygpYCBpbiBmcy9pbm9kZS5jIHRvIGF2b2lkIHJlc3RhcnRpbmcgdGhlIGlub2RlIGxpc3Qgd2FsayAoYGdvdG8gYWdhaW5gKSB3aGVuIHJlc2NoZWR1bGluZy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSB0aGlzIGNoYW5nZSB3b3VsZCBiZSBjb25jdXJyZW5jeSBpc3N1ZXMsIGxpc3QgY29ycnVwdGlvbiwgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyAoaWYgdGhlIGxpc3Qgb3IgaW5vZGUgc3RhdGUgY2hhbmdlcyB3aGlsZSBgc2ItXHUwMDNlc19pbm9kZV9saXN0X2xvY2tgIGlzIGRyb3BwZWQpLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcyAoc3VjaCBhcyBDT05GSUdfREVCVUdfTElTVCkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCByZWFkIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIGRvZXMgbm90IGNvcHkgYW55IGRhdGEgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpdGVyYXRpb24gbG9naWMgYW5kIGxvY2tpbmcgaW4gYGV2aWN0X2lub2RlcygpYCBpbiBmcy9pbm9kZS5jIHRvIGF2b2lkIHJlc3RhcnRpbmcgdGhlIGlub2RlIGxpc3Qgd2FsayAoYGdvdG8gYWdhaW5gKSB3aGVuIHJlc2NoZWR1bGluZy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSB0aGlzIGNoYW5nZSB3b3VsZCBiZSBjb25jdXJyZW5jeSBpc3N1ZXMsIGxpc3QgY29ycnVwdGlvbiwgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyAoaWYgdGhlIGxpc3Qgb3IgaW5vZGUgc3RhdGUgY2hhbmdlcyB3aGlsZSBgc2ItXHUwMDNlc19pbm9kZV9saXN0X2xvY2tgIGlzIGRyb3BwZWQpLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcyAoc3VjaCBhcyBDT05GSUdfREVCVUdfTElTVCkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCByZWFkIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIGRvZXMgbm90IGNvcHkgYW55IGRhdGEgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6NTA6MTAuMjE2NjkzMTMzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0MDUwNDUyMjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV2aWN0X2lub2Rlc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGl0ZXJhdGlvbiBsb2dpYyBhbmQgbG9ja2luZyBpbiBgZXZpY3RfaW5vZGVzKClgIGluIGZzL2lub2RlLmMgdG8gYXZvaWQgcmVzdGFydGluZyB0aGUgaW5vZGUgbGlzdCB3YWxrIChgZ290byBhZ2FpbmApIHdoZW4gcmVzY2hlZHVsaW5nLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBzdGVtbWluZyBmcm9tIHRoaXMgY2hhbmdlIHdvdWxkIGJlIGNvbmN1cnJlbmN5IGlzc3VlcywgbGlzdCBjb3JydXB0aW9uLCBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIChpZiB0aGUgbGlzdCBvciBpbm9kZSBzdGF0ZSBjaGFuZ2VzIHdoaWxlIGBzYi1cXHUwMDNlc19pbm9kZV9saXN0X2xvY2tgIGlzIGRyb3BwZWQpLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcyAoc3VjaCBhcyBDT05GSUdfREVCVUdfTElTVCkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCByZWFkIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIGRvZXMgbm90IGNvcHkgYW55IGRhdGEgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBWRlMgaW5vZGUgZXZpY3Rpb24gdHJhdmVyc2FsIGluIGV2aWN0X2lub2RlcygpLiBXaGVuIHJlc2NoZWR1bGluZyBpcyByZXF1aXJlZCBkdXJpbmcgdW5tb3VudC9zdXBlcmJsb2NrIHNodXRkb3duLCBpdCBkcm9wcyBhbmQgcmUtYWNxdWlyZXMgc19pbm9kZV9saXN0X2xvY2sgbWlkLWl0ZXJhdGlvbiBpbnN0ZWFkIG9mIHJlc3RhcnRpbmcgdHJhdmVyc2FsIGZyb20gdGhlIGJlZ2lubmluZy4gVGhpcyBtb2RpZmljYXRpb24gaW4gbG9ja2luZyBhbmQgbGlzdCB0cmF2ZXJzYWwgd2l0aGluIGEgY29yZSBzdWJzeXN0ZW0gaXMgcmVhY2hhYmxlIGR1cmluZyB1bm1vdW50IG9wZXJhdGlvbnMgYW5kIGNvdWxkIGludHJvZHVjZSBjb25jdXJyZW5jeSBpc3N1ZXMgb3IgbGlzdCBjb3JydXB0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNTo1MDoxMC4yMTY3MDE1MTNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDc4NTk0MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1YTBkOTQ0YzgxNjMxN2FhYjA2ZGM4ODRlMjQ4MWEyZmIxZjc1OTk4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDE1IDA1OjUwOjA4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2lub2RlLmMgYi9mcy9pbm9kZS5jXFxuaW5kZXggYmE3ZGEzOWJlNGEzMS4uYTlkMzdiZTM5MGExNyAxMDA2NDRcXG4tLS0gYS9mcy9pbm9kZS5jXFxuKysrIGIvZnMvaW5vZGUuY1xcbkBAIC04ODAsNyArODgwLDYgQEAgdm9pZCBldmljdF9pbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4gXFx0c3RydWN0IGlub2RlICppbm9kZTtcXG4gXFx0TElTVF9IRUFEKGRpc3Bvc2UpO1xcbiBcXG4tYWdhaW46XFxuIFxcdHNwaW5fbG9jayhcXHUwMDI2c2ItXFx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrKTtcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShpbm9kZSwgXFx1MDAyNnNiLVxcdTAwM2VzX2lub2RlcywgaV9zYl9saXN0KSB7XFxuIFxcdFxcdGlmIChpY291bnRfcmVhZF9vbmNlKGlub2RlKSlcXG5AQCAtODk5LDE5ICs4OTgsMTkgQEAgdm9pZCBldmljdF9pbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4gXFx0XFx0aW5vZGVfc3RhdGVfc2V0KGlub2RlLCBJX0ZSRUVJTkcpO1xcbiBcXHRcXHRpbm9kZV9scnVfbGlzdF9kZWwoaW5vZGUpO1xcbiBcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuLVxcdFxcdGxpc3RfYWRkKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9scnUsIFxcdTAwMjZkaXNwb3NlKTtcXG4gXFxuIFxcdFxcdC8qXFxuLVxcdFxcdCAqIFdlIGNhbiBoYXZlIGEgdG9uIG9mIGlub2RlcyB0byBldmljdCBhdCB1bm1vdW50IHRpbWUgZ2l2ZW5cXG4tXFx0XFx0ICogZW5vdWdoIG1lbW9yeSwgY2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8gZ28gdG8gc2xlZXAgZm9yIGFcXG4tXFx0XFx0ICogYml0IHNvIHdlIGRvbid0IGxpdmVsb2NrLlxcbitcXHRcXHQgKiBLZWVwIHRoaXMgaW5vZGUgb3V0IG9mIGRpc3Bvc2Ugc28gaXQgc3RheXMgb24gc19pbm9kZXMgd2hpbGVcXG4rXFx0XFx0ICogdGhlIGxpc3QgbG9jayBpcyBkcm9wcGVkLiBJX0ZSRUVJTkcgcHJldmVudHMgbmV3IHJlZmVyZW5jZXNcXG4rXFx0XFx0ICogYW5kIGxlYXZlcyBldmljdGlvbiB0byB1cywgc28gd2UgY2FuIHJlc3VtZSB0aGUgd2FsayBmcm9tIGl0LlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKG5lZWRfcmVzY2hlZCgpKSB7XFxuIFxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZzYi1cXHUwMDNlc19pbm9kZV9saXN0X2xvY2spO1xcbiBcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gXFx0XFx0XFx0ZGlzcG9zZV9saXN0KFxcdTAwMjZkaXNwb3NlKTtcXG4tXFx0XFx0XFx0Z290byBhZ2FpbjtcXG4rXFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZzYi1cXHUwMDNlc19pbm9kZV9saXN0X2xvY2spO1xcbiBcXHRcXHR9XFxuK1xcdFxcdGxpc3RfYWRkKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9scnUsIFxcdTAwMjZkaXNwb3NlKTtcXG4gXFx0fVxcbiBcXHRzcGluX3VubG9jayhcXHUwMDI2c2ItXFx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA1OjUwOjExLjg2NTI2ODIxN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTM0NzI1Nzg1MDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV2aWN0X2lub2Rlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIFZGUyBpbm9kZSBldmljdGlvbiB0cmF2ZXJzYWwgaW4gZXZpY3RfaW5vZGVzKCkuIFdoZW4gcmVzY2hlZHVsaW5nIGlzIHJlcXVpcmVkIGR1cmluZyB1bm1vdW50L3N1cGVyYmxvY2sgc2h1dGRvd24sIGl0IGRyb3BzIGFuZCByZS1hY3F1aXJlcyBzX2lub2RlX2xpc3RfbG9jayBtaWQtaXRlcmF0aW9uIGluc3RlYWQgb2YgcmVzdGFydGluZyB0cmF2ZXJzYWwgZnJvbSB0aGUgYmVnaW5uaW5nLiBUaGlzIG1vZGlmaWNhdGlvbiBpbiBsb2NraW5nIGFuZCBsaXN0IHRyYXZlcnNhbCB3aXRoaW4gYSBjb3JlIHN1YnN5c3RlbSBpcyByZWFjaGFibGUgZHVyaW5nIHVubW91bnQgb3BlcmF0aW9ucyBhbmQgY291bGQgaW50cm9kdWNlIGNvbmN1cnJlbmN5IGlzc3VlcyBvciBsaXN0IGNvcnJ1cHRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNWEwZDk0NGM4MTYzMTdhYWIwNmRjODg0ZTI0ODFhMmZiMWY3NTk5OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDE1IDA1OjUwOjA4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvaW5vZGUuYyBiL2ZzL2lub2RlLmNcbmluZGV4IGJhN2RhMzliZTRhMzEuLmE5ZDM3YmUzOTBhMTcgMTAwNjQ0XG4tLS0gYS9mcy9pbm9kZS5jXG4rKysgYi9mcy9pbm9kZS5jXG5AQCAtODgwLDcgKzg4MCw2IEBAIHZvaWQgZXZpY3RfaW5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuIFx0TElTVF9IRUFEKGRpc3Bvc2UpO1xuIFxuLWFnYWluOlxuIFx0c3Bpbl9sb2NrKFx1MDAyNnNiLVx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrKTtcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoaW5vZGUsIFx1MDAyNnNiLVx1MDAzZXNfaW5vZGVzLCBpX3NiX2xpc3QpIHtcbiBcdFx0aWYgKGljb3VudF9yZWFkX29uY2UoaW5vZGUpKVxuQEAgLTg5OSwxOSArODk4LDE5IEBAIHZvaWQgZXZpY3RfaW5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHRcdGlub2RlX3N0YXRlX3NldChpbm9kZSwgSV9GUkVFSU5HKTtcbiBcdFx0aW5vZGVfbHJ1X2xpc3RfZGVsKGlub2RlKTtcbiBcdFx0c3Bpbl91bmxvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbi1cdFx0bGlzdF9hZGQoXHUwMDI2aW5vZGUtXHUwMDNlaV9scnUsIFx1MDAyNmRpc3Bvc2UpO1xuIFxuIFx0XHQvKlxuLVx0XHQgKiBXZSBjYW4gaGF2ZSBhIHRvbiBvZiBpbm9kZXMgdG8gZXZpY3QgYXQgdW5tb3VudCB0aW1lIGdpdmVuXG4tXHRcdCAqIGVub3VnaCBtZW1vcnksIGNoZWNrIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIGdvIHRvIHNsZWVwIGZvciBhXG4tXHRcdCAqIGJpdCBzbyB3ZSBkb24ndCBsaXZlbG9jay5cbitcdFx0ICogS2VlcCB0aGlzIGlub2RlIG91dCBvZiBkaXNwb3NlIHNvIGl0IHN0YXlzIG9uIHNfaW5vZGVzIHdoaWxlXG4rXHRcdCAqIHRoZSBsaXN0IGxvY2sgaXMgZHJvcHBlZC4gSV9GUkVFSU5HIHByZXZlbnRzIG5ldyByZWZlcmVuY2VzXG4rXHRcdCAqIGFuZCBsZWF2ZXMgZXZpY3Rpb24gdG8gdXMsIHNvIHdlIGNhbiByZXN1bWUgdGhlIHdhbGsgZnJvbSBpdC5cbiBcdFx0ICovXG4gXHRcdGlmIChuZWVkX3Jlc2NoZWQoKSkge1xuIFx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnNiLVx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrKTtcbiBcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiBcdFx0XHRkaXNwb3NlX2xpc3QoXHUwMDI2ZGlzcG9zZSk7XG4tXHRcdFx0Z290byBhZ2FpbjtcbitcdFx0XHRzcGluX2xvY2soXHUwMDI2c2ItXHUwMDNlc19pbm9kZV9saXN0X2xvY2spO1xuIFx0XHR9XG4rXHRcdGxpc3RfYWRkKFx1MDAyNmlub2RlLVx1MDAzZWlfbHJ1LCBcdTAwMjZkaXNwb3NlKTtcbiBcdH1cbiBcdHNwaW5fdW5sb2NrKFx1MDAyNnNiLVx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA1OjUwOjExLjg2NTI3MDEwN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE0NTU5Mjg3MDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgSW5vZGUgRXZpY3Rpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIHRoZSBgZnMvaW5vZGUuY2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBgZXZpY3RfaW5vZGVzYCBmdW5jdGlvbiB3aXRoaW4gdGhhdCBmaWxlLCB3aGljaCBpcyBhIGtleSBhcmVhIGZvciBpbm9kZSBtYW5hZ2VtZW50LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGF0IGZ1bmN0aW9uIGFuZCBpdHMgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhlIGNoYW5nZXMuXG5cbkkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyBoYXBwZW5pbmcuIEkgc2hvdWxkIGNoZWNrIHRoZSBmaWxlIGNvbnRlbnQsIHNvLCBsZXQncyB1c2UgYHJlYWQtZmlsZWAgYW5kIHB1bGwgdXAgYGZzL2lub2RlLmNgIC0gSSdsbCB3YW50IHRvIGZvY3VzIGFyb3VuZCBsaW5lIDg4MCwgYXMgdGhhdCdzIGxpa2VseSB0aGUgZm9jYWwgcG9pbnQgb2YgdGhlIHBhdGNoLiBJJ2xsIHJlYWQgdGhlIHJlbGV2YW50IHN1cnJvdW5kaW5nIGxpbmVzIHRvIGdldCB0aGUgbmVjZXNzYXJ5IGNvbnRleHQuIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGV4YWN0bHkgaG93IHRoZSBldmljdGlvbiBwcm9jZXNzIGlzIGJlaW5nIGFsdGVyZWQgYW5kIHdoYXQgbmV3IGJlaGF2aW9yIHRoZSBwYXRjaCBpbnRyb2R1Y2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgcGF0Y2ggaXMgb3B0aW1pemVkIGZvciBwZXJmb3JtYW5jZSBvciBmaXhlcyBhIGJ1Zy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE1OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6NTA6MjYuNDI0NTYxMTA2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyMDExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2lub2RlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODcwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODcwOlxcdCAqIGV2aWN0X2lub2Rlc1xcdC0gZXZpY3QgYWxsIGV2aWN0YWJsZSBpbm9kZXMgZm9yIGEgc3VwZXJibG9ja1xcbiA4NzE6XFx0ICogQHNiOlxcdFxcdHN1cGVyYmxvY2sgdG8gb3BlcmF0ZSBvblxcbiA4NzI6XFx0ICpcXG4gODczOlxcdCAqIE1ha2Ugc3VyZSB0aGF0IG5vIGlub2RlcyB3aXRoIHplcm8gcmVmY291bnQgYXJlIHJldGFpbmVkLiAgVGhpcyBpc1xcbiA4NzQ6XFx0ICogY2FsbGVkIGJ5IHN1cGVyYmxvY2sgc2h1dGRvd24gYWZ0ZXIgaGF2aW5nIFNCX0FDVElWRSBmbGFnIHJlbW92ZWQsXFxuIDg3NTpcXHQgKiBzbyBhbnkgaW5vZGUgcmVhY2hpbmcgemVybyByZWZjb3VudCBkdXJpbmcgb3IgYWZ0ZXIgdGhhdCBjYWxsIHdpbGxcXG4gODc2OlxcdCAqIGJlIGltbWVkaWF0ZWx5IGV2aWN0ZWQuXFxuIDg3NzpcXHQgKi9cXG4gODc4OlxcdHZvaWQgZXZpY3RfaW5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuIDg3OTpcXHR7XFxuIDg4MDpcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xcbiA4ODE6XFx0XFx0TElTVF9IRUFEKGRpc3Bvc2UpO1xcbiA4ODI6XFx0XFxuIDg4MzpcXHRcXHRzcGluX2xvY2soXFx1MDAyNnNiLVxcdTAwM2VzX2lub2RlX2xpc3RfbG9jayk7XFxuIDg4NDpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGlub2RlLCBcXHUwMDI2c2ItXFx1MDAzZXNfaW5vZGVzLCBpX3NiX2xpc3QpIHtcXG4gODg1OlxcdFxcdFxcdGlmIChpY291bnRfcmVhZF9vbmNlKGlub2RlKSlcXG4gODg2OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA4ODc6XFx0XFxuIDg4ODpcXHRcXHRcXHRzcGluX2xvY2soXFx1MDAyNmlub2RlLVxcdTAwM2VpX2xvY2spO1xcbiA4ODk6XFx0XFx0XFx0aWYgKGljb3VudF9yZWFkKGlub2RlKSkge1xcbiA4OTA6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmlub2RlLVxcdTAwM2VpX2xvY2spO1xcbiA4OTE6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDg5MjpcXHRcXHRcXHR9XFxuIDg5MzpcXHRcXHRcXHRpZiAoaW5vZGVfc3RhdGVfcmVhZChpbm9kZSkgXFx1MDAyNiAoSV9ORVcgfCBJX0ZSRUVJTkcgfCBJX1dJTExfRlJFRSkpIHtcXG4gODk0OlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9sb2NrKTtcXG4gODk1OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA4OTY6XFx0XFx0XFx0fVxcbiA4OTc6XFx0XFxuIDg5ODpcXHRcXHRcXHRpbm9kZV9zdGF0ZV9zZXQoaW5vZGUsIElfRlJFRUlORyk7XFxuIDg5OTpcXHRcXHRcXHRpbm9kZV9scnVfbGlzdF9kZWwoaW5vZGUpO1xcbiA5MDA6XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmlub2RlLVxcdTAwM2VpX2xvY2spO1xcbiA5MDE6XFx0XFxuIDkwMjpcXHRcXHRcXHQvKlxcbiA5MDM6XFx0XFx0XFx0ICogS2VlcCB0aGlzIGlub2RlIG91dCBvZiBkaXNwb3NlIHNvIGl0IHN0YXlzIG9uIHNfaW5vZGVzIHdoaWxlXFxuIDkwNDpcXHRcXHRcXHQgKiB0aGUgbGlzdCBsb2NrIGlzIGRyb3BwZWQuIElfRlJFRUlORyBwcmV2ZW50cyBuZXcgcmVmZXJlbmNlc1xcbiA5MDU6XFx0XFx0XFx0ICogYW5kIGxlYXZlcyBldmljdGlvbiB0byB1cywgc28gd2UgY2FuIHJlc3VtZSB0aGUgd2FsayBmcm9tIGl0LlxcbiA5MDY6XFx0XFx0XFx0ICovXFxuIDkwNzpcXHRcXHRcXHRpZiAobmVlZF9yZXNjaGVkKCkpIHtcXG4gOTA4OlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZzYi1cXHUwMDNlc19pbm9kZV9saXN0X2xvY2spO1xcbiA5MDk6XFx0XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuIDkxMDpcXHRcXHRcXHRcXHRkaXNwb3NlX2xpc3QoXFx1MDAyNmRpc3Bvc2UpO1xcbiA5MTE6XFx0XFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZzYi1cXHUwMDNlc19pbm9kZV9saXN0X2xvY2spO1xcbiA5MTI6XFx0XFx0XFx0fVxcbiA5MTM6XFx0XFx0XFx0bGlzdF9hZGQoXFx1MDAyNmlub2RlLVxcdTAwM2VpX2xydSwgXFx1MDAyNmRpc3Bvc2UpO1xcbiA5MTQ6XFx0XFx0fVxcbiA5MTU6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnNiLVxcdTAwM2VzX2lub2RlX2xpc3RfbG9jayk7XFxuIDkxNjpcXHRcXG4gOTE3OlxcdFxcdGRpc3Bvc2VfbGlzdChcXHUwMDI2ZGlzcG9zZSk7XFxuIDkxODpcXHR9XFxuIDkxOTpcXHRFWFBPUlRfU1lNQk9MX0dQTChldmljdF9pbm9kZXMpO1xcbiA5MjA6XFx0XFxuIDkyMTpcXHQvKlxcbiA5MjI6XFx0ICogSXNvbGF0ZSB0aGUgaW5vZGUgZnJvbSB0aGUgTFJVIGluIHByZXBhcmF0aW9uIGZvciBmcmVlaW5nIGl0LlxcbiA5MjM6XFx0ICpcXG4gOTI0OlxcdCAqIElmIHRoZSBpbm9kZSBoYXMgdGhlIElfUkVGRVJFTkNFRCBmbGFnIHNldCwgdGhlbiBpdCBtZWFucyB0aGF0IGl0IGhhcyBiZWVuXFxuIDkyNTpcXHQgKiB1c2VkIHJlY2VudGx5IC0gdGhlIGZsYWcgaXMgc2V0IGluIGlwdXRfZmluYWwoKS4gV2hlbiB3ZSBlbmNvdW50ZXIgc3VjaCBhblxcbiA5MjY6XFx0ICogaW5vZGUsIGNsZWFyIHRoZSBmbGFnIGFuZCBtb3ZlIGl0IHRvIHRoZSBiYWNrIG9mIHRoZSBMUlUgc28gaXQgZ2V0cyBhbm90aGVyXFxuIDkyNzpcXHQgKiBwYXNzIHRocm91Z2ggdGhlIExSVSBiZWZvcmUgaXQgZ2V0cyByZWNsYWltZWQuIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugb2ZcXG4gOTI4OlxcdCAqIHRoZSBmYWN0IHdlIGFyZSBkb2luZyBsYXp5IExSVSB1cGRhdGVzIHRvIG1pbmltaXNlIGxvY2sgY29udGVudGlvbiBzbyB0aGVcXG4gOTI5OlxcdCAqIExSVSBkb2VzIG5vdCBoYXZlIHN0cmljdCBvcmRlcmluZy4gSGVuY2Ugd2UgZG9uJ3Qgd2FudCB0byByZWNsYWltIGlub2Rlc1xcbiA5MzA6XFx0ICogd2l0aCB0aGlzIGZsYWcgc2V0IGJlY2F1c2UgdGhleSBhcmUgdGhlIGlub2RlcyB0aGF0IGFyZSBvdXQgb2Ygb3JkZXIuXFxuIDkzMTpcXHQgKi9cXG4gOTMyOlxcdHN0YXRpYyBlbnVtIGxydV9zdGF0dXMgaW5vZGVfbHJ1X2lzb2xhdGUoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcXG4gOTMzOlxcdFxcdFxcdHN0cnVjdCBsaXN0X2xydV9vbmUgKmxydSwgdm9pZCAqYXJnKVxcbiA5MzQ6XFx0e1xcbiA5MzU6XFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqZnJlZWFibGUgPSBhcmc7XFxuIDkzNjpcXHRcXHRzdHJ1Y3QgaW5vZGVcXHQqaW5vZGUgPSBjb250YWluZXJfb2YoaXRlbSwgc3RydWN0IGlub2RlLCBpX2xydSk7XFxuIDkzNzpcXHRcXG4gOTM4OlxcdFxcdC8qXFxuIDkzOTpcXHRcXHQgKiBXZSBhcmUgaW52ZXJ0aW5nIHRoZSBscnUgbG9jay9pbm9kZS1cXHUwMDNlaV9sb2NrIGhlcmUsIHNvIHVzZSBhXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA1OjUwOjI2LjQyNDc1NjIyNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM1NzE5NDI3NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoaXMgQ29kZSBTbmlwcGV0KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiV2hhdCBpbiB0aGUgd29ybGQgaXMgdGhpcyBjb2RlIGRvaW5nP1wiIEltbWVkaWF0ZWx5LCBJIHNlZSBhIHNwaW5sb2NrIHByb3RlY3RpbmcgYSBsaXN0IGl0ZXJhdGlvbjogYHNwaW5fbG9jayhcdTAwMjZzYi1cdTAwM2VzX2lub2RlX2xpc3RfbG9jaylgIGFuZCB0aGUgZmFtaWxpYXIgYGxpc3RfZm9yX2VhY2hfZW50cnlgIG1hY3JvLiBJIGtub3cgdGhhdCB1c3VhbGx5IG1lYW5zIHdlJ3JlIHRyYXZlcnNpbmcgaW5vZGVzIGFzc29jaWF0ZWQgd2l0aCBhIHN1cGVyYmxvY2suIEJ1dCBob2xkIG9uLCB0aGUgaXRlcmF0aW9uIGlzIGludGVycnVwdGVkIGJ5IGBuZWVkX3Jlc2NoZWQoKWAuIFRoZW4gdGhlcmUncyBhbiBgdW5sb2NrYCFcblxuTXkgZXhwZXJ0IGluc3RpbmN0IGtpY2tzIGluIGFuZCBzYXlzLCBcIldhaXQgYSBtaW51dGUsIHdoYXQgaGFwcGVucyBkdXJpbmcgdGhlIHVubG9jaz9cIiBgbGlzdF9mb3JfZWFjaF9lbnRyeWAgZXhwYW5kcyB0byBhIHN0YW5kYXJkIGBmb3JgIGxvb3AsIHNvIEkgdW5kZXJzdGFuZCB0aGF0IHRoZSBsaXN0IHRyYXZlcnNhbCBjb3VsZCBiZSBpbiBwcm9ncmVzcyB3aGVuIHRoZSB1bmxvY2sgaXMgY2FsbGVkLiBDcnVjaWFsbHksIEkgaGF2ZSB0byB0aGluayBhYm91dCB3aGF0IG90aGVyIG9wZXJhdGlvbnMgYXJlIGhhcHBlbmluZyBpbiB0aGUgc3lzdGVtIHRoYXQgY291bGQgaW50ZXJhY3Qgd2l0aCB0aGUgbGlzdC4gQ2FuIG90aGVyIHByb2Nlc3NlcyBtb2RpZnkgdGhlIGBcdTAwMjZzYi1cdTAwM2VzX2lub2Rlc2AgbGlzdCB3aGlsZSB0aGlzIHRocmVhZCBoYXMgdGVtcG9yYXJpbHkgcmVsaW5xdWlzaGVkIHRoZSBsb2NrPyBXaGF0IGlmIGFuIGlub2RlJ3MgYGlfc2JfbGlzdC5uZXh0YCBwb2ludGVyIGlzIG1vZGlmaWVkIGluIGFub3RoZXIgdGhyZWFkIHdoaWxlIHRoaXMgdGhyZWFkIHVubG9ja3MgYW5kIHRoZW4gcmVsb2Nrcz8gVGhhdCdzIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiBzY2VuYXJpbyBzY3JlYW1pbmcgYXQgbWUuXG5cblRoZW4sIHRoZXJlJ3MgYGRpc3Bvc2VfbGlzdChcdTAwMjZkaXNwb3NlKWAuIFwiV2hhdCBkb2VzICp0aGF0KiBkbz9cIiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGRlZmluaXRpb24gb2YgYGRpc3Bvc2VfbGlzdGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBpbiB0aGUgY29udGV4dCBvZiB0aGUgbG9jaydzIGxpZmVjeWNsZSB0byBjb21wbGV0ZWx5IGV2YWx1YXRlIHRoZSBzYWZldHkgb2YgdGhpcyBpbXBsZW1lbnRhdGlvbi4gSSBoYXZlIHRvIGxvb2sgaW50byB0aGlzIGZ1bmN0aW9uLCBidXQgdGhlIGZhY3QgdGhhdCBpdCBpcyBjYWxsZWQgYWZ0ZXIgdGhlIHVubG9jayBhbmQgYmVmb3JlIHRoZSByZWxvY2sgaXMgZ2l2aW5nIG1lIHBhdXNlLiBUaGlzIG5lZWRzIHRvIGJlIGNoZWNrZWQgY2FyZWZ1bGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTg1LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6NTA6MjkuOTk2NzAxODQ5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2NjQ5OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgZGlzcG9zZV9saXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2lub2RlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW5vZGUuYz03OTk9c3RhdGljIHZvaWQgZXZpY3Qoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2lub2RlLmMtODU1LSAqL1xcbmZzL2lub2RlLmM6ODU2OnN0YXRpYyB2b2lkIGRpc3Bvc2VfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbmZzL2lub2RlLmMtODU3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6NTA6MzAuMDYzMzU5Mzk4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzY5MDk1MDI3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIGNvbnNpZGVyaW5nIEknbSBhbiBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gYGRpc3Bvc2VfbGlzdGAgaW4gYGZzL2lub2RlLmNgKipcblxuT2theSwgdGltZSB0byBnZXQgYSBiaXQgZ3JhbnVsYXIuIEknbSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGRpc3Bvc2VfbGlzdGAgZnVuY3Rpb24gd2l0aGluIGBmcy9pbm9kZS5jYC4gVGhhdCdzIHdoZXJlIHRoZXkncmUgaGFuZGxpbmcgaW5vZGUgY2xlYW51cCwgc28gSSdtIGV4cGVjdGluZyB0byBzZWUgdGhlIGNvcmUgbG9naWMgZm9yIHJlbGVhc2luZyBpbm9kZSByZXNvdXJjZXMgd2hlbiB0aGV5J3JlIG5vIGxvbmdlciBuZWVkZWQuIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhleSdyZSBtYW5hZ2luZyB0aGUgbGlzdCBpdHNlbGYg4oCTIGhvdyBpcyBpdCBzdHJ1Y3R1cmVkLCBhbmQgd2hhdCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBhcmUgdGhleSB1c2luZz8gR2l2ZW4gdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggcG90ZW50aWFsbHkgY29uY3VycmVudCBhY2Nlc3MgdG8gaW5vZGVzLCBlZmZpY2llbnQgYW5kIHNhZmUgbGlzdCBtYW5pcHVsYXRpb24gaXMgY3J1Y2lhbC4gSSB3YW50IHRvIHNlZSBob3cgdGhleSdyZSBoYW5kbGluZyB0aGUgY29tbW9uIHNjZW5hcmlvczogYWRkaW5nLCByZW1vdmluZywgaXRlcmF0aW5nLCBhbmQgcGVyaGFwcyByZS11c2luZyBlbnRyaWVzIG9uIHRoZSBsaXN0LiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBTcGVjaWZpY2FsbHksIEknbGwgYmUgd2F0Y2hpbmcgaG93IHRoZXkgZGVhbCB3aXRoIHRoZSByZWZlcmVuY2UgY291bnRzIGFuZCBpZiB0aGV5J3JlIGNvbnNpZGVyaW5nIGFueSBmb3JtIG9mIG9wdGltaXN0aWMgbG9ja2luZyBvciBvdGhlciBhZHZhbmNlZCBzdHJhdGVnaWVzIHRvIG1pbmltaXplIGNvbnRlbnRpb24uIEkgYWxzbyB3YW50IHRvIG9ic2VydmUgaWYgdGhleSdyZSBoYW5kbGluZyBhbnkgc3BlY2lhbCBjYXNlcywgbGlrZSBvcnBoYW5lZCBpbm9kZXMgb3IgaW5vZGVzIHdpdGggcGVuZGluZyBJL08sIGJlZm9yZSBJIGRlY2lkZSB0byBkaXZlIGludG8gaXQgbW9yZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTM3MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA1OjUwOjMzLjc1NDMxMjUyMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNTI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9pbm9kZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg1MCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg1MDpcXHQgKiBkaXNwb3NlX2xpc3QgLSBkaXNwb3NlIG9mIHRoZSBjb250ZW50cyBvZiBhIGxvY2FsIGxpc3RcXG4gODUxOlxcdCAqIEBoZWFkOiB0aGUgaGVhZCBvZiB0aGUgbGlzdCB0byBmcmVlXFxuIDg1MjpcXHQgKlxcbiA4NTM6XFx0ICogRGlzcG9zZS1saXN0IGdldHMgYSBsb2NhbCBsaXN0IHdpdGggbG9jYWwgaW5vZGVzIGluIGl0LCBzbyBpdCBkb2Vzbid0XFxuIDg1NDpcXHQgKiBuZWVkIHRvIHdvcnJ5IGFib3V0IGxpc3QgY29ycnVwdGlvbiBhbmQgU01QIGxvY2tzLlxcbiA4NTU6XFx0ICovXFxuIDg1NjpcXHRzdGF0aWMgdm9pZCBkaXNwb3NlX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcXG4gODU3OlxcdHtcXG4gODU4OlxcdFxcdHdoaWxlICghbGlzdF9lbXB0eShoZWFkKSkge1xcbiA4NTk6XFx0XFx0XFx0c3RydWN0IGlub2RlICppbm9kZTtcXG4gODYwOlxcdFxcbiA4NjE6XFx0XFx0XFx0aW5vZGUgPSBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsIHN0cnVjdCBpbm9kZSwgaV9scnUpO1xcbiA4NjI6XFx0XFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbHJ1KTtcXG4gODYzOlxcdFxcbiA4NjQ6XFx0XFx0XFx0ZXZpY3QoaW5vZGUpO1xcbiA4NjU6XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuIDg2NjpcXHRcXHR9XFxuIDg2NzpcXHR9XFxuIDg2ODpcXHRcXG4gODY5OlxcdC8qKlxcbiA4NzA6XFx0ICogZXZpY3RfaW5vZGVzXFx0LSBldmljdCBhbGwgZXZpY3RhYmxlIGlub2RlcyBmb3IgYSBzdXBlcmJsb2NrXFxuIDg3MTpcXHQgKiBAc2I6XFx0XFx0c3VwZXJibG9jayB0byBvcGVyYXRlIG9uXFxuIDg3MjpcXHQgKlxcbiA4NzM6XFx0ICogTWFrZSBzdXJlIHRoYXQgbm8gaW5vZGVzIHdpdGggemVybyByZWZjb3VudCBhcmUgcmV0YWluZWQuICBUaGlzIGlzXFxuIDg3NDpcXHQgKiBjYWxsZWQgYnkgc3VwZXJibG9jayBzaHV0ZG93biBhZnRlciBoYXZpbmcgU0JfQUNUSVZFIGZsYWcgcmVtb3ZlZCxcXG4gODc1OlxcdCAqIHNvIGFueSBpbm9kZSByZWFjaGluZyB6ZXJvIHJlZmNvdW50IGR1cmluZyBvciBhZnRlciB0aGF0IGNhbGwgd2lsbFxcbiA4NzY6XFx0ICogYmUgaW1tZWRpYXRlbHkgZXZpY3RlZC5cXG4gODc3OlxcdCAqL1xcbiA4Nzg6XFx0dm9pZCBldmljdF9pbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4gODc5OlxcdHtcXG4gODgwOlxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XFxuIDg4MTpcXHRcXHRMSVNUX0hFQUQoZGlzcG9zZSk7XFxuIDg4MjpcXHRcXG4gODgzOlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2c2ItXFx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrKTtcXG4gODg0OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoaW5vZGUsIFxcdTAwMjZzYi1cXHUwMDNlc19pbm9kZXMsIGlfc2JfbGlzdCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNTo1MDozMy43NTQ2MzA3NzFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzEwMzMzOTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIGBldmljdChpbm9kZSlgIGZvciBJbm9kZSBSZW1vdmFsKipcblxuSG9sZCBvbiBhIHNlY29uZCEgSSBuZWVkIHRvIGNsYXJpZnkgc29tZXRoaW5nIGFib3V0IGhvdyBpbm9kZXMgYXJlIGhhbmRsZWQuIFRoZSBmdW5jdGlvbiBgZXZpY3QoaW5vZGUpYCBpcyBzdXBwb3NlZCB0byByZW1vdmUgdGhlIGlub2RlIGZyb20gYHNiLVx1MDAzZXNfaW5vZGVzYCwgcmlnaHQ/IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhpcyBpcyB3aGF0J3MgaGFwcGVuaW5nLCBzbyBJIG5lZWQgdG8gdmVyaWZ5IGl0cyBiZWhhdmlvci5cblxuTGV0J3MgZGlnIGludG8gYGV2aWN0KGlub2RlKWAgYW5kIG1ha2Ugc3VyZSBpdCdzIGRvaW5nIHdoYXQgSSBleHBlY3QuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBpdCdzIGNvcnJlY3RseSByZW1vdmluZyBkaXNwb3NlZCBpbm9kZXMgZnJvbSBgc19pbm9kZXNgLiBJJ2xsIGZvY3VzIG9uIHRoZSBhcmVhIGFyb3VuZCBsaW5lIDgwMCB3aXRoaW4gdGhlIGBldmljdChzdHJ1Y3QgaW5vZGUgKmlub2RlKWAgZnVuY3Rpb24uIExldCdzIHNlZSB3aGF0J3MgcmVhbGx5IGdvaW5nIG9uIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjA5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNTo1MDozNi4wNjQ5NjcyMThaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0OTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2lub2RlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzk1LFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzk1OlxcdCAqIEFuIGlub2RlIG11c3QgYWxyZWFkeSBiZSByZW1vdmVkIGZyb20gdGhlIExSVSBsaXN0IGJlZm9yZSBiZWluZyBldmljdGVkIGZyb21cXG4gNzk2OlxcdCAqIHRoZSBjYWNoZS4gVGhpcyBzaG91bGQgb2NjdXIgYXRvbWljYWxseSB3aXRoIHNldHRpbmcgdGhlIElfRlJFRUlORyBzdGF0ZVxcbiA3OTc6XFx0ICogZmxhZywgc28gbm8gaW5vZGVzIGhlcmUgc2hvdWxkIGV2ZXIgYmUgb24gdGhlIExSVSB3aGVuIGJlaW5nIGV2aWN0ZWQuXFxuIDc5ODpcXHQgKi9cXG4gNzk5OlxcdHN0YXRpYyB2b2lkIGV2aWN0KHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIDgwMDpcXHR7XFxuIDgwMTpcXHRcXHRjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyAqb3AgPSBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19vcDtcXG4gODAyOlxcdFxcbiA4MDM6XFx0XFx0QlVHX09OKCEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcXHUwMDI2IElfRlJFRUlORykpO1xcbiA4MDQ6XFx0XFx0QlVHX09OKCFsaXN0X2VtcHR5KFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9scnUpKTtcXG4gODA1OlxcdFxcbiA4MDY6XFx0XFx0aW5vZGVfaW9fbGlzdF9kZWwoaW5vZGUpO1xcbiA4MDc6XFx0XFx0aW5vZGVfc2JfbGlzdF9kZWwoaW5vZGUpO1xcbiA4MDg6XFx0XFxuIDgwOTpcXHRcXHRzcGluX2xvY2soXFx1MDAyNmlub2RlLVxcdTAwM2VpX2xvY2spO1xcbiA4MTA6XFx0XFx0aW5vZGVfd2FpdF9mb3JfbHJ1X2lzb2xhdGluZyhpbm9kZSk7XFxuIDgxMTpcXHRcXG4gODEyOlxcdFxcdC8qXFxuIDgxMzpcXHRcXHQgKiBXYWl0IGZvciBmbHVzaGVyIHRocmVhZCB0byBiZSBkb25lIHdpdGggdGhlIGlub2RlIHNvIHRoYXQgZmlsZXN5c3RlbVxcbiA4MTQ6XFx0XFx0ICogZG9lcyBub3Qgc3RhcnQgZGVzdHJveWluZyBpdCB3aGlsZSB3cml0ZWJhY2sgaXMgc3RpbGwgcnVubmluZy4gU2luY2VcXG4gODE1OlxcdFxcdCAqIHRoZSBpbm9kZSBoYXMgSV9GUkVFSU5HIHNldCwgZmx1c2hlciB0aHJlYWQgd29uJ3Qgc3RhcnQgbmV3IHdvcmsgb25cXG4gODE2OlxcdFxcdCAqIHRoZSBpbm9kZS4gIFdlIGp1c3QgaGF2ZSB0byB3YWl0IGZvciBydW5uaW5nIHdyaXRlYmFjayB0byBmaW5pc2guXFxuIDgxNzpcXHRcXHQgKi9cXG4gODE4OlxcdFxcdGlub2RlX3dhaXRfZm9yX3dyaXRlYmFjayhpbm9kZSk7XFxuIDgxOTpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuIDgyMDpcXHRcXG4gODIxOlxcdFxcdGlmIChvcC1cXHUwMDNlZXZpY3RfaW5vZGUpIHtcXG4gODIyOlxcdFxcdFxcdG9wLVxcdTAwM2VldmljdF9pbm9kZShpbm9kZSk7XFxuIDgyMzpcXHRcXHR9IGVsc2Uge1xcbiA4MjQ6XFx0XFx0XFx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfZmluYWwoXFx1MDAyNmlub2RlLVxcdTAwM2VpX2RhdGEpO1xcbiA4MjU6XFx0XFx0XFx0Y2xlYXJfaW5vZGUoaW5vZGUpO1xcbiA4MjY6XFx0XFx0fVxcbiA4Mjc6XFx0XFx0aWYgKFNfSVNDSFIoaW5vZGUtXFx1MDAzZWlfbW9kZSkgXFx1MDAyNlxcdTAwMjYgaW5vZGUtXFx1MDAzZWlfY2RldilcXG4gODI4OlxcdFxcdFxcdGNkX2ZvcmdldChpbm9kZSk7XFxuIDgyOTpcXHRcXG4gODMwOlxcdFxcdHJlbW92ZV9pbm9kZV9oYXNoKGlub2RlKTtcXG4gODMxOlxcdFxcbiA4MzI6XFx0XFx0LypcXG4gODMzOlxcdFxcdCAqIFdha2UgdXAgd2FpdGVycyBpbiBfX3dhaXRfb25fZnJlZWluZ19pbm9kZSgpLlxcbiA4MzQ6XFx0XFx0ICpcXG4gODM1OlxcdFxcdCAqIEl0IGlzIGFuIGludmFyaWFudCB0aGF0IGFueSB0aHJlYWQgd2UgbmVlZCB0byB3YWtlIHVwIGlzIGFscmVhZHlcXG4gODM2OlxcdFxcdCAqIGFjY291bnRlZCBmb3IgYmVmb3JlIHJlbW92ZV9pbm9kZV9oYXNoKCkgYWNxdWlyZXMgLVxcdTAwM2VpX2xvY2sgLS0gYm90aFxcbiA4Mzc6XFx0XFx0ICogc2lkZXMgdGFrZSB0aGUgbG9jayBhbmQgc2xlZXAgaXMgYWJvcnRlZCBpZiB0aGUgaW5vZGUgaXMgZm91bmRcXG4gODM4OlxcdFxcdCAqIHVuaGFzaGVkLiBUaHVzIGVpdGhlciB0aGUgc2xlZXBlciB3aW5zIGFuZCBnb2VzIG9mZiBDUFUsIG9yIHJlbW92YWxcXG4gODM5OlxcdFxcdCAqIHdpbnMgYW5kIHRoZSBzbGVlcGVyIGFib3J0cyBhZnRlciB0ZXN0aW5nIHdpdGggdGhlIGxvY2suXFxuIDg0MDpcXHRcXHQgKlxcbiA4NDE6XFx0XFx0ICogVGhpcyBhbHNvIG1lYW5zIHdlIGRvbid0IG5lZWQgYW55IGZlbmNlcyBmb3IgdGhlIGNhbGwgYmVsb3cuXFxuIDg0MjpcXHRcXHQgKi9cXG4gODQzOlxcdFxcdGlub2RlX3dha2VfdXBfYml0KGlub2RlLCBfX0lfTkVXKTtcXG4gODQ0OlxcdFxcdEJVR19PTihpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpICE9IChJX0ZSRUVJTkcgfCBJX0NMRUFSKSk7XFxuIDg0NTpcXHRcXG4gODQ2OlxcdFxcdGRlc3Ryb3lfaW5vZGUoaW5vZGUpO1xcbiA4NDc6XFx0fVxcbiA4NDg6XFx0XFxuIDg0OTpcXHQvKlxcbiA4NTA6XFx0ICogZGlzcG9zZV9saXN0IC0gZGlzcG9zZSBvZiB0aGUgY29udGVudHMgb2YgYSBsb2NhbCBsaXN0XFxuIDg1MTpcXHQgKiBAaGVhZDogdGhlIGhlYWQgb2YgdGhlIGxpc3QgdG8gZnJlZVxcbiA4NTI6XFx0ICpcXG4gODUzOlxcdCAqIERpc3Bvc2UtbGlzdCBnZXRzIGEgbG9jYWwgbGlzdCB3aXRoIGxvY2FsIGlub2RlcyBpbiBpdCwgc28gaXQgZG9lc24ndFxcbiA4NTQ6XFx0ICogbmVlZCB0byB3b3JyeSBhYm91dCBsaXN0IGNvcnJ1cHRpb24gYW5kIFNNUCBsb2Nrcy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6NTA6MzYuMDY1MTM1NDM4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE3MzAxNjg0MDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgaW5vZGUgbGlzdCBoYW5kbGluZyBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgbXkgYXR0ZW50aW9uIGlzIGRyYXduIHRvIGBpbm9kZV9zYl9saXN0X2RlbChpbm9kZSlgLiBSaWdodCwgdGhhdCByZW1vdmVzIGFuIGlub2RlIGZyb20gYHNiLVx1MDAzZXNfaW5vZGVzYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBCdXQgdGhlIGNvbnRleHQgaXMgd2hhdCdzIG1ha2luZyBtZSB1bmVhc3kuIExldCBtZSBzZWUuLi4gdGhlIG9yaWdpbmFsIGNvZGUgaGFkIHRoaXMgbG9vcCB3aXRoIGBzYi1cdTAwM2VzX2lub2RlX2xpc3RfbG9ja2AgaGVsZCwgaXRlcmF0aW5nIHRocm91Z2ggYHNiLVx1MDAzZXNfaW5vZGVzYC4gV2hlbiBgbmVlZF9yZXNjaGVkKClgIHdhcyB0cnVlLCB0aGUgb3JpZ2luYWwgY29kZSBhZGRlZCB0aGUgY3VycmVudCBpbm9kZSB0byBgZGlzcG9zZWAsIHJlbGVhc2VkIHRoZSBsb2NrLCBjYWxsZWQgYGRpc3Bvc2VfbGlzdGAgKHdoaWNoIHdvdWxkIGV2aWN0IHRoZSBpbm9kZSksIGFuZCB0aGVuIHdlbnQgKmJhY2sqIHRvIHRoZSB0b3Agb2YgdGhlIGxpc3QsIGFjcXVpcmluZyB0aGUgbG9jayBhZ2Fpbi5cblxuTm93LCB0aGUgcGF0Y2ggY2hhbmdlcyB0aGUgb3JkZXIuIE5vdywgaXQncyBhZGRpbmcgdGhlIGlub2RlIHRvIGBkaXNwb3NlYCAqYWZ0ZXIqIHRoZSBgbmVlZF9yZXNjaGVkKClgIGNoZWNrIGFuZCB0aGUgYHNwaW5fdW5sb2NrYC4gSG9sZCBvbiBhIHNlY29uZC4uLiBUaGlzIG1lYW5zIHRoYXQgd2hpbGUgYHNiLVx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrYCBpcyAqdW5sb2NrZWQqLCBhbnkgb3RoZXIgdGhyZWFkIGNvdWxkIHBvdGVudGlhbGx5IG1vZGlmeSBgc2ItXHUwMDNlc19pbm9kZXNgISBXaGF0IGhhcHBlbnMgaWYgYW5vdGhlciBpbm9kZSBuZXh0IHRvIGBpbm9kZWAgaXMgZGVsZXRlZCBvciBhIG5ldyBvbmUgaW5zZXJ0ZWQ/IFN1ZGRlbmx5LCB0aGUgaXRlcmF0b3IgaW4gdGhlIGxvb3AgbWlnaHQgYmUgb3BlcmF0aW5nIG9uIGFuIGluY29uc2lzdGVudCBkYXRhIHN0cnVjdHVyZSEgQW5kIHRoaW5rIGFib3V0IHRoZSBjYXNlIG9mIGFuIHVubW91bnQgb3Igc3VwZXJibG9jayBzaHV0ZG93biB3aGVyZSB3ZSdyZSBwcm9iYWJseSBkb2luZyBhIGxvdCBvZiB0aGVzZSBvcGVyYXRpb25zIGNvbmN1cnJlbnRseS4gSXMgYGV2aWN0X2lub2Rlc2Agb25seSBjYWxsZWQgZHVyaW5nIHVubW91bnQsIG9yIGFyZSB0aGVyZSBvdGhlciBwbGFjZXMgaW4gdGhlIGZpbGVzeXN0ZW0gd2hlcmUgdGhpcyBjb3VsZCBoYXBwZW4/IE5lZWQgdG8ga25vdy4gSSBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBldmljdF9pbm9kZXNgIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0MzcsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2ODksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNTo1MDo1My4zNjY4MjI1MjNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyOTQxMDc0OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXZpY3RfaW5vZGVzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3Q9MTE3OT1MT09LX0NSRUFURSBvciBMT09LVVBfUkVOQU1FX1RBUkdFVC5cXG4tLVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3QtMTE4My0qKm1hbmRhdG9yeSoqXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdDoxMTg0OmludmFsaWRhdGVfaW5vZGVzKCkgaXMgZ29uZSB1c2UgZXZpY3RfaW5vZGVzKCkgaW5zdGVhZC5cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0LTExODUtXFxuLS1cXG5mcy9mMmZzL3N1cGVyLmM9NTA3Nz1zdGF0aWMgaW50IGYyZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9mMmZzL3N1cGVyLmMtNTUzNC1cXHQvKiBldmljdCBzb21lIGlub2RlcyBiZWluZyBjYWNoZWQgYnkgR0MgKi9cXG5mcy9mMmZzL3N1cGVyLmM6NTUzNTpcXHRldmljdF9pbm9kZXMoc2IpO1xcbmZzL2YyZnMvc3VwZXIuYy01NTM2LVxcdGYyZnNfdW5yZWdpc3Rlcl9zeXNmcyhzYmkpO1xcbi0tXFxuZnMvZnVzZS92aXJ0aW9fZnMuYz0xNjI3PXN0YXRpYyB2b2lkIHZpcnRpb19mc19jb25uX2Rlc3Ryb3koc3RydWN0IGZ1c2VfbW91bnQgKmZtKVxcbi0tXFxuZnMvZnVzZS92aXJ0aW9fZnMuYy0xNjMyLVxcbmZzL2Z1c2UvdmlydGlvX2ZzLmM6MTYzMzpcXHQvKiBTdG9wIGRheCB3b3JrZXIuIFNvb24gZXZpY3RfaW5vZGVzKCkgd2lsbCBiZSBjYWxsZWQgd2hpY2hcXG5mcy9mdXNlL3ZpcnRpb19mcy5jLTE2MzQtXFx0ICogd2lsbCBmcmVlIGFsbCBtZW1vcnkgcmFuZ2VzIGJlbG9uZ2luZyB0byBhbGwgaW5vZGVzLlxcbi0tXFxuZnMvZ2ZzMi9vcHNfZnN0eXBlLmM9MTcxMT1zdGF0aWMgaW50IGdmczJfbWV0YV9pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvZ2ZzMi9vcHNfZnN0eXBlLmMtMTcyMi0vKipcXG5mcy9nZnMyL29wc19mc3R5cGUuYzoxNzIzOiAqIGdmczJfZXZpY3RfaW5vZGVzIC0gZXZpY3QgaW5vZGVzIGNvb3BlcmF0aXZlbHlcXG5mcy9nZnMyL29wc19mc3R5cGUuYy0xNzI0LSAqIEBzYjogdGhlIHN1cGVyYmxvY2tcXG4tLVxcbmZzL2dmczIvb3BzX2ZzdHlwZS5jLTE3MzQtICpcXG5mcy9nZnMyL29wc19mc3R5cGUuYzoxNzM1OiAqIEZ1bmN0aW9uIGV2aWN0X2lub2RlcygpIHRyaWVzIHRvIGtlZXAgdGhlIHNfaW5vZGVfbGlzdF9sb2NrIGxpc3QgbG9ja2VkIG92ZXJcXG5mcy9nZnMyL29wc19mc3R5cGUuYy0xNzM2LSAqIGEgbG9uZyB0aW1lLCB3aGljaCBwcmV2ZW50cyBvdGhlciBpbm9kZXMgZnJvbSBiZWluZyBldmljdGVkIGNvbmN1cnJlbnRseS5cXG5mcy9nZnMyL29wc19mc3R5cGUuYy0xNzM3LSAqIFRoaXMgcHJlY2x1ZGVzIHRoZSBjb29wZXJhdGl2ZSBiZWhhdmlvciB3ZSBhcmUgbG9va2luZyBmb3IuICBUaGlzIHNwZWNpYWxcXG5mcy9nZnMyL29wc19mc3R5cGUuYzoxNzM4OiAqIHZlcnNpb24gb2YgZXZpY3RfaW5vZGVzKCkgYXZvaWRzIHRoYXQuXFxuZnMvZ2ZzMi9vcHNfZnN0eXBlLmMtMTczOS0gKlxcbi0tXFxuZnMvZ2ZzMi9vcHNfZnN0eXBlLmMtMTc0MS0gKi9cXG5mcy9nZnMyL29wc19mc3R5cGUuYzoxNzQyOnN0YXRpYyB2b2lkIGdmczJfZXZpY3RfaW5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvZ2ZzMi9vcHNfZnN0eXBlLmMtMTc0My17XFxuLS1cXG5mcy9nZnMyL29wc19mc3R5cGUuYz0xNzcxPXN0YXRpYyB2b2lkIGdmczJfa2lsbF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvZ2ZzMi9vcHNfZnN0eXBlLmMtMTc4Ny1cXHRzZXRfYml0KFNERl9LSUxMLCBcXHUwMDI2c2RwLVxcdTAwM2VzZF9mbGFncyk7XFxuZnMvZ2ZzMi9vcHNfZnN0eXBlLmM6MTc4ODpcXHRnZnMyX2V2aWN0X2lub2RlcyhzYik7XFxuZnMvZ2ZzMi9vcHNfZnN0eXBlLmMtMTc4OS1cXG4tLVxcbmZzL2lub2RlLmM9ODU2PXN0YXRpYyB2b2lkIGRpc3Bvc2VfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbi0tXFxuZnMvaW5vZGUuYy04NjktLyoqXFxuZnMvaW5vZGUuYzo4NzA6ICogZXZpY3RfaW5vZGVzXFx0LSBldmljdCBhbGwgZXZpY3RhYmxlIGlub2RlcyBmb3IgYSBzdXBlcmJsb2NrXFxuZnMvaW5vZGUuYy04NzEtICogQHNiOlxcdFxcdHN1cGVyYmxvY2sgdG8gb3BlcmF0ZSBvblxcbi0tXFxuZnMvaW5vZGUuYy04NzctICovXFxuZnMvaW5vZGUuYzo4Nzg6dm9pZCBldmljdF9pbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9pbm9kZS5jLTg3OS17XFxuLS1cXG5mcy9pbm9kZS5jLTkxOC19XFxuZnMvaW5vZGUuYzo5MTk6RVhQT1JUX1NZTUJPTF9HUEwoZXZpY3RfaW5vZGVzKTtcXG5mcy9pbm9kZS5jLTkyMC1cXG4tLVxcbmZzL3NtYi9jbGllbnQvZmlsZS5jPTM3NT1jaWZzX21hcmtfb3Blbl9maWxlc19pbnZhbGlkKHN0cnVjdCBjaWZzX3Rjb24gKnRjb24pXFxuLS1cXG5mcy9zbWIvY2xpZW50L2ZpbGUuYy00MDgtXFx0LypcXG5mcy9zbWIvY2xpZW50L2ZpbGUuYzo0MDk6XFx0ICogQkIgQWRkIGNhbGwgdG8gZXZpY3RfaW5vZGVzKHNiKSBmb3IgYWxsIHN1cGVyYmxvY2tzIG1vdW50ZWRcXG5mcy9zbWIvY2xpZW50L2ZpbGUuYy00MTAtXFx0ICogdG8gdGhpcyB0Y29uLlxcbi0tXFxuZnMvc3VwZXIuYz03NDE9dm9pZCBnZW5lcmljX3NodXRkb3duX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9zdXBlci5jLTc1NC1cXHRcXHQvKiBFdmljdCBhbGwgaW5vZGVzIHdpdGggemVybyByZWZjb3VudC4gKi9cXG5mcy9zdXBlci5jOjc1NTpcXHRcXHRldmljdF9pbm9kZXMoc2IpO1xcbmZzL3N1cGVyLmMtNzU2LVxcbi0tXFxuZnMvc3VwZXIuYz0xNTA3PXN0YXRpYyB2b2lkIGZzX2JkZXZfbWFya19kZWFkKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJvb2wgc3VycHJpc2UpXFxuLS1cXG5mcy9zdXBlci5jLTE1MjQtXFx0XFx0XFx0XFx0c2hyaW5rX2RjYWNoZV9zYihzYik7XFxuZnMvc3VwZXIuYzoxNTI1OlxcdFxcdFxcdFxcdGV2aWN0X2lub2RlcyhzYik7XFxuZnMvc3VwZXIuYy0xNTI2LVxcdFxcdFxcdFxcdGlmIChzYi1cXHUwMDNlc19vcC1cXHUwMDNlc2h1dGRvd24pXFxuLS1cXG5mcy94ZnMveGZzX2xvZy5jPTY2Mj14ZnNfbG9nX21vdW50X2ZpbmlzaChcXG4tLVxcbmZzL3hmcy94ZnNfbG9nLmMtNjk3LVxcdG1wLVxcdTAwM2VtX3N1cGVyLVxcdTAwM2VzX2ZsYWdzIFxcdTAwMjY9IH5TQl9BQ1RJVkU7XFxuZnMveGZzL3hmc19sb2cuYzo2OTg6XFx0ZXZpY3RfaW5vZGVzKG1wLVxcdTAwM2VtX3N1cGVyKTtcXG5mcy94ZnMveGZzX2xvZy5jLTY5OS1cXG4tLVxcbmluY2x1ZGUvbGludXgvZnMuaD0zMDEzPXVuc2lnbmVkIGludCBnZXRfbmV4dF9pbm8odm9pZCk7XFxuaW5jbHVkZS9saW51eC9mcy5oOjMwMTQ6dm9pZCBldmljdF9pbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XFxuaW5jbHVkZS9saW51eC9mcy5oLTMwMTUtdm9pZCBkdW1wX21hcHBpbmcoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKik7XFxuLS1cXG5zZWN1cml0eS9sYW5kbG9jay9mcy5jPTEzNjQ9c3RhdGljIHZvaWQgaG9va19pbm9kZV9mcmVlX3NlY3VyaXR5X3JjdSh2b2lkICppbm9kZV9zZWN1cml0eSlcXG4tLVxcbnNlY3VyaXR5L2xhbmRsb2NrL2ZzLmMtMTM4MC0gKlxcbnNlY3VyaXR5L2xhbmRsb2NrL2ZzLmM6MTM4MTogKiBDZi4gZnNub3RpZnlfdW5tb3VudF9pbm9kZXMoKSBhbmQgZXZpY3RfaW5vZGVzKClcXG5zZWN1cml0eS9sYW5kbG9jay9mcy5jLTEzODItICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA1OjUwOjU1LjY2MDkzNDczM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMjc1MjEzNDk1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25jZXJucyB3aXRoIGBldmljdF9pbm9kZXNgIGFuZCBQb3RlbnRpYWwgQ29uY3VycmVuY3kgSXNzdWVzKipcblxuT2theSwgc28gYGV2aWN0X2lub2Rlc2AgaXMgYSBwcmV0dHkgaW1wb3J0YW50IGZ1bmN0aW9uLiBJJ20gc2VlaW5nIHRoYXQgaXQgZ2V0cyBjYWxsZWQgaW4gYGdlbmVyaWNfc2h1dGRvd25fc3VwZXJgLCB3aGljaCBpcyBiYXNpY2FsbHkgZXZlcnkgZmlsZXN5c3RlbSdzIHVubW91bnQgcm91dGluZS4gSXQgYWxzbyBwb3BzIHVwIGluIHNvbWUgb3RoZXIgY3JpdGljYWwgcGxhY2VzLCBsaWtlIGBmMmZzX2ZpbGxfc3VwZXJgLCBgZnNfYmRldl9tYXJrX2RlYWRgLCBhbmQgYHhmc19sb2dfbW91bnRfZmluaXNoYC4gVGhhdCBtZWFucyBpdCdzIGZ1bmRhbWVudGFsIHRvIHZhcmlvdXMgYXNwZWN0cyBvZiBmaWxlc3lzdGVtIG1hbmFnZW1lbnQsIGZyb20gaW5pdGlhbCBtb3VudGluZyB0byBjbGVhbmluZyB1cCBvbiB1bm1vdW50IG9yIGluIGNhc2VzIG9mIGRldmljZSBkZWF0aC5cblxuTm93LCBJJ20gdGFraW5nIGEgY2xvc2UgbG9vayBhdCBob3cgaXQgaXRlcmF0ZXMgdGhyb3VnaCBpbm9kZXMuIFRoZSBjb2RlIHVzZXMgYGxpc3RfZm9yX2VhY2hfZW50cnkoaW5vZGUsIFx1MDAyNnNiLVx1MDAzZXNfaW5vZGVzLCBpX3NiX2xpc3QpYC4gVGhhdCBgaW5vZGVgIHRoZXJlPyBUaGF0J3MgdGhlIGxvb3AgY3Vyc29yLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGhhcHBlbnMgaWYgdGhhdCBpdGVyYXRvciBpcyBtb2RpZmllZCBtaWQtZmxpZ2h0LlxuXG5BaGEsIGhlcmUncyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBJIHNlZSBhIGBuZWVkX3Jlc2NoZWQoKWAgY2hlY2sgd2l0aGluIHRoZSBsb29wLiBXaGVuIGl0J3MgdHJ1ZSwgdGhlIGxvY2sgYHNiLVx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrYCBpcyBkcm9wcGVkLCBgY29uZF9yZXNjaGVkKClgIGlzIGNhbGxlZCwgc29tZSBraW5kIG9mIGRpc3Bvc2FsIGxpc3QgaXMgaGFuZGxlZCwgYW5kICp0aGVuKiB0aGUgbG9jayBpcyByZWFjcXVpcmVkLiBUaGUga2V5IGhlcmUgaXM6XG5cbmBzcGluX3VubG9jayhcdTAwMjZzYi1cdTAwM2VzX2lub2RlX2xpc3RfbG9jayk7YFxuYGNvbmRfcmVzY2hlZCgpO2BcbmBkaXNwb3NlX2xpc3QoXHUwMDI2ZGlzcG9zZSk7YFxuYHNwaW5fbG9jayhcdTAwMjZzYi1cdTAwM2VzX2lub2RlX2xpc3RfbG9jayk7YFxuYGxpc3RfYWRkKFx1MDAyNmlub2RlLVx1MDAzZWlfbHJ1LCBcdTAwMjZkaXNwb3NlKTtgXG5cbkhhbmcgb24gYSBzZWNvbmQhIFRoaXMgYGlub2RlYCBsaXN0IG1hbmlwdWxhdGlvbiBvY2N1cnMgKmFmdGVyKiB0aGUgbG9jayBpcyBkcm9wcGVkLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgc2FmZXR5IG9mIGBpbm9kZS1cdTAwM2VpX3NiX2xpc3QubmV4dGAgZHVyaW5nIHRoYXQgcGVyaW9kISBJcyB0aGF0IGRhdGEgc3RydWN0dXJlIHByb3RlY3RlZCBjb3JyZWN0bHk/IElzIHNvbWV0aGluZyBlbHNlIG1vZGlmeWluZyB0aGUgYGlfc2JfbGlzdGAgd2hpbGUgd2UgYXJlIGluIHRoZSBgbmVlZF9yZXNjaGVkYCBwYXRoIGFuZCB0aGUgbG9jayBpcyBkcm9wcGVkPyBUaGlzIGNvdWxkIGxlYWQgdG8gYWxsIHNvcnRzIG9mIG5hc3R5IGNvcnJ1cHRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSBhcmUgYWxsb3dlZCB0byB0b3VjaCB0aGF0IGxpc3QgZHVyaW5nIHRoZSByZXNjaGVkdWxpbmcgcHJvY2Vzcy4gSSBuZWVkIHRvIGRpZyBpbnRvIGBpbm9kZV9zYl9saXN0X2RlbChpbm9kZSlgIGFuZCBmaW5kIG91dCBleGFjdGx5IHdobyBpcyBtb2RpZnlpbmcgYHNfaW5vZGVzYCEgTGV0J3Mgc2VlIHdobyBpcyBtb2RpZnlpbmcgYHNfaW5vZGVzYCEgSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGVyZSBpcyBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGluIHRoZSBsb29wIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDExOCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNTo1MTowOC40MTMwNzI0MTNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3OTE2ODYxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpX3NiX2xpc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Ryb3BfY2FjaGVzLmM9MTk9c3RhdGljIHZvaWQgZHJvcF9wYWdlY2FjaGVfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqdW51c2VkKVxcbi0tXFxuZnMvZHJvcF9jYWNoZXMuYy0yMy1cXHRzcGluX2xvY2soXFx1MDAyNnNiLVxcdTAwM2VzX2lub2RlX2xpc3RfbG9jayk7XFxuZnMvZHJvcF9jYWNoZXMuYzoyNDpcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGlub2RlLCBcXHUwMDI2c2ItXFx1MDAzZXNfaW5vZGVzLCBpX3NiX2xpc3QpIHtcXG5mcy9kcm9wX2NhY2hlcy5jLTI1LVxcdFxcdHNwaW5fbG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuLS1cXG5mcy9nZnMyL29wc19mc3R5cGUuYz0xNzQyPXN0YXRpYyB2b2lkIGdmczJfZXZpY3RfaW5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9nZnMyL29wc19mc3R5cGUuYy0xNzQ5LVxcdHNwaW5fbG9jayhcXHUwMDI2c2ItXFx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrKTtcXG5mcy9nZnMyL29wc19mc3R5cGUuYzoxNzUwOlxcdGxpc3RfZm9yX2VhY2hfZW50cnkoaW5vZGUsIFxcdTAwMjZzYi1cXHUwMDNlc19pbm9kZXMsIGlfc2JfbGlzdCkge1xcbmZzL2dmczIvb3BzX2ZzdHlwZS5jLTE3NTEtXFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9sb2NrKTtcXG4tLVxcbmZzL2lub2RlLmMtMzktICogaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrIHByb3RlY3RzOlxcbmZzL2lub2RlLmM6NDA6ICogICBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19pbm9kZXMsIGlub2RlLVxcdTAwM2VpX3NiX2xpc3RcXG5mcy9pbm9kZS5jLTQxLSAqIGJkaS1cXHUwMDNld2IubGlzdF9sb2NrIHByb3RlY3RzOlxcbi0tXFxuZnMvaW5vZGUuYz00OTM9dm9pZCBpbm9kZV9pbml0X29uY2Uoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2lub2RlLmMtNTAwLVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9scnUpO1xcbmZzL2lub2RlLmM6NTAxOlxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9zYl9saXN0KTtcXG5mcy9pbm9kZS5jLTUwMi1cXHRfX2FkZHJlc3Nfc3BhY2VfaW5pdF9vbmNlKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9kYXRhKTtcXG4tLVxcbmZzL2lub2RlLmM9NjM0PXZvaWQgaW5vZGVfc2JfbGlzdF9hZGQoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2lub2RlLmMtNjM4LVxcdHNwaW5fbG9jayhcXHUwMDI2c2ItXFx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrKTtcXG5mcy9pbm9kZS5jOjYzOTpcXHRsaXN0X2FkZChcXHUwMDI2aW5vZGUtXFx1MDAzZWlfc2JfbGlzdCwgXFx1MDAyNnNiLVxcdTAwM2VzX2lub2Rlcyk7XFxuZnMvaW5vZGUuYy02NDAtXFx0c3Bpbl91bmxvY2soXFx1MDAyNnNiLVxcdTAwM2VzX2lub2RlX2xpc3RfbG9jayk7XFxuLS1cXG5mcy9pbm9kZS5jPTY0ND1zdGF0aWMgaW5saW5lIHZvaWQgaW5vZGVfc2JfbGlzdF9kZWwoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2lub2RlLmMtNjQ3LVxcbmZzL2lub2RlLmM6NjQ4OlxcdGlmICghbGlzdF9lbXB0eShcXHUwMDI2aW5vZGUtXFx1MDAzZWlfc2JfbGlzdCkpIHtcXG5mcy9pbm9kZS5jLTY0OS1cXHRcXHRzcGluX2xvY2soXFx1MDAyNnNiLVxcdTAwM2VzX2lub2RlX2xpc3RfbG9jayk7XFxuZnMvaW5vZGUuYzo2NTA6XFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2aW5vZGUtXFx1MDAzZWlfc2JfbGlzdCk7XFxuZnMvaW5vZGUuYy02NTEtXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnNiLVxcdTAwM2VzX2lub2RlX2xpc3RfbG9jayk7XFxuLS1cXG5mcy9pbm9kZS5jPTg3OD12b2lkIGV2aWN0X2lub2RlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvaW5vZGUuYy04ODMtXFx0c3Bpbl9sb2NrKFxcdTAwMjZzYi1cXHUwMDNlc19pbm9kZV9saXN0X2xvY2spO1xcbmZzL2lub2RlLmM6ODg0OlxcdGxpc3RfZm9yX2VhY2hfZW50cnkoaW5vZGUsIFxcdTAwMjZzYi1cXHUwMDNlc19pbm9kZXMsIGlfc2JfbGlzdCkge1xcbmZzL2lub2RlLmMtODg1LVxcdFxcdGlmIChpY291bnRfcmVhZF9vbmNlKGlub2RlKSlcXG4tLVxcbmZzL2lub2RlLmM9MTI5Nj1zdHJ1Y3QgaW5vZGUgKmlub2RlX2luc2VydDUoc3RydWN0IGlub2RlICppbm9kZSwgdTY0IGhhc2h2YWwsXFxuLS1cXG5mcy9pbm9kZS5jLTEzNDMtXFx0ICogQWRkIGlub2RlIHRvIHRoZSBzYiBsaXN0IGlmIGl0J3Mgbm90IGFscmVhZHkuIEl0IGhhcyBJX05FVyBhdCB0aGlzXFxuZnMvaW5vZGUuYzoxMzQ0OlxcdCAqIHBvaW50LCBzbyBpdCBzaG91bGQgYmUgc2FmZSB0byB0ZXN0IGlfc2JfbGlzdCBsb2NrbGVzc2x5LlxcbmZzL2lub2RlLmMtMTM0NS1cXHQgKi9cXG5mcy9pbm9kZS5jOjEzNDY6XFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNmlub2RlLVxcdTAwM2VpX3NiX2xpc3QpKVxcbmZzL2lub2RlLmMtMTM0Ny1cXHRcXHRpbm9kZV9zYl9saXN0X2FkZChpbm9kZSk7XFxuLS1cXG5mcy9xdW90YS9kcXVvdC5jPTEwNDc9c3RhdGljIGludCBhZGRfZHF1b3RfcmVmKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKVxcbi0tXFxuZnMvcXVvdGEvZHF1b3QuYy0xMDU1LVxcdHNwaW5fbG9jayhcXHUwMDI2c2ItXFx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrKTtcXG5mcy9xdW90YS9kcXVvdC5jOjEwNTY6XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShpbm9kZSwgXFx1MDAyNnNiLVxcdTAwM2VzX2lub2RlcywgaV9zYl9saXN0KSB7XFxuZnMvcXVvdGEvZHF1b3QuYy0xMDU3LVxcdFxcdHNwaW5fbG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuLS1cXG5mcy9xdW90YS9kcXVvdC5jPTExMDQ9c3RhdGljIHZvaWQgcmVtb3ZlX2RxdW90X3JlZihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSlcXG4tLVxcbmZzL3F1b3RhL2RxdW90LmMtMTExMS1cXHRzcGluX2xvY2soXFx1MDAyNnNiLVxcdTAwM2VzX2lub2RlX2xpc3RfbG9jayk7XFxuZnMvcXVvdGEvZHF1b3QuYzoxMTEyOlxcdGxpc3RfZm9yX2VhY2hfZW50cnkoaW5vZGUsIFxcdTAwMjZzYi1cXHUwMDNlc19pbm9kZXMsIGlfc2JfbGlzdCkge1xcbmZzL3F1b3RhL2RxdW90LmMtMTExMy1cXHRcXHQvKlxcbi0tXFxuZnMvc3VwZXIuYz03NDE9dm9pZCBnZW5lcmljX3NodXRkb3duX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9zdXBlci5jLTc4Ny1cXHRcXHRcXHRzcGluX2xvY2soXFx1MDAyNnNiLVxcdTAwM2VzX2lub2RlX2xpc3RfbG9jayk7XFxuZnMvc3VwZXIuYzo3ODg6XFx0XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShpbm9kZSwgXFx1MDAyNnNiLVxcdTAwM2VzX2lub2RlcywgaV9zYl9saXN0KSB7XFxuZnMvc3VwZXIuYy03ODktXFx0XFx0XFx0XFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBWRlNfUFRSX1BPSVNPTjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6NTE6MDguNTkyMjQ3NDU0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjY2NjgxNjczNTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFBvdGVudGlhbCBMaXN0IENvcnJ1cHRpb24gaW4gYGV2aWN0X2lub2Rlc2AqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGBldmljdF9pbm9kZXNgIGluIGBmcy9pbm9kZS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBwYXJ0IHdoZXJlIGl0IGl0ZXJhdGVzIHRocm91Z2ggaW5vZGVzIG9uIGEgc3VwZXJibG9jayAoYHNiYCkgYW5kIGV2aWN0cyB0aGVtLiBJIHNlZSBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBpbnZvbHZpbmcgYGlub2RlX3NiX2xpc3RfZGVsKClgIGFuZCB0aGUgZHJvcHBpbmcgb2YgdGhlIGBzX2lub2RlX2xpc3RfbG9ja2AuXG5cblRoZSBjb2RlIHNldHMgaW5vZGVzIHRvIGBJX0ZSRUVJTkdgLCBhZGRzIHRoZW0gdG8gYSBcImRpc3Bvc2VcIiBsaXN0LCBhbmQgdGhlbiwgaWYgYSBgbmVlZF9yZXNjaGVkKClgIGNhbGwgaXMgbmVlZGVkLCBpdCByZWxlYXNlcyB0aGUgYHNfaW5vZGVfbGlzdF9sb2NrYCwgY2FsbHMgYGNvbmRfcmVzY2hlZCgpYCwgdGhlbiBjYWxscyBgZGlzcG9zZV9saXN0KFx1MDAyNmRpc3Bvc2UpYC5cblxuSGVyZSdzIHRoZSBwcm9ibGVtOiBgZGlzcG9zZV9saXN0YCBjYWxscyBgZXZpY3QoKWAgb24gdGhlIGlub2RlLCB3aGljaCBpbiB0dXJuIGNhbGxzIGBpbm9kZV9zYl9saXN0X2RlbCgpYC4gVGhpcyBmdW5jdGlvbiAqYWNxdWlyZXMqIHRoZSBgc19pbm9kZV9saXN0X2xvY2tgIHRvIHJlbW92ZSB0aGUgaW5vZGUgZnJvbSB0aGUgc3VwZXJibG9jaydzIGlub2RlIGxpc3QgKGBpX3NiX2xpc3RgKS5cblxuTm93LCB0aGUgaXNzdWUgaXMgdGhpczogQmV0d2VlbiB3aGVuIHRoZSBsb2NrIGlzICpyZWxlYXNlZCogaW4gYGV2aWN0X2lub2Rlc2AgYW5kIHdoZW4gaXQncyByZS1hY3F1aXJlZCBpbnNpZGUgYGlub2RlX3NiX2xpc3RfZGVsKClgLCBhbm90aGVyIHRocmVhZCBjb3VsZCBiZSBkb2luZyBhbGwgc29ydHMgb2YgdGhpbmdzIHdpdGggaW5vZGVzLiBJdCBjb3VsZCBiZSBjYWxsaW5nIGBpcHV0KClgLCB3aGljaCBjb3VsZCBsZWFkIHRvIGNvbmN1cnJlbnQgY2FsbHMgdG8gYGV2aWN0KClgIGFuZCB1bHRpbWF0ZWx5IGBpbm9kZV9zYl9saXN0X2RlbCgpYCBvbiBhIGRpZmZlcmVudCBpbm9kZS5cblxuU3BlY2lmaWNhbGx5LCB3aGlsZSBgZXZpY3RfaW5vZGVzYCBpcyBpdGVyYXRpbmcgd2l0aCBgbGlzdF9uZXh0X2VudHJ5YCwgYnV0IHdoaWxlIGl0IHJlbGVhc2VkIHRoZSBsb2NrIGluIGBpbm9kZWAgYW5kIHNldCBgSV9GUkVFSU5HYCB0byBgQmAsIGFuZCB0aGVuIG90aGVyIHRocmVhZHMgY291bGQgYmUgZnJlZWluZyBgQi1cdTAwM2VpX3NiX2xpc3QubmV4dGAsIHdoaWNoIGlzIHdoYXQgdGhlIGN1cnJlbnQgaXRlcmF0aW9uIG9mIGBldmljdF9pbm9kZXNgIGlzIGFib3V0IHRvIGxvb2sgYXQuIFRoaXMgbWlnaHQgY2F1c2UgYGxpc3RfbmV4dF9lbnRyeWAgdG8gYWNjZXNzIGZyZWVkIG1lbW9yeSBvciBhIG1vZGlmaWVkIGxpc3QgZW50cnkuXG5cblRoaXMgbWVhbnMgd2UgY291bGQgaGF2ZSBhIHVzZS1hZnRlci1mcmVlIHNpdHVhdGlvbiwgYSBsaXN0IGNvcnJ1cHRpb24sIG9yIHdvcnNlISBUaGUgY29tbWVudCAqdHJpZXMqIHRvIGV4cGxhaW4gdGhlIHJhdGlvbmFsZSBidXQgaXQgZG9lc24ndCBjb25zaWRlciAqdGhpcyogcG90ZW50aWFsIGNvbmZsaWN0LiBUaGUgY29kZSBhdHRlbXB0cyB0byBtaXRpZ2F0ZSB0aGlzIHdpdGggYElfRlJFRUlOR2AsIGJ1dCBpdCdzIG5vdCBlbm91Z2ggdG8gY292ZXIgdGhlIGRlc2NyaWJlZCBjb25mbGljdC5cblxuQ3J1Y2lhbGx5LCBgZXZpY3RfaW5vZGVzYCAqaXMqIHJlYWNoYWJsZSDigJMgaXQncyBjYWxsZWQgZHVyaW5nIGZpbGVzeXN0ZW0gdW5tb3VudHMgYW5kIHNodXRkb3duLiBTeXprYWxsZXIgaXMgY2FwYWJsZSBvZiB0cmlnZ2VyaW5nIHRoaXMgY29kZSBwYXRoLlxuXG5Pa2F5LCBsZXQncyBjb25maXJtOlxuXG4xLiAgKipXb3J0aEZ1enppbmc9dHJ1ZSoqOiBZZXMhIFRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaW4gYSBjb3JlIFZGUyBmdW5jdGlvbiAoYGV2aWN0X2lub2Rlc2ApIGNhbGxlZCBkdXJpbmcgdW5tb3VudHMuIFRoaXMgaW52b2x2ZXMgbG9naWMgYXJvdW5kIG1lbW9yeSBtYW5hZ2VtZW50LCBsb2NraW5nLCBhbmQgVkZTLCBtYWtpbmcgaXQgcmlwZSBmb3IgZnV6emluZy5cbjIuICAqKkZvY3VzU3ltYm9scyoqOiBUaGUgcHJpbWFyeSBmb2N1cyBpcyBgZXZpY3RfaW5vZGVzYC4gVGhlIHBhdGNoIGRpcmVjdGx5IG1vZGlmaWVzIHRoaXMgZnVuY3Rpb24uXG5cblRoZXJlZm9yZSwgdGhlIHRhcmdldCBoZXJlIGlzIGZ1enppbmcgYXJvdW5kIGBldmljdF9pbm9kZXNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjI5NywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6NTI6MTUuMjczOTIzOTgzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njg2MjAzMzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGlzcG9zZV9saXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2lub2RlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW5vZGUuYz03OTk9c3RhdGljIHZvaWQgZXZpY3Qoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2lub2RlLmMtODQ5LS8qXFxuZnMvaW5vZGUuYzo4NTA6ICogZGlzcG9zZV9saXN0IC0gZGlzcG9zZSBvZiB0aGUgY29udGVudHMgb2YgYSBsb2NhbCBsaXN0XFxuZnMvaW5vZGUuYy04NTEtICogQGhlYWQ6IHRoZSBoZWFkIG9mIHRoZSBsaXN0IHRvIGZyZWVcXG4tLVxcbmZzL2lub2RlLmMtODU1LSAqL1xcbmZzL2lub2RlLmM6ODU2OnN0YXRpYyB2b2lkIGRpc3Bvc2VfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbmZzL2lub2RlLmMtODU3LXtcXG4tLVxcbmZzL2lub2RlLmM9ODc4PXZvaWQgZXZpY3RfaW5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9pbm9kZS5jLTkwOS1cXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG5mcy9pbm9kZS5jOjkxMDpcXHRcXHRcXHRkaXNwb3NlX2xpc3QoXFx1MDAyNmRpc3Bvc2UpO1xcbmZzL2lub2RlLmMtOTExLVxcdFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2c2ItXFx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrKTtcXG4tLVxcbmZzL2lub2RlLmMtOTE2LVxcbmZzL2lub2RlLmM6OTE3OlxcdGRpc3Bvc2VfbGlzdChcXHUwMDI2ZGlzcG9zZSk7XFxuZnMvaW5vZGUuYy05MTgtfVxcbi0tXFxuZnMvaW5vZGUuYz05MzI9c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBpbm9kZV9scnVfaXNvbGF0ZShzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLFxcbi0tXFxuZnMvaW5vZGUuYy0xMDAwLSAqIHRvIHRyaW0gZnJvbSB0aGUgTFJVLiBJbm9kZXMgdG8gYmUgZnJlZWQgYXJlIG1vdmVkIHRvIGEgdGVtcG9yYXJ5IGxpc3QgYW5kXFxuZnMvaW5vZGUuYzoxMDAxOiAqIHRoZW4gYXJlIGZyZWVkIG91dHNpZGUgaW5vZGVfbG9jayBieSBkaXNwb3NlX2xpc3QoKS5cXG5mcy9pbm9kZS5jLTEwMDItICovXFxuZnMvaW5vZGUuYz0xMDAzPWxvbmcgcHJ1bmVfaWNhY2hlX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXFxuLS1cXG5mcy9pbm9kZS5jLTEwMDktXFx0XFx0XFx0XFx0ICAgICBpbm9kZV9scnVfaXNvbGF0ZSwgXFx1MDAyNmZyZWVhYmxlKTtcXG5mcy9pbm9kZS5jOjEwMTA6XFx0ZGlzcG9zZV9saXN0KFxcdTAwMjZmcmVlYWJsZSk7XFxuZnMvaW5vZGUuYy0xMDExLVxcdHJldHVybiBmcmVlZDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6NTI6MTUuNzQyNTUzOTg3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMxMjczOTMxMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGJlZW4gY2hhbmdlZCBhbmQgd2hlcmUuIEkgc2VlIGBkaXNwb3NlX2xpc3RgIGlzIHN0YXRpYywgdXNlZCB3aXRoaW4gYGV2aWN0X2lub2Rlc2AgYW5kIGBwcnVuZV9pY2FjaGVfc2JgLiBCdXQsIHRoZSBrZXkgbW9kaWZpY2F0aW9uIGlzIGFjdHVhbGx5IGluIGBldmljdF9pbm9kZXNgIGl0c2VsZiwgd2hpY2gsIGltcG9ydGFudGx5LCBpcyAqbm90KiBzdGF0aWMuIEkgbmVlZCB0byBuYWlsIGRvd24gZXhhY3RseSB3aGljaCBmdW5jdGlvbnMgYXJlIGFmZmVjdGVkIGZvciB0aGlzIHJldmlldywgc28gSSdtIGFza2luZyBteXNlbGYsIGNhbiBJIGluY2x1ZGUgYGdlbmVyaWNfc2h1dGRvd25fc3VwZXJgIGFzIHdlbGwsIG9yIGlzIGl0IGp1c3QgYGV2aWN0X2lub2Rlc2AgdGhhdCdzIHJlbGV2YW50IGhlcmU/IFRoZSBkb2N1bWVudGF0aW9uIHNheXMgdG8gZm9jdXMgb24gZnVuY3Rpb25zIGltcGxlbWVudGluZyB0aGUgYWx0ZXJlZCBsb2dpYyBkaXJlY3RseSwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cy4gVGhhdCBtYWtlcyBpdCBwcmV0dHkgY2xlYXI6IGBldmljdF9pbm9kZXNgIGlzIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UuXG5cbk5vdywganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkgc2hvdWxkIGNoZWNrIHRoYXQgbm90aGluZyBlbHNlIGluIHRoZSBzdXJyb3VuZGluZyBjb2RlIGhhcyBiZWVuIHRvdWNoZWQuIEl0IGxvb2tzIGxpa2UgaXQncyBqdXN0IGBldmljdF9pbm9kZXNgLiBHb29kLiBOZXh0LCBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlc2UgY2hhbmdlcyBhcmUgY29udGluZ2VudCBvbiBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIHNob3VsZCBjaGVjayBgZnMvaW5vZGUuY2Agc3BlY2lmaWNhbGx5LCBhbmQgc2VlIGlmIHRoZSBjaGFuZ2VzIHRvIGBldmljdF9pbm9kZXNgIGFyZSBjb25kaXRpb25hbCBvbiBhbnl0aGluZy4gTGV0J3Mgc2VlIHdoYXQgYGZzL01ha2VmaWxlYCBzYXlzIGFyb3VuZCBgaW5vZGUub2AuIFRoYXQgc2hvdWxkIHRlbGwgbWUgaWYgdGhlcmUgYXJlIGFueSBidWlsZC10aW1lIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDY1LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA1OjUyOjE4Ljg2OTk0OTcwMloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc3NDk5NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5vZGVcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzLzlwL01ha2VmaWxlPTI9b2JqLSQoQ09ORklHXzlQX0ZTKSA6PSA5cC5vXFxuLS1cXG5mcy85cC9NYWtlZmlsZS01LVxcdHZmc19zdXBlci5vIFxcXFxcXG5mcy85cC9NYWtlZmlsZTo2OlxcdHZmc19pbm9kZS5vIFxcXFxcXG5mcy85cC9NYWtlZmlsZS03LVxcdHZmc19pbm9kZV9kb3RsLm8gXFxcXFxcbi0tXFxuZnMvTWFrZWZpbGU9MTA9b2JqLXkgOj1cXHRvcGVuLm8gcmVhZF93cml0ZS5vIGZpbGVfdGFibGUubyBzdXBlci5vIFxcXFxcXG5mcy9NYWtlZmlsZS0xMS1cXHRcXHRjaGFyX2Rldi5vIHN0YXQubyBleGVjLm8gcGlwZS5vIG5hbWVpLm8gZmNudGwubyBcXFxcXFxuZnMvTWFrZWZpbGU6MTI6XFx0XFx0aW9jdGwubyByZWFkZGlyLm8gc2VsZWN0Lm8gZGNhY2hlLm8gaW5vZGUubyBcXFxcXFxuZnMvTWFrZWZpbGU6MTM6XFx0XFx0YXR0ci5vIGJhZF9pbm9kZS5vIGZpbGUubyBmaWxlc3lzdGVtcy5vIG5hbWVzcGFjZS5vIFxcXFxcXG5mcy9NYWtlZmlsZS0xNC1cXHRcXHRzZXFfZmlsZS5vIHhhdHRyLm8gbGliZnMubyBmcy13cml0ZWJhY2subyBcXFxcXFxuLS1cXG5mcy9hZGZzL01ha2VmaWxlPTY9b2JqLSQoQ09ORklHX0FERlNfRlMpICs9IGFkZnMub1xcbmZzL2FkZnMvTWFrZWZpbGUtNy1cXG5mcy9hZGZzL01ha2VmaWxlOjg6YWRmcy1vYmpzIDo9IGRpci5vIGRpcl9mLm8gZGlyX2ZwbHVzLm8gZmlsZS5vIGlub2RlLm8gbWFwLm8gc3VwZXIub1xcbi0tXFxuZnMvYWZmcy9NYWtlZmlsZT04PW9iai0kKENPTkZJR19BRkZTX0ZTKSArPSBhZmZzLm9cXG5mcy9hZmZzL01ha2VmaWxlLTktXFxuZnMvYWZmcy9NYWtlZmlsZToxMDphZmZzLW9ianMgOj0gc3VwZXIubyBuYW1laS5vIGlub2RlLm8gZmlsZS5vIGRpci5vIGFtaWdhZmZzLm8gYml0bWFwLm8gc3ltbGluay5vXFxuLS1cXG5mcy9hZnMvTWFrZWZpbGU9Nj1rYWZzLXkgOj0gXFxcXFxcbi0tXFxuZnMvYWZzL01ha2VmaWxlLTIyLVxcdGZzX3Byb2JlLm8gXFxcXFxcbmZzL2Fmcy9NYWtlZmlsZToyMzpcXHRpbm9kZS5vIFxcXFxcXG5mcy9hZnMvTWFrZWZpbGUtMjQtXFx0bWFpbi5vIFxcXFxcXG4tLVxcbmZzL2F1dG9mcy9NYWtlZmlsZT02PW9iai0kKENPTkZJR19BVVRPRlNfRlMpICs9IGF1dG9mczQub1xcbmZzL2F1dG9mcy9NYWtlZmlsZS03LVxcbmZzL2F1dG9mcy9NYWtlZmlsZTo4OmF1dG9mczQtb2JqcyA6PSBpbml0Lm8gaW5vZGUubyByb290Lm8gc3ltbGluay5vIHdhaXRxLm8gZXhwaXJlLm8gZGV2LWlvY3RsLm9cXG4tLVxcbmZzL2JlZnMvTWFrZWZpbGU9Nz1jY2ZsYWdzLSQoQ09ORklHX0JFRlNfREVCVUcpICAgICs9IC1EREVCVUdcXG5mcy9iZWZzL01ha2VmaWxlOjg6YmVmcy1vYmpzIDo9IGRhdGFzdHJlYW0ubyBidHJlZS5vIHN1cGVyLm8gaW5vZGUubyBkZWJ1Zy5vIGlvLm8gbGludXh2ZnMub1xcbi0tXFxuZnMvYnRyZnMvTWFrZWZpbGU9MjQ9YnRyZnMteSArPSBzdXBlci5vIGN0cmVlLm8gZXh0ZW50LXRyZWUubyBwcmludC10cmVlLm8gcm9vdC10cmVlLm8gZGlyLWl0ZW0ubyBcXFxcXFxuZnMvYnRyZnMvTWFrZWZpbGUtMjUtXFx0ICAgZmlsZS1pdGVtLm8gaW5vZGUtaXRlbS5vIGRpc2staW8ubyBcXFxcXFxuZnMvYnRyZnMvTWFrZWZpbGU6MjY6XFx0ICAgdHJhbnNhY3Rpb24ubyBpbm9kZS5vIGZpbGUubyBkZWZyYWcubyBcXFxcXFxuZnMvYnRyZnMvTWFrZWZpbGUtMjctXFx0ICAgZXh0ZW50X21hcC5vIHN5c2ZzLm8gYWNjZXNzb3JzLm8geGF0dHIubyBvcmRlcmVkLWRhdGEubyBcXFxcXFxuLS1cXG5mcy9idHJmcy9NYWtlZmlsZS0yOS1cXHQgICBleHBvcnQubyB0cmVlLWxvZy5vIGZyZWUtc3BhY2UtY2FjaGUubyB6bGliLm8gbHpvLm8genN0ZC5vIFxcXFxcXG5mcy9idHJmcy9NYWtlZmlsZTozMDpcXHQgICBjb21wcmVzc2lvbi5vIGRlbGF5ZWQtcmVmLm8gcmVsb2NhdGlvbi5vIGRlbGF5ZWQtaW5vZGUubyBzY3J1Yi5vIFxcXFxcXG5mcy9idHJmcy9NYWtlZmlsZS0zMS1cXHQgICBiYWNrcmVmLm8gdWxpc3QubyBxZ3JvdXAubyBzZW5kLm8gZGV2LXJlcGxhY2UubyByYWlkNTYubyBcXFxcXFxuLS1cXG5mcy9jZXBoL01ha2VmaWxlPTY9b2JqLSQoQ09ORklHX0NFUEhfRlMpICs9IGNlcGgub1xcbmZzL2NlcGgvTWFrZWZpbGUtNy1cXG5mcy9jZXBoL01ha2VmaWxlOjg6Y2VwaC15IDo9IHN1cGVyLm8gaW5vZGUubyBkaXIubyBmaWxlLm8gbG9ja3MubyBhZGRyLm8gaW9jdGwubyBcXFxcXFxuZnMvY2VwaC9NYWtlZmlsZS05LVxcdGV4cG9ydC5vIGNhcHMubyBzbmFwLm8geGF0dHIubyBxdW90YS5vIGlvLm8gXFxcXFxcbi0tXFxuZnMvY29kYS9NYWtlZmlsZT02PW9iai0kKENPTkZJR19DT0RBX0ZTKSArPSBjb2RhLm9cXG5mcy9jb2RhL01ha2VmaWxlLTctXFxuZnMvY29kYS9NYWtlZmlsZTo4OmNvZGEtb2JqcyA6PSBwc2Rldi5vIGNhY2hlLm8gY25vZGUubyBpbm9kZS5vIGRpci5vIGZpbGUubyB1cGNhbGwubyBcXFxcXFxuZnMvY29kYS9NYWtlZmlsZS05LVxcdCAgICAgY29kYV9saW51eC5vIHN5bWxpbmsubyBwaW9jdGwub1xcbi0tXFxuZnMvY29uZmlnZnMvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfQ09ORklHRlNfRlMpXFx0Kz0gY29uZmlnZnMub1xcbmZzL2NvbmZpZ2ZzL01ha2VmaWxlLTctXFxuZnMvY29uZmlnZnMvTWFrZWZpbGU6ODpjb25maWdmcy1vYmpzXFx0Oj0gaW5vZGUubyBmaWxlLm8gZGlyLm8gc3ltbGluay5vIG1vdW50Lm8gaXRlbS5vXFxuLS1cXG5mcy9jcmFtZnMvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfQ1JBTUZTKSArPSBjcmFtZnMub1xcbmZzL2NyYW1mcy9NYWtlZmlsZS03LVxcbmZzL2NyYW1mcy9NYWtlZmlsZTo4OmNyYW1mcy1vYmpzIDo9IGlub2RlLm8gdW5jb21wcmVzcy5vXFxuLS1cXG5mcy9kZWJ1Z2ZzL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvZGVidWdmcy9NYWtlZmlsZToyOmRlYnVnZnMtb2Jqc1xcdDo9IGlub2RlLm8gZmlsZS5vXFxuZnMvZGVidWdmcy9NYWtlZmlsZS0zLVxcbi0tXFxuZnMvZGV2cHRzL01ha2VmaWxlPTY9b2JqLSQoQ09ORklHX1VOSVg5OF9QVFlTKVxcdFxcdCs9IGRldnB0cy5vXFxuZnMvZGV2cHRzL01ha2VmaWxlLTctXFxuZnMvZGV2cHRzL01ha2VmaWxlOjg6ZGV2cHRzLSQoQ09ORklHX1VOSVg5OF9QVFlTKVxcdFxcdDo9IGlub2RlLm9cXG4tLVxcbmZzL2VjcnlwdGZzL01ha2VmaWxlPTY9b2JqLSQoQ09ORklHX0VDUllQVF9GUykgKz0gZWNyeXB0ZnMub1xcbmZzL2VjcnlwdGZzL01ha2VmaWxlLTctXFxuZnMvZWNyeXB0ZnMvTWFrZWZpbGU6ODplY3J5cHRmcy15IDo9IGRlbnRyeS5vIGZpbGUubyBpbm9kZS5vIG1haW4ubyBzdXBlci5vIG1tYXAubyByZWFkX3dyaXRlLm8gXFxcXFxcbmZzL2VjcnlwdGZzL01ha2VmaWxlLTktXFx0ICAgICAgY3J5cHRvLm8ga2V5c3RvcmUubyBrdGhyZWFkLm8gZGVidWcub1xcbi0tXFxuZnMvZWZpdmFyZnMvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfRUZJVkFSX0ZTKVxcdFxcdCs9IGVmaXZhcmZzLm9cXG5mcy9lZml2YXJmcy9NYWtlZmlsZS03LVxcbmZzL2VmaXZhcmZzL01ha2VmaWxlOjg6ZWZpdmFyZnMtb2Jqc1xcdFxcdFxcdDo9IGlub2RlLm8gZmlsZS5vIHN1cGVyLm8gdmFycy5vXFxuLS1cXG5mcy9lcm9mcy9NYWtlZmlsZT0zPW9iai0kKENPTkZJR19FUk9GU19GUykgKz0gZXJvZnMub1xcbmZzL2Vyb2ZzL01ha2VmaWxlOjQ6ZXJvZnMtb2JqcyA6PSBzdXBlci5vIGlub2RlLm8gZGF0YS5vIG5hbWVpLm8gZGlyLm8gc3lzZnMub1xcbmZzL2Vyb2ZzL01ha2VmaWxlLTUtZXJvZnMtJChDT05GSUdfRVJPRlNfRlNfWEFUVFIpICs9IHhhdHRyLm9cXG4tLVxcbmZzL2V4ZmF0L01ha2VmaWxlPTU9b2JqLSQoQ09ORklHX0VYRkFUX0ZTKSArPSBleGZhdC5vXFxuZnMvZXhmYXQvTWFrZWZpbGUtNi1cXG5mcy9leGZhdC9NYWtlZmlsZTo3OmV4ZmF0LXlcXHQ6PSBpbm9kZS5vIG5hbWVpLm8gZGlyLm8gc3VwZXIubyBmYXRlbnQubyBjYWNoZS5vIG5scy5vIG1pc2MubyBcXFxcXFxuZnMvZXhmYXQvTWFrZWZpbGUtOC1cXHQgICBmaWxlLm8gYmFsbG9jLm8gaW9tYXAub1xcbi0tXFxuZnMvZXh0Mi9NYWtlZmlsZT02PW9iai0kKENPTkZJR19FWFQyX0ZTKSArPSBleHQyLm9cXG5mcy9leHQyL01ha2VmaWxlLTctXFxuZnMvZXh0Mi9NYWtlZmlsZTo4OmV4dDIteSA6PSBiYWxsb2MubyBkaXIubyBmaWxlLm8gaWFsbG9jLm8gaW5vZGUubyBcXFxcXFxuZnMvZXh0Mi9NYWtlZmlsZS05LVxcdCAgaW9jdGwubyBuYW1laS5vIHN1cGVyLm8gc3ltbGluay5vIHRyYWNlLm9cXG4tLVxcbmZzL2V4dDQvTWFrZWZpbGU9OD1leHQ0LXlcXHQ6PSBiYWxsb2MubyBiaXRtYXAubyBibG9ja192YWxpZGl0eS5vIGRpci5vIGV4dDRfamJkMi5vIGV4dGVudHMubyBcXFxcXFxuZnMvZXh0NC9NYWtlZmlsZS05LVxcdFxcdGV4dGVudHNfc3RhdHVzLm8gZmlsZS5vIGZzbWFwLm8gZnN5bmMubyBoYXNoLm8gaWFsbG9jLm8gXFxcXFxcbmZzL2V4dDQvTWFrZWZpbGU6MTA6XFx0XFx0aW5kaXJlY3QubyBpbmxpbmUubyBpbm9kZS5vIGlvY3RsLm8gbWJhbGxvYy5vIG1pZ3JhdGUubyBcXFxcXFxuZnMvZXh0NC9NYWtlZmlsZS0xMS1cXHRcXHRtbXAubyBtb3ZlX2V4dGVudC5vIG5hbWVpLm8gcGFnZS1pby5vIHJlYWRwYWdlLm8gcmVzaXplLm8gXFxcXFxcbi0tXFxuZnMvZjJmcy9NYWtlZmlsZT0yPW9iai0kKENPTkZJR19GMkZTX0ZTKSArPSBmMmZzLm9cXG5mcy9mMmZzL01ha2VmaWxlLTMtXFxuZnMvZjJmcy9NYWtlZmlsZTo0OmYyZnMteVxcdFxcdDo9IGRpci5vIGZpbGUubyBpbm9kZS5vIG5hbWVpLm8gaGFzaC5vIHN1cGVyLm8gaW5saW5lLm9cXG5mcy9mMmZzL01ha2VmaWxlLTUtZjJmcy15XFx0XFx0Kz0gY2hlY2twb2ludC5vIGdjLm8gZGF0YS5vIG5vZGUubyBzZWdtZW50Lm8gcmVjb3Zlcnkub1xcbi0tXFxuZnMvZmF0L01ha2VmaWxlPTg9b2JqLSQoQ09ORklHX01TRE9TX0ZTKSArPSBtc2Rvcy5vXFxuZnMvZmF0L01ha2VmaWxlLTktXFxuZnMvZmF0L01ha2VmaWxlOjEwOmZhdC15IDo9IGNhY2hlLm8gZGlyLm8gZmF0ZW50Lm8gZmlsZS5vIGlub2RlLm8gbWlzYy5vIG5mcy5vXFxuZnMvZmF0L01ha2VmaWxlLTExLXZmYXQteSA6PSBuYW1laV92ZmF0Lm9cXG4tLVxcbmZzL2Z1c2UvTWFrZWZpbGU9MTM9ZnVzZS15IDo9IHRyYWNlLm9cXHQjIHB1dCB0cmFjZS5vIGZpcnN0IHNvIHdlIHNlZSBmdHJhY2UgZXJyb3JzIHNvb25lclxcbmZzL2Z1c2UvTWFrZWZpbGU6MTQ6ZnVzZS15ICs9IGRldi5vIGRpci5vIGZpbGUubyBpbm9kZS5vIGNvbnRyb2wubyB4YXR0ci5vIGFjbC5vIHJlYWRkaXIubyBpb2N0bC5vIHJlcV90aW1lb3V0Lm8gcmVxLm9cXG5mcy9mdXNlL01ha2VmaWxlLTE1LWZ1c2UteSArPSBwb2xsLm8gbm90aWZ5Lm9cXG4tLVxcbmZzL2dmczIvTWFrZWZpbGU9ND1nZnMyLXkgOj0gYWNsLm8gYm1hcC5vIGRpci5vIHhhdHRyLm8gZ2xvY2subyBcXFxcXFxuLS1cXG5mcy9nZnMyL01ha2VmaWxlLTYtXFx0YW9wcy5vIGRlbnRyeS5vIGV4cG9ydC5vIGZpbGUubyBcXFxcXFxuZnMvZ2ZzMi9NYWtlZmlsZTo3OlxcdG9wc19mc3R5cGUubyBpbm9kZS5vIHF1b3RhLm8gXFxcXFxcbmZzL2dmczIvTWFrZWZpbGUtOC1cXHRyZWNvdmVyeS5vIHJncnAubyBzdXBlci5vIHN5cy5vIHRyYW5zLm8gdXRpbC5vXFxuLS1cXG5mcy9oZnMvTWFrZWZpbGU9OD1oZnMtb2JqcyA6PSBiaXRtYXAubyBiZmluZC5vIGJub2RlLm8gYnJlYy5vIGJ0cmVlLm8gXFxcXFxcbmZzL2hmcy9NYWtlZmlsZTo5OlxcdCAgICBjYXRhbG9nLm8gZGlyLm8gZXh0ZW50Lm8gaW5vZGUubyBhdHRyLm8gbWRiLm8gXFxcXFxcbmZzL2hmcy9NYWtlZmlsZS0xMC0gICAgICAgICAgICBwYXJ0X3RibC5vIHN0cmluZy5vIHN1cGVyLm8gc3lzZGVwLm8gdHJhbnMub1xcbi0tXFxuZnMvaGZzcGx1cy9NYWtlZmlsZT02PW9iai0kKENPTkZJR19IRlNQTFVTX0ZTKSArPSBoZnNwbHVzLm9cXG5mcy9oZnNwbHVzL01ha2VmaWxlLTctXFxuZnMvaGZzcGx1cy9NYWtlZmlsZTo4Omhmc3BsdXMtb2JqcyA6PSBzdXBlci5vIG9wdGlvbnMubyBpbm9kZS5vIGlvY3RsLm8gZXh0ZW50cy5vIGNhdGFsb2cubyBkaXIubyBidHJlZS5vIFxcXFxcXG5mcy9oZnNwbHVzL01ha2VmaWxlLTktXFx0XFx0Ym5vZGUubyBicmVjLm8gYmZpbmQubyB0YWJsZXMubyB1bmljb2RlLm8gd3JhcHBlci5vIGJpdG1hcC5vIHBhcnRfdGJsLm8gXFxcXFxcbi0tXFxuZnMvaHBmcy9NYWtlZmlsZT04PWhwZnMtb2JqcyA6PSBhbGxvYy5vIGFub2RlLm8gYnVmZmVyLm8gZGVudHJ5Lm8gZGlyLm8gZG5vZGUubyBlYS5vIGZpbGUubyBcXFxcXFxuZnMvaHBmcy9NYWtlZmlsZTo5OlxcdCAgICAgaW5vZGUubyBtYXAubyBuYW1lLm8gbmFtZWkubyBzdXBlci5vXFxuLS1cXG5mcy9odWdldGxiZnMvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfSFVHRVRMQkZTKSArPSBodWdldGxiZnMub1xcbmZzL2h1Z2V0bGJmcy9NYWtlZmlsZS03LVxcbmZzL2h1Z2V0bGJmcy9NYWtlZmlsZTo4Omh1Z2V0bGJmcy1vYmpzIDo9IGlub2RlLm9cXG4tLVxcbmZzL2lzb2ZzL01ha2VmaWxlPTY9b2JqLSQoQ09ORklHX0lTTzk2NjBfRlMpICs9IGlzb2ZzLm9cXG5mcy9pc29mcy9NYWtlZmlsZS03LVxcbmZzL2lzb2ZzL01ha2VmaWxlOjg6aXNvZnMteSBcXHRcXHQ6PSBuYW1laS5vIGlub2RlLm8gZGlyLm8gdXRpbC5vIHJvY2subyBleHBvcnQub1xcbmZzL2lzb2ZzL01ha2VmaWxlLTktaXNvZnMtJChDT05GSUdfSk9MSUVUKVxcdCs9IGpvbGlldC5vXFxuLS1cXG5mcy9qZmZzMi9NYWtlZmlsZT05PWpmZnMyLXlcXHQ6PSBjb21wci5vIGRpci5vIGZpbGUubyBpb2N0bC5vIG5vZGVsaXN0Lm8gbWFsbG9jLm9cXG5mcy9qZmZzMi9NYWtlZmlsZToxMDpqZmZzMi15XFx0Kz0gcmVhZC5vIG5vZGVtZ210Lm8gcmVhZGlub2RlLm8gd3JpdGUubyBzY2FuLm8gZ2Mub1xcbmZzL2pmZnMyL01ha2VmaWxlLTExLWpmZnMyLXlcXHQrPSBzeW1saW5rLm8gYnVpbGQubyBlcmFzZS5vIGJhY2tncm91bmQubyBmcy5vIHdyaXRldi5vXFxuLS1cXG5mcy9qZnMvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfSkZTX0ZTKSArPSBqZnMub1xcbmZzL2pmcy9NYWtlZmlsZS03LVxcbmZzL2pmcy9NYWtlZmlsZTo4Ompmcy15ICAgIDo9IHN1cGVyLm8gZmlsZS5vIGlub2RlLm8gbmFtZWkubyBqZnNfbW91bnQubyBqZnNfdW1vdW50Lm8gXFxcXFxcbmZzL2pmcy9NYWtlZmlsZS05LVxcdCAgICBqZnNfeHRyZWUubyBqZnNfaW1hcC5vIGpmc19kZWJ1Zy5vIGpmc19kbWFwLm8gXFxcXFxcbmZzL2pmcy9NYWtlZmlsZToxMDpcXHQgICAgamZzX3VuaWNvZGUubyBqZnNfZHRyZWUubyBqZnNfaW5vZGUubyBqZnNfZGlzY2FyZC5vIFxcXFxcXG5mcy9qZnMvTWFrZWZpbGUtMTEtXFx0ICAgIGpmc19leHRlbnQubyBzeW1saW5rLm8gamZzX21ldGFwYWdlLm8gXFxcXFxcbi0tXFxuZnMva2VybmZzL01ha2VmaWxlLTUtXFxuZnMva2VybmZzL01ha2VmaWxlOjY6b2JqLXlcXHRcXHQ6PSBtb3VudC5vIGlub2RlLm8gZGlyLm8gZmlsZS5vIHN5bWxpbmsub1xcbi0tXFxuZnMvbWluaXgvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfTUlOSVhfRlMpICs9IG1pbml4Lm9cXG5mcy9taW5peC9NYWtlZmlsZS03LVxcbmZzL21pbml4L01ha2VmaWxlOjg6bWluaXgtb2JqcyA6PSBiaXRtYXAubyBpdHJlZV92MS5vIGl0cmVlX3YyLm8gbmFtZWkubyBpbm9kZS5vIGZpbGUubyBkaXIub1xcbi0tXFxuZnMvbmZzL01ha2VmaWxlPTg9Q0ZMQUdTX25mc3RyYWNlLm8gKz0gLUkkKHNyYylcXG5mcy9uZnMvTWFrZWZpbGU6OTpuZnMteSBcXHRcXHRcXHQ6PSBjbGllbnQubyBkaXIubyBmaWxlLm8gZ2V0cm9vdC5vIGlub2RlLm8gc3VwZXIubyBcXFxcXFxuZnMvbmZzL01ha2VmaWxlLTEwLVxcdFxcdFxcdCAgIGlvLm8gZGlyZWN0Lm8gcGFnZWxpc3QubyByZWFkLm8gc3ltbGluay5vIHVubGluay5vIFxcXFxcXG4tLVxcbmZzL25pbGZzMi9NYWtlZmlsZT0yPW9iai0kKENPTkZJR19OSUxGUzJfRlMpICs9IG5pbGZzMi5vXFxuZnMvbmlsZnMyL01ha2VmaWxlOjM6bmlsZnMyLXkgOj0gaW5vZGUubyBmaWxlLm8gZGlyLm8gc3VwZXIubyBuYW1laS5vIHBhZ2UubyBtZHQubyBcXFxcXFxuZnMvbmlsZnMyL01ha2VmaWxlLTQtXFx0YnRub2RlLm8gYm1hcC5vIGJ0cmVlLm8gZGlyZWN0Lm8gZGF0Lm8gcmVjb3ZlcnkubyBcXFxcXFxuZnMvbmlsZnMyL01ha2VmaWxlLTUtXFx0dGhlX25pbGZzLm8gc2VnYnVmLm8gc2VnbWVudC5vIGNwZmlsZS5vIHN1ZmlsZS5vIFxcXFxcXG5mcy9uaWxmczIvTWFrZWZpbGU6NjpcXHRpZmlsZS5vIGFsbG9jLm8gZ2Npbm9kZS5vIGlvY3RsLm8gc3lzZnMub1xcbi0tXFxuZnMvbnRmcy9NYWtlZmlsZT0zPW9iai0kKENPTkZJR19OVEZTX0ZTKSArPSBudGZzLm9cXG5mcy9udGZzL01ha2VmaWxlLTQtXFxuZnMvbnRmcy9NYWtlZmlsZTo1Om50ZnMteSA6PSBhb3BzLm8gYXR0cmliLm8gY29sbGF0ZS5vIGRpci5vIGZpbGUubyBpbmRleC5vIGlub2RlLm8gXFxcXFxcbmZzL250ZnMvTWFrZWZpbGUtNi1cXHQgIG1mdC5vIG1zdC5vIG5hbWVpLm8gcnVubGlzdC5vIHN1cGVyLm8gdW5pc3RyLm8gYXR0cmxpc3QubyBlYS5vIFxcXFxcXG4tLVxcbmZzL250ZnMzL01ha2VmaWxlPTMzPW50ZnMzLXkgOj1cXHRhdHRyaWIubyBcXFxcXFxuLS1cXG5mcy9udGZzMy9NYWtlZmlsZS00MS1cXHRcXHRmc2xvZy5vIFxcXFxcXG5mcy9udGZzMy9NYWtlZmlsZTo0MjpcXHRcXHRpbm9kZS5vIFxcXFxcXG5mcy9udGZzMy9NYWtlZmlsZS00My1cXHRcXHRpbmRleC5vIFxcXFxcXG4tLVxcbmZzL29jZnMyL01ha2VmaWxlPTExPW9jZnMyLW9ianMgOj0gXFxcXFxcbi0tXFxuZnMvb2NmczIvTWFrZWZpbGUtMjItXFx0aGVhcnRiZWF0Lm8gXFx0XFx0XFxcXFxcbmZzL29jZnMyL01ha2VmaWxlOjIzOlxcdGlub2RlLm8gXFx0XFx0XFxcXFxcbmZzL29jZnMyL01ha2VmaWxlLTI0LVxcdGlvY3RsLm8gXFx0XFx0XFxcXFxcbi0tXFxuZnMvb21mcy9NYWtlZmlsZT0zPW9iai0kKENPTkZJR19PTUZTX0ZTKSArPSBvbWZzLm9cXG5mcy9vbWZzL01ha2VmaWxlLTQtXFxuZnMvb21mcy9NYWtlZmlsZTo1Om9tZnMteSA6PSBiaXRtYXAubyBkaXIubyBmaWxlLm8gaW5vZGUub1xcbi0tXFxuZnMvb3BlbnByb21mcy9NYWtlZmlsZT02PW9iai0kKENPTkZJR19TVU5fT1BFTlBST01GUykgKz0gb3BlbnByb21mcy5vXFxuZnMvb3BlbnByb21mcy9NYWtlZmlsZS03LVxcbmZzL29wZW5wcm9tZnMvTWFrZWZpbGU6ODpvcGVucHJvbWZzLW9ianMgOj0gaW5vZGUub1xcbi0tXFxuZnMvb3JhbmdlZnMvTWFrZWZpbGU9OD1vcmFuZ2Vmcy1vYmpzIDo9IGFjbC5vIGZpbGUubyBvcmFuZ2Vmcy1jYWNoZS5vIG9yYW5nZWZzLXV0aWxzLm8geGF0dHIubyBcXFxcXFxuZnMvb3JhbmdlZnMvTWFrZWZpbGU6OTpcXHRcXHQgZGNhY2hlLm8gaW5vZGUubyBvcmFuZ2Vmcy1zeXNmcy5vIG9yYW5nZWZzLW1vZC5vIHN1cGVyLm8gXFxcXFxcbmZzL29yYW5nZWZzL01ha2VmaWxlLTEwLVxcdFxcdCBkZXZvcmFuZ2Vmcy1yZXEubyBuYW1laS5vIHN5bWxpbmsubyBkaXIubyBvcmFuZ2Vmcy1idWZtYXAubyBcXFxcXFxuLS1cXG5mcy9vdmVybGF5ZnMvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfT1ZFUkxBWV9GUykgKz0gb3ZlcmxheS5vXFxuZnMvb3ZlcmxheWZzL01ha2VmaWxlLTctXFxuZnMvb3ZlcmxheWZzL01ha2VmaWxlOjg6b3ZlcmxheS1vYmpzIDo9IHN1cGVyLm8gbmFtZWkubyB1dGlsLm8gaW5vZGUubyBmaWxlLm8gZGlyLm8gcmVhZGRpci5vIFxcXFxcXG5mcy9vdmVybGF5ZnMvTWFrZWZpbGUtOS1cXHRcXHRjb3B5X3VwLm8gZXhwb3J0Lm8gcGFyYW1zLm8geGF0dHJzLm9cXG4tLVxcbmZzL3Byb2MvTWFrZWZpbGU9MTA9cHJvYy0kKENPTkZJR19NTVUpXFx0Oj0gdGFza19tbXUub1xcbmZzL3Byb2MvTWFrZWZpbGUtMTEtXFxuZnMvcHJvYy9NYWtlZmlsZToxMjpwcm9jLXkgICAgICAgKz0gaW5vZGUubyByb290Lm8gYmFzZS5vIGdlbmVyaWMubyBhcnJheS5vIFxcXFxcXG5mcy9wcm9jL01ha2VmaWxlLTEzLVxcdFxcdGZkLm9cXG4tLVxcbmZzL3BzdG9yZS9NYWtlZmlsZT02PW9iai0kKENPTkZJR19QU1RPUkUpICs9IHBzdG9yZS5vXFxuZnMvcHN0b3JlL01ha2VmaWxlLTctXFxuZnMvcHN0b3JlL01ha2VmaWxlOjg6cHN0b3JlLW9ianMgKz0gaW5vZGUubyBwbGF0Zm9ybS5vXFxuZnMvcHN0b3JlL01ha2VmaWxlLTktcHN0b3JlLSQoQ09ORklHX1BTVE9SRV9GVFJBQ0UpXFx0Kz0gZnRyYWNlLm9cXG4tLVxcbmZzL3FueDQvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfUU5YNEZTX0ZTKSArPSBxbng0Lm9cXG5mcy9xbng0L01ha2VmaWxlLTctXFxuZnMvcW54NC9NYWtlZmlsZTo4OnFueDQtb2JqcyA6PSBpbm9kZS5vIGRpci5vIG5hbWVpLm8gYml0bWFwLm9cXG4tLVxcbmZzL3FueDYvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfUU5YNkZTX0ZTKSArPSBxbng2Lm9cXG5mcy9xbng2L01ha2VmaWxlLTctXFxuZnMvcW54Ni9NYWtlZmlsZTo4OnFueDYtb2JqcyA6PSBpbm9kZS5vIGRpci5vIG5hbWVpLm8gc3VwZXJfbW1pLm9cXG5mcy9xbng2L01ha2VmaWxlLTktY2NmbGFncy0kKENPTkZJR19RTlg2RlNfREVCVUcpXFx0Kz0gLURERUJVR1xcbi0tXFxuZnMvcmFtZnMvTWFrZWZpbGU9OT1maWxlLW1tdS0kKENPTkZJR19NTVUpIDo9IGZpbGUtbW11Lm9cXG5mcy9yYW1mcy9NYWtlZmlsZToxMDpyYW1mcy1vYmpzICs9IGlub2RlLm8gJChmaWxlLW1tdS15KVxcbi0tXFxuZnMvc21iL2NsaWVudC9NYWtlZmlsZT04PWNpZnMteSA6PSB0cmFjZS5vIGNpZnNmcy5vIGNpZnNfZGVidWcubyBjb25uZWN0Lm8gZGlyLm8gZmlsZS5vIFxcXFxcXG5mcy9zbWIvY2xpZW50L01ha2VmaWxlOjk6XFx0ICBpbm9kZS5vIGxpbmsubyBtaXNjLm8gbmV0bWlzYy5vIHNtYmVuY3J5cHQubyB0cmFuc3BvcnQubyBcXFxcXFxuZnMvc21iL2NsaWVudC9NYWtlZmlsZS0xMC1cXHQgIGNhY2hlZF9kaXIubyBjaWZzX3VuaWNvZGUubyBjaWZzZW5jcnlwdC5vIFxcXFxcXG4tLVxcbmZzL3NtYi9jbGllbnQvTWFrZWZpbGUtMTItXFx0ICBzbWIyb3BzLm8gc21iMm1hcGVycm9yLm8gc21iMnRyYW5zcG9ydC5vIFxcXFxcXG5mcy9zbWIvY2xpZW50L01ha2VmaWxlOjEzOlxcdCAgc21iMm1pc2MubyBzbWIycGR1Lm8gc21iMmlub2RlLm8gc21iMmZpbGUubyBjaWZzYWNsLm8gZnNfY29udGV4dC5vIFxcXFxcXG5mcy9zbWIvY2xpZW50L01ha2VmaWxlLTE0LVxcdCAgZG5zX3Jlc29sdmUubyBjaWZzX3NwbmVnb19uZWd0b2tlbmluaXQuYXNuMS5vIGFzbjEubyBcXFxcXFxuLS1cXG5mcy9zcXVhc2hmcy9NYWtlZmlsZT02PW9iai0kKENPTkZJR19TUVVBU0hGUykgKz0gc3F1YXNoZnMub1xcbmZzL3NxdWFzaGZzL01ha2VmaWxlOjc6c3F1YXNoZnMteSArPSBibG9jay5vIGNhY2hlLm8gZGlyLm8gZXhwb3J0Lm8gZmlsZS5vIGZyYWdtZW50Lm8gaWQubyBpbm9kZS5vXFxuZnMvc3F1YXNoZnMvTWFrZWZpbGUtOC1zcXVhc2hmcy15ICs9IG5hbWVpLm8gc3VwZXIubyBzeW1saW5rLm8gZGVjb21wcmVzc29yLm8gcGFnZV9hY3Rvci5vXFxuLS1cXG5mcy90cmFjZWZzL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvdHJhY2Vmcy9NYWtlZmlsZToyOnRyYWNlZnMtb2Jqc1xcdDo9IGlub2RlLm9cXG5mcy90cmFjZWZzL01ha2VmaWxlOjM6dHJhY2Vmcy1vYmpzXFx0Kz0gZXZlbnRfaW5vZGUub1xcbmZzL3RyYWNlZnMvTWFrZWZpbGUtNC1cXG4tLVxcbmZzL3VkZi9NYWtlZmlsZT02PW9iai0kKENPTkZJR19VREZfRlMpICs9IHVkZi5vXFxuZnMvdWRmL01ha2VmaWxlLTctXFxuZnMvdWRmL01ha2VmaWxlOjg6dWRmLW9ianMgICAgIDo9IGJhbGxvYy5vIGRpci5vIGZpbGUubyBpYWxsb2MubyBpbm9kZS5vIGxvd2xldmVsLm8gbmFtZWkubyBcXFxcXFxuZnMvdWRmL01ha2VmaWxlLTktXFx0XFx0cGFydGl0aW9uLm8gc3VwZXIubyB0cnVuY2F0ZS5vIHN5bWxpbmsubyBcXFxcXFxuLS1cXG5mcy91ZnMvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfVUZTX0ZTKSArPSB1ZnMub1xcbmZzL3Vmcy9NYWtlZmlsZS03LVxcbmZzL3Vmcy9NYWtlZmlsZTo4OnVmcy1vYmpzIDo9IGJhbGxvYy5vIGN5bGluZGVyLm8gZGlyLm8gZmlsZS5vIGlhbGxvYy5vIGlub2RlLm8gXFxcXFxcbmZzL3Vmcy9NYWtlZmlsZS05LVxcdCAgICBuYW1laS5vIHN1cGVyLm8gdXRpbC5vXFxuLS1cXG5mcy94ZnMvTWFrZWZpbGU9MTY9eGZzLXlcXHRcXHRcXHRcXHQrPSAkKGFkZHByZWZpeCBsaWJ4ZnMvLCBcXFxcXFxuLS1cXG5mcy94ZnMvTWFrZWZpbGUtNTctXFx0XFx0XFx0XFx0ICAgeGZzX3N5bWxpbmtfcmVtb3RlLm8gXFxcXFxcbmZzL3hmcy9NYWtlZmlsZTo1ODpcXHRcXHRcXHRcXHQgICB4ZnNfdHJhbnNfaW5vZGUubyBcXFxcXFxuZnMveGZzL01ha2VmaWxlLTU5LVxcdFxcdFxcdFxcdCAgIHhmc190cmFuc19yZXN2Lm8gXFxcXFxcbi0tXFxuZnMveGZzL01ha2VmaWxlPTcxPXhmcy15XFx0XFx0XFx0XFx0Kz0geGZzX2FvcHMubyBcXFxcXFxuLS1cXG5mcy94ZnMvTWFrZWZpbGUtOTYtXFx0XFx0XFx0XFx0ICAgeGZzX2lvcHMubyBcXFxcXFxuZnMveGZzL01ha2VmaWxlOjk3OlxcdFxcdFxcdFxcdCAgIHhmc19pbm9kZS5vIFxcXFxcXG5mcy94ZnMvTWFrZWZpbGUtOTgtXFx0XFx0XFx0XFx0ICAgeGZzX2l0YWJsZS5vIFxcXFxcXG4tLVxcbmZzL3hmcy9NYWtlZmlsZT0xNjk9eGZzLXlcXHRcXHRcXHRcXHQrPSAkKGFkZHByZWZpeCBzY3J1Yi8sIFxcXFxcXG4tLVxcbmZzL3hmcy9NYWtlZmlsZS0xODQtXFx0XFx0XFx0XFx0ICAgaWFsbG9jLm8gXFxcXFxcbmZzL3hmcy9NYWtlZmlsZToxODU6XFx0XFx0XFx0XFx0ICAgaW5vZGUubyBcXFxcXFxuZnMveGZzL01ha2VmaWxlLTE4Ni1cXHRcXHRcXHRcXHQgICBpc2Nhbi5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6NTI6MTguOTQ3NzA0OTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzY0MzMxMzk2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgZnMvaW5vZGUuY2AgQ2hhbmdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBtb2RpZmljYXRpb24gdG8gYGZzL2lub2RlLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBldmljdF9pbm9kZXMoKWAgZnVuY3Rpb24sIHdoaWNoIGlzLCBvZiBjb3Vyc2UsIGNvbXBpbGVkIGludG8gZXZlcnkgTGludXgga2VybmVsLiBObyBjb25kaXRpb25hbCBjb21waWxhdGlvbiBoZXJlLCBpdCdzIGFsd2F5cyBpbmNsdWRlZCBiYXNlZCBvbiB0aGUgYGZzL01ha2VmaWxlYCBkZWZpbml0aW9uLiBHb29kLCB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzLiBObyBzcGVjaWFsIGNvbmZpZ3VyYXRpb24gaXMgbmVlZGVkIHRvIHRyaWdnZXIgdGhlIGNoYW5nZXMuXG5cbk15IGltbWVkaWF0ZSBjb25jZXJucyBhcmUgdHJpZ2dlcmVkOiBXb3J0aEZ1enppbmcgaXMgc2V0IHRvIHRydWUsIHdoaWNoIGltbWVkaWF0ZWx5IGdyYWJzIG15IGF0dGVudGlvbi4gVGhlIGNvbW1pdCBhbHRlcnMgbG9ja2luZyBhbmQgbGlzdCBoYW5kbGluZyB3aXRoaW4gYGV2aWN0X2lub2RlcygpYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgc3VwZXJibG9jayBpbm9kZSBldmljdGlvbiBsb29wLiBJdCdzIG1lc3Npbmcgd2l0aCBgc2ItXHUwMDNlc19pbm9kZV9saXN0X2xvY2tgLCBhbHRlcmluZyBpdHMgdXNlIGR1cmluZyByZXNjaGVkdWxpbmcgd2l0aCBgY29uZF9yZXNjaGVkKClgLiBJbnN0ZWFkIG9mIHJlc3RhcnRpbmcgdGhlIHRyYXZlcnNhbCBhZnRlciBkaXNwb3Npbmcgb2YgaW5vZGVzLCB0aGUgY29tbWl0IGlzIGRyb3BwaW5nIGFuZCByZS1hY3F1aXJpbmcgdGhlIGxvY2sgKm1pZC10cmF2ZXJzYWwqIHdoaWxlIGtlZXBpbmcgdGhlIGN1cnJlbnQgaW5vZGUgb3V0IG9mIGBkaXNwb3NlYC4gVGhpcyBpcyBhIGJpZyByZWQgZmxhZyBmb3IgYW55IGV4cGVydC5cblxuVGhpcyBraW5kIG9mIGNoYW5nZSBkaXJlY3RseSBhZmZlY3RzIGNvcmUgVkZTIGJlaGF2aW9yLCBwYXJ0aWN1bGFybHkgZHVyaW5nIGZpbGVzeXN0ZW0gdW5tb3VudHMgYW5kIHNodXRkb3duLiBUaGF0IG1lYW5zIHRoaXMgaGFzIHRoZSBwb3RlbnRpYWwgdG8gZXhwb3NlIGxpc3QgY29ycnVwdGlvbiwgcmFjZSBjb25kaXRpb25zLCBvciBldmVuIFVzZS1BZnRlci1GcmVlIHZ1bG5lcmFiaWxpdGllcyBkdXJpbmcgY29uY3VycmVudCBpbm9kZSBvcGVyYXRpb25zLiBUaGF0J3MgcHJlY2lzZWx5IHRoZSBraW5kIG9mIHRoaW5nIHRoYXQgY2FuIGxlYWQgdG8gc2lnbmlmaWNhbnQgc3RhYmlsaXR5IGlzc3Vlcy5cblxuSSdtIGZvY3VzZWQgb24gXCJldmljdF9pbm9kZXNcIiDigJMgdGhlIHJlYXNvbmluZyBoaWdobGlnaHRzIGl0LCBhbmQgdGhhdCdzIHByZWNpc2VseSB0aGUgZnVuY3Rpb24gd2hlcmUgdGhlIGNvcmUgbG9naWMgd2FzIGNoYW5nZWQuIFRoZSBpbnRlcm5hbCBgZGlzcG9zZV9saXN0YCB2YXJpYWJsZSBpcyBzdGF0aWMgYW5kIHVuZXhwb3J0ZWQsIHNvIHRoYXQncyBub3Qgd2hhdCBJJ20gaW50ZXJlc3RlZCBpbiBoZXJlLiBgZ2VuZXJpY19zaHV0ZG93bl9zdXBlcmAgaXMgYW4gZW50cnkgcG9pbnQsIHdoaWNoIGlzIHVzZWZ1bCwgYnV0IHRoZSBrZXkgaXMgdGhhdCBgZXZpY3RfaW5vZGVzYCBpdHNlbGYgaXMgYSBub24tc3RhdGljLCAqZXhwb3J0ZWQqIGZ1bmN0aW9uIGFuZCBpcyB0aGVyZWZvcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZS4gSXQncyAqcGVyZmVjdGx5KiBzcGVjaWZpYyBhbmQgbm90IHViaXF1aXRvdXMuIEkgdGhpbmsgdGhhdCdzIHRoZSBiZXN0IGZvY3VzIGZvciB0aGlzIGFuYWx5c2lzLlxuXG5MZXQncyBjYWxsIHRoZSByZXN1bHRzIGFuZCBnZXQgYSBoYW5kbGUgb24gd2hhdCB3ZSdyZSBsb29raW5nIGF0IHdpdGggYSBtdWNoIGRlZXBlciBkaXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQ1OCwiT3V0cHV0VG9rZW5zIjoxMTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6NTI6MjYuNTkxMDIyNTg1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJldmljdF9pbm9kZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBWRlMgaW5vZGUgZXZpY3Rpb24gdHJhdmVyc2FsIGluIGV2aWN0X2lub2RlcygpLiBXaGVuIHJlc2NoZWR1bGluZyBpcyByZXF1aXJlZCBkdXJpbmcgdW5tb3VudC9zdXBlcmJsb2NrIHNodXRkb3duLCBpdCBkcm9wcyBhbmQgcmUtYWNxdWlyZXMgc19pbm9kZV9saXN0X2xvY2sgbWlkLWl0ZXJhdGlvbiBpbnN0ZWFkIG9mIHJlc3RhcnRpbmcgdHJhdmVyc2FsIGZyb20gdGhlIGJlZ2lubmluZy4gVGhpcyBtb2RpZmljYXRpb24gaW4gbG9ja2luZyBhbmQgbGlzdCB0cmF2ZXJzYWwgd2l0aGluIGEgY29yZSBzdWJzeXN0ZW0gaXMgcmVhY2hhYmxlIGR1cmluZyB1bm1vdW50IG9wZXJhdGlvbnMgYW5kIGNvdWxkIGludHJvZHVjZSBjb25jdXJyZW5jeSBpc3N1ZXMgb3IgbGlzdCBjb3JydXB0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV2aWN0X2lub2Rlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIFZGUyBpbm9kZSBldmljdGlvbiB0cmF2ZXJzYWwgaW4gZXZpY3RfaW5vZGVzKCkuIFdoZW4gcmVzY2hlZHVsaW5nIGlzIHJlcXVpcmVkIGR1cmluZyB1bm1vdW50L3N1cGVyYmxvY2sgc2h1dGRvd24sIGl0IGRyb3BzIGFuZCByZS1hY3F1aXJlcyBzX2lub2RlX2xpc3RfbG9jayBtaWQtaXRlcmF0aW9uIGluc3RlYWQgb2YgcmVzdGFydGluZyB0cmF2ZXJzYWwgZnJvbSB0aGUgYmVnaW5uaW5nLiBUaGlzIG1vZGlmaWNhdGlvbiBpbiBsb2NraW5nIGFuZCBsaXN0IHRyYXZlcnNhbCB3aXRoaW4gYSBjb3JlIHN1YnN5c3RlbSBpcyByZWFjaGFibGUgZHVyaW5nIHVubW91bnQgb3BlcmF0aW9ucyBhbmQgY291bGQgaW50cm9kdWNlIGNvbmN1cnJlbmN5IGlzc3VlcyBvciBsaXN0IGNvcnJ1cHRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA1OjUyOjI2LjU5MTA1NTQ2NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2NzYwNzk5MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNTo1MjoyNi41OTE1NjMyNjVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNzY3NTU2ODE5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGl0ZXJhdGlvbiBsb2dpYyBhbmQgbG9ja2luZyBpbiBgZXZpY3RfaW5vZGVzKClgIGluIGZzL2lub2RlLmMgdG8gYXZvaWQgcmVzdGFydGluZyB0aGUgaW5vZGUgbGlzdCB3YWxrIChgZ290byBhZ2FpbmApIHdoZW4gcmVzY2hlZHVsaW5nLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBzdGVtbWluZyBmcm9tIHRoaXMgY2hhbmdlIHdvdWxkIGJlIGNvbmN1cnJlbmN5IGlzc3VlcywgbGlzdCBjb3JydXB0aW9uLCBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIChpZiB0aGUgbGlzdCBvciBpbm9kZSBzdGF0ZSBjaGFuZ2VzIHdoaWxlIGBzYi1cXHUwMDNlc19pbm9kZV9saXN0X2xvY2tgIGlzIGRyb3BwZWQpLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcyAoc3VjaCBhcyBDT05GSUdfREVCVUdfTElTVCkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCByZWFkIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIGRvZXMgbm90IGNvcHkgYW55IGRhdGEgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1YTBkOTQ0YzgxNjMxN2FhYjA2ZGM4ODRlMjQ4MWEyZmIxZjc1OTk4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMDU6NTA6MDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9pbm9kZS5jIGIvZnMvaW5vZGUuY1xuaW5kZXggYmE3ZGEzOWJlNGEzMS4uYTlkMzdiZTM5MGExNyAxMDA2NDRcbi0tLSBhL2ZzL2lub2RlLmNcbisrKyBiL2ZzL2lub2RlLmNcbkBAIC04ODAsNyArODgwLDYgQEAgdm9pZCBldmljdF9pbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4gXHRMSVNUX0hFQUQoZGlzcG9zZSk7XG4gXG4tYWdhaW46XG4gXHRzcGluX2xvY2soXHUwMDI2c2ItXHUwMDNlc19pbm9kZV9saXN0X2xvY2spO1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShpbm9kZSwgXHUwMDI2c2ItXHUwMDNlc19pbm9kZXMsIGlfc2JfbGlzdCkge1xuIFx0XHRpZiAoaWNvdW50X3JlYWRfb25jZShpbm9kZSkpXG5AQCAtODk5LDE5ICs4OTgsMTkgQEAgdm9pZCBldmljdF9pbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdFx0aW5vZGVfc3RhdGVfc2V0KGlub2RlLCBJX0ZSRUVJTkcpO1xuIFx0XHRpbm9kZV9scnVfbGlzdF9kZWwoaW5vZGUpO1xuIFx0XHRzcGluX3VubG9jayhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spO1xuLVx0XHRsaXN0X2FkZChcdTAwMjZpbm9kZS1cdTAwM2VpX2xydSwgXHUwMDI2ZGlzcG9zZSk7XG4gXG4gXHRcdC8qXG4tXHRcdCAqIFdlIGNhbiBoYXZlIGEgdG9uIG9mIGlub2RlcyB0byBldmljdCBhdCB1bm1vdW50IHRpbWUgZ2l2ZW5cbi1cdFx0ICogZW5vdWdoIG1lbW9yeSwgY2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8gZ28gdG8gc2xlZXAgZm9yIGFcbi1cdFx0ICogYml0IHNvIHdlIGRvbid0IGxpdmVsb2NrLlxuK1x0XHQgKiBLZWVwIHRoaXMgaW5vZGUgb3V0IG9mIGRpc3Bvc2Ugc28gaXQgc3RheXMgb24gc19pbm9kZXMgd2hpbGVcbitcdFx0ICogdGhlIGxpc3QgbG9jayBpcyBkcm9wcGVkLiBJX0ZSRUVJTkcgcHJldmVudHMgbmV3IHJlZmVyZW5jZXNcbitcdFx0ICogYW5kIGxlYXZlcyBldmljdGlvbiB0byB1cywgc28gd2UgY2FuIHJlc3VtZSB0aGUgd2FsayBmcm9tIGl0LlxuIFx0XHQgKi9cbiBcdFx0aWYgKG5lZWRfcmVzY2hlZCgpKSB7XG4gXHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2c2ItXHUwMDNlc19pbm9kZV9saXN0X2xvY2spO1xuIFx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0XHRcdGRpc3Bvc2VfbGlzdChcdTAwMjZkaXNwb3NlKTtcbi1cdFx0XHRnb3RvIGFnYWluO1xuK1x0XHRcdHNwaW5fbG9jayhcdTAwMjZzYi1cdTAwM2VzX2lub2RlX2xpc3RfbG9jayk7XG4gXHRcdH1cbitcdFx0bGlzdF9hZGQoXHUwMDI2aW5vZGUtXHUwMDNlaV9scnUsIFx1MDAyNmRpc3Bvc2UpO1xuIFx0fVxuIFx0c3Bpbl91bmxvY2soXHUwMDI2c2ItXHUwMDNlc19pbm9kZV9saXN0X2xvY2spO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6NTI6MjYuNTkxNTY0NTQ1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjkzNTYzODk4MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBGaWxlIFN5c3RlbSdzIElub2RlIEltcGxlbWVudGF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCdzIGNoYW5nZWQgYW5kIGhvdyBpdCBpbXBhY3RzIHRoZSBgZnMvaW5vZGUuY2AgY29tcG9uZW50LiBJJ20gdGhpbmtpbmcgdGhlIGJlc3QgZmlyc3Qgc3RlcCBpcyBhIGNsb3NlIGluc3BlY3Rpb24gb2YgdGhlIGRpZmYgaXRzZWxmLCBidXQgSSB3YW50IHRvIHB1dCB0aGUgY2hhbmdlcyBpbiBjb250ZXh0LiBUbyBkbyB0aGF0LCBJJ20gZ29pbmcgdG8gbGV2ZXJhZ2UgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgbG9vayBhdCB0aGUgY29kZSBibG9jayBzdXJyb3VuZGluZyBsaW5lcyA4ODAtOTIwIGluIGBmcy9pbm9kZS5jYC4gVGhhdCBhcmVhIGlzIGxpa2VseSB0byByZXZlYWwgdGhlIGltbWVkaWF0ZSBiZWZvcmUgYW5kIGFmdGVyIGZvciB0aGUgY2hhbmdlcywgb3IgcG90ZW50aWFsbHkgdGhlIGFyZWEgdGhhdCB0aG9zZSBjaGFuZ2VzIHJlbGF0ZSB0by4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBvZiB0aGUgY2hhbmdlIGluIHRoZSBvdmVyYWxsIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNzAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA1OjUyOjM1Ljk0Nzk1NzQyNFoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDQ3OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvaW5vZGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NzAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NzA6XFx0ICogZXZpY3RfaW5vZGVzXFx0LSBldmljdCBhbGwgZXZpY3RhYmxlIGlub2RlcyBmb3IgYSBzdXBlcmJsb2NrXFxuIDg3MTpcXHQgKiBAc2I6XFx0XFx0c3VwZXJibG9jayB0byBvcGVyYXRlIG9uXFxuIDg3MjpcXHQgKlxcbiA4NzM6XFx0ICogTWFrZSBzdXJlIHRoYXQgbm8gaW5vZGVzIHdpdGggemVybyByZWZjb3VudCBhcmUgcmV0YWluZWQuICBUaGlzIGlzXFxuIDg3NDpcXHQgKiBjYWxsZWQgYnkgc3VwZXJibG9jayBzaHV0ZG93biBhZnRlciBoYXZpbmcgU0JfQUNUSVZFIGZsYWcgcmVtb3ZlZCxcXG4gODc1OlxcdCAqIHNvIGFueSBpbm9kZSByZWFjaGluZyB6ZXJvIHJlZmNvdW50IGR1cmluZyBvciBhZnRlciB0aGF0IGNhbGwgd2lsbFxcbiA4NzY6XFx0ICogYmUgaW1tZWRpYXRlbHkgZXZpY3RlZC5cXG4gODc3OlxcdCAqL1xcbiA4Nzg6XFx0dm9pZCBldmljdF9pbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4gODc5OlxcdHtcXG4gODgwOlxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XFxuIDg4MTpcXHRcXHRMSVNUX0hFQUQoZGlzcG9zZSk7XFxuIDg4MjpcXHRcXG4gODgzOlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2c2ItXFx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrKTtcXG4gODg0OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoaW5vZGUsIFxcdTAwMjZzYi1cXHUwMDNlc19pbm9kZXMsIGlfc2JfbGlzdCkge1xcbiA4ODU6XFx0XFx0XFx0aWYgKGljb3VudF9yZWFkX29uY2UoaW5vZGUpKVxcbiA4ODY6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDg4NzpcXHRcXG4gODg4OlxcdFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuIDg4OTpcXHRcXHRcXHRpZiAoaWNvdW50X3JlYWQoaW5vZGUpKSB7XFxuIDg5MDpcXHRcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuIDg5MTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gODkyOlxcdFxcdFxcdH1cXG4gODkzOlxcdFxcdFxcdGlmIChpbm9kZV9zdGF0ZV9yZWFkKGlub2RlKSBcXHUwMDI2IChJX05FVyB8IElfRlJFRUlORyB8IElfV0lMTF9GUkVFKSkge1xcbiA4OTQ6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmlub2RlLVxcdTAwM2VpX2xvY2spO1xcbiA4OTU6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDg5NjpcXHRcXHRcXHR9XFxuIDg5NzpcXHRcXG4gODk4OlxcdFxcdFxcdGlub2RlX3N0YXRlX3NldChpbm9kZSwgSV9GUkVFSU5HKTtcXG4gODk5OlxcdFxcdFxcdGlub2RlX2xydV9saXN0X2RlbChpbm9kZSk7XFxuIDkwMDpcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuIDkwMTpcXHRcXG4gOTAyOlxcdFxcdFxcdC8qXFxuIDkwMzpcXHRcXHRcXHQgKiBLZWVwIHRoaXMgaW5vZGUgb3V0IG9mIGRpc3Bvc2Ugc28gaXQgc3RheXMgb24gc19pbm9kZXMgd2hpbGVcXG4gOTA0OlxcdFxcdFxcdCAqIHRoZSBsaXN0IGxvY2sgaXMgZHJvcHBlZC4gSV9GUkVFSU5HIHByZXZlbnRzIG5ldyByZWZlcmVuY2VzXFxuIDkwNTpcXHRcXHRcXHQgKiBhbmQgbGVhdmVzIGV2aWN0aW9uIHRvIHVzLCBzbyB3ZSBjYW4gcmVzdW1lIHRoZSB3YWxrIGZyb20gaXQuXFxuIDkwNjpcXHRcXHRcXHQgKi9cXG4gOTA3OlxcdFxcdFxcdGlmIChuZWVkX3Jlc2NoZWQoKSkge1xcbiA5MDg6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnNiLVxcdTAwM2VzX2lub2RlX2xpc3RfbG9jayk7XFxuIDkwOTpcXHRcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gOTEwOlxcdFxcdFxcdFxcdGRpc3Bvc2VfbGlzdChcXHUwMDI2ZGlzcG9zZSk7XFxuIDkxMTpcXHRcXHRcXHRcXHRzcGluX2xvY2soXFx1MDAyNnNiLVxcdTAwM2VzX2lub2RlX2xpc3RfbG9jayk7XFxuIDkxMjpcXHRcXHRcXHR9XFxuIDkxMzpcXHRcXHRcXHRsaXN0X2FkZChcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbHJ1LCBcXHUwMDI2ZGlzcG9zZSk7XFxuIDkxNDpcXHRcXHR9XFxuIDkxNTpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2c2ItXFx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrKTtcXG4gOTE2OlxcdFxcbiA5MTc6XFx0XFx0ZGlzcG9zZV9saXN0KFxcdTAwMjZkaXNwb3NlKTtcXG4gOTE4OlxcdH1cXG4gOTE5OlxcdEVYUE9SVF9TWU1CT0xfR1BMKGV2aWN0X2lub2Rlcyk7XFxuIDkyMDpcXHRcXG4gOTIxOlxcdC8qXFxuIDkyMjpcXHQgKiBJc29sYXRlIHRoZSBpbm9kZSBmcm9tIHRoZSBMUlUgaW4gcHJlcGFyYXRpb24gZm9yIGZyZWVpbmcgaXQuXFxuIDkyMzpcXHQgKlxcbiA5MjQ6XFx0ICogSWYgdGhlIGlub2RlIGhhcyB0aGUgSV9SRUZFUkVOQ0VEIGZsYWcgc2V0LCB0aGVuIGl0IG1lYW5zIHRoYXQgaXQgaGFzIGJlZW5cXG4gOTI1OlxcdCAqIHVzZWQgcmVjZW50bHkgLSB0aGUgZmxhZyBpcyBzZXQgaW4gaXB1dF9maW5hbCgpLiBXaGVuIHdlIGVuY291bnRlciBzdWNoIGFuXFxuIDkyNjpcXHQgKiBpbm9kZSwgY2xlYXIgdGhlIGZsYWcgYW5kIG1vdmUgaXQgdG8gdGhlIGJhY2sgb2YgdGhlIExSVSBzbyBpdCBnZXRzIGFub3RoZXJcXG4gOTI3OlxcdCAqIHBhc3MgdGhyb3VnaCB0aGUgTFJVIGJlZm9yZSBpdCBnZXRzIHJlY2xhaW1lZC4gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBvZlxcbiA5Mjg6XFx0ICogdGhlIGZhY3Qgd2UgYXJlIGRvaW5nIGxhenkgTFJVIHVwZGF0ZXMgdG8gbWluaW1pc2UgbG9jayBjb250ZW50aW9uIHNvIHRoZVxcbiA5Mjk6XFx0ICogTFJVIGRvZXMgbm90IGhhdmUgc3RyaWN0IG9yZGVyaW5nLiBIZW5jZSB3ZSBkb24ndCB3YW50IHRvIHJlY2xhaW0gaW5vZGVzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA1OjUyOjM1Ljk0ODE2NTUyNFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4MzE4OTMwNzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IFRoaXMgUGF0Y2ggRG9lc24ndCBXYXJyYW50IEl0KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSdtIGxvb2tpbmcgYXQgaG93IHRoaXMgYGV2aWN0X2lub2Rlc2AgZnVuY3Rpb24gaXMgbW9kaWZpZWQsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHRoZSBsaXN0IGl0ZXJhdGlvbiBhbmQgcmVzY2hlZHVsaW5nIGxvZ2ljLiBUaGUgb3JpZ2luYWwgY29kZSBoYXMgYSBgZ290byBhZ2FpbmAgYW5kIGBjb25kX3Jlc2NoZWQoKWAgY2FsbC4gVGhpcyBwYXRjaCBzZWVtcyB0byBiZSBhbiBvcHRpbWl6YXRpb24uIFJhdGhlciB0aGFuIHJlc3RhcnRpbmcgZnJvbSB0aGUgdG9wIG9mIHRoZSBsaXN0LCBpdCdzIG1vZGlmeWluZyB0aGUgcHJvY2VzcyBvZiBob3cgaW5vZGVzIGFyZSBtb3ZlZCB0byB0aGUgYGRpc3Bvc2VgIGxpc3QgZHVyaW5nIHRoZSBldmljdGlvbiBwcm9jZXNzLCBwYXJ0aWN1bGFybHkgdG8gYXZvaWQgbGl2ZWxvY2tzIGR1cmluZyB1bm1vdW50cy4gVGhlIGNydWNpYWwgcGFydCBpcyB0aGF0IHRoZSBwYXRjaCByZW9yZGVycyB0aGUgc3BpbmxvY2sgYWNxdWlzaXRpb24gYW5kIGBsaXN0X2FkZGAgY2FsbHMgYXJvdW5kIGBjb25kX3Jlc2NoZWQoKWAuXG5cblRoZSBpbW1lZGlhdGUgcmVkIGZsYWdzIGFyZSBhcm91bmQgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBsaXN0cyBhbmQgbG9ja3MuIERyb3BwaW5nIHRoZSBsb2NrIGFuZCB0aGVuIHJlYWNxdWlyaW5nIGl0IHdoaWxlIGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBsaXN0IGltbWVkaWF0ZWx5IHNjcmVhbXMgXCJyYWNlIGNvbmRpdGlvbnNcIiBhbmQgcG9zc2libGUgbGlzdCBjb3JydXB0aW9uIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIEl0J3MgdGhhdCBgbGlzdF9mb3JfZWFjaF9lbnRyeWAgY29udGV4dCB0aGF0IEkgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGguIFRoZSBwcmV2aW91cyBpbm9kZSBpcyBmaW5lLCBidXQgdGhlICpuZXh0KiBpbm9kZSwgb3IgdGhlIGxpc3QgaXRzZWxmLCBtaWdodCBiZSBjaGFuZ2VkIGJ5IGEgY29uY3VycmVudCBwcm9jZXNzLlxuXG5Ob3csIGNvbnNpZGVyaW5nIHRoZSBwb3NzaWJpbGl0aWVzIGhlcmUgLSBsaXN0IGNvcnJ1cHRpb24sIHVzZS1hZnRlci1mcmVlLCBjb25jdXJyZW50IGxpc3QgbW9kaWZpY2F0aW9uLCBsb2NrZGVwIHZpb2xhdGlvbnMg4oCTIHRob3NlIGFsbCBmYWxsIHNxdWFyZWx5IGludG8gdGhlIGRvbWFpbiBvZiBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSwgTE9DS0RFUCwgYW5kIERFQlVHX0xJU1QuIFRoZXNlIHRvb2xzIGFyZSBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gY2F0Y2ggdGhlc2UgdHlwZXMgb2YgbWVtb3J5IHNhZmV0eSBhbmQgY29uY3VycmVuY3kgYnVncy5cblxuVGhlIGNlbnRyYWwgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBpbnRyb2R1Y2UgKnVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzKiBvciBwb3RlbnRpYWwgKmtlcm5lbCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UqPyAgTGV0J3Mgd2FsayB0aHJvdWdoIHRoZSBjcml0ZXJpYTpcblxuMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlPyoqIE5vcGUuIE5vIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBuZXRsaW5rLCBpb2N0bCwgbm90aGluZyB0aGF0IGRpcmVjdGx5IHRyYW5zZmVycyBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLlxuMi4gICoqVW5pbml0aWFsaXplZCB2YXJpYWJsZSBicmFuY2hpbmc/KiogIE5vLCBldmVyeXRoaW5nIGhlcmUgYXBwZWFycyB0byBiZSBwcm9wZXJseSBpbml0aWFsaXplZCBvciBkZXJpdmVkIGZyb20gdGhlIGV4aXN0aW5nIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgbGlrZSBgaW5vZGVgIGZyb20gYGxpc3RfZm9yX2VhY2hfZW50cnlgLlxuMy4gICoqVW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbj8qKiBBYnNvbHV0ZWx5IG5vdC4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9uIGlzIGludHJvZHVjZWQuXG40LiAgKipCb3VuZHMgY2hlY2tzIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyoqICBObywgdGhlIHBhdGNoIG1vZGlmaWVzIGxvZ2ljIGFyb3VuZCBleGlzdGluZyBsaXN0cywgdGhlcmUgYXJlIG5vIGNoYW5nZXMgaGVyZS5cblxuVGhlIGBpbm9kZWAgcG9pbnRlciBjb21lcyBmcm9tIGBsaXN0X2Zvcl9lYWNoX2VudHJ5YCwgc28gaXQncyBpbml0aWFsaXplZC4gVGhlIGBkaXNwb3NlYCBsaXN0IGlzIGluaXRpYWxpemVkIHZpYSBgTElTVF9IRUFEYC4gSXQncyBhbGwgdmVyeSBzdGFuZGFyZC5cblxuUmV2aWV3aW5nIHRoZSBLTVNBTiBndWlkZWxpbmVzLCBpdCBiZWNvbWVzIGFidW5kYW50bHkgY2xlYXI6XG5cbioqXCJUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLCBMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlwiKipcblxuVGhlIHBhdGNoIGNoYW5nZXMgZG9uJ3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGUgcG90ZW50aWFsIGlzc3VlcyBhcmUgY29uY3VycmVuY3ktcmVsYXRlZCwgd2hpY2ggYXJlICpleGFjdGx5KiB3aGF0IEtBU0FOIGFuZCB0aGUgb3RoZXJzIGFyZSBmb3IuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU49ZmFsc2VgIGlzIHRoZSByaWdodCBjYWxsIGhlcmUuIE15IHJhdGlvbmFsZSBpczpcblxuKiAgIFRoZSBwYXRjaCBhbHRlcnMgdGhlIGlub2RlIGV2aWN0aW9uIHByb2Nlc3MsIGZvY3VzaW5nIG9uIGxpc3QgaXRlcmF0aW9uIGFuZCByZXNjaGVkdWxpbmcuXG4qICAgVGhlIHByaW1hcnkgcmlza3MgYXJlIGNvbmN1cnJlbmN5LXJlbGF0ZWQgKGxpc3QgY29ycnVwdGlvbiwgdXNlLWFmdGVyLWZyZWUpLCBkZXRlY3RhYmxlIHZpYSBLQVNBTiwgREVCVUdfTElTVCwgYW5kIGxvY2sgZGVidWdnaW5nLlxuKiAgIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBvciB1c2VyLXRvLWtlcm5lbCBsZWFrcyBhcmUgaW50cm9kdWNlZC5cbiogICBIZW5jZSwgYSBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXG5cblRpbWUgdG8gaW52b2tlIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1NzMsIk91dHB1dFRva2VucyI6MTg0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA1OjUyOjQ0LjI2NzA5ODgxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaXRlcmF0aW9uIGxvZ2ljIGFuZCBsb2NraW5nIGluIGBldmljdF9pbm9kZXMoKWAgaW4gZnMvaW5vZGUuYyB0byBhdm9pZCByZXN0YXJ0aW5nIHRoZSBpbm9kZSBsaXN0IHdhbGsgKGBnb3RvIGFnYWluYCkgd2hlbiByZXNjaGVkdWxpbmcuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHN0ZW1taW5nIGZyb20gdGhpcyBjaGFuZ2Ugd291bGQgYmUgY29uY3VycmVuY3kgaXNzdWVzLCBsaXN0IGNvcnJ1cHRpb24sIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgKGlmIHRoZSBsaXN0IG9yIGlub2RlIHN0YXRlIGNoYW5nZXMgd2hpbGUgYHNiLVxcdTAwM2VzX2lub2RlX2xpc3RfbG9ja2AgaXMgZHJvcHBlZCksIHdoaWNoIGFyZSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzIChzdWNoIGFzIENPTkZJR19ERUJVR19MSVNUKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHJlYWQgb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgZG9lcyBub3QgY29weSBhbnkgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpdGVyYXRpb24gbG9naWMgYW5kIGxvY2tpbmcgaW4gYGV2aWN0X2lub2RlcygpYCBpbiBmcy9pbm9kZS5jIHRvIGF2b2lkIHJlc3RhcnRpbmcgdGhlIGlub2RlIGxpc3Qgd2FsayAoYGdvdG8gYWdhaW5gKSB3aGVuIHJlc2NoZWR1bGluZy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSB0aGlzIGNoYW5nZSB3b3VsZCBiZSBjb25jdXJyZW5jeSBpc3N1ZXMsIGxpc3QgY29ycnVwdGlvbiwgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyAoaWYgdGhlIGxpc3Qgb3IgaW5vZGUgc3RhdGUgY2hhbmdlcyB3aGlsZSBgc2ItXFx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrYCBpcyBkcm9wcGVkKSwgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMgKHN1Y2ggYXMgQ09ORklHX0RFQlVHX0xJU1QpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgcmVhZCBvciBicmFuY2ggb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBkb2VzIG5vdCBjb3B5IGFueSBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowx7bjq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-15 05:00:57 +0000 UTC FinishedAt: 2026-09-15 05:52:45 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "f5d607b8091438d8416d0e3ae02532a18539b48b", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "f5d607b8091438d8416d0e3ae02532a18539b48b", "config_name": "upstream-apparmor-kasan.config", "series_id": "83e8e15f-cb09-4259-863c-bf6e64bd997c" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "evict_inodes" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "f5d607b8091438d8416d0e3ae02532a18539b48b", "base_tree": "vfs" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA1OjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXZpY3RfaW5vZGVzJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGl0ZXJhdGlvbiBsb2dpYyBhbmQgbG9ja2luZyBpbiBgZXZpY3RfaW5vZGVzKClgIGluIGZzL2lub2RlLmMgdG8gYXZvaWQgcmVzdGFydGluZyB0aGUgaW5vZGUgbGlzdCB3YWxrIChgZ290byBhZ2FpbmApIHdoZW4gcmVzY2hlZHVsaW5nLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBzdGVtbWluZyBmcm9tIHRoaXMgY2hhbmdlIHdvdWxkIGJlIGNvbmN1cnJlbmN5IGlzc3VlcywgbGlzdCBjb3JydXB0aW9uLCBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIChpZiB0aGUgbGlzdCBvciBpbm9kZSBzdGF0ZSBjaGFuZ2VzIHdoaWxlIGBzYi1cdTAwM2VzX2lub2RlX2xpc3RfbG9ja2AgaXMgZHJvcHBlZCksIHdoaWNoIGFyZSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzIChzdWNoIGFzIENPTkZJR19ERUJVR19MSVNUKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHJlYWQgb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgZG9lcyBub3QgY29weSBhbnkgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBWRlMgaW5vZGUgZXZpY3Rpb24gdHJhdmVyc2FsIGluIGV2aWN0X2lub2RlcygpLiBXaGVuIHJlc2NoZWR1bGluZyBpcyByZXF1aXJlZCBkdXJpbmcgdW5tb3VudC9zdXBlcmJsb2NrIHNodXRkb3duLCBpdCBkcm9wcyBhbmQgcmUtYWNxdWlyZXMgc19pbm9kZV9saXN0X2xvY2sgbWlkLWl0ZXJhdGlvbiBpbnN0ZWFkIG9mIHJlc3RhcnRpbmcgdHJhdmVyc2FsIGZyb20gdGhlIGJlZ2lubmluZy4gVGhpcyBtb2RpZmljYXRpb24gaW4gbG9ja2luZyBhbmQgbGlzdCB0cmF2ZXJzYWwgd2l0aGluIGEgY29yZSBzdWJzeXN0ZW0gaXMgcmVhY2hhYmxlIGR1cmluZyB1bm1vdW50IG9wZXJhdGlvbnMgYW5kIGNvdWxkIGludHJvZHVjZSBjb25jdXJyZW5jeSBpc3N1ZXMgb3IgbGlzdCBjb3JydXB0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA1OjUwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNWEwZDk0NGM4MTYzMTdhYWIwNmRjODg0ZTI0ODFhMmZiMWY3NTk5OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDE1IDA1OjUwOjA4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2lub2RlLmMgYi9mcy9pbm9kZS5jXG5pbmRleCBiYTdkYTM5YmU0YTMxLi5hOWQzN2JlMzkwYTE3IDEwMDY0NFxuLS0tIGEvZnMvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaW5vZGUuY1xuQEAgLTg4MCw3ICYjNDM7ODgwLDYgQEAgdm9pZCBldmljdF9pbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4gXHRMSVNUX0hFQUQoZGlzcG9zZSk7XG4gXG4tYWdhaW46XG4gXHRzcGluX2xvY2soXHUwMDI2c2ItXHUwMDNlc19pbm9kZV9saXN0X2xvY2spO1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShpbm9kZSwgXHUwMDI2c2ItXHUwMDNlc19pbm9kZXMsIGlfc2JfbGlzdCkge1xuIFx0XHRpZiAoaWNvdW50X3JlYWRfb25jZShpbm9kZSkpXG5AQCAtODk5LDE5ICYjNDM7ODk4LDE5IEBAIHZvaWQgZXZpY3RfaW5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHRcdGlub2RlX3N0YXRlX3NldChpbm9kZSwgSV9GUkVFSU5HKTtcbiBcdFx0aW5vZGVfbHJ1X2xpc3RfZGVsKGlub2RlKTtcbiBcdFx0c3Bpbl91bmxvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbi1cdFx0bGlzdF9hZGQoXHUwMDI2aW5vZGUtXHUwMDNlaV9scnUsIFx1MDAyNmRpc3Bvc2UpO1xuIFxuIFx0XHQvKlxuLVx0XHQgKiBXZSBjYW4gaGF2ZSBhIHRvbiBvZiBpbm9kZXMgdG8gZXZpY3QgYXQgdW5tb3VudCB0aW1lIGdpdmVuXG4tXHRcdCAqIGVub3VnaCBtZW1vcnksIGNoZWNrIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIGdvIHRvIHNsZWVwIGZvciBhXG4tXHRcdCAqIGJpdCBzbyB3ZSBkb24mIzM5O3QgbGl2ZWxvY2suXG4mIzQzO1x0XHQgKiBLZWVwIHRoaXMgaW5vZGUgb3V0IG9mIGRpc3Bvc2Ugc28gaXQgc3RheXMgb24gc19pbm9kZXMgd2hpbGVcbiYjNDM7XHRcdCAqIHRoZSBsaXN0IGxvY2sgaXMgZHJvcHBlZC4gSV9GUkVFSU5HIHByZXZlbnRzIG5ldyByZWZlcmVuY2VzXG4mIzQzO1x0XHQgKiBhbmQgbGVhdmVzIGV2aWN0aW9uIHRvIHVzLCBzbyB3ZSBjYW4gcmVzdW1lIHRoZSB3YWxrIGZyb20gaXQuXG4gXHRcdCAqL1xuIFx0XHRpZiAobmVlZF9yZXNjaGVkKCkpIHtcbiBcdFx0XHRzcGluX3VubG9jayhcdTAwMjZzYi1cdTAwM2VzX2lub2RlX2xpc3RfbG9jayk7XG4gXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4gXHRcdFx0ZGlzcG9zZV9saXN0KFx1MDAyNmRpc3Bvc2UpO1xuLVx0XHRcdGdvdG8gYWdhaW47XG4mIzQzO1x0XHRcdHNwaW5fbG9jayhcdTAwMjZzYi1cdTAwM2VzX2lub2RlX2xpc3RfbG9jayk7XG4gXHRcdH1cbiYjNDM7XHRcdGxpc3RfYWRkKFx1MDAyNmlub2RlLVx1MDAzZWlfbHJ1LCBcdTAwMjZkaXNwb3NlKTtcbiBcdH1cbiBcdHNwaW5fdW5sb2NrKFx1MDAyNnNiLVx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrKTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNTo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V2aWN0X2lub2RlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBWRlMgaW5vZGUgZXZpY3Rpb24gdHJhdmVyc2FsIGluIGV2aWN0X2lub2RlcygpLiBXaGVuIHJlc2NoZWR1bGluZyBpcyByZXF1aXJlZCBkdXJpbmcgdW5tb3VudC9zdXBlcmJsb2NrIHNodXRkb3duLCBpdCBkcm9wcyBhbmQgcmUtYWNxdWlyZXMgc19pbm9kZV9saXN0X2xvY2sgbWlkLWl0ZXJhdGlvbiBpbnN0ZWFkIG9mIHJlc3RhcnRpbmcgdHJhdmVyc2FsIGZyb20gdGhlIGJlZ2lubmluZy4gVGhpcyBtb2RpZmljYXRpb24gaW4gbG9ja2luZyBhbmQgbGlzdCB0cmF2ZXJzYWwgd2l0aGluIGEgY29yZSBzdWJzeXN0ZW0gaXMgcmVhY2hhYmxlIGR1cmluZyB1bm1vdW50IG9wZXJhdGlvbnMgYW5kIGNvdWxkIGludHJvZHVjZSBjb25jdXJyZW5jeSBpc3N1ZXMgb3IgbGlzdCBjb3JydXB0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNWEwZDk0NGM4MTYzMTdhYWIwNmRjODg0ZTI0ODFhMmZiMWY3NTk5OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDE1IDA1OjUwOjA4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvaW5vZGUuYyBiL2ZzL2lub2RlLmMKaW5kZXggYmE3ZGEzOWJlNGEzMS4uYTlkMzdiZTM5MGExNyAxMDA2NDQKLS0tIGEvZnMvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9pbm9kZS5jCkBAIC04ODAsNyAmIzQzOzg4MCw2IEBAIHZvaWQgZXZpY3RfaW5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiAJc3RydWN0IGlub2RlICppbm9kZTsKIAlMSVNUX0hFQUQoZGlzcG9zZSk7CiAKLWFnYWluOgogCXNwaW5fbG9jaygmYW1wO3NiLSZndDtzX2lub2RlX2xpc3RfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShpbm9kZSwgJmFtcDtzYi0mZ3Q7c19pbm9kZXMsIGlfc2JfbGlzdCkgewogCQlpZiAoaWNvdW50X3JlYWRfb25jZShpbm9kZSkpCkBAIC04OTksMTkgJiM0Mzs4OTgsMTkgQEAgdm9pZCBldmljdF9pbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIAkJaW5vZGVfc3RhdGVfc2V0KGlub2RlLCBJX0ZSRUVJTkcpOwogCQlpbm9kZV9scnVfbGlzdF9kZWwoaW5vZGUpOwogCQlzcGluX3VubG9jaygmYW1wO2lub2RlLSZndDtpX2xvY2spOwotCQlsaXN0X2FkZCgmYW1wO2lub2RlLSZndDtpX2xydSwgJmFtcDtkaXNwb3NlKTsKIAogCQkvKgotCQkgKiBXZSBjYW4gaGF2ZSBhIHRvbiBvZiBpbm9kZXMgdG8gZXZpY3QgYXQgdW5tb3VudCB0aW1lIGdpdmVuCi0JCSAqIGVub3VnaCBtZW1vcnksIGNoZWNrIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIGdvIHRvIHNsZWVwIGZvciBhCi0JCSAqIGJpdCBzbyB3ZSBkb24mIzM5O3QgbGl2ZWxvY2suCiYjNDM7CQkgKiBLZWVwIHRoaXMgaW5vZGUgb3V0IG9mIGRpc3Bvc2Ugc28gaXQgc3RheXMgb24gc19pbm9kZXMgd2hpbGUKJiM0MzsJCSAqIHRoZSBsaXN0IGxvY2sgaXMgZHJvcHBlZC4gSV9GUkVFSU5HIHByZXZlbnRzIG5ldyByZWZlcmVuY2VzCiYjNDM7CQkgKiBhbmQgbGVhdmVzIGV2aWN0aW9uIHRvIHVzLCBzbyB3ZSBjYW4gcmVzdW1lIHRoZSB3YWxrIGZyb20gaXQuCiAJCSAqLwogCQlpZiAobmVlZF9yZXNjaGVkKCkpIHsKIAkJCXNwaW5fdW5sb2NrKCZhbXA7c2ItJmd0O3NfaW5vZGVfbGlzdF9sb2NrKTsKIAkJCWNvbmRfcmVzY2hlZCgpOwogCQkJZGlzcG9zZV9saXN0KCZhbXA7ZGlzcG9zZSk7Ci0JCQlnb3RvIGFnYWluOwomIzQzOwkJCXNwaW5fbG9jaygmYW1wO3NiLSZndDtzX2lub2RlX2xpc3RfbG9jayk7CiAJCX0KJiM0MzsJCWxpc3RfYWRkKCZhbXA7aW5vZGUtJmd0O2lfbHJ1LCAmYW1wO2Rpc3Bvc2UpOwogCX0KIAlzcGluX3VubG9jaygmYW1wO3NiLSZndDtzX2lub2RlX2xpc3RfbG9jayk7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE1OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgSW5vZGUgRXZpY3Rpb24gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyB0aGUgYGZzL2lub2RlLmNgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgYGV2aWN0X2lub2Rlc2AgZnVuY3Rpb24gd2l0aGluIHRoYXQgZmlsZSwgd2hpY2ggaXMgYSBrZXkgYXJlYSBmb3IgaW5vZGUgbWFuYWdlbWVudC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhhdCBmdW5jdGlvbiBhbmQgaXRzIHN1cnJvdW5kaW5nIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBjaGFuZ2VzLgoKSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBoYXBwZW5pbmcuIEkgc2hvdWxkIGNoZWNrIHRoZSBmaWxlIGNvbnRlbnQsIHNvLCBsZXQmIzM5O3MgdXNlIGByZWFkLWZpbGVgIGFuZCBwdWxsIHVwIGBmcy9pbm9kZS5jYCAtIEkmIzM5O2xsIHdhbnQgdG8gZm9jdXMgYXJvdW5kIGxpbmUgODgwLCBhcyB0aGF0JiMzOTtzIGxpa2VseSB0aGUgZm9jYWwgcG9pbnQgb2YgdGhlIHBhdGNoLiBJJiMzOTtsbCByZWFkIHRoZSByZWxldmFudCBzdXJyb3VuZGluZyBsaW5lcyB0byBnZXQgdGhlIG5lY2Vzc2FyeSBjb250ZXh0LiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBleGFjdGx5IGhvdyB0aGUgZXZpY3Rpb24gcHJvY2VzcyBpcyBiZWluZyBhbHRlcmVkIGFuZCB3aGF0IG5ldyBiZWhhdmlvciB0aGUgcGF0Y2ggaW50cm9kdWNlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIHBhdGNoIGlzIG9wdGltaXplZCBmb3IgcGVyZm9ybWFuY2Ugb3IgZml4ZXMgYSBidWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9pbm9kZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NzA6XHQgKiBldmljdF9pbm9kZXNcdC0gZXZpY3QgYWxsIGV2aWN0YWJsZSBpbm9kZXMgZm9yIGEgc3VwZXJibG9ja1xuIDg3MTpcdCAqIEBzYjpcdFx0c3VwZXJibG9jayB0byBvcGVyYXRlIG9uXG4gODcyOlx0ICpcbiA4NzM6XHQgKiBNYWtlIHN1cmUgdGhhdCBubyBpbm9kZXMgd2l0aCB6ZXJvIHJlZmNvdW50IGFyZSByZXRhaW5lZC4gIFRoaXMgaXNcbiA4NzQ6XHQgKiBjYWxsZWQgYnkgc3VwZXJibG9jayBzaHV0ZG93biBhZnRlciBoYXZpbmcgU0JfQUNUSVZFIGZsYWcgcmVtb3ZlZCxcbiA4NzU6XHQgKiBzbyBhbnkgaW5vZGUgcmVhY2hpbmcgemVybyByZWZjb3VudCBkdXJpbmcgb3IgYWZ0ZXIgdGhhdCBjYWxsIHdpbGxcbiA4NzY6XHQgKiBiZSBpbW1lZGlhdGVseSBldmljdGVkLlxuIDg3NzpcdCAqL1xuIDg3ODpcdHZvaWQgZXZpY3RfaW5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gODc5Olx0e1xuIDg4MDpcdFx0c3RydWN0IGlub2RlICppbm9kZTtcbiA4ODE6XHRcdExJU1RfSEVBRChkaXNwb3NlKTtcbiA4ODI6XHRcbiA4ODM6XHRcdHNwaW5fbG9jayhcdTAwMjZzYi1cdTAwM2VzX2lub2RlX2xpc3RfbG9jayk7XG4gODg0Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGlub2RlLCBcdTAwMjZzYi1cdTAwM2VzX2lub2RlcywgaV9zYl9saXN0KSB7XG4gODg1Olx0XHRcdGlmIChpY291bnRfcmVhZF9vbmNlKGlub2RlKSlcbiA4ODY6XHRcdFx0XHRjb250aW51ZTtcbiA4ODc6XHRcbiA4ODg6XHRcdFx0c3Bpbl9sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4gODg5Olx0XHRcdGlmIChpY291bnRfcmVhZChpbm9kZSkpIHtcbiA4OTA6XHRcdFx0XHRzcGluX3VubG9jayhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spO1xuIDg5MTpcdFx0XHRcdGNvbnRpbnVlO1xuIDg5MjpcdFx0XHR9XG4gODkzOlx0XHRcdGlmIChpbm9kZV9zdGF0ZV9yZWFkKGlub2RlKSBcdTAwMjYgKElfTkVXIHwgSV9GUkVFSU5HIHwgSV9XSUxMX0ZSRUUpKSB7XG4gODk0Olx0XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbiA4OTU6XHRcdFx0XHRjb250aW51ZTtcbiA4OTY6XHRcdFx0fVxuIDg5NzpcdFxuIDg5ODpcdFx0XHRpbm9kZV9zdGF0ZV9zZXQoaW5vZGUsIElfRlJFRUlORyk7XG4gODk5Olx0XHRcdGlub2RlX2xydV9saXN0X2RlbChpbm9kZSk7XG4gOTAwOlx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4gOTAxOlx0XG4gOTAyOlx0XHRcdC8qXG4gOTAzOlx0XHRcdCAqIEtlZXAgdGhpcyBpbm9kZSBvdXQgb2YgZGlzcG9zZSBzbyBpdCBzdGF5cyBvbiBzX2lub2RlcyB3aGlsZVxuIDkwNDpcdFx0XHQgKiB0aGUgbGlzdCBsb2NrIGlzIGRyb3BwZWQuIElfRlJFRUlORyBwcmV2ZW50cyBuZXcgcmVmZXJlbmNlc1xuIDkwNTpcdFx0XHQgKiBhbmQgbGVhdmVzIGV2aWN0aW9uIHRvIHVzLCBzbyB3ZSBjYW4gcmVzdW1lIHRoZSB3YWxrIGZyb20gaXQuXG4gOTA2Olx0XHRcdCAqL1xuIDkwNzpcdFx0XHRpZiAobmVlZF9yZXNjaGVkKCkpIHtcbiA5MDg6XHRcdFx0XHRzcGluX3VubG9jayhcdTAwMjZzYi1cdTAwM2VzX2lub2RlX2xpc3RfbG9jayk7XG4gOTA5Olx0XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4gOTEwOlx0XHRcdFx0ZGlzcG9zZV9saXN0KFx1MDAyNmRpc3Bvc2UpO1xuIDkxMTpcdFx0XHRcdHNwaW5fbG9jayhcdTAwMjZzYi1cdTAwM2VzX2lub2RlX2xpc3RfbG9jayk7XG4gOTEyOlx0XHRcdH1cbiA5MTM6XHRcdFx0bGlzdF9hZGQoXHUwMDI2aW5vZGUtXHUwMDNlaV9scnUsIFx1MDAyNmRpc3Bvc2UpO1xuIDkxNDpcdFx0fVxuIDkxNTpcdFx0c3Bpbl91bmxvY2soXHUwMDI2c2ItXHUwMDNlc19pbm9kZV9saXN0X2xvY2spO1xuIDkxNjpcdFxuIDkxNzpcdFx0ZGlzcG9zZV9saXN0KFx1MDAyNmRpc3Bvc2UpO1xuIDkxODpcdH1cbiA5MTk6XHRFWFBPUlRfU1lNQk9MX0dQTChldmljdF9pbm9kZXMpO1xuIDkyMDpcdFxuIDkyMTpcdC8qXG4gOTIyOlx0ICogSXNvbGF0ZSB0aGUgaW5vZGUgZnJvbSB0aGUgTFJVIGluIHByZXBhcmF0aW9uIGZvciBmcmVlaW5nIGl0LlxuIDkyMzpcdCAqXG4gOTI0Olx0ICogSWYgdGhlIGlub2RlIGhhcyB0aGUgSV9SRUZFUkVOQ0VEIGZsYWcgc2V0LCB0aGVuIGl0IG1lYW5zIHRoYXQgaXQgaGFzIGJlZW5cbiA5MjU6XHQgKiB1c2VkIHJlY2VudGx5IC0gdGhlIGZsYWcgaXMgc2V0IGluIGlwdXRfZmluYWwoKS4gV2hlbiB3ZSBlbmNvdW50ZXIgc3VjaCBhblxuIDkyNjpcdCAqIGlub2RlLCBjbGVhciB0aGUgZmxhZyBhbmQgbW92ZSBpdCB0byB0aGUgYmFjayBvZiB0aGUgTFJVIHNvIGl0IGdldHMgYW5vdGhlclxuIDkyNzpcdCAqIHBhc3MgdGhyb3VnaCB0aGUgTFJVIGJlZm9yZSBpdCBnZXRzIHJlY2xhaW1lZC4gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBvZlxuIDkyODpcdCAqIHRoZSBmYWN0IHdlIGFyZSBkb2luZyBsYXp5IExSVSB1cGRhdGVzIHRvIG1pbmltaXNlIGxvY2sgY29udGVudGlvbiBzbyB0aGVcbiA5Mjk6XHQgKiBMUlUgZG9lcyBub3QgaGF2ZSBzdHJpY3Qgb3JkZXJpbmcuIEhlbmNlIHdlIGRvbiYjMzk7dCB3YW50IHRvIHJlY2xhaW0gaW5vZGVzXG4gOTMwOlx0ICogd2l0aCB0aGlzIGZsYWcgc2V0IGJlY2F1c2UgdGhleSBhcmUgdGhlIGlub2RlcyB0aGF0IGFyZSBvdXQgb2Ygb3JkZXIuXG4gOTMxOlx0ICovXG4gOTMyOlx0c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBpbm9kZV9scnVfaXNvbGF0ZShzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLFxuIDkzMzpcdFx0XHRzdHJ1Y3QgbGlzdF9scnVfb25lICpscnUsIHZvaWQgKmFyZylcbiA5MzQ6XHR7XG4gOTM1Olx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpmcmVlYWJsZSA9IGFyZztcbiA5MzY6XHRcdHN0cnVjdCBpbm9kZVx0Kmlub2RlID0gY29udGFpbmVyX29mKGl0ZW0sIHN0cnVjdCBpbm9kZSwgaV9scnUpO1xuIDkzNzpcdFxuIDkzODpcdFx0LypcbiA5Mzk6XHRcdCAqIFdlIGFyZSBpbnZlcnRpbmcgdGhlIGxydSBsb2NrL2lub2RlLVx1MDAzZWlfbG9jayBoZXJlLCBzbyB1c2UgYVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA1OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1ODUKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoaXMgQ29kZSBTbmlwcGV0KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtXaGF0IGluIHRoZSB3b3JsZCBpcyB0aGlzIGNvZGUgZG9pbmc/JiMzNDsgSW1tZWRpYXRlbHksIEkgc2VlIGEgc3BpbmxvY2sgcHJvdGVjdGluZyBhIGxpc3QgaXRlcmF0aW9uOiBgc3Bpbl9sb2NrKCZhbXA7c2ItJmd0O3NfaW5vZGVfbGlzdF9sb2NrKWAgYW5kIHRoZSBmYW1pbGlhciBgbGlzdF9mb3JfZWFjaF9lbnRyeWAgbWFjcm8uIEkga25vdyB0aGF0IHVzdWFsbHkgbWVhbnMgd2UmIzM5O3JlIHRyYXZlcnNpbmcgaW5vZGVzIGFzc29jaWF0ZWQgd2l0aCBhIHN1cGVyYmxvY2suIEJ1dCBob2xkIG9uLCB0aGUgaXRlcmF0aW9uIGlzIGludGVycnVwdGVkIGJ5IGBuZWVkX3Jlc2NoZWQoKWAuIFRoZW4gdGhlcmUmIzM5O3MgYW4gYHVubG9ja2AhCgpNeSBleHBlcnQgaW5zdGluY3Qga2lja3MgaW4gYW5kIHNheXMsICYjMzQ7V2FpdCBhIG1pbnV0ZSwgd2hhdCBoYXBwZW5zIGR1cmluZyB0aGUgdW5sb2NrPyYjMzQ7IGBsaXN0X2Zvcl9lYWNoX2VudHJ5YCBleHBhbmRzIHRvIGEgc3RhbmRhcmQgYGZvcmAgbG9vcCwgc28gSSB1bmRlcnN0YW5kIHRoYXQgdGhlIGxpc3QgdHJhdmVyc2FsIGNvdWxkIGJlIGluIHByb2dyZXNzIHdoZW4gdGhlIHVubG9jayBpcyBjYWxsZWQuIENydWNpYWxseSwgSSBoYXZlIHRvIHRoaW5rIGFib3V0IHdoYXQgb3RoZXIgb3BlcmF0aW9ucyBhcmUgaGFwcGVuaW5nIGluIHRoZSBzeXN0ZW0gdGhhdCBjb3VsZCBpbnRlcmFjdCB3aXRoIHRoZSBsaXN0LiBDYW4gb3RoZXIgcHJvY2Vzc2VzIG1vZGlmeSB0aGUgYCZhbXA7c2ItJmd0O3NfaW5vZGVzYCBsaXN0IHdoaWxlIHRoaXMgdGhyZWFkIGhhcyB0ZW1wb3JhcmlseSByZWxpbnF1aXNoZWQgdGhlIGxvY2s/IFdoYXQgaWYgYW4gaW5vZGUmIzM5O3MgYGlfc2JfbGlzdC5uZXh0YCBwb2ludGVyIGlzIG1vZGlmaWVkIGluIGFub3RoZXIgdGhyZWFkIHdoaWxlIHRoaXMgdGhyZWFkIHVubG9ja3MgYW5kIHRoZW4gcmVsb2Nrcz8gVGhhdCYjMzk7cyBhIGNsYXNzaWMgcmFjZSBjb25kaXRpb24gc2NlbmFyaW8gc2NyZWFtaW5nIGF0IG1lLgoKVGhlbiwgdGhlcmUmIzM5O3MgYGRpc3Bvc2VfbGlzdCgmYW1wO2Rpc3Bvc2UpYC4gJiMzNDtXaGF0IGRvZXMgKnRoYXQqIGRvPyYjMzQ7IE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgZGVmaW5pdGlvbiBvZiBgZGlzcG9zZV9saXN0YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGluIHRoZSBjb250ZXh0IG9mIHRoZSBsb2NrJiMzOTtzIGxpZmVjeWNsZSB0byBjb21wbGV0ZWx5IGV2YWx1YXRlIHRoZSBzYWZldHkgb2YgdGhpcyBpbXBsZW1lbnRhdGlvbi4gSSBoYXZlIHRvIGxvb2sgaW50byB0aGlzIGZ1bmN0aW9uLCBidXQgdGhlIGZhY3QgdGhhdCBpdCBpcyBjYWxsZWQgYWZ0ZXIgdGhlIHVubG9jayBhbmQgYmVmb3JlIHRoZSByZWxvY2sgaXMgZ2l2aW5nIG1lIHBhdXNlLiBUaGlzIG5lZWRzIHRvIGJlIGNoZWNrZWQgY2FyZWZ1bGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA1OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgZGlzcG9zZV9saXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaW5vZGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9pbm9kZS5jPTc5OT1zdGF0aWMgdm9pZCBldmljdChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2lub2RlLmMtODU1LSAqL1xuZnMvaW5vZGUuYzo4NTY6c3RhdGljIHZvaWQgZGlzcG9zZV9saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXG5mcy9pbm9kZS5jLTg1Ny17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM3MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIGNvbnNpZGVyaW5nIEkmIzM5O20gYW4gZXhwZXJ0OgoKKipEaXZpbmcgaW50byBgZGlzcG9zZV9saXN0YCBpbiBgZnMvaW5vZGUuY2AqKgoKT2theSwgdGltZSB0byBnZXQgYSBiaXQgZ3JhbnVsYXIuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBkaXNwb3NlX2xpc3RgIGZ1bmN0aW9uIHdpdGhpbiBgZnMvaW5vZGUuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhleSYjMzk7cmUgaGFuZGxpbmcgaW5vZGUgY2xlYW51cCwgc28gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoZSBjb3JlIGxvZ2ljIGZvciByZWxlYXNpbmcgaW5vZGUgcmVzb3VyY2VzIHdoZW4gdGhleSYjMzk7cmUgbm8gbG9uZ2VyIG5lZWRlZC4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhleSYjMzk7cmUgbWFuYWdpbmcgdGhlIGxpc3QgaXRzZWxmIOKAkyBob3cgaXMgaXQgc3RydWN0dXJlZCwgYW5kIHdoYXQgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgYXJlIHRoZXkgdXNpbmc/IEdpdmVuIHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBjb25jdXJyZW50IGFjY2VzcyB0byBpbm9kZXMsIGVmZmljaWVudCBhbmQgc2FmZSBsaXN0IG1hbmlwdWxhdGlvbiBpcyBjcnVjaWFsLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyB0aGUgY29tbW9uIHNjZW5hcmlvczogYWRkaW5nLCByZW1vdmluZywgaXRlcmF0aW5nLCBhbmQgcGVyaGFwcyByZS11c2luZyBlbnRyaWVzIG9uIHRoZSBsaXN0LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBiZSB3YXRjaGluZyBob3cgdGhleSBkZWFsIHdpdGggdGhlIHJlZmVyZW5jZSBjb3VudHMgYW5kIGlmIHRoZXkmIzM5O3JlIGNvbnNpZGVyaW5nIGFueSBmb3JtIG9mIG9wdGltaXN0aWMgbG9ja2luZyBvciBvdGhlciBhZHZhbmNlZCBzdHJhdGVnaWVzIHRvIG1pbmltaXplIGNvbnRlbnRpb24uIEkgYWxzbyB3YW50IHRvIG9ic2VydmUgaWYgdGhleSYjMzk7cmUgaGFuZGxpbmcgYW55IHNwZWNpYWwgY2FzZXMsIGxpa2Ugb3JwaGFuZWQgaW5vZGVzIG9yIGlub2RlcyB3aXRoIHBlbmRpbmcgSS9PLCBiZWZvcmUgSSBkZWNpZGUgdG8gZGl2ZSBpbnRvIGl0IG1vcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9pbm9kZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NTA6XHQgKiBkaXNwb3NlX2xpc3QgLSBkaXNwb3NlIG9mIHRoZSBjb250ZW50cyBvZiBhIGxvY2FsIGxpc3RcbiA4NTE6XHQgKiBAaGVhZDogdGhlIGhlYWQgb2YgdGhlIGxpc3QgdG8gZnJlZVxuIDg1MjpcdCAqXG4gODUzOlx0ICogRGlzcG9zZS1saXN0IGdldHMgYSBsb2NhbCBsaXN0IHdpdGggbG9jYWwgaW5vZGVzIGluIGl0LCBzbyBpdCBkb2VzbiYjMzk7dFxuIDg1NDpcdCAqIG5lZWQgdG8gd29ycnkgYWJvdXQgbGlzdCBjb3JydXB0aW9uIGFuZCBTTVAgbG9ja3MuXG4gODU1Olx0ICovXG4gODU2Olx0c3RhdGljIHZvaWQgZGlzcG9zZV9saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXG4gODU3Olx0e1xuIDg1ODpcdFx0d2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7XG4gODU5Olx0XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4gODYwOlx0XG4gODYxOlx0XHRcdGlub2RlID0gbGlzdF9maXJzdF9lbnRyeShoZWFkLCBzdHJ1Y3QgaW5vZGUsIGlfbHJ1KTtcbiA4NjI6XHRcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZpbm9kZS1cdTAwM2VpX2xydSk7XG4gODYzOlx0XG4gODY0Olx0XHRcdGV2aWN0KGlub2RlKTtcbiA4NjU6XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4gODY2Olx0XHR9XG4gODY3Olx0fVxuIDg2ODpcdFxuIDg2OTpcdC8qKlxuIDg3MDpcdCAqIGV2aWN0X2lub2Rlc1x0LSBldmljdCBhbGwgZXZpY3RhYmxlIGlub2RlcyBmb3IgYSBzdXBlcmJsb2NrXG4gODcxOlx0ICogQHNiOlx0XHRzdXBlcmJsb2NrIHRvIG9wZXJhdGUgb25cbiA4NzI6XHQgKlxuIDg3MzpcdCAqIE1ha2Ugc3VyZSB0aGF0IG5vIGlub2RlcyB3aXRoIHplcm8gcmVmY291bnQgYXJlIHJldGFpbmVkLiAgVGhpcyBpc1xuIDg3NDpcdCAqIGNhbGxlZCBieSBzdXBlcmJsb2NrIHNodXRkb3duIGFmdGVyIGhhdmluZyBTQl9BQ1RJVkUgZmxhZyByZW1vdmVkLFxuIDg3NTpcdCAqIHNvIGFueSBpbm9kZSByZWFjaGluZyB6ZXJvIHJlZmNvdW50IGR1cmluZyBvciBhZnRlciB0aGF0IGNhbGwgd2lsbFxuIDg3NjpcdCAqIGJlIGltbWVkaWF0ZWx5IGV2aWN0ZWQuXG4gODc3Olx0ICovXG4gODc4Olx0dm9pZCBldmljdF9pbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiA4Nzk6XHR7XG4gODgwOlx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuIDg4MTpcdFx0TElTVF9IRUFEKGRpc3Bvc2UpO1xuIDg4MjpcdFxuIDg4MzpcdFx0c3Bpbl9sb2NrKFx1MDAyNnNiLVx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrKTtcbiA4ODQ6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoaW5vZGUsIFx1MDAyNnNiLVx1MDAzZXNfaW5vZGVzLCBpX3NiX2xpc3QpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjA5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgYGV2aWN0KGlub2RlKWAgZm9yIElub2RlIFJlbW92YWwqKgoKSG9sZCBvbiBhIHNlY29uZCEgSSBuZWVkIHRvIGNsYXJpZnkgc29tZXRoaW5nIGFib3V0IGhvdyBpbm9kZXMgYXJlIGhhbmRsZWQuIFRoZSBmdW5jdGlvbiBgZXZpY3QoaW5vZGUpYCBpcyBzdXBwb3NlZCB0byByZW1vdmUgdGhlIGlub2RlIGZyb20gYHNiLSZndDtzX2lub2Rlc2AsIHJpZ2h0PyBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHRoaXMgaXMgd2hhdCYjMzk7cyBoYXBwZW5pbmcsIHNvIEkgbmVlZCB0byB2ZXJpZnkgaXRzIGJlaGF2aW9yLgoKTGV0JiMzOTtzIGRpZyBpbnRvIGBldmljdChpbm9kZSlgIGFuZCBtYWtlIHN1cmUgaXQmIzM5O3MgZG9pbmcgd2hhdCBJIGV4cGVjdC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGl0JiMzOTtzIGNvcnJlY3RseSByZW1vdmluZyBkaXNwb3NlZCBpbm9kZXMgZnJvbSBgc19pbm9kZXNgLiBJJiMzOTtsbCBmb2N1cyBvbiB0aGUgYXJlYSBhcm91bmQgbGluZSA4MDAgd2l0aGluIHRoZSBgZXZpY3Qoc3RydWN0IGlub2RlICppbm9kZSlgIGZ1bmN0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgcmVhbGx5IGdvaW5nIG9uIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2lub2RlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3OTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc5NTpcdCAqIEFuIGlub2RlIG11c3QgYWxyZWFkeSBiZSByZW1vdmVkIGZyb20gdGhlIExSVSBsaXN0IGJlZm9yZSBiZWluZyBldmljdGVkIGZyb21cbiA3OTY6XHQgKiB0aGUgY2FjaGUuIFRoaXMgc2hvdWxkIG9jY3VyIGF0b21pY2FsbHkgd2l0aCBzZXR0aW5nIHRoZSBJX0ZSRUVJTkcgc3RhdGVcbiA3OTc6XHQgKiBmbGFnLCBzbyBubyBpbm9kZXMgaGVyZSBzaG91bGQgZXZlciBiZSBvbiB0aGUgTFJVIHdoZW4gYmVpbmcgZXZpY3RlZC5cbiA3OTg6XHQgKi9cbiA3OTk6XHRzdGF0aWMgdm9pZCBldmljdChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIDgwMDpcdHtcbiA4MDE6XHRcdGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zICpvcCA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19vcDtcbiA4MDI6XHRcbiA4MDM6XHRcdEJVR19PTighKGlub2RlX3N0YXRlX3JlYWRfb25jZShpbm9kZSkgXHUwMDI2IElfRlJFRUlORykpO1xuIDgwNDpcdFx0QlVHX09OKCFsaXN0X2VtcHR5KFx1MDAyNmlub2RlLVx1MDAzZWlfbHJ1KSk7XG4gODA1Olx0XG4gODA2Olx0XHRpbm9kZV9pb19saXN0X2RlbChpbm9kZSk7XG4gODA3Olx0XHRpbm9kZV9zYl9saXN0X2RlbChpbm9kZSk7XG4gODA4Olx0XG4gODA5Olx0XHRzcGluX2xvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbiA4MTA6XHRcdGlub2RlX3dhaXRfZm9yX2xydV9pc29sYXRpbmcoaW5vZGUpO1xuIDgxMTpcdFxuIDgxMjpcdFx0LypcbiA4MTM6XHRcdCAqIFdhaXQgZm9yIGZsdXNoZXIgdGhyZWFkIHRvIGJlIGRvbmUgd2l0aCB0aGUgaW5vZGUgc28gdGhhdCBmaWxlc3lzdGVtXG4gODE0Olx0XHQgKiBkb2VzIG5vdCBzdGFydCBkZXN0cm95aW5nIGl0IHdoaWxlIHdyaXRlYmFjayBpcyBzdGlsbCBydW5uaW5nLiBTaW5jZVxuIDgxNTpcdFx0ICogdGhlIGlub2RlIGhhcyBJX0ZSRUVJTkcgc2V0LCBmbHVzaGVyIHRocmVhZCB3b24mIzM5O3Qgc3RhcnQgbmV3IHdvcmsgb25cbiA4MTY6XHRcdCAqIHRoZSBpbm9kZS4gIFdlIGp1c3QgaGF2ZSB0byB3YWl0IGZvciBydW5uaW5nIHdyaXRlYmFjayB0byBmaW5pc2guXG4gODE3Olx0XHQgKi9cbiA4MTg6XHRcdGlub2RlX3dhaXRfZm9yX3dyaXRlYmFjayhpbm9kZSk7XG4gODE5Olx0XHRzcGluX3VubG9jayhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spO1xuIDgyMDpcdFxuIDgyMTpcdFx0aWYgKG9wLVx1MDAzZWV2aWN0X2lub2RlKSB7XG4gODIyOlx0XHRcdG9wLVx1MDAzZWV2aWN0X2lub2RlKGlub2RlKTtcbiA4MjM6XHRcdH0gZWxzZSB7XG4gODI0Olx0XHRcdHRydW5jYXRlX2lub2RlX3BhZ2VzX2ZpbmFsKFx1MDAyNmlub2RlLVx1MDAzZWlfZGF0YSk7XG4gODI1Olx0XHRcdGNsZWFyX2lub2RlKGlub2RlKTtcbiA4MjY6XHRcdH1cbiA4Mjc6XHRcdGlmIChTX0lTQ0hSKGlub2RlLVx1MDAzZWlfbW9kZSkgXHUwMDI2XHUwMDI2IGlub2RlLVx1MDAzZWlfY2RldilcbiA4Mjg6XHRcdFx0Y2RfZm9yZ2V0KGlub2RlKTtcbiA4Mjk6XHRcbiA4MzA6XHRcdHJlbW92ZV9pbm9kZV9oYXNoKGlub2RlKTtcbiA4MzE6XHRcbiA4MzI6XHRcdC8qXG4gODMzOlx0XHQgKiBXYWtlIHVwIHdhaXRlcnMgaW4gX193YWl0X29uX2ZyZWVpbmdfaW5vZGUoKS5cbiA4MzQ6XHRcdCAqXG4gODM1Olx0XHQgKiBJdCBpcyBhbiBpbnZhcmlhbnQgdGhhdCBhbnkgdGhyZWFkIHdlIG5lZWQgdG8gd2FrZSB1cCBpcyBhbHJlYWR5XG4gODM2Olx0XHQgKiBhY2NvdW50ZWQgZm9yIGJlZm9yZSByZW1vdmVfaW5vZGVfaGFzaCgpIGFjcXVpcmVzIC1cdTAwM2VpX2xvY2sgLS0gYm90aFxuIDgzNzpcdFx0ICogc2lkZXMgdGFrZSB0aGUgbG9jayBhbmQgc2xlZXAgaXMgYWJvcnRlZCBpZiB0aGUgaW5vZGUgaXMgZm91bmRcbiA4Mzg6XHRcdCAqIHVuaGFzaGVkLiBUaHVzIGVpdGhlciB0aGUgc2xlZXBlciB3aW5zIGFuZCBnb2VzIG9mZiBDUFUsIG9yIHJlbW92YWxcbiA4Mzk6XHRcdCAqIHdpbnMgYW5kIHRoZSBzbGVlcGVyIGFib3J0cyBhZnRlciB0ZXN0aW5nIHdpdGggdGhlIGxvY2suXG4gODQwOlx0XHQgKlxuIDg0MTpcdFx0ICogVGhpcyBhbHNvIG1lYW5zIHdlIGRvbiYjMzk7dCBuZWVkIGFueSBmZW5jZXMgZm9yIHRoZSBjYWxsIGJlbG93LlxuIDg0MjpcdFx0ICovXG4gODQzOlx0XHRpbm9kZV93YWtlX3VwX2JpdChpbm9kZSwgX19JX05FVyk7XG4gODQ0Olx0XHRCVUdfT04oaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSAhPSAoSV9GUkVFSU5HIHwgSV9DTEVBUikpO1xuIDg0NTpcdFxuIDg0NjpcdFx0ZGVzdHJveV9pbm9kZShpbm9kZSk7XG4gODQ3Olx0fVxuIDg0ODpcdFxuIDg0OTpcdC8qXG4gODUwOlx0ICogZGlzcG9zZV9saXN0IC0gZGlzcG9zZSBvZiB0aGUgY29udGVudHMgb2YgYSBsb2NhbCBsaXN0XG4gODUxOlx0ICogQGhlYWQ6IHRoZSBoZWFkIG9mIHRoZSBsaXN0IHRvIGZyZWVcbiA4NTI6XHQgKlxuIDg1MzpcdCAqIERpc3Bvc2UtbGlzdCBnZXRzIGEgbG9jYWwgbGlzdCB3aXRoIGxvY2FsIGlub2RlcyBpbiBpdCwgc28gaXQgZG9lc24mIzM5O3RcbiA4NTQ6XHQgKiBuZWVkIHRvIHdvcnJ5IGFib3V0IGxpc3QgY29ycnVwdGlvbiBhbmQgU01QIGxvY2tzLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDM3CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNjg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgaW5vZGUgbGlzdCBoYW5kbGluZyBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBteSBhdHRlbnRpb24gaXMgZHJhd24gdG8gYGlub2RlX3NiX2xpc3RfZGVsKGlub2RlKWAuIFJpZ2h0LCB0aGF0IHJlbW92ZXMgYW4gaW5vZGUgZnJvbSBgc2ItJmd0O3NfaW5vZGVzYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBCdXQgdGhlIGNvbnRleHQgaXMgd2hhdCYjMzk7cyBtYWtpbmcgbWUgdW5lYXN5LiBMZXQgbWUgc2VlLi4uIHRoZSBvcmlnaW5hbCBjb2RlIGhhZCB0aGlzIGxvb3Agd2l0aCBgc2ItJmd0O3NfaW5vZGVfbGlzdF9sb2NrYCBoZWxkLCBpdGVyYXRpbmcgdGhyb3VnaCBgc2ItJmd0O3NfaW5vZGVzYC4gV2hlbiBgbmVlZF9yZXNjaGVkKClgIHdhcyB0cnVlLCB0aGUgb3JpZ2luYWwgY29kZSBhZGRlZCB0aGUgY3VycmVudCBpbm9kZSB0byBgZGlzcG9zZWAsIHJlbGVhc2VkIHRoZSBsb2NrLCBjYWxsZWQgYGRpc3Bvc2VfbGlzdGAgKHdoaWNoIHdvdWxkIGV2aWN0IHRoZSBpbm9kZSksIGFuZCB0aGVuIHdlbnQgKmJhY2sqIHRvIHRoZSB0b3Agb2YgdGhlIGxpc3QsIGFjcXVpcmluZyB0aGUgbG9jayBhZ2Fpbi4KCk5vdywgdGhlIHBhdGNoIGNoYW5nZXMgdGhlIG9yZGVyLiBOb3csIGl0JiMzOTtzIGFkZGluZyB0aGUgaW5vZGUgdG8gYGRpc3Bvc2VgICphZnRlciogdGhlIGBuZWVkX3Jlc2NoZWQoKWAgY2hlY2sgYW5kIHRoZSBgc3Bpbl91bmxvY2tgLiBIb2xkIG9uIGEgc2Vjb25kLi4uIFRoaXMgbWVhbnMgdGhhdCB3aGlsZSBgc2ItJmd0O3NfaW5vZGVfbGlzdF9sb2NrYCBpcyAqdW5sb2NrZWQqLCBhbnkgb3RoZXIgdGhyZWFkIGNvdWxkIHBvdGVudGlhbGx5IG1vZGlmeSBgc2ItJmd0O3NfaW5vZGVzYCEgV2hhdCBoYXBwZW5zIGlmIGFub3RoZXIgaW5vZGUgbmV4dCB0byBgaW5vZGVgIGlzIGRlbGV0ZWQgb3IgYSBuZXcgb25lIGluc2VydGVkPyBTdWRkZW5seSwgdGhlIGl0ZXJhdG9yIGluIHRoZSBsb29wIG1pZ2h0IGJlIG9wZXJhdGluZyBvbiBhbiBpbmNvbnNpc3RlbnQgZGF0YSBzdHJ1Y3R1cmUhIEFuZCB0aGluayBhYm91dCB0aGUgY2FzZSBvZiBhbiB1bm1vdW50IG9yIHN1cGVyYmxvY2sgc2h1dGRvd24gd2hlcmUgd2UmIzM5O3JlIHByb2JhYmx5IGRvaW5nIGEgbG90IG9mIHRoZXNlIG9wZXJhdGlvbnMgY29uY3VycmVudGx5LiBJcyBgZXZpY3RfaW5vZGVzYCBvbmx5IGNhbGxlZCBkdXJpbmcgdW5tb3VudCwgb3IgYXJlIHRoZXJlIG90aGVyIHBsYWNlcyBpbiB0aGUgZmlsZXN5c3RlbSB3aGVyZSB0aGlzIGNvdWxkIGhhcHBlbj8gTmVlZCB0byBrbm93LiBJIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxlcnMgb2YgYGV2aWN0X2lub2Rlc2AgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXZpY3RfaW5vZGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3Q9MTE3OT1MT09LX0NSRUFURSBvciBMT09LVVBfUkVOQU1FX1RBUkdFVC5cbi0tXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0LTExODMtKiptYW5kYXRvcnkqKlxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdDoxMTg0OmludmFsaWRhdGVfaW5vZGVzKCkgaXMgZ29uZSB1c2UgZXZpY3RfaW5vZGVzKCkgaW5zdGVhZC5cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3QtMTE4NS1cbi0tXG5mcy9mMmZzL3N1cGVyLmM9NTA3Nz1zdGF0aWMgaW50IGYyZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvZjJmcy9zdXBlci5jLTU1MzQtXHQvKiBldmljdCBzb21lIGlub2RlcyBiZWluZyBjYWNoZWQgYnkgR0MgKi9cbmZzL2YyZnMvc3VwZXIuYzo1NTM1Olx0ZXZpY3RfaW5vZGVzKHNiKTtcbmZzL2YyZnMvc3VwZXIuYy01NTM2LVx0ZjJmc191bnJlZ2lzdGVyX3N5c2ZzKHNiaSk7XG4tLVxuZnMvZnVzZS92aXJ0aW9fZnMuYz0xNjI3PXN0YXRpYyB2b2lkIHZpcnRpb19mc19jb25uX2Rlc3Ryb3koc3RydWN0IGZ1c2VfbW91bnQgKmZtKVxuLS1cbmZzL2Z1c2UvdmlydGlvX2ZzLmMtMTYzMi1cbmZzL2Z1c2UvdmlydGlvX2ZzLmM6MTYzMzpcdC8qIFN0b3AgZGF4IHdvcmtlci4gU29vbiBldmljdF9pbm9kZXMoKSB3aWxsIGJlIGNhbGxlZCB3aGljaFxuZnMvZnVzZS92aXJ0aW9fZnMuYy0xNjM0LVx0ICogd2lsbCBmcmVlIGFsbCBtZW1vcnkgcmFuZ2VzIGJlbG9uZ2luZyB0byBhbGwgaW5vZGVzLlxuLS1cbmZzL2dmczIvb3BzX2ZzdHlwZS5jPTE3MTE9c3RhdGljIGludCBnZnMyX21ldGFfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9nZnMyL29wc19mc3R5cGUuYy0xNzIyLS8qKlxuZnMvZ2ZzMi9vcHNfZnN0eXBlLmM6MTcyMzogKiBnZnMyX2V2aWN0X2lub2RlcyAtIGV2aWN0IGlub2RlcyBjb29wZXJhdGl2ZWx5XG5mcy9nZnMyL29wc19mc3R5cGUuYy0xNzI0LSAqIEBzYjogdGhlIHN1cGVyYmxvY2tcbi0tXG5mcy9nZnMyL29wc19mc3R5cGUuYy0xNzM0LSAqXG5mcy9nZnMyL29wc19mc3R5cGUuYzoxNzM1OiAqIEZ1bmN0aW9uIGV2aWN0X2lub2RlcygpIHRyaWVzIHRvIGtlZXAgdGhlIHNfaW5vZGVfbGlzdF9sb2NrIGxpc3QgbG9ja2VkIG92ZXJcbmZzL2dmczIvb3BzX2ZzdHlwZS5jLTE3MzYtICogYSBsb25nIHRpbWUsIHdoaWNoIHByZXZlbnRzIG90aGVyIGlub2RlcyBmcm9tIGJlaW5nIGV2aWN0ZWQgY29uY3VycmVudGx5LlxuZnMvZ2ZzMi9vcHNfZnN0eXBlLmMtMTczNy0gKiBUaGlzIHByZWNsdWRlcyB0aGUgY29vcGVyYXRpdmUgYmVoYXZpb3Igd2UgYXJlIGxvb2tpbmcgZm9yLiAgVGhpcyBzcGVjaWFsXG5mcy9nZnMyL29wc19mc3R5cGUuYzoxNzM4OiAqIHZlcnNpb24gb2YgZXZpY3RfaW5vZGVzKCkgYXZvaWRzIHRoYXQuXG5mcy9nZnMyL29wc19mc3R5cGUuYy0xNzM5LSAqXG4tLVxuZnMvZ2ZzMi9vcHNfZnN0eXBlLmMtMTc0MS0gKi9cbmZzL2dmczIvb3BzX2ZzdHlwZS5jOjE3NDI6c3RhdGljIHZvaWQgZ2ZzMl9ldmljdF9pbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2dmczIvb3BzX2ZzdHlwZS5jLTE3NDMte1xuLS1cbmZzL2dmczIvb3BzX2ZzdHlwZS5jPTE3NzE9c3RhdGljIHZvaWQgZ2ZzMl9raWxsX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZ2ZzMi9vcHNfZnN0eXBlLmMtMTc4Ny1cdHNldF9iaXQoU0RGX0tJTEwsIFx1MDAyNnNkcC1cdTAwM2VzZF9mbGFncyk7XG5mcy9nZnMyL29wc19mc3R5cGUuYzoxNzg4Olx0Z2ZzMl9ldmljdF9pbm9kZXMoc2IpO1xuZnMvZ2ZzMi9vcHNfZnN0eXBlLmMtMTc4OS1cbi0tXG5mcy9pbm9kZS5jPTg1Nj1zdGF0aWMgdm9pZCBkaXNwb3NlX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbi0tXG5mcy9pbm9kZS5jLTg2OS0vKipcbmZzL2lub2RlLmM6ODcwOiAqIGV2aWN0X2lub2Rlc1x0LSBldmljdCBhbGwgZXZpY3RhYmxlIGlub2RlcyBmb3IgYSBzdXBlcmJsb2NrXG5mcy9pbm9kZS5jLTg3MS0gKiBAc2I6XHRcdHN1cGVyYmxvY2sgdG8gb3BlcmF0ZSBvblxuLS1cbmZzL2lub2RlLmMtODc3LSAqL1xuZnMvaW5vZGUuYzo4Nzg6dm9pZCBldmljdF9pbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2lub2RlLmMtODc5LXtcbi0tXG5mcy9pbm9kZS5jLTkxOC19XG5mcy9pbm9kZS5jOjkxOTpFWFBPUlRfU1lNQk9MX0dQTChldmljdF9pbm9kZXMpO1xuZnMvaW5vZGUuYy05MjAtXG4tLVxuZnMvc21iL2NsaWVudC9maWxlLmM9Mzc1PWNpZnNfbWFya19vcGVuX2ZpbGVzX2ludmFsaWQoc3RydWN0IGNpZnNfdGNvbiAqdGNvbilcbi0tXG5mcy9zbWIvY2xpZW50L2ZpbGUuYy00MDgtXHQvKlxuZnMvc21iL2NsaWVudC9maWxlLmM6NDA5Olx0ICogQkIgQWRkIGNhbGwgdG8gZXZpY3RfaW5vZGVzKHNiKSBmb3IgYWxsIHN1cGVyYmxvY2tzIG1vdW50ZWRcbmZzL3NtYi9jbGllbnQvZmlsZS5jLTQxMC1cdCAqIHRvIHRoaXMgdGNvbi5cbi0tXG5mcy9zdXBlci5jPTc0MT12b2lkIGdlbmVyaWNfc2h1dGRvd25fc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9zdXBlci5jLTc1NC1cdFx0LyogRXZpY3QgYWxsIGlub2RlcyB3aXRoIHplcm8gcmVmY291bnQuICovXG5mcy9zdXBlci5jOjc1NTpcdFx0ZXZpY3RfaW5vZGVzKHNiKTtcbmZzL3N1cGVyLmMtNzU2LVxuLS1cbmZzL3N1cGVyLmM9MTUwNz1zdGF0aWMgdm9pZCBmc19iZGV2X21hcmtfZGVhZChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBib29sIHN1cnByaXNlKVxuLS1cbmZzL3N1cGVyLmMtMTUyNC1cdFx0XHRcdHNocmlua19kY2FjaGVfc2Ioc2IpO1xuZnMvc3VwZXIuYzoxNTI1Olx0XHRcdFx0ZXZpY3RfaW5vZGVzKHNiKTtcbmZzL3N1cGVyLmMtMTUyNi1cdFx0XHRcdGlmIChzYi1cdTAwM2VzX29wLVx1MDAzZXNodXRkb3duKVxuLS1cbmZzL3hmcy94ZnNfbG9nLmM9NjYyPXhmc19sb2dfbW91bnRfZmluaXNoKFxuLS1cbmZzL3hmcy94ZnNfbG9nLmMtNjk3LVx0bXAtXHUwMDNlbV9zdXBlci1cdTAwM2VzX2ZsYWdzIFx1MDAyNj0gflNCX0FDVElWRTtcbmZzL3hmcy94ZnNfbG9nLmM6Njk4Olx0ZXZpY3RfaW5vZGVzKG1wLVx1MDAzZW1fc3VwZXIpO1xuZnMveGZzL3hmc19sb2cuYy02OTktXG4tLVxuaW5jbHVkZS9saW51eC9mcy5oPTMwMTM9dW5zaWduZWQgaW50IGdldF9uZXh0X2lubyh2b2lkKTtcbmluY2x1ZGUvbGludXgvZnMuaDozMDE0OnZvaWQgZXZpY3RfaW5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xuaW5jbHVkZS9saW51eC9mcy5oLTMwMTUtdm9pZCBkdW1wX21hcHBpbmcoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKik7XG4tLVxuc2VjdXJpdHkvbGFuZGxvY2svZnMuYz0xMzY0PXN0YXRpYyB2b2lkIGhvb2tfaW5vZGVfZnJlZV9zZWN1cml0eV9yY3Uodm9pZCAqaW5vZGVfc2VjdXJpdHkpXG4tLVxuc2VjdXJpdHkvbGFuZGxvY2svZnMuYy0xMzgwLSAqXG5zZWN1cml0eS9sYW5kbG9jay9mcy5jOjEzODE6ICogQ2YuIGZzbm90aWZ5X3VubW91bnRfaW5vZGVzKCkgYW5kIGV2aWN0X2lub2RlcygpXG5zZWN1cml0eS9sYW5kbG9jay9mcy5jLTEzODItICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA1OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTE4CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmNlcm5zIHdpdGggYGV2aWN0X2lub2Rlc2AgYW5kIFBvdGVudGlhbCBDb25jdXJyZW5jeSBJc3N1ZXMqKgoKT2theSwgc28gYGV2aWN0X2lub2Rlc2AgaXMgYSBwcmV0dHkgaW1wb3J0YW50IGZ1bmN0aW9uLiBJJiMzOTttIHNlZWluZyB0aGF0IGl0IGdldHMgY2FsbGVkIGluIGBnZW5lcmljX3NodXRkb3duX3N1cGVyYCwgd2hpY2ggaXMgYmFzaWNhbGx5IGV2ZXJ5IGZpbGVzeXN0ZW0mIzM5O3MgdW5tb3VudCByb3V0aW5lLiBJdCBhbHNvIHBvcHMgdXAgaW4gc29tZSBvdGhlciBjcml0aWNhbCBwbGFjZXMsIGxpa2UgYGYyZnNfZmlsbF9zdXBlcmAsIGBmc19iZGV2X21hcmtfZGVhZGAsIGFuZCBgeGZzX2xvZ19tb3VudF9maW5pc2hgLiBUaGF0IG1lYW5zIGl0JiMzOTtzIGZ1bmRhbWVudGFsIHRvIHZhcmlvdXMgYXNwZWN0cyBvZiBmaWxlc3lzdGVtIG1hbmFnZW1lbnQsIGZyb20gaW5pdGlhbCBtb3VudGluZyB0byBjbGVhbmluZyB1cCBvbiB1bm1vdW50IG9yIGluIGNhc2VzIG9mIGRldmljZSBkZWF0aC4KCk5vdywgSSYjMzk7bSB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IGhvdyBpdCBpdGVyYXRlcyB0aHJvdWdoIGlub2Rlcy4gVGhlIGNvZGUgdXNlcyBgbGlzdF9mb3JfZWFjaF9lbnRyeShpbm9kZSwgJmFtcDtzYi0mZ3Q7c19pbm9kZXMsIGlfc2JfbGlzdClgLiBUaGF0IGBpbm9kZWAgdGhlcmU/IFRoYXQmIzM5O3MgdGhlIGxvb3AgY3Vyc29yLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGhhcHBlbnMgaWYgdGhhdCBpdGVyYXRvciBpcyBtb2RpZmllZCBtaWQtZmxpZ2h0LgoKQWhhLCBoZXJlJiMzOTtzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIEkgc2VlIGEgYG5lZWRfcmVzY2hlZCgpYCBjaGVjayB3aXRoaW4gdGhlIGxvb3AuIFdoZW4gaXQmIzM5O3MgdHJ1ZSwgdGhlIGxvY2sgYHNiLSZndDtzX2lub2RlX2xpc3RfbG9ja2AgaXMgZHJvcHBlZCwgYGNvbmRfcmVzY2hlZCgpYCBpcyBjYWxsZWQsIHNvbWUga2luZCBvZiBkaXNwb3NhbCBsaXN0IGlzIGhhbmRsZWQsIGFuZCAqdGhlbiogdGhlIGxvY2sgaXMgcmVhY3F1aXJlZC4gVGhlIGtleSBoZXJlIGlzOgoKYHNwaW5fdW5sb2NrKCZhbXA7c2ItJmd0O3NfaW5vZGVfbGlzdF9sb2NrKTtgCmBjb25kX3Jlc2NoZWQoKTtgCmBkaXNwb3NlX2xpc3QoJmFtcDtkaXNwb3NlKTtgCmBzcGluX2xvY2soJmFtcDtzYi0mZ3Q7c19pbm9kZV9saXN0X2xvY2spO2AKYGxpc3RfYWRkKCZhbXA7aW5vZGUtJmd0O2lfbHJ1LCAmYW1wO2Rpc3Bvc2UpO2AKCkhhbmcgb24gYSBzZWNvbmQhIFRoaXMgYGlub2RlYCBsaXN0IG1hbmlwdWxhdGlvbiBvY2N1cnMgKmFmdGVyKiB0aGUgbG9jayBpcyBkcm9wcGVkLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgc2FmZXR5IG9mIGBpbm9kZS0mZ3Q7aV9zYl9saXN0Lm5leHRgIGR1cmluZyB0aGF0IHBlcmlvZCEgSXMgdGhhdCBkYXRhIHN0cnVjdHVyZSBwcm90ZWN0ZWQgY29ycmVjdGx5PyBJcyBzb21ldGhpbmcgZWxzZSBtb2RpZnlpbmcgdGhlIGBpX3NiX2xpc3RgIHdoaWxlIHdlIGFyZSBpbiB0aGUgYG5lZWRfcmVzY2hlZGAgcGF0aCBhbmQgdGhlIGxvY2sgaXMgZHJvcHBlZD8gVGhpcyBjb3VsZCBsZWFkIHRvIGFsbCBzb3J0cyBvZiBuYXN0eSBjb3JydXB0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gYXJlIGFsbG93ZWQgdG8gdG91Y2ggdGhhdCBsaXN0IGR1cmluZyB0aGUgcmVzY2hlZHVsaW5nIHByb2Nlc3MuIEkgbmVlZCB0byBkaWcgaW50byBgaW5vZGVfc2JfbGlzdF9kZWwoaW5vZGUpYCBhbmQgZmluZCBvdXQgZXhhY3RseSB3aG8gaXMgbW9kaWZ5aW5nIGBzX2lub2Rlc2AhIExldCYjMzk7cyBzZWUgd2hvIGlzIG1vZGlmeWluZyBgc19pbm9kZXNgISBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGlzIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gaW4gdGhlIGxvb3AhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA1OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lfc2JfbGlzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9kcm9wX2NhY2hlcy5jPTE5PXN0YXRpYyB2b2lkIGRyb3BfcGFnZWNhY2hlX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKnVudXNlZClcbi0tXG5mcy9kcm9wX2NhY2hlcy5jLTIzLVx0c3Bpbl9sb2NrKFx1MDAyNnNiLVx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrKTtcbmZzL2Ryb3BfY2FjaGVzLmM6MjQ6XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGlub2RlLCBcdTAwMjZzYi1cdTAwM2VzX2lub2RlcywgaV9zYl9saXN0KSB7XG5mcy9kcm9wX2NhY2hlcy5jLTI1LVx0XHRzcGluX2xvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbi0tXG5mcy9nZnMyL29wc19mc3R5cGUuYz0xNzQyPXN0YXRpYyB2b2lkIGdmczJfZXZpY3RfaW5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZ2ZzMi9vcHNfZnN0eXBlLmMtMTc0OS1cdHNwaW5fbG9jayhcdTAwMjZzYi1cdTAwM2VzX2lub2RlX2xpc3RfbG9jayk7XG5mcy9nZnMyL29wc19mc3R5cGUuYzoxNzUwOlx0bGlzdF9mb3JfZWFjaF9lbnRyeShpbm9kZSwgXHUwMDI2c2ItXHUwMDNlc19pbm9kZXMsIGlfc2JfbGlzdCkge1xuZnMvZ2ZzMi9vcHNfZnN0eXBlLmMtMTc1MS1cdFx0c3Bpbl9sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4tLVxuZnMvaW5vZGUuYy0zOS0gKiBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrIHByb3RlY3RzOlxuZnMvaW5vZGUuYzo0MDogKiAgIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19pbm9kZXMsIGlub2RlLVx1MDAzZWlfc2JfbGlzdFxuZnMvaW5vZGUuYy00MS0gKiBiZGktXHUwMDNld2IubGlzdF9sb2NrIHByb3RlY3RzOlxuLS1cbmZzL2lub2RlLmM9NDkzPXZvaWQgaW5vZGVfaW5pdF9vbmNlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvaW5vZGUuYy01MDAtXHRJTklUX0xJU1RfSEVBRChcdTAwMjZpbm9kZS1cdTAwM2VpX2xydSk7XG5mcy9pbm9kZS5jOjUwMTpcdElOSVRfTElTVF9IRUFEKFx1MDAyNmlub2RlLVx1MDAzZWlfc2JfbGlzdCk7XG5mcy9pbm9kZS5jLTUwMi1cdF9fYWRkcmVzc19zcGFjZV9pbml0X29uY2UoXHUwMDI2aW5vZGUtXHUwMDNlaV9kYXRhKTtcbi0tXG5mcy9pbm9kZS5jPTYzND12b2lkIGlub2RlX3NiX2xpc3RfYWRkKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvaW5vZGUuYy02MzgtXHRzcGluX2xvY2soXHUwMDI2c2ItXHUwMDNlc19pbm9kZV9saXN0X2xvY2spO1xuZnMvaW5vZGUuYzo2Mzk6XHRsaXN0X2FkZChcdTAwMjZpbm9kZS1cdTAwM2VpX3NiX2xpc3QsIFx1MDAyNnNiLVx1MDAzZXNfaW5vZGVzKTtcbmZzL2lub2RlLmMtNjQwLVx0c3Bpbl91bmxvY2soXHUwMDI2c2ItXHUwMDNlc19pbm9kZV9saXN0X2xvY2spO1xuLS1cbmZzL2lub2RlLmM9NjQ0PXN0YXRpYyBpbmxpbmUgdm9pZCBpbm9kZV9zYl9saXN0X2RlbChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2lub2RlLmMtNjQ3LVxuZnMvaW5vZGUuYzo2NDg6XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2aW5vZGUtXHUwMDNlaV9zYl9saXN0KSkge1xuZnMvaW5vZGUuYy02NDktXHRcdHNwaW5fbG9jayhcdTAwMjZzYi1cdTAwM2VzX2lub2RlX2xpc3RfbG9jayk7XG5mcy9pbm9kZS5jOjY1MDpcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZpbm9kZS1cdTAwM2VpX3NiX2xpc3QpO1xuZnMvaW5vZGUuYy02NTEtXHRcdHNwaW5fdW5sb2NrKFx1MDAyNnNiLVx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrKTtcbi0tXG5mcy9pbm9kZS5jPTg3OD12b2lkIGV2aWN0X2lub2RlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2lub2RlLmMtODgzLVx0c3Bpbl9sb2NrKFx1MDAyNnNiLVx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrKTtcbmZzL2lub2RlLmM6ODg0Olx0bGlzdF9mb3JfZWFjaF9lbnRyeShpbm9kZSwgXHUwMDI2c2ItXHUwMDNlc19pbm9kZXMsIGlfc2JfbGlzdCkge1xuZnMvaW5vZGUuYy04ODUtXHRcdGlmIChpY291bnRfcmVhZF9vbmNlKGlub2RlKSlcbi0tXG5mcy9pbm9kZS5jPTEyOTY9c3RydWN0IGlub2RlICppbm9kZV9pbnNlcnQ1KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBoYXNodmFsLFxuLS1cbmZzL2lub2RlLmMtMTM0My1cdCAqIEFkZCBpbm9kZSB0byB0aGUgc2IgbGlzdCBpZiBpdCYjMzk7cyBub3QgYWxyZWFkeS4gSXQgaGFzIElfTkVXIGF0IHRoaXNcbmZzL2lub2RlLmM6MTM0NDpcdCAqIHBvaW50LCBzbyBpdCBzaG91bGQgYmUgc2FmZSB0byB0ZXN0IGlfc2JfbGlzdCBsb2NrbGVzc2x5LlxuZnMvaW5vZGUuYy0xMzQ1LVx0ICovXG5mcy9pbm9kZS5jOjEzNDY6XHRpZiAobGlzdF9lbXB0eShcdTAwMjZpbm9kZS1cdTAwM2VpX3NiX2xpc3QpKVxuZnMvaW5vZGUuYy0xMzQ3LVx0XHRpbm9kZV9zYl9saXN0X2FkZChpbm9kZSk7XG4tLVxuZnMvcXVvdGEvZHF1b3QuYz0xMDQ3PXN0YXRpYyBpbnQgYWRkX2RxdW90X3JlZihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSlcbi0tXG5mcy9xdW90YS9kcXVvdC5jLTEwNTUtXHRzcGluX2xvY2soXHUwMDI2c2ItXHUwMDNlc19pbm9kZV9saXN0X2xvY2spO1xuZnMvcXVvdGEvZHF1b3QuYzoxMDU2Olx0bGlzdF9mb3JfZWFjaF9lbnRyeShpbm9kZSwgXHUwMDI2c2ItXHUwMDNlc19pbm9kZXMsIGlfc2JfbGlzdCkge1xuZnMvcXVvdGEvZHF1b3QuYy0xMDU3LVx0XHRzcGluX2xvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbi0tXG5mcy9xdW90YS9kcXVvdC5jPTExMDQ9c3RhdGljIHZvaWQgcmVtb3ZlX2RxdW90X3JlZihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSlcbi0tXG5mcy9xdW90YS9kcXVvdC5jLTExMTEtXHRzcGluX2xvY2soXHUwMDI2c2ItXHUwMDNlc19pbm9kZV9saXN0X2xvY2spO1xuZnMvcXVvdGEvZHF1b3QuYzoxMTEyOlx0bGlzdF9mb3JfZWFjaF9lbnRyeShpbm9kZSwgXHUwMDI2c2ItXHUwMDNlc19pbm9kZXMsIGlfc2JfbGlzdCkge1xuZnMvcXVvdGEvZHF1b3QuYy0xMTEzLVx0XHQvKlxuLS1cbmZzL3N1cGVyLmM9NzQxPXZvaWQgZ2VuZXJpY19zaHV0ZG93bl9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL3N1cGVyLmMtNzg3LVx0XHRcdHNwaW5fbG9jayhcdTAwMjZzYi1cdTAwM2VzX2lub2RlX2xpc3RfbG9jayk7XG5mcy9zdXBlci5jOjc4ODpcdFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGlub2RlLCBcdTAwMjZzYi1cdTAwM2VzX2lub2RlcywgaV9zYl9saXN0KSB7XG5mcy9zdXBlci5jLTc4OS1cdFx0XHRcdGlub2RlLVx1MDAzZWlfb3AgPSBWRlNfUFRSX1BPSVNPTjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyOTcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyMDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFBvdGVudGlhbCBMaXN0IENvcnJ1cHRpb24gaW4gYGV2aWN0X2lub2Rlc2AqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGBldmljdF9pbm9kZXNgIGluIGBmcy9pbm9kZS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBwYXJ0IHdoZXJlIGl0IGl0ZXJhdGVzIHRocm91Z2ggaW5vZGVzIG9uIGEgc3VwZXJibG9jayAoYHNiYCkgYW5kIGV2aWN0cyB0aGVtLiBJIHNlZSBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBpbnZvbHZpbmcgYGlub2RlX3NiX2xpc3RfZGVsKClgIGFuZCB0aGUgZHJvcHBpbmcgb2YgdGhlIGBzX2lub2RlX2xpc3RfbG9ja2AuCgpUaGUgY29kZSBzZXRzIGlub2RlcyB0byBgSV9GUkVFSU5HYCwgYWRkcyB0aGVtIHRvIGEgJiMzNDtkaXNwb3NlJiMzNDsgbGlzdCwgYW5kIHRoZW4sIGlmIGEgYG5lZWRfcmVzY2hlZCgpYCBjYWxsIGlzIG5lZWRlZCwgaXQgcmVsZWFzZXMgdGhlIGBzX2lub2RlX2xpc3RfbG9ja2AsIGNhbGxzIGBjb25kX3Jlc2NoZWQoKWAsIHRoZW4gY2FsbHMgYGRpc3Bvc2VfbGlzdCgmYW1wO2Rpc3Bvc2UpYC4KCkhlcmUmIzM5O3MgdGhlIHByb2JsZW06IGBkaXNwb3NlX2xpc3RgIGNhbGxzIGBldmljdCgpYCBvbiB0aGUgaW5vZGUsIHdoaWNoIGluIHR1cm4gY2FsbHMgYGlub2RlX3NiX2xpc3RfZGVsKClgLiBUaGlzIGZ1bmN0aW9uICphY3F1aXJlcyogdGhlIGBzX2lub2RlX2xpc3RfbG9ja2AgdG8gcmVtb3ZlIHRoZSBpbm9kZSBmcm9tIHRoZSBzdXBlcmJsb2NrJiMzOTtzIGlub2RlIGxpc3QgKGBpX3NiX2xpc3RgKS4KCk5vdywgdGhlIGlzc3VlIGlzIHRoaXM6IEJldHdlZW4gd2hlbiB0aGUgbG9jayBpcyAqcmVsZWFzZWQqIGluIGBldmljdF9pbm9kZXNgIGFuZCB3aGVuIGl0JiMzOTtzIHJlLWFjcXVpcmVkIGluc2lkZSBgaW5vZGVfc2JfbGlzdF9kZWwoKWAsIGFub3RoZXIgdGhyZWFkIGNvdWxkIGJlIGRvaW5nIGFsbCBzb3J0cyBvZiB0aGluZ3Mgd2l0aCBpbm9kZXMuIEl0IGNvdWxkIGJlIGNhbGxpbmcgYGlwdXQoKWAsIHdoaWNoIGNvdWxkIGxlYWQgdG8gY29uY3VycmVudCBjYWxscyB0byBgZXZpY3QoKWAgYW5kIHVsdGltYXRlbHkgYGlub2RlX3NiX2xpc3RfZGVsKClgIG9uIGEgZGlmZmVyZW50IGlub2RlLgoKU3BlY2lmaWNhbGx5LCB3aGlsZSBgZXZpY3RfaW5vZGVzYCBpcyBpdGVyYXRpbmcgd2l0aCBgbGlzdF9uZXh0X2VudHJ5YCwgYnV0IHdoaWxlIGl0IHJlbGVhc2VkIHRoZSBsb2NrIGluIGBpbm9kZWAgYW5kIHNldCBgSV9GUkVFSU5HYCB0byBgQmAsIGFuZCB0aGVuIG90aGVyIHRocmVhZHMgY291bGQgYmUgZnJlZWluZyBgQi0mZ3Q7aV9zYl9saXN0Lm5leHRgLCB3aGljaCBpcyB3aGF0IHRoZSBjdXJyZW50IGl0ZXJhdGlvbiBvZiBgZXZpY3RfaW5vZGVzYCBpcyBhYm91dCB0byBsb29rIGF0LiBUaGlzIG1pZ2h0IGNhdXNlIGBsaXN0X25leHRfZW50cnlgIHRvIGFjY2VzcyBmcmVlZCBtZW1vcnkgb3IgYSBtb2RpZmllZCBsaXN0IGVudHJ5LgoKVGhpcyBtZWFucyB3ZSBjb3VsZCBoYXZlIGEgdXNlLWFmdGVyLWZyZWUgc2l0dWF0aW9uLCBhIGxpc3QgY29ycnVwdGlvbiwgb3Igd29yc2UhIFRoZSBjb21tZW50ICp0cmllcyogdG8gZXhwbGFpbiB0aGUgcmF0aW9uYWxlIGJ1dCBpdCBkb2VzbiYjMzk7dCBjb25zaWRlciAqdGhpcyogcG90ZW50aWFsIGNvbmZsaWN0LiBUaGUgY29kZSBhdHRlbXB0cyB0byBtaXRpZ2F0ZSB0aGlzIHdpdGggYElfRlJFRUlOR2AsIGJ1dCBpdCYjMzk7cyBub3QgZW5vdWdoIHRvIGNvdmVyIHRoZSBkZXNjcmliZWQgY29uZmxpY3QuCgpDcnVjaWFsbHksIGBldmljdF9pbm9kZXNgICppcyogcmVhY2hhYmxlIOKAkyBpdCYjMzk7cyBjYWxsZWQgZHVyaW5nIGZpbGVzeXN0ZW0gdW5tb3VudHMgYW5kIHNodXRkb3duLiBTeXprYWxsZXIgaXMgY2FwYWJsZSBvZiB0cmlnZ2VyaW5nIHRoaXMgY29kZSBwYXRoLgoKT2theSwgbGV0JiMzOTtzIGNvbmZpcm06CgoxLiAgKipXb3J0aEZ1enppbmc9dHJ1ZSoqOiBZZXMhIFRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaW4gYSBjb3JlIFZGUyBmdW5jdGlvbiAoYGV2aWN0X2lub2Rlc2ApIGNhbGxlZCBkdXJpbmcgdW5tb3VudHMuIFRoaXMgaW52b2x2ZXMgbG9naWMgYXJvdW5kIG1lbW9yeSBtYW5hZ2VtZW50LCBsb2NraW5nLCBhbmQgVkZTLCBtYWtpbmcgaXQgcmlwZSBmb3IgZnV6emluZy4KMi4gICoqRm9jdXNTeW1ib2xzKio6IFRoZSBwcmltYXJ5IGZvY3VzIGlzIGBldmljdF9pbm9kZXNgLiBUaGUgcGF0Y2ggZGlyZWN0bHkgbW9kaWZpZXMgdGhpcyBmdW5jdGlvbi4KClRoZXJlZm9yZSwgdGhlIHRhcmdldCBoZXJlIGlzIGZ1enppbmcgYXJvdW5kIGBldmljdF9pbm9kZXNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkaXNwb3NlX2xpc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9pbm9kZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2lub2RlLmM9Nzk5PXN0YXRpYyB2b2lkIGV2aWN0KHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvaW5vZGUuYy04NDktLypcbmZzL2lub2RlLmM6ODUwOiAqIGRpc3Bvc2VfbGlzdCAtIGRpc3Bvc2Ugb2YgdGhlIGNvbnRlbnRzIG9mIGEgbG9jYWwgbGlzdFxuZnMvaW5vZGUuYy04NTEtICogQGhlYWQ6IHRoZSBoZWFkIG9mIHRoZSBsaXN0IHRvIGZyZWVcbi0tXG5mcy9pbm9kZS5jLTg1NS0gKi9cbmZzL2lub2RlLmM6ODU2OnN0YXRpYyB2b2lkIGRpc3Bvc2VfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuZnMvaW5vZGUuYy04NTcte1xuLS1cbmZzL2lub2RlLmM9ODc4PXZvaWQgZXZpY3RfaW5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvaW5vZGUuYy05MDktXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG5mcy9pbm9kZS5jOjkxMDpcdFx0XHRkaXNwb3NlX2xpc3QoXHUwMDI2ZGlzcG9zZSk7XG5mcy9pbm9kZS5jLTkxMS1cdFx0XHRzcGluX2xvY2soXHUwMDI2c2ItXHUwMDNlc19pbm9kZV9saXN0X2xvY2spO1xuLS1cbmZzL2lub2RlLmMtOTE2LVxuZnMvaW5vZGUuYzo5MTc6XHRkaXNwb3NlX2xpc3QoXHUwMDI2ZGlzcG9zZSk7XG5mcy9pbm9kZS5jLTkxOC19XG4tLVxuZnMvaW5vZGUuYz05MzI9c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBpbm9kZV9scnVfaXNvbGF0ZShzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLFxuLS1cbmZzL2lub2RlLmMtMTAwMC0gKiB0byB0cmltIGZyb20gdGhlIExSVS4gSW5vZGVzIHRvIGJlIGZyZWVkIGFyZSBtb3ZlZCB0byBhIHRlbXBvcmFyeSBsaXN0IGFuZFxuZnMvaW5vZGUuYzoxMDAxOiAqIHRoZW4gYXJlIGZyZWVkIG91dHNpZGUgaW5vZGVfbG9jayBieSBkaXNwb3NlX2xpc3QoKS5cbmZzL2lub2RlLmMtMTAwMi0gKi9cbmZzL2lub2RlLmM9MTAwMz1sb25nIHBydW5lX2ljYWNoZV9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuLS1cbmZzL2lub2RlLmMtMTAwOS1cdFx0XHRcdCAgICAgaW5vZGVfbHJ1X2lzb2xhdGUsIFx1MDAyNmZyZWVhYmxlKTtcbmZzL2lub2RlLmM6MTAxMDpcdGRpc3Bvc2VfbGlzdChcdTAwMjZmcmVlYWJsZSk7XG5mcy9pbm9kZS5jLTEwMTEtXHRyZXR1cm4gZnJlZWQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA1OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDY1CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCYjMzk7cyBiZWVuIGNoYW5nZWQgYW5kIHdoZXJlLiBJIHNlZSBgZGlzcG9zZV9saXN0YCBpcyBzdGF0aWMsIHVzZWQgd2l0aGluIGBldmljdF9pbm9kZXNgIGFuZCBgcHJ1bmVfaWNhY2hlX3NiYC4gQnV0LCB0aGUga2V5IG1vZGlmaWNhdGlvbiBpcyBhY3R1YWxseSBpbiBgZXZpY3RfaW5vZGVzYCBpdHNlbGYsIHdoaWNoLCBpbXBvcnRhbnRseSwgaXMgKm5vdCogc3RhdGljLiBJIG5lZWQgdG8gbmFpbCBkb3duIGV4YWN0bHkgd2hpY2ggZnVuY3Rpb25zIGFyZSBhZmZlY3RlZCBmb3IgdGhpcyByZXZpZXcsIHNvIEkmIzM5O20gYXNraW5nIG15c2VsZiwgY2FuIEkgaW5jbHVkZSBgZ2VuZXJpY19zaHV0ZG93bl9zdXBlcmAgYXMgd2VsbCwgb3IgaXMgaXQganVzdCBgZXZpY3RfaW5vZGVzYCB0aGF0JiMzOTtzIHJlbGV2YW50IGhlcmU/IFRoZSBkb2N1bWVudGF0aW9uIHNheXMgdG8gZm9jdXMgb24gZnVuY3Rpb25zIGltcGxlbWVudGluZyB0aGUgYWx0ZXJlZCBsb2dpYyBkaXJlY3RseSwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cy4gVGhhdCBtYWtlcyBpdCBwcmV0dHkgY2xlYXI6IGBldmljdF9pbm9kZXNgIGlzIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UuCgpOb3csIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJIHNob3VsZCBjaGVjayB0aGF0IG5vdGhpbmcgZWxzZSBpbiB0aGUgc3Vycm91bmRpbmcgY29kZSBoYXMgYmVlbiB0b3VjaGVkLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGp1c3QgYGV2aWN0X2lub2Rlc2AuIEdvb2QuIE5leHQsIEkgbmVlZCB0byBjaGVjayBpZiB0aGVzZSBjaGFuZ2VzIGFyZSBjb250aW5nZW50IG9uIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgc2hvdWxkIGNoZWNrIGBmcy9pbm9kZS5jYCBzcGVjaWZpY2FsbHksIGFuZCBzZWUgaWYgdGhlIGNoYW5nZXMgdG8gYGV2aWN0X2lub2Rlc2AgYXJlIGNvbmRpdGlvbmFsIG9uIGFueXRoaW5nLiBMZXQmIzM5O3Mgc2VlIHdoYXQgYGZzL01ha2VmaWxlYCBzYXlzIGFyb3VuZCBgaW5vZGUub2AuIFRoYXQgc2hvdWxkIHRlbGwgbWUgaWYgdGhlcmUgYXJlIGFueSBidWlsZC10aW1lIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA1OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lub2RlXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy85cC9NYWtlZmlsZT0yPW9iai0kKENPTkZJR185UF9GUykgOj0gOXAub1xuLS1cbmZzLzlwL01ha2VmaWxlLTUtXHR2ZnNfc3VwZXIubyBcXFxuZnMvOXAvTWFrZWZpbGU6NjpcdHZmc19pbm9kZS5vIFxcXG5mcy85cC9NYWtlZmlsZS03LVx0dmZzX2lub2RlX2RvdGwubyBcXFxuLS1cbmZzL01ha2VmaWxlPTEwPW9iai15IDo9XHRvcGVuLm8gcmVhZF93cml0ZS5vIGZpbGVfdGFibGUubyBzdXBlci5vIFxcXG5mcy9NYWtlZmlsZS0xMS1cdFx0Y2hhcl9kZXYubyBzdGF0Lm8gZXhlYy5vIHBpcGUubyBuYW1laS5vIGZjbnRsLm8gXFxcbmZzL01ha2VmaWxlOjEyOlx0XHRpb2N0bC5vIHJlYWRkaXIubyBzZWxlY3QubyBkY2FjaGUubyBpbm9kZS5vIFxcXG5mcy9NYWtlZmlsZToxMzpcdFx0YXR0ci5vIGJhZF9pbm9kZS5vIGZpbGUubyBmaWxlc3lzdGVtcy5vIG5hbWVzcGFjZS5vIFxcXG5mcy9NYWtlZmlsZS0xNC1cdFx0c2VxX2ZpbGUubyB4YXR0ci5vIGxpYmZzLm8gZnMtd3JpdGViYWNrLm8gXFxcbi0tXG5mcy9hZGZzL01ha2VmaWxlPTY9b2JqLSQoQ09ORklHX0FERlNfRlMpICYjNDM7PSBhZGZzLm9cbmZzL2FkZnMvTWFrZWZpbGUtNy1cbmZzL2FkZnMvTWFrZWZpbGU6ODphZGZzLW9ianMgOj0gZGlyLm8gZGlyX2YubyBkaXJfZnBsdXMubyBmaWxlLm8gaW5vZGUubyBtYXAubyBzdXBlci5vXG4tLVxuZnMvYWZmcy9NYWtlZmlsZT04PW9iai0kKENPTkZJR19BRkZTX0ZTKSAmIzQzOz0gYWZmcy5vXG5mcy9hZmZzL01ha2VmaWxlLTktXG5mcy9hZmZzL01ha2VmaWxlOjEwOmFmZnMtb2JqcyA6PSBzdXBlci5vIG5hbWVpLm8gaW5vZGUubyBmaWxlLm8gZGlyLm8gYW1pZ2FmZnMubyBiaXRtYXAubyBzeW1saW5rLm9cbi0tXG5mcy9hZnMvTWFrZWZpbGU9Nj1rYWZzLXkgOj0gXFxcbi0tXG5mcy9hZnMvTWFrZWZpbGUtMjItXHRmc19wcm9iZS5vIFxcXG5mcy9hZnMvTWFrZWZpbGU6MjM6XHRpbm9kZS5vIFxcXG5mcy9hZnMvTWFrZWZpbGUtMjQtXHRtYWluLm8gXFxcbi0tXG5mcy9hdXRvZnMvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfQVVUT0ZTX0ZTKSAmIzQzOz0gYXV0b2ZzNC5vXG5mcy9hdXRvZnMvTWFrZWZpbGUtNy1cbmZzL2F1dG9mcy9NYWtlZmlsZTo4OmF1dG9mczQtb2JqcyA6PSBpbml0Lm8gaW5vZGUubyByb290Lm8gc3ltbGluay5vIHdhaXRxLm8gZXhwaXJlLm8gZGV2LWlvY3RsLm9cbi0tXG5mcy9iZWZzL01ha2VmaWxlPTc9Y2NmbGFncy0kKENPTkZJR19CRUZTX0RFQlVHKSAgICAmIzQzOz0gLURERUJVR1xuZnMvYmVmcy9NYWtlZmlsZTo4OmJlZnMtb2JqcyA6PSBkYXRhc3RyZWFtLm8gYnRyZWUubyBzdXBlci5vIGlub2RlLm8gZGVidWcubyBpby5vIGxpbnV4dmZzLm9cbi0tXG5mcy9idHJmcy9NYWtlZmlsZT0yND1idHJmcy15ICYjNDM7PSBzdXBlci5vIGN0cmVlLm8gZXh0ZW50LXRyZWUubyBwcmludC10cmVlLm8gcm9vdC10cmVlLm8gZGlyLWl0ZW0ubyBcXFxuZnMvYnRyZnMvTWFrZWZpbGUtMjUtXHQgICBmaWxlLWl0ZW0ubyBpbm9kZS1pdGVtLm8gZGlzay1pby5vIFxcXG5mcy9idHJmcy9NYWtlZmlsZToyNjpcdCAgIHRyYW5zYWN0aW9uLm8gaW5vZGUubyBmaWxlLm8gZGVmcmFnLm8gXFxcbmZzL2J0cmZzL01ha2VmaWxlLTI3LVx0ICAgZXh0ZW50X21hcC5vIHN5c2ZzLm8gYWNjZXNzb3JzLm8geGF0dHIubyBvcmRlcmVkLWRhdGEubyBcXFxuLS1cbmZzL2J0cmZzL01ha2VmaWxlLTI5LVx0ICAgZXhwb3J0Lm8gdHJlZS1sb2cubyBmcmVlLXNwYWNlLWNhY2hlLm8gemxpYi5vIGx6by5vIHpzdGQubyBcXFxuZnMvYnRyZnMvTWFrZWZpbGU6MzA6XHQgICBjb21wcmVzc2lvbi5vIGRlbGF5ZWQtcmVmLm8gcmVsb2NhdGlvbi5vIGRlbGF5ZWQtaW5vZGUubyBzY3J1Yi5vIFxcXG5mcy9idHJmcy9NYWtlZmlsZS0zMS1cdCAgIGJhY2tyZWYubyB1bGlzdC5vIHFncm91cC5vIHNlbmQubyBkZXYtcmVwbGFjZS5vIHJhaWQ1Ni5vIFxcXG4tLVxuZnMvY2VwaC9NYWtlZmlsZT02PW9iai0kKENPTkZJR19DRVBIX0ZTKSAmIzQzOz0gY2VwaC5vXG5mcy9jZXBoL01ha2VmaWxlLTctXG5mcy9jZXBoL01ha2VmaWxlOjg6Y2VwaC15IDo9IHN1cGVyLm8gaW5vZGUubyBkaXIubyBmaWxlLm8gbG9ja3MubyBhZGRyLm8gaW9jdGwubyBcXFxuZnMvY2VwaC9NYWtlZmlsZS05LVx0ZXhwb3J0Lm8gY2Fwcy5vIHNuYXAubyB4YXR0ci5vIHF1b3RhLm8gaW8ubyBcXFxuLS1cbmZzL2NvZGEvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfQ09EQV9GUykgJiM0Mzs9IGNvZGEub1xuZnMvY29kYS9NYWtlZmlsZS03LVxuZnMvY29kYS9NYWtlZmlsZTo4OmNvZGEtb2JqcyA6PSBwc2Rldi5vIGNhY2hlLm8gY25vZGUubyBpbm9kZS5vIGRpci5vIGZpbGUubyB1cGNhbGwubyBcXFxuZnMvY29kYS9NYWtlZmlsZS05LVx0ICAgICBjb2RhX2xpbnV4Lm8gc3ltbGluay5vIHBpb2N0bC5vXG4tLVxuZnMvY29uZmlnZnMvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfQ09ORklHRlNfRlMpXHQmIzQzOz0gY29uZmlnZnMub1xuZnMvY29uZmlnZnMvTWFrZWZpbGUtNy1cbmZzL2NvbmZpZ2ZzL01ha2VmaWxlOjg6Y29uZmlnZnMtb2Jqc1x0Oj0gaW5vZGUubyBmaWxlLm8gZGlyLm8gc3ltbGluay5vIG1vdW50Lm8gaXRlbS5vXG4tLVxuZnMvY3JhbWZzL01ha2VmaWxlPTY9b2JqLSQoQ09ORklHX0NSQU1GUykgJiM0Mzs9IGNyYW1mcy5vXG5mcy9jcmFtZnMvTWFrZWZpbGUtNy1cbmZzL2NyYW1mcy9NYWtlZmlsZTo4OmNyYW1mcy1vYmpzIDo9IGlub2RlLm8gdW5jb21wcmVzcy5vXG4tLVxuZnMvZGVidWdmcy9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvZGVidWdmcy9NYWtlZmlsZToyOmRlYnVnZnMtb2Jqc1x0Oj0gaW5vZGUubyBmaWxlLm9cbmZzL2RlYnVnZnMvTWFrZWZpbGUtMy1cbi0tXG5mcy9kZXZwdHMvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfVU5JWDk4X1BUWVMpXHRcdCYjNDM7PSBkZXZwdHMub1xuZnMvZGV2cHRzL01ha2VmaWxlLTctXG5mcy9kZXZwdHMvTWFrZWZpbGU6ODpkZXZwdHMtJChDT05GSUdfVU5JWDk4X1BUWVMpXHRcdDo9IGlub2RlLm9cbi0tXG5mcy9lY3J5cHRmcy9NYWtlZmlsZT02PW9iai0kKENPTkZJR19FQ1JZUFRfRlMpICYjNDM7PSBlY3J5cHRmcy5vXG5mcy9lY3J5cHRmcy9NYWtlZmlsZS03LVxuZnMvZWNyeXB0ZnMvTWFrZWZpbGU6ODplY3J5cHRmcy15IDo9IGRlbnRyeS5vIGZpbGUubyBpbm9kZS5vIG1haW4ubyBzdXBlci5vIG1tYXAubyByZWFkX3dyaXRlLm8gXFxcbmZzL2VjcnlwdGZzL01ha2VmaWxlLTktXHQgICAgICBjcnlwdG8ubyBrZXlzdG9yZS5vIGt0aHJlYWQubyBkZWJ1Zy5vXG4tLVxuZnMvZWZpdmFyZnMvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfRUZJVkFSX0ZTKVx0XHQmIzQzOz0gZWZpdmFyZnMub1xuZnMvZWZpdmFyZnMvTWFrZWZpbGUtNy1cbmZzL2VmaXZhcmZzL01ha2VmaWxlOjg6ZWZpdmFyZnMtb2Jqc1x0XHRcdDo9IGlub2RlLm8gZmlsZS5vIHN1cGVyLm8gdmFycy5vXG4tLVxuZnMvZXJvZnMvTWFrZWZpbGU9Mz1vYmotJChDT05GSUdfRVJPRlNfRlMpICYjNDM7PSBlcm9mcy5vXG5mcy9lcm9mcy9NYWtlZmlsZTo0OmVyb2ZzLW9ianMgOj0gc3VwZXIubyBpbm9kZS5vIGRhdGEubyBuYW1laS5vIGRpci5vIHN5c2ZzLm9cbmZzL2Vyb2ZzL01ha2VmaWxlLTUtZXJvZnMtJChDT05GSUdfRVJPRlNfRlNfWEFUVFIpICYjNDM7PSB4YXR0ci5vXG4tLVxuZnMvZXhmYXQvTWFrZWZpbGU9NT1vYmotJChDT05GSUdfRVhGQVRfRlMpICYjNDM7PSBleGZhdC5vXG5mcy9leGZhdC9NYWtlZmlsZS02LVxuZnMvZXhmYXQvTWFrZWZpbGU6NzpleGZhdC15XHQ6PSBpbm9kZS5vIG5hbWVpLm8gZGlyLm8gc3VwZXIubyBmYXRlbnQubyBjYWNoZS5vIG5scy5vIG1pc2MubyBcXFxuZnMvZXhmYXQvTWFrZWZpbGUtOC1cdCAgIGZpbGUubyBiYWxsb2MubyBpb21hcC5vXG4tLVxuZnMvZXh0Mi9NYWtlZmlsZT02PW9iai0kKENPTkZJR19FWFQyX0ZTKSAmIzQzOz0gZXh0Mi5vXG5mcy9leHQyL01ha2VmaWxlLTctXG5mcy9leHQyL01ha2VmaWxlOjg6ZXh0Mi15IDo9IGJhbGxvYy5vIGRpci5vIGZpbGUubyBpYWxsb2MubyBpbm9kZS5vIFxcXG5mcy9leHQyL01ha2VmaWxlLTktXHQgIGlvY3RsLm8gbmFtZWkubyBzdXBlci5vIHN5bWxpbmsubyB0cmFjZS5vXG4tLVxuZnMvZXh0NC9NYWtlZmlsZT04PWV4dDQteVx0Oj0gYmFsbG9jLm8gYml0bWFwLm8gYmxvY2tfdmFsaWRpdHkubyBkaXIubyBleHQ0X2piZDIubyBleHRlbnRzLm8gXFxcbmZzL2V4dDQvTWFrZWZpbGUtOS1cdFx0ZXh0ZW50c19zdGF0dXMubyBmaWxlLm8gZnNtYXAubyBmc3luYy5vIGhhc2gubyBpYWxsb2MubyBcXFxuZnMvZXh0NC9NYWtlZmlsZToxMDpcdFx0aW5kaXJlY3QubyBpbmxpbmUubyBpbm9kZS5vIGlvY3RsLm8gbWJhbGxvYy5vIG1pZ3JhdGUubyBcXFxuZnMvZXh0NC9NYWtlZmlsZS0xMS1cdFx0bW1wLm8gbW92ZV9leHRlbnQubyBuYW1laS5vIHBhZ2UtaW8ubyByZWFkcGFnZS5vIHJlc2l6ZS5vIFxcXG4tLVxuZnMvZjJmcy9NYWtlZmlsZT0yPW9iai0kKENPTkZJR19GMkZTX0ZTKSAmIzQzOz0gZjJmcy5vXG5mcy9mMmZzL01ha2VmaWxlLTMtXG5mcy9mMmZzL01ha2VmaWxlOjQ6ZjJmcy15XHRcdDo9IGRpci5vIGZpbGUubyBpbm9kZS5vIG5hbWVpLm8gaGFzaC5vIHN1cGVyLm8gaW5saW5lLm9cbmZzL2YyZnMvTWFrZWZpbGUtNS1mMmZzLXlcdFx0JiM0Mzs9IGNoZWNrcG9pbnQubyBnYy5vIGRhdGEubyBub2RlLm8gc2VnbWVudC5vIHJlY292ZXJ5Lm9cbi0tXG5mcy9mYXQvTWFrZWZpbGU9OD1vYmotJChDT05GSUdfTVNET1NfRlMpICYjNDM7PSBtc2Rvcy5vXG5mcy9mYXQvTWFrZWZpbGUtOS1cbmZzL2ZhdC9NYWtlZmlsZToxMDpmYXQteSA6PSBjYWNoZS5vIGRpci5vIGZhdGVudC5vIGZpbGUubyBpbm9kZS5vIG1pc2MubyBuZnMub1xuZnMvZmF0L01ha2VmaWxlLTExLXZmYXQteSA6PSBuYW1laV92ZmF0Lm9cbi0tXG5mcy9mdXNlL01ha2VmaWxlPTEzPWZ1c2UteSA6PSB0cmFjZS5vXHQjIHB1dCB0cmFjZS5vIGZpcnN0IHNvIHdlIHNlZSBmdHJhY2UgZXJyb3JzIHNvb25lclxuZnMvZnVzZS9NYWtlZmlsZToxNDpmdXNlLXkgJiM0Mzs9IGRldi5vIGRpci5vIGZpbGUubyBpbm9kZS5vIGNvbnRyb2wubyB4YXR0ci5vIGFjbC5vIHJlYWRkaXIubyBpb2N0bC5vIHJlcV90aW1lb3V0Lm8gcmVxLm9cbmZzL2Z1c2UvTWFrZWZpbGUtMTUtZnVzZS15ICYjNDM7PSBwb2xsLm8gbm90aWZ5Lm9cbi0tXG5mcy9nZnMyL01ha2VmaWxlPTQ9Z2ZzMi15IDo9IGFjbC5vIGJtYXAubyBkaXIubyB4YXR0ci5vIGdsb2NrLm8gXFxcbi0tXG5mcy9nZnMyL01ha2VmaWxlLTYtXHRhb3BzLm8gZGVudHJ5Lm8gZXhwb3J0Lm8gZmlsZS5vIFxcXG5mcy9nZnMyL01ha2VmaWxlOjc6XHRvcHNfZnN0eXBlLm8gaW5vZGUubyBxdW90YS5vIFxcXG5mcy9nZnMyL01ha2VmaWxlLTgtXHRyZWNvdmVyeS5vIHJncnAubyBzdXBlci5vIHN5cy5vIHRyYW5zLm8gdXRpbC5vXG4tLVxuZnMvaGZzL01ha2VmaWxlPTg9aGZzLW9ianMgOj0gYml0bWFwLm8gYmZpbmQubyBibm9kZS5vIGJyZWMubyBidHJlZS5vIFxcXG5mcy9oZnMvTWFrZWZpbGU6OTpcdCAgICBjYXRhbG9nLm8gZGlyLm8gZXh0ZW50Lm8gaW5vZGUubyBhdHRyLm8gbWRiLm8gXFxcbmZzL2hmcy9NYWtlZmlsZS0xMC0gICAgICAgICAgICBwYXJ0X3RibC5vIHN0cmluZy5vIHN1cGVyLm8gc3lzZGVwLm8gdHJhbnMub1xuLS1cbmZzL2hmc3BsdXMvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfSEZTUExVU19GUykgJiM0Mzs9IGhmc3BsdXMub1xuZnMvaGZzcGx1cy9NYWtlZmlsZS03LVxuZnMvaGZzcGx1cy9NYWtlZmlsZTo4Omhmc3BsdXMtb2JqcyA6PSBzdXBlci5vIG9wdGlvbnMubyBpbm9kZS5vIGlvY3RsLm8gZXh0ZW50cy5vIGNhdGFsb2cubyBkaXIubyBidHJlZS5vIFxcXG5mcy9oZnNwbHVzL01ha2VmaWxlLTktXHRcdGJub2RlLm8gYnJlYy5vIGJmaW5kLm8gdGFibGVzLm8gdW5pY29kZS5vIHdyYXBwZXIubyBiaXRtYXAubyBwYXJ0X3RibC5vIFxcXG4tLVxuZnMvaHBmcy9NYWtlZmlsZT04PWhwZnMtb2JqcyA6PSBhbGxvYy5vIGFub2RlLm8gYnVmZmVyLm8gZGVudHJ5Lm8gZGlyLm8gZG5vZGUubyBlYS5vIGZpbGUubyBcXFxuZnMvaHBmcy9NYWtlZmlsZTo5Olx0ICAgICBpbm9kZS5vIG1hcC5vIG5hbWUubyBuYW1laS5vIHN1cGVyLm9cbi0tXG5mcy9odWdldGxiZnMvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfSFVHRVRMQkZTKSAmIzQzOz0gaHVnZXRsYmZzLm9cbmZzL2h1Z2V0bGJmcy9NYWtlZmlsZS03LVxuZnMvaHVnZXRsYmZzL01ha2VmaWxlOjg6aHVnZXRsYmZzLW9ianMgOj0gaW5vZGUub1xuLS1cbmZzL2lzb2ZzL01ha2VmaWxlPTY9b2JqLSQoQ09ORklHX0lTTzk2NjBfRlMpICYjNDM7PSBpc29mcy5vXG5mcy9pc29mcy9NYWtlZmlsZS03LVxuZnMvaXNvZnMvTWFrZWZpbGU6ODppc29mcy15IFx0XHQ6PSBuYW1laS5vIGlub2RlLm8gZGlyLm8gdXRpbC5vIHJvY2subyBleHBvcnQub1xuZnMvaXNvZnMvTWFrZWZpbGUtOS1pc29mcy0kKENPTkZJR19KT0xJRVQpXHQmIzQzOz0gam9saWV0Lm9cbi0tXG5mcy9qZmZzMi9NYWtlZmlsZT05PWpmZnMyLXlcdDo9IGNvbXByLm8gZGlyLm8gZmlsZS5vIGlvY3RsLm8gbm9kZWxpc3QubyBtYWxsb2Mub1xuZnMvamZmczIvTWFrZWZpbGU6MTA6amZmczIteVx0JiM0Mzs9IHJlYWQubyBub2RlbWdtdC5vIHJlYWRpbm9kZS5vIHdyaXRlLm8gc2Nhbi5vIGdjLm9cbmZzL2pmZnMyL01ha2VmaWxlLTExLWpmZnMyLXlcdCYjNDM7PSBzeW1saW5rLm8gYnVpbGQubyBlcmFzZS5vIGJhY2tncm91bmQubyBmcy5vIHdyaXRldi5vXG4tLVxuZnMvamZzL01ha2VmaWxlPTY9b2JqLSQoQ09ORklHX0pGU19GUykgJiM0Mzs9IGpmcy5vXG5mcy9qZnMvTWFrZWZpbGUtNy1cbmZzL2pmcy9NYWtlZmlsZTo4Ompmcy15ICAgIDo9IHN1cGVyLm8gZmlsZS5vIGlub2RlLm8gbmFtZWkubyBqZnNfbW91bnQubyBqZnNfdW1vdW50Lm8gXFxcbmZzL2pmcy9NYWtlZmlsZS05LVx0ICAgIGpmc194dHJlZS5vIGpmc19pbWFwLm8gamZzX2RlYnVnLm8gamZzX2RtYXAubyBcXFxuZnMvamZzL01ha2VmaWxlOjEwOlx0ICAgIGpmc191bmljb2RlLm8gamZzX2R0cmVlLm8gamZzX2lub2RlLm8gamZzX2Rpc2NhcmQubyBcXFxuZnMvamZzL01ha2VmaWxlLTExLVx0ICAgIGpmc19leHRlbnQubyBzeW1saW5rLm8gamZzX21ldGFwYWdlLm8gXFxcbi0tXG5mcy9rZXJuZnMvTWFrZWZpbGUtNS1cbmZzL2tlcm5mcy9NYWtlZmlsZTo2Om9iai15XHRcdDo9IG1vdW50Lm8gaW5vZGUubyBkaXIubyBmaWxlLm8gc3ltbGluay5vXG4tLVxuZnMvbWluaXgvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfTUlOSVhfRlMpICYjNDM7PSBtaW5peC5vXG5mcy9taW5peC9NYWtlZmlsZS03LVxuZnMvbWluaXgvTWFrZWZpbGU6ODptaW5peC1vYmpzIDo9IGJpdG1hcC5vIGl0cmVlX3YxLm8gaXRyZWVfdjIubyBuYW1laS5vIGlub2RlLm8gZmlsZS5vIGRpci5vXG4tLVxuZnMvbmZzL01ha2VmaWxlPTg9Q0ZMQUdTX25mc3RyYWNlLm8gJiM0Mzs9IC1JJChzcmMpXG5mcy9uZnMvTWFrZWZpbGU6OTpuZnMteSBcdFx0XHQ6PSBjbGllbnQubyBkaXIubyBmaWxlLm8gZ2V0cm9vdC5vIGlub2RlLm8gc3VwZXIubyBcXFxuZnMvbmZzL01ha2VmaWxlLTEwLVx0XHRcdCAgIGlvLm8gZGlyZWN0Lm8gcGFnZWxpc3QubyByZWFkLm8gc3ltbGluay5vIHVubGluay5vIFxcXG4tLVxuZnMvbmlsZnMyL01ha2VmaWxlPTI9b2JqLSQoQ09ORklHX05JTEZTMl9GUykgJiM0Mzs9IG5pbGZzMi5vXG5mcy9uaWxmczIvTWFrZWZpbGU6MzpuaWxmczIteSA6PSBpbm9kZS5vIGZpbGUubyBkaXIubyBzdXBlci5vIG5hbWVpLm8gcGFnZS5vIG1kdC5vIFxcXG5mcy9uaWxmczIvTWFrZWZpbGUtNC1cdGJ0bm9kZS5vIGJtYXAubyBidHJlZS5vIGRpcmVjdC5vIGRhdC5vIHJlY292ZXJ5Lm8gXFxcbmZzL25pbGZzMi9NYWtlZmlsZS01LVx0dGhlX25pbGZzLm8gc2VnYnVmLm8gc2VnbWVudC5vIGNwZmlsZS5vIHN1ZmlsZS5vIFxcXG5mcy9uaWxmczIvTWFrZWZpbGU6NjpcdGlmaWxlLm8gYWxsb2MubyBnY2lub2RlLm8gaW9jdGwubyBzeXNmcy5vXG4tLVxuZnMvbnRmcy9NYWtlZmlsZT0zPW9iai0kKENPTkZJR19OVEZTX0ZTKSAmIzQzOz0gbnRmcy5vXG5mcy9udGZzL01ha2VmaWxlLTQtXG5mcy9udGZzL01ha2VmaWxlOjU6bnRmcy15IDo9IGFvcHMubyBhdHRyaWIubyBjb2xsYXRlLm8gZGlyLm8gZmlsZS5vIGluZGV4Lm8gaW5vZGUubyBcXFxuZnMvbnRmcy9NYWtlZmlsZS02LVx0ICBtZnQubyBtc3QubyBuYW1laS5vIHJ1bmxpc3QubyBzdXBlci5vIHVuaXN0ci5vIGF0dHJsaXN0Lm8gZWEubyBcXFxuLS1cbmZzL250ZnMzL01ha2VmaWxlPTMzPW50ZnMzLXkgOj1cdGF0dHJpYi5vIFxcXG4tLVxuZnMvbnRmczMvTWFrZWZpbGUtNDEtXHRcdGZzbG9nLm8gXFxcbmZzL250ZnMzL01ha2VmaWxlOjQyOlx0XHRpbm9kZS5vIFxcXG5mcy9udGZzMy9NYWtlZmlsZS00My1cdFx0aW5kZXgubyBcXFxuLS1cbmZzL29jZnMyL01ha2VmaWxlPTExPW9jZnMyLW9ianMgOj0gXFxcbi0tXG5mcy9vY2ZzMi9NYWtlZmlsZS0yMi1cdGhlYXJ0YmVhdC5vIFx0XHRcXFxuZnMvb2NmczIvTWFrZWZpbGU6MjM6XHRpbm9kZS5vIFx0XHRcXFxuZnMvb2NmczIvTWFrZWZpbGUtMjQtXHRpb2N0bC5vIFx0XHRcXFxuLS1cbmZzL29tZnMvTWFrZWZpbGU9Mz1vYmotJChDT05GSUdfT01GU19GUykgJiM0Mzs9IG9tZnMub1xuZnMvb21mcy9NYWtlZmlsZS00LVxuZnMvb21mcy9NYWtlZmlsZTo1Om9tZnMteSA6PSBiaXRtYXAubyBkaXIubyBmaWxlLm8gaW5vZGUub1xuLS1cbmZzL29wZW5wcm9tZnMvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfU1VOX09QRU5QUk9NRlMpICYjNDM7PSBvcGVucHJvbWZzLm9cbmZzL29wZW5wcm9tZnMvTWFrZWZpbGUtNy1cbmZzL29wZW5wcm9tZnMvTWFrZWZpbGU6ODpvcGVucHJvbWZzLW9ianMgOj0gaW5vZGUub1xuLS1cbmZzL29yYW5nZWZzL01ha2VmaWxlPTg9b3JhbmdlZnMtb2JqcyA6PSBhY2wubyBmaWxlLm8gb3JhbmdlZnMtY2FjaGUubyBvcmFuZ2Vmcy11dGlscy5vIHhhdHRyLm8gXFxcbmZzL29yYW5nZWZzL01ha2VmaWxlOjk6XHRcdCBkY2FjaGUubyBpbm9kZS5vIG9yYW5nZWZzLXN5c2ZzLm8gb3JhbmdlZnMtbW9kLm8gc3VwZXIubyBcXFxuZnMvb3JhbmdlZnMvTWFrZWZpbGUtMTAtXHRcdCBkZXZvcmFuZ2Vmcy1yZXEubyBuYW1laS5vIHN5bWxpbmsubyBkaXIubyBvcmFuZ2Vmcy1idWZtYXAubyBcXFxuLS1cbmZzL292ZXJsYXlmcy9NYWtlZmlsZT02PW9iai0kKENPTkZJR19PVkVSTEFZX0ZTKSAmIzQzOz0gb3ZlcmxheS5vXG5mcy9vdmVybGF5ZnMvTWFrZWZpbGUtNy1cbmZzL292ZXJsYXlmcy9NYWtlZmlsZTo4Om92ZXJsYXktb2JqcyA6PSBzdXBlci5vIG5hbWVpLm8gdXRpbC5vIGlub2RlLm8gZmlsZS5vIGRpci5vIHJlYWRkaXIubyBcXFxuZnMvb3ZlcmxheWZzL01ha2VmaWxlLTktXHRcdGNvcHlfdXAubyBleHBvcnQubyBwYXJhbXMubyB4YXR0cnMub1xuLS1cbmZzL3Byb2MvTWFrZWZpbGU9MTA9cHJvYy0kKENPTkZJR19NTVUpXHQ6PSB0YXNrX21tdS5vXG5mcy9wcm9jL01ha2VmaWxlLTExLVxuZnMvcHJvYy9NYWtlZmlsZToxMjpwcm9jLXkgICAgICAgJiM0Mzs9IGlub2RlLm8gcm9vdC5vIGJhc2UubyBnZW5lcmljLm8gYXJyYXkubyBcXFxuZnMvcHJvYy9NYWtlZmlsZS0xMy1cdFx0ZmQub1xuLS1cbmZzL3BzdG9yZS9NYWtlZmlsZT02PW9iai0kKENPTkZJR19QU1RPUkUpICYjNDM7PSBwc3RvcmUub1xuZnMvcHN0b3JlL01ha2VmaWxlLTctXG5mcy9wc3RvcmUvTWFrZWZpbGU6ODpwc3RvcmUtb2JqcyAmIzQzOz0gaW5vZGUubyBwbGF0Zm9ybS5vXG5mcy9wc3RvcmUvTWFrZWZpbGUtOS1wc3RvcmUtJChDT05GSUdfUFNUT1JFX0ZUUkFDRSlcdCYjNDM7PSBmdHJhY2Uub1xuLS1cbmZzL3FueDQvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfUU5YNEZTX0ZTKSAmIzQzOz0gcW54NC5vXG5mcy9xbng0L01ha2VmaWxlLTctXG5mcy9xbng0L01ha2VmaWxlOjg6cW54NC1vYmpzIDo9IGlub2RlLm8gZGlyLm8gbmFtZWkubyBiaXRtYXAub1xuLS1cbmZzL3FueDYvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfUU5YNkZTX0ZTKSAmIzQzOz0gcW54Ni5vXG5mcy9xbng2L01ha2VmaWxlLTctXG5mcy9xbng2L01ha2VmaWxlOjg6cW54Ni1vYmpzIDo9IGlub2RlLm8gZGlyLm8gbmFtZWkubyBzdXBlcl9tbWkub1xuZnMvcW54Ni9NYWtlZmlsZS05LWNjZmxhZ3MtJChDT05GSUdfUU5YNkZTX0RFQlVHKVx0JiM0Mzs9IC1EREVCVUdcbi0tXG5mcy9yYW1mcy9NYWtlZmlsZT05PWZpbGUtbW11LSQoQ09ORklHX01NVSkgOj0gZmlsZS1tbXUub1xuZnMvcmFtZnMvTWFrZWZpbGU6MTA6cmFtZnMtb2JqcyAmIzQzOz0gaW5vZGUubyAkKGZpbGUtbW11LXkpXG4tLVxuZnMvc21iL2NsaWVudC9NYWtlZmlsZT04PWNpZnMteSA6PSB0cmFjZS5vIGNpZnNmcy5vIGNpZnNfZGVidWcubyBjb25uZWN0Lm8gZGlyLm8gZmlsZS5vIFxcXG5mcy9zbWIvY2xpZW50L01ha2VmaWxlOjk6XHQgIGlub2RlLm8gbGluay5vIG1pc2MubyBuZXRtaXNjLm8gc21iZW5jcnlwdC5vIHRyYW5zcG9ydC5vIFxcXG5mcy9zbWIvY2xpZW50L01ha2VmaWxlLTEwLVx0ICBjYWNoZWRfZGlyLm8gY2lmc191bmljb2RlLm8gY2lmc2VuY3J5cHQubyBcXFxuLS1cbmZzL3NtYi9jbGllbnQvTWFrZWZpbGUtMTItXHQgIHNtYjJvcHMubyBzbWIybWFwZXJyb3IubyBzbWIydHJhbnNwb3J0Lm8gXFxcbmZzL3NtYi9jbGllbnQvTWFrZWZpbGU6MTM6XHQgIHNtYjJtaXNjLm8gc21iMnBkdS5vIHNtYjJpbm9kZS5vIHNtYjJmaWxlLm8gY2lmc2FjbC5vIGZzX2NvbnRleHQubyBcXFxuZnMvc21iL2NsaWVudC9NYWtlZmlsZS0xNC1cdCAgZG5zX3Jlc29sdmUubyBjaWZzX3NwbmVnb19uZWd0b2tlbmluaXQuYXNuMS5vIGFzbjEubyBcXFxuLS1cbmZzL3NxdWFzaGZzL01ha2VmaWxlPTY9b2JqLSQoQ09ORklHX1NRVUFTSEZTKSAmIzQzOz0gc3F1YXNoZnMub1xuZnMvc3F1YXNoZnMvTWFrZWZpbGU6NzpzcXVhc2hmcy15ICYjNDM7PSBibG9jay5vIGNhY2hlLm8gZGlyLm8gZXhwb3J0Lm8gZmlsZS5vIGZyYWdtZW50Lm8gaWQubyBpbm9kZS5vXG5mcy9zcXVhc2hmcy9NYWtlZmlsZS04LXNxdWFzaGZzLXkgJiM0Mzs9IG5hbWVpLm8gc3VwZXIubyBzeW1saW5rLm8gZGVjb21wcmVzc29yLm8gcGFnZV9hY3Rvci5vXG4tLVxuZnMvdHJhY2Vmcy9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvdHJhY2Vmcy9NYWtlZmlsZToyOnRyYWNlZnMtb2Jqc1x0Oj0gaW5vZGUub1xuZnMvdHJhY2Vmcy9NYWtlZmlsZTozOnRyYWNlZnMtb2Jqc1x0JiM0Mzs9IGV2ZW50X2lub2RlLm9cbmZzL3RyYWNlZnMvTWFrZWZpbGUtNC1cbi0tXG5mcy91ZGYvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfVURGX0ZTKSAmIzQzOz0gdWRmLm9cbmZzL3VkZi9NYWtlZmlsZS03LVxuZnMvdWRmL01ha2VmaWxlOjg6dWRmLW9ianMgICAgIDo9IGJhbGxvYy5vIGRpci5vIGZpbGUubyBpYWxsb2MubyBpbm9kZS5vIGxvd2xldmVsLm8gbmFtZWkubyBcXFxuZnMvdWRmL01ha2VmaWxlLTktXHRcdHBhcnRpdGlvbi5vIHN1cGVyLm8gdHJ1bmNhdGUubyBzeW1saW5rLm8gXFxcbi0tXG5mcy91ZnMvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfVUZTX0ZTKSAmIzQzOz0gdWZzLm9cbmZzL3Vmcy9NYWtlZmlsZS03LVxuZnMvdWZzL01ha2VmaWxlOjg6dWZzLW9ianMgOj0gYmFsbG9jLm8gY3lsaW5kZXIubyBkaXIubyBmaWxlLm8gaWFsbG9jLm8gaW5vZGUubyBcXFxuZnMvdWZzL01ha2VmaWxlLTktXHQgICAgbmFtZWkubyBzdXBlci5vIHV0aWwub1xuLS1cbmZzL3hmcy9NYWtlZmlsZT0xNj14ZnMteVx0XHRcdFx0JiM0Mzs9ICQoYWRkcHJlZml4IGxpYnhmcy8sIFxcXG4tLVxuZnMveGZzL01ha2VmaWxlLTU3LVx0XHRcdFx0ICAgeGZzX3N5bWxpbmtfcmVtb3RlLm8gXFxcbmZzL3hmcy9NYWtlZmlsZTo1ODpcdFx0XHRcdCAgIHhmc190cmFuc19pbm9kZS5vIFxcXG5mcy94ZnMvTWFrZWZpbGUtNTktXHRcdFx0XHQgICB4ZnNfdHJhbnNfcmVzdi5vIFxcXG4tLVxuZnMveGZzL01ha2VmaWxlPTcxPXhmcy15XHRcdFx0XHQmIzQzOz0geGZzX2FvcHMubyBcXFxuLS1cbmZzL3hmcy9NYWtlZmlsZS05Ni1cdFx0XHRcdCAgIHhmc19pb3BzLm8gXFxcbmZzL3hmcy9NYWtlZmlsZTo5NzpcdFx0XHRcdCAgIHhmc19pbm9kZS5vIFxcXG5mcy94ZnMvTWFrZWZpbGUtOTgtXHRcdFx0XHQgICB4ZnNfaXRhYmxlLm8gXFxcbi0tXG5mcy94ZnMvTWFrZWZpbGU9MTY5PXhmcy15XHRcdFx0XHQmIzQzOz0gJChhZGRwcmVmaXggc2NydWIvLCBcXFxuLS1cbmZzL3hmcy9NYWtlZmlsZS0xODQtXHRcdFx0XHQgICBpYWxsb2MubyBcXFxuZnMveGZzL01ha2VmaWxlOjE4NTpcdFx0XHRcdCAgIGlub2RlLm8gXFxcbmZzL3hmcy9NYWtlZmlsZS0xODYtXHRcdFx0XHQgICBpc2Nhbi5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA1OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNDU4CgkJCQkJCQlvdXRwdXQ6IDExNQoJCQkJCQkJdGhvdWdodHM6IDI5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgZnMvaW5vZGUuY2AgQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIG1vZGlmaWNhdGlvbiB0byBgZnMvaW5vZGUuY2AsIHNwZWNpZmljYWxseSB0aGUgYGV2aWN0X2lub2RlcygpYCBmdW5jdGlvbiwgd2hpY2ggaXMsIG9mIGNvdXJzZSwgY29tcGlsZWQgaW50byBldmVyeSBMaW51eCBrZXJuZWwuIE5vIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGhlcmUsIGl0JiMzOTtzIGFsd2F5cyBpbmNsdWRlZCBiYXNlZCBvbiB0aGUgYGZzL01ha2VmaWxlYCBkZWZpbml0aW9uLiBHb29kLCB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzLiBObyBzcGVjaWFsIGNvbmZpZ3VyYXRpb24gaXMgbmVlZGVkIHRvIHRyaWdnZXIgdGhlIGNoYW5nZXMuCgpNeSBpbW1lZGlhdGUgY29uY2VybnMgYXJlIHRyaWdnZXJlZDogV29ydGhGdXp6aW5nIGlzIHNldCB0byB0cnVlLCB3aGljaCBpbW1lZGlhdGVseSBncmFicyBteSBhdHRlbnRpb24uIFRoZSBjb21taXQgYWx0ZXJzIGxvY2tpbmcgYW5kIGxpc3QgaGFuZGxpbmcgd2l0aGluIGBldmljdF9pbm9kZXMoKWAsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIHN1cGVyYmxvY2sgaW5vZGUgZXZpY3Rpb24gbG9vcC4gSXQmIzM5O3MgbWVzc2luZyB3aXRoIGBzYi0mZ3Q7c19pbm9kZV9saXN0X2xvY2tgLCBhbHRlcmluZyBpdHMgdXNlIGR1cmluZyByZXNjaGVkdWxpbmcgd2l0aCBgY29uZF9yZXNjaGVkKClgLiBJbnN0ZWFkIG9mIHJlc3RhcnRpbmcgdGhlIHRyYXZlcnNhbCBhZnRlciBkaXNwb3Npbmcgb2YgaW5vZGVzLCB0aGUgY29tbWl0IGlzIGRyb3BwaW5nIGFuZCByZS1hY3F1aXJpbmcgdGhlIGxvY2sgKm1pZC10cmF2ZXJzYWwqIHdoaWxlIGtlZXBpbmcgdGhlIGN1cnJlbnQgaW5vZGUgb3V0IG9mIGBkaXNwb3NlYC4gVGhpcyBpcyBhIGJpZyByZWQgZmxhZyBmb3IgYW55IGV4cGVydC4KClRoaXMga2luZCBvZiBjaGFuZ2UgZGlyZWN0bHkgYWZmZWN0cyBjb3JlIFZGUyBiZWhhdmlvciwgcGFydGljdWxhcmx5IGR1cmluZyBmaWxlc3lzdGVtIHVubW91bnRzIGFuZCBzaHV0ZG93bi4gVGhhdCBtZWFucyB0aGlzIGhhcyB0aGUgcG90ZW50aWFsIHRvIGV4cG9zZSBsaXN0IGNvcnJ1cHRpb24sIHJhY2UgY29uZGl0aW9ucywgb3IgZXZlbiBVc2UtQWZ0ZXItRnJlZSB2dWxuZXJhYmlsaXRpZXMgZHVyaW5nIGNvbmN1cnJlbnQgaW5vZGUgb3BlcmF0aW9ucy4gVGhhdCYjMzk7cyBwcmVjaXNlbHkgdGhlIGtpbmQgb2YgdGhpbmcgdGhhdCBjYW4gbGVhZCB0byBzaWduaWZpY2FudCBzdGFiaWxpdHkgaXNzdWVzLgoKSSYjMzk7bSBmb2N1c2VkIG9uICYjMzQ7ZXZpY3RfaW5vZGVzJiMzNDsg4oCTIHRoZSByZWFzb25pbmcgaGlnaGxpZ2h0cyBpdCwgYW5kIHRoYXQmIzM5O3MgcHJlY2lzZWx5IHRoZSBmdW5jdGlvbiB3aGVyZSB0aGUgY29yZSBsb2dpYyB3YXMgY2hhbmdlZC4gVGhlIGludGVybmFsIGBkaXNwb3NlX2xpc3RgIHZhcmlhYmxlIGlzIHN0YXRpYyBhbmQgdW5leHBvcnRlZCwgc28gdGhhdCYjMzk7cyBub3Qgd2hhdCBJJiMzOTttIGludGVyZXN0ZWQgaW4gaGVyZS4gYGdlbmVyaWNfc2h1dGRvd25fc3VwZXJgIGlzIGFuIGVudHJ5IHBvaW50LCB3aGljaCBpcyB1c2VmdWwsIGJ1dCB0aGUga2V5IGlzIHRoYXQgYGV2aWN0X2lub2Rlc2AgaXRzZWxmIGlzIGEgbm9uLXN0YXRpYywgKmV4cG9ydGVkKiBmdW5jdGlvbiBhbmQgaXMgdGhlcmVmb3JlIGRpcmVjdGx5IHJlYWNoYWJsZSBhbmQgdGVzdGFibGUuIEl0JiMzOTtzICpwZXJmZWN0bHkqIHNwZWNpZmljIGFuZCBub3QgdWJpcXVpdG91cy4gSSB0aGluayB0aGF0JiMzOTtzIHRoZSBiZXN0IGZvY3VzIGZvciB0aGlzIGFuYWx5c2lzLgoKTGV0JiMzOTtzIGNhbGwgdGhlIHJlc3VsdHMgYW5kIGdldCBhIGhhbmRsZSBvbiB3aGF0IHdlJiMzOTtyZSBsb29raW5nIGF0IHdpdGggYSBtdWNoIGRlZXBlciBkaXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXZpY3RfaW5vZGVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIFZGUyBpbm9kZSBldmljdGlvbiB0cmF2ZXJzYWwgaW4gZXZpY3RfaW5vZGVzKCkuIFdoZW4gcmVzY2hlZHVsaW5nIGlzIHJlcXVpcmVkIGR1cmluZyB1bm1vdW50L3N1cGVyYmxvY2sgc2h1dGRvd24sIGl0IGRyb3BzIGFuZCByZS1hY3F1aXJlcyBzX2lub2RlX2xpc3RfbG9jayBtaWQtaXRlcmF0aW9uIGluc3RlYWQgb2YgcmVzdGFydGluZyB0cmF2ZXJzYWwgZnJvbSB0aGUgYmVnaW5uaW5nLiBUaGlzIG1vZGlmaWNhdGlvbiBpbiBsb2NraW5nIGFuZCBsaXN0IHRyYXZlcnNhbCB3aXRoaW4gYSBjb3JlIHN1YnN5c3RlbSBpcyByZWFjaGFibGUgZHVyaW5nIHVubW91bnQgb3BlcmF0aW9ucyBhbmQgY291bGQgaW50cm9kdWNlIGNvbmN1cnJlbmN5IGlzc3VlcyBvciBsaXN0IGNvcnJ1cHRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXZpY3RfaW5vZGVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIFZGUyBpbm9kZSBldmljdGlvbiB0cmF2ZXJzYWwgaW4gZXZpY3RfaW5vZGVzKCkuIFdoZW4gcmVzY2hlZHVsaW5nIGlzIHJlcXVpcmVkIGR1cmluZyB1bm1vdW50L3N1cGVyYmxvY2sgc2h1dGRvd24sIGl0IGRyb3BzIGFuZCByZS1hY3F1aXJlcyBzX2lub2RlX2xpc3RfbG9jayBtaWQtaXRlcmF0aW9uIGluc3RlYWQgb2YgcmVzdGFydGluZyB0cmF2ZXJzYWwgZnJvbSB0aGUgYmVnaW5uaW5nLiBUaGlzIG1vZGlmaWNhdGlvbiBpbiBsb2NraW5nIGFuZCBsaXN0IHRyYXZlcnNhbCB3aXRoaW4gYSBjb3JlIHN1YnN5c3RlbSBpcyByZWFjaGFibGUgZHVyaW5nIHVubW91bnQgb3BlcmF0aW9ucyBhbmQgY291bGQgaW50cm9kdWNlIGNvbmN1cnJlbmN5IGlzc3VlcyBvciBsaXN0IGNvcnJ1cHRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA1OjUyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6NTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaXRlcmF0aW9uIGxvZ2ljIGFuZCBsb2NraW5nIGluIGBldmljdF9pbm9kZXMoKWAgaW4gZnMvaW5vZGUuYyB0byBhdm9pZCByZXN0YXJ0aW5nIHRoZSBpbm9kZSBsaXN0IHdhbGsgKGBnb3RvIGFnYWluYCkgd2hlbiByZXNjaGVkdWxpbmcuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHN0ZW1taW5nIGZyb20gdGhpcyBjaGFuZ2Ugd291bGQgYmUgY29uY3VycmVuY3kgaXNzdWVzLCBsaXN0IGNvcnJ1cHRpb24sIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgKGlmIHRoZSBsaXN0IG9yIGlub2RlIHN0YXRlIGNoYW5nZXMgd2hpbGUgYHNiLVx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrYCBpcyBkcm9wcGVkKSwgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMgKHN1Y2ggYXMgQ09ORklHX0RFQlVHX0xJU1QpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgcmVhZCBvciBicmFuY2ggb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBkb2VzIG5vdCBjb3B5IGFueSBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1YTBkOTQ0YzgxNjMxN2FhYjA2ZGM4ODRlMjQ4MWEyZmIxZjc1OTk4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgMTUgMDU6NTA6MDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9pbm9kZS5jIGIvZnMvaW5vZGUuYwppbmRleCBiYTdkYTM5YmU0YTMxLi5hOWQzN2JlMzkwYTE3IDEwMDY0NAotLS0gYS9mcy9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2lub2RlLmMKQEAgLTg4MCw3ICYjNDM7ODgwLDYgQEAgdm9pZCBldmljdF9pbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCUxJU1RfSEVBRChkaXNwb3NlKTsKIAotYWdhaW46CiAJc3Bpbl9sb2NrKCZhbXA7c2ItJmd0O3NfaW5vZGVfbGlzdF9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlub2RlLCAmYW1wO3NiLSZndDtzX2lub2RlcywgaV9zYl9saXN0KSB7CiAJCWlmIChpY291bnRfcmVhZF9vbmNlKGlub2RlKSkKQEAgLTg5OSwxOSAmIzQzOzg5OCwxOSBAQCB2b2lkIGV2aWN0X2lub2RlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogCQlpbm9kZV9zdGF0ZV9zZXQoaW5vZGUsIElfRlJFRUlORyk7CiAJCWlub2RlX2xydV9saXN0X2RlbChpbm9kZSk7CiAJCXNwaW5fdW5sb2NrKCZhbXA7aW5vZGUtJmd0O2lfbG9jayk7Ci0JCWxpc3RfYWRkKCZhbXA7aW5vZGUtJmd0O2lfbHJ1LCAmYW1wO2Rpc3Bvc2UpOwogCiAJCS8qCi0JCSAqIFdlIGNhbiBoYXZlIGEgdG9uIG9mIGlub2RlcyB0byBldmljdCBhdCB1bm1vdW50IHRpbWUgZ2l2ZW4KLQkJICogZW5vdWdoIG1lbW9yeSwgY2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8gZ28gdG8gc2xlZXAgZm9yIGEKLQkJICogYml0IHNvIHdlIGRvbiYjMzk7dCBsaXZlbG9jay4KJiM0MzsJCSAqIEtlZXAgdGhpcyBpbm9kZSBvdXQgb2YgZGlzcG9zZSBzbyBpdCBzdGF5cyBvbiBzX2lub2RlcyB3aGlsZQomIzQzOwkJICogdGhlIGxpc3QgbG9jayBpcyBkcm9wcGVkLiBJX0ZSRUVJTkcgcHJldmVudHMgbmV3IHJlZmVyZW5jZXMKJiM0MzsJCSAqIGFuZCBsZWF2ZXMgZXZpY3Rpb24gdG8gdXMsIHNvIHdlIGNhbiByZXN1bWUgdGhlIHdhbGsgZnJvbSBpdC4KIAkJICovCiAJCWlmIChuZWVkX3Jlc2NoZWQoKSkgewogCQkJc3Bpbl91bmxvY2soJmFtcDtzYi0mZ3Q7c19pbm9kZV9saXN0X2xvY2spOwogCQkJY29uZF9yZXNjaGVkKCk7CiAJCQlkaXNwb3NlX2xpc3QoJmFtcDtkaXNwb3NlKTsKLQkJCWdvdG8gYWdhaW47CiYjNDM7CQkJc3Bpbl9sb2NrKCZhbXA7c2ItJmd0O3NfaW5vZGVfbGlzdF9sb2NrKTsKIAkJfQomIzQzOwkJbGlzdF9hZGQoJmFtcDtpbm9kZS0mZ3Q7aV9scnUsICZhbXA7ZGlzcG9zZSk7CiAJfQogCXNwaW5fdW5sb2NrKCZhbXA7c2ItJmd0O3NfaW5vZGVfbGlzdF9sb2NrKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM3MAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgRmlsZSBTeXN0ZW0mIzM5O3MgSW5vZGUgSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgY2hhbmdlZCBhbmQgaG93IGl0IGltcGFjdHMgdGhlIGBmcy9pbm9kZS5jYCBjb21wb25lbnQuIEkmIzM5O20gdGhpbmtpbmcgdGhlIGJlc3QgZmlyc3Qgc3RlcCBpcyBhIGNsb3NlIGluc3BlY3Rpb24gb2YgdGhlIGRpZmYgaXRzZWxmLCBidXQgSSB3YW50IHRvIHB1dCB0aGUgY2hhbmdlcyBpbiBjb250ZXh0LiBUbyBkbyB0aGF0LCBJJiMzOTttIGdvaW5nIHRvIGxldmVyYWdlIGByZWFkLWZpbGVgIHRvIGdldCBhIGxvb2sgYXQgdGhlIGNvZGUgYmxvY2sgc3Vycm91bmRpbmcgbGluZXMgODgwLTkyMCBpbiBgZnMvaW5vZGUuY2AuIFRoYXQgYXJlYSBpcyBsaWtlbHkgdG8gcmV2ZWFsIHRoZSBpbW1lZGlhdGUgYmVmb3JlIGFuZCBhZnRlciBmb3IgdGhlIGNoYW5nZXMsIG9yIHBvdGVudGlhbGx5IHRoZSBhcmVhIHRoYXQgdGhvc2UgY2hhbmdlcyByZWxhdGUgdG8uIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24gb2YgdGhlIGNoYW5nZSBpbiB0aGUgb3ZlcmFsbCBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2lub2RlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg3MDpcdCAqIGV2aWN0X2lub2Rlc1x0LSBldmljdCBhbGwgZXZpY3RhYmxlIGlub2RlcyBmb3IgYSBzdXBlcmJsb2NrXG4gODcxOlx0ICogQHNiOlx0XHRzdXBlcmJsb2NrIHRvIG9wZXJhdGUgb25cbiA4NzI6XHQgKlxuIDg3MzpcdCAqIE1ha2Ugc3VyZSB0aGF0IG5vIGlub2RlcyB3aXRoIHplcm8gcmVmY291bnQgYXJlIHJldGFpbmVkLiAgVGhpcyBpc1xuIDg3NDpcdCAqIGNhbGxlZCBieSBzdXBlcmJsb2NrIHNodXRkb3duIGFmdGVyIGhhdmluZyBTQl9BQ1RJVkUgZmxhZyByZW1vdmVkLFxuIDg3NTpcdCAqIHNvIGFueSBpbm9kZSByZWFjaGluZyB6ZXJvIHJlZmNvdW50IGR1cmluZyBvciBhZnRlciB0aGF0IGNhbGwgd2lsbFxuIDg3NjpcdCAqIGJlIGltbWVkaWF0ZWx5IGV2aWN0ZWQuXG4gODc3Olx0ICovXG4gODc4Olx0dm9pZCBldmljdF9pbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiA4Nzk6XHR7XG4gODgwOlx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuIDg4MTpcdFx0TElTVF9IRUFEKGRpc3Bvc2UpO1xuIDg4MjpcdFxuIDg4MzpcdFx0c3Bpbl9sb2NrKFx1MDAyNnNiLVx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrKTtcbiA4ODQ6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoaW5vZGUsIFx1MDAyNnNiLVx1MDAzZXNfaW5vZGVzLCBpX3NiX2xpc3QpIHtcbiA4ODU6XHRcdFx0aWYgKGljb3VudF9yZWFkX29uY2UoaW5vZGUpKVxuIDg4NjpcdFx0XHRcdGNvbnRpbnVlO1xuIDg4NzpcdFxuIDg4ODpcdFx0XHRzcGluX2xvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbiA4ODk6XHRcdFx0aWYgKGljb3VudF9yZWFkKGlub2RlKSkge1xuIDg5MDpcdFx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4gODkxOlx0XHRcdFx0Y29udGludWU7XG4gODkyOlx0XHRcdH1cbiA4OTM6XHRcdFx0aWYgKGlub2RlX3N0YXRlX3JlYWQoaW5vZGUpIFx1MDAyNiAoSV9ORVcgfCBJX0ZSRUVJTkcgfCBJX1dJTExfRlJFRSkpIHtcbiA4OTQ6XHRcdFx0XHRzcGluX3VubG9jayhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spO1xuIDg5NTpcdFx0XHRcdGNvbnRpbnVlO1xuIDg5NjpcdFx0XHR9XG4gODk3Olx0XG4gODk4Olx0XHRcdGlub2RlX3N0YXRlX3NldChpbm9kZSwgSV9GUkVFSU5HKTtcbiA4OTk6XHRcdFx0aW5vZGVfbHJ1X2xpc3RfZGVsKGlub2RlKTtcbiA5MDA6XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbiA5MDE6XHRcbiA5MDI6XHRcdFx0LypcbiA5MDM6XHRcdFx0ICogS2VlcCB0aGlzIGlub2RlIG91dCBvZiBkaXNwb3NlIHNvIGl0IHN0YXlzIG9uIHNfaW5vZGVzIHdoaWxlXG4gOTA0Olx0XHRcdCAqIHRoZSBsaXN0IGxvY2sgaXMgZHJvcHBlZC4gSV9GUkVFSU5HIHByZXZlbnRzIG5ldyByZWZlcmVuY2VzXG4gOTA1Olx0XHRcdCAqIGFuZCBsZWF2ZXMgZXZpY3Rpb24gdG8gdXMsIHNvIHdlIGNhbiByZXN1bWUgdGhlIHdhbGsgZnJvbSBpdC5cbiA5MDY6XHRcdFx0ICovXG4gOTA3Olx0XHRcdGlmIChuZWVkX3Jlc2NoZWQoKSkge1xuIDkwODpcdFx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnNiLVx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrKTtcbiA5MDk6XHRcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiA5MTA6XHRcdFx0XHRkaXNwb3NlX2xpc3QoXHUwMDI2ZGlzcG9zZSk7XG4gOTExOlx0XHRcdFx0c3Bpbl9sb2NrKFx1MDAyNnNiLVx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrKTtcbiA5MTI6XHRcdFx0fVxuIDkxMzpcdFx0XHRsaXN0X2FkZChcdTAwMjZpbm9kZS1cdTAwM2VpX2xydSwgXHUwMDI2ZGlzcG9zZSk7XG4gOTE0Olx0XHR9XG4gOTE1Olx0XHRzcGluX3VubG9jayhcdTAwMjZzYi1cdTAwM2VzX2lub2RlX2xpc3RfbG9jayk7XG4gOTE2Olx0XG4gOTE3Olx0XHRkaXNwb3NlX2xpc3QoXHUwMDI2ZGlzcG9zZSk7XG4gOTE4Olx0fVxuIDkxOTpcdEVYUE9SVF9TWU1CT0xfR1BMKGV2aWN0X2lub2Rlcyk7XG4gOTIwOlx0XG4gOTIxOlx0LypcbiA5MjI6XHQgKiBJc29sYXRlIHRoZSBpbm9kZSBmcm9tIHRoZSBMUlUgaW4gcHJlcGFyYXRpb24gZm9yIGZyZWVpbmcgaXQuXG4gOTIzOlx0ICpcbiA5MjQ6XHQgKiBJZiB0aGUgaW5vZGUgaGFzIHRoZSBJX1JFRkVSRU5DRUQgZmxhZyBzZXQsIHRoZW4gaXQgbWVhbnMgdGhhdCBpdCBoYXMgYmVlblxuIDkyNTpcdCAqIHVzZWQgcmVjZW50bHkgLSB0aGUgZmxhZyBpcyBzZXQgaW4gaXB1dF9maW5hbCgpLiBXaGVuIHdlIGVuY291bnRlciBzdWNoIGFuXG4gOTI2Olx0ICogaW5vZGUsIGNsZWFyIHRoZSBmbGFnIGFuZCBtb3ZlIGl0IHRvIHRoZSBiYWNrIG9mIHRoZSBMUlUgc28gaXQgZ2V0cyBhbm90aGVyXG4gOTI3Olx0ICogcGFzcyB0aHJvdWdoIHRoZSBMUlUgYmVmb3JlIGl0IGdldHMgcmVjbGFpbWVkLiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIG9mXG4gOTI4Olx0ICogdGhlIGZhY3Qgd2UgYXJlIGRvaW5nIGxhenkgTFJVIHVwZGF0ZXMgdG8gbWluaW1pc2UgbG9jayBjb250ZW50aW9uIHNvIHRoZVxuIDkyOTpcdCAqIExSVSBkb2VzIG5vdCBoYXZlIHN0cmljdCBvcmRlcmluZy4gSGVuY2Ugd2UgZG9uJiMzOTt0IHdhbnQgdG8gcmVjbGFpbSBpbm9kZXNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDU6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU3MwoJCQkJCQkJb3V0cHV0OiAxODQKCQkJCQkJCXRob3VnaHRzOiAxMzQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IFRoaXMgUGF0Y2ggRG9lc24mIzM5O3QgV2FycmFudCBJdCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGlzIGBldmljdF9pbm9kZXNgIGZ1bmN0aW9uIGlzIG1vZGlmaWVkLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyB0aGUgbGlzdCBpdGVyYXRpb24gYW5kIHJlc2NoZWR1bGluZyBsb2dpYy4gVGhlIG9yaWdpbmFsIGNvZGUgaGFzIGEgYGdvdG8gYWdhaW5gIGFuZCBgY29uZF9yZXNjaGVkKClgIGNhbGwuIFRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgYW4gb3B0aW1pemF0aW9uLiBSYXRoZXIgdGhhbiByZXN0YXJ0aW5nIGZyb20gdGhlIHRvcCBvZiB0aGUgbGlzdCwgaXQmIzM5O3MgbW9kaWZ5aW5nIHRoZSBwcm9jZXNzIG9mIGhvdyBpbm9kZXMgYXJlIG1vdmVkIHRvIHRoZSBgZGlzcG9zZWAgbGlzdCBkdXJpbmcgdGhlIGV2aWN0aW9uIHByb2Nlc3MsIHBhcnRpY3VsYXJseSB0byBhdm9pZCBsaXZlbG9ja3MgZHVyaW5nIHVubW91bnRzLiBUaGUgY3J1Y2lhbCBwYXJ0IGlzIHRoYXQgdGhlIHBhdGNoIHJlb3JkZXJzIHRoZSBzcGlubG9jayBhY3F1aXNpdGlvbiBhbmQgYGxpc3RfYWRkYCBjYWxscyBhcm91bmQgYGNvbmRfcmVzY2hlZCgpYC4KClRoZSBpbW1lZGlhdGUgcmVkIGZsYWdzIGFyZSBhcm91bmQgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBsaXN0cyBhbmQgbG9ja3MuIERyb3BwaW5nIHRoZSBsb2NrIGFuZCB0aGVuIHJlYWNxdWlyaW5nIGl0IHdoaWxlIGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBsaXN0IGltbWVkaWF0ZWx5IHNjcmVhbXMgJiMzNDtyYWNlIGNvbmRpdGlvbnMmIzM0OyBhbmQgcG9zc2libGUgbGlzdCBjb3JydXB0aW9uIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIEl0JiMzOTtzIHRoYXQgYGxpc3RfZm9yX2VhY2hfZW50cnlgIGNvbnRleHQgdGhhdCBJIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoLiBUaGUgcHJldmlvdXMgaW5vZGUgaXMgZmluZSwgYnV0IHRoZSAqbmV4dCogaW5vZGUsIG9yIHRoZSBsaXN0IGl0c2VsZiwgbWlnaHQgYmUgY2hhbmdlZCBieSBhIGNvbmN1cnJlbnQgcHJvY2Vzcy4KCk5vdywgY29uc2lkZXJpbmcgdGhlIHBvc3NpYmlsaXRpZXMgaGVyZSAtIGxpc3QgY29ycnVwdGlvbiwgdXNlLWFmdGVyLWZyZWUsIGNvbmN1cnJlbnQgbGlzdCBtb2RpZmljYXRpb24sIGxvY2tkZXAgdmlvbGF0aW9ucyDigJMgdGhvc2UgYWxsIGZhbGwgc3F1YXJlbHkgaW50byB0aGUgZG9tYWluIG9mIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpLCBMT0NLREVQLCBhbmQgREVCVUdfTElTVC4gVGhlc2UgdG9vbHMgYXJlIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBjYXRjaCB0aGVzZSB0eXBlcyBvZiBtZW1vcnkgc2FmZXR5IGFuZCBjb25jdXJyZW5jeSBidWdzLgoKVGhlIGNlbnRyYWwgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBpbnRyb2R1Y2UgKnVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzKiBvciBwb3RlbnRpYWwgKmtlcm5lbCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UqPyAgTGV0JiMzOTtzIHdhbGsgdGhyb3VnaCB0aGUgY3JpdGVyaWE6CgoxLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2U/KiogTm9wZS4gTm8gYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIG5ldGxpbmssIGlvY3RsLCBub3RoaW5nIHRoYXQgZGlyZWN0bHkgdHJhbnNmZXJzIGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuCjIuICAqKlVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgYnJhbmNoaW5nPyoqICBObywgZXZlcnl0aGluZyBoZXJlIGFwcGVhcnMgdG8gYmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgb3IgZGVyaXZlZCBmcm9tIHRoZSBleGlzdGluZyBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIGxpa2UgYGlub2RlYCBmcm9tIGBsaXN0X2Zvcl9lYWNoX2VudHJ5YC4KMy4gICoqVW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbj8qKiBBYnNvbHV0ZWx5IG5vdC4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9uIGlzIGludHJvZHVjZWQuCjQuICAqKkJvdW5kcyBjaGVja3MgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnk/KiogIE5vLCB0aGUgcGF0Y2ggbW9kaWZpZXMgbG9naWMgYXJvdW5kIGV4aXN0aW5nIGxpc3RzLCB0aGVyZSBhcmUgbm8gY2hhbmdlcyBoZXJlLgoKVGhlIGBpbm9kZWAgcG9pbnRlciBjb21lcyBmcm9tIGBsaXN0X2Zvcl9lYWNoX2VudHJ5YCwgc28gaXQmIzM5O3MgaW5pdGlhbGl6ZWQuIFRoZSBgZGlzcG9zZWAgbGlzdCBpcyBpbml0aWFsaXplZCB2aWEgYExJU1RfSEVBRGAuIEl0JiMzOTtzIGFsbCB2ZXJ5IHN0YW5kYXJkLgoKUmV2aWV3aW5nIHRoZSBLTVNBTiBndWlkZWxpbmVzLCBpdCBiZWNvbWVzIGFidW5kYW50bHkgY2xlYXI6CgoqKiYjMzQ7VEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwgTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4mIzM0OyoqCgpUaGUgcGF0Y2ggY2hhbmdlcyBkb24mIzM5O3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGUgcG90ZW50aWFsIGlzc3VlcyBhcmUgY29uY3VycmVuY3ktcmVsYXRlZCwgd2hpY2ggYXJlICpleGFjdGx5KiB3aGF0IEtBU0FOIGFuZCB0aGUgb3RoZXJzIGFyZSBmb3IuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOPWZhbHNlYCBpcyB0aGUgcmlnaHQgY2FsbCBoZXJlLiBNeSByYXRpb25hbGUgaXM6CgoqICAgVGhlIHBhdGNoIGFsdGVycyB0aGUgaW5vZGUgZXZpY3Rpb24gcHJvY2VzcywgZm9jdXNpbmcgb24gbGlzdCBpdGVyYXRpb24gYW5kIHJlc2NoZWR1bGluZy4KKiAgIFRoZSBwcmltYXJ5IHJpc2tzIGFyZSBjb25jdXJyZW5jeS1yZWxhdGVkIChsaXN0IGNvcnJ1cHRpb24sIHVzZS1hZnRlci1mcmVlKSwgZGV0ZWN0YWJsZSB2aWEgS0FTQU4sIERFQlVHX0xJU1QsIGFuZCBsb2NrIGRlYnVnZ2luZy4KKiAgIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBvciB1c2VyLXRvLWtlcm5lbCBsZWFrcyBhcmUgaW50cm9kdWNlZC4KKiAgIEhlbmNlLCBhIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4KClRpbWUgdG8gaW52b2tlIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA1OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpdGVyYXRpb24gbG9naWMgYW5kIGxvY2tpbmcgaW4gYGV2aWN0X2lub2RlcygpYCBpbiBmcy9pbm9kZS5jIHRvIGF2b2lkIHJlc3RhcnRpbmcgdGhlIGlub2RlIGxpc3Qgd2FsayAoYGdvdG8gYWdhaW5gKSB3aGVuIHJlc2NoZWR1bGluZy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSB0aGlzIGNoYW5nZSB3b3VsZCBiZSBjb25jdXJyZW5jeSBpc3N1ZXMsIGxpc3QgY29ycnVwdGlvbiwgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyAoaWYgdGhlIGxpc3Qgb3IgaW5vZGUgc3RhdGUgY2hhbmdlcyB3aGlsZSBgc2ItXHUwMDNlc19pbm9kZV9saXN0X2xvY2tgIGlzIGRyb3BwZWQpLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcyAoc3VjaCBhcyBDT05GSUdfREVCVUdfTElTVCkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCByZWFkIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIGRvZXMgbm90IGNvcHkgYW55IGRhdGEgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpdGVyYXRpb24gbG9naWMgYW5kIGxvY2tpbmcgaW4gYGV2aWN0X2lub2RlcygpYCBpbiBmcy9pbm9kZS5jIHRvIGF2b2lkIHJlc3RhcnRpbmcgdGhlIGlub2RlIGxpc3Qgd2FsayAoYGdvdG8gYWdhaW5gKSB3aGVuIHJlc2NoZWR1bGluZy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSB0aGlzIGNoYW5nZSB3b3VsZCBiZSBjb25jdXJyZW5jeSBpc3N1ZXMsIGxpc3QgY29ycnVwdGlvbiwgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyAoaWYgdGhlIGxpc3Qgb3IgaW5vZGUgc3RhdGUgY2hhbmdlcyB3aGlsZSBgc2ItXHUwMDNlc19pbm9kZV9saXN0X2xvY2tgIGlzIGRyb3BwZWQpLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcyAoc3VjaCBhcyBDT05GSUdfREVCVUdfTElTVCkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCByZWFkIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIGRvZXMgbm90IGNvcHkgYW55IGRhdGEgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6NTA6MTAuMjE2NjkzMTMzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0MDUwNDUyMjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV2aWN0X2lub2Rlc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGl0ZXJhdGlvbiBsb2dpYyBhbmQgbG9ja2luZyBpbiBgZXZpY3RfaW5vZGVzKClgIGluIGZzL2lub2RlLmMgdG8gYXZvaWQgcmVzdGFydGluZyB0aGUgaW5vZGUgbGlzdCB3YWxrIChgZ290byBhZ2FpbmApIHdoZW4gcmVzY2hlZHVsaW5nLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBzdGVtbWluZyBmcm9tIHRoaXMgY2hhbmdlIHdvdWxkIGJlIGNvbmN1cnJlbmN5IGlzc3VlcywgbGlzdCBjb3JydXB0aW9uLCBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIChpZiB0aGUgbGlzdCBvciBpbm9kZSBzdGF0ZSBjaGFuZ2VzIHdoaWxlIGBzYi1cXHUwMDNlc19pbm9kZV9saXN0X2xvY2tgIGlzIGRyb3BwZWQpLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcyAoc3VjaCBhcyBDT05GSUdfREVCVUdfTElTVCkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCByZWFkIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIGRvZXMgbm90IGNvcHkgYW55IGRhdGEgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBWRlMgaW5vZGUgZXZpY3Rpb24gdHJhdmVyc2FsIGluIGV2aWN0X2lub2RlcygpLiBXaGVuIHJlc2NoZWR1bGluZyBpcyByZXF1aXJlZCBkdXJpbmcgdW5tb3VudC9zdXBlcmJsb2NrIHNodXRkb3duLCBpdCBkcm9wcyBhbmQgcmUtYWNxdWlyZXMgc19pbm9kZV9saXN0X2xvY2sgbWlkLWl0ZXJhdGlvbiBpbnN0ZWFkIG9mIHJlc3RhcnRpbmcgdHJhdmVyc2FsIGZyb20gdGhlIGJlZ2lubmluZy4gVGhpcyBtb2RpZmljYXRpb24gaW4gbG9ja2luZyBhbmQgbGlzdCB0cmF2ZXJzYWwgd2l0aGluIGEgY29yZSBzdWJzeXN0ZW0gaXMgcmVhY2hhYmxlIGR1cmluZyB1bm1vdW50IG9wZXJhdGlvbnMgYW5kIGNvdWxkIGludHJvZHVjZSBjb25jdXJyZW5jeSBpc3N1ZXMgb3IgbGlzdCBjb3JydXB0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNTo1MDoxMC4yMTY3MDE1MTNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDc4NTk0MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1YTBkOTQ0YzgxNjMxN2FhYjA2ZGM4ODRlMjQ4MWEyZmIxZjc1OTk4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDE1IDA1OjUwOjA4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2lub2RlLmMgYi9mcy9pbm9kZS5jXFxuaW5kZXggYmE3ZGEzOWJlNGEzMS4uYTlkMzdiZTM5MGExNyAxMDA2NDRcXG4tLS0gYS9mcy9pbm9kZS5jXFxuKysrIGIvZnMvaW5vZGUuY1xcbkBAIC04ODAsNyArODgwLDYgQEAgdm9pZCBldmljdF9pbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4gXFx0c3RydWN0IGlub2RlICppbm9kZTtcXG4gXFx0TElTVF9IRUFEKGRpc3Bvc2UpO1xcbiBcXG4tYWdhaW46XFxuIFxcdHNwaW5fbG9jayhcXHUwMDI2c2ItXFx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrKTtcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShpbm9kZSwgXFx1MDAyNnNiLVxcdTAwM2VzX2lub2RlcywgaV9zYl9saXN0KSB7XFxuIFxcdFxcdGlmIChpY291bnRfcmVhZF9vbmNlKGlub2RlKSlcXG5AQCAtODk5LDE5ICs4OTgsMTkgQEAgdm9pZCBldmljdF9pbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4gXFx0XFx0aW5vZGVfc3RhdGVfc2V0KGlub2RlLCBJX0ZSRUVJTkcpO1xcbiBcXHRcXHRpbm9kZV9scnVfbGlzdF9kZWwoaW5vZGUpO1xcbiBcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuLVxcdFxcdGxpc3RfYWRkKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9scnUsIFxcdTAwMjZkaXNwb3NlKTtcXG4gXFxuIFxcdFxcdC8qXFxuLVxcdFxcdCAqIFdlIGNhbiBoYXZlIGEgdG9uIG9mIGlub2RlcyB0byBldmljdCBhdCB1bm1vdW50IHRpbWUgZ2l2ZW5cXG4tXFx0XFx0ICogZW5vdWdoIG1lbW9yeSwgY2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8gZ28gdG8gc2xlZXAgZm9yIGFcXG4tXFx0XFx0ICogYml0IHNvIHdlIGRvbid0IGxpdmVsb2NrLlxcbitcXHRcXHQgKiBLZWVwIHRoaXMgaW5vZGUgb3V0IG9mIGRpc3Bvc2Ugc28gaXQgc3RheXMgb24gc19pbm9kZXMgd2hpbGVcXG4rXFx0XFx0ICogdGhlIGxpc3QgbG9jayBpcyBkcm9wcGVkLiBJX0ZSRUVJTkcgcHJldmVudHMgbmV3IHJlZmVyZW5jZXNcXG4rXFx0XFx0ICogYW5kIGxlYXZlcyBldmljdGlvbiB0byB1cywgc28gd2UgY2FuIHJlc3VtZSB0aGUgd2FsayBmcm9tIGl0LlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKG5lZWRfcmVzY2hlZCgpKSB7XFxuIFxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZzYi1cXHUwMDNlc19pbm9kZV9saXN0X2xvY2spO1xcbiBcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gXFx0XFx0XFx0ZGlzcG9zZV9saXN0KFxcdTAwMjZkaXNwb3NlKTtcXG4tXFx0XFx0XFx0Z290byBhZ2FpbjtcXG4rXFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZzYi1cXHUwMDNlc19pbm9kZV9saXN0X2xvY2spO1xcbiBcXHRcXHR9XFxuK1xcdFxcdGxpc3RfYWRkKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9scnUsIFxcdTAwMjZkaXNwb3NlKTtcXG4gXFx0fVxcbiBcXHRzcGluX3VubG9jayhcXHUwMDI2c2ItXFx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA1OjUwOjExLjg2NTI2ODIxN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTM0NzI1Nzg1MDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV2aWN0X2lub2Rlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIFZGUyBpbm9kZSBldmljdGlvbiB0cmF2ZXJzYWwgaW4gZXZpY3RfaW5vZGVzKCkuIFdoZW4gcmVzY2hlZHVsaW5nIGlzIHJlcXVpcmVkIGR1cmluZyB1bm1vdW50L3N1cGVyYmxvY2sgc2h1dGRvd24sIGl0IGRyb3BzIGFuZCByZS1hY3F1aXJlcyBzX2lub2RlX2xpc3RfbG9jayBtaWQtaXRlcmF0aW9uIGluc3RlYWQgb2YgcmVzdGFydGluZyB0cmF2ZXJzYWwgZnJvbSB0aGUgYmVnaW5uaW5nLiBUaGlzIG1vZGlmaWNhdGlvbiBpbiBsb2NraW5nIGFuZCBsaXN0IHRyYXZlcnNhbCB3aXRoaW4gYSBjb3JlIHN1YnN5c3RlbSBpcyByZWFjaGFibGUgZHVyaW5nIHVubW91bnQgb3BlcmF0aW9ucyBhbmQgY291bGQgaW50cm9kdWNlIGNvbmN1cnJlbmN5IGlzc3VlcyBvciBsaXN0IGNvcnJ1cHRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNWEwZDk0NGM4MTYzMTdhYWIwNmRjODg0ZTI0ODFhMmZiMWY3NTk5OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDE1IDA1OjUwOjA4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvaW5vZGUuYyBiL2ZzL2lub2RlLmNcbmluZGV4IGJhN2RhMzliZTRhMzEuLmE5ZDM3YmUzOTBhMTcgMTAwNjQ0XG4tLS0gYS9mcy9pbm9kZS5jXG4rKysgYi9mcy9pbm9kZS5jXG5AQCAtODgwLDcgKzg4MCw2IEBAIHZvaWQgZXZpY3RfaW5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuIFx0TElTVF9IRUFEKGRpc3Bvc2UpO1xuIFxuLWFnYWluOlxuIFx0c3Bpbl9sb2NrKFx1MDAyNnNiLVx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrKTtcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoaW5vZGUsIFx1MDAyNnNiLVx1MDAzZXNfaW5vZGVzLCBpX3NiX2xpc3QpIHtcbiBcdFx0aWYgKGljb3VudF9yZWFkX29uY2UoaW5vZGUpKVxuQEAgLTg5OSwxOSArODk4LDE5IEBAIHZvaWQgZXZpY3RfaW5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHRcdGlub2RlX3N0YXRlX3NldChpbm9kZSwgSV9GUkVFSU5HKTtcbiBcdFx0aW5vZGVfbHJ1X2xpc3RfZGVsKGlub2RlKTtcbiBcdFx0c3Bpbl91bmxvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbi1cdFx0bGlzdF9hZGQoXHUwMDI2aW5vZGUtXHUwMDNlaV9scnUsIFx1MDAyNmRpc3Bvc2UpO1xuIFxuIFx0XHQvKlxuLVx0XHQgKiBXZSBjYW4gaGF2ZSBhIHRvbiBvZiBpbm9kZXMgdG8gZXZpY3QgYXQgdW5tb3VudCB0aW1lIGdpdmVuXG4tXHRcdCAqIGVub3VnaCBtZW1vcnksIGNoZWNrIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIGdvIHRvIHNsZWVwIGZvciBhXG4tXHRcdCAqIGJpdCBzbyB3ZSBkb24ndCBsaXZlbG9jay5cbitcdFx0ICogS2VlcCB0aGlzIGlub2RlIG91dCBvZiBkaXNwb3NlIHNvIGl0IHN0YXlzIG9uIHNfaW5vZGVzIHdoaWxlXG4rXHRcdCAqIHRoZSBsaXN0IGxvY2sgaXMgZHJvcHBlZC4gSV9GUkVFSU5HIHByZXZlbnRzIG5ldyByZWZlcmVuY2VzXG4rXHRcdCAqIGFuZCBsZWF2ZXMgZXZpY3Rpb24gdG8gdXMsIHNvIHdlIGNhbiByZXN1bWUgdGhlIHdhbGsgZnJvbSBpdC5cbiBcdFx0ICovXG4gXHRcdGlmIChuZWVkX3Jlc2NoZWQoKSkge1xuIFx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnNiLVx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrKTtcbiBcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiBcdFx0XHRkaXNwb3NlX2xpc3QoXHUwMDI2ZGlzcG9zZSk7XG4tXHRcdFx0Z290byBhZ2FpbjtcbitcdFx0XHRzcGluX2xvY2soXHUwMDI2c2ItXHUwMDNlc19pbm9kZV9saXN0X2xvY2spO1xuIFx0XHR9XG4rXHRcdGxpc3RfYWRkKFx1MDAyNmlub2RlLVx1MDAzZWlfbHJ1LCBcdTAwMjZkaXNwb3NlKTtcbiBcdH1cbiBcdHNwaW5fdW5sb2NrKFx1MDAyNnNiLVx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA1OjUwOjExLjg2NTI3MDEwN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE0NTU5Mjg3MDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgSW5vZGUgRXZpY3Rpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIHRoZSBgZnMvaW5vZGUuY2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBgZXZpY3RfaW5vZGVzYCBmdW5jdGlvbiB3aXRoaW4gdGhhdCBmaWxlLCB3aGljaCBpcyBhIGtleSBhcmVhIGZvciBpbm9kZSBtYW5hZ2VtZW50LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGF0IGZ1bmN0aW9uIGFuZCBpdHMgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhlIGNoYW5nZXMuXG5cbkkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyBoYXBwZW5pbmcuIEkgc2hvdWxkIGNoZWNrIHRoZSBmaWxlIGNvbnRlbnQsIHNvLCBsZXQncyB1c2UgYHJlYWQtZmlsZWAgYW5kIHB1bGwgdXAgYGZzL2lub2RlLmNgIC0gSSdsbCB3YW50IHRvIGZvY3VzIGFyb3VuZCBsaW5lIDg4MCwgYXMgdGhhdCdzIGxpa2VseSB0aGUgZm9jYWwgcG9pbnQgb2YgdGhlIHBhdGNoLiBJJ2xsIHJlYWQgdGhlIHJlbGV2YW50IHN1cnJvdW5kaW5nIGxpbmVzIHRvIGdldCB0aGUgbmVjZXNzYXJ5IGNvbnRleHQuIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGV4YWN0bHkgaG93IHRoZSBldmljdGlvbiBwcm9jZXNzIGlzIGJlaW5nIGFsdGVyZWQgYW5kIHdoYXQgbmV3IGJlaGF2aW9yIHRoZSBwYXRjaCBpbnRyb2R1Y2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgcGF0Y2ggaXMgb3B0aW1pemVkIGZvciBwZXJmb3JtYW5jZSBvciBmaXhlcyBhIGJ1Zy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE1OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6NTA6MjYuNDI0NTYxMTA2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyMDExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2lub2RlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODcwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODcwOlxcdCAqIGV2aWN0X2lub2Rlc1xcdC0gZXZpY3QgYWxsIGV2aWN0YWJsZSBpbm9kZXMgZm9yIGEgc3VwZXJibG9ja1xcbiA4NzE6XFx0ICogQHNiOlxcdFxcdHN1cGVyYmxvY2sgdG8gb3BlcmF0ZSBvblxcbiA4NzI6XFx0ICpcXG4gODczOlxcdCAqIE1ha2Ugc3VyZSB0aGF0IG5vIGlub2RlcyB3aXRoIHplcm8gcmVmY291bnQgYXJlIHJldGFpbmVkLiAgVGhpcyBpc1xcbiA4NzQ6XFx0ICogY2FsbGVkIGJ5IHN1cGVyYmxvY2sgc2h1dGRvd24gYWZ0ZXIgaGF2aW5nIFNCX0FDVElWRSBmbGFnIHJlbW92ZWQsXFxuIDg3NTpcXHQgKiBzbyBhbnkgaW5vZGUgcmVhY2hpbmcgemVybyByZWZjb3VudCBkdXJpbmcgb3IgYWZ0ZXIgdGhhdCBjYWxsIHdpbGxcXG4gODc2OlxcdCAqIGJlIGltbWVkaWF0ZWx5IGV2aWN0ZWQuXFxuIDg3NzpcXHQgKi9cXG4gODc4OlxcdHZvaWQgZXZpY3RfaW5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuIDg3OTpcXHR7XFxuIDg4MDpcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xcbiA4ODE6XFx0XFx0TElTVF9IRUFEKGRpc3Bvc2UpO1xcbiA4ODI6XFx0XFxuIDg4MzpcXHRcXHRzcGluX2xvY2soXFx1MDAyNnNiLVxcdTAwM2VzX2lub2RlX2xpc3RfbG9jayk7XFxuIDg4NDpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGlub2RlLCBcXHUwMDI2c2ItXFx1MDAzZXNfaW5vZGVzLCBpX3NiX2xpc3QpIHtcXG4gODg1OlxcdFxcdFxcdGlmIChpY291bnRfcmVhZF9vbmNlKGlub2RlKSlcXG4gODg2OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA4ODc6XFx0XFxuIDg4ODpcXHRcXHRcXHRzcGluX2xvY2soXFx1MDAyNmlub2RlLVxcdTAwM2VpX2xvY2spO1xcbiA4ODk6XFx0XFx0XFx0aWYgKGljb3VudF9yZWFkKGlub2RlKSkge1xcbiA4OTA6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmlub2RlLVxcdTAwM2VpX2xvY2spO1xcbiA4OTE6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDg5MjpcXHRcXHRcXHR9XFxuIDg5MzpcXHRcXHRcXHRpZiAoaW5vZGVfc3RhdGVfcmVhZChpbm9kZSkgXFx1MDAyNiAoSV9ORVcgfCBJX0ZSRUVJTkcgfCBJX1dJTExfRlJFRSkpIHtcXG4gODk0OlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9sb2NrKTtcXG4gODk1OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA4OTY6XFx0XFx0XFx0fVxcbiA4OTc6XFx0XFxuIDg5ODpcXHRcXHRcXHRpbm9kZV9zdGF0ZV9zZXQoaW5vZGUsIElfRlJFRUlORyk7XFxuIDg5OTpcXHRcXHRcXHRpbm9kZV9scnVfbGlzdF9kZWwoaW5vZGUpO1xcbiA5MDA6XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmlub2RlLVxcdTAwM2VpX2xvY2spO1xcbiA5MDE6XFx0XFxuIDkwMjpcXHRcXHRcXHQvKlxcbiA5MDM6XFx0XFx0XFx0ICogS2VlcCB0aGlzIGlub2RlIG91dCBvZiBkaXNwb3NlIHNvIGl0IHN0YXlzIG9uIHNfaW5vZGVzIHdoaWxlXFxuIDkwNDpcXHRcXHRcXHQgKiB0aGUgbGlzdCBsb2NrIGlzIGRyb3BwZWQuIElfRlJFRUlORyBwcmV2ZW50cyBuZXcgcmVmZXJlbmNlc1xcbiA5MDU6XFx0XFx0XFx0ICogYW5kIGxlYXZlcyBldmljdGlvbiB0byB1cywgc28gd2UgY2FuIHJlc3VtZSB0aGUgd2FsayBmcm9tIGl0LlxcbiA5MDY6XFx0XFx0XFx0ICovXFxuIDkwNzpcXHRcXHRcXHRpZiAobmVlZF9yZXNjaGVkKCkpIHtcXG4gOTA4OlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZzYi1cXHUwMDNlc19pbm9kZV9saXN0X2xvY2spO1xcbiA5MDk6XFx0XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuIDkxMDpcXHRcXHRcXHRcXHRkaXNwb3NlX2xpc3QoXFx1MDAyNmRpc3Bvc2UpO1xcbiA5MTE6XFx0XFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZzYi1cXHUwMDNlc19pbm9kZV9saXN0X2xvY2spO1xcbiA5MTI6XFx0XFx0XFx0fVxcbiA5MTM6XFx0XFx0XFx0bGlzdF9hZGQoXFx1MDAyNmlub2RlLVxcdTAwM2VpX2xydSwgXFx1MDAyNmRpc3Bvc2UpO1xcbiA5MTQ6XFx0XFx0fVxcbiA5MTU6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnNiLVxcdTAwM2VzX2lub2RlX2xpc3RfbG9jayk7XFxuIDkxNjpcXHRcXG4gOTE3OlxcdFxcdGRpc3Bvc2VfbGlzdChcXHUwMDI2ZGlzcG9zZSk7XFxuIDkxODpcXHR9XFxuIDkxOTpcXHRFWFBPUlRfU1lNQk9MX0dQTChldmljdF9pbm9kZXMpO1xcbiA5MjA6XFx0XFxuIDkyMTpcXHQvKlxcbiA5MjI6XFx0ICogSXNvbGF0ZSB0aGUgaW5vZGUgZnJvbSB0aGUgTFJVIGluIHByZXBhcmF0aW9uIGZvciBmcmVlaW5nIGl0LlxcbiA5MjM6XFx0ICpcXG4gOTI0OlxcdCAqIElmIHRoZSBpbm9kZSBoYXMgdGhlIElfUkVGRVJFTkNFRCBmbGFnIHNldCwgdGhlbiBpdCBtZWFucyB0aGF0IGl0IGhhcyBiZWVuXFxuIDkyNTpcXHQgKiB1c2VkIHJlY2VudGx5IC0gdGhlIGZsYWcgaXMgc2V0IGluIGlwdXRfZmluYWwoKS4gV2hlbiB3ZSBlbmNvdW50ZXIgc3VjaCBhblxcbiA5MjY6XFx0ICogaW5vZGUsIGNsZWFyIHRoZSBmbGFnIGFuZCBtb3ZlIGl0IHRvIHRoZSBiYWNrIG9mIHRoZSBMUlUgc28gaXQgZ2V0cyBhbm90aGVyXFxuIDkyNzpcXHQgKiBwYXNzIHRocm91Z2ggdGhlIExSVSBiZWZvcmUgaXQgZ2V0cyByZWNsYWltZWQuIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugb2ZcXG4gOTI4OlxcdCAqIHRoZSBmYWN0IHdlIGFyZSBkb2luZyBsYXp5IExSVSB1cGRhdGVzIHRvIG1pbmltaXNlIGxvY2sgY29udGVudGlvbiBzbyB0aGVcXG4gOTI5OlxcdCAqIExSVSBkb2VzIG5vdCBoYXZlIHN0cmljdCBvcmRlcmluZy4gSGVuY2Ugd2UgZG9uJ3Qgd2FudCB0byByZWNsYWltIGlub2Rlc1xcbiA5MzA6XFx0ICogd2l0aCB0aGlzIGZsYWcgc2V0IGJlY2F1c2UgdGhleSBhcmUgdGhlIGlub2RlcyB0aGF0IGFyZSBvdXQgb2Ygb3JkZXIuXFxuIDkzMTpcXHQgKi9cXG4gOTMyOlxcdHN0YXRpYyBlbnVtIGxydV9zdGF0dXMgaW5vZGVfbHJ1X2lzb2xhdGUoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcXG4gOTMzOlxcdFxcdFxcdHN0cnVjdCBsaXN0X2xydV9vbmUgKmxydSwgdm9pZCAqYXJnKVxcbiA5MzQ6XFx0e1xcbiA5MzU6XFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqZnJlZWFibGUgPSBhcmc7XFxuIDkzNjpcXHRcXHRzdHJ1Y3QgaW5vZGVcXHQqaW5vZGUgPSBjb250YWluZXJfb2YoaXRlbSwgc3RydWN0IGlub2RlLCBpX2xydSk7XFxuIDkzNzpcXHRcXG4gOTM4OlxcdFxcdC8qXFxuIDkzOTpcXHRcXHQgKiBXZSBhcmUgaW52ZXJ0aW5nIHRoZSBscnUgbG9jay9pbm9kZS1cXHUwMDNlaV9sb2NrIGhlcmUsIHNvIHVzZSBhXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA1OjUwOjI2LjQyNDc1NjIyNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM1NzE5NDI3NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoaXMgQ29kZSBTbmlwcGV0KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiV2hhdCBpbiB0aGUgd29ybGQgaXMgdGhpcyBjb2RlIGRvaW5nP1wiIEltbWVkaWF0ZWx5LCBJIHNlZSBhIHNwaW5sb2NrIHByb3RlY3RpbmcgYSBsaXN0IGl0ZXJhdGlvbjogYHNwaW5fbG9jayhcdTAwMjZzYi1cdTAwM2VzX2lub2RlX2xpc3RfbG9jaylgIGFuZCB0aGUgZmFtaWxpYXIgYGxpc3RfZm9yX2VhY2hfZW50cnlgIG1hY3JvLiBJIGtub3cgdGhhdCB1c3VhbGx5IG1lYW5zIHdlJ3JlIHRyYXZlcnNpbmcgaW5vZGVzIGFzc29jaWF0ZWQgd2l0aCBhIHN1cGVyYmxvY2suIEJ1dCBob2xkIG9uLCB0aGUgaXRlcmF0aW9uIGlzIGludGVycnVwdGVkIGJ5IGBuZWVkX3Jlc2NoZWQoKWAuIFRoZW4gdGhlcmUncyBhbiBgdW5sb2NrYCFcblxuTXkgZXhwZXJ0IGluc3RpbmN0IGtpY2tzIGluIGFuZCBzYXlzLCBcIldhaXQgYSBtaW51dGUsIHdoYXQgaGFwcGVucyBkdXJpbmcgdGhlIHVubG9jaz9cIiBgbGlzdF9mb3JfZWFjaF9lbnRyeWAgZXhwYW5kcyB0byBhIHN0YW5kYXJkIGBmb3JgIGxvb3AsIHNvIEkgdW5kZXJzdGFuZCB0aGF0IHRoZSBsaXN0IHRyYXZlcnNhbCBjb3VsZCBiZSBpbiBwcm9ncmVzcyB3aGVuIHRoZSB1bmxvY2sgaXMgY2FsbGVkLiBDcnVjaWFsbHksIEkgaGF2ZSB0byB0aGluayBhYm91dCB3aGF0IG90aGVyIG9wZXJhdGlvbnMgYXJlIGhhcHBlbmluZyBpbiB0aGUgc3lzdGVtIHRoYXQgY291bGQgaW50ZXJhY3Qgd2l0aCB0aGUgbGlzdC4gQ2FuIG90aGVyIHByb2Nlc3NlcyBtb2RpZnkgdGhlIGBcdTAwMjZzYi1cdTAwM2VzX2lub2Rlc2AgbGlzdCB3aGlsZSB0aGlzIHRocmVhZCBoYXMgdGVtcG9yYXJpbHkgcmVsaW5xdWlzaGVkIHRoZSBsb2NrPyBXaGF0IGlmIGFuIGlub2RlJ3MgYGlfc2JfbGlzdC5uZXh0YCBwb2ludGVyIGlzIG1vZGlmaWVkIGluIGFub3RoZXIgdGhyZWFkIHdoaWxlIHRoaXMgdGhyZWFkIHVubG9ja3MgYW5kIHRoZW4gcmVsb2Nrcz8gVGhhdCdzIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiBzY2VuYXJpbyBzY3JlYW1pbmcgYXQgbWUuXG5cblRoZW4sIHRoZXJlJ3MgYGRpc3Bvc2VfbGlzdChcdTAwMjZkaXNwb3NlKWAuIFwiV2hhdCBkb2VzICp0aGF0KiBkbz9cIiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGRlZmluaXRpb24gb2YgYGRpc3Bvc2VfbGlzdGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBpbiB0aGUgY29udGV4dCBvZiB0aGUgbG9jaydzIGxpZmVjeWNsZSB0byBjb21wbGV0ZWx5IGV2YWx1YXRlIHRoZSBzYWZldHkgb2YgdGhpcyBpbXBsZW1lbnRhdGlvbi4gSSBoYXZlIHRvIGxvb2sgaW50byB0aGlzIGZ1bmN0aW9uLCBidXQgdGhlIGZhY3QgdGhhdCBpdCBpcyBjYWxsZWQgYWZ0ZXIgdGhlIHVubG9jayBhbmQgYmVmb3JlIHRoZSByZWxvY2sgaXMgZ2l2aW5nIG1lIHBhdXNlLiBUaGlzIG5lZWRzIHRvIGJlIGNoZWNrZWQgY2FyZWZ1bGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTg1LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6NTA6MjkuOTk2NzAxODQ5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2NjQ5OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgZGlzcG9zZV9saXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2lub2RlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW5vZGUuYz03OTk9c3RhdGljIHZvaWQgZXZpY3Qoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2lub2RlLmMtODU1LSAqL1xcbmZzL2lub2RlLmM6ODU2OnN0YXRpYyB2b2lkIGRpc3Bvc2VfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbmZzL2lub2RlLmMtODU3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6NTA6MzAuMDYzMzU5Mzk4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzY5MDk1MDI3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIGNvbnNpZGVyaW5nIEknbSBhbiBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gYGRpc3Bvc2VfbGlzdGAgaW4gYGZzL2lub2RlLmNgKipcblxuT2theSwgdGltZSB0byBnZXQgYSBiaXQgZ3JhbnVsYXIuIEknbSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgYGRpc3Bvc2VfbGlzdGAgZnVuY3Rpb24gd2l0aGluIGBmcy9pbm9kZS5jYC4gVGhhdCdzIHdoZXJlIHRoZXkncmUgaGFuZGxpbmcgaW5vZGUgY2xlYW51cCwgc28gSSdtIGV4cGVjdGluZyB0byBzZWUgdGhlIGNvcmUgbG9naWMgZm9yIHJlbGVhc2luZyBpbm9kZSByZXNvdXJjZXMgd2hlbiB0aGV5J3JlIG5vIGxvbmdlciBuZWVkZWQuIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhleSdyZSBtYW5hZ2luZyB0aGUgbGlzdCBpdHNlbGYg4oCTIGhvdyBpcyBpdCBzdHJ1Y3R1cmVkLCBhbmQgd2hhdCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBhcmUgdGhleSB1c2luZz8gR2l2ZW4gdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggcG90ZW50aWFsbHkgY29uY3VycmVudCBhY2Nlc3MgdG8gaW5vZGVzLCBlZmZpY2llbnQgYW5kIHNhZmUgbGlzdCBtYW5pcHVsYXRpb24gaXMgY3J1Y2lhbC4gSSB3YW50IHRvIHNlZSBob3cgdGhleSdyZSBoYW5kbGluZyB0aGUgY29tbW9uIHNjZW5hcmlvczogYWRkaW5nLCByZW1vdmluZywgaXRlcmF0aW5nLCBhbmQgcGVyaGFwcyByZS11c2luZyBlbnRyaWVzIG9uIHRoZSBsaXN0LiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBTcGVjaWZpY2FsbHksIEknbGwgYmUgd2F0Y2hpbmcgaG93IHRoZXkgZGVhbCB3aXRoIHRoZSByZWZlcmVuY2UgY291bnRzIGFuZCBpZiB0aGV5J3JlIGNvbnNpZGVyaW5nIGFueSBmb3JtIG9mIG9wdGltaXN0aWMgbG9ja2luZyBvciBvdGhlciBhZHZhbmNlZCBzdHJhdGVnaWVzIHRvIG1pbmltaXplIGNvbnRlbnRpb24uIEkgYWxzbyB3YW50IHRvIG9ic2VydmUgaWYgdGhleSdyZSBoYW5kbGluZyBhbnkgc3BlY2lhbCBjYXNlcywgbGlrZSBvcnBoYW5lZCBpbm9kZXMgb3IgaW5vZGVzIHdpdGggcGVuZGluZyBJL08sIGJlZm9yZSBJIGRlY2lkZSB0byBkaXZlIGludG8gaXQgbW9yZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTM3MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA1OjUwOjMzLjc1NDMxMjUyMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNTI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9pbm9kZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg1MCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg1MDpcXHQgKiBkaXNwb3NlX2xpc3QgLSBkaXNwb3NlIG9mIHRoZSBjb250ZW50cyBvZiBhIGxvY2FsIGxpc3RcXG4gODUxOlxcdCAqIEBoZWFkOiB0aGUgaGVhZCBvZiB0aGUgbGlzdCB0byBmcmVlXFxuIDg1MjpcXHQgKlxcbiA4NTM6XFx0ICogRGlzcG9zZS1saXN0IGdldHMgYSBsb2NhbCBsaXN0IHdpdGggbG9jYWwgaW5vZGVzIGluIGl0LCBzbyBpdCBkb2Vzbid0XFxuIDg1NDpcXHQgKiBuZWVkIHRvIHdvcnJ5IGFib3V0IGxpc3QgY29ycnVwdGlvbiBhbmQgU01QIGxvY2tzLlxcbiA4NTU6XFx0ICovXFxuIDg1NjpcXHRzdGF0aWMgdm9pZCBkaXNwb3NlX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcXG4gODU3OlxcdHtcXG4gODU4OlxcdFxcdHdoaWxlICghbGlzdF9lbXB0eShoZWFkKSkge1xcbiA4NTk6XFx0XFx0XFx0c3RydWN0IGlub2RlICppbm9kZTtcXG4gODYwOlxcdFxcbiA4NjE6XFx0XFx0XFx0aW5vZGUgPSBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsIHN0cnVjdCBpbm9kZSwgaV9scnUpO1xcbiA4NjI6XFx0XFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbHJ1KTtcXG4gODYzOlxcdFxcbiA4NjQ6XFx0XFx0XFx0ZXZpY3QoaW5vZGUpO1xcbiA4NjU6XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuIDg2NjpcXHRcXHR9XFxuIDg2NzpcXHR9XFxuIDg2ODpcXHRcXG4gODY5OlxcdC8qKlxcbiA4NzA6XFx0ICogZXZpY3RfaW5vZGVzXFx0LSBldmljdCBhbGwgZXZpY3RhYmxlIGlub2RlcyBmb3IgYSBzdXBlcmJsb2NrXFxuIDg3MTpcXHQgKiBAc2I6XFx0XFx0c3VwZXJibG9jayB0byBvcGVyYXRlIG9uXFxuIDg3MjpcXHQgKlxcbiA4NzM6XFx0ICogTWFrZSBzdXJlIHRoYXQgbm8gaW5vZGVzIHdpdGggemVybyByZWZjb3VudCBhcmUgcmV0YWluZWQuICBUaGlzIGlzXFxuIDg3NDpcXHQgKiBjYWxsZWQgYnkgc3VwZXJibG9jayBzaHV0ZG93biBhZnRlciBoYXZpbmcgU0JfQUNUSVZFIGZsYWcgcmVtb3ZlZCxcXG4gODc1OlxcdCAqIHNvIGFueSBpbm9kZSByZWFjaGluZyB6ZXJvIHJlZmNvdW50IGR1cmluZyBvciBhZnRlciB0aGF0IGNhbGwgd2lsbFxcbiA4NzY6XFx0ICogYmUgaW1tZWRpYXRlbHkgZXZpY3RlZC5cXG4gODc3OlxcdCAqL1xcbiA4Nzg6XFx0dm9pZCBldmljdF9pbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4gODc5OlxcdHtcXG4gODgwOlxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XFxuIDg4MTpcXHRcXHRMSVNUX0hFQUQoZGlzcG9zZSk7XFxuIDg4MjpcXHRcXG4gODgzOlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2c2ItXFx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrKTtcXG4gODg0OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoaW5vZGUsIFxcdTAwMjZzYi1cXHUwMDNlc19pbm9kZXMsIGlfc2JfbGlzdCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNTo1MDozMy43NTQ2MzA3NzFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzEwMzMzOTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIGBldmljdChpbm9kZSlgIGZvciBJbm9kZSBSZW1vdmFsKipcblxuSG9sZCBvbiBhIHNlY29uZCEgSSBuZWVkIHRvIGNsYXJpZnkgc29tZXRoaW5nIGFib3V0IGhvdyBpbm9kZXMgYXJlIGhhbmRsZWQuIFRoZSBmdW5jdGlvbiBgZXZpY3QoaW5vZGUpYCBpcyBzdXBwb3NlZCB0byByZW1vdmUgdGhlIGlub2RlIGZyb20gYHNiLVx1MDAzZXNfaW5vZGVzYCwgcmlnaHQ/IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhpcyBpcyB3aGF0J3MgaGFwcGVuaW5nLCBzbyBJIG5lZWQgdG8gdmVyaWZ5IGl0cyBiZWhhdmlvci5cblxuTGV0J3MgZGlnIGludG8gYGV2aWN0KGlub2RlKWAgYW5kIG1ha2Ugc3VyZSBpdCdzIGRvaW5nIHdoYXQgSSBleHBlY3QuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBpdCdzIGNvcnJlY3RseSByZW1vdmluZyBkaXNwb3NlZCBpbm9kZXMgZnJvbSBgc19pbm9kZXNgLiBJJ2xsIGZvY3VzIG9uIHRoZSBhcmVhIGFyb3VuZCBsaW5lIDgwMCB3aXRoaW4gdGhlIGBldmljdChzdHJ1Y3QgaW5vZGUgKmlub2RlKWAgZnVuY3Rpb24uIExldCdzIHNlZSB3aGF0J3MgcmVhbGx5IGdvaW5nIG9uIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjA5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNTo1MDozNi4wNjQ5NjcyMThaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0OTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2lub2RlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzk1LFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzk1OlxcdCAqIEFuIGlub2RlIG11c3QgYWxyZWFkeSBiZSByZW1vdmVkIGZyb20gdGhlIExSVSBsaXN0IGJlZm9yZSBiZWluZyBldmljdGVkIGZyb21cXG4gNzk2OlxcdCAqIHRoZSBjYWNoZS4gVGhpcyBzaG91bGQgb2NjdXIgYXRvbWljYWxseSB3aXRoIHNldHRpbmcgdGhlIElfRlJFRUlORyBzdGF0ZVxcbiA3OTc6XFx0ICogZmxhZywgc28gbm8gaW5vZGVzIGhlcmUgc2hvdWxkIGV2ZXIgYmUgb24gdGhlIExSVSB3aGVuIGJlaW5nIGV2aWN0ZWQuXFxuIDc5ODpcXHQgKi9cXG4gNzk5OlxcdHN0YXRpYyB2b2lkIGV2aWN0KHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIDgwMDpcXHR7XFxuIDgwMTpcXHRcXHRjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyAqb3AgPSBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19vcDtcXG4gODAyOlxcdFxcbiA4MDM6XFx0XFx0QlVHX09OKCEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcXHUwMDI2IElfRlJFRUlORykpO1xcbiA4MDQ6XFx0XFx0QlVHX09OKCFsaXN0X2VtcHR5KFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9scnUpKTtcXG4gODA1OlxcdFxcbiA4MDY6XFx0XFx0aW5vZGVfaW9fbGlzdF9kZWwoaW5vZGUpO1xcbiA4MDc6XFx0XFx0aW5vZGVfc2JfbGlzdF9kZWwoaW5vZGUpO1xcbiA4MDg6XFx0XFxuIDgwOTpcXHRcXHRzcGluX2xvY2soXFx1MDAyNmlub2RlLVxcdTAwM2VpX2xvY2spO1xcbiA4MTA6XFx0XFx0aW5vZGVfd2FpdF9mb3JfbHJ1X2lzb2xhdGluZyhpbm9kZSk7XFxuIDgxMTpcXHRcXG4gODEyOlxcdFxcdC8qXFxuIDgxMzpcXHRcXHQgKiBXYWl0IGZvciBmbHVzaGVyIHRocmVhZCB0byBiZSBkb25lIHdpdGggdGhlIGlub2RlIHNvIHRoYXQgZmlsZXN5c3RlbVxcbiA4MTQ6XFx0XFx0ICogZG9lcyBub3Qgc3RhcnQgZGVzdHJveWluZyBpdCB3aGlsZSB3cml0ZWJhY2sgaXMgc3RpbGwgcnVubmluZy4gU2luY2VcXG4gODE1OlxcdFxcdCAqIHRoZSBpbm9kZSBoYXMgSV9GUkVFSU5HIHNldCwgZmx1c2hlciB0aHJlYWQgd29uJ3Qgc3RhcnQgbmV3IHdvcmsgb25cXG4gODE2OlxcdFxcdCAqIHRoZSBpbm9kZS4gIFdlIGp1c3QgaGF2ZSB0byB3YWl0IGZvciBydW5uaW5nIHdyaXRlYmFjayB0byBmaW5pc2guXFxuIDgxNzpcXHRcXHQgKi9cXG4gODE4OlxcdFxcdGlub2RlX3dhaXRfZm9yX3dyaXRlYmFjayhpbm9kZSk7XFxuIDgxOTpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuIDgyMDpcXHRcXG4gODIxOlxcdFxcdGlmIChvcC1cXHUwMDNlZXZpY3RfaW5vZGUpIHtcXG4gODIyOlxcdFxcdFxcdG9wLVxcdTAwM2VldmljdF9pbm9kZShpbm9kZSk7XFxuIDgyMzpcXHRcXHR9IGVsc2Uge1xcbiA4MjQ6XFx0XFx0XFx0dHJ1bmNhdGVfaW5vZGVfcGFnZXNfZmluYWwoXFx1MDAyNmlub2RlLVxcdTAwM2VpX2RhdGEpO1xcbiA4MjU6XFx0XFx0XFx0Y2xlYXJfaW5vZGUoaW5vZGUpO1xcbiA4MjY6XFx0XFx0fVxcbiA4Mjc6XFx0XFx0aWYgKFNfSVNDSFIoaW5vZGUtXFx1MDAzZWlfbW9kZSkgXFx1MDAyNlxcdTAwMjYgaW5vZGUtXFx1MDAzZWlfY2RldilcXG4gODI4OlxcdFxcdFxcdGNkX2ZvcmdldChpbm9kZSk7XFxuIDgyOTpcXHRcXG4gODMwOlxcdFxcdHJlbW92ZV9pbm9kZV9oYXNoKGlub2RlKTtcXG4gODMxOlxcdFxcbiA4MzI6XFx0XFx0LypcXG4gODMzOlxcdFxcdCAqIFdha2UgdXAgd2FpdGVycyBpbiBfX3dhaXRfb25fZnJlZWluZ19pbm9kZSgpLlxcbiA4MzQ6XFx0XFx0ICpcXG4gODM1OlxcdFxcdCAqIEl0IGlzIGFuIGludmFyaWFudCB0aGF0IGFueSB0aHJlYWQgd2UgbmVlZCB0byB3YWtlIHVwIGlzIGFscmVhZHlcXG4gODM2OlxcdFxcdCAqIGFjY291bnRlZCBmb3IgYmVmb3JlIHJlbW92ZV9pbm9kZV9oYXNoKCkgYWNxdWlyZXMgLVxcdTAwM2VpX2xvY2sgLS0gYm90aFxcbiA4Mzc6XFx0XFx0ICogc2lkZXMgdGFrZSB0aGUgbG9jayBhbmQgc2xlZXAgaXMgYWJvcnRlZCBpZiB0aGUgaW5vZGUgaXMgZm91bmRcXG4gODM4OlxcdFxcdCAqIHVuaGFzaGVkLiBUaHVzIGVpdGhlciB0aGUgc2xlZXBlciB3aW5zIGFuZCBnb2VzIG9mZiBDUFUsIG9yIHJlbW92YWxcXG4gODM5OlxcdFxcdCAqIHdpbnMgYW5kIHRoZSBzbGVlcGVyIGFib3J0cyBhZnRlciB0ZXN0aW5nIHdpdGggdGhlIGxvY2suXFxuIDg0MDpcXHRcXHQgKlxcbiA4NDE6XFx0XFx0ICogVGhpcyBhbHNvIG1lYW5zIHdlIGRvbid0IG5lZWQgYW55IGZlbmNlcyBmb3IgdGhlIGNhbGwgYmVsb3cuXFxuIDg0MjpcXHRcXHQgKi9cXG4gODQzOlxcdFxcdGlub2RlX3dha2VfdXBfYml0KGlub2RlLCBfX0lfTkVXKTtcXG4gODQ0OlxcdFxcdEJVR19PTihpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpICE9IChJX0ZSRUVJTkcgfCBJX0NMRUFSKSk7XFxuIDg0NTpcXHRcXG4gODQ2OlxcdFxcdGRlc3Ryb3lfaW5vZGUoaW5vZGUpO1xcbiA4NDc6XFx0fVxcbiA4NDg6XFx0XFxuIDg0OTpcXHQvKlxcbiA4NTA6XFx0ICogZGlzcG9zZV9saXN0IC0gZGlzcG9zZSBvZiB0aGUgY29udGVudHMgb2YgYSBsb2NhbCBsaXN0XFxuIDg1MTpcXHQgKiBAaGVhZDogdGhlIGhlYWQgb2YgdGhlIGxpc3QgdG8gZnJlZVxcbiA4NTI6XFx0ICpcXG4gODUzOlxcdCAqIERpc3Bvc2UtbGlzdCBnZXRzIGEgbG9jYWwgbGlzdCB3aXRoIGxvY2FsIGlub2RlcyBpbiBpdCwgc28gaXQgZG9lc24ndFxcbiA4NTQ6XFx0ICogbmVlZCB0byB3b3JyeSBhYm91dCBsaXN0IGNvcnJ1cHRpb24gYW5kIFNNUCBsb2Nrcy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6NTA6MzYuMDY1MTM1NDM4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE3MzAxNjg0MDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgaW5vZGUgbGlzdCBoYW5kbGluZyBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgbXkgYXR0ZW50aW9uIGlzIGRyYXduIHRvIGBpbm9kZV9zYl9saXN0X2RlbChpbm9kZSlgLiBSaWdodCwgdGhhdCByZW1vdmVzIGFuIGlub2RlIGZyb20gYHNiLVx1MDAzZXNfaW5vZGVzYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBCdXQgdGhlIGNvbnRleHQgaXMgd2hhdCdzIG1ha2luZyBtZSB1bmVhc3kuIExldCBtZSBzZWUuLi4gdGhlIG9yaWdpbmFsIGNvZGUgaGFkIHRoaXMgbG9vcCB3aXRoIGBzYi1cdTAwM2VzX2lub2RlX2xpc3RfbG9ja2AgaGVsZCwgaXRlcmF0aW5nIHRocm91Z2ggYHNiLVx1MDAzZXNfaW5vZGVzYC4gV2hlbiBgbmVlZF9yZXNjaGVkKClgIHdhcyB0cnVlLCB0aGUgb3JpZ2luYWwgY29kZSBhZGRlZCB0aGUgY3VycmVudCBpbm9kZSB0byBgZGlzcG9zZWAsIHJlbGVhc2VkIHRoZSBsb2NrLCBjYWxsZWQgYGRpc3Bvc2VfbGlzdGAgKHdoaWNoIHdvdWxkIGV2aWN0IHRoZSBpbm9kZSksIGFuZCB0aGVuIHdlbnQgKmJhY2sqIHRvIHRoZSB0b3Agb2YgdGhlIGxpc3QsIGFjcXVpcmluZyB0aGUgbG9jayBhZ2Fpbi5cblxuTm93LCB0aGUgcGF0Y2ggY2hhbmdlcyB0aGUgb3JkZXIuIE5vdywgaXQncyBhZGRpbmcgdGhlIGlub2RlIHRvIGBkaXNwb3NlYCAqYWZ0ZXIqIHRoZSBgbmVlZF9yZXNjaGVkKClgIGNoZWNrIGFuZCB0aGUgYHNwaW5fdW5sb2NrYC4gSG9sZCBvbiBhIHNlY29uZC4uLiBUaGlzIG1lYW5zIHRoYXQgd2hpbGUgYHNiLVx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrYCBpcyAqdW5sb2NrZWQqLCBhbnkgb3RoZXIgdGhyZWFkIGNvdWxkIHBvdGVudGlhbGx5IG1vZGlmeSBgc2ItXHUwMDNlc19pbm9kZXNgISBXaGF0IGhhcHBlbnMgaWYgYW5vdGhlciBpbm9kZSBuZXh0IHRvIGBpbm9kZWAgaXMgZGVsZXRlZCBvciBhIG5ldyBvbmUgaW5zZXJ0ZWQ/IFN1ZGRlbmx5LCB0aGUgaXRlcmF0b3IgaW4gdGhlIGxvb3AgbWlnaHQgYmUgb3BlcmF0aW5nIG9uIGFuIGluY29uc2lzdGVudCBkYXRhIHN0cnVjdHVyZSEgQW5kIHRoaW5rIGFib3V0IHRoZSBjYXNlIG9mIGFuIHVubW91bnQgb3Igc3VwZXJibG9jayBzaHV0ZG93biB3aGVyZSB3ZSdyZSBwcm9iYWJseSBkb2luZyBhIGxvdCBvZiB0aGVzZSBvcGVyYXRpb25zIGNvbmN1cnJlbnRseS4gSXMgYGV2aWN0X2lub2Rlc2Agb25seSBjYWxsZWQgZHVyaW5nIHVubW91bnQsIG9yIGFyZSB0aGVyZSBvdGhlciBwbGFjZXMgaW4gdGhlIGZpbGVzeXN0ZW0gd2hlcmUgdGhpcyBjb3VsZCBoYXBwZW4/IE5lZWQgdG8ga25vdy4gSSBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBldmljdF9pbm9kZXNgIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0MzcsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2ODksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNTo1MDo1My4zNjY4MjI1MjNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyOTQxMDc0OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXZpY3RfaW5vZGVzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3Q9MTE3OT1MT09LX0NSRUFURSBvciBMT09LVVBfUkVOQU1FX1RBUkdFVC5cXG4tLVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3QtMTE4My0qKm1hbmRhdG9yeSoqXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdDoxMTg0OmludmFsaWRhdGVfaW5vZGVzKCkgaXMgZ29uZSB1c2UgZXZpY3RfaW5vZGVzKCkgaW5zdGVhZC5cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0LTExODUtXFxuLS1cXG5mcy9mMmZzL3N1cGVyLmM9NTA3Nz1zdGF0aWMgaW50IGYyZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9mMmZzL3N1cGVyLmMtNTUzNC1cXHQvKiBldmljdCBzb21lIGlub2RlcyBiZWluZyBjYWNoZWQgYnkgR0MgKi9cXG5mcy9mMmZzL3N1cGVyLmM6NTUzNTpcXHRldmljdF9pbm9kZXMoc2IpO1xcbmZzL2YyZnMvc3VwZXIuYy01NTM2LVxcdGYyZnNfdW5yZWdpc3Rlcl9zeXNmcyhzYmkpO1xcbi0tXFxuZnMvZnVzZS92aXJ0aW9fZnMuYz0xNjI3PXN0YXRpYyB2b2lkIHZpcnRpb19mc19jb25uX2Rlc3Ryb3koc3RydWN0IGZ1c2VfbW91bnQgKmZtKVxcbi0tXFxuZnMvZnVzZS92aXJ0aW9fZnMuYy0xNjMyLVxcbmZzL2Z1c2UvdmlydGlvX2ZzLmM6MTYzMzpcXHQvKiBTdG9wIGRheCB3b3JrZXIuIFNvb24gZXZpY3RfaW5vZGVzKCkgd2lsbCBiZSBjYWxsZWQgd2hpY2hcXG5mcy9mdXNlL3ZpcnRpb19mcy5jLTE2MzQtXFx0ICogd2lsbCBmcmVlIGFsbCBtZW1vcnkgcmFuZ2VzIGJlbG9uZ2luZyB0byBhbGwgaW5vZGVzLlxcbi0tXFxuZnMvZ2ZzMi9vcHNfZnN0eXBlLmM9MTcxMT1zdGF0aWMgaW50IGdmczJfbWV0YV9pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvZ2ZzMi9vcHNfZnN0eXBlLmMtMTcyMi0vKipcXG5mcy9nZnMyL29wc19mc3R5cGUuYzoxNzIzOiAqIGdmczJfZXZpY3RfaW5vZGVzIC0gZXZpY3QgaW5vZGVzIGNvb3BlcmF0aXZlbHlcXG5mcy9nZnMyL29wc19mc3R5cGUuYy0xNzI0LSAqIEBzYjogdGhlIHN1cGVyYmxvY2tcXG4tLVxcbmZzL2dmczIvb3BzX2ZzdHlwZS5jLTE3MzQtICpcXG5mcy9nZnMyL29wc19mc3R5cGUuYzoxNzM1OiAqIEZ1bmN0aW9uIGV2aWN0X2lub2RlcygpIHRyaWVzIHRvIGtlZXAgdGhlIHNfaW5vZGVfbGlzdF9sb2NrIGxpc3QgbG9ja2VkIG92ZXJcXG5mcy9nZnMyL29wc19mc3R5cGUuYy0xNzM2LSAqIGEgbG9uZyB0aW1lLCB3aGljaCBwcmV2ZW50cyBvdGhlciBpbm9kZXMgZnJvbSBiZWluZyBldmljdGVkIGNvbmN1cnJlbnRseS5cXG5mcy9nZnMyL29wc19mc3R5cGUuYy0xNzM3LSAqIFRoaXMgcHJlY2x1ZGVzIHRoZSBjb29wZXJhdGl2ZSBiZWhhdmlvciB3ZSBhcmUgbG9va2luZyBmb3IuICBUaGlzIHNwZWNpYWxcXG5mcy9nZnMyL29wc19mc3R5cGUuYzoxNzM4OiAqIHZlcnNpb24gb2YgZXZpY3RfaW5vZGVzKCkgYXZvaWRzIHRoYXQuXFxuZnMvZ2ZzMi9vcHNfZnN0eXBlLmMtMTczOS0gKlxcbi0tXFxuZnMvZ2ZzMi9vcHNfZnN0eXBlLmMtMTc0MS0gKi9cXG5mcy9nZnMyL29wc19mc3R5cGUuYzoxNzQyOnN0YXRpYyB2b2lkIGdmczJfZXZpY3RfaW5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvZ2ZzMi9vcHNfZnN0eXBlLmMtMTc0My17XFxuLS1cXG5mcy9nZnMyL29wc19mc3R5cGUuYz0xNzcxPXN0YXRpYyB2b2lkIGdmczJfa2lsbF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvZ2ZzMi9vcHNfZnN0eXBlLmMtMTc4Ny1cXHRzZXRfYml0KFNERl9LSUxMLCBcXHUwMDI2c2RwLVxcdTAwM2VzZF9mbGFncyk7XFxuZnMvZ2ZzMi9vcHNfZnN0eXBlLmM6MTc4ODpcXHRnZnMyX2V2aWN0X2lub2RlcyhzYik7XFxuZnMvZ2ZzMi9vcHNfZnN0eXBlLmMtMTc4OS1cXG4tLVxcbmZzL2lub2RlLmM9ODU2PXN0YXRpYyB2b2lkIGRpc3Bvc2VfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbi0tXFxuZnMvaW5vZGUuYy04NjktLyoqXFxuZnMvaW5vZGUuYzo4NzA6ICogZXZpY3RfaW5vZGVzXFx0LSBldmljdCBhbGwgZXZpY3RhYmxlIGlub2RlcyBmb3IgYSBzdXBlcmJsb2NrXFxuZnMvaW5vZGUuYy04NzEtICogQHNiOlxcdFxcdHN1cGVyYmxvY2sgdG8gb3BlcmF0ZSBvblxcbi0tXFxuZnMvaW5vZGUuYy04NzctICovXFxuZnMvaW5vZGUuYzo4Nzg6dm9pZCBldmljdF9pbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9pbm9kZS5jLTg3OS17XFxuLS1cXG5mcy9pbm9kZS5jLTkxOC19XFxuZnMvaW5vZGUuYzo5MTk6RVhQT1JUX1NZTUJPTF9HUEwoZXZpY3RfaW5vZGVzKTtcXG5mcy9pbm9kZS5jLTkyMC1cXG4tLVxcbmZzL3NtYi9jbGllbnQvZmlsZS5jPTM3NT1jaWZzX21hcmtfb3Blbl9maWxlc19pbnZhbGlkKHN0cnVjdCBjaWZzX3Rjb24gKnRjb24pXFxuLS1cXG5mcy9zbWIvY2xpZW50L2ZpbGUuYy00MDgtXFx0LypcXG5mcy9zbWIvY2xpZW50L2ZpbGUuYzo0MDk6XFx0ICogQkIgQWRkIGNhbGwgdG8gZXZpY3RfaW5vZGVzKHNiKSBmb3IgYWxsIHN1cGVyYmxvY2tzIG1vdW50ZWRcXG5mcy9zbWIvY2xpZW50L2ZpbGUuYy00MTAtXFx0ICogdG8gdGhpcyB0Y29uLlxcbi0tXFxuZnMvc3VwZXIuYz03NDE9dm9pZCBnZW5lcmljX3NodXRkb3duX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9zdXBlci5jLTc1NC1cXHRcXHQvKiBFdmljdCBhbGwgaW5vZGVzIHdpdGggemVybyByZWZjb3VudC4gKi9cXG5mcy9zdXBlci5jOjc1NTpcXHRcXHRldmljdF9pbm9kZXMoc2IpO1xcbmZzL3N1cGVyLmMtNzU2LVxcbi0tXFxuZnMvc3VwZXIuYz0xNTA3PXN0YXRpYyB2b2lkIGZzX2JkZXZfbWFya19kZWFkKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJvb2wgc3VycHJpc2UpXFxuLS1cXG5mcy9zdXBlci5jLTE1MjQtXFx0XFx0XFx0XFx0c2hyaW5rX2RjYWNoZV9zYihzYik7XFxuZnMvc3VwZXIuYzoxNTI1OlxcdFxcdFxcdFxcdGV2aWN0X2lub2RlcyhzYik7XFxuZnMvc3VwZXIuYy0xNTI2LVxcdFxcdFxcdFxcdGlmIChzYi1cXHUwMDNlc19vcC1cXHUwMDNlc2h1dGRvd24pXFxuLS1cXG5mcy94ZnMveGZzX2xvZy5jPTY2Mj14ZnNfbG9nX21vdW50X2ZpbmlzaChcXG4tLVxcbmZzL3hmcy94ZnNfbG9nLmMtNjk3LVxcdG1wLVxcdTAwM2VtX3N1cGVyLVxcdTAwM2VzX2ZsYWdzIFxcdTAwMjY9IH5TQl9BQ1RJVkU7XFxuZnMveGZzL3hmc19sb2cuYzo2OTg6XFx0ZXZpY3RfaW5vZGVzKG1wLVxcdTAwM2VtX3N1cGVyKTtcXG5mcy94ZnMveGZzX2xvZy5jLTY5OS1cXG4tLVxcbmluY2x1ZGUvbGludXgvZnMuaD0zMDEzPXVuc2lnbmVkIGludCBnZXRfbmV4dF9pbm8odm9pZCk7XFxuaW5jbHVkZS9saW51eC9mcy5oOjMwMTQ6dm9pZCBldmljdF9pbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XFxuaW5jbHVkZS9saW51eC9mcy5oLTMwMTUtdm9pZCBkdW1wX21hcHBpbmcoY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKik7XFxuLS1cXG5zZWN1cml0eS9sYW5kbG9jay9mcy5jPTEzNjQ9c3RhdGljIHZvaWQgaG9va19pbm9kZV9mcmVlX3NlY3VyaXR5X3JjdSh2b2lkICppbm9kZV9zZWN1cml0eSlcXG4tLVxcbnNlY3VyaXR5L2xhbmRsb2NrL2ZzLmMtMTM4MC0gKlxcbnNlY3VyaXR5L2xhbmRsb2NrL2ZzLmM6MTM4MTogKiBDZi4gZnNub3RpZnlfdW5tb3VudF9pbm9kZXMoKSBhbmQgZXZpY3RfaW5vZGVzKClcXG5zZWN1cml0eS9sYW5kbG9jay9mcy5jLTEzODItICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA1OjUwOjU1LjY2MDkzNDczM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMjc1MjEzNDk1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25jZXJucyB3aXRoIGBldmljdF9pbm9kZXNgIGFuZCBQb3RlbnRpYWwgQ29uY3VycmVuY3kgSXNzdWVzKipcblxuT2theSwgc28gYGV2aWN0X2lub2Rlc2AgaXMgYSBwcmV0dHkgaW1wb3J0YW50IGZ1bmN0aW9uLiBJJ20gc2VlaW5nIHRoYXQgaXQgZ2V0cyBjYWxsZWQgaW4gYGdlbmVyaWNfc2h1dGRvd25fc3VwZXJgLCB3aGljaCBpcyBiYXNpY2FsbHkgZXZlcnkgZmlsZXN5c3RlbSdzIHVubW91bnQgcm91dGluZS4gSXQgYWxzbyBwb3BzIHVwIGluIHNvbWUgb3RoZXIgY3JpdGljYWwgcGxhY2VzLCBsaWtlIGBmMmZzX2ZpbGxfc3VwZXJgLCBgZnNfYmRldl9tYXJrX2RlYWRgLCBhbmQgYHhmc19sb2dfbW91bnRfZmluaXNoYC4gVGhhdCBtZWFucyBpdCdzIGZ1bmRhbWVudGFsIHRvIHZhcmlvdXMgYXNwZWN0cyBvZiBmaWxlc3lzdGVtIG1hbmFnZW1lbnQsIGZyb20gaW5pdGlhbCBtb3VudGluZyB0byBjbGVhbmluZyB1cCBvbiB1bm1vdW50IG9yIGluIGNhc2VzIG9mIGRldmljZSBkZWF0aC5cblxuTm93LCBJJ20gdGFraW5nIGEgY2xvc2UgbG9vayBhdCBob3cgaXQgaXRlcmF0ZXMgdGhyb3VnaCBpbm9kZXMuIFRoZSBjb2RlIHVzZXMgYGxpc3RfZm9yX2VhY2hfZW50cnkoaW5vZGUsIFx1MDAyNnNiLVx1MDAzZXNfaW5vZGVzLCBpX3NiX2xpc3QpYC4gVGhhdCBgaW5vZGVgIHRoZXJlPyBUaGF0J3MgdGhlIGxvb3AgY3Vyc29yLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGhhcHBlbnMgaWYgdGhhdCBpdGVyYXRvciBpcyBtb2RpZmllZCBtaWQtZmxpZ2h0LlxuXG5BaGEsIGhlcmUncyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBJIHNlZSBhIGBuZWVkX3Jlc2NoZWQoKWAgY2hlY2sgd2l0aGluIHRoZSBsb29wLiBXaGVuIGl0J3MgdHJ1ZSwgdGhlIGxvY2sgYHNiLVx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrYCBpcyBkcm9wcGVkLCBgY29uZF9yZXNjaGVkKClgIGlzIGNhbGxlZCwgc29tZSBraW5kIG9mIGRpc3Bvc2FsIGxpc3QgaXMgaGFuZGxlZCwgYW5kICp0aGVuKiB0aGUgbG9jayBpcyByZWFjcXVpcmVkLiBUaGUga2V5IGhlcmUgaXM6XG5cbmBzcGluX3VubG9jayhcdTAwMjZzYi1cdTAwM2VzX2lub2RlX2xpc3RfbG9jayk7YFxuYGNvbmRfcmVzY2hlZCgpO2BcbmBkaXNwb3NlX2xpc3QoXHUwMDI2ZGlzcG9zZSk7YFxuYHNwaW5fbG9jayhcdTAwMjZzYi1cdTAwM2VzX2lub2RlX2xpc3RfbG9jayk7YFxuYGxpc3RfYWRkKFx1MDAyNmlub2RlLVx1MDAzZWlfbHJ1LCBcdTAwMjZkaXNwb3NlKTtgXG5cbkhhbmcgb24gYSBzZWNvbmQhIFRoaXMgYGlub2RlYCBsaXN0IG1hbmlwdWxhdGlvbiBvY2N1cnMgKmFmdGVyKiB0aGUgbG9jayBpcyBkcm9wcGVkLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgc2FmZXR5IG9mIGBpbm9kZS1cdTAwM2VpX3NiX2xpc3QubmV4dGAgZHVyaW5nIHRoYXQgcGVyaW9kISBJcyB0aGF0IGRhdGEgc3RydWN0dXJlIHByb3RlY3RlZCBjb3JyZWN0bHk/IElzIHNvbWV0aGluZyBlbHNlIG1vZGlmeWluZyB0aGUgYGlfc2JfbGlzdGAgd2hpbGUgd2UgYXJlIGluIHRoZSBgbmVlZF9yZXNjaGVkYCBwYXRoIGFuZCB0aGUgbG9jayBpcyBkcm9wcGVkPyBUaGlzIGNvdWxkIGxlYWQgdG8gYWxsIHNvcnRzIG9mIG5hc3R5IGNvcnJ1cHRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSBhcmUgYWxsb3dlZCB0byB0b3VjaCB0aGF0IGxpc3QgZHVyaW5nIHRoZSByZXNjaGVkdWxpbmcgcHJvY2Vzcy4gSSBuZWVkIHRvIGRpZyBpbnRvIGBpbm9kZV9zYl9saXN0X2RlbChpbm9kZSlgIGFuZCBmaW5kIG91dCBleGFjdGx5IHdobyBpcyBtb2RpZnlpbmcgYHNfaW5vZGVzYCEgTGV0J3Mgc2VlIHdobyBpcyBtb2RpZnlpbmcgYHNfaW5vZGVzYCEgSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGVyZSBpcyBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGluIHRoZSBsb29wIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDExOCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNTo1MTowOC40MTMwNzI0MTNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3OTE2ODYxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpX3NiX2xpc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Ryb3BfY2FjaGVzLmM9MTk9c3RhdGljIHZvaWQgZHJvcF9wYWdlY2FjaGVfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqdW51c2VkKVxcbi0tXFxuZnMvZHJvcF9jYWNoZXMuYy0yMy1cXHRzcGluX2xvY2soXFx1MDAyNnNiLVxcdTAwM2VzX2lub2RlX2xpc3RfbG9jayk7XFxuZnMvZHJvcF9jYWNoZXMuYzoyNDpcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGlub2RlLCBcXHUwMDI2c2ItXFx1MDAzZXNfaW5vZGVzLCBpX3NiX2xpc3QpIHtcXG5mcy9kcm9wX2NhY2hlcy5jLTI1LVxcdFxcdHNwaW5fbG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuLS1cXG5mcy9nZnMyL29wc19mc3R5cGUuYz0xNzQyPXN0YXRpYyB2b2lkIGdmczJfZXZpY3RfaW5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9nZnMyL29wc19mc3R5cGUuYy0xNzQ5LVxcdHNwaW5fbG9jayhcXHUwMDI2c2ItXFx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrKTtcXG5mcy9nZnMyL29wc19mc3R5cGUuYzoxNzUwOlxcdGxpc3RfZm9yX2VhY2hfZW50cnkoaW5vZGUsIFxcdTAwMjZzYi1cXHUwMDNlc19pbm9kZXMsIGlfc2JfbGlzdCkge1xcbmZzL2dmczIvb3BzX2ZzdHlwZS5jLTE3NTEtXFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9sb2NrKTtcXG4tLVxcbmZzL2lub2RlLmMtMzktICogaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrIHByb3RlY3RzOlxcbmZzL2lub2RlLmM6NDA6ICogICBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19pbm9kZXMsIGlub2RlLVxcdTAwM2VpX3NiX2xpc3RcXG5mcy9pbm9kZS5jLTQxLSAqIGJkaS1cXHUwMDNld2IubGlzdF9sb2NrIHByb3RlY3RzOlxcbi0tXFxuZnMvaW5vZGUuYz00OTM9dm9pZCBpbm9kZV9pbml0X29uY2Uoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2lub2RlLmMtNTAwLVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9scnUpO1xcbmZzL2lub2RlLmM6NTAxOlxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9zYl9saXN0KTtcXG5mcy9pbm9kZS5jLTUwMi1cXHRfX2FkZHJlc3Nfc3BhY2VfaW5pdF9vbmNlKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9kYXRhKTtcXG4tLVxcbmZzL2lub2RlLmM9NjM0PXZvaWQgaW5vZGVfc2JfbGlzdF9hZGQoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2lub2RlLmMtNjM4LVxcdHNwaW5fbG9jayhcXHUwMDI2c2ItXFx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrKTtcXG5mcy9pbm9kZS5jOjYzOTpcXHRsaXN0X2FkZChcXHUwMDI2aW5vZGUtXFx1MDAzZWlfc2JfbGlzdCwgXFx1MDAyNnNiLVxcdTAwM2VzX2lub2Rlcyk7XFxuZnMvaW5vZGUuYy02NDAtXFx0c3Bpbl91bmxvY2soXFx1MDAyNnNiLVxcdTAwM2VzX2lub2RlX2xpc3RfbG9jayk7XFxuLS1cXG5mcy9pbm9kZS5jPTY0ND1zdGF0aWMgaW5saW5lIHZvaWQgaW5vZGVfc2JfbGlzdF9kZWwoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2lub2RlLmMtNjQ3LVxcbmZzL2lub2RlLmM6NjQ4OlxcdGlmICghbGlzdF9lbXB0eShcXHUwMDI2aW5vZGUtXFx1MDAzZWlfc2JfbGlzdCkpIHtcXG5mcy9pbm9kZS5jLTY0OS1cXHRcXHRzcGluX2xvY2soXFx1MDAyNnNiLVxcdTAwM2VzX2lub2RlX2xpc3RfbG9jayk7XFxuZnMvaW5vZGUuYzo2NTA6XFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2aW5vZGUtXFx1MDAzZWlfc2JfbGlzdCk7XFxuZnMvaW5vZGUuYy02NTEtXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnNiLVxcdTAwM2VzX2lub2RlX2xpc3RfbG9jayk7XFxuLS1cXG5mcy9pbm9kZS5jPTg3OD12b2lkIGV2aWN0X2lub2RlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvaW5vZGUuYy04ODMtXFx0c3Bpbl9sb2NrKFxcdTAwMjZzYi1cXHUwMDNlc19pbm9kZV9saXN0X2xvY2spO1xcbmZzL2lub2RlLmM6ODg0OlxcdGxpc3RfZm9yX2VhY2hfZW50cnkoaW5vZGUsIFxcdTAwMjZzYi1cXHUwMDNlc19pbm9kZXMsIGlfc2JfbGlzdCkge1xcbmZzL2lub2RlLmMtODg1LVxcdFxcdGlmIChpY291bnRfcmVhZF9vbmNlKGlub2RlKSlcXG4tLVxcbmZzL2lub2RlLmM9MTI5Nj1zdHJ1Y3QgaW5vZGUgKmlub2RlX2luc2VydDUoc3RydWN0IGlub2RlICppbm9kZSwgdTY0IGhhc2h2YWwsXFxuLS1cXG5mcy9pbm9kZS5jLTEzNDMtXFx0ICogQWRkIGlub2RlIHRvIHRoZSBzYiBsaXN0IGlmIGl0J3Mgbm90IGFscmVhZHkuIEl0IGhhcyBJX05FVyBhdCB0aGlzXFxuZnMvaW5vZGUuYzoxMzQ0OlxcdCAqIHBvaW50LCBzbyBpdCBzaG91bGQgYmUgc2FmZSB0byB0ZXN0IGlfc2JfbGlzdCBsb2NrbGVzc2x5LlxcbmZzL2lub2RlLmMtMTM0NS1cXHQgKi9cXG5mcy9pbm9kZS5jOjEzNDY6XFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNmlub2RlLVxcdTAwM2VpX3NiX2xpc3QpKVxcbmZzL2lub2RlLmMtMTM0Ny1cXHRcXHRpbm9kZV9zYl9saXN0X2FkZChpbm9kZSk7XFxuLS1cXG5mcy9xdW90YS9kcXVvdC5jPTEwNDc9c3RhdGljIGludCBhZGRfZHF1b3RfcmVmKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKVxcbi0tXFxuZnMvcXVvdGEvZHF1b3QuYy0xMDU1LVxcdHNwaW5fbG9jayhcXHUwMDI2c2ItXFx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrKTtcXG5mcy9xdW90YS9kcXVvdC5jOjEwNTY6XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShpbm9kZSwgXFx1MDAyNnNiLVxcdTAwM2VzX2lub2RlcywgaV9zYl9saXN0KSB7XFxuZnMvcXVvdGEvZHF1b3QuYy0xMDU3LVxcdFxcdHNwaW5fbG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuLS1cXG5mcy9xdW90YS9kcXVvdC5jPTExMDQ9c3RhdGljIHZvaWQgcmVtb3ZlX2RxdW90X3JlZihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSlcXG4tLVxcbmZzL3F1b3RhL2RxdW90LmMtMTExMS1cXHRzcGluX2xvY2soXFx1MDAyNnNiLVxcdTAwM2VzX2lub2RlX2xpc3RfbG9jayk7XFxuZnMvcXVvdGEvZHF1b3QuYzoxMTEyOlxcdGxpc3RfZm9yX2VhY2hfZW50cnkoaW5vZGUsIFxcdTAwMjZzYi1cXHUwMDNlc19pbm9kZXMsIGlfc2JfbGlzdCkge1xcbmZzL3F1b3RhL2RxdW90LmMtMTExMy1cXHRcXHQvKlxcbi0tXFxuZnMvc3VwZXIuYz03NDE9dm9pZCBnZW5lcmljX3NodXRkb3duX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9zdXBlci5jLTc4Ny1cXHRcXHRcXHRzcGluX2xvY2soXFx1MDAyNnNiLVxcdTAwM2VzX2lub2RlX2xpc3RfbG9jayk7XFxuZnMvc3VwZXIuYzo3ODg6XFx0XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShpbm9kZSwgXFx1MDAyNnNiLVxcdTAwM2VzX2lub2RlcywgaV9zYl9saXN0KSB7XFxuZnMvc3VwZXIuYy03ODktXFx0XFx0XFx0XFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBWRlNfUFRSX1BPSVNPTjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6NTE6MDguNTkyMjQ3NDU0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjY2NjgxNjczNTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFBvdGVudGlhbCBMaXN0IENvcnJ1cHRpb24gaW4gYGV2aWN0X2lub2Rlc2AqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGBldmljdF9pbm9kZXNgIGluIGBmcy9pbm9kZS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBwYXJ0IHdoZXJlIGl0IGl0ZXJhdGVzIHRocm91Z2ggaW5vZGVzIG9uIGEgc3VwZXJibG9jayAoYHNiYCkgYW5kIGV2aWN0cyB0aGVtLiBJIHNlZSBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBpbnZvbHZpbmcgYGlub2RlX3NiX2xpc3RfZGVsKClgIGFuZCB0aGUgZHJvcHBpbmcgb2YgdGhlIGBzX2lub2RlX2xpc3RfbG9ja2AuXG5cblRoZSBjb2RlIHNldHMgaW5vZGVzIHRvIGBJX0ZSRUVJTkdgLCBhZGRzIHRoZW0gdG8gYSBcImRpc3Bvc2VcIiBsaXN0LCBhbmQgdGhlbiwgaWYgYSBgbmVlZF9yZXNjaGVkKClgIGNhbGwgaXMgbmVlZGVkLCBpdCByZWxlYXNlcyB0aGUgYHNfaW5vZGVfbGlzdF9sb2NrYCwgY2FsbHMgYGNvbmRfcmVzY2hlZCgpYCwgdGhlbiBjYWxscyBgZGlzcG9zZV9saXN0KFx1MDAyNmRpc3Bvc2UpYC5cblxuSGVyZSdzIHRoZSBwcm9ibGVtOiBgZGlzcG9zZV9saXN0YCBjYWxscyBgZXZpY3QoKWAgb24gdGhlIGlub2RlLCB3aGljaCBpbiB0dXJuIGNhbGxzIGBpbm9kZV9zYl9saXN0X2RlbCgpYC4gVGhpcyBmdW5jdGlvbiAqYWNxdWlyZXMqIHRoZSBgc19pbm9kZV9saXN0X2xvY2tgIHRvIHJlbW92ZSB0aGUgaW5vZGUgZnJvbSB0aGUgc3VwZXJibG9jaydzIGlub2RlIGxpc3QgKGBpX3NiX2xpc3RgKS5cblxuTm93LCB0aGUgaXNzdWUgaXMgdGhpczogQmV0d2VlbiB3aGVuIHRoZSBsb2NrIGlzICpyZWxlYXNlZCogaW4gYGV2aWN0X2lub2Rlc2AgYW5kIHdoZW4gaXQncyByZS1hY3F1aXJlZCBpbnNpZGUgYGlub2RlX3NiX2xpc3RfZGVsKClgLCBhbm90aGVyIHRocmVhZCBjb3VsZCBiZSBkb2luZyBhbGwgc29ydHMgb2YgdGhpbmdzIHdpdGggaW5vZGVzLiBJdCBjb3VsZCBiZSBjYWxsaW5nIGBpcHV0KClgLCB3aGljaCBjb3VsZCBsZWFkIHRvIGNvbmN1cnJlbnQgY2FsbHMgdG8gYGV2aWN0KClgIGFuZCB1bHRpbWF0ZWx5IGBpbm9kZV9zYl9saXN0X2RlbCgpYCBvbiBhIGRpZmZlcmVudCBpbm9kZS5cblxuU3BlY2lmaWNhbGx5LCB3aGlsZSBgZXZpY3RfaW5vZGVzYCBpcyBpdGVyYXRpbmcgd2l0aCBgbGlzdF9uZXh0X2VudHJ5YCwgYnV0IHdoaWxlIGl0IHJlbGVhc2VkIHRoZSBsb2NrIGluIGBpbm9kZWAgYW5kIHNldCBgSV9GUkVFSU5HYCB0byBgQmAsIGFuZCB0aGVuIG90aGVyIHRocmVhZHMgY291bGQgYmUgZnJlZWluZyBgQi1cdTAwM2VpX3NiX2xpc3QubmV4dGAsIHdoaWNoIGlzIHdoYXQgdGhlIGN1cnJlbnQgaXRlcmF0aW9uIG9mIGBldmljdF9pbm9kZXNgIGlzIGFib3V0IHRvIGxvb2sgYXQuIFRoaXMgbWlnaHQgY2F1c2UgYGxpc3RfbmV4dF9lbnRyeWAgdG8gYWNjZXNzIGZyZWVkIG1lbW9yeSBvciBhIG1vZGlmaWVkIGxpc3QgZW50cnkuXG5cblRoaXMgbWVhbnMgd2UgY291bGQgaGF2ZSBhIHVzZS1hZnRlci1mcmVlIHNpdHVhdGlvbiwgYSBsaXN0IGNvcnJ1cHRpb24sIG9yIHdvcnNlISBUaGUgY29tbWVudCAqdHJpZXMqIHRvIGV4cGxhaW4gdGhlIHJhdGlvbmFsZSBidXQgaXQgZG9lc24ndCBjb25zaWRlciAqdGhpcyogcG90ZW50aWFsIGNvbmZsaWN0LiBUaGUgY29kZSBhdHRlbXB0cyB0byBtaXRpZ2F0ZSB0aGlzIHdpdGggYElfRlJFRUlOR2AsIGJ1dCBpdCdzIG5vdCBlbm91Z2ggdG8gY292ZXIgdGhlIGRlc2NyaWJlZCBjb25mbGljdC5cblxuQ3J1Y2lhbGx5LCBgZXZpY3RfaW5vZGVzYCAqaXMqIHJlYWNoYWJsZSDigJMgaXQncyBjYWxsZWQgZHVyaW5nIGZpbGVzeXN0ZW0gdW5tb3VudHMgYW5kIHNodXRkb3duLiBTeXprYWxsZXIgaXMgY2FwYWJsZSBvZiB0cmlnZ2VyaW5nIHRoaXMgY29kZSBwYXRoLlxuXG5Pa2F5LCBsZXQncyBjb25maXJtOlxuXG4xLiAgKipXb3J0aEZ1enppbmc9dHJ1ZSoqOiBZZXMhIFRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaW4gYSBjb3JlIFZGUyBmdW5jdGlvbiAoYGV2aWN0X2lub2Rlc2ApIGNhbGxlZCBkdXJpbmcgdW5tb3VudHMuIFRoaXMgaW52b2x2ZXMgbG9naWMgYXJvdW5kIG1lbW9yeSBtYW5hZ2VtZW50LCBsb2NraW5nLCBhbmQgVkZTLCBtYWtpbmcgaXQgcmlwZSBmb3IgZnV6emluZy5cbjIuICAqKkZvY3VzU3ltYm9scyoqOiBUaGUgcHJpbWFyeSBmb2N1cyBpcyBgZXZpY3RfaW5vZGVzYC4gVGhlIHBhdGNoIGRpcmVjdGx5IG1vZGlmaWVzIHRoaXMgZnVuY3Rpb24uXG5cblRoZXJlZm9yZSwgdGhlIHRhcmdldCBoZXJlIGlzIGZ1enppbmcgYXJvdW5kIGBldmljdF9pbm9kZXNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjI5NywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6NTI6MTUuMjczOTIzOTgzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njg2MjAzMzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGlzcG9zZV9saXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2lub2RlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW5vZGUuYz03OTk9c3RhdGljIHZvaWQgZXZpY3Qoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2lub2RlLmMtODQ5LS8qXFxuZnMvaW5vZGUuYzo4NTA6ICogZGlzcG9zZV9saXN0IC0gZGlzcG9zZSBvZiB0aGUgY29udGVudHMgb2YgYSBsb2NhbCBsaXN0XFxuZnMvaW5vZGUuYy04NTEtICogQGhlYWQ6IHRoZSBoZWFkIG9mIHRoZSBsaXN0IHRvIGZyZWVcXG4tLVxcbmZzL2lub2RlLmMtODU1LSAqL1xcbmZzL2lub2RlLmM6ODU2OnN0YXRpYyB2b2lkIGRpc3Bvc2VfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbmZzL2lub2RlLmMtODU3LXtcXG4tLVxcbmZzL2lub2RlLmM9ODc4PXZvaWQgZXZpY3RfaW5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9pbm9kZS5jLTkwOS1cXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG5mcy9pbm9kZS5jOjkxMDpcXHRcXHRcXHRkaXNwb3NlX2xpc3QoXFx1MDAyNmRpc3Bvc2UpO1xcbmZzL2lub2RlLmMtOTExLVxcdFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2c2ItXFx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrKTtcXG4tLVxcbmZzL2lub2RlLmMtOTE2LVxcbmZzL2lub2RlLmM6OTE3OlxcdGRpc3Bvc2VfbGlzdChcXHUwMDI2ZGlzcG9zZSk7XFxuZnMvaW5vZGUuYy05MTgtfVxcbi0tXFxuZnMvaW5vZGUuYz05MzI9c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBpbm9kZV9scnVfaXNvbGF0ZShzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLFxcbi0tXFxuZnMvaW5vZGUuYy0xMDAwLSAqIHRvIHRyaW0gZnJvbSB0aGUgTFJVLiBJbm9kZXMgdG8gYmUgZnJlZWQgYXJlIG1vdmVkIHRvIGEgdGVtcG9yYXJ5IGxpc3QgYW5kXFxuZnMvaW5vZGUuYzoxMDAxOiAqIHRoZW4gYXJlIGZyZWVkIG91dHNpZGUgaW5vZGVfbG9jayBieSBkaXNwb3NlX2xpc3QoKS5cXG5mcy9pbm9kZS5jLTEwMDItICovXFxuZnMvaW5vZGUuYz0xMDAzPWxvbmcgcHJ1bmVfaWNhY2hlX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXFxuLS1cXG5mcy9pbm9kZS5jLTEwMDktXFx0XFx0XFx0XFx0ICAgICBpbm9kZV9scnVfaXNvbGF0ZSwgXFx1MDAyNmZyZWVhYmxlKTtcXG5mcy9pbm9kZS5jOjEwMTA6XFx0ZGlzcG9zZV9saXN0KFxcdTAwMjZmcmVlYWJsZSk7XFxuZnMvaW5vZGUuYy0xMDExLVxcdHJldHVybiBmcmVlZDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6NTI6MTUuNzQyNTUzOTg3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMxMjczOTMxMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGJlZW4gY2hhbmdlZCBhbmQgd2hlcmUuIEkgc2VlIGBkaXNwb3NlX2xpc3RgIGlzIHN0YXRpYywgdXNlZCB3aXRoaW4gYGV2aWN0X2lub2Rlc2AgYW5kIGBwcnVuZV9pY2FjaGVfc2JgLiBCdXQsIHRoZSBrZXkgbW9kaWZpY2F0aW9uIGlzIGFjdHVhbGx5IGluIGBldmljdF9pbm9kZXNgIGl0c2VsZiwgd2hpY2gsIGltcG9ydGFudGx5LCBpcyAqbm90KiBzdGF0aWMuIEkgbmVlZCB0byBuYWlsIGRvd24gZXhhY3RseSB3aGljaCBmdW5jdGlvbnMgYXJlIGFmZmVjdGVkIGZvciB0aGlzIHJldmlldywgc28gSSdtIGFza2luZyBteXNlbGYsIGNhbiBJIGluY2x1ZGUgYGdlbmVyaWNfc2h1dGRvd25fc3VwZXJgIGFzIHdlbGwsIG9yIGlzIGl0IGp1c3QgYGV2aWN0X2lub2Rlc2AgdGhhdCdzIHJlbGV2YW50IGhlcmU/IFRoZSBkb2N1bWVudGF0aW9uIHNheXMgdG8gZm9jdXMgb24gZnVuY3Rpb25zIGltcGxlbWVudGluZyB0aGUgYWx0ZXJlZCBsb2dpYyBkaXJlY3RseSwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cy4gVGhhdCBtYWtlcyBpdCBwcmV0dHkgY2xlYXI6IGBldmljdF9pbm9kZXNgIGlzIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UuXG5cbk5vdywganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkgc2hvdWxkIGNoZWNrIHRoYXQgbm90aGluZyBlbHNlIGluIHRoZSBzdXJyb3VuZGluZyBjb2RlIGhhcyBiZWVuIHRvdWNoZWQuIEl0IGxvb2tzIGxpa2UgaXQncyBqdXN0IGBldmljdF9pbm9kZXNgLiBHb29kLiBOZXh0LCBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlc2UgY2hhbmdlcyBhcmUgY29udGluZ2VudCBvbiBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIHNob3VsZCBjaGVjayBgZnMvaW5vZGUuY2Agc3BlY2lmaWNhbGx5LCBhbmQgc2VlIGlmIHRoZSBjaGFuZ2VzIHRvIGBldmljdF9pbm9kZXNgIGFyZSBjb25kaXRpb25hbCBvbiBhbnl0aGluZy4gTGV0J3Mgc2VlIHdoYXQgYGZzL01ha2VmaWxlYCBzYXlzIGFyb3VuZCBgaW5vZGUub2AuIFRoYXQgc2hvdWxkIHRlbGwgbWUgaWYgdGhlcmUgYXJlIGFueSBidWlsZC10aW1lIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDY1LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA1OjUyOjE4Ljg2OTk0OTcwMloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc3NDk5NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5vZGVcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzLzlwL01ha2VmaWxlPTI9b2JqLSQoQ09ORklHXzlQX0ZTKSA6PSA5cC5vXFxuLS1cXG5mcy85cC9NYWtlZmlsZS01LVxcdHZmc19zdXBlci5vIFxcXFxcXG5mcy85cC9NYWtlZmlsZTo2OlxcdHZmc19pbm9kZS5vIFxcXFxcXG5mcy85cC9NYWtlZmlsZS03LVxcdHZmc19pbm9kZV9kb3RsLm8gXFxcXFxcbi0tXFxuZnMvTWFrZWZpbGU9MTA9b2JqLXkgOj1cXHRvcGVuLm8gcmVhZF93cml0ZS5vIGZpbGVfdGFibGUubyBzdXBlci5vIFxcXFxcXG5mcy9NYWtlZmlsZS0xMS1cXHRcXHRjaGFyX2Rldi5vIHN0YXQubyBleGVjLm8gcGlwZS5vIG5hbWVpLm8gZmNudGwubyBcXFxcXFxuZnMvTWFrZWZpbGU6MTI6XFx0XFx0aW9jdGwubyByZWFkZGlyLm8gc2VsZWN0Lm8gZGNhY2hlLm8gaW5vZGUubyBcXFxcXFxuZnMvTWFrZWZpbGU6MTM6XFx0XFx0YXR0ci5vIGJhZF9pbm9kZS5vIGZpbGUubyBmaWxlc3lzdGVtcy5vIG5hbWVzcGFjZS5vIFxcXFxcXG5mcy9NYWtlZmlsZS0xNC1cXHRcXHRzZXFfZmlsZS5vIHhhdHRyLm8gbGliZnMubyBmcy13cml0ZWJhY2subyBcXFxcXFxuLS1cXG5mcy9hZGZzL01ha2VmaWxlPTY9b2JqLSQoQ09ORklHX0FERlNfRlMpICs9IGFkZnMub1xcbmZzL2FkZnMvTWFrZWZpbGUtNy1cXG5mcy9hZGZzL01ha2VmaWxlOjg6YWRmcy1vYmpzIDo9IGRpci5vIGRpcl9mLm8gZGlyX2ZwbHVzLm8gZmlsZS5vIGlub2RlLm8gbWFwLm8gc3VwZXIub1xcbi0tXFxuZnMvYWZmcy9NYWtlZmlsZT04PW9iai0kKENPTkZJR19BRkZTX0ZTKSArPSBhZmZzLm9cXG5mcy9hZmZzL01ha2VmaWxlLTktXFxuZnMvYWZmcy9NYWtlZmlsZToxMDphZmZzLW9ianMgOj0gc3VwZXIubyBuYW1laS5vIGlub2RlLm8gZmlsZS5vIGRpci5vIGFtaWdhZmZzLm8gYml0bWFwLm8gc3ltbGluay5vXFxuLS1cXG5mcy9hZnMvTWFrZWZpbGU9Nj1rYWZzLXkgOj0gXFxcXFxcbi0tXFxuZnMvYWZzL01ha2VmaWxlLTIyLVxcdGZzX3Byb2JlLm8gXFxcXFxcbmZzL2Fmcy9NYWtlZmlsZToyMzpcXHRpbm9kZS5vIFxcXFxcXG5mcy9hZnMvTWFrZWZpbGUtMjQtXFx0bWFpbi5vIFxcXFxcXG4tLVxcbmZzL2F1dG9mcy9NYWtlZmlsZT02PW9iai0kKENPTkZJR19BVVRPRlNfRlMpICs9IGF1dG9mczQub1xcbmZzL2F1dG9mcy9NYWtlZmlsZS03LVxcbmZzL2F1dG9mcy9NYWtlZmlsZTo4OmF1dG9mczQtb2JqcyA6PSBpbml0Lm8gaW5vZGUubyByb290Lm8gc3ltbGluay5vIHdhaXRxLm8gZXhwaXJlLm8gZGV2LWlvY3RsLm9cXG4tLVxcbmZzL2JlZnMvTWFrZWZpbGU9Nz1jY2ZsYWdzLSQoQ09ORklHX0JFRlNfREVCVUcpICAgICs9IC1EREVCVUdcXG5mcy9iZWZzL01ha2VmaWxlOjg6YmVmcy1vYmpzIDo9IGRhdGFzdHJlYW0ubyBidHJlZS5vIHN1cGVyLm8gaW5vZGUubyBkZWJ1Zy5vIGlvLm8gbGludXh2ZnMub1xcbi0tXFxuZnMvYnRyZnMvTWFrZWZpbGU9MjQ9YnRyZnMteSArPSBzdXBlci5vIGN0cmVlLm8gZXh0ZW50LXRyZWUubyBwcmludC10cmVlLm8gcm9vdC10cmVlLm8gZGlyLWl0ZW0ubyBcXFxcXFxuZnMvYnRyZnMvTWFrZWZpbGUtMjUtXFx0ICAgZmlsZS1pdGVtLm8gaW5vZGUtaXRlbS5vIGRpc2staW8ubyBcXFxcXFxuZnMvYnRyZnMvTWFrZWZpbGU6MjY6XFx0ICAgdHJhbnNhY3Rpb24ubyBpbm9kZS5vIGZpbGUubyBkZWZyYWcubyBcXFxcXFxuZnMvYnRyZnMvTWFrZWZpbGUtMjctXFx0ICAgZXh0ZW50X21hcC5vIHN5c2ZzLm8gYWNjZXNzb3JzLm8geGF0dHIubyBvcmRlcmVkLWRhdGEubyBcXFxcXFxuLS1cXG5mcy9idHJmcy9NYWtlZmlsZS0yOS1cXHQgICBleHBvcnQubyB0cmVlLWxvZy5vIGZyZWUtc3BhY2UtY2FjaGUubyB6bGliLm8gbHpvLm8genN0ZC5vIFxcXFxcXG5mcy9idHJmcy9NYWtlZmlsZTozMDpcXHQgICBjb21wcmVzc2lvbi5vIGRlbGF5ZWQtcmVmLm8gcmVsb2NhdGlvbi5vIGRlbGF5ZWQtaW5vZGUubyBzY3J1Yi5vIFxcXFxcXG5mcy9idHJmcy9NYWtlZmlsZS0zMS1cXHQgICBiYWNrcmVmLm8gdWxpc3QubyBxZ3JvdXAubyBzZW5kLm8gZGV2LXJlcGxhY2UubyByYWlkNTYubyBcXFxcXFxuLS1cXG5mcy9jZXBoL01ha2VmaWxlPTY9b2JqLSQoQ09ORklHX0NFUEhfRlMpICs9IGNlcGgub1xcbmZzL2NlcGgvTWFrZWZpbGUtNy1cXG5mcy9jZXBoL01ha2VmaWxlOjg6Y2VwaC15IDo9IHN1cGVyLm8gaW5vZGUubyBkaXIubyBmaWxlLm8gbG9ja3MubyBhZGRyLm8gaW9jdGwubyBcXFxcXFxuZnMvY2VwaC9NYWtlZmlsZS05LVxcdGV4cG9ydC5vIGNhcHMubyBzbmFwLm8geGF0dHIubyBxdW90YS5vIGlvLm8gXFxcXFxcbi0tXFxuZnMvY29kYS9NYWtlZmlsZT02PW9iai0kKENPTkZJR19DT0RBX0ZTKSArPSBjb2RhLm9cXG5mcy9jb2RhL01ha2VmaWxlLTctXFxuZnMvY29kYS9NYWtlZmlsZTo4OmNvZGEtb2JqcyA6PSBwc2Rldi5vIGNhY2hlLm8gY25vZGUubyBpbm9kZS5vIGRpci5vIGZpbGUubyB1cGNhbGwubyBcXFxcXFxuZnMvY29kYS9NYWtlZmlsZS05LVxcdCAgICAgY29kYV9saW51eC5vIHN5bWxpbmsubyBwaW9jdGwub1xcbi0tXFxuZnMvY29uZmlnZnMvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfQ09ORklHRlNfRlMpXFx0Kz0gY29uZmlnZnMub1xcbmZzL2NvbmZpZ2ZzL01ha2VmaWxlLTctXFxuZnMvY29uZmlnZnMvTWFrZWZpbGU6ODpjb25maWdmcy1vYmpzXFx0Oj0gaW5vZGUubyBmaWxlLm8gZGlyLm8gc3ltbGluay5vIG1vdW50Lm8gaXRlbS5vXFxuLS1cXG5mcy9jcmFtZnMvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfQ1JBTUZTKSArPSBjcmFtZnMub1xcbmZzL2NyYW1mcy9NYWtlZmlsZS03LVxcbmZzL2NyYW1mcy9NYWtlZmlsZTo4OmNyYW1mcy1vYmpzIDo9IGlub2RlLm8gdW5jb21wcmVzcy5vXFxuLS1cXG5mcy9kZWJ1Z2ZzL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvZGVidWdmcy9NYWtlZmlsZToyOmRlYnVnZnMtb2Jqc1xcdDo9IGlub2RlLm8gZmlsZS5vXFxuZnMvZGVidWdmcy9NYWtlZmlsZS0zLVxcbi0tXFxuZnMvZGV2cHRzL01ha2VmaWxlPTY9b2JqLSQoQ09ORklHX1VOSVg5OF9QVFlTKVxcdFxcdCs9IGRldnB0cy5vXFxuZnMvZGV2cHRzL01ha2VmaWxlLTctXFxuZnMvZGV2cHRzL01ha2VmaWxlOjg6ZGV2cHRzLSQoQ09ORklHX1VOSVg5OF9QVFlTKVxcdFxcdDo9IGlub2RlLm9cXG4tLVxcbmZzL2VjcnlwdGZzL01ha2VmaWxlPTY9b2JqLSQoQ09ORklHX0VDUllQVF9GUykgKz0gZWNyeXB0ZnMub1xcbmZzL2VjcnlwdGZzL01ha2VmaWxlLTctXFxuZnMvZWNyeXB0ZnMvTWFrZWZpbGU6ODplY3J5cHRmcy15IDo9IGRlbnRyeS5vIGZpbGUubyBpbm9kZS5vIG1haW4ubyBzdXBlci5vIG1tYXAubyByZWFkX3dyaXRlLm8gXFxcXFxcbmZzL2VjcnlwdGZzL01ha2VmaWxlLTktXFx0ICAgICAgY3J5cHRvLm8ga2V5c3RvcmUubyBrdGhyZWFkLm8gZGVidWcub1xcbi0tXFxuZnMvZWZpdmFyZnMvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfRUZJVkFSX0ZTKVxcdFxcdCs9IGVmaXZhcmZzLm9cXG5mcy9lZml2YXJmcy9NYWtlZmlsZS03LVxcbmZzL2VmaXZhcmZzL01ha2VmaWxlOjg6ZWZpdmFyZnMtb2Jqc1xcdFxcdFxcdDo9IGlub2RlLm8gZmlsZS5vIHN1cGVyLm8gdmFycy5vXFxuLS1cXG5mcy9lcm9mcy9NYWtlZmlsZT0zPW9iai0kKENPTkZJR19FUk9GU19GUykgKz0gZXJvZnMub1xcbmZzL2Vyb2ZzL01ha2VmaWxlOjQ6ZXJvZnMtb2JqcyA6PSBzdXBlci5vIGlub2RlLm8gZGF0YS5vIG5hbWVpLm8gZGlyLm8gc3lzZnMub1xcbmZzL2Vyb2ZzL01ha2VmaWxlLTUtZXJvZnMtJChDT05GSUdfRVJPRlNfRlNfWEFUVFIpICs9IHhhdHRyLm9cXG4tLVxcbmZzL2V4ZmF0L01ha2VmaWxlPTU9b2JqLSQoQ09ORklHX0VYRkFUX0ZTKSArPSBleGZhdC5vXFxuZnMvZXhmYXQvTWFrZWZpbGUtNi1cXG5mcy9leGZhdC9NYWtlZmlsZTo3OmV4ZmF0LXlcXHQ6PSBpbm9kZS5vIG5hbWVpLm8gZGlyLm8gc3VwZXIubyBmYXRlbnQubyBjYWNoZS5vIG5scy5vIG1pc2MubyBcXFxcXFxuZnMvZXhmYXQvTWFrZWZpbGUtOC1cXHQgICBmaWxlLm8gYmFsbG9jLm8gaW9tYXAub1xcbi0tXFxuZnMvZXh0Mi9NYWtlZmlsZT02PW9iai0kKENPTkZJR19FWFQyX0ZTKSArPSBleHQyLm9cXG5mcy9leHQyL01ha2VmaWxlLTctXFxuZnMvZXh0Mi9NYWtlZmlsZTo4OmV4dDIteSA6PSBiYWxsb2MubyBkaXIubyBmaWxlLm8gaWFsbG9jLm8gaW5vZGUubyBcXFxcXFxuZnMvZXh0Mi9NYWtlZmlsZS05LVxcdCAgaW9jdGwubyBuYW1laS5vIHN1cGVyLm8gc3ltbGluay5vIHRyYWNlLm9cXG4tLVxcbmZzL2V4dDQvTWFrZWZpbGU9OD1leHQ0LXlcXHQ6PSBiYWxsb2MubyBiaXRtYXAubyBibG9ja192YWxpZGl0eS5vIGRpci5vIGV4dDRfamJkMi5vIGV4dGVudHMubyBcXFxcXFxuZnMvZXh0NC9NYWtlZmlsZS05LVxcdFxcdGV4dGVudHNfc3RhdHVzLm8gZmlsZS5vIGZzbWFwLm8gZnN5bmMubyBoYXNoLm8gaWFsbG9jLm8gXFxcXFxcbmZzL2V4dDQvTWFrZWZpbGU6MTA6XFx0XFx0aW5kaXJlY3QubyBpbmxpbmUubyBpbm9kZS5vIGlvY3RsLm8gbWJhbGxvYy5vIG1pZ3JhdGUubyBcXFxcXFxuZnMvZXh0NC9NYWtlZmlsZS0xMS1cXHRcXHRtbXAubyBtb3ZlX2V4dGVudC5vIG5hbWVpLm8gcGFnZS1pby5vIHJlYWRwYWdlLm8gcmVzaXplLm8gXFxcXFxcbi0tXFxuZnMvZjJmcy9NYWtlZmlsZT0yPW9iai0kKENPTkZJR19GMkZTX0ZTKSArPSBmMmZzLm9cXG5mcy9mMmZzL01ha2VmaWxlLTMtXFxuZnMvZjJmcy9NYWtlZmlsZTo0OmYyZnMteVxcdFxcdDo9IGRpci5vIGZpbGUubyBpbm9kZS5vIG5hbWVpLm8gaGFzaC5vIHN1cGVyLm8gaW5saW5lLm9cXG5mcy9mMmZzL01ha2VmaWxlLTUtZjJmcy15XFx0XFx0Kz0gY2hlY2twb2ludC5vIGdjLm8gZGF0YS5vIG5vZGUubyBzZWdtZW50Lm8gcmVjb3Zlcnkub1xcbi0tXFxuZnMvZmF0L01ha2VmaWxlPTg9b2JqLSQoQ09ORklHX01TRE9TX0ZTKSArPSBtc2Rvcy5vXFxuZnMvZmF0L01ha2VmaWxlLTktXFxuZnMvZmF0L01ha2VmaWxlOjEwOmZhdC15IDo9IGNhY2hlLm8gZGlyLm8gZmF0ZW50Lm8gZmlsZS5vIGlub2RlLm8gbWlzYy5vIG5mcy5vXFxuZnMvZmF0L01ha2VmaWxlLTExLXZmYXQteSA6PSBuYW1laV92ZmF0Lm9cXG4tLVxcbmZzL2Z1c2UvTWFrZWZpbGU9MTM9ZnVzZS15IDo9IHRyYWNlLm9cXHQjIHB1dCB0cmFjZS5vIGZpcnN0IHNvIHdlIHNlZSBmdHJhY2UgZXJyb3JzIHNvb25lclxcbmZzL2Z1c2UvTWFrZWZpbGU6MTQ6ZnVzZS15ICs9IGRldi5vIGRpci5vIGZpbGUubyBpbm9kZS5vIGNvbnRyb2wubyB4YXR0ci5vIGFjbC5vIHJlYWRkaXIubyBpb2N0bC5vIHJlcV90aW1lb3V0Lm8gcmVxLm9cXG5mcy9mdXNlL01ha2VmaWxlLTE1LWZ1c2UteSArPSBwb2xsLm8gbm90aWZ5Lm9cXG4tLVxcbmZzL2dmczIvTWFrZWZpbGU9ND1nZnMyLXkgOj0gYWNsLm8gYm1hcC5vIGRpci5vIHhhdHRyLm8gZ2xvY2subyBcXFxcXFxuLS1cXG5mcy9nZnMyL01ha2VmaWxlLTYtXFx0YW9wcy5vIGRlbnRyeS5vIGV4cG9ydC5vIGZpbGUubyBcXFxcXFxuZnMvZ2ZzMi9NYWtlZmlsZTo3OlxcdG9wc19mc3R5cGUubyBpbm9kZS5vIHF1b3RhLm8gXFxcXFxcbmZzL2dmczIvTWFrZWZpbGUtOC1cXHRyZWNvdmVyeS5vIHJncnAubyBzdXBlci5vIHN5cy5vIHRyYW5zLm8gdXRpbC5vXFxuLS1cXG5mcy9oZnMvTWFrZWZpbGU9OD1oZnMtb2JqcyA6PSBiaXRtYXAubyBiZmluZC5vIGJub2RlLm8gYnJlYy5vIGJ0cmVlLm8gXFxcXFxcbmZzL2hmcy9NYWtlZmlsZTo5OlxcdCAgICBjYXRhbG9nLm8gZGlyLm8gZXh0ZW50Lm8gaW5vZGUubyBhdHRyLm8gbWRiLm8gXFxcXFxcbmZzL2hmcy9NYWtlZmlsZS0xMC0gICAgICAgICAgICBwYXJ0X3RibC5vIHN0cmluZy5vIHN1cGVyLm8gc3lzZGVwLm8gdHJhbnMub1xcbi0tXFxuZnMvaGZzcGx1cy9NYWtlZmlsZT02PW9iai0kKENPTkZJR19IRlNQTFVTX0ZTKSArPSBoZnNwbHVzLm9cXG5mcy9oZnNwbHVzL01ha2VmaWxlLTctXFxuZnMvaGZzcGx1cy9NYWtlZmlsZTo4Omhmc3BsdXMtb2JqcyA6PSBzdXBlci5vIG9wdGlvbnMubyBpbm9kZS5vIGlvY3RsLm8gZXh0ZW50cy5vIGNhdGFsb2cubyBkaXIubyBidHJlZS5vIFxcXFxcXG5mcy9oZnNwbHVzL01ha2VmaWxlLTktXFx0XFx0Ym5vZGUubyBicmVjLm8gYmZpbmQubyB0YWJsZXMubyB1bmljb2RlLm8gd3JhcHBlci5vIGJpdG1hcC5vIHBhcnRfdGJsLm8gXFxcXFxcbi0tXFxuZnMvaHBmcy9NYWtlZmlsZT04PWhwZnMtb2JqcyA6PSBhbGxvYy5vIGFub2RlLm8gYnVmZmVyLm8gZGVudHJ5Lm8gZGlyLm8gZG5vZGUubyBlYS5vIGZpbGUubyBcXFxcXFxuZnMvaHBmcy9NYWtlZmlsZTo5OlxcdCAgICAgaW5vZGUubyBtYXAubyBuYW1lLm8gbmFtZWkubyBzdXBlci5vXFxuLS1cXG5mcy9odWdldGxiZnMvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfSFVHRVRMQkZTKSArPSBodWdldGxiZnMub1xcbmZzL2h1Z2V0bGJmcy9NYWtlZmlsZS03LVxcbmZzL2h1Z2V0bGJmcy9NYWtlZmlsZTo4Omh1Z2V0bGJmcy1vYmpzIDo9IGlub2RlLm9cXG4tLVxcbmZzL2lzb2ZzL01ha2VmaWxlPTY9b2JqLSQoQ09ORklHX0lTTzk2NjBfRlMpICs9IGlzb2ZzLm9cXG5mcy9pc29mcy9NYWtlZmlsZS03LVxcbmZzL2lzb2ZzL01ha2VmaWxlOjg6aXNvZnMteSBcXHRcXHQ6PSBuYW1laS5vIGlub2RlLm8gZGlyLm8gdXRpbC5vIHJvY2subyBleHBvcnQub1xcbmZzL2lzb2ZzL01ha2VmaWxlLTktaXNvZnMtJChDT05GSUdfSk9MSUVUKVxcdCs9IGpvbGlldC5vXFxuLS1cXG5mcy9qZmZzMi9NYWtlZmlsZT05PWpmZnMyLXlcXHQ6PSBjb21wci5vIGRpci5vIGZpbGUubyBpb2N0bC5vIG5vZGVsaXN0Lm8gbWFsbG9jLm9cXG5mcy9qZmZzMi9NYWtlZmlsZToxMDpqZmZzMi15XFx0Kz0gcmVhZC5vIG5vZGVtZ210Lm8gcmVhZGlub2RlLm8gd3JpdGUubyBzY2FuLm8gZ2Mub1xcbmZzL2pmZnMyL01ha2VmaWxlLTExLWpmZnMyLXlcXHQrPSBzeW1saW5rLm8gYnVpbGQubyBlcmFzZS5vIGJhY2tncm91bmQubyBmcy5vIHdyaXRldi5vXFxuLS1cXG5mcy9qZnMvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfSkZTX0ZTKSArPSBqZnMub1xcbmZzL2pmcy9NYWtlZmlsZS03LVxcbmZzL2pmcy9NYWtlZmlsZTo4Ompmcy15ICAgIDo9IHN1cGVyLm8gZmlsZS5vIGlub2RlLm8gbmFtZWkubyBqZnNfbW91bnQubyBqZnNfdW1vdW50Lm8gXFxcXFxcbmZzL2pmcy9NYWtlZmlsZS05LVxcdCAgICBqZnNfeHRyZWUubyBqZnNfaW1hcC5vIGpmc19kZWJ1Zy5vIGpmc19kbWFwLm8gXFxcXFxcbmZzL2pmcy9NYWtlZmlsZToxMDpcXHQgICAgamZzX3VuaWNvZGUubyBqZnNfZHRyZWUubyBqZnNfaW5vZGUubyBqZnNfZGlzY2FyZC5vIFxcXFxcXG5mcy9qZnMvTWFrZWZpbGUtMTEtXFx0ICAgIGpmc19leHRlbnQubyBzeW1saW5rLm8gamZzX21ldGFwYWdlLm8gXFxcXFxcbi0tXFxuZnMva2VybmZzL01ha2VmaWxlLTUtXFxuZnMva2VybmZzL01ha2VmaWxlOjY6b2JqLXlcXHRcXHQ6PSBtb3VudC5vIGlub2RlLm8gZGlyLm8gZmlsZS5vIHN5bWxpbmsub1xcbi0tXFxuZnMvbWluaXgvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfTUlOSVhfRlMpICs9IG1pbml4Lm9cXG5mcy9taW5peC9NYWtlZmlsZS03LVxcbmZzL21pbml4L01ha2VmaWxlOjg6bWluaXgtb2JqcyA6PSBiaXRtYXAubyBpdHJlZV92MS5vIGl0cmVlX3YyLm8gbmFtZWkubyBpbm9kZS5vIGZpbGUubyBkaXIub1xcbi0tXFxuZnMvbmZzL01ha2VmaWxlPTg9Q0ZMQUdTX25mc3RyYWNlLm8gKz0gLUkkKHNyYylcXG5mcy9uZnMvTWFrZWZpbGU6OTpuZnMteSBcXHRcXHRcXHQ6PSBjbGllbnQubyBkaXIubyBmaWxlLm8gZ2V0cm9vdC5vIGlub2RlLm8gc3VwZXIubyBcXFxcXFxuZnMvbmZzL01ha2VmaWxlLTEwLVxcdFxcdFxcdCAgIGlvLm8gZGlyZWN0Lm8gcGFnZWxpc3QubyByZWFkLm8gc3ltbGluay5vIHVubGluay5vIFxcXFxcXG4tLVxcbmZzL25pbGZzMi9NYWtlZmlsZT0yPW9iai0kKENPTkZJR19OSUxGUzJfRlMpICs9IG5pbGZzMi5vXFxuZnMvbmlsZnMyL01ha2VmaWxlOjM6bmlsZnMyLXkgOj0gaW5vZGUubyBmaWxlLm8gZGlyLm8gc3VwZXIubyBuYW1laS5vIHBhZ2UubyBtZHQubyBcXFxcXFxuZnMvbmlsZnMyL01ha2VmaWxlLTQtXFx0YnRub2RlLm8gYm1hcC5vIGJ0cmVlLm8gZGlyZWN0Lm8gZGF0Lm8gcmVjb3ZlcnkubyBcXFxcXFxuZnMvbmlsZnMyL01ha2VmaWxlLTUtXFx0dGhlX25pbGZzLm8gc2VnYnVmLm8gc2VnbWVudC5vIGNwZmlsZS5vIHN1ZmlsZS5vIFxcXFxcXG5mcy9uaWxmczIvTWFrZWZpbGU6NjpcXHRpZmlsZS5vIGFsbG9jLm8gZ2Npbm9kZS5vIGlvY3RsLm8gc3lzZnMub1xcbi0tXFxuZnMvbnRmcy9NYWtlZmlsZT0zPW9iai0kKENPTkZJR19OVEZTX0ZTKSArPSBudGZzLm9cXG5mcy9udGZzL01ha2VmaWxlLTQtXFxuZnMvbnRmcy9NYWtlZmlsZTo1Om50ZnMteSA6PSBhb3BzLm8gYXR0cmliLm8gY29sbGF0ZS5vIGRpci5vIGZpbGUubyBpbmRleC5vIGlub2RlLm8gXFxcXFxcbmZzL250ZnMvTWFrZWZpbGUtNi1cXHQgIG1mdC5vIG1zdC5vIG5hbWVpLm8gcnVubGlzdC5vIHN1cGVyLm8gdW5pc3RyLm8gYXR0cmxpc3QubyBlYS5vIFxcXFxcXG4tLVxcbmZzL250ZnMzL01ha2VmaWxlPTMzPW50ZnMzLXkgOj1cXHRhdHRyaWIubyBcXFxcXFxuLS1cXG5mcy9udGZzMy9NYWtlZmlsZS00MS1cXHRcXHRmc2xvZy5vIFxcXFxcXG5mcy9udGZzMy9NYWtlZmlsZTo0MjpcXHRcXHRpbm9kZS5vIFxcXFxcXG5mcy9udGZzMy9NYWtlZmlsZS00My1cXHRcXHRpbmRleC5vIFxcXFxcXG4tLVxcbmZzL29jZnMyL01ha2VmaWxlPTExPW9jZnMyLW9ianMgOj0gXFxcXFxcbi0tXFxuZnMvb2NmczIvTWFrZWZpbGUtMjItXFx0aGVhcnRiZWF0Lm8gXFx0XFx0XFxcXFxcbmZzL29jZnMyL01ha2VmaWxlOjIzOlxcdGlub2RlLm8gXFx0XFx0XFxcXFxcbmZzL29jZnMyL01ha2VmaWxlLTI0LVxcdGlvY3RsLm8gXFx0XFx0XFxcXFxcbi0tXFxuZnMvb21mcy9NYWtlZmlsZT0zPW9iai0kKENPTkZJR19PTUZTX0ZTKSArPSBvbWZzLm9cXG5mcy9vbWZzL01ha2VmaWxlLTQtXFxuZnMvb21mcy9NYWtlZmlsZTo1Om9tZnMteSA6PSBiaXRtYXAubyBkaXIubyBmaWxlLm8gaW5vZGUub1xcbi0tXFxuZnMvb3BlbnByb21mcy9NYWtlZmlsZT02PW9iai0kKENPTkZJR19TVU5fT1BFTlBST01GUykgKz0gb3BlbnByb21mcy5vXFxuZnMvb3BlbnByb21mcy9NYWtlZmlsZS03LVxcbmZzL29wZW5wcm9tZnMvTWFrZWZpbGU6ODpvcGVucHJvbWZzLW9ianMgOj0gaW5vZGUub1xcbi0tXFxuZnMvb3JhbmdlZnMvTWFrZWZpbGU9OD1vcmFuZ2Vmcy1vYmpzIDo9IGFjbC5vIGZpbGUubyBvcmFuZ2Vmcy1jYWNoZS5vIG9yYW5nZWZzLXV0aWxzLm8geGF0dHIubyBcXFxcXFxuZnMvb3JhbmdlZnMvTWFrZWZpbGU6OTpcXHRcXHQgZGNhY2hlLm8gaW5vZGUubyBvcmFuZ2Vmcy1zeXNmcy5vIG9yYW5nZWZzLW1vZC5vIHN1cGVyLm8gXFxcXFxcbmZzL29yYW5nZWZzL01ha2VmaWxlLTEwLVxcdFxcdCBkZXZvcmFuZ2Vmcy1yZXEubyBuYW1laS5vIHN5bWxpbmsubyBkaXIubyBvcmFuZ2Vmcy1idWZtYXAubyBcXFxcXFxuLS1cXG5mcy9vdmVybGF5ZnMvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfT1ZFUkxBWV9GUykgKz0gb3ZlcmxheS5vXFxuZnMvb3ZlcmxheWZzL01ha2VmaWxlLTctXFxuZnMvb3ZlcmxheWZzL01ha2VmaWxlOjg6b3ZlcmxheS1vYmpzIDo9IHN1cGVyLm8gbmFtZWkubyB1dGlsLm8gaW5vZGUubyBmaWxlLm8gZGlyLm8gcmVhZGRpci5vIFxcXFxcXG5mcy9vdmVybGF5ZnMvTWFrZWZpbGUtOS1cXHRcXHRjb3B5X3VwLm8gZXhwb3J0Lm8gcGFyYW1zLm8geGF0dHJzLm9cXG4tLVxcbmZzL3Byb2MvTWFrZWZpbGU9MTA9cHJvYy0kKENPTkZJR19NTVUpXFx0Oj0gdGFza19tbXUub1xcbmZzL3Byb2MvTWFrZWZpbGUtMTEtXFxuZnMvcHJvYy9NYWtlZmlsZToxMjpwcm9jLXkgICAgICAgKz0gaW5vZGUubyByb290Lm8gYmFzZS5vIGdlbmVyaWMubyBhcnJheS5vIFxcXFxcXG5mcy9wcm9jL01ha2VmaWxlLTEzLVxcdFxcdGZkLm9cXG4tLVxcbmZzL3BzdG9yZS9NYWtlZmlsZT02PW9iai0kKENPTkZJR19QU1RPUkUpICs9IHBzdG9yZS5vXFxuZnMvcHN0b3JlL01ha2VmaWxlLTctXFxuZnMvcHN0b3JlL01ha2VmaWxlOjg6cHN0b3JlLW9ianMgKz0gaW5vZGUubyBwbGF0Zm9ybS5vXFxuZnMvcHN0b3JlL01ha2VmaWxlLTktcHN0b3JlLSQoQ09ORklHX1BTVE9SRV9GVFJBQ0UpXFx0Kz0gZnRyYWNlLm9cXG4tLVxcbmZzL3FueDQvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfUU5YNEZTX0ZTKSArPSBxbng0Lm9cXG5mcy9xbng0L01ha2VmaWxlLTctXFxuZnMvcW54NC9NYWtlZmlsZTo4OnFueDQtb2JqcyA6PSBpbm9kZS5vIGRpci5vIG5hbWVpLm8gYml0bWFwLm9cXG4tLVxcbmZzL3FueDYvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfUU5YNkZTX0ZTKSArPSBxbng2Lm9cXG5mcy9xbng2L01ha2VmaWxlLTctXFxuZnMvcW54Ni9NYWtlZmlsZTo4OnFueDYtb2JqcyA6PSBpbm9kZS5vIGRpci5vIG5hbWVpLm8gc3VwZXJfbW1pLm9cXG5mcy9xbng2L01ha2VmaWxlLTktY2NmbGFncy0kKENPTkZJR19RTlg2RlNfREVCVUcpXFx0Kz0gLURERUJVR1xcbi0tXFxuZnMvcmFtZnMvTWFrZWZpbGU9OT1maWxlLW1tdS0kKENPTkZJR19NTVUpIDo9IGZpbGUtbW11Lm9cXG5mcy9yYW1mcy9NYWtlZmlsZToxMDpyYW1mcy1vYmpzICs9IGlub2RlLm8gJChmaWxlLW1tdS15KVxcbi0tXFxuZnMvc21iL2NsaWVudC9NYWtlZmlsZT04PWNpZnMteSA6PSB0cmFjZS5vIGNpZnNmcy5vIGNpZnNfZGVidWcubyBjb25uZWN0Lm8gZGlyLm8gZmlsZS5vIFxcXFxcXG5mcy9zbWIvY2xpZW50L01ha2VmaWxlOjk6XFx0ICBpbm9kZS5vIGxpbmsubyBtaXNjLm8gbmV0bWlzYy5vIHNtYmVuY3J5cHQubyB0cmFuc3BvcnQubyBcXFxcXFxuZnMvc21iL2NsaWVudC9NYWtlZmlsZS0xMC1cXHQgIGNhY2hlZF9kaXIubyBjaWZzX3VuaWNvZGUubyBjaWZzZW5jcnlwdC5vIFxcXFxcXG4tLVxcbmZzL3NtYi9jbGllbnQvTWFrZWZpbGUtMTItXFx0ICBzbWIyb3BzLm8gc21iMm1hcGVycm9yLm8gc21iMnRyYW5zcG9ydC5vIFxcXFxcXG5mcy9zbWIvY2xpZW50L01ha2VmaWxlOjEzOlxcdCAgc21iMm1pc2MubyBzbWIycGR1Lm8gc21iMmlub2RlLm8gc21iMmZpbGUubyBjaWZzYWNsLm8gZnNfY29udGV4dC5vIFxcXFxcXG5mcy9zbWIvY2xpZW50L01ha2VmaWxlLTE0LVxcdCAgZG5zX3Jlc29sdmUubyBjaWZzX3NwbmVnb19uZWd0b2tlbmluaXQuYXNuMS5vIGFzbjEubyBcXFxcXFxuLS1cXG5mcy9zcXVhc2hmcy9NYWtlZmlsZT02PW9iai0kKENPTkZJR19TUVVBU0hGUykgKz0gc3F1YXNoZnMub1xcbmZzL3NxdWFzaGZzL01ha2VmaWxlOjc6c3F1YXNoZnMteSArPSBibG9jay5vIGNhY2hlLm8gZGlyLm8gZXhwb3J0Lm8gZmlsZS5vIGZyYWdtZW50Lm8gaWQubyBpbm9kZS5vXFxuZnMvc3F1YXNoZnMvTWFrZWZpbGUtOC1zcXVhc2hmcy15ICs9IG5hbWVpLm8gc3VwZXIubyBzeW1saW5rLm8gZGVjb21wcmVzc29yLm8gcGFnZV9hY3Rvci5vXFxuLS1cXG5mcy90cmFjZWZzL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvdHJhY2Vmcy9NYWtlZmlsZToyOnRyYWNlZnMtb2Jqc1xcdDo9IGlub2RlLm9cXG5mcy90cmFjZWZzL01ha2VmaWxlOjM6dHJhY2Vmcy1vYmpzXFx0Kz0gZXZlbnRfaW5vZGUub1xcbmZzL3RyYWNlZnMvTWFrZWZpbGUtNC1cXG4tLVxcbmZzL3VkZi9NYWtlZmlsZT02PW9iai0kKENPTkZJR19VREZfRlMpICs9IHVkZi5vXFxuZnMvdWRmL01ha2VmaWxlLTctXFxuZnMvdWRmL01ha2VmaWxlOjg6dWRmLW9ianMgICAgIDo9IGJhbGxvYy5vIGRpci5vIGZpbGUubyBpYWxsb2MubyBpbm9kZS5vIGxvd2xldmVsLm8gbmFtZWkubyBcXFxcXFxuZnMvdWRmL01ha2VmaWxlLTktXFx0XFx0cGFydGl0aW9uLm8gc3VwZXIubyB0cnVuY2F0ZS5vIHN5bWxpbmsubyBcXFxcXFxuLS1cXG5mcy91ZnMvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfVUZTX0ZTKSArPSB1ZnMub1xcbmZzL3Vmcy9NYWtlZmlsZS03LVxcbmZzL3Vmcy9NYWtlZmlsZTo4OnVmcy1vYmpzIDo9IGJhbGxvYy5vIGN5bGluZGVyLm8gZGlyLm8gZmlsZS5vIGlhbGxvYy5vIGlub2RlLm8gXFxcXFxcbmZzL3Vmcy9NYWtlZmlsZS05LVxcdCAgICBuYW1laS5vIHN1cGVyLm8gdXRpbC5vXFxuLS1cXG5mcy94ZnMvTWFrZWZpbGU9MTY9eGZzLXlcXHRcXHRcXHRcXHQrPSAkKGFkZHByZWZpeCBsaWJ4ZnMvLCBcXFxcXFxuLS1cXG5mcy94ZnMvTWFrZWZpbGUtNTctXFx0XFx0XFx0XFx0ICAgeGZzX3N5bWxpbmtfcmVtb3RlLm8gXFxcXFxcbmZzL3hmcy9NYWtlZmlsZTo1ODpcXHRcXHRcXHRcXHQgICB4ZnNfdHJhbnNfaW5vZGUubyBcXFxcXFxuZnMveGZzL01ha2VmaWxlLTU5LVxcdFxcdFxcdFxcdCAgIHhmc190cmFuc19yZXN2Lm8gXFxcXFxcbi0tXFxuZnMveGZzL01ha2VmaWxlPTcxPXhmcy15XFx0XFx0XFx0XFx0Kz0geGZzX2FvcHMubyBcXFxcXFxuLS1cXG5mcy94ZnMvTWFrZWZpbGUtOTYtXFx0XFx0XFx0XFx0ICAgeGZzX2lvcHMubyBcXFxcXFxuZnMveGZzL01ha2VmaWxlOjk3OlxcdFxcdFxcdFxcdCAgIHhmc19pbm9kZS5vIFxcXFxcXG5mcy94ZnMvTWFrZWZpbGUtOTgtXFx0XFx0XFx0XFx0ICAgeGZzX2l0YWJsZS5vIFxcXFxcXG4tLVxcbmZzL3hmcy9NYWtlZmlsZT0xNjk9eGZzLXlcXHRcXHRcXHRcXHQrPSAkKGFkZHByZWZpeCBzY3J1Yi8sIFxcXFxcXG4tLVxcbmZzL3hmcy9NYWtlZmlsZS0xODQtXFx0XFx0XFx0XFx0ICAgaWFsbG9jLm8gXFxcXFxcbmZzL3hmcy9NYWtlZmlsZToxODU6XFx0XFx0XFx0XFx0ICAgaW5vZGUubyBcXFxcXFxuZnMveGZzL01ha2VmaWxlLTE4Ni1cXHRcXHRcXHRcXHQgICBpc2Nhbi5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6NTI6MTguOTQ3NzA0OTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzY0MzMxMzk2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgZnMvaW5vZGUuY2AgQ2hhbmdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBtb2RpZmljYXRpb24gdG8gYGZzL2lub2RlLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBldmljdF9pbm9kZXMoKWAgZnVuY3Rpb24sIHdoaWNoIGlzLCBvZiBjb3Vyc2UsIGNvbXBpbGVkIGludG8gZXZlcnkgTGludXgga2VybmVsLiBObyBjb25kaXRpb25hbCBjb21waWxhdGlvbiBoZXJlLCBpdCdzIGFsd2F5cyBpbmNsdWRlZCBiYXNlZCBvbiB0aGUgYGZzL01ha2VmaWxlYCBkZWZpbml0aW9uLiBHb29kLCB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzLiBObyBzcGVjaWFsIGNvbmZpZ3VyYXRpb24gaXMgbmVlZGVkIHRvIHRyaWdnZXIgdGhlIGNoYW5nZXMuXG5cbk15IGltbWVkaWF0ZSBjb25jZXJucyBhcmUgdHJpZ2dlcmVkOiBXb3J0aEZ1enppbmcgaXMgc2V0IHRvIHRydWUsIHdoaWNoIGltbWVkaWF0ZWx5IGdyYWJzIG15IGF0dGVudGlvbi4gVGhlIGNvbW1pdCBhbHRlcnMgbG9ja2luZyBhbmQgbGlzdCBoYW5kbGluZyB3aXRoaW4gYGV2aWN0X2lub2RlcygpYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgc3VwZXJibG9jayBpbm9kZSBldmljdGlvbiBsb29wLiBJdCdzIG1lc3Npbmcgd2l0aCBgc2ItXHUwMDNlc19pbm9kZV9saXN0X2xvY2tgLCBhbHRlcmluZyBpdHMgdXNlIGR1cmluZyByZXNjaGVkdWxpbmcgd2l0aCBgY29uZF9yZXNjaGVkKClgLiBJbnN0ZWFkIG9mIHJlc3RhcnRpbmcgdGhlIHRyYXZlcnNhbCBhZnRlciBkaXNwb3Npbmcgb2YgaW5vZGVzLCB0aGUgY29tbWl0IGlzIGRyb3BwaW5nIGFuZCByZS1hY3F1aXJpbmcgdGhlIGxvY2sgKm1pZC10cmF2ZXJzYWwqIHdoaWxlIGtlZXBpbmcgdGhlIGN1cnJlbnQgaW5vZGUgb3V0IG9mIGBkaXNwb3NlYC4gVGhpcyBpcyBhIGJpZyByZWQgZmxhZyBmb3IgYW55IGV4cGVydC5cblxuVGhpcyBraW5kIG9mIGNoYW5nZSBkaXJlY3RseSBhZmZlY3RzIGNvcmUgVkZTIGJlaGF2aW9yLCBwYXJ0aWN1bGFybHkgZHVyaW5nIGZpbGVzeXN0ZW0gdW5tb3VudHMgYW5kIHNodXRkb3duLiBUaGF0IG1lYW5zIHRoaXMgaGFzIHRoZSBwb3RlbnRpYWwgdG8gZXhwb3NlIGxpc3QgY29ycnVwdGlvbiwgcmFjZSBjb25kaXRpb25zLCBvciBldmVuIFVzZS1BZnRlci1GcmVlIHZ1bG5lcmFiaWxpdGllcyBkdXJpbmcgY29uY3VycmVudCBpbm9kZSBvcGVyYXRpb25zLiBUaGF0J3MgcHJlY2lzZWx5IHRoZSBraW5kIG9mIHRoaW5nIHRoYXQgY2FuIGxlYWQgdG8gc2lnbmlmaWNhbnQgc3RhYmlsaXR5IGlzc3Vlcy5cblxuSSdtIGZvY3VzZWQgb24gXCJldmljdF9pbm9kZXNcIiDigJMgdGhlIHJlYXNvbmluZyBoaWdobGlnaHRzIGl0LCBhbmQgdGhhdCdzIHByZWNpc2VseSB0aGUgZnVuY3Rpb24gd2hlcmUgdGhlIGNvcmUgbG9naWMgd2FzIGNoYW5nZWQuIFRoZSBpbnRlcm5hbCBgZGlzcG9zZV9saXN0YCB2YXJpYWJsZSBpcyBzdGF0aWMgYW5kIHVuZXhwb3J0ZWQsIHNvIHRoYXQncyBub3Qgd2hhdCBJJ20gaW50ZXJlc3RlZCBpbiBoZXJlLiBgZ2VuZXJpY19zaHV0ZG93bl9zdXBlcmAgaXMgYW4gZW50cnkgcG9pbnQsIHdoaWNoIGlzIHVzZWZ1bCwgYnV0IHRoZSBrZXkgaXMgdGhhdCBgZXZpY3RfaW5vZGVzYCBpdHNlbGYgaXMgYSBub24tc3RhdGljLCAqZXhwb3J0ZWQqIGZ1bmN0aW9uIGFuZCBpcyB0aGVyZWZvcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZS4gSXQncyAqcGVyZmVjdGx5KiBzcGVjaWZpYyBhbmQgbm90IHViaXF1aXRvdXMuIEkgdGhpbmsgdGhhdCdzIHRoZSBiZXN0IGZvY3VzIGZvciB0aGlzIGFuYWx5c2lzLlxuXG5MZXQncyBjYWxsIHRoZSByZXN1bHRzIGFuZCBnZXQgYSBoYW5kbGUgb24gd2hhdCB3ZSdyZSBsb29raW5nIGF0IHdpdGggYSBtdWNoIGRlZXBlciBkaXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQ1OCwiT3V0cHV0VG9rZW5zIjoxMTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6NTI6MjYuNTkxMDIyNTg1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJldmljdF9pbm9kZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBWRlMgaW5vZGUgZXZpY3Rpb24gdHJhdmVyc2FsIGluIGV2aWN0X2lub2RlcygpLiBXaGVuIHJlc2NoZWR1bGluZyBpcyByZXF1aXJlZCBkdXJpbmcgdW5tb3VudC9zdXBlcmJsb2NrIHNodXRkb3duLCBpdCBkcm9wcyBhbmQgcmUtYWNxdWlyZXMgc19pbm9kZV9saXN0X2xvY2sgbWlkLWl0ZXJhdGlvbiBpbnN0ZWFkIG9mIHJlc3RhcnRpbmcgdHJhdmVyc2FsIGZyb20gdGhlIGJlZ2lubmluZy4gVGhpcyBtb2RpZmljYXRpb24gaW4gbG9ja2luZyBhbmQgbGlzdCB0cmF2ZXJzYWwgd2l0aGluIGEgY29yZSBzdWJzeXN0ZW0gaXMgcmVhY2hhYmxlIGR1cmluZyB1bm1vdW50IG9wZXJhdGlvbnMgYW5kIGNvdWxkIGludHJvZHVjZSBjb25jdXJyZW5jeSBpc3N1ZXMgb3IgbGlzdCBjb3JydXB0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV2aWN0X2lub2Rlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIFZGUyBpbm9kZSBldmljdGlvbiB0cmF2ZXJzYWwgaW4gZXZpY3RfaW5vZGVzKCkuIFdoZW4gcmVzY2hlZHVsaW5nIGlzIHJlcXVpcmVkIGR1cmluZyB1bm1vdW50L3N1cGVyYmxvY2sgc2h1dGRvd24sIGl0IGRyb3BzIGFuZCByZS1hY3F1aXJlcyBzX2lub2RlX2xpc3RfbG9jayBtaWQtaXRlcmF0aW9uIGluc3RlYWQgb2YgcmVzdGFydGluZyB0cmF2ZXJzYWwgZnJvbSB0aGUgYmVnaW5uaW5nLiBUaGlzIG1vZGlmaWNhdGlvbiBpbiBsb2NraW5nIGFuZCBsaXN0IHRyYXZlcnNhbCB3aXRoaW4gYSBjb3JlIHN1YnN5c3RlbSBpcyByZWFjaGFibGUgZHVyaW5nIHVubW91bnQgb3BlcmF0aW9ucyBhbmQgY291bGQgaW50cm9kdWNlIGNvbmN1cnJlbmN5IGlzc3VlcyBvciBsaXN0IGNvcnJ1cHRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA1OjUyOjI2LjU5MTA1NTQ2NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2NzYwNzk5MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNTo1MjoyNi41OTE1NjMyNjVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNzY3NTU2ODE5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGl0ZXJhdGlvbiBsb2dpYyBhbmQgbG9ja2luZyBpbiBgZXZpY3RfaW5vZGVzKClgIGluIGZzL2lub2RlLmMgdG8gYXZvaWQgcmVzdGFydGluZyB0aGUgaW5vZGUgbGlzdCB3YWxrIChgZ290byBhZ2FpbmApIHdoZW4gcmVzY2hlZHVsaW5nLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBzdGVtbWluZyBmcm9tIHRoaXMgY2hhbmdlIHdvdWxkIGJlIGNvbmN1cnJlbmN5IGlzc3VlcywgbGlzdCBjb3JydXB0aW9uLCBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIChpZiB0aGUgbGlzdCBvciBpbm9kZSBzdGF0ZSBjaGFuZ2VzIHdoaWxlIGBzYi1cXHUwMDNlc19pbm9kZV9saXN0X2xvY2tgIGlzIGRyb3BwZWQpLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcyAoc3VjaCBhcyBDT05GSUdfREVCVUdfTElTVCkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCByZWFkIG9yIGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIGRvZXMgbm90IGNvcHkgYW55IGRhdGEgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1YTBkOTQ0YzgxNjMxN2FhYjA2ZGM4ODRlMjQ4MWEyZmIxZjc1OTk4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMDU6NTA6MDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9pbm9kZS5jIGIvZnMvaW5vZGUuY1xuaW5kZXggYmE3ZGEzOWJlNGEzMS4uYTlkMzdiZTM5MGExNyAxMDA2NDRcbi0tLSBhL2ZzL2lub2RlLmNcbisrKyBiL2ZzL2lub2RlLmNcbkBAIC04ODAsNyArODgwLDYgQEAgdm9pZCBldmljdF9pbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4gXHRMSVNUX0hFQUQoZGlzcG9zZSk7XG4gXG4tYWdhaW46XG4gXHRzcGluX2xvY2soXHUwMDI2c2ItXHUwMDNlc19pbm9kZV9saXN0X2xvY2spO1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShpbm9kZSwgXHUwMDI2c2ItXHUwMDNlc19pbm9kZXMsIGlfc2JfbGlzdCkge1xuIFx0XHRpZiAoaWNvdW50X3JlYWRfb25jZShpbm9kZSkpXG5AQCAtODk5LDE5ICs4OTgsMTkgQEAgdm9pZCBldmljdF9pbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdFx0aW5vZGVfc3RhdGVfc2V0KGlub2RlLCBJX0ZSRUVJTkcpO1xuIFx0XHRpbm9kZV9scnVfbGlzdF9kZWwoaW5vZGUpO1xuIFx0XHRzcGluX3VubG9jayhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spO1xuLVx0XHRsaXN0X2FkZChcdTAwMjZpbm9kZS1cdTAwM2VpX2xydSwgXHUwMDI2ZGlzcG9zZSk7XG4gXG4gXHRcdC8qXG4tXHRcdCAqIFdlIGNhbiBoYXZlIGEgdG9uIG9mIGlub2RlcyB0byBldmljdCBhdCB1bm1vdW50IHRpbWUgZ2l2ZW5cbi1cdFx0ICogZW5vdWdoIG1lbW9yeSwgY2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8gZ28gdG8gc2xlZXAgZm9yIGFcbi1cdFx0ICogYml0IHNvIHdlIGRvbid0IGxpdmVsb2NrLlxuK1x0XHQgKiBLZWVwIHRoaXMgaW5vZGUgb3V0IG9mIGRpc3Bvc2Ugc28gaXQgc3RheXMgb24gc19pbm9kZXMgd2hpbGVcbitcdFx0ICogdGhlIGxpc3QgbG9jayBpcyBkcm9wcGVkLiBJX0ZSRUVJTkcgcHJldmVudHMgbmV3IHJlZmVyZW5jZXNcbitcdFx0ICogYW5kIGxlYXZlcyBldmljdGlvbiB0byB1cywgc28gd2UgY2FuIHJlc3VtZSB0aGUgd2FsayBmcm9tIGl0LlxuIFx0XHQgKi9cbiBcdFx0aWYgKG5lZWRfcmVzY2hlZCgpKSB7XG4gXHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2c2ItXHUwMDNlc19pbm9kZV9saXN0X2xvY2spO1xuIFx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0XHRcdGRpc3Bvc2VfbGlzdChcdTAwMjZkaXNwb3NlKTtcbi1cdFx0XHRnb3RvIGFnYWluO1xuK1x0XHRcdHNwaW5fbG9jayhcdTAwMjZzYi1cdTAwM2VzX2lub2RlX2xpc3RfbG9jayk7XG4gXHRcdH1cbitcdFx0bGlzdF9hZGQoXHUwMDI2aW5vZGUtXHUwMDNlaV9scnUsIFx1MDAyNmRpc3Bvc2UpO1xuIFx0fVxuIFx0c3Bpbl91bmxvY2soXHUwMDI2c2ItXHUwMDNlc19pbm9kZV9saXN0X2xvY2spO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDU6NTI6MjYuNTkxNTY0NTQ1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjkzNTYzODk4MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBGaWxlIFN5c3RlbSdzIElub2RlIEltcGxlbWVudGF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCdzIGNoYW5nZWQgYW5kIGhvdyBpdCBpbXBhY3RzIHRoZSBgZnMvaW5vZGUuY2AgY29tcG9uZW50LiBJJ20gdGhpbmtpbmcgdGhlIGJlc3QgZmlyc3Qgc3RlcCBpcyBhIGNsb3NlIGluc3BlY3Rpb24gb2YgdGhlIGRpZmYgaXRzZWxmLCBidXQgSSB3YW50IHRvIHB1dCB0aGUgY2hhbmdlcyBpbiBjb250ZXh0LiBUbyBkbyB0aGF0LCBJJ20gZ29pbmcgdG8gbGV2ZXJhZ2UgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgbG9vayBhdCB0aGUgY29kZSBibG9jayBzdXJyb3VuZGluZyBsaW5lcyA4ODAtOTIwIGluIGBmcy9pbm9kZS5jYC4gVGhhdCBhcmVhIGlzIGxpa2VseSB0byByZXZlYWwgdGhlIGltbWVkaWF0ZSBiZWZvcmUgYW5kIGFmdGVyIGZvciB0aGUgY2hhbmdlcywgb3IgcG90ZW50aWFsbHkgdGhlIGFyZWEgdGhhdCB0aG9zZSBjaGFuZ2VzIHJlbGF0ZSB0by4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBvZiB0aGUgY2hhbmdlIGluIHRoZSBvdmVyYWxsIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNzAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA1OjUyOjM1Ljk0Nzk1NzQyNFoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDQ3OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvaW5vZGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NzAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NzA6XFx0ICogZXZpY3RfaW5vZGVzXFx0LSBldmljdCBhbGwgZXZpY3RhYmxlIGlub2RlcyBmb3IgYSBzdXBlcmJsb2NrXFxuIDg3MTpcXHQgKiBAc2I6XFx0XFx0c3VwZXJibG9jayB0byBvcGVyYXRlIG9uXFxuIDg3MjpcXHQgKlxcbiA4NzM6XFx0ICogTWFrZSBzdXJlIHRoYXQgbm8gaW5vZGVzIHdpdGggemVybyByZWZjb3VudCBhcmUgcmV0YWluZWQuICBUaGlzIGlzXFxuIDg3NDpcXHQgKiBjYWxsZWQgYnkgc3VwZXJibG9jayBzaHV0ZG93biBhZnRlciBoYXZpbmcgU0JfQUNUSVZFIGZsYWcgcmVtb3ZlZCxcXG4gODc1OlxcdCAqIHNvIGFueSBpbm9kZSByZWFjaGluZyB6ZXJvIHJlZmNvdW50IGR1cmluZyBvciBhZnRlciB0aGF0IGNhbGwgd2lsbFxcbiA4NzY6XFx0ICogYmUgaW1tZWRpYXRlbHkgZXZpY3RlZC5cXG4gODc3OlxcdCAqL1xcbiA4Nzg6XFx0dm9pZCBldmljdF9pbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4gODc5OlxcdHtcXG4gODgwOlxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XFxuIDg4MTpcXHRcXHRMSVNUX0hFQUQoZGlzcG9zZSk7XFxuIDg4MjpcXHRcXG4gODgzOlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2c2ItXFx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrKTtcXG4gODg0OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoaW5vZGUsIFxcdTAwMjZzYi1cXHUwMDNlc19pbm9kZXMsIGlfc2JfbGlzdCkge1xcbiA4ODU6XFx0XFx0XFx0aWYgKGljb3VudF9yZWFkX29uY2UoaW5vZGUpKVxcbiA4ODY6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDg4NzpcXHRcXG4gODg4OlxcdFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuIDg4OTpcXHRcXHRcXHRpZiAoaWNvdW50X3JlYWQoaW5vZGUpKSB7XFxuIDg5MDpcXHRcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuIDg5MTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gODkyOlxcdFxcdFxcdH1cXG4gODkzOlxcdFxcdFxcdGlmIChpbm9kZV9zdGF0ZV9yZWFkKGlub2RlKSBcXHUwMDI2IChJX05FVyB8IElfRlJFRUlORyB8IElfV0lMTF9GUkVFKSkge1xcbiA4OTQ6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmlub2RlLVxcdTAwM2VpX2xvY2spO1xcbiA4OTU6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDg5NjpcXHRcXHRcXHR9XFxuIDg5NzpcXHRcXG4gODk4OlxcdFxcdFxcdGlub2RlX3N0YXRlX3NldChpbm9kZSwgSV9GUkVFSU5HKTtcXG4gODk5OlxcdFxcdFxcdGlub2RlX2xydV9saXN0X2RlbChpbm9kZSk7XFxuIDkwMDpcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuIDkwMTpcXHRcXG4gOTAyOlxcdFxcdFxcdC8qXFxuIDkwMzpcXHRcXHRcXHQgKiBLZWVwIHRoaXMgaW5vZGUgb3V0IG9mIGRpc3Bvc2Ugc28gaXQgc3RheXMgb24gc19pbm9kZXMgd2hpbGVcXG4gOTA0OlxcdFxcdFxcdCAqIHRoZSBsaXN0IGxvY2sgaXMgZHJvcHBlZC4gSV9GUkVFSU5HIHByZXZlbnRzIG5ldyByZWZlcmVuY2VzXFxuIDkwNTpcXHRcXHRcXHQgKiBhbmQgbGVhdmVzIGV2aWN0aW9uIHRvIHVzLCBzbyB3ZSBjYW4gcmVzdW1lIHRoZSB3YWxrIGZyb20gaXQuXFxuIDkwNjpcXHRcXHRcXHQgKi9cXG4gOTA3OlxcdFxcdFxcdGlmIChuZWVkX3Jlc2NoZWQoKSkge1xcbiA5MDg6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnNiLVxcdTAwM2VzX2lub2RlX2xpc3RfbG9jayk7XFxuIDkwOTpcXHRcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gOTEwOlxcdFxcdFxcdFxcdGRpc3Bvc2VfbGlzdChcXHUwMDI2ZGlzcG9zZSk7XFxuIDkxMTpcXHRcXHRcXHRcXHRzcGluX2xvY2soXFx1MDAyNnNiLVxcdTAwM2VzX2lub2RlX2xpc3RfbG9jayk7XFxuIDkxMjpcXHRcXHRcXHR9XFxuIDkxMzpcXHRcXHRcXHRsaXN0X2FkZChcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbHJ1LCBcXHUwMDI2ZGlzcG9zZSk7XFxuIDkxNDpcXHRcXHR9XFxuIDkxNTpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2c2ItXFx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrKTtcXG4gOTE2OlxcdFxcbiA5MTc6XFx0XFx0ZGlzcG9zZV9saXN0KFxcdTAwMjZkaXNwb3NlKTtcXG4gOTE4OlxcdH1cXG4gOTE5OlxcdEVYUE9SVF9TWU1CT0xfR1BMKGV2aWN0X2lub2Rlcyk7XFxuIDkyMDpcXHRcXG4gOTIxOlxcdC8qXFxuIDkyMjpcXHQgKiBJc29sYXRlIHRoZSBpbm9kZSBmcm9tIHRoZSBMUlUgaW4gcHJlcGFyYXRpb24gZm9yIGZyZWVpbmcgaXQuXFxuIDkyMzpcXHQgKlxcbiA5MjQ6XFx0ICogSWYgdGhlIGlub2RlIGhhcyB0aGUgSV9SRUZFUkVOQ0VEIGZsYWcgc2V0LCB0aGVuIGl0IG1lYW5zIHRoYXQgaXQgaGFzIGJlZW5cXG4gOTI1OlxcdCAqIHVzZWQgcmVjZW50bHkgLSB0aGUgZmxhZyBpcyBzZXQgaW4gaXB1dF9maW5hbCgpLiBXaGVuIHdlIGVuY291bnRlciBzdWNoIGFuXFxuIDkyNjpcXHQgKiBpbm9kZSwgY2xlYXIgdGhlIGZsYWcgYW5kIG1vdmUgaXQgdG8gdGhlIGJhY2sgb2YgdGhlIExSVSBzbyBpdCBnZXRzIGFub3RoZXJcXG4gOTI3OlxcdCAqIHBhc3MgdGhyb3VnaCB0aGUgTFJVIGJlZm9yZSBpdCBnZXRzIHJlY2xhaW1lZC4gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBvZlxcbiA5Mjg6XFx0ICogdGhlIGZhY3Qgd2UgYXJlIGRvaW5nIGxhenkgTFJVIHVwZGF0ZXMgdG8gbWluaW1pc2UgbG9jayBjb250ZW50aW9uIHNvIHRoZVxcbiA5Mjk6XFx0ICogTFJVIGRvZXMgbm90IGhhdmUgc3RyaWN0IG9yZGVyaW5nLiBIZW5jZSB3ZSBkb24ndCB3YW50IHRvIHJlY2xhaW0gaW5vZGVzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA1OjUyOjM1Ljk0ODE2NTUyNFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4MzE4OTMwNzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IFRoaXMgUGF0Y2ggRG9lc24ndCBXYXJyYW50IEl0KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSdtIGxvb2tpbmcgYXQgaG93IHRoaXMgYGV2aWN0X2lub2Rlc2AgZnVuY3Rpb24gaXMgbW9kaWZpZWQsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHRoZSBsaXN0IGl0ZXJhdGlvbiBhbmQgcmVzY2hlZHVsaW5nIGxvZ2ljLiBUaGUgb3JpZ2luYWwgY29kZSBoYXMgYSBgZ290byBhZ2FpbmAgYW5kIGBjb25kX3Jlc2NoZWQoKWAgY2FsbC4gVGhpcyBwYXRjaCBzZWVtcyB0byBiZSBhbiBvcHRpbWl6YXRpb24uIFJhdGhlciB0aGFuIHJlc3RhcnRpbmcgZnJvbSB0aGUgdG9wIG9mIHRoZSBsaXN0LCBpdCdzIG1vZGlmeWluZyB0aGUgcHJvY2VzcyBvZiBob3cgaW5vZGVzIGFyZSBtb3ZlZCB0byB0aGUgYGRpc3Bvc2VgIGxpc3QgZHVyaW5nIHRoZSBldmljdGlvbiBwcm9jZXNzLCBwYXJ0aWN1bGFybHkgdG8gYXZvaWQgbGl2ZWxvY2tzIGR1cmluZyB1bm1vdW50cy4gVGhlIGNydWNpYWwgcGFydCBpcyB0aGF0IHRoZSBwYXRjaCByZW9yZGVycyB0aGUgc3BpbmxvY2sgYWNxdWlzaXRpb24gYW5kIGBsaXN0X2FkZGAgY2FsbHMgYXJvdW5kIGBjb25kX3Jlc2NoZWQoKWAuXG5cblRoZSBpbW1lZGlhdGUgcmVkIGZsYWdzIGFyZSBhcm91bmQgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcywgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBsaXN0cyBhbmQgbG9ja3MuIERyb3BwaW5nIHRoZSBsb2NrIGFuZCB0aGVuIHJlYWNxdWlyaW5nIGl0IHdoaWxlIGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBsaXN0IGltbWVkaWF0ZWx5IHNjcmVhbXMgXCJyYWNlIGNvbmRpdGlvbnNcIiBhbmQgcG9zc2libGUgbGlzdCBjb3JydXB0aW9uIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIEl0J3MgdGhhdCBgbGlzdF9mb3JfZWFjaF9lbnRyeWAgY29udGV4dCB0aGF0IEkgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGguIFRoZSBwcmV2aW91cyBpbm9kZSBpcyBmaW5lLCBidXQgdGhlICpuZXh0KiBpbm9kZSwgb3IgdGhlIGxpc3QgaXRzZWxmLCBtaWdodCBiZSBjaGFuZ2VkIGJ5IGEgY29uY3VycmVudCBwcm9jZXNzLlxuXG5Ob3csIGNvbnNpZGVyaW5nIHRoZSBwb3NzaWJpbGl0aWVzIGhlcmUgLSBsaXN0IGNvcnJ1cHRpb24sIHVzZS1hZnRlci1mcmVlLCBjb25jdXJyZW50IGxpc3QgbW9kaWZpY2F0aW9uLCBsb2NrZGVwIHZpb2xhdGlvbnMg4oCTIHRob3NlIGFsbCBmYWxsIHNxdWFyZWx5IGludG8gdGhlIGRvbWFpbiBvZiBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSwgTE9DS0RFUCwgYW5kIERFQlVHX0xJU1QuIFRoZXNlIHRvb2xzIGFyZSBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gY2F0Y2ggdGhlc2UgdHlwZXMgb2YgbWVtb3J5IHNhZmV0eSBhbmQgY29uY3VycmVuY3kgYnVncy5cblxuVGhlIGNlbnRyYWwgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBpbnRyb2R1Y2UgKnVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzKiBvciBwb3RlbnRpYWwgKmtlcm5lbCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UqPyAgTGV0J3Mgd2FsayB0aHJvdWdoIHRoZSBjcml0ZXJpYTpcblxuMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlPyoqIE5vcGUuIE5vIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBuZXRsaW5rLCBpb2N0bCwgbm90aGluZyB0aGF0IGRpcmVjdGx5IHRyYW5zZmVycyBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLlxuMi4gICoqVW5pbml0aWFsaXplZCB2YXJpYWJsZSBicmFuY2hpbmc/KiogIE5vLCBldmVyeXRoaW5nIGhlcmUgYXBwZWFycyB0byBiZSBwcm9wZXJseSBpbml0aWFsaXplZCBvciBkZXJpdmVkIGZyb20gdGhlIGV4aXN0aW5nIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgbGlrZSBgaW5vZGVgIGZyb20gYGxpc3RfZm9yX2VhY2hfZW50cnlgLlxuMy4gICoqVW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbj8qKiBBYnNvbHV0ZWx5IG5vdC4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9uIGlzIGludHJvZHVjZWQuXG40LiAgKipCb3VuZHMgY2hlY2tzIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyoqICBObywgdGhlIHBhdGNoIG1vZGlmaWVzIGxvZ2ljIGFyb3VuZCBleGlzdGluZyBsaXN0cywgdGhlcmUgYXJlIG5vIGNoYW5nZXMgaGVyZS5cblxuVGhlIGBpbm9kZWAgcG9pbnRlciBjb21lcyBmcm9tIGBsaXN0X2Zvcl9lYWNoX2VudHJ5YCwgc28gaXQncyBpbml0aWFsaXplZC4gVGhlIGBkaXNwb3NlYCBsaXN0IGlzIGluaXRpYWxpemVkIHZpYSBgTElTVF9IRUFEYC4gSXQncyBhbGwgdmVyeSBzdGFuZGFyZC5cblxuUmV2aWV3aW5nIHRoZSBLTVNBTiBndWlkZWxpbmVzLCBpdCBiZWNvbWVzIGFidW5kYW50bHkgY2xlYXI6XG5cbioqXCJUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLCBMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlwiKipcblxuVGhlIHBhdGNoIGNoYW5nZXMgZG9uJ3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGUgcG90ZW50aWFsIGlzc3VlcyBhcmUgY29uY3VycmVuY3ktcmVsYXRlZCwgd2hpY2ggYXJlICpleGFjdGx5KiB3aGF0IEtBU0FOIGFuZCB0aGUgb3RoZXJzIGFyZSBmb3IuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU49ZmFsc2VgIGlzIHRoZSByaWdodCBjYWxsIGhlcmUuIE15IHJhdGlvbmFsZSBpczpcblxuKiAgIFRoZSBwYXRjaCBhbHRlcnMgdGhlIGlub2RlIGV2aWN0aW9uIHByb2Nlc3MsIGZvY3VzaW5nIG9uIGxpc3QgaXRlcmF0aW9uIGFuZCByZXNjaGVkdWxpbmcuXG4qICAgVGhlIHByaW1hcnkgcmlza3MgYXJlIGNvbmN1cnJlbmN5LXJlbGF0ZWQgKGxpc3QgY29ycnVwdGlvbiwgdXNlLWFmdGVyLWZyZWUpLCBkZXRlY3RhYmxlIHZpYSBLQVNBTiwgREVCVUdfTElTVCwgYW5kIGxvY2sgZGVidWdnaW5nLlxuKiAgIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBvciB1c2VyLXRvLWtlcm5lbCBsZWFrcyBhcmUgaW50cm9kdWNlZC5cbiogICBIZW5jZSwgYSBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXG5cblRpbWUgdG8gaW52b2tlIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1NzMsIk91dHB1dFRva2VucyI6MTg0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA1OjUyOjQ0LjI2NzA5ODgxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaXRlcmF0aW9uIGxvZ2ljIGFuZCBsb2NraW5nIGluIGBldmljdF9pbm9kZXMoKWAgaW4gZnMvaW5vZGUuYyB0byBhdm9pZCByZXN0YXJ0aW5nIHRoZSBpbm9kZSBsaXN0IHdhbGsgKGBnb3RvIGFnYWluYCkgd2hlbiByZXNjaGVkdWxpbmcuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHN0ZW1taW5nIGZyb20gdGhpcyBjaGFuZ2Ugd291bGQgYmUgY29uY3VycmVuY3kgaXNzdWVzLCBsaXN0IGNvcnJ1cHRpb24sIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgKGlmIHRoZSBsaXN0IG9yIGlub2RlIHN0YXRlIGNoYW5nZXMgd2hpbGUgYHNiLVxcdTAwM2VzX2lub2RlX2xpc3RfbG9ja2AgaXMgZHJvcHBlZCksIHdoaWNoIGFyZSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzIChzdWNoIGFzIENPTkZJR19ERUJVR19MSVNUKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IHJlYWQgb3IgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgZG9lcyBub3QgY29weSBhbnkgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpdGVyYXRpb24gbG9naWMgYW5kIGxvY2tpbmcgaW4gYGV2aWN0X2lub2RlcygpYCBpbiBmcy9pbm9kZS5jIHRvIGF2b2lkIHJlc3RhcnRpbmcgdGhlIGlub2RlIGxpc3Qgd2FsayAoYGdvdG8gYWdhaW5gKSB3aGVuIHJlc2NoZWR1bGluZy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgc3RlbW1pbmcgZnJvbSB0aGlzIGNoYW5nZSB3b3VsZCBiZSBjb25jdXJyZW5jeSBpc3N1ZXMsIGxpc3QgY29ycnVwdGlvbiwgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyAoaWYgdGhlIGxpc3Qgb3IgaW5vZGUgc3RhdGUgY2hhbmdlcyB3aGlsZSBgc2ItXFx1MDAzZXNfaW5vZGVfbGlzdF9sb2NrYCBpcyBkcm9wcGVkKSwgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMgKHN1Y2ggYXMgQ09ORklHX0RFQlVHX0xJU1QpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgcmVhZCBvciBicmFuY2ggb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBkb2VzIG5vdCBjb3B5IGFueSBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowx7bjq[1] Phase: Succeeded StartedAt: 2026-09-15 05:52:55 +0000 UTC FinishedAt: 2026-09-15 05:52:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7bjq[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-15 05:52:55 +0000 UTC FinishedAt: 2026-09-15 05:52:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7bjq[2] Phase: Succeeded StartedAt: 2026-09-15 05:52:55 +0000 UTC FinishedAt: 2026-09-15 09:44:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7bjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["evict_inodes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"83e8e15f-cb09-4259-863c-bf6e64bd997c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-15 05:52:55 +0000 UTC FinishedAt: 2026-09-15 09:44:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["evict_inodes"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"83e8e15f-cb09-4259-863c-bf6e64bd997c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowx7bjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["evict_inodes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"83e8e15f-cb09-4259-863c-bf6e64bd997c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-15 05:52:55 +0000 UTC FinishedAt: 2026-09-15 05:53:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7bjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["evict_inodes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"83e8e15f-cb09-4259-863c-bf6e64bd997c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-15 05:52:55 +0000 UTC FinishedAt: 2026-09-15 05:53:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowx7bjq/series-workflowx7bjq-convert-artifact-2549893183/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx7bjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["evict_inodes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"83e8e15f-cb09-4259-863c-bf6e64bd997c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-15 05:53:16 +0000 UTC FinishedAt: 2026-09-15 06:09:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7bjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["evict_inodes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"83e8e15f-cb09-4259-863c-bf6e64bd997c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-15 05:53:16 +0000 UTC FinishedAt: 2026-09-15 06:09:28 +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:*875acf74-edb7-4074-ae5f-b4f7fb497d9b,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-workflowx7bjq/series-workflowx7bjq-convert-artifact-2549893183/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": "6b67eafc-67e7-4b5d-8ea5-4f984f6b13c8", "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-workflowx7bjq/series-workflowx7bjq-build-action-3598996165/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx7bjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["evict_inodes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"83e8e15f-cb09-4259-863c-bf6e64bd997c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-15 05:53:16 +0000 UTC FinishedAt: 2026-09-15 06:09:18 +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:*875acf74-edb7-4074-ae5f-b4f7fb497d9b,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-workflowx7bjq/series-workflowx7bjq-convert-artifact-2549893183/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": "6b67eafc-67e7-4b5d-8ea5-4f984f6b13c8", "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-workflowx7bjq/series-workflowx7bjq-build-action-3598996165/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx7bjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["evict_inodes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"83e8e15f-cb09-4259-863c-bf6e64bd997c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-15 06:09:28 +0000 UTC FinishedAt: 2026-09-15 06:09:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7bjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["evict_inodes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"83e8e15f-cb09-4259-863c-bf6e64bd997c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-15 06:09:28 +0000 UTC FinishedAt: 2026-09-15 06:09:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7bjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["evict_inodes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"83e8e15f-cb09-4259-863c-bf6e64bd997c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-15 06:09:28 +0000 UTC FinishedAt: 2026-09-15 06:09:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7bjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["evict_inodes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"83e8e15f-cb09-4259-863c-bf6e64bd997c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-15 06:09:28 +0000 UTC FinishedAt: 2026-09-15 06:09:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"83e8e15f-cb09-4259-863c-bf6e64bd997c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowx7bjq/series-workflowx7bjq-convert-artifact-2866061134/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx7bjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["evict_inodes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"83e8e15f-cb09-4259-863c-bf6e64bd997c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-15 06:09:39 +0000 UTC FinishedAt: 2026-09-15 06:11:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7bjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["evict_inodes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"83e8e15f-cb09-4259-863c-bf6e64bd997c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-15 06:09:39 +0000 UTC FinishedAt: 2026-09-15 06:11:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6b67eafc-67e7-4b5d-8ea5-4f984f6b13c8,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-workflowx7bjq/series-workflowx7bjq-build-action-3598996165/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-workflowx7bjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["evict_inodes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"83e8e15f-cb09-4259-863c-bf6e64bd997c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-15 06:11:35 +0000 UTC FinishedAt: 2026-09-15 06:11:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7bjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["evict_inodes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"83e8e15f-cb09-4259-863c-bf6e64bd997c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-15 06:11:35 +0000 UTC FinishedAt: 2026-09-15 06:11:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7bjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["evict_inodes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"83e8e15f-cb09-4259-863c-bf6e64bd997c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-15 06:11:35 +0000 UTC FinishedAt: 2026-09-15 06:28:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7bjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["evict_inodes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"83e8e15f-cb09-4259-863c-bf6e64bd997c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-15 06:11:35 +0000 UTC FinishedAt: 2026-09-15 06:28:04 +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:*875acf74-edb7-4074-ae5f-b4f7fb497d9b,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-workflowx7bjq/series-workflowx7bjq-convert-artifact-2866061134/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": "6008280c-881f-4e6c-8565-c9da16f7766a", "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-workflowx7bjq/series-workflowx7bjq-build-action-3188408546/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx7bjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["evict_inodes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"83e8e15f-cb09-4259-863c-bf6e64bd997c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-15 06:11:35 +0000 UTC FinishedAt: 2026-09-15 06:27:54 +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:*875acf74-edb7-4074-ae5f-b4f7fb497d9b,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-workflowx7bjq/series-workflowx7bjq-convert-artifact-2866061134/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": "6008280c-881f-4e6c-8565-c9da16f7766a", "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-workflowx7bjq/series-workflowx7bjq-build-action-3188408546/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx7bjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["evict_inodes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"83e8e15f-cb09-4259-863c-bf6e64bd997c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-15 06:28:04 +0000 UTC FinishedAt: 2026-09-15 06:28:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7bjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["evict_inodes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"83e8e15f-cb09-4259-863c-bf6e64bd997c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-15 06:28:04 +0000 UTC FinishedAt: 2026-09-15 06:28:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7bjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["evict_inodes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"83e8e15f-cb09-4259-863c-bf6e64bd997c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-15 06:28:04 +0000 UTC FinishedAt: 2026-09-15 06:30:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7bjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["evict_inodes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"83e8e15f-cb09-4259-863c-bf6e64bd997c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-15 06:28:04 +0000 UTC FinishedAt: 2026-09-15 06:30:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6008280c-881f-4e6c-8565-c9da16f7766a,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-workflowx7bjq/series-workflowx7bjq-build-action-3188408546/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-workflowx7bjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["evict_inodes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"83e8e15f-cb09-4259-863c-bf6e64bd997c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-15 06:30:40 +0000 UTC FinishedAt: 2026-09-15 09:44:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7bjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["evict_inodes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"83e8e15f-cb09-4259-863c-bf6e64bd997c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-15 06:30:40 +0000 UTC FinishedAt: 2026-09-15 09:44:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["evict_inodes"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*6b67eafc-67e7-4b5d-8ea5-4f984f6b13c8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6008280c-881f-4e6c-8565-c9da16f7766a,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-workflowx7bjq/series-workflowx7bjq-build-action-3598996165/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-workflowx7bjq/series-workflowx7bjq-build-action-3188408546/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowx7bjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["evict_inodes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"83e8e15f-cb09-4259-863c-bf6e64bd997c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-15 06:30:40 +0000 UTC FinishedAt: 2026-09-15 06:30:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7bjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["evict_inodes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"83e8e15f-cb09-4259-863c-bf6e64bd997c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-15 06:30:40 +0000 UTC FinishedAt: 2026-09-15 06:30:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["evict_inodes"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowx7bjq/series-workflowx7bjq-convert-artifact-29543283/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx7bjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["evict_inodes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"83e8e15f-cb09-4259-863c-bf6e64bd997c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-15 06:30:40 +0000 UTC FinishedAt: 2026-09-15 06:30:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7bjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["evict_inodes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"83e8e15f-cb09-4259-863c-bf6e64bd997c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-15 06:30:40 +0000 UTC FinishedAt: 2026-09-15 06:30:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7bjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["evict_inodes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"83e8e15f-cb09-4259-863c-bf6e64bd997c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-15 06:30:40 +0000 UTC FinishedAt: 2026-09-15 06:30:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7bjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["evict_inodes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"83e8e15f-cb09-4259-863c-bf6e64bd997c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-15 06:30:50 +0000 UTC FinishedAt: 2026-09-15 09:44:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7bjq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"base_commit":"f5d607b8091438d8416d0e3ae02532a18539b48b","base_tree":"vfs","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["evict_inodes"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5d607b8091438d8416d0e3ae02532a18539b48b","config_name":"upstream-apparmor-kasan.config","series_id":"83e8e15f-cb09-4259-863c-bf6e64bd997c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-15 06:30:50 +0000 UTC FinishedAt: 2026-09-15 09:44:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6b67eafc-67e7-4b5d-8ea5-4f984f6b13c8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6008280c-881f-4e6c-8565-c9da16f7766a,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-workflowx7bjq/series-workflowx7bjq-build-action-3598996165/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-workflowx7bjq/series-workflowx7bjq-build-action-3188408546/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-workflowx7bjq/series-workflowx7bjq-convert-artifact-29543283/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,}