Name: series-workflow6dp2s Phase: Succeeded StartedAt: 2026-09-07 11:32:40 +0000 UTC FinishedAt: 2026-09-07 15:56:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6dp2s[0] Phase: Succeeded StartedAt: 2026-09-07 11:32:40 +0000 UTC FinishedAt: 2026-09-07 12:16:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6dp2s[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 11:32:40 +0000 UTC FinishedAt: 2026-09-07 12:16:52 +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": "21860bb220225edeb87e9c831e6bf25c620e2126", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ISO9660_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "21860bb220225edeb87e9c831e6bf25c620e2126", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ISO9660_FS" ], "series_id": "a84db8e6-ca63-475e-b9c8-cbd1a849cb84" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "isofs_fill_super", "rock_continue", "get_rock_ridge_filename", "parse_rock_ridge_inode", "rock_ridge_symlink_read_folio" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lTTzk2NjBfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpc29mc19maWxsX3N1cGVyJiMzNDssCiAgICAmIzM0O3JvY2tfY29udGludWUmIzM0OywKICAgICYjMzQ7Z2V0X3JvY2tfcmlkZ2VfZmlsZW5hbWUmIzM0OywKICAgICYjMzQ7cGFyc2Vfcm9ja19yaWRnZV9pbm9kZSYjMzQ7LAogICAgJiMzNDtyb2NrX3JpZGdlX3N5bWxpbmtfcmVhZF9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGZzL2lzb2ZzIHRvIHByb3Blcmx5IHZhbGlkYXRlIFJvY2sgUmlkZ2UgY29udGludWF0aW9uIGV4dGVudHMgKGBDRWAgZW50cmllcykgYWdhaW5zdCBzZXNzaW9uIGFuZCBibG9jayBkZXZpY2UgYm91bmRhcmllcyBieSBpbnRyb2R1Y2luZyBgc2JpLVx1MDAzZXNfc2Vzc2lvbl9zdGFydGAgYW5kIGNvbXBhcmluZyBgY29udF9leHRlbnRgIGFnYWluc3QgdGhlIHZhbGlkIHJhbmdlLiBcblxuLSBgc3RydWN0IGlzb2ZzX3NiX2luZm9gIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmpgLCBhbmQgYHNfc2Vzc2lvbl9zdGFydGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCBkdXJpbmcgc3VwZXJibG9jayBzZXR1cCBiZWZvcmUgYW55IFJvY2sgUmlkZ2UgcGFyc2luZyBvY2N1cnMuXG4tIFRoZSBwYXRjaCB0aWdodGVucyBib3VuZHMgY2hlY2tzIGZvciBibG9jayByZWFkcywgbWl0aWdhdGluZyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBibG9jayByZWFkcyBvbiBjb3JydXB0ZWQvbWFsaWNpb3VzIElTTyBpbWFnZXMgKHdoaWNoIGZhbGwgdW5kZXIgS0FTQU4vZ2VuZXJpYyBib3VuZHMgY2hlY2tpbmcpLlxuLSBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgc3RhY2svaGVhcCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZS5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IHByZXNlbnQgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc2Vzc2lvbiBib3VuZGFyeSBhbmQgYmxvY2sgZGV2aWNlIGNhcGFjaXR5IHZhbGlkYXRpb24gZm9yIFJvY2sgUmlkZ2UgQ29udGludWF0aW9uIEFyZWEgKENFKSByZWNvcmRzIGluIGlzb2ZzLiBUaGUgbW9kaWZpZWQgY29kZSBpcyBkaXJlY3RseSByZWFjaGFibGUgYnkgbW91bnRpbmcgYW5kIHJlYWRpbmcgY3JhZnRlZCBJU085NjYwIGZpbGVzeXN0ZW0gaW1hZ2VzIHZpYSBsb29wL2Rpc2sgZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMjoxNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGYwMjE1YmZlZjNiNzc2MWU3N2Q4YjU5MmU3ZDdkMGIzNGQ1ZTllZWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDEyOjE1OjI4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2lzb2ZzL2lub2RlLmMgYi9mcy9pc29mcy9pbm9kZS5jXG5pbmRleCAzMzc4MzZhMGExNzA0Li5lZmNiOGZiMmIxMGM0IDEwMDY0NFxuLS0tIGEvZnMvaXNvZnMvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaXNvZnMvaW5vZGUuY1xuQEAgLTgyMSw2ICYjNDM7ODIxLDggQEAgc3RhdGljIGludCBpc29mc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuIFx0aWYgKCFzYl9zZXRfYmxvY2tzaXplKHMsIG9yaWdfem9uZXNpemUpKVxuIFx0XHRnb3RvIG91dF9mcmVlc2JpO1xuIFxuJiM0MztcdHNiaS1cdTAwM2VzX3Nlc3Npb25fc3RhcnQgPSAodTY0KXZvbF9kZXNjX3N0YXJ0IFx1MDAzY1x1MDAzY1xuJiM0MztcdFx0XHRcdChJU09GU19CTE9DS19CSVRTIC0gcy1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzKTtcbiBcdHNiaS1cdTAwM2VzX25sc19pb2NoYXJzZXQgPSBOVUxMO1xuIFxuICNpZmRlZiBDT05GSUdfSk9MSUVUXG5kaWZmIC0tZ2l0IGEvZnMvaXNvZnMvaXNvZnMuaCBiL2ZzL2lzb2ZzL2lzb2ZzLmhcbmluZGV4IGRhY2I5Y2RhZTRmZDEuLjA3MzJlMWFhM2I3ZmEgMTAwNjQ0XG4tLS0gYS9mcy9pc29mcy9pc29mcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9pc29mcy9pc29mcy5oXG5AQCAtMzUsNiAmIzQzOzM1LDggQEAgc3RydWN0IGlzb2ZzX3NiX2luZm8ge1xuIFx0dW5zaWduZWQgbG9uZyBzX2ZpcnN0ZGF0YXpvbmU7XG4gXHR1bnNpZ25lZCBsb25nIHNfbG9nX3pvbmVfc2l6ZTtcbiBcdHVuc2lnbmVkIGxvbmcgc19tYXhfc2l6ZTtcbiYjNDM7XHQvKiBTZXNzaW9uIHN0YXJ0IGluIGZpbGVzeXN0ZW0gYmxvY2sgdW5pdHMuICovXG4mIzQzO1x0dTY0IHNfc2Vzc2lvbl9zdGFydDtcbiBcdFxuIFx0aW50ICAgICAgICAgICBzX3JvY2tfb2Zmc2V0OyAvKiBvZmZzZXQgb2YgU1VTUCBmaWVsZHMgd2l0aGluIFNVIGFyZWEgKi9cbiBcdHMzMiAgICAgICAgICAgc19zYnNlY3RvcjtcbmRpZmYgLS1naXQgYS9mcy9pc29mcy9yb2NrLmMgYi9mcy9pc29mcy9yb2NrLmNcbmluZGV4IDI2MjhmMzFiZDNhNWQuLmE5NjQ1YTllODYyODkgMTAwNjQ0XG4tLS0gYS9mcy9pc29mcy9yb2NrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2lzb2ZzL3JvY2suY1xuQEAgLTksNiAmIzQzOzksNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9ibGtkZXYuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O2lzb2ZzLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtyb2NrLmhcJiMzNDtcbkBAIC04NCw2ICYjNDM7ODUsMTEgQEAgc3RhdGljIHZvaWQgaW5pdF9yb2NrX3N0YXRlKHN0cnVjdCByb2NrX3N0YXRlICpycywgc3RydWN0IGlub2RlICppbm9kZSlcbiAgKi9cbiBzdGF0aWMgaW50IHJvY2tfY29udGludWUoc3RydWN0IHJvY2tfc3RhdGUgKnJzKVxuIHtcbiYjNDM7XHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gcnMtXHUwMDNlaW5vZGUtXHUwMDNlaV9zYjtcbiYjNDM7XHRzdHJ1Y3QgaXNvZnNfc2JfaW5mbyAqc2JpID0gSVNPRlNfU0Ioc2IpO1xuJiM0MztcdHU2NCBleHRlbnQgPSAodW5zaWduZWQgaW50KXJzLVx1MDAzZWNvbnRfZXh0ZW50O1xuJiM0MztcdHU2NCBzZXNzaW9uX2VuZCA9IHNiaS1cdTAwM2VzX3Nlc3Npb25fc3RhcnQgJiM0MztcbiYjNDM7XHRcdCgodTY0KXNiaS1cdTAwM2VzX256b25lcyBcdTAwM2NcdTAwM2MgKElTT0ZTX0JMT0NLX0JJVFMgLSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzKSk7XG4gXHRpbnQgcmV0ID0gMTtcbiBcdGludCBibG9ja3NpemUgPSAxIFx1MDAzY1x1MDAzYyBycy1cdTAwM2Vpbm9kZS1cdTAwM2VpX2Jsa2JpdHM7XG4gXHRjb25zdCBpbnQgbWluX2RlX3NpemUgPSBvZmZzZXRvZihzdHJ1Y3Qgcm9ja19yaWRnZSwgdSk7XG5AQCAtMTAxLDExICYjNDM7MTA3LDE0IEBAIHN0YXRpYyBpbnQgcm9ja19jb250aW51ZShzdHJ1Y3Qgcm9ja19zdGF0ZSAqcnMpXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0aWYgKCh1bnNpZ25lZClycy1cdTAwM2Vjb250X2V4dGVudCBcdTAwM2U9IElTT0ZTX1NCKHJzLVx1MDAzZWlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfbnpvbmVzKSB7XG4mIzQzO1x0aWYgKHJzLVx1MDAzZWNvbnRfZXh0ZW50IFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAoZXh0ZW50IFx1MDAzYyBzYmktXHUwMDNlc19zZXNzaW9uX3N0YXJ0IHx8XG4mIzQzO1x0ICAgICBleHRlbnQgXHUwMDNlPSBzZXNzaW9uX2VuZCB8fFxuJiM0MztcdCAgICAgZXh0ZW50IFx1MDAzZT0gc2JfYmRldl9ucl9ibG9ja3Moc2IpKSkge1xuIFx0XHRwcmludGsoS0VSTl9OT1RJQ0UgXCYjMzQ7cm9jazogY29ycnVwdGVkIGRpcmVjdG9yeSBlbnRyeS4gXCYjMzQ7XG4gXHRcdFx0XCYjMzQ7ZXh0ZW50PSV1IG91dCBvZiB2b2x1bWUgKG56b25lcz0lbHUpXFxuXCYjMzQ7LFxuIFx0XHRcdCh1bnNpZ25lZClycy1cdTAwM2Vjb250X2V4dGVudCxcbi1cdFx0XHRJU09GU19TQihycy1cdTAwM2Vpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX256b25lcyk7XG4mIzQzO1x0XHRcdHNiaS1cdTAwM2VzX256b25lcyk7XG4gXHRcdHJldCA9IC1FSU87XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjE1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lTTzk2NjBfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpc29mc19maWxsX3N1cGVyJiMzNDssCiAgICAmIzM0O3JvY2tfY29udGludWUmIzM0OywKICAgICYjMzQ7Z2V0X3JvY2tfcmlkZ2VfZmlsZW5hbWUmIzM0OywKICAgICYjMzQ7cGFyc2Vfcm9ja19yaWRnZV9pbm9kZSYjMzQ7LAogICAgJiMzNDtyb2NrX3JpZGdlX3N5bWxpbmtfcmVhZF9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHNlc3Npb24gYm91bmRhcnkgYW5kIGJsb2NrIGRldmljZSBjYXBhY2l0eSB2YWxpZGF0aW9uIGZvciBSb2NrIFJpZGdlIENvbnRpbnVhdGlvbiBBcmVhIChDRSkgcmVjb3JkcyBpbiBpc29mcy4gVGhlIG1vZGlmaWVkIGNvZGUgaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGJ5IG1vdW50aW5nIGFuZCByZWFkaW5nIGNyYWZ0ZWQgSVNPOTY2MCBmaWxlc3lzdGVtIGltYWdlcyB2aWEgbG9vcC9kaXNrIGRldmljZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmMDIxNWJmZWYzYjc3NjFlNzdkOGI1OTJlN2Q3ZDBiMzRkNWU5ZWVmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAxMjoxNToyOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2lzb2ZzL2lub2RlLmMgYi9mcy9pc29mcy9pbm9kZS5jCmluZGV4IDMzNzgzNmEwYTE3MDQuLmVmY2I4ZmIyYjEwYzQgMTAwNjQ0Ci0tLSBhL2ZzL2lzb2ZzL2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaXNvZnMvaW5vZGUuYwpAQCAtODIxLDYgJiM0Mzs4MjEsOCBAQCBzdGF0aWMgaW50IGlzb2ZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpCiAJaWYgKCFzYl9zZXRfYmxvY2tzaXplKHMsIG9yaWdfem9uZXNpemUpKQogCQlnb3RvIG91dF9mcmVlc2JpOwogCiYjNDM7CXNiaS0mZ3Q7c19zZXNzaW9uX3N0YXJ0ID0gKHU2NCl2b2xfZGVzY19zdGFydCAmbHQ7Jmx0OwomIzQzOwkJCQkoSVNPRlNfQkxPQ0tfQklUUyAtIHMtJmd0O3NfYmxvY2tzaXplX2JpdHMpOwogCXNiaS0mZ3Q7c19ubHNfaW9jaGFyc2V0ID0gTlVMTDsKIAogI2lmZGVmIENPTkZJR19KT0xJRVQKZGlmZiAtLWdpdCBhL2ZzL2lzb2ZzL2lzb2ZzLmggYi9mcy9pc29mcy9pc29mcy5oCmluZGV4IGRhY2I5Y2RhZTRmZDEuLjA3MzJlMWFhM2I3ZmEgMTAwNjQ0Ci0tLSBhL2ZzL2lzb2ZzL2lzb2ZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaXNvZnMvaXNvZnMuaApAQCAtMzUsNiAmIzQzOzM1LDggQEAgc3RydWN0IGlzb2ZzX3NiX2luZm8gewogCXVuc2lnbmVkIGxvbmcgc19maXJzdGRhdGF6b25lOwogCXVuc2lnbmVkIGxvbmcgc19sb2dfem9uZV9zaXplOwogCXVuc2lnbmVkIGxvbmcgc19tYXhfc2l6ZTsKJiM0MzsJLyogU2Vzc2lvbiBzdGFydCBpbiBmaWxlc3lzdGVtIGJsb2NrIHVuaXRzLiAqLwomIzQzOwl1NjQgc19zZXNzaW9uX3N0YXJ0OwogCQogCWludCAgICAgICAgICAgc19yb2NrX29mZnNldDsgLyogb2Zmc2V0IG9mIFNVU1AgZmllbGRzIHdpdGhpbiBTVSBhcmVhICovCiAJczMyICAgICAgICAgICBzX3Nic2VjdG9yOwpkaWZmIC0tZ2l0IGEvZnMvaXNvZnMvcm9jay5jIGIvZnMvaXNvZnMvcm9jay5jCmluZGV4IDI2MjhmMzFiZDNhNWQuLmE5NjQ1YTllODYyODkgMTAwNjQ0Ci0tLSBhL2ZzL2lzb2ZzL3JvY2suYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9pc29mcy9yb2NrLmMKQEAgLTksNiAmIzQzOzksNyBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2VtYXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYmxrZGV2LmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7aXNvZnMuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3JvY2suaCYjMzQ7CkBAIC04NCw2ICYjNDM7ODUsMTEgQEAgc3RhdGljIHZvaWQgaW5pdF9yb2NrX3N0YXRlKHN0cnVjdCByb2NrX3N0YXRlICpycywgc3RydWN0IGlub2RlICppbm9kZSkKICAqLwogc3RhdGljIGludCByb2NrX2NvbnRpbnVlKHN0cnVjdCByb2NrX3N0YXRlICpycykKIHsKJiM0MzsJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHJzLSZndDtpbm9kZS0mZ3Q7aV9zYjsKJiM0MzsJc3RydWN0IGlzb2ZzX3NiX2luZm8gKnNiaSA9IElTT0ZTX1NCKHNiKTsKJiM0MzsJdTY0IGV4dGVudCA9ICh1bnNpZ25lZCBpbnQpcnMtJmd0O2NvbnRfZXh0ZW50OwomIzQzOwl1NjQgc2Vzc2lvbl9lbmQgPSBzYmktJmd0O3Nfc2Vzc2lvbl9zdGFydCAmIzQzOwomIzQzOwkJKCh1NjQpc2JpLSZndDtzX256b25lcyAmbHQ7Jmx0OyAoSVNPRlNfQkxPQ0tfQklUUyAtIHNiLSZndDtzX2Jsb2Nrc2l6ZV9iaXRzKSk7CiAJaW50IHJldCA9IDE7CiAJaW50IGJsb2Nrc2l6ZSA9IDEgJmx0OyZsdDsgcnMtJmd0O2lub2RlLSZndDtpX2Jsa2JpdHM7CiAJY29uc3QgaW50IG1pbl9kZV9zaXplID0gb2Zmc2V0b2Yoc3RydWN0IHJvY2tfcmlkZ2UsIHUpOwpAQCAtMTAxLDExICYjNDM7MTA3LDE0IEBAIHN0YXRpYyBpbnQgcm9ja19jb250aW51ZShzdHJ1Y3Qgcm9ja19zdGF0ZSAqcnMpCiAJCWdvdG8gb3V0OwogCX0KIAotCWlmICgodW5zaWduZWQpcnMtJmd0O2NvbnRfZXh0ZW50ICZndDs9IElTT0ZTX1NCKHJzLSZndDtpbm9kZS0mZ3Q7aV9zYiktJmd0O3NfbnpvbmVzKSB7CiYjNDM7CWlmIChycy0mZ3Q7Y29udF9leHRlbnQgJmFtcDsmYW1wOwomIzQzOwkgICAgKGV4dGVudCAmbHQ7IHNiaS0mZ3Q7c19zZXNzaW9uX3N0YXJ0IHx8CiYjNDM7CSAgICAgZXh0ZW50ICZndDs9IHNlc3Npb25fZW5kIHx8CiYjNDM7CSAgICAgZXh0ZW50ICZndDs9IHNiX2JkZXZfbnJfYmxvY2tzKHNiKSkpIHsKIAkJcHJpbnRrKEtFUk5fTk9USUNFICYjMzQ7cm9jazogY29ycnVwdGVkIGRpcmVjdG9yeSBlbnRyeS4gJiMzNDsKIAkJCSYjMzQ7ZXh0ZW50PSV1IG91dCBvZiB2b2x1bWUgKG56b25lcz0lbHUpXG4mIzM0OywKIAkJCSh1bnNpZ25lZClycy0mZ3Q7Y29udF9leHRlbnQsCi0JCQlJU09GU19TQihycy0mZ3Q7aW5vZGUtJmd0O2lfc2IpLSZndDtzX256b25lcyk7CiYjNDM7CQkJc2JpLSZndDtzX256b25lcyk7CiAJCXJldCA9IC1FSU87CiAJCWdvdG8gb3V0OwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY2NQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhpcyBJU09GUyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEkgc2VlIGNoYW5nZXMgYWNyb3NzIHRocmVlIGZpbGVzIGluIHRoZSBgZnMvaXNvZnNgIGRpcmVjdG9yeTogYGlub2RlLmNgLCBgaXNvZnMuaGAsIGFuZCBgcm9jay5jYC4gSW1tZWRpYXRlbHksIG15IGF0dGVudGlvbiBpcyBkcmF3biB0byB0aGUgYGlzb2ZzX2ZpbGxfc3VwZXJgIGZ1bmN0aW9uOyBzcGVjaWZpY2FsbHkgdGhlIG1vZGlmaWNhdGlvbiBzZXR0aW5nIGBzYmktJmd0O3Nfc2Vzc2lvbl9zdGFydGAuIFRoYXQmIzM5O3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24gZm9yIGFueSBJU08gZmlsZXN5c3RlbS4KClRoZW4sIHRoZSBtb3JlIGludGVyZXN0aW5nIGNoZWNrIGlzIHdpdGhpbiBgcm9ja19jb250aW51ZWAuIEl0JiMzOTtzIGVuc3VyaW5nIHRoYXQgdGhlIGBycy0mZ3Q7Y29udF9leHRlbnRgIHZhbHVlLCB3aGljaCBzZWVtcyB0byBiZSBhbiBleHRlbnQgY29udGludWF0aW9uIHJlZmVyZW5jZSwgaXMgd2l0aGluIHRoZSBleHBlY3RlZCBib3VuZGFyaWVzLiBUaGUgY29uZGl0aW9uYWwgYGlmIChycy0mZ3Q7Y29udF9leHRlbnQgJmFtcDsmYW1wOyAoZXh0ZW50ICZsdDsgc2JpLSZndDtzX3Nlc3Npb25fc3RhcnQgfHwgZXh0ZW50ICZndDs9IHNlc3Npb25fZW5kIHx8IGV4dGVudCAmZ3Q7PSBzYl9iZGV2X25yX2Jsb2NrcyhzYikpKWAgY29uZmlybXMgdGhpcy4gV2UmIzM5O3JlIHZlcmlmeWluZyB0aGF0IGBleHRlbnRgIGRvZXNuJiMzOTt0IGZhbGwgYmVmb3JlIGBzYmktJmd0O3Nfc2Vzc2lvbl9zdGFydGAsIGFmdGVyIGBzZXNzaW9uX2VuZGAsIGFuZCB3ZSBhbHNvIGNoZWNrIGlmIGl0IGdvZXMgcGFzdCB0aGUgdG90YWwgbnVtYmVyIG9mIGJsb2Nrcy4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCBmaXggZm9yIGEgc2VjdG9yIG91dC1vZi1ib3VuZHMgZXJyb3Igd2hlbiBkZWFsaW5nIHdpdGggbXVsdGktc2Vzc2lvbiBDRHMuCgpOb3csIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgYGZzL2lzb2ZzL0tjb25maWdgLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gd2hpY2ggQ09ORklHIG9wdGlvbnMgYXJlIHJlcXVpcmVkIHRvIGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkuIEtub3dpbmcgdGhlIGRlcGVuZGVuY2llcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhpcyBjaGFuZ2UgYW5kIGlmIGFueSByZWxhdGVkIGZlYXR1cmVzIGFyZSBhZmZlY3RlZC4gSSB3YW50IHRvIHNlZSBpZiB0aGlzIGNoYW5nZSBpbXBhY3RzIGFueSBvdGhlciBhcmVhcyBJJiMzOTttIGZhbWlsaWFyIHdpdGgsIHBlcmhhcHMgaW52b2x2aW5nIG11bHRpLXNlc3Npb24gb3IgUm9jayBSaWRnZSBleHRlbnNpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lTT0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaXNvZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2lzb2ZzL0tjb25maWc9MTk9Y29uZmlnIEpPTElFVFxuLS1cbmZzL2lzb2ZzL0tjb25maWctMzAtXG5mcy9pc29mcy9LY29uZmlnOjMxOmNvbmZpZyBaSVNPRlNcbmZzL2lzb2ZzL0tjb25maWctMzItXHRib29sIFwmIzM0O1RyYW5zcGFyZW50IGRlY29tcHJlc3Npb24gZXh0ZW5zaW9uXCYjMzQ7XG4tLVxuZnMvaXNvZnMvTWFrZWZpbGU9OT1pc29mcy0kKENPTkZJR19KT0xJRVQpXHQmIzQzOz0gam9saWV0Lm9cbmZzL2lzb2ZzL01ha2VmaWxlOjEwOmlzb2ZzLSQoQ09ORklHX1pJU09GUylcdCYjNDM7PSBjb21wcmVzcy5vXG4tLVxuZnMvaXNvZnMvY29tcHJlc3MuYz00MD1zdGF0aWMgbG9mZl90IHppc29mc191bmNvbXByZXNzX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBibG9ja19zdGFydCxcbi0tXG5mcy9pc29mcy9jb21wcmVzcy5jLTQ0LXtcbmZzL2lzb2ZzL2NvbXByZXNzLmM6NDU6XHR1bnNpZ25lZCBpbnQgemlzb2ZzX2Jsb2NrX3NoaWZ0ID0gSVNPRlNfSShpbm9kZSktXHUwMDNlaV9mb3JtYXRfcGFybVsxXTtcbmZzL2lzb2ZzL2NvbXByZXNzLmM6NDY6XHR1bnNpZ25lZCBpbnQgYnVmc2l6ZSA9IElTT0ZTX0JVRkZFUl9TSVpFKGlub2RlKTtcbmZzL2lzb2ZzL2NvbXByZXNzLmM6NDc6XHR1bnNpZ25lZCBpbnQgYnVmc2hpZnQgPSBJU09GU19CVUZGRVJfQklUUyhpbm9kZSk7XG5mcy9pc29mcy9jb21wcmVzcy5jLTQ4LVx0dW5zaWduZWQgaW50IGJ1Zm1hc2sgPSBidWZzaXplIC0gMTtcbi0tXG5mcy9pc29mcy9jb21wcmVzcy5jPTIwOD1zdGF0aWMgaW50IHppc29mc19maWxsX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBmdWxsX3BhZ2UsIGludCBwY291bnQsXG4tLVxuZnMvaXNvZnMvY29tcHJlc3MuYy0yMTItXHRsb2ZmX3QgYmxvY2tfc3RhcnQsIGJsb2NrX2VuZDtcbmZzL2lzb2ZzL2NvbXByZXNzLmM6MjEzOlx0dW5zaWduZWQgaW50IGhlYWRlcl9zaXplID0gSVNPRlNfSShpbm9kZSktXHUwMDNlaV9mb3JtYXRfcGFybVswXTtcbmZzL2lzb2ZzL2NvbXByZXNzLmM6MjE0Olx0dW5zaWduZWQgaW50IHppc29mc19ibG9ja19zaGlmdCA9IElTT0ZTX0koaW5vZGUpLVx1MDAzZWlfZm9ybWF0X3Bhcm1bMV07XG5mcy9pc29mcy9jb21wcmVzcy5jLTIxNS1cdHVuc2lnbmVkIGludCBibG9ja3B0cjtcbi0tXG5mcy9pc29mcy9jb21wcmVzcy5jLTIxOC1cdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG5mcy9pc29mcy9jb21wcmVzcy5jOjIxOTpcdHVuc2lnbmVkIGludCBibGtiaXRzID0gSVNPRlNfQlVGRkVSX0JJVFMoaW5vZGUpO1xuZnMvaXNvZnMvY29tcHJlc3MuYy0yMjAtXHR1bnNpZ25lZCBpbnQgYmxrc2l6ZSA9IDEgXHUwMDNjXHUwMDNjIGJsa2JpdHM7XG4tLVxuZnMvaXNvZnMvY29tcHJlc3MuYz0zMDU9c3RhdGljIGludCB6aXNvZnNfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5mcy9pc29mcy9jb21wcmVzcy5jLTMxMC1cdGludCBpLCBwY291bnQsIGZ1bGxfcGFnZTtcbmZzL2lzb2ZzL2NvbXByZXNzLmM6MzExOlx0dW5zaWduZWQgaW50IHppc29mc19ibG9ja19zaGlmdCA9IElTT0ZTX0koaW5vZGUpLVx1MDAzZWlfZm9ybWF0X3Bhcm1bMV07XG5mcy9pc29mcy9jb21wcmVzcy5jLTMxMi1cdHVuc2lnbmVkIGludCB6aXNvZnNfcGFnZXNfcGVyX2NibG9jayA9XG4tLVxuZnMvaXNvZnMvZGlyLmM9ODU9c3RhdGljIGludCBkb19pc29mc19yZWFkZGlyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbmZzL2lzb2ZzL2Rpci5jLTg4LXtcbmZzL2lzb2ZzL2Rpci5jOjg5Olx0dW5zaWduZWQgbG9uZyBidWZzaXplID0gSVNPRlNfQlVGRkVSX1NJWkUoaW5vZGUpO1xuZnMvaXNvZnMvZGlyLmM6OTA6XHR1bnNpZ25lZCBjaGFyIGJ1ZmJpdHMgPSBJU09GU19CVUZGRVJfQklUUyhpbm9kZSk7XG5mcy9pc29mcy9kaXIuYy05MS1cdHVuc2lnbmVkIGxvbmcgYmxvY2ssIG9mZnNldCwgYmxvY2tfc2F2ZWQsIG9mZnNldF9zYXZlZDtcbi0tXG5mcy9pc29mcy9kaXIuYy05OC1cdHN0cnVjdCBpc29fZGlyZWN0b3J5X3JlY29yZCAqZGU7XG5mcy9pc29mcy9kaXIuYzo5OTpcdHN0cnVjdCBpc29mc19zYl9pbmZvICpzYmkgPSBJU09GU19TQihpbm9kZS1cdTAwM2VpX3NiKTtcbmZzL2lzb2ZzL2Rpci5jLTEwMC1cbi0tXG5mcy9pc29mcy9kaXIuYy0xMjUtXHRcdFx0YmggPSBOVUxMO1xuZnMvaXNvZnMvZGlyLmM6MTI2Olx0XHRcdGN0eC1cdTAwM2Vwb3MgPSAoY3R4LVx1MDAzZXBvcyAmIzQzOyBJU09GU19CTE9DS19TSVpFKSBcdTAwMjYgfihJU09GU19CTE9DS19TSVpFIC0gMSk7XG5mcy9pc29mcy9kaXIuYy0xMjctXHRcdFx0YmxvY2sgPSBjdHgtXHUwMDNlcG9zIFx1MDAzZVx1MDAzZSBidWZiaXRzO1xuLS1cbmZzL2lzb2ZzL2Rpci5jPTI1MD1pbnQgaXNvZnNfZmlsZWF0dHJfZ2V0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKVxuZnMvaXNvZnMvZGlyLmMtMjUxLXtcbmZzL2lzb2ZzL2Rpci5jOjI1MjpcdHN0cnVjdCBpc29mc19zYl9pbmZvICpzYmkgPSBJU09GU19TQihkZW50cnktXHUwMDNlZF9zYik7XG5mcy9pc29mcy9kaXIuYy0yNTMtXG4tLVxuZnMvaXNvZnMvZXhwb3J0LmM9MjA9aXNvZnNfZXhwb3J0X2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9pc29mcy9leHBvcnQuYy0yNi1cbmZzL2lzb2ZzL2V4cG9ydC5jOjI3Olx0aWYgKGJsb2NrID09IDAgfHwgYmxvY2sgXHUwMDNlPSBJU09GU19TQihzYiktXHUwMDNlc19uem9uZXMpXG5mcy9pc29mcy9leHBvcnQuYy0yOC1cdFx0cmV0dXJuIEVSUl9QVFIoLUVTVEFMRSk7XG4tLVxuZnMvaXNvZnMvZXhwb3J0LmM9NDQ9c3RhdGljIHN0cnVjdCBkZW50cnkgKmlzb2ZzX2V4cG9ydF9nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKVxuLS1cbmZzL2lzb2ZzL2V4cG9ydC5jLTQ4LVx0c3RydWN0IGlub2RlICpjaGlsZF9pbm9kZSA9IGRfaW5vZGUoY2hpbGQpO1xuZnMvaXNvZnMvZXhwb3J0LmM6NDk6XHRzdHJ1Y3QgaXNvX2lub2RlX2luZm8gKmVfY2hpbGRfaW5vZGUgPSBJU09GU19JKGNoaWxkX2lub2RlKTtcbmZzL2lzb2ZzL2V4cG9ydC5jLTUwLVx0c3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkICpkZSA9IE5VTEw7XG4tLVxuZnMvaXNvZnMvZXhwb3J0LmM9MTE5PWlzb2ZzX2V4cG9ydF9lbmNvZGVfZmgoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9pc29mcy9leHBvcnQuYy0xMjMte1xuZnMvaXNvZnMvZXhwb3J0LmM6MTI0Olx0c3RydWN0IGlzb19pbm9kZV9pbmZvICogZWkgPSBJU09GU19JKGlub2RlKTtcbmZzL2lzb2ZzL2V4cG9ydC5jLTEyNS1cdGludCBsZW4gPSAqbWF4X2xlbjtcbi0tXG5mcy9pc29mcy9leHBvcnQuYy0xNDktXHRcdHN0cnVjdCBpc29faW5vZGVfaW5mbyAqZXBhcmVudDtcbmZzL2lzb2ZzL2V4cG9ydC5jOjE1MDpcdFx0ZXBhcmVudCA9IElTT0ZTX0kocGFyZW50KTtcbmZzL2lzb2ZzL2V4cG9ydC5jLTE1MS1cdFx0ZmgzMlszXSA9IGVwYXJlbnQtXHUwMDNlaV9pZ2V0NV9ibG9jaztcbi0tXG5mcy9pc29mcy9pbm9kZS5jPTUyPXN0YXRpYyB2b2lkIGlzb2ZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvaXNvZnMvaW5vZGUuYy01My17XG5mcy9pc29mcy9pbm9kZS5jOjU0Olx0c3RydWN0IGlzb2ZzX3NiX2luZm8gKnNiaSA9IElTT0ZTX1NCKHNiKTtcbmZzL2lzb2ZzL2lub2RlLmMtNTUtXG4tLVxuZnMvaXNvZnMvaW5vZGUuYz04MD1zdGF0aWMgdm9pZCBpc29mc19mcmVlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9pc29mcy9pbm9kZS5jLTgxLXtcbmZzL2lzb2ZzL2lub2RlLmM6ODI6XHRrbWVtX2NhY2hlX2ZyZWUoaXNvZnNfaW5vZGVfY2FjaGVwLCBJU09GU19JKGlub2RlKSk7XG5mcy9pc29mcy9pbm9kZS5jLTgzLX1cbi0tXG5mcy9pc29mcy9pbm9kZS5jPTQ0ND1zdGF0aWMgaW50IGlzb2ZzX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBkZW50cnkgKnJvb3QpXG5mcy9pc29mcy9pbm9kZS5jLTQ0NS17XG5mcy9pc29mcy9pbm9kZS5jOjQ0NjpcdHN0cnVjdCBpc29mc19zYl9pbmZvICpzYmkgPSBJU09GU19TQihyb290LVx1MDAzZWRfc2IpO1xuZnMvaXNvZnMvaW5vZGUuYy00NDctXG4tLVxuZnMvaXNvZnMvaW5vZGUuYy00NzAtXG5mcy9pc29mcy9pbm9kZS5jOjQ3MTpcdGlmIChzYmktXHUwMDNlc19kbW9kZSAhPSBJU09GU19JTlZBTElEX01PREUpXG5mcy9pc29mcy9pbm9kZS5jLTQ3Mi1cdFx0c2VxX3ByaW50ZihtLCBcJiMzNDssZG1vZGU9JW9cJiMzNDssIHNiaS1cdTAwM2VzX2Rtb2RlKTtcbmZzL2lzb2ZzL2lub2RlLmM6NDczOlx0aWYgKHNiaS1cdTAwM2VzX2Ztb2RlICE9IElTT0ZTX0lOVkFMSURfTU9ERSlcbmZzL2lzb2ZzL2lub2RlLmMtNDc0LVx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyxmbW9kZT0lb1wmIzM0Oywgc2JpLVx1MDAzZXNfZm1vZGUpO1xuLS1cbmZzL2lzb2ZzL2lub2RlLmM9NTAzPXN0YXRpYyB1bnNpZ25lZCBpbnQgaXNvZnNfZ2V0X2xhc3Rfc2Vzc2lvbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzMzIgc2Vzc2lvbilcbi0tXG5mcy9pc29mcy9pbm9kZS5jLTUxNi1cdFx0aWYgKGNkcm9tX3JlYWRfdG9jZW50cnkoY2RpLCBcdTAwMjZ0ZSkgPT0gMCkge1xuZnMvaXNvZnMvaW5vZGUuYzo1MTc6XHRcdFx0cHJpbnRrKEtFUk5fREVCVUcgXCYjMzQ7SVNPRlM6IFNlc3Npb24gJWQgc3RhcnQgJWQgdHlwZSAlZFxcblwmIzM0OyxcbmZzL2lzb2ZzL2lub2RlLmMtNTE4LVx0XHRcdFx0c2Vzc2lvbiwgdGUuY2R0ZV9hZGRyLmxiYSxcbi0tXG5mcy9pc29mcy9pbm9kZS5jLTUyMy1cbmZzL2lzb2ZzL2lub2RlLmM6NTI0Olx0XHRwcmludGsoS0VSTl9FUlIgXCYjMzQ7SVNPRlM6IEludmFsaWQgc2Vzc2lvbiBudW1iZXIgb3IgdHlwZSBvZiB0cmFja1xcblwmIzM0Oyk7XG5mcy9pc29mcy9pbm9kZS5jLTUyNS1cdH1cbi0tXG5mcy9pc29mcy9pbm9kZS5jPTU3ND1zdGF0aWMgaW50IGlzb2ZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvaXNvZnMvaW5vZGUuYy02MDctXHRcdHByaW50ayhLRVJOX1dBUk5JTkdcbmZzL2lzb2ZzL2lub2RlLmM6NjA4Olx0XHQgICAgICAgXCYjMzQ7SVNPRlM6IHVuc3VwcG9ydGVkL2ludmFsaWQgaGFyZHdhcmUgc2VjdG9yIHNpemUgJWRcXG5cJiMzNDssXG5mcy9pc29mcy9pbm9kZS5jLTYwOS1cdFx0XHRiZGV2X2xvZ2ljYWxfYmxvY2tfc2l6ZShzLVx1MDAzZXNfYmRldikpO1xuLS1cbmZzL2lzb2ZzL2lub2RlLmMtNjE0LVx0XHRwcmludGsoS0VSTl9FUlJcbmZzL2lzb2ZzL2lub2RlLmM6NjE1Olx0XHQgICAgICAgXCYjMzQ7SVNPRlM6IHVuYWJsZSB0byBzZXQgYmxvY2tzaXplXFxuXCYjMzQ7KTtcbmZzL2lzb2ZzL2lub2RlLmMtNjE2LVx0XHRnb3RvIG91dF9mcmVlc2JpO1xuLS1cbmZzL2lzb2ZzL2lub2RlLmMtNjMwLVxuZnMvaXNvZnMvaW5vZGUuYzo2MzE6XHRcdGJsb2NrID0gaXNvX2Jsa251bSBcdTAwM2NcdTAwM2MgKElTT0ZTX0JMT0NLX0JJVFMgLSBzLVx1MDAzZXNfYmxvY2tzaXplX2JpdHMpO1xuZnMvaXNvZnMvaW5vZGUuYy02MzItXHRcdGlmICghKGJoID0gc2JfYnJlYWQocywgYmxvY2spKSlcbi0tXG5mcy9pc29mcy9pbm9kZS5jLTc1NC1cbmZzL2lzb2ZzL2lub2RlLmM6NzU1Olx0cy1cdTAwM2VzX21hZ2ljID0gSVNPRlNfU1VQRVJfTUFHSUM7XG5mcy9pc29mcy9pbm9kZS5jLTc1Ni1cbi0tXG5mcy9pc29mcy9pbm9kZS5jLTc3My0jaWZuZGVmIEJFUVVJRVRcbmZzL2lzb2ZzL2lub2RlLmM6Nzc0Olx0cHJpbnRrKEtFUk5fREVCVUcgXCYjMzQ7SVNPRlM6IE1heCBzaXplOiVsZCAgIExvZyB6b25lIHNpemU6JWxkXFxuXCYjMzQ7LFxuZnMvaXNvZnMvaW5vZGUuYy03NzUtXHRcdHNiaS1cdTAwM2VzX21heF9zaXplLCAxVUwgXHUwMDNjXHUwMDNjIHNiaS1cdTAwM2VzX2xvZ196b25lX3NpemUpO1xuZnMvaXNvZnMvaW5vZGUuYzo3NzY6XHRwcmludGsoS0VSTl9ERUJVRyBcJiMzNDtJU09GUzogRmlyc3QgZGF0YXpvbmU6JWxkXFxuXCYjMzQ7LCBzYmktXHUwMDNlc19maXJzdGRhdGF6b25lKTtcbmZzL2lzb2ZzL2lub2RlLmMtNzc3LVx0aWYoc2JpLVx1MDAzZXNfaGlnaF9zaWVycmEpXG5mcy9pc29mcy9pbm9kZS5jOjc3ODpcdFx0cHJpbnRrKEtFUk5fREVCVUcgXCYjMzQ7SVNPRlM6IERpc2MgaW4gSGlnaCBTaWVycmEgZm9ybWF0LlxcblwmIzM0Oyk7XG5mcy9pc29mcy9pbm9kZS5jLTc3OS0jZW5kaWZcbi0tXG5mcy9pc29mcy9pbm9kZS5jLTgyNC1cdHNiaS1cdTAwM2VzX3Nlc3Npb25fc3RhcnQgPSAodTY0KXZvbF9kZXNjX3N0YXJ0IFx1MDAzY1x1MDAzY1xuZnMvaXNvZnMvaW5vZGUuYzo4MjU6XHRcdFx0XHQoSVNPRlNfQkxPQ0tfQklUUyAtIHMtXHUwMDNlc19ibG9ja3NpemVfYml0cyk7XG5mcy9pc29mcy9pbm9kZS5jLTgyNi1cdHNiaS1cdTAwM2VzX25sc19pb2NoYXJzZXQgPSBOVUxMO1xuLS1cbmZzL2lzb2ZzL2lub2RlLmMtODU3LVx0ICovXG5mcy9pc29mcy9pbm9kZS5jOjg1ODpcdGlmIChvcHQtXHUwMDNlZm1vZGUgIT0gSVNPRlNfSU5WQUxJRF9NT0RFKVxuZnMvaXNvZnMvaW5vZGUuYy04NTktXHRcdHNiaS1cdTAwM2VzX2Ztb2RlID0gb3B0LVx1MDAzZWZtb2RlIFx1MDAyNiAwNzc3O1xuZnMvaXNvZnMvaW5vZGUuYy04NjAtXHRlbHNlXG5mcy9pc29mcy9pbm9kZS5jOjg2MTpcdFx0c2JpLVx1MDAzZXNfZm1vZGUgPSBJU09GU19JTlZBTElEX01PREU7XG5mcy9pc29mcy9pbm9kZS5jOjg2MjpcdGlmIChvcHQtXHUwMDNlZG1vZGUgIT0gSVNPRlNfSU5WQUxJRF9NT0RFKVxuZnMvaXNvZnMvaW5vZGUuYy04NjMtXHRcdHNiaS1cdTAwM2VzX2Rtb2RlID0gb3B0LVx1MDAzZWRtb2RlIFx1MDAyNiAwNzc3O1xuZnMvaXNvZnMvaW5vZGUuYy04NjQtXHRlbHNlXG5mcy9pc29mcy9pbm9kZS5jOjg2NTpcdFx0c2JpLVx1MDAzZXNfZG1vZGUgPSBJU09GU19JTlZBTElEX01PREU7XG5mcy9pc29mcy9pbm9kZS5jLTg2Ni1cbi0tXG5mcy9pc29mcy9pbm9kZS5jLTg4MC1cdFx0XHRwcmludGsoS0VSTl9OT1RJQ0VcbmZzL2lzb2ZzL2lub2RlLmM6ODgxOlx0XHRcdCAgICAgICBcJiMzNDtJU09GUzogcm9vdCBpbm9kZSBpcyB1bnVzYWJsZS4gXCYjMzQ7XG5mcy9pc29mcy9pbm9kZS5jLTg4Mi1cdFx0XHQgICAgICAgXCYjMzQ7RGlzYWJsaW5nIFJvY2sgUmlkZ2UgYW5kIHN3aXRjaGluZyB0byBKb2xpZXQuXCYjMzQ7KTtcbi0tXG5mcy9pc29mcy9pbm9kZS5jLTg5Ni1cdFx0cHJpbnRrKEtFUk5fTk9USUNFXG5mcy9pc29mcy9pbm9kZS5jOjg5NzpcdFx0XHRcJiMzNDtJU09GUzogcHJpbWFyeSByb290IGRpcmVjdG9yeSBpcyBlbXB0eS4gXCYjMzQ7XG5mcy9pc29mcy9pbm9kZS5jLTg5OC1cdFx0XHRcJiMzNDtEaXNhYmxpbmcgUm9jayBSaWRnZSBhbmQgc3dpdGNoaW5nIHRvIEpvbGlldC5cJiMzNDspO1xuLS1cbmZzL2lzb2ZzL2lub2RlLmMtOTE2LVx0XHRcdHByaW50ayhLRVJOX0RFQlVHXG5mcy9pc29mcy9pbm9kZS5jOjkxNzpcdFx0XHRcdFwmIzM0O0lTT0ZTOiBjaGFuZ2luZyB0byBzZWNvbmRhcnkgcm9vdFxcblwmIzM0Oyk7XG5mcy9pc29mcy9pbm9kZS5jLTkxOC1cdFx0XHRpcHV0KGlub2RlKTtcbi0tXG5mcy9pc29mcy9pbm9kZS5jLTk4MC1vdXRfYmFkX3pvbmVfc2l6ZTpcbmZzL2lzb2ZzL2lub2RlLmM6OTgxOlx0cHJpbnRrKEtFUk5fV0FSTklORyBcJiMzNDtJU09GUzogQmFkIGxvZ2ljYWwgem9uZSBzaXplICVsZFxcblwmIzM0OyxcbmZzL2lzb2ZzL2lub2RlLmMtOTgyLVx0XHRzYmktXHUwMDNlc19sb2dfem9uZV9zaXplKTtcbi0tXG5mcy9pc29mcy9pbm9kZS5jLTk4NC1vdXRfYmFkX3NpemU6XG5mcy9pc29mcy9pbm9kZS5jOjk4NTpcdHByaW50ayhLRVJOX1dBUk5JTkcgXCYjMzQ7SVNPRlM6IExvZ2ljYWwgem9uZSBzaXplKCVkKSBcdTAwM2MgaGFyZHdhcmUgYmxvY2tzaXplKCV1KVxcblwmIzM0OyxcbmZzL2lzb2ZzL2lub2RlLmMtOTg2LVx0XHRvcmlnX3pvbmVzaXplLCBvcHQtXHUwMDNlYmxvY2tzaXplKTtcbi0tXG5mcy9pc29mcy9pbm9kZS5jLTk4OS1cdGlmICghc2lsZW50KVxuZnMvaXNvZnMvaW5vZGUuYzo5OTA6XHRcdHByaW50ayhLRVJOX1dBUk5JTkcgXCYjMzQ7SVNPRlM6IFVuYWJsZSB0byBpZGVudGlmeSBDRC1ST00gZm9ybWF0LlxcblwmIzM0Oyk7XG5mcy9pc29mcy9pbm9kZS5jLTk5MS1cbi0tXG5mcy9pc29mcy9pbm9kZS5jPTEwMDE9c3RhdGljIGludCBpc29mc19zdGF0ZnMgKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1Zilcbi0tXG5mcy9pc29mcy9pbm9kZS5jLTEwMDUtXG5mcy9pc29mcy9pbm9kZS5jOjEwMDY6XHRidWYtXHUwMDNlZl90eXBlID0gSVNPRlNfU1VQRVJfTUFHSUM7XG5mcy9pc29mcy9pbm9kZS5jLTEwMDctXHRidWYtXHUwMDNlZl9ic2l6ZSA9IHNiLVx1MDAzZXNfYmxvY2tzaXplO1xuZnMvaXNvZnMvaW5vZGUuYzoxMDA4Olx0YnVmLVx1MDAzZWZfYmxvY2tzID0gKElTT0ZTX1NCKHNiKS1cdTAwM2VzX256b25lc1xuZnMvaXNvZnMvaW5vZGUuYzoxMDA5Olx0XHRcdTAwM2NcdTAwM2MgKElTT0ZTX1NCKHNiKS1cdTAwM2VzX2xvZ196b25lX3NpemUgLSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzKSk7XG5mcy9pc29mcy9pbm9kZS5jLTEwMTAtXHRidWYtXHUwMDNlZl9iZnJlZSA9IDA7XG5mcy9pc29mcy9pbm9kZS5jLTEwMTEtXHRidWYtXHUwMDNlZl9iYXZhaWwgPSAwO1xuZnMvaXNvZnMvaW5vZGUuYzoxMDEyOlx0YnVmLVx1MDAzZWZfZmlsZXMgPSBJU09GU19TQihzYiktXHUwMDNlc19uaW5vZGVzO1xuZnMvaXNvZnMvaW5vZGUuYy0xMDEzLVx0YnVmLVx1MDAzZWZfZmZyZWUgPSAwO1xuLS1cbmZzL2lzb2ZzL2lub2RlLmM9MTAyND1pbnQgaXNvZnNfZ2V0X2Jsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssXG4tLVxuZnMvaXNvZnMvaW5vZGUuYy0xMDMxLVx0aW50IHNlY3Rpb24sIHJ2LCBlcnJvcjtcbmZzL2lzb2ZzL2lub2RlLmM6MTAzMjpcdHN0cnVjdCBpc29faW5vZGVfaW5mbyAqZWkgPSBJU09GU19JKGlub2RlKTtcbmZzL2lzb2ZzL2lub2RlLmMtMTAzMy1cbi0tXG5mcy9pc29mcy9pbm9kZS5jLTEwNDMtXHRmaXJzdGV4dCA9IGVpLVx1MDAzZWlfZmlyc3RfZXh0ZW50O1xuZnMvaXNvZnMvaW5vZGUuYzoxMDQ0Olx0c2VjdF9zaXplID0gZWktXHUwMDNlaV9zZWN0aW9uX3NpemUgXHUwMDNlXHUwMDNlIElTT0ZTX0JVRkZFUl9CSVRTKGlub2RlKTtcbmZzL2lzb2ZzL2lub2RlLmMtMTA0NS1cdG5leHRibGsgPSBlaS1cdTAwM2VpX25leHRfc2VjdGlvbl9ibG9jaztcbi0tXG5mcy9pc29mcy9pbm9kZS5jLTEwNTYtXHRcdCAqL1xuZnMvaXNvZnMvaW5vZGUuYzoxMDU3Olx0XHRpZiAoYl9vZmYgXHUwMDNlICgoaW5vZGUtXHUwMDNlaV9zaXplICYjNDM7IFBBR0VfU0laRSAtIDEpIFx1MDAzZVx1MDAzZSBJU09GU19CVUZGRVJfQklUUyhpbm9kZSkpKSB7XG5mcy9pc29mcy9pbm9kZS5jLTEwNTgtXHRcdFx0cHJpbnRrKEtFUk5fREVCVUcgXCYjMzQ7JXM6IGJsb2NrIFx1MDAzZT0gRU9GICglbHUsICVsbHUpXFxuXCYjMzQ7LFxuLS1cbmZzL2lzb2ZzL2lub2RlLmMtMTA3Ni1cdFx0XHR9XG5mcy9pc29mcy9pbm9kZS5jOjEwNzc6XHRcdFx0Zmlyc3RleHQgID0gSVNPRlNfSShuaW5vZGUpLVx1MDAzZWlfZmlyc3RfZXh0ZW50O1xuZnMvaXNvZnMvaW5vZGUuYzoxMDc4Olx0XHRcdHNlY3Rfc2l6ZSA9IElTT0ZTX0kobmlub2RlKS1cdTAwM2VpX3NlY3Rpb25fc2l6ZSBcdTAwM2VcdTAwM2UgSVNPRlNfQlVGRkVSX0JJVFMobmlub2RlKTtcbmZzL2lzb2ZzL2lub2RlLmM6MTA3OTpcdFx0XHRuZXh0YmxrICAgPSBJU09GU19JKG5pbm9kZSktXHUwMDNlaV9uZXh0X3NlY3Rpb25fYmxvY2s7XG5mcy9pc29mcy9pbm9kZS5jOjEwODA6XHRcdFx0bmV4dG9mZiAgID0gSVNPRlNfSShuaW5vZGUpLVx1MDAzZWlfbmV4dF9zZWN0aW9uX29mZnNldDtcbmZzL2lzb2ZzL2lub2RlLmMtMTA4MS1cdFx0XHRpcHV0KG5pbm9kZSk7XG4tLVxuZnMvaXNvZnMvaW5vZGUuYz0xMTcxPXN0YXRpYyBpbnQgaXNvZnNfcmVhZF9sZXZlbDNfc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvaXNvZnMvaW5vZGUuYy0xMTcyLXtcbmZzL2lzb2ZzL2lub2RlLmM6MTE3MzpcdHVuc2lnbmVkIGxvbmcgYnVmc2l6ZSA9IElTT0ZTX0JVRkZFUl9TSVpFKGlub2RlKTtcbmZzL2lzb2ZzL2lub2RlLmM6MTE3NDpcdGludCBoaWdoX3NpZXJyYSA9IElTT0ZTX1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfaGlnaF9zaWVycmE7XG5mcy9pc29mcy9pbm9kZS5jLTExNzUtXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDtcbi0tXG5mcy9pc29mcy9pbm9kZS5jLTExNzktXHRzdHJ1Y3QgaXNvX2RpcmVjdG9yeV9yZWNvcmQgKnRtcGRlID0gTlVMTDtcbmZzL2lzb2ZzL2lub2RlLmM6MTE4MDpcdHN0cnVjdCBpc29faW5vZGVfaW5mbyAqZWkgPSBJU09GU19JKGlub2RlKTtcbmZzL2lzb2ZzL2lub2RlLmMtMTE4MS1cbi0tXG5mcy9pc29mcy9pbm9kZS5jLTEyNjAtb3V0X25vcmVhZDpcbmZzL2lzb2ZzL2lub2RlLmM6MTI2MTpcdHByaW50ayhLRVJOX0lORk8gXCYjMzQ7SVNPRlM6IHVuYWJsZSB0byByZWFkIGktbm9kZSBibG9jayAlbHVcXG5cJiMzNDssIGJsb2NrKTtcbmZzL2lzb2ZzL2lub2RlLmMtMTI2Mi1cdGtmcmVlKHRtcGRlKTtcbi0tXG5mcy9pc29mcy9pbm9kZS5jPTEyNzI9c3RhdGljIGludCBpc29mc19yZWFkX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCByZWxvY2F0ZWQpXG4tLVxuZnMvaXNvZnMvaW5vZGUuYy0xMjc0LVx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVx1MDAzZWlfc2I7XG5mcy9pc29mcy9pbm9kZS5jOjEyNzU6XHRzdHJ1Y3QgaXNvZnNfc2JfaW5mbyAqc2JpID0gSVNPRlNfU0Ioc2IpO1xuZnMvaXNvZnMvaW5vZGUuYzoxMjc2Olx0dW5zaWduZWQgbG9uZyBidWZzaXplID0gSVNPRlNfQlVGRkVSX1NJWkUoaW5vZGUpO1xuZnMvaXNvZnMvaW5vZGUuYy0xMjc3LVx0dW5zaWduZWQgbG9uZyBibG9jaztcbi0tXG5mcy9pc29mcy9pbm9kZS5jLTEyODMtXHR1bnNpZ25lZCBsb25nIG9mZnNldDtcbmZzL2lzb2ZzL2lub2RlLmM6MTI4NDpcdHN0cnVjdCBpc29faW5vZGVfaW5mbyAqZWkgPSBJU09GU19JKGlub2RlKTtcbmZzL2lzb2ZzL2lub2RlLmMtMTI4NS1cdGludCByZXQgPSAtRUlPO1xuLS1cbmZzL2lzb2ZzL2lub2RlLmMtMTMxOC1cdFx0XHRcdFx0ZWktXHUwMDNlaV9pZ2V0NV9vZmZzZXQsXG5mcy9pc29mcy9pbm9kZS5jOjEzMTk6XHRcdFx0XHRcdElTT0ZTX0JVRkZFUl9CSVRTKGlub2RlKSk7XG5mcy9pc29mcy9pbm9kZS5jLTEzMjAtXG4tLVxuZnMvaXNvZnMvaW5vZGUuYy0xMzI0LVx0aWYgKGRlLVx1MDAzZWZsYWdzWy1oaWdoX3NpZXJyYV0gXHUwMDI2IDIpIHtcbmZzL2lzb2ZzL2lub2RlLmM6MTMyNTpcdFx0aWYgKHNiaS1cdTAwM2VzX2Rtb2RlICE9IElTT0ZTX0lOVkFMSURfTU9ERSlcbmZzL2lzb2ZzL2lub2RlLmMtMTMyNi1cdFx0XHRpbm9kZS1cdTAwM2VpX21vZGUgPSBTX0lGRElSIHwgc2JpLVx1MDAzZXNfZG1vZGU7XG4tLVxuZnMvaXNvZnMvaW5vZGUuYy0xMzM2LVx0fSBlbHNlIHtcbmZzL2lzb2ZzL2lub2RlLmM6MTMzNzpcdFx0aWYgKHNiaS1cdTAwM2VzX2Ztb2RlICE9IElTT0ZTX0lOVkFMSURfTU9ERSkge1xuZnMvaXNvZnMvaW5vZGUuYy0xMzM4LVx0XHRcdGlub2RlLVx1MDAzZWlfbW9kZSA9IFNfSUZSRUcgfCBzYmktXHUwMDNlc19mbW9kZTtcbi0tXG5mcy9pc29mcy9pbm9kZS5jLTEzNzgtXHRpZiAoZGUtXHUwMDNlaW50ZXJsZWF2ZVswXSkge1xuZnMvaXNvZnMvaW5vZGUuYzoxMzc5Olx0XHRwcmludGsoS0VSTl9ERUJVRyBcJiMzNDtJU09GUzogSW50ZXJsZWF2ZWQgZmlsZXMgbm90ICh5ZXQpIHN1cHBvcnRlZC5cXG5cJiMzNDspO1xuZnMvaXNvZnMvaW5vZGUuYy0xMzgwLVx0XHRpbm9kZS1cdTAwM2VpX3NpemUgPSAwO1xuLS1cbmZzL2lzb2ZzL2lub2RlLmMtMTM4NS1cdGlmIChkZS1cdTAwM2VmaWxlX3VuaXRfc2l6ZVswXSAhPSAwKSB7XG5mcy9pc29mcy9pbm9kZS5jOjEzODY6XHRcdHByaW50ayhLRVJOX0RFQlVHIFwmIzM0O0lTT0ZTOiBGaWxlIHVuaXQgc2l6ZSAhPSAwIGZvciBJU08gZmlsZSAoJWxsdSkuXFxuXCYjMzQ7LFxuZnMvaXNvZnMvaW5vZGUuYy0xMzg3LVx0XHRcdGlub2RlLVx1MDAzZWlfaW5vKTtcbi0tXG5mcy9pc29mcy9pbm9kZS5jLTEzOTMtXHRpZigoZGUtXHUwMDNlZmxhZ3NbLWhpZ2hfc2llcnJhXSBcdTAwMjYgfjIpIT0gMCl7XG5mcy9pc29mcy9pbm9kZS5jOjEzOTQ6XHRcdHByaW50ayhLRVJOX0RFQlVHIFwmIzM0O0lTT0ZTOiBVbnVzdWFsIGZsYWcgc2V0dGluZ3MgZm9yIElTTyBmaWxlIFwmIzM0O1xuZnMvaXNvZnMvaW5vZGUuYy0xMzk1LVx0XHRcdFx0XCYjMzQ7KCVsbHUgJXgpLlxcblwmIzM0Oyxcbi0tXG5mcy9pc29mcy9pbm9kZS5jLTE0MjQtXHRpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpIFx1MDAyNlx1MDAyNiBzYmktXHUwMDNlc19vdmVycmlkZXJvY2twZXJtIFx1MDAyNlx1MDAyNlxuZnMvaXNvZnMvaW5vZGUuYzoxNDI1Olx0ICAgIHNiaS1cdTAwM2VzX2Rtb2RlICE9IElTT0ZTX0lOVkFMSURfTU9ERSlcbmZzL2lzb2ZzL2lub2RlLmMtMTQyNi1cdFx0aW5vZGUtXHUwMDNlaV9tb2RlID0gU19JRkRJUiB8IHNiaS1cdTAwM2VzX2Rtb2RlO1xuZnMvaXNvZnMvaW5vZGUuYy0xNDI3LVx0aWYgKFNfSVNSRUcoaW5vZGUtXHUwMDNlaV9tb2RlKSBcdTAwMjZcdTAwMjYgc2JpLVx1MDAzZXNfb3ZlcnJpZGVyb2NrcGVybSBcdTAwMjZcdTAwMjZcbmZzL2lzb2ZzL2lub2RlLmM6MTQyODpcdCAgICBzYmktXHUwMDNlc19mbW9kZSAhPSBJU09GU19JTlZBTElEX01PREUpXG5mcy9pc29mcy9pbm9kZS5jLTE0MjktXHRcdGlub2RlLVx1MDAzZWlfbW9kZSA9IFNfSUZSRUcgfCBzYmktXHUwMDNlc19mbW9kZTtcbi0tXG5mcy9pc29mcy9pbm9kZS5jLTE0MzQtXHRcdHN3aXRjaCAoZWktXHUwMDNlaV9maWxlX2Zvcm1hdCkge1xuZnMvaXNvZnMvaW5vZGUuYzoxNDM1OiNpZmRlZiBDT05GSUdfWklTT0ZTXG5mcy9pc29mcy9pbm9kZS5jLTE0MzYtXHRcdGNhc2UgaXNvZnNfZmlsZV9jb21wcmVzc2VkOlxuLS1cbmZzL2lzb2ZzL2lub2RlLmMtMTQ1NS1cdH0gZWxzZSB7XG5mcy9pc29mcy9pbm9kZS5jOjE0NTY6XHRcdHByaW50ayhLRVJOX0RFQlVHIFwmIzM0O0lTT0ZTOiBJbnZhbGlkIGZpbGUgdHlwZSAwJTA0byBmb3IgaW5vZGUgJWxsdS5cXG5cJiMzNDssXG5mcy9pc29mcy9pbm9kZS5jLTE0NTctXHRcdFx0aW5vZGUtXHUwMDNlaV9tb2RlLCBpbm9kZS1cdTAwM2VpX2lubyk7XG4tLVxuZnMvaXNvZnMvaW5vZGUuYy0xNDY4LW91dF9iYWRyZWFkOlxuZnMvaXNvZnMvaW5vZGUuYzoxNDY5Olx0cHJpbnRrKEtFUk5fV0FSTklORyBcJiMzNDtJU09GUzogdW5hYmxlIHRvIHJlYWQgaS1ub2RlIGJsb2NrXFxuXCYjMzQ7KTtcbmZzL2lzb2ZzL2lub2RlLmMtMTQ3MC1mYWlsOlxuLS1cbmZzL2lzb2ZzL2lub2RlLmM9MTQ3OT1zdGF0aWMgaW50IGlzb2ZzX2lnZXQ1X3Rlc3Qoc3RydWN0IGlub2RlICppbm8sIHZvaWQgKmRhdGEpXG5mcy9pc29mcy9pbm9kZS5jLTE0ODAte1xuZnMvaXNvZnMvaW5vZGUuYzoxNDgxOlx0c3RydWN0IGlzb19pbm9kZV9pbmZvICppID0gSVNPRlNfSShpbm8pO1xuZnMvaXNvZnMvaW5vZGUuYy0xNDgyLVx0c3RydWN0IGlzb2ZzX2lnZXQ1X2NhbGxiYWNrX2RhdGEgKmQgPVxuLS1cbmZzL2lzb2ZzL2lub2RlLmM9MTQ4OD1zdGF0aWMgaW50IGlzb2ZzX2lnZXQ1X3NldChzdHJ1Y3QgaW5vZGUgKmlubywgdm9pZCAqZGF0YSlcbmZzL2lzb2ZzL2lub2RlLmMtMTQ4OS17XG5mcy9pc29mcy9pbm9kZS5jOjE0OTA6XHRzdHJ1Y3QgaXNvX2lub2RlX2luZm8gKmkgPSBJU09GU19JKGlubyk7XG5mcy9pc29mcy9pbm9kZS5jLTE0OTEtXHRzdHJ1Y3QgaXNvZnNfaWdldDVfY2FsbGJhY2tfZGF0YSAqZCA9XG4tLVxuZnMvaXNvZnMvaW5vZGUuYz0xNTU5PXN0YXRpYyBpbnQgaXNvZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9pc29mcy9pbm9kZS5jLTE1NzUtXHRvcHQtXHUwMDNlYmxvY2tzaXplID0gMTAyNDtcbmZzL2lzb2ZzL2lub2RlLmM6MTU3NjpcdG9wdC1cdTAwM2VmbW9kZSA9IG9wdC1cdTAwM2VkbW9kZSA9IElTT0ZTX0lOVkFMSURfTU9ERTtcbmZzL2lzb2ZzL2lub2RlLmMtMTU3Ny1cdG9wdC1cdTAwM2V1aWRfc2V0ID0gMDtcbi0tXG5mcy9pc29mcy9pbm9kZS5jPTE2MDM9c3RhdGljIGludCBfX2luaXQgaW5pdF9pc285NjYwX2ZzKHZvaWQpXG4tLVxuZnMvaXNvZnMvaW5vZGUuYy0xNjA3LVx0XHRnb3RvIG91dDtcbmZzL2lzb2ZzL2lub2RlLmM6MTYwODojaWZkZWYgQ09ORklHX1pJU09GU1xuZnMvaXNvZnMvaW5vZGUuYy0xNjA5LVx0ZXJyID0gemlzb2ZzX2luaXQoKTtcbi0tXG5mcy9pc29mcy9pbm9kZS5jLTE2MTctb3V0MjpcbmZzL2lzb2ZzL2lub2RlLmM6MTYxODojaWZkZWYgQ09ORklHX1pJU09GU1xuZnMvaXNvZnMvaW5vZGUuYy0xNjE5LVx0emlzb2ZzX2NsZWFudXAoKTtcbi0tXG5mcy9pc29mcy9pbm9kZS5jPTE2Mjc9c3RhdGljIHZvaWQgX19leGl0IGV4aXRfaXNvOTY2MF9mcyh2b2lkKVxuLS1cbmZzL2lzb2ZzL2lub2RlLmMtMTYyOS0gICAgICAgIHVucmVnaXN0ZXJfZmlsZXN5c3RlbShcdTAwMjZpc285NjYwX2ZzX3R5cGUpO1xuZnMvaXNvZnMvaW5vZGUuYzoxNjMwOiNpZmRlZiBDT05GSUdfWklTT0ZTXG5mcy9pc29mcy9pbm9kZS5jLTE2MzEtXHR6aXNvZnNfY2xlYW51cCgpO1xuLS1cbmZzL2lzb2ZzL2lzb2ZzLmg9MzI9c3RydWN0IGlzb2ZzX3NiX2luZm8ge1xuLS1cbmZzL2lzb2ZzL2lzb2ZzLmgtNjQtXG5mcy9pc29mcy9pc29mcy5oOjY1OiNkZWZpbmUgSVNPRlNfSU5WQUxJRF9NT0RFICgodW1vZGVfdCkgLTEpXG5mcy9pc29mcy9pc29mcy5oLTY2LVxuZnMvaXNvZnMvaXNvZnMuaDo2NzpzdGF0aWMgaW5saW5lIHN0cnVjdCBpc29mc19zYl9pbmZvICpJU09GU19TQihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvaXNvZnMvaXNvZnMuaC02OC17XG4tLVxuZnMvaXNvZnMvaXNvZnMuaC03MS1cbmZzL2lzb2ZzL2lzb2ZzLmg6NzI6c3RhdGljIGlubGluZSBzdHJ1Y3QgaXNvX2lub2RlX2luZm8gKklTT0ZTX0koc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2lzb2ZzL2lzb2ZzLmgtNzMte1xuLS1cbmZzL2lzb2ZzL2pvbGlldC5jPTQyPWdldF9qb2xpZXRfZmlsZW5hbWUoc3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkICogZGUsIHVuc2lnbmVkIGNoYXIgKm91dG5hbWUsIHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuLS1cbmZzL2lzb2ZzL2pvbGlldC5jLTQ2LVxuZnMvaXNvZnMvam9saWV0LmM6NDc6XHRubHMgPSBJU09GU19TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX25sc19pb2NoYXJzZXQ7XG5mcy9pc29mcy9qb2xpZXQuYy00OC1cbi0tXG5mcy9pc29mcy9uYW1laS5jPTQ5PWlzb2ZzX2ZpbmRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9pc29mcy9uYW1laS5jLTUyLXtcbmZzL2lzb2ZzL25hbWVpLmM6NTM6XHR1bnNpZ25lZCBsb25nIGJ1ZnNpemUgPSBJU09GU19CVUZGRVJfU0laRShkaXIpO1xuZnMvaXNvZnMvbmFtZWkuYzo1NDpcdHVuc2lnbmVkIGNoYXIgYnVmYml0cyA9IElTT0ZTX0JVRkZFUl9CSVRTKGRpcik7XG5mcy9pc29mcy9uYW1laS5jLTU1LVx0dW5zaWduZWQgbG9uZyBibG9jaywgZl9wb3MsIG9mZnNldCwgYmxvY2tfc2F2ZWQsIG9mZnNldF9zYXZlZDtcbmZzL2lzb2ZzL25hbWVpLmMtNTYtXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDtcbmZzL2lzb2ZzL25hbWVpLmM6NTc6XHRzdHJ1Y3QgaXNvZnNfc2JfaW5mbyAqc2JpID0gSVNPRlNfU0IoZGlyLVx1MDAzZWlfc2IpO1xuZnMvaXNvZnMvbmFtZWkuYy01OC1cbmZzL2lzb2ZzL25hbWVpLmM6NTk6XHRpZiAoIUlTT0ZTX0koZGlyKS1cdTAwM2VpX2ZpcnN0X2V4dGVudClcbmZzL2lzb2ZzL25hbWVpLmMtNjAtXHRcdHJldHVybiAwO1xuLS1cbmZzL2lzb2ZzL25hbWVpLmMtODItXHRcdFx0YmggPSBOVUxMO1xuZnMvaXNvZnMvbmFtZWkuYzo4MzpcdFx0XHRmX3BvcyA9IChmX3BvcyAmIzQzOyBJU09GU19CTE9DS19TSVpFKSBcdTAwMjYgfihJU09GU19CTE9DS19TSVpFIC0gMSk7XG5mcy9pc29mcy9uYW1laS5jLTg0LVx0XHRcdGJsb2NrID0gZl9wb3MgXHUwMDNlXHUwMDNlIGJ1ZmJpdHM7XG4tLVxuZnMvaXNvZnMvcm9jay5jPTQ0PXN0YXRpYyBpbnQgY2hlY2tfc3Aoc3RydWN0IHJvY2tfcmlkZ2UgKnJyLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2lzb2ZzL3JvY2suYy00OS1cdFx0cmV0dXJuIC0xO1xuZnMvaXNvZnMvcm9jay5jOjUwOlx0SVNPRlNfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc19yb2NrX29mZnNldCA9IHJyLVx1MDAzZXUuU1Auc2tpcDtcbmZzL2lzb2ZzL3JvY2suYy01MS1cdHJldHVybiAwO1xuLS1cbmZzL2lzb2ZzL3JvY2suYz01ND1zdGF0aWMgdm9pZCBzZXR1cF9yb2NrX3JpZGdlKHN0cnVjdCBpc29fZGlyZWN0b3J5X3JlY29yZCAqZGUsXG4tLVxuZnMvaXNvZnMvcm9jay5jLTY0LVxuZnMvaXNvZnMvcm9jay5jOjY1Olx0aWYgKElTT0ZTX1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfcm9ja19vZmZzZXQgIT0gLTEpIHtcbmZzL2lzb2ZzL3JvY2suYzo2NjpcdFx0cnMtXHUwMDNlbGVuIC09IElTT0ZTX1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfcm9ja19vZmZzZXQ7XG5mcy9pc29mcy9yb2NrLmM6Njc6XHRcdHJzLVx1MDAzZWNociAmIzQzOz0gSVNPRlNfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc19yb2NrX29mZnNldDtcbmZzL2lzb2ZzL3JvY2suYy02OC1cdFx0aWYgKHJzLVx1MDAzZWxlbiBcdTAwM2MgMClcbi0tXG5mcy9pc29mcy9yb2NrLmM9ODY9c3RhdGljIGludCByb2NrX2NvbnRpbnVlKHN0cnVjdCByb2NrX3N0YXRlICpycylcbi0tXG5mcy9pc29mcy9yb2NrLmMtODgtXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gcnMtXHUwMDNlaW5vZGUtXHUwMDNlaV9zYjtcbmZzL2lzb2ZzL3JvY2suYzo4OTpcdHN0cnVjdCBpc29mc19zYl9pbmZvICpzYmkgPSBJU09GU19TQihzYik7XG5mcy9pc29mcy9yb2NrLmMtOTAtXHR1NjQgZXh0ZW50ID0gKHVuc2lnbmVkIGludClycy1cdTAwM2Vjb250X2V4dGVudDtcbmZzL2lzb2ZzL3JvY2suYy05MS1cdHU2NCBzZXNzaW9uX2VuZCA9IHNiaS1cdTAwM2VzX3Nlc3Npb25fc3RhcnQgJiM0MztcbmZzL2lzb2ZzL3JvY2suYzo5MjpcdFx0KCh1NjQpc2JpLVx1MDAzZXNfbnpvbmVzIFx1MDAzY1x1MDAzYyAoSVNPRlNfQkxPQ0tfQklUUyAtIHNiLVx1MDAzZXNfYmxvY2tzaXplX2JpdHMpKTtcbmZzL2lzb2ZzL3JvY2suYy05My1cdGludCByZXQgPSAxO1xuLS1cbmZzL2lzb2ZzL3JvY2suYz0yMTY9aW50IGdldF9yb2NrX3JpZGdlX2ZpbGVuYW1lKHN0cnVjdCBpc29fZGlyZWN0b3J5X3JlY29yZCAqZGUsXG4tLVxuZnMvaXNvZnMvcm9jay5jLTIyNy1cbmZzL2lzb2ZzL3JvY2suYzoyMjg6XHRpZiAoIUlTT0ZTX1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfcm9jaylcbmZzL2lzb2ZzL3JvY2suYy0yMjktXHRcdHJldHVybiAwO1xuLS1cbmZzL2lzb2ZzL3JvY2suYz0zMjc9cGFyc2Vfcm9ja19yaWRnZV9pbm9kZV9pbnRlcm5hbChzdHJ1Y3QgaXNvX2RpcmVjdG9yeV9yZWNvcmQgKmRlLFxuLS1cbmZzL2lzb2ZzL3JvY2suYy0zMzgtXG5mcy9pc29mcy9yb2NrLmM6MzM5Olx0aWYgKCFJU09GU19TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX3JvY2spXG5mcy9pc29mcy9yb2NrLmMtMzQwLVx0XHRyZXR1cm4gMDtcbi0tXG5mcy9pc29mcy9yb2NrLmMtMzczLVx0XHRzd2l0Y2ggKHNpZykge1xuZnMvaXNvZnMvcm9jay5jOjM3NDojaWZuZGVmIENPTkZJR19aSVNPRlNcdFx0LyogTm8gZmxhZyBmb3IgU0Ygb3IgWkYgKi9cbmZzL2lzb2ZzL3JvY2suYy0zNzUtXHRcdGNhc2UgU0lHKCYjMzk7UiYjMzk7LCAmIzM5O1ImIzM5Oyk6XG4tLVxuZnMvaXNvZnMvcm9jay5jLTM5My1cdFx0XHRcdGdvdG8gb3V0O1xuZnMvaXNvZnMvcm9jay5jOjM5NDpcdFx0XHRJU09GU19TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX3JvY2sgPSAxO1xuZnMvaXNvZnMvcm9jay5jLTM5NS1cdFx0XHRwcmludGsoS0VSTl9ERUJVRyBcJiMzNDtJU08gOTY2MCBFeHRlbnNpb25zOiBcJiMzNDspO1xuLS1cbmZzL2lzb2ZzL3JvY2suYy01MzMtXHRcdFx0XHRwcmludGsoS0VSTl9FUlJcbmZzL2lzb2ZzL3JvY2suYzo1MzQ6XHRcdFx0XHQgICAgICAgXCYjMzQ7SVNPRlM6IFJlY3Vyc2l2ZSBkaXJlY3RvcnkgcmVsb2NhdGlvbiBcJiMzNDtcbmZzL2lzb2ZzL3JvY2suYy01MzUtXHRcdFx0XHQgICAgICAgXCYjMzQ7aXMgbm90IHN1cHBvcnRlZFxcblwmIzM0Oyk7XG4tLVxuZnMvaXNvZnMvcm9jay5jLTUzOC1cdFx0XHRyZWxvY19ibG9jayA9IGlzb251bV83MzMocnItXHUwMDNldS5DTC5sb2NhdGlvbik7XG5mcy9pc29mcy9yb2NrLmM6NTM5Olx0XHRcdGlmIChyZWxvY19ibG9jayA9PSBJU09GU19JKGlub2RlKS1cdTAwM2VpX2lnZXQ1X2Jsb2NrIFx1MDAyNlx1MDAyNlxuZnMvaXNvZnMvcm9jay5jOjU0MDpcdFx0XHQgICAgSVNPRlNfSShpbm9kZSktXHUwMDNlaV9pZ2V0NV9vZmZzZXQgPT0gMCkge1xuZnMvaXNvZnMvcm9jay5jLTU0MS1cdFx0XHRcdHByaW50ayhLRVJOX0VSUlxuZnMvaXNvZnMvcm9jay5jOjU0MjpcdFx0XHRcdCAgICAgICBcJiMzNDtJU09GUzogRGlyZWN0b3J5IHJlbG9jYXRpb24gcG9pbnRzIHRvIFwmIzM0O1xuZnMvaXNvZnMvcm9jay5jLTU0My1cdFx0XHRcdCAgICAgICBcJiMzNDtpdHNlbGZcXG5cJiMzNDspO1xuLS1cbmZzL2lzb2ZzL3JvY2suYy01NDUtXHRcdFx0fVxuZnMvaXNvZnMvcm9jay5jOjU0NjpcdFx0XHRJU09GU19JKGlub2RlKS1cdTAwM2VpX2ZpcnN0X2V4dGVudCA9IHJlbG9jX2Jsb2NrO1xuZnMvaXNvZnMvcm9jay5jLTU0Ny1cdFx0XHRyZWxvYyA9IGlzb2ZzX2lnZXRfcmVsb2MoaW5vZGUtXHUwMDNlaV9zYiwgcmVsb2NfYmxvY2ssIDApO1xuLS1cbmZzL2lzb2ZzL3JvY2suYy01NjMtXHRcdFx0YnJlYWs7XG5mcy9pc29mcy9yb2NrLmM6NTY0OiNpZmRlZiBDT05GSUdfWklTT0ZTXG5mcy9pc29mcy9yb2NrLmMtNTY1LVx0XHRjYXNlIFNJRygmIzM5O1omIzM5OywgJiMzOTtGJiMzOTspOiB7XG4tLVxuZnMvaXNvZnMvcm9jay5jLTU2Ny1cbmZzL2lzb2ZzL3JvY2suYzo1Njg6XHRcdFx0aWYgKElTT0ZTX1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfbm9jb21wcmVzcylcbmZzL2lzb2ZzL3JvY2suYy01NjktXHRcdFx0XHRicmVhaztcbi0tXG5mcy9pc29mcy9yb2NrLmMtNTgzLVx0XHRcdFx0XHQgKi9cbmZzL2lzb2ZzL3JvY2suYzo1ODQ6XHRcdFx0XHRcdElTT0ZTX0koaW5vZGUpLVx1MDAzZWlfZmlsZV9mb3JtYXQgPVxuZnMvaXNvZnMvcm9jay5jLTU4NS1cdFx0XHRcdFx0XHRpc29mc19maWxlX2NvbXByZXNzZWQ7XG4tLVxuZnMvaXNvZnMvcm9jay5jLTU5MC1cdFx0XHRcdFx0ICovXG5mcy9pc29mcy9yb2NrLmM6NTkxOlx0XHRcdFx0XHRJU09GU19JKGlub2RlKS1cdTAwM2VpX2Zvcm1hdF9wYXJtWzBdID1cbmZzL2lzb2ZzL3JvY2suYy01OTItXHRcdFx0XHRcdFx0aXNvbnVtXzcxMShcdTAwMjZyci1cdTAwM2V1LlpGLnBhcm1zWzBdKTtcbmZzL2lzb2ZzL3JvY2suYzo1OTM6XHRcdFx0XHRcdElTT0ZTX0koaW5vZGUpLVx1MDAzZWlfZm9ybWF0X3Bhcm1bMV0gPVxuZnMvaXNvZnMvcm9jay5jLTU5NC1cdFx0XHRcdFx0XHRpc29udW1fNzExKFx1MDAyNnJyLVx1MDAzZXUuWkYucGFybXNbMV0pO1xuLS1cbmZzL2lzb2ZzL3JvY2suYz03MDI9aW50IHBhcnNlX3JvY2tfcmlkZ2VfaW5vZGUoc3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkICpkZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9pc29mcy9yb2NrLmMtNzExLVx0ICovXG5mcy9pc29mcy9yb2NrLmM6NzEyOlx0aWYgKChJU09GU19TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX3JvY2tfb2Zmc2V0ID09IC0xKVxuZnMvaXNvZnMvcm9jay5jOjcxMzpcdCAgICBcdTAwMjZcdTAwMjYgKElTT0ZTX1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfcm9jayA9PSAyKSkge1xuZnMvaXNvZnMvcm9jay5jLTcxNC1cdFx0cmVzdWx0ID0gcGFyc2Vfcm9ja19yaWRnZV9pbm9kZV9pbnRlcm5hbChkZSwgaW5vZGUsXG4tLVxuZnMvaXNvZnMvcm9jay5jPTcyND1zdGF0aWMgaW50IHJvY2tfcmlkZ2Vfc3ltbGlua19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmZzL2lzb2ZzL3JvY2suYy03MjYtXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZm9saW8tXHUwMDNlbWFwcGluZy1cdTAwM2Vob3N0O1xuZnMvaXNvZnMvcm9jay5jOjcyNzpcdHN0cnVjdCBpc29faW5vZGVfaW5mbyAqZWkgPSBJU09GU19JKGlub2RlKTtcbmZzL2lzb2ZzL3JvY2suYzo3Mjg6XHRzdHJ1Y3QgaXNvZnNfc2JfaW5mbyAqc2JpID0gSVNPRlNfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG5mcy9pc29mcy9yb2NrLmMtNzI5LVx0Y2hhciAqbGluayA9IGZvbGlvX2FkZHJlc3MoZm9saW8pO1xuZnMvaXNvZnMvcm9jay5jOjczMDpcdHVuc2lnbmVkIGxvbmcgYnVmc2l6ZSA9IElTT0ZTX0JVRkZFUl9TSVpFKGlub2RlKTtcbmZzL2lzb2ZzL3JvY2suYy03MzEtXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xuLS1cbmZzL2lzb2ZzL3ppc29mcy5oLTExLVxuZnMvaXNvZnMvemlzb2ZzLmg6MTI6I2lmZGVmIENPTkZJR19aSVNPRlNcbmZzL2lzb2ZzL3ppc29mcy5oLTEzLWV4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHppc29mc19hb3BzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjI1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkV4YW1pbmluZyB0aGUgSVNPRlMgS2NvbmZpZyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgZnMvaXNvZnMvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIElTTyA5NjYwIGZpbGVzeXN0ZW0gZHJpdmVyIGFyZSBkZWZpbmVkLCB0aGUgaGVhcnQgb2YgaG93IHdlIGNvbmZpZ3VyZSB0aGUga2VybmVsJiMzOTtzIHN1cHBvcnQgZm9yIHJlYWRpbmcgQ0QtUk9NcyBhbmQgb3RoZXIgb3B0aWNhbCBtZWRpYS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCB3aGF0IHRoZWlyIGRlcGVuZGVuY2llcyBhcmUsIGFuZCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gd2hldGhlciB0aGVyZSBoYXZlIGJlZW4gYW55IHJlY2VudCBjaGFuZ2VzLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBzdGFuZGFyZCBzdHVmZjogYENPTkZJR19JU085NjYwX0ZTYCB0byBlbmFibGUgdGhlIGJhc2ljIGRyaXZlciwgb3B0aW9ucyBmb3IgUm9jayBSaWRnZSBleHRlbnNpb25zLCBKb2xpZXQgc3VwcG9ydCwgbWF5YmUgZXZlbiBzb21lIHF1aXJreSBsZWdhY3kgZmVhdHVyZXMuIE15IGF0dGVudGlvbiB3aWxsIGJlIGxhc2VyLWZvY3VzZWQgb24gYW55dGhpbmcgcmVsYXRlZCB0byBzZWN1cml0eSBmZWF0dXJlcywgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucywgYW5kIGFueSBwb3RlbnRpYWwgbmV3IGFkZGl0aW9ucyBJIHNob3VsZCBrbm93IGFib3V0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyB3ZSBjYW4gZmluZCBpbiB0aGlzIEtjb25maWcgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2lzb2ZzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgSVNPOTY2MF9GU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7SVNPIDk2NjAgQ0RST00gZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuICAgNDpcdFx0c2VsZWN0IEJVRkZFUl9IRUFEXG4gICA1Olx0XHRoZWxwXG4gICA2Olx0XHQgIFRoaXMgaXMgdGhlIHN0YW5kYXJkIGZpbGUgc3lzdGVtIHVzZWQgb24gQ0QtUk9Ncy4gIEl0IHdhcyBwcmV2aW91c2x5XG4gICA3Olx0XHQgIGtub3duIGFzIFwmIzM0O0hpZ2ggU2llcnJhIEZpbGUgU3lzdGVtXCYjMzQ7IGFuZCBpcyBjYWxsZWQgXCYjMzQ7aHNmc1wmIzM0OyBvbiBvdGhlclxuICAgODpcdFx0ICBVbml4IHN5c3RlbXMuICBUaGUgc28tY2FsbGVkIFJvY2stUmlkZ2UgZXh0ZW5zaW9ucyB3aGljaCBhbGxvdyBmb3JcbiAgIDk6XHRcdCAgbG9uZyBVbml4IGZpbGVuYW1lcyBhbmQgc3ltYm9saWMgbGlua3MgYXJlIGFsc28gc3VwcG9ydGVkIGJ5IHRoaXNcbiAgMTA6XHRcdCAgZHJpdmVyLiAgSWYgeW91IGhhdmUgYSBDRC1ST00gZHJpdmUgYW5kIHdhbnQgdG8gZG8gbW9yZSB3aXRoIGl0IHRoYW5cbiAgMTE6XHRcdCAganVzdCBsaXN0ZW4gdG8gYXVkaW8gQ0RzIGFuZCB3YXRjaCBpdHMgTEVEcywgc2F5IFkgKGFuZCByZWFkXG4gIDEyOlx0XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pc29mcy5yc3RcdTAwM2UgYW5kIHRoZSBDRC1ST00tSE9XVE8sXG4gIDEzOlx0XHQgIGF2YWlsYWJsZSBmcm9tIFx1MDAzY2h0dHA6Ly93d3cudGxkcC5vcmcvZG9jcy5odG1sI2hvd3RvXHUwMDNlKSwgdGhlcmVieVxuICAxNDpcdFx0ICBlbmxhcmdpbmcgeW91ciBrZXJuZWwgYnkgYWJvdXQgMjcgS0I7IG90aGVyd2lzZSBzYXkgTi5cbiAgMTU6XHRcbiAgMTY6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGZpbGUgc3lzdGVtIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuICAxNzpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaXNvZnMuXG4gIDE4Olx0XG4gIDE5Olx0Y29uZmlnIEpPTElFVFxuICAyMDpcdFx0Ym9vbCBcJiMzNDtNaWNyb3NvZnQgSm9saWV0IENEUk9NIGV4dGVuc2lvbnNcJiMzNDtcbiAgMjE6XHRcdGRlcGVuZHMgb24gSVNPOTY2MF9GU1xuICAyMjpcdFx0c2VsZWN0IE5MU1xuICAyMzpcdFx0aGVscFxuICAyNDpcdFx0ICBKb2xpZXQgaXMgYSBNaWNyb3NvZnQgZXh0ZW5zaW9uIGZvciB0aGUgSVNPIDk2NjAgQ0QtUk9NIGZpbGUgc3lzdGVtXG4gIDI1Olx0XHQgIHdoaWNoIGFsbG93cyBmb3IgbG9uZyBmaWxlbmFtZXMgaW4gdW5pY29kZSBmb3JtYXQgKHVuaWNvZGUgaXMgdGhlXG4gIDI2Olx0XHQgIG5ldyAxNiBiaXQgY2hhcmFjdGVyIGNvZGUsIHN1Y2Nlc3NvciB0byBBU0NJSSwgd2hpY2ggZW5jb2RlcyB0aGVcbiAgMjc6XHRcdCAgY2hhcmFjdGVycyBvZiBhbG1vc3QgYWxsIGxhbmd1YWdlcyBvZiB0aGUgd29ybGQ7IHNlZVxuICAyODpcdFx0ICBcdTAwM2NodHRwOi8vd3d3LnVuaWNvZGUub3JnL1x1MDAzZSBmb3IgbW9yZSBpbmZvcm1hdGlvbikuICBTYXkgWSBoZXJlIGlmIHlvdVxuICAyOTpcdFx0ICB3YW50IHRvIGJlIGFibGUgdG8gcmVhZCBKb2xpZXQgQ0QtUk9NcyB1bmRlciBMaW51eC5cbiAgMzA6XHRcbiAgMzE6XHRjb25maWcgWklTT0ZTXG4gIDMyOlx0XHRib29sIFwmIzM0O1RyYW5zcGFyZW50IGRlY29tcHJlc3Npb24gZXh0ZW5zaW9uXCYjMzQ7XG4gIDMzOlx0XHRkZXBlbmRzIG9uIElTTzk2NjBfRlNcbiAgMzQ6XHRcdHNlbGVjdCBaTElCX0lORkxBVEVcbiAgMzU6XHRcdGhlbHBcbiAgMzY6XHRcdCAgVGhpcyBpcyBhIExpbnV4LXNwZWNpZmljIGV4dGVuc2lvbiB0byBSb2NrUmlkZ2Ugd2hpY2ggbGV0cyB5b3Ugc3RvcmVcbiAgMzc6XHRcdCAgZGF0YSBpbiBjb21wcmVzc2VkIGZvcm0gb24gYSBDRC1ST00gYW5kIGhhdmUgaXQgdHJhbnNwYXJlbnRseVxuICAzODpcdFx0ICBkZWNvbXByZXNzZWQgd2hlbiB0aGUgQ0QtUk9NIGlzIGFjY2Vzc2VkLiAgU2VlXG4gIDM5Olx0XHQgIFx1MDAzY2h0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMvZnMvemlzb2ZzL1x1MDAzZSBmb3IgdGhlIHRvb2xzXG4gIDQwOlx0XHQgIG5lY2Vzc2FyeSB0byBjcmVhdGUgc3VjaCBhIGZpbGVzeXN0ZW0uICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxODcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqQW5hbHl6aW5nIElTTyA5NjYwIFJvY2sgUmlkZ2UgRXh0ZW5zaW9ucyoqCgpBbHJpZ2h0LCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgZnMvaXNvZnMvcm9jay5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBSb2NrIFJpZGdlIGV4dGVuc2lvbnMgYXJlIGhhbmRsZWQsIHNvIHRoZSBhcmVhIGFyb3VuZCBgcm9ja19jb250aW51ZWAgaXMgY3J1Y2lhbC4gVGhhdCBmdW5jdGlvbiBpcyBsaWtlbHkgYSBrZXkgcGllY2UgaW4gcHJvY2Vzc2luZyB0aGUgZXh0ZW5kZWQgYXR0cmlidXRlcy4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgY2FsbGVycy4KCkkmIzM5O2xsIHRoZW4gcGl2b3QgbXkgYXR0ZW50aW9uIHRvIHRoZSBwYXJzaW5nIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGBwYXJzZV9yb2NrX3JpZGdlX2lub2RlYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgaW5vZGUgaW5mb3JtYXRpb24gZ2V0cyBpbnRlcnByZXRlZCwgYW5kIGBnZXRfcm9ja19yaWRnZV9maWxlbmFtZWAgaXMgYW5vdGhlciBjcml0aWNhbCBwaWVjZSwgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBjb25zdHJ1Y3RpbmcgdGhlIGFjdHVhbCBmaWxlbmFtZXMgYmFzZWQgb24gdGhlIFJvY2sgUmlkZ2UgZXh0ZW5zaW9ucy4gVW5kZXJzdGFuZGluZyB0aGVpciBpbnRlcmFjdGlvbnMgd2lsbCByZXZlYWwgaG93IHRoZSBleHRlbmRlZCBmaWxlc3lzdGVtIG1ldGFkYXRhIGlzIGFjY2Vzc2VkIGFuZCB0cmFuc2Zvcm1lZCBmb3IgdGhlIGVuZC11c2VyLiBFc3NlbnRpYWxseSwgSSBuZWVkIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cgZnJvbSB0aGUgcmF3IElTTyBpbWFnZSBmb3JtYXQgdG8gdGhlIFBPU0lYLWNvbXBhdGlibGUgcmVwcmVzZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTI6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9pc29mcy9yb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDgwOlx0I2RlZmluZSBSUl9NQVhfQ0VfRU5UUklFUyAzMlxuICA4MTpcdFxuICA4MjpcdC8qXG4gIDgzOlx0ICogUmV0dXJucyAwIGlmIHRoZSBjYWxsZXIgc2hvdWxkIGNvbnRpbnVlIHNjYW5uaW5nLCAxIGlmIHRoZSBzY2FuIG11c3QgZW5kXG4gIDg0Olx0ICogYW5kIC12ZSBvbiBlcnJvci5cbiAgODU6XHQgKi9cbiAgODY6XHRzdGF0aWMgaW50IHJvY2tfY29udGludWUoc3RydWN0IHJvY2tfc3RhdGUgKnJzKVxuICA4NzpcdHtcbiAgODg6XHRcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBycy1cdTAwM2Vpbm9kZS1cdTAwM2VpX3NiO1xuICA4OTpcdFx0c3RydWN0IGlzb2ZzX3NiX2luZm8gKnNiaSA9IElTT0ZTX1NCKHNiKTtcbiAgOTA6XHRcdHU2NCBleHRlbnQgPSAodW5zaWduZWQgaW50KXJzLVx1MDAzZWNvbnRfZXh0ZW50O1xuICA5MTpcdFx0dTY0IHNlc3Npb25fZW5kID0gc2JpLVx1MDAzZXNfc2Vzc2lvbl9zdGFydCAmIzQzO1xuICA5MjpcdFx0XHQoKHU2NClzYmktXHUwMDNlc19uem9uZXMgXHUwMDNjXHUwMDNjIChJU09GU19CTE9DS19CSVRTIC0gc2ItXHUwMDNlc19ibG9ja3NpemVfYml0cykpO1xuICA5MzpcdFx0aW50IHJldCA9IDE7XG4gIDk0Olx0XHRpbnQgYmxvY2tzaXplID0gMSBcdTAwM2NcdTAwM2MgcnMtXHUwMDNlaW5vZGUtXHUwMDNlaV9ibGtiaXRzO1xuICA5NTpcdFx0Y29uc3QgaW50IG1pbl9kZV9zaXplID0gb2Zmc2V0b2Yoc3RydWN0IHJvY2tfcmlkZ2UsIHUpO1xuICA5NjpcdFxuICA5NzpcdFx0a2ZyZWUocnMtXHUwMDNlYnVmZmVyKTtcbiAgOTg6XHRcdHJzLVx1MDAzZWJ1ZmZlciA9IE5VTEw7XG4gIDk5Olx0XG4gMTAwOlx0XHRpZiAoKHVuc2lnbmVkKXJzLVx1MDAzZWNvbnRfb2Zmc2V0IFx1MDAzZSBibG9ja3NpemUgLSBtaW5fZGVfc2l6ZSB8fFxuIDEwMTpcdFx0ICAgICh1bnNpZ25lZClycy1cdTAwM2Vjb250X3NpemUgXHUwMDNlIGJsb2Nrc2l6ZSB8fFxuIDEwMjpcdFx0ICAgICh1bnNpZ25lZCkocnMtXHUwMDNlY29udF9vZmZzZXQgJiM0MzsgcnMtXHUwMDNlY29udF9zaXplKSBcdTAwM2UgYmxvY2tzaXplKSB7XG4gMTAzOlx0XHRcdHByaW50ayhLRVJOX05PVElDRSBcJiMzNDtyb2NrOiBjb3JydXB0ZWQgZGlyZWN0b3J5IGVudHJ5LiBcJiMzNDtcbiAxMDQ6XHRcdFx0XHRcJiMzNDtleHRlbnQ9JWQsIG9mZnNldD0lZCwgc2l6ZT0lZFxcblwmIzM0OyxcbiAxMDU6XHRcdFx0XHRycy1cdTAwM2Vjb250X2V4dGVudCwgcnMtXHUwMDNlY29udF9vZmZzZXQsIHJzLVx1MDAzZWNvbnRfc2l6ZSk7XG4gMTA2Olx0XHRcdHJldCA9IC1FSU87XG4gMTA3Olx0XHRcdGdvdG8gb3V0O1xuIDEwODpcdFx0fVxuIDEwOTpcdFxuIDExMDpcdFx0aWYgKHJzLVx1MDAzZWNvbnRfZXh0ZW50IFx1MDAyNlx1MDAyNlxuIDExMTpcdFx0ICAgIChleHRlbnQgXHUwMDNjIHNiaS1cdTAwM2VzX3Nlc3Npb25fc3RhcnQgfHxcbiAxMTI6XHRcdCAgICAgZXh0ZW50IFx1MDAzZT0gc2Vzc2lvbl9lbmQgfHxcbiAxMTM6XHRcdCAgICAgZXh0ZW50IFx1MDAzZT0gc2JfYmRldl9ucl9ibG9ja3Moc2IpKSkge1xuIDExNDpcdFx0XHRwcmludGsoS0VSTl9OT1RJQ0UgXCYjMzQ7cm9jazogY29ycnVwdGVkIGRpcmVjdG9yeSBlbnRyeS4gXCYjMzQ7XG4gMTE1Olx0XHRcdFx0XCYjMzQ7ZXh0ZW50PSV1IG91dCBvZiB2b2x1bWUgKG56b25lcz0lbHUpXFxuXCYjMzQ7LFxuIDExNjpcdFx0XHRcdCh1bnNpZ25lZClycy1cdTAwM2Vjb250X2V4dGVudCxcbiAxMTc6XHRcdFx0XHRzYmktXHUwMDNlc19uem9uZXMpO1xuIDExODpcdFx0XHRyZXQgPSAtRUlPO1xuIDExOTpcdFx0XHRnb3RvIG91dDtcbiAxMjA6XHRcdH1cbiAxMjE6XHRcbiAxMjI6XHRcdGlmIChycy1cdTAwM2Vjb250X2V4dGVudCkge1xuIDEyMzpcdFx0XHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xuIDEyNDpcdFxuIDEyNTpcdFx0XHRycy1cdTAwM2VidWZmZXIgPSBrbWFsbG9jKHJzLVx1MDAzZWNvbnRfc2l6ZSwgR0ZQX0tFUk5FTCk7XG4gMTI2Olx0XHRcdGlmICghcnMtXHUwMDNlYnVmZmVyKSB7XG4gMTI3Olx0XHRcdFx0cmV0ID0gLUVOT01FTTtcbiAxMjg6XHRcdFx0XHRnb3RvIG91dDtcbiAxMjk6XHRcdFx0fVxuIDEzMDpcdFx0XHRyZXQgPSAtRUlPO1xuIDEzMTpcdFx0XHRpZiAoJiM0MzsmIzQzO3JzLVx1MDAzZWNvbnRfbG9vcHMgXHUwMDNlPSBSUl9NQVhfQ0VfRU5UUklFUylcbiAxMzI6XHRcdFx0XHRnb3RvIG91dDtcbiAxMzM6XHRcdFx0YmggPSBzYl9icmVhZChycy1cdTAwM2Vpbm9kZS1cdTAwM2VpX3NiLCBycy1cdTAwM2Vjb250X2V4dGVudCk7XG4gMTM0Olx0XHRcdGlmIChiaCkge1xuIDEzNTpcdFx0XHRcdG1lbWNweShycy1cdTAwM2VidWZmZXIsIGJoLVx1MDAzZWJfZGF0YSAmIzQzOyBycy1cdTAwM2Vjb250X29mZnNldCxcbiAxMzY6XHRcdFx0XHRcdFx0cnMtXHUwMDNlY29udF9zaXplKTtcbiAxMzc6XHRcdFx0XHRwdXRfYmgoYmgpO1xuIDEzODpcdFx0XHRcdHJzLVx1MDAzZWNociA9IHJzLVx1MDAzZWJ1ZmZlcjtcbiAxMzk6XHRcdFx0XHRycy1cdTAwM2VsZW4gPSBycy1cdTAwM2Vjb250X3NpemU7XG4gMTQwOlx0XHRcdFx0cnMtXHUwMDNlY29udF9leHRlbnQgPSAwO1xuIDE0MTpcdFx0XHRcdHJzLVx1MDAzZWNvbnRfc2l6ZSA9IDA7XG4gMTQyOlx0XHRcdFx0cnMtXHUwMDNlY29udF9vZmZzZXQgPSAwO1xuIDE0MzpcdFx0XHRcdHJldHVybiAwO1xuIDE0NDpcdFx0XHR9XG4gMTQ1Olx0XHRcdHByaW50ayhcJiMzNDtVbmFibGUgdG8gcmVhZCByb2NrLXJpZGdlIGF0dHJpYnV0ZXNcXG5cJiMzNDspO1xuIDE0NjpcdFx0fVxuIDE0NzpcdG91dDpcbiAxNDg6XHRcdGtmcmVlKHJzLVx1MDAzZWJ1ZmZlcik7XG4gMTQ5Olx0XHRycy1cdTAwM2VidWZmZXIgPSBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTg0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBDYWxsIFBhdGhzIFJlbGF0ZWQgdG8gYHJvY2tfY29udGludWVgIGFuZCBSb2NrIFJpZGdlIFBhcnNpbmcqKgoKT2theSwgc28gSSBuZWVkIHRvIGRyaWxsIGRvd24gaW50byB0aGUgY2FsbCBncmFwaC4gVGhlIGluaXRpYWwgcXVlc3Rpb24gaXMgc3RyYWlnaHRmb3J3YXJkOiAqd2hvKiBpcyBjYWxsaW5nIHRoZSBgcm9ja19jb250aW51ZWAgZnVuY3Rpb24/IFVuZGVyc3RhbmRpbmcgaXRzIGltbWVkaWF0ZSBjYWxsZXJzIGlzIHRoZSBjcnVjaWFsIGZpcnN0IHN0ZXAuIEl0IGdpdmVzIG1lIGEgc3RhcnRpbmcgcG9pbnQgdG8gc2VlIHdoYXQgY29kZSBwYXRocyBhcmUgYWN0aXZlbHkgdXNpbmcgdGhpcyBmdW5jdGlvbi4KCkJ1dCBJIGNhbiYjMzk7dCBzdG9wIHRoZXJlLiBJIGFsc28gbmVlZCB0byBicm9hZGVuIHRoZSBzY29wZSBhbmQgZXhhbWluZSBhbGwgdGhlIGNhbGxlcnMgKmludm9sdmVkKiB3aXRoIFJvY2sgUmlkZ2UgcGFyc2luZyBsb2dpYyBtb3JlIGdlbmVyYWxseS4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjayBhcyBmYXIgYXMgcG9zc2libGUuIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgd2FudCB0byBzZWUgaG93IHRoZXNlIHR3byBncm91cHMgaW50ZXJzZWN0IGFuZCBpbnRlcmFjdCB3aXRoIGVhY2ggb3RoZXIuIEl0IG1heSBiZSB0aGF0IHRoZXJlIGlzIGEgYnVnIG9yIHVud2FudGVkIGJlaGF2aW9yIHRoYXQgSSBjYW4gZml4IG9yIHJlZmFjdG9yLiBUaGUgcXVlc3Rpb24gaXMsIGhvdyBmYXIgYmFjayBzaG91bGQgSSBnbz8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTI6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cm9ja19jb250aW51ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2lzb2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9pc29mcy9yb2NrLmM9NzM9c3RhdGljIHZvaWQgaW5pdF9yb2NrX3N0YXRlKHN0cnVjdCByb2NrX3N0YXRlICpycywgc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9pc29mcy9yb2NrLmMtODUtICovXG5mcy9pc29mcy9yb2NrLmM6ODY6c3RhdGljIGludCByb2NrX2NvbnRpbnVlKHN0cnVjdCByb2NrX3N0YXRlICpycylcbmZzL2lzb2ZzL3JvY2suYy04Ny17XG4tLVxuZnMvaXNvZnMvcm9jay5jPTIxNj1pbnQgZ2V0X3JvY2tfcmlkZ2VfZmlsZW5hbWUoc3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkICpkZSxcbi0tXG5mcy9pc29mcy9yb2NrLmMtMzA5LVx0fVxuZnMvaXNvZnMvcm9jay5jOjMxMDpcdHJldCA9IHJvY2tfY29udGludWUoXHUwMDI2cnMpO1xuZnMvaXNvZnMvcm9jay5jLTMxMS1cdGlmIChyZXQgPT0gMClcbi0tXG5mcy9pc29mcy9yb2NrLmM9MzI3PXBhcnNlX3JvY2tfcmlkZ2VfaW5vZGVfaW50ZXJuYWwoc3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkICpkZSxcbi0tXG5mcy9pc29mcy9yb2NrLmMtNjEyLVx0fVxuZnMvaXNvZnMvcm9jay5jOjYxMzpcdHJldCA9IHJvY2tfY29udGludWUoXHUwMDI2cnMpO1xuZnMvaXNvZnMvcm9jay5jLTYxNC1cdGlmIChyZXQgPT0gMClcbi0tXG5mcy9pc29mcy9yb2NrLmM9NzI0PXN0YXRpYyBpbnQgcm9ja19yaWRnZV9zeW1saW5rX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuZnMvaXNvZnMvcm9jay5jLTgwNS1cdH1cbmZzL2lzb2ZzL3JvY2suYzo4MDY6XHRyZXQgPSByb2NrX2NvbnRpbnVlKFx1MDAyNnJzKTtcbmZzL2lzb2ZzL3JvY2suYy04MDctXHRpZiAocmV0ID09IDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjE3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gSVNPRlMgUm9jayBSaWRnZSBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gZ2V0IGEgZ3Jhc3Agb24gaG93IFJvY2sgUmlkZ2UgZXh0ZW5zaW9ucyBhcmUgaGFuZGxlZCBpbiB0aGUgSVNPRlMgaW1wbGVtZW50YXRpb24uICBUaGUga2V5IGZ1bmN0aW9uIGhlcmUgc2VlbXMgdG8gYmUgYHJvY2tfY29udGludWVgLiAgSXQmIzM5O3MgcHJldHR5IGNsZWFyIGZyb20gdGhpcyB0aGF0IGByb2NrX2NvbnRpbnVlYCBpcyBjZW50cmFsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGNhbGxpbmcgaXQsIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMuIFRoZSBjYWxsIHN0YWNrIGdpdmVzIG1lIHRoZSBpbW1lZGlhdGUgY29ubmVjdGlvbnM6ICBJdCYjMzk7cyBjYWxsZWQgYnkgYGdldF9yb2NrX3JpZGdlX2ZpbGVuYW1lYCwgd2hpY2ggaXMgb2J2aW91cyBlbm91Z2guIEJ1dCBtb3JlIGltcG9ydGFudGx5LCBpdCYjMzk7cyBhbHNvIGNhbGxlZCBieSBgcGFyc2Vfcm9ja19yaWRnZV9pbm9kZV9pbnRlcm5hbGAsIHdoaWNoLCBJIGtub3csIGlzIHVzZWQgd2hlbiBhY3R1YWxseSBkZWFsaW5nIHdpdGggaW5vZGVzLiBBbmQgZnVydGhlciBzdGlsbCwgYHBhcnNlX3JvY2tfcmlkZ2VfaW5vZGVfaW50ZXJuYWxgIGlzIGNhbGxlZCBieSBgcGFyc2Vfcm9ja19yaWRnZV9pbm9kZWAgKHdoaWNoIHdpbGwgZXZlbnR1YWxseSBiZSBjYWxsZWQgYnkgb3RoZXIgZnVuY3Rpb25zLCBJIGFtIHN1cmUpLiBGaW5hbGx5IGByb2NrX3JpZGdlX3N5bWxpbmtfcmVhZF9mb2xpb2AgaXMgYW5vdGhlciBpbXBvcnRhbnQgcGxhY2UgaXQgaXMgdXNlZC4gSSBhbSBhc3N1bWluZyB0aGF0IGl0IGlzIHVzZWQgZm9yIGhhbmRsaW5nIFJvY2sgUmlkZ2UgZXh0ZW5zaW9ucyBpbiBzeW1saW5rcy4KCk5vdywgYGlzb2ZzX2ZpbGxfc3VwZXJgIHNldHMgYHNiaS0mZ3Q7c19zZXNzaW9uX3N0YXJ0YC4gVGhpcyBtZWFucyB0aGUgc3VwZXJibG9jayBpbmZvcm1hdGlvbiBpcyBrZXkgdG8gdGhlIHNlc3Npb24gZGF0YSwgcGFydGljdWxhcmx5IHRoZSBzdGFydCBwb2ludC4gIFRoYXQmIzM5O3MgcHJvYmFibHkgd2hlcmUgdGhlIGltYWdlIGluZm9ybWF0aW9uIGFuZCBtZXRhZGF0YSBsaXZlcy4gQW5kIEkmIzM5O20gd2lsbGluZyB0byBiZXQgdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byB0aGUgb3ZlcmFsbCBwYXJzaW5nIHByb2Nlc3MuIEkmIzM5O20gZ29pbmcgdG8gaGVhZCB0byBgZnMvaXNvZnMvaW5vZGUuY2Agbm93IHRvIGV4YW1pbmUgYGlzb2ZzX2ZpbGxfc3VwZXJgLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGUgc3VwZXJibG9jayBpcyBpbml0aWFsaXplZCBpcyBjcml0aWNhbCBmb3Igc2VlaW5nIGhvdyB0aGUgd2hvbGUgUm9jayBSaWRnZSBzdHJ1Y3R1cmUgaXMgc2V0IHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2lzb2ZzL2lub2RlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgxMDpcdFx0ICogbGVzcyB0aGFuIHRoZSBoYXJkd2FyZSBzZWN0b3Igc2l6ZSBmb3IgdGhlIGRldmljZS4gIElmIHdlXG4gODExOlx0XHQgKiBkbywgd2Ugd291bGQgZW5kIHVwIGhhdmluZyB0byByZWFkIGxhcmdlciBidWZmZXJzIGFuZCBzcGxpdFxuIDgxMjpcdFx0ICogb3V0IHBvcnRpb25zIHRvIHNhdGlzZnkgcmVxdWVzdHMuXG4gODEzOlx0XHQgKlxuIDgxNDpcdFx0ICogTm90ZTItIHRoZSBpZGVhIGhlcmUgaXMgdGhhdCB3ZSB3YW50IHRvIGRlYWwgd2l0aCB0aGUgb3B0aW1hbFxuIDgxNTpcdFx0ICogem9uZXNpemUgaW4gdGhlIGZpbGVzeXN0ZW0uICBJZiB3ZSBoYXZlIGl0IHNldCB0byBzb21ldGhpbmcgbGVzcyxcbiA4MTY6XHRcdCAqIHRoZW4gd2UgaGF2ZSBob3JyaWJsZSBwcm9ibGVtcyB3aXRoIHRyeWluZyB0byBwaWVjZSB0b2dldGhlclxuIDgxNzpcdFx0ICogYml0cyBvZiBhZGphY2VudCBibG9ja3MgaW4gb3JkZXIgdG8gcHJvcGVybHkgcmVhZCBkaXJlY3RvcnlcbiA4MTg6XHRcdCAqIGVudHJpZXMuICBCeSBmb3JjaW5nIHRoZSBibG9ja3NpemUgaW4gdGhpcyB3YXksIHdlIGVuc3VyZVxuIDgxOTpcdFx0ICogdGhhdCB3ZSB3aWxsIG5ldmVyIGJlIHJlcXVpcmVkIHRvIGRvIHRoaXMuXG4gODIwOlx0XHQgKi9cbiA4MjE6XHRcdGlmICghc2Jfc2V0X2Jsb2Nrc2l6ZShzLCBvcmlnX3pvbmVzaXplKSlcbiA4MjI6XHRcdFx0Z290byBvdXRfZnJlZXNiaTtcbiA4MjM6XHRcbiA4MjQ6XHRcdHNiaS1cdTAwM2VzX3Nlc3Npb25fc3RhcnQgPSAodTY0KXZvbF9kZXNjX3N0YXJ0IFx1MDAzY1x1MDAzY1xuIDgyNTpcdFx0XHRcdFx0KElTT0ZTX0JMT0NLX0JJVFMgLSBzLVx1MDAzZXNfYmxvY2tzaXplX2JpdHMpO1xuIDgyNjpcdFx0c2JpLVx1MDAzZXNfbmxzX2lvY2hhcnNldCA9IE5VTEw7XG4gODI3Olx0XG4gODI4Olx0I2lmZGVmIENPTkZJR19KT0xJRVRcbiA4Mjk6XHRcdGlmIChqb2xpZXRfbGV2ZWwpIHtcbiA4MzA6XHRcdFx0Y2hhciAqcCA9IG9wdC1cdTAwM2Vpb2NoYXJzZXQgPyBvcHQtXHUwMDNlaW9jaGFyc2V0IDogQ09ORklHX05MU19ERUZBVUxUO1xuIDgzMTpcdFx0XHRpZiAoc3RyY21wKHAsIFwmIzM0O3V0ZjhcJiMzNDspICE9IDApIHtcbiA4MzI6XHRcdFx0XHRzYmktXHUwMDNlc19ubHNfaW9jaGFyc2V0ID0gb3B0LVx1MDAzZWlvY2hhcnNldCA/XG4gODMzOlx0XHRcdFx0XHRsb2FkX25scyhvcHQtXHUwMDNlaW9jaGFyc2V0KSA6IGxvYWRfbmxzX2RlZmF1bHQoKTtcbiA4MzQ6XHRcdFx0XHRpZiAoIXNiaS1cdTAwM2VzX25sc19pb2NoYXJzZXQpXG4gODM1Olx0XHRcdFx0XHRnb3RvIG91dF9mcmVlc2JpO1xuIDgzNjpcdFx0XHR9XG4gODM3Olx0XHR9XG4gODM4Olx0I2VuZGlmXG4gODM5Olx0XHRzLVx1MDAzZXNfb3AgPSBcdTAwMjZpc29mc19zb3BzO1xuIDg0MDpcdFx0cy1cdTAwM2VzX2V4cG9ydF9vcCA9IFx1MDAyNmlzb2ZzX2V4cG9ydF9vcHM7XG4gODQxOlx0XHRzYmktXHUwMDNlc19tYXBwaW5nID0gb3B0LVx1MDAzZW1hcDtcbiA4NDI6XHRcdHNiaS1cdTAwM2VzX3JvY2sgPSAob3B0LVx1MDAzZXJvY2sgPyAyIDogMCk7XG4gODQzOlx0XHRzYmktXHUwMDNlc19yb2NrX29mZnNldCA9IC0xOyAvKiBpbml0aWFsIG9mZnNldCwgd2lsbCBndWVzcyB1bnRpbCBTUCBpcyBmb3VuZCovXG4gODQ0Olx0XHRzYmktXHUwMDNlc19jcnVmdCA9IG9wdC1cdTAwM2VjcnVmdDtcbiA4NDU6XHRcdHNiaS1cdTAwM2VzX2hpZGUgPSBvcHQtXHUwMDNlaGlkZTtcbiA4NDY6XHRcdHNiaS1cdTAwM2VzX3Nob3dhc3NvYyA9IG9wdC1cdTAwM2VzaG93YXNzb2M7XG4gODQ3Olx0XHRzYmktXHUwMDNlc191aWQgPSBvcHQtXHUwMDNldWlkO1xuIDg0ODpcdFx0c2JpLVx1MDAzZXNfZ2lkID0gb3B0LVx1MDAzZWdpZDtcbiA4NDk6XHRcdHNiaS1cdTAwM2VzX3VpZF9zZXQgPSBvcHQtXHUwMDNldWlkX3NldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0NDkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgRmlsZXN5c3RlbSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb3JlIGlzc3VlOiBpdCYjMzk7cyBhIGJvdW5kcy1jaGVja2luZyBwcm9ibGVtIHdpdGhpbiBSb2NrIFJpZGdlIENFIHJlY29yZHMgZm9yIElTTzk2NjAuIFNwZWNpZmljYWxseSwgdGhlIG9yaWdpbmFsIGNoZWNrIGZvciBgcnMtJmd0O2NvbnRfZXh0ZW50YCBkaWRuJiMzOTt0IGZ1bGx5IGNvbnNpZGVyIHNlc3Npb24gb2Zmc2V0cyBvciB0aGUgYmxvY2sgZGV2aWNlJiMzOTtzIHNpemUsIGxlYWRpbmcgdG8gcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMuIENsYXNzaWMgZ290Y2hhLgoKVGhlIG5leHQgcXVlc3Rpb24gaXMgYWx3YXlzLCAmIzM0O0lzIHRoaXMgYWN0dWFsbHkgZXhwbG9pdGFibGU/JiMzNDsgQ2FuIHdlIHJlYWxpc3RpY2FsbHkgdHJpZ2dlciB0aGlzIGluIGEgbW9kZXJuIGVudmlyb25tZW50PyBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgdGhhdC4gQW5kIHllcywgZ29vZC4gVGhlIHRleHQgbWVudGlvbnMgdGhhdCBzeXprYWxsZXIsIGEgcHJvbWluZW50IGZ1enplciwgdGFyZ2V0cyBmaWxlc3lzdGVtcywgaW5jbHVkaW5nIElTTzk2NjAuIEl0IGV2ZW4gaGlnaGxpZ2h0cyB0aGUgcmVsZXZhbnQgc2V0dXA6IHRoZSBgbW91bnRgIHN5c2NhbGwgd2l0aCB0aGUgYC10IGlzbzk2NjBgIG9wdGlvbiBhbmQgbG9vcCBkZXZpY2VzIG9yIGRpc2sgaW1hZ2VzLiBTb3VuZHMgbGlrZSBhIHZlcnkgcmVhbCBhdHRhY2sgc3VyZmFjZSwgbWFraW5nIHRoaXMgZGVmaW5pdGVseSBgV29ydGhGdXp6aW5nPXRydWVgLiBNeSBleHBlcnRpc2Ugd2l0aCBmdXp6aW5nIHRlY2huaXF1ZXMgc2F5cywgeWVzLCB0aGlzIGlzIGEgdGFyZ2V0LgoKRmluYWxseSwgSSBuZWVkIHRvIGtub3cgdGhlIHByZXJlcXVpc2l0ZXMuIFdoYXQgY29uZmlncyBhcmUgbmVlZGVkIHRvIGV2ZW4gcmVhY2ggdGhpcyBjb2RlPyBJdCByZXF1aXJlcyBgSVNPOTY2MF9GU2AsIG9mIGNvdXJzZS4gSXMgUm9jayBSaWRnZSBpdHMgb3duIHNlcGFyYXRlIGNvbmZpZywgb3IgaXMgaXQgaW1wbGljaXRseSBwYXJ0IG9mIGBJU085NjYwX0ZTYD8gTGV0JiMzOTtzIGNoZWNrIGBmcy9pc29mcy9NYWtlZmlsZWAgdG8gYmUgc3VyZS4gSSBjYW4gcHJvYmFibHkgZ3Vlc3MgYnV0IGl0JiMzOTtzIGltcG9ydGFudCB0byBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTI6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9pc29mcy9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4IGlzb2ZzIGZpbGVzeXN0ZW0gcm91dGluZXMuXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG9iai0kKENPTkZJR19JU085NjYwX0ZTKSAmIzQzOz0gaXNvZnMub1xuICAgNzpcdFxuICAgODpcdGlzb2ZzLXkgXHRcdDo9IG5hbWVpLm8gaW5vZGUubyBkaXIubyB1dGlsLm8gcm9jay5vIGV4cG9ydC5vXG4gICA5Olx0aXNvZnMtJChDT05GSUdfSk9MSUVUKVx0JiM0Mzs9IGpvbGlldC5vXG4gIDEwOlx0aXNvZnMtJChDT05GSUdfWklTT0ZTKVx0JiM0Mzs9IGNvbXByZXNzLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxNTIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIElTTzk2NjAgUm9jayBSaWRnZSBFeHRlbnNpb25zKioKCk9rYXksIHNvIGlmIGBDT05GSUdfSVNPOTY2MF9GU2AgaXMgb24sIGByb2NrLm9gIGlzIGF1dG9tYXRpY2FsbHkgcGFydCBvZiBgaXNvZnMub2AuIE1ha2VzIHNlbnNlLCB0aGV5JiMzOTtyZSBpbnRyaW5zaWNhbGx5IGxpbmtlZC4gTm93LCBsZXQmIzM5O3MgZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9ucyBuZWVkIHRvIGJlIGV4cG9zZWQgYXMgYEZvY3VzU3ltYm9sc2AuIEkgbmVlZDoKCiogICBgaXNvZnNfZmlsbF9zdXBlcmAKKiAgIGByb2NrX2NvbnRpbnVlYAoqICAgYGdldF9yb2NrX3JpZGdlX2ZpbGVuYW1lYAoqICAgYHBhcnNlX3JvY2tfcmlkZ2VfaW5vZGVfaW50ZXJuYWxgIChvciBtYXliZSBqdXN0IGBwYXJzZV9yb2NrX3JpZGdlX2lub2RlYCBpZiB0aGF0JiMzOTtzIHRoZSBvbmUgd2UgbmVlZCkuCiogICBgcm9ja19yaWRnZV9zeW1saW5rX3JlYWRfZm9saW9gCgpUaGUgbmV4dCBjcml0aWNhbCBzdGVwIGlzIHRvIGRldGVybWluZSBpZiBgcm9ja19jb250aW51ZWAgaXMgaW5saW5lIG9yIHN0YXRpYy4gTGV0JiMzOTtzIHNlZS4uLiB5ZXAsIGl0JiMzOTtzIGRlZmluZWQgYXMgYHN0YXRpYyBpbnQgcm9ja19jb250aW51ZSguLi4pYCBpbiBgZnMvaXNvZnMvcm9jay5jYC4gV2l0aCBjb21waWxlciBvcHRpbWl6YXRpb25zLCBpdCBjb3VsZCBiZSBpbmxpbmVkLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBjaGVjayB0aGUgY2FsbGVycyBvZiBgcm9ja19jb250aW51ZWAgdG8gbWFrZSBhIGRlZmluaXRpdmUganVkZ2VtZW50LiBJdCBsb29rcyBsaWtlIGBwYXJzZV9yb2NrX3JpZGdlX2lub2RlYCBpcyBub24tc3RhdGljLCBzbyB0aGUgY2FsbGVyIG9mIHRoYXQgZnVuY3Rpb24gd2lsbCBiZSB0aGUgdGhpbmcgdG8gd2F0Y2ggZm9yLiBMZXQmIzM5O3Mgc2VlIHRoZSBjYWxsZXJzIG9mIGByb2NrX2NvbnRpbnVlYCBhbmQgdGhlbiBmaWd1cmUgb3V0IGhvdyBgcGFyc2Vfcm9ja19yaWRnZV9pbm9kZWAgYW5kIGBnZXRfcm9ja19yaWRnZV9maWxlbmFtZWAgYXJlIHVzZWQgaW4gcmVsYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhcnNlX3JvY2tfcmlkZ2VfaW5vZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9pc29mcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaXNvZnMvaW5vZGUuYz0xMjcyPXN0YXRpYyBpbnQgaXNvZnNfcmVhZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgcmVsb2NhdGVkKVxuLS1cbmZzL2lzb2ZzL2lub2RlLmMtMTQxNS1cdGlmICghaGlnaF9zaWVycmEpIHtcbmZzL2lzb2ZzL2lub2RlLmM6MTQxNjpcdFx0cGFyc2Vfcm9ja19yaWRnZV9pbm9kZShkZSwgaW5vZGUsIHJlbG9jYXRlZCk7XG5mcy9pc29mcy9pbm9kZS5jLTE0MTctXHRcdC8qIGlmIHdlIHdhbnQgdWlkL2dpZCBzZXQsIG92ZXJyaWRlIHRoZSByb2NrIHJpZGdlIHNldHRpbmcgKi9cbi0tXG5mcy9pc29mcy9pbm9kZS5jLTE0NTItXHRcdCAgIFNfSVNGSUZPKGlub2RlLVx1MDAzZWlfbW9kZSkgfHwgU19JU1NPQ0soaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuZnMvaXNvZnMvaW5vZGUuYzoxNDUzOlx0XHQvKiBYWFggLSBwYXJzZV9yb2NrX3JpZGdlX2lub2RlKCkgaGFkIGFscmVhZHkgc2V0IGlfcmRldi4gKi9cbmZzL2lzb2ZzL2lub2RlLmMtMTQ1NC1cdFx0aW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBpbm9kZS1cdTAwM2VpX21vZGUsIGlub2RlLVx1MDAzZWlfcmRldik7XG4tLVxuZnMvaXNvZnMvaXNvZnMuaD0xMTU9c3RydWN0IGlub2RlO1x0XHQvKiBUbyBtYWtlIGdjYyBoYXBweSAqL1xuZnMvaXNvZnMvaXNvZnMuaC0xMTYtXG5mcy9pc29mcy9pc29mcy5oOjExNzpleHRlcm4gaW50IHBhcnNlX3JvY2tfcmlkZ2VfaW5vZGUoc3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkICosIHN0cnVjdCBpbm9kZSAqLCBpbnQgcmVsb2NhdGVkKTtcbmZzL2lzb2ZzL2lzb2ZzLmgtMTE4LWV4dGVybiBpbnQgZ2V0X3JvY2tfcmlkZ2VfZmlsZW5hbWUoc3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkICosIGNoYXIgKiwgc3RydWN0IGlub2RlICopO1xuLS1cbmZzL2lzb2ZzL3JvY2suYz0zMjY9c3RhdGljIGludFxuZnMvaXNvZnMvcm9jay5jOjMyNzpwYXJzZV9yb2NrX3JpZGdlX2lub2RlX2ludGVybmFsKHN0cnVjdCBpc29fZGlyZWN0b3J5X3JlY29yZCAqZGUsXG5mcy9pc29mcy9yb2NrLmMtMzI4LVx0XHRcdFx0c3RydWN0IGlub2RlICppbm9kZSwgaW50IGZsYWdzKVxuLS1cbmZzL2lzb2ZzL3JvY2suYz02MjY9c3RhdGljIGNoYXIgKmdldF9zeW1saW5rX2NodW5rKGNoYXIgKnJwbnQsIHN0cnVjdCByb2NrX3JpZGdlICpyciwgY2hhciAqcGxpbWl0KVxuLS1cbmZzL2lzb2ZzL3JvY2suYy03MDEtXG5mcy9pc29mcy9yb2NrLmM6NzAyOmludCBwYXJzZV9yb2NrX3JpZGdlX2lub2RlKHN0cnVjdCBpc29fZGlyZWN0b3J5X3JlY29yZCAqZGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9pc29mcy9yb2NrLmMtNzAzLVx0XHRcdCAgIGludCByZWxvY2F0ZWQpXG4tLVxuZnMvaXNvZnMvcm9jay5jLTcwNS1cdGludCBmbGFncyA9IHJlbG9jYXRlZCA/IFJSX1JFTE9DX0RFIDogMDtcbmZzL2lzb2ZzL3JvY2suYzo3MDY6XHRpbnQgcmVzdWx0ID0gcGFyc2Vfcm9ja19yaWRnZV9pbm9kZV9pbnRlcm5hbChkZSwgaW5vZGUsIGZsYWdzKTtcbmZzL2lzb2ZzL3JvY2suYy03MDctXG4tLVxuZnMvaXNvZnMvcm9jay5jLTcxMy1cdCAgICBcdTAwMjZcdTAwMjYgKElTT0ZTX1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfcm9jayA9PSAyKSkge1xuZnMvaXNvZnMvcm9jay5jOjcxNDpcdFx0cmVzdWx0ID0gcGFyc2Vfcm9ja19yaWRnZV9pbm9kZV9pbnRlcm5hbChkZSwgaW5vZGUsXG5mcy9pc29mcy9yb2NrLmMtNzE1LVx0XHRcdFx0XHRcdFx0IGZsYWdzIHwgUlJfUkVHQVJEX1hBKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTI6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk0NTAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczoKCioqQ2hlY2tpbmcgQ2FsbGVyIEZ1bmN0aW9ucyBmb3IgYGdldF9yb2NrX3JpZGdlX2ZpbGVuYW1lYCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgY29kZSBhbmQgSSYjMzk7dmUgY29tZSBhY3Jvc3MgYGdldF9yb2NrX3JpZGdlX2ZpbGVuYW1lYC4gTXkgaW5pdGlhbCBjb25jZXJuIGlzbiYjMzk7dCBhYm91dCB0aGUgZnVuY3Rpb24gaXRzZWxmICpwZXIgc2UqLCBidXQgcmF0aGVyLCBob3cgYW5kIHdoZXJlIGl0JiMzOTtzIGJlaW5nICp1c2VkKi4gU28sIGluc3RlYWQgb2YganVzdCBhc3N1bWluZyBJIHVuZGVyc3RhbmQgaXRzIHJvbGUsIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7TGV0JiMzOTtzIHRyYWNrIGRvd24gYWxsIHRoZSBwbGFjZXMgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSAqY2FsbGVkKi4mIzM0OyBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIGl0cyB1c2UgaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIHNlZSB0aGUgY2FsbGluZyBmdW5jdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIGdyYXNwIHRoZSBiaWdnZXIgcGljdHVyZSwgdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiB0aGUgZnVuY3Rpb24sIGFuZCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBvciBpc3N1ZXMgcmVsYXRlZCB0byBpdHMgaW50ZWdyYXRpb24gd2l0aGluIHRoZSBvdmVyYWxsIHN5c3RlbS4gQSB0aG9yb3VnaCB1bmRlcnN0YW5kaW5nIG9mIGl0cyBjYWxsZXJzIGlzIHRoZSBmaXJzdCBzdGVwIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfcm9ja19yaWRnZV9maWxlbmFtZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2lzb2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9pc29mcy9kaXIuYz04NT1zdGF0aWMgaW50IGRvX2lzb2ZzX3JlYWRkaXIoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuZnMvaXNvZnMvZGlyLmMtMTkyLVx0XHRpZiAoc2JpLVx1MDAzZXNfcm9jaykge1xuZnMvaXNvZnMvZGlyLmM6MTkzOlx0XHRcdGxlbiA9IGdldF9yb2NrX3JpZGdlX2ZpbGVuYW1lKGRlLCB0bXBuYW1lLCBpbm9kZSk7XG5mcy9pc29mcy9kaXIuYy0xOTQtXHRcdFx0aWYgKGxlbiAhPSAwKSB7XHRcdC8qIG1heSBiZSAtMSAqL1xuLS1cbmZzL2lzb2ZzL2lzb2ZzLmg9MTE3PWV4dGVybiBpbnQgcGFyc2Vfcm9ja19yaWRnZV9pbm9kZShzdHJ1Y3QgaXNvX2RpcmVjdG9yeV9yZWNvcmQgKiwgc3RydWN0IGlub2RlICosIGludCByZWxvY2F0ZWQpO1xuZnMvaXNvZnMvaXNvZnMuaDoxMTg6ZXh0ZXJuIGludCBnZXRfcm9ja19yaWRnZV9maWxlbmFtZShzdHJ1Y3QgaXNvX2RpcmVjdG9yeV9yZWNvcmQgKiwgY2hhciAqLCBzdHJ1Y3QgaW5vZGUgKik7XG5mcy9pc29mcy9pc29mcy5oLTExOS1leHRlcm4gaW50IGlzb2ZzX25hbWVfdHJhbnNsYXRlKHN0cnVjdCBpc29fZGlyZWN0b3J5X3JlY29yZCAqLCBjaGFyICosIHN0cnVjdCBpbm9kZSAqKTtcbi0tXG5mcy9pc29mcy9uYW1laS5jPTQ5PWlzb2ZzX2ZpbmRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9pc29mcy9uYW1laS5jLTEwNC1cdFx0aWYgKHNiaS1cdTAwM2VzX3JvY2sgXHUwMDI2XHUwMDI2XG5mcy9pc29mcy9uYW1laS5jOjEwNTpcdFx0ICAgICgoaSA9IGdldF9yb2NrX3JpZGdlX2ZpbGVuYW1lKGRlLCB0bXBuYW1lLCBkaXIpKSkpIHtcbmZzL2lzb2ZzL25hbWVpLmMtMTA2LVx0XHRcdGRsZW4gPSBpO1x0LyogcG9zc2libHkgLTEgKi9cbi0tXG5mcy9pc29mcy9yb2NrLmM9MTU3PXN0YXRpYyBpbnQgcm9ja19jaGVja19vdmVyZmxvdyhzdHJ1Y3Qgcm9ja19zdGF0ZSAqcnMsIGludCBzaWcpXG4tLVxuZnMvaXNvZnMvcm9jay5jLTIxNS0gKi9cbmZzL2lzb2ZzL3JvY2suYzoyMTY6aW50IGdldF9yb2NrX3JpZGdlX2ZpbGVuYW1lKHN0cnVjdCBpc29fZGlyZWN0b3J5X3JlY29yZCAqZGUsXG5mcy9pc29mcy9yb2NrLmMtMjE3LVx0XHRcdCAgICBjaGFyICpyZXRuYW1lLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDE1MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgZnVuY3Rpb24gYHJvY2tfcmlkZ2Vfc3ltbGlua19yZWFkX2ZvbGlvYDoKCioqQW5hbHl6aW5nIGByb2NrX3JpZGdlX3N5bWxpbmtfcmVhZF9mb2xpb2AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGByb2NrX3JpZGdlX3N5bWxpbmtfcmVhZF9mb2xpb2AuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIGtub3cgdGhpcyBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggUm9jayBSaWRnZSBleHRlbnNpb25zLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBzeW1saW5rcyBhbmQsIGdpdmVuIHRoZSAmIzM0O3JlYWQmIzM0OyBhbmQgJiMzNDtmb2xpbyYjMzQ7IGJpdHMsIHByb2JhYmx5IGhvdyB0aGV5JiMzOTtyZSBoYW5kbGVkIHdoZW4gYmVpbmcgcmVhZCBpbnRvIGEgcGFnZSBjYWNoZSBvciBzaW1pbGFyIHN0cnVjdHVyZS4gVGhpcyBpcyBsaWtlbHkgcGFydCBvZiBhIGJyb2FkZXIgZmlsZSBzeXN0ZW0gaW1wbGVtZW50YXRpb24sIGxpa2VseSBkZWFsaW5nIHdpdGggYSBmaWxlIHN5c3RlbSB0aGF0IHN1cHBvcnRzIFJvY2sgUmlkZ2UgZXh0ZW5zaW9ucywgc3VjaCBhcyBpbiB0aGUgY29udGV4dCBvZiBhbiBJU08gaW1hZ2Ugb3Igc2ltaWxhciBmb3JtYXQgd2l0aCBleHRlbmRlZCBtZXRhZGF0YS4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbnMgYXJlOgoKKiAgIFdoYXQgYXJlIHRoZSBlZGdlIGNhc2VzPyBXaGF0JiMzOTtzIHRoZSBwb3RlbnRpYWwgZm9yIGluZmluaXRlIHJlY3Vyc2lvbiBpZiBhIHN5bWxpbmsgcG9pbnRzIHRvIGl0c2VsZiBkaXJlY3RseSBvciBpbmRpcmVjdGx5PyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlJiMzOTtzIHJvYnVzdCBjeWNsZSBkZXRlY3Rpb24gYnVpbHQgaW4sIG9yIHRoYXQgdGhlIGRlc2lnbiBpbmhlcmVudGx5IHByZXZlbnRzIHRoaXMuCiogICBIb3cgaXMgdGhlICphY3R1YWwqIGRhdGEgcmVhZCBpbnRvIHRoZSBmb2xpbz8gSXMgaXQgYSBkaXJlY3QgbWVtb3J5IGNvcHksIG9yIGlzIHRoZXJlIGJ1ZmZlcmluZyBpbnZvbHZlZD8gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBpZiBsYXJnZSBzeW1saW5rcyBhcmUgYmVpbmcgaGFuZGxlZC4KKiAgIFdoYXQmIzM5O3MgdGhlIGVycm9yIGhhbmRsaW5nIGxpa2U/IEhvdyBhcmUgaXNzdWVzIGxpa2UgYnJva2VuIHN5bWxpbmtzIChwb2ludGluZyB0byBub24tZXhpc3RlbnQgdGFyZ2V0cyksIGFjY2VzcyBkZW5pZWQgc2NlbmFyaW9zLCBvciBidWZmZXIgb3ZlcmZsb3dzIGhhbmRsZWQ/IFRoZSBkZXRhaWxzIGhlcmUgYXJlIGNyaXRpY2FsIGZvciByb2J1c3RuZXNzLgoqICAgSXMgdGhpcyBiZWluZyBvcHRpbWl6ZWQgZm9yIHJlYWQtYWhlYWQ/IFN5bWxpbmtzIGNhbiBjYXVzZSBqdW1wcyBpbiByZWFkIGFjY2Vzcywgc28gaXMgdGhlIHN5c3RlbSBiZWluZyBjbGV2ZXIgaW4gaG93IGl0IGFudGljaXBhdGVzIGFuZCBwcmVmZXRjaGVzPwoqICAgV2hhdCBpcyB0aGUgY29udGV4dCBvZiB0aGUgZm9saW8/IEkmIzM5O20gY3VyaW91cyB3aGF0IGRhdGEgaXQgY29udGFpbnMgYW5kIGlmIGl0JiMzOTtzIHNhZmUgdG8gYXNzdW1lIGEgY2VydGFpbiBzaXplIG9mIHRoZSBkZXN0aW5hdGlvbi4KCk92ZXJhbGwsIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBhIGZ1bmN0aW9uIHRoYXQmIzM5O3MgcG90ZW50aWFsbHkgcGVyZm9ybWFuY2UtY3JpdGljYWwsIGFuZCBjZXJ0YWlubHkgbmVlZHMgdG8gYmUgcm9idXN0IGFuZCBzZWN1cmUuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBjbG9zZWx5IGZvciBob3cgaXQgaGFuZGxlcyB0aGVzZSB0cmlja3kgc3ltbGluayBzY2VuYXJpb3MgYW5kIGFueSBwb3RlbnRpYWxseSByaXNreSBtZW1vcnkgb3BlcmF0aW9ucy4gSXTigJlzIGFsc28gaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgY29udGV4dCwgc28gSSBuZWVkIHRvIGNoZWNrIHRoZSBmdW5jdGlvbiBjYWxscyBhbmQgcmVsYXRlZCBjb2RlIGluIG9yZGVyIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBjb21wbGV0ZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JvY2tfcmlkZ2Vfc3ltbGlua19yZWFkX2ZvbGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaXNvZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2lzb2ZzL3JvY2suYz03MDI9aW50IHBhcnNlX3JvY2tfcmlkZ2VfaW5vZGUoc3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkICpkZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9pc29mcy9yb2NrLmMtNzIzLSAqL1xuZnMvaXNvZnMvcm9jay5jOjcyNDpzdGF0aWMgaW50IHJvY2tfcmlkZ2Vfc3ltbGlua19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuZnMvaXNvZnMvcm9jay5jLTcyNS17XG4tLVxuZnMvaXNvZnMvcm9jay5jPTgzNz1jb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGlzb2ZzX3N5bWxpbmtfYW9wcyA9IHtcbmZzL2lzb2ZzL3JvY2suYzo4Mzg6XHQucmVhZF9mb2xpbyA9IHJvY2tfcmlkZ2Vfc3ltbGlua19yZWFkX2ZvbGlvXG5mcy9pc29mcy9yb2NrLmMtODM5LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwODU1CgkJCQkJCQlvdXRwdXQ6IDEzNAoJCQkJCQkJdGhvdWdodHM6IDM1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIElTTzk2NjAgd2l0aCBSb2NrIFJpZGdlIEV4dGVuc2lvbjogQSBGb2N1c2VkIEFwcHJvYWNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IHByaW1hcnkgZm9jdXMgaXMgb24gZnV6emluZyB0aGUgSVNPOTY2MCBmaWxlIHN5c3RlbSwgc3BlY2lmaWNhbGx5IHdoZW4gUm9jayBSaWRnZSBleHRlbnNpb25zIGFyZSBpbiBwbGF5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O3ZlIGlkZW50aWZpZWQgdGhlIHJpZ2h0IGFyZWFzLiBNeSBsaXN0IG9mIGtleSBzeW1ib2xzIHNlZW1zIHNvbGlkOiBgaXNvZnNfZmlsbF9zdXBlcmAsIGByb2NrX2NvbnRpbnVlYCwgYGdldF9yb2NrX3JpZGdlX2ZpbGVuYW1lYCwgYHBhcnNlX3JvY2tfcmlkZ2VfaW5vZGVgLCBhbmQgYHJvY2tfcmlkZ2Vfc3ltbGlua19yZWFkX2ZvbGlvYC4gVGhvc2UgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyBJIHdhbnQgdG8gdGFyZ2V0LgoKTm93LCBhIHF1aWNrIGNvbmZpZ3VyYXRpb24gY2hlY2suIGBJU085NjYwX0ZTYCBpcyB0aGUgbWFpbiBvbmUgSSBuZWVkIHRvIGVuYWJsZTsgdGhhdCYjMzk7cyB0aGUgYmFzZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3MsIGJ1dCBJIGRvbiYjMzk7dCB0aGluayBJJiMzOTtsbCBuZWVkIGFueSBtb3JlLiBOZXh0LCBhIHF1aWNrIGNoZWNrIG9mIHRoZSBtb2RpZmllZCBmaWxlcyBjb25maXJtcyB0aGF0IHRoZSB3b3JrIGlzIGNvbnRhaW5lZCBwcmltYXJpbHkgaW4gYGZzL2lzb2ZzYC4gU3BlY2lmaWNhbGx5LCBgZnMvaXNvZnMvaW5vZGUuY2AgKHdoZXJlIEkgZmluZCBgaXNvZnNfZmlsbF9zdXBlcmApLCBgZnMvaXNvZnMvaXNvZnMuaGAgKGZvciB0aGUgYGlzb2ZzX3NiX2luZm9gIHN0cnVjdCksIGFuZCBgZnMvaXNvZnMvcm9jay5jYCAod2hlcmUgSSYjMzk7bGwgZmluZCBgcm9ja19jb250aW51ZWApLgoKUmV2aWV3aW5nIHRoZSBpbnN0cnVjdGlvbnMsIGl04oCZcyBhbGwgc2V0IHVwIHRoZSB3YXkgSSBleHBlY3QuIGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byBgdHJ1ZWAsIGBFbmFibGVDb25maWdzYCBpbmNsdWRlcyBteSBgSVNPOTY2MF9GU2AsIGFuZCB0aGUgYEZvY3VzU3ltYm9sc2AgYXJlIGV4YWN0bHkgd2hhdCBJIGdhdGhlcmVkLiBUaGUgYFJlYXNvbmluZ2AgcHJvdmlkZXMgYSBjb25jaXNlIGV4cGxhbmF0aW9uLgoKT2theSwgbGV0JiMzOTtzIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgZXZlcnl0aGluZyBpbiBteSBoZWFkLiBBbGwgdGhlIGNvZGUgY2hhbmdlcyBhcmUgd2l0aGluIHRoZSBgaXNvZnNgIGRyaXZlciwgYW5kIHRoYXQmIzM5O3MgcGVyZmVjdC4gVGhpcyBjYW4gYmUgZXhlcmNpc2VkIGVpdGhlciBieSBtb3VudGluZyBJU08gaW1hZ2VzIGRpcmVjdGx5IGZyb20gdXNlciBzcGFjZSBvciBieSB1c2luZyBzeXprYWxsZXIsIGxldmVyYWdpbmcgbG9vcCBkZXZpY2VzIG9yIGRpcmVjdCBkaXNrIGRldmljZXMuIEltcG9ydGFudGx5LCB0aGlzIHBhdGNoIGZvY3VzZXMgb24gYWRkaW5nIGJvdW5kYXJ5IGNoZWNrcyB3aXRoaW4gUm9jayBSaWRnZSBDb250aW51YXRpb24gQXJlYSByZWNvcmRzLCBlbnN1cmluZyB0aGF0IHdlIGRvbiYjMzk7dCByZWFkIG91dC1vZi1ib3VuZHMgZHVlIHRvIHNlc3Npb24gYm91bmRhcmllcyBvciB1bmRlcmx5aW5nIGJsb2NrIGRldmljZSBzaXplIGlzc3Vlcy4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgYW5kIHZhbHVhYmxlIGZ1enppbmcgdGFyZ2V0LgoKQWxyaWdodCwgSSYjMzk7bSByZWFkeS4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJU085NjYwX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXNvZnNfZmlsbF9zdXBlciYjMzQ7LAogICAgJiMzNDtyb2NrX2NvbnRpbnVlJiMzNDssCiAgICAmIzM0O2dldF9yb2NrX3JpZGdlX2ZpbGVuYW1lJiMzNDssCiAgICAmIzM0O3BhcnNlX3JvY2tfcmlkZ2VfaW5vZGUmIzM0OywKICAgICYjMzQ7cm9ja19yaWRnZV9zeW1saW5rX3JlYWRfZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzZXNzaW9uIGJvdW5kYXJ5IGFuZCBibG9jayBkZXZpY2UgY2FwYWNpdHkgdmFsaWRhdGlvbiBmb3IgUm9jayBSaWRnZSBDb250aW51YXRpb24gQXJlYSAoQ0UpIHJlY29yZHMgaW4gaXNvZnMuIFRoZSBtb2RpZmllZCBjb2RlIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSBieSBtb3VudGluZyBhbmQgcmVhZGluZyBjcmFmdGVkIElTTzk2NjAgZmlsZXN5c3RlbSBpbWFnZXMgdmlhIGxvb3AvZGlzayBkZXZpY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJU085NjYwX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXNvZnNfZmlsbF9zdXBlciYjMzQ7LAogICAgJiMzNDtyb2NrX2NvbnRpbnVlJiMzNDssCiAgICAmIzM0O2dldF9yb2NrX3JpZGdlX2ZpbGVuYW1lJiMzNDssCiAgICAmIzM0O3BhcnNlX3JvY2tfcmlkZ2VfaW5vZGUmIzM0OywKICAgICYjMzQ7cm9ja19yaWRnZV9zeW1saW5rX3JlYWRfZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzZXNzaW9uIGJvdW5kYXJ5IGFuZCBibG9jayBkZXZpY2UgY2FwYWNpdHkgdmFsaWRhdGlvbiBmb3IgUm9jayBSaWRnZSBDb250aW51YXRpb24gQXJlYSAoQ0UpIHJlY29yZHMgaW4gaXNvZnMuIFRoZSBtb2RpZmllZCBjb2RlIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSBieSBtb3VudGluZyBhbmQgcmVhZGluZyBjcmFmdGVkIElTTzk2NjAgZmlsZXN5c3RlbSBpbWFnZXMgdmlhIGxvb3AvZGlzayBkZXZpY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMjoxNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjE2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZnMvaXNvZnMgdG8gcHJvcGVybHkgdmFsaWRhdGUgUm9jayBSaWRnZSBjb250aW51YXRpb24gZXh0ZW50cyAoYENFYCBlbnRyaWVzKSBhZ2FpbnN0IHNlc3Npb24gYW5kIGJsb2NrIGRldmljZSBib3VuZGFyaWVzIGJ5IGludHJvZHVjaW5nIGBzYmktXHUwMDNlc19zZXNzaW9uX3N0YXJ0YCBhbmQgY29tcGFyaW5nIGBjb250X2V4dGVudGAgYWdhaW5zdCB0aGUgdmFsaWQgcmFuZ2UuIFxuXG4tIGBzdHJ1Y3QgaXNvZnNfc2JfaW5mb2AgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAsIGFuZCBgc19zZXNzaW9uX3N0YXJ0YCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIGR1cmluZyBzdXBlcmJsb2NrIHNldHVwIGJlZm9yZSBhbnkgUm9jayBSaWRnZSBwYXJzaW5nIG9jY3Vycy5cbi0gVGhlIHBhdGNoIHRpZ2h0ZW5zIGJvdW5kcyBjaGVja3MgZm9yIGJsb2NrIHJlYWRzLCBtaXRpZ2F0aW5nIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGJsb2NrIHJlYWRzIG9uIGNvcnJ1cHRlZC9tYWxpY2lvdXMgSVNPIGltYWdlcyAod2hpY2ggZmFsbCB1bmRlciBLQVNBTi9nZW5lcmljIGJvdW5kcyBjaGVja2luZykuXG4tIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzdGFjay9oZWFwIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCB0byB1c2VyIHNwYWNlLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgcHJlc2VudCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGYwMjE1YmZlZjNiNzc2MWU3N2Q4YjU5MmU3ZDdkMGIzNGQ1ZTllZWYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDEyOjE1OjI4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvaXNvZnMvaW5vZGUuYyBiL2ZzL2lzb2ZzL2lub2RlLmMKaW5kZXggMzM3ODM2YTBhMTcwNC4uZWZjYjhmYjJiMTBjNCAxMDA2NDQKLS0tIGEvZnMvaXNvZnMvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9pc29mcy9pbm9kZS5jCkBAIC04MjEsNiAmIzQzOzgyMSw4IEBAIHN0YXRpYyBpbnQgaXNvZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHN0cnVjdCBmc19jb250ZXh0ICpmYykKIAlpZiAoIXNiX3NldF9ibG9ja3NpemUocywgb3JpZ196b25lc2l6ZSkpCiAJCWdvdG8gb3V0X2ZyZWVzYmk7CiAKJiM0MzsJc2JpLSZndDtzX3Nlc3Npb25fc3RhcnQgPSAodTY0KXZvbF9kZXNjX3N0YXJ0ICZsdDsmbHQ7CiYjNDM7CQkJCShJU09GU19CTE9DS19CSVRTIC0gcy0mZ3Q7c19ibG9ja3NpemVfYml0cyk7CiAJc2JpLSZndDtzX25sc19pb2NoYXJzZXQgPSBOVUxMOwogCiAjaWZkZWYgQ09ORklHX0pPTElFVApkaWZmIC0tZ2l0IGEvZnMvaXNvZnMvaXNvZnMuaCBiL2ZzL2lzb2ZzL2lzb2ZzLmgKaW5kZXggZGFjYjljZGFlNGZkMS4uMDczMmUxYWEzYjdmYSAxMDA2NDQKLS0tIGEvZnMvaXNvZnMvaXNvZnMuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9pc29mcy9pc29mcy5oCkBAIC0zNSw2ICYjNDM7MzUsOCBAQCBzdHJ1Y3QgaXNvZnNfc2JfaW5mbyB7CiAJdW5zaWduZWQgbG9uZyBzX2ZpcnN0ZGF0YXpvbmU7CiAJdW5zaWduZWQgbG9uZyBzX2xvZ196b25lX3NpemU7CiAJdW5zaWduZWQgbG9uZyBzX21heF9zaXplOwomIzQzOwkvKiBTZXNzaW9uIHN0YXJ0IGluIGZpbGVzeXN0ZW0gYmxvY2sgdW5pdHMuICovCiYjNDM7CXU2NCBzX3Nlc3Npb25fc3RhcnQ7CiAJCiAJaW50ICAgICAgICAgICBzX3JvY2tfb2Zmc2V0OyAvKiBvZmZzZXQgb2YgU1VTUCBmaWVsZHMgd2l0aGluIFNVIGFyZWEgKi8KIAlzMzIgICAgICAgICAgIHNfc2JzZWN0b3I7CmRpZmYgLS1naXQgYS9mcy9pc29mcy9yb2NrLmMgYi9mcy9pc29mcy9yb2NrLmMKaW5kZXggMjYyOGYzMWJkM2E1ZC4uYTk2NDVhOWU4NjI4OSAxMDA2NDQKLS0tIGEvZnMvaXNvZnMvcm9jay5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2lzb2ZzL3JvY2suYwpAQCAtOSw2ICYjNDM7OSw3IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGFnZW1hcC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9ibGtkZXYuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtpc29mcy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7cm9jay5oJiMzNDsKQEAgLTg0LDYgJiM0Mzs4NSwxMSBAQCBzdGF0aWMgdm9pZCBpbml0X3JvY2tfc3RhdGUoc3RydWN0IHJvY2tfc3RhdGUgKnJzLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogICovCiBzdGF0aWMgaW50IHJvY2tfY29udGludWUoc3RydWN0IHJvY2tfc3RhdGUgKnJzKQogewomIzQzOwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gcnMtJmd0O2lub2RlLSZndDtpX3NiOwomIzQzOwlzdHJ1Y3QgaXNvZnNfc2JfaW5mbyAqc2JpID0gSVNPRlNfU0Ioc2IpOwomIzQzOwl1NjQgZXh0ZW50ID0gKHVuc2lnbmVkIGludClycy0mZ3Q7Y29udF9leHRlbnQ7CiYjNDM7CXU2NCBzZXNzaW9uX2VuZCA9IHNiaS0mZ3Q7c19zZXNzaW9uX3N0YXJ0ICYjNDM7CiYjNDM7CQkoKHU2NClzYmktJmd0O3NfbnpvbmVzICZsdDsmbHQ7IChJU09GU19CTE9DS19CSVRTIC0gc2ItJmd0O3NfYmxvY2tzaXplX2JpdHMpKTsKIAlpbnQgcmV0ID0gMTsKIAlpbnQgYmxvY2tzaXplID0gMSAmbHQ7Jmx0OyBycy0mZ3Q7aW5vZGUtJmd0O2lfYmxrYml0czsKIAljb25zdCBpbnQgbWluX2RlX3NpemUgPSBvZmZzZXRvZihzdHJ1Y3Qgcm9ja19yaWRnZSwgdSk7CkBAIC0xMDEsMTEgJiM0MzsxMDcsMTQgQEAgc3RhdGljIGludCByb2NrX2NvbnRpbnVlKHN0cnVjdCByb2NrX3N0YXRlICpycykKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKCh1bnNpZ25lZClycy0mZ3Q7Y29udF9leHRlbnQgJmd0Oz0gSVNPRlNfU0IocnMtJmd0O2lub2RlLSZndDtpX3NiKS0mZ3Q7c19uem9uZXMpIHsKJiM0MzsJaWYgKHJzLSZndDtjb250X2V4dGVudCAmYW1wOyZhbXA7CiYjNDM7CSAgICAoZXh0ZW50ICZsdDsgc2JpLSZndDtzX3Nlc3Npb25fc3RhcnQgfHwKJiM0MzsJICAgICBleHRlbnQgJmd0Oz0gc2Vzc2lvbl9lbmQgfHwKJiM0MzsJICAgICBleHRlbnQgJmd0Oz0gc2JfYmRldl9ucl9ibG9ja3Moc2IpKSkgewogCQlwcmludGsoS0VSTl9OT1RJQ0UgJiMzNDtyb2NrOiBjb3JydXB0ZWQgZGlyZWN0b3J5IGVudHJ5LiAmIzM0OwogCQkJJiMzNDtleHRlbnQ9JXUgb3V0IG9mIHZvbHVtZSAobnpvbmVzPSVsdSlcbiYjMzQ7LAogCQkJKHVuc2lnbmVkKXJzLSZndDtjb250X2V4dGVudCwKLQkJCUlTT0ZTX1NCKHJzLSZndDtpbm9kZS0mZ3Q7aV9zYiktJmd0O3NfbnpvbmVzKTsKJiM0MzsJCQlzYmktJmd0O3NfbnpvbmVzKTsKIAkJcmV0ID0gLUVJTzsKIAkJZ290byBvdXQ7CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTI6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg3NwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlzayBpbiB0aGUgSVNPRlMgRmlsZXN5c3RlbSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGEgcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgc3BlY2lmaWNhbGx5IHdpdGggdGhlIGBOZWVkc0tNU0FOPXRydWVgIGZsYWcsIG9yIGlmIHN0YW5kYXJkIEtBU0FOIGNoZWNrcyBhcmUgc3VmZmljaWVudCAoYE5lZWRzS01TQU49ZmFsc2VgKS4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGNhbGN1bGF0aW9ucyByZWxhdGVkIHRvIHNlc3Npb24gc3RhcnQgYW5kIGVuZCBwb2ludHMgd2l0aGluIHRoZSBJU09GUyBmaWxlc3lzdGVtLgoKTG9va2luZyBhdCB0aGUgY29kZSwgaW4gYGZzL2lzb2ZzL2lub2RlLmNgLCB0aGUgYGlzb2ZzX2ZpbGxfc3VwZXJgIGZ1bmN0aW9uIHBvcHVsYXRlcyBgc2JpLSZndDtzX3Nlc3Npb25fc3RhcnRgLiBUaGlzIGBzX3Nlc3Npb25fc3RhcnRgIGlzIHRoZW4gdXNlZCBpbiBgZnMvaXNvZnMvcm9jay5jYCB3aXRoaW4gdGhlIGByb2NrX2NvbnRpbnVlYCBmdW5jdGlvbi4gSXQgc2VlbXMgdG8gYmUgcGFydCBvZiBhIGxhcmdlciBjYWxjdWxhdGlvbiBkZXRlcm1pbmluZyB0aGUgZXh0ZW50IG9mIHNvbWUgZGF0YS4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyB1c2VkIHRvIGRlcml2ZSBgc2Vzc2lvbl9lbmRgLCB3aGljaCBpcyB0aGVuIGNvbXBhcmVkIGFnYWluc3QgYGV4dGVudGAuIFRoZSBjcml0aWNhbCBwaWVjZSBpcyB3aGV0aGVyIGBzYmktJmd0O3Nfc2Vzc2lvbl9zdGFydGAgaXMgcmVsaWFibHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGl0cyB1c2UgaW4gdGhpcyBjYWxjdWxhdGlvbiBhbmQgc3Vic2VxdWVudCBjb21wYXJpc29uLiBUaGUga2V5IGhlcmUgaXMgYWxzbyBgc2JpLSZndDtzX256b25lc2AsIHdoaWNoIGlzIGFwcGFyZW50bHkgYWxzbyBwYXJ0IG9mIGRldGVybWluaW5nIGBzZXNzaW9uX2VuZGAuCgpJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaG93IGBpc29mc19zYl9pbmZvYCBpcyBhbGxvY2F0ZWQgYW5kIGhvdyBpdHMgbWVtYmVycyBhcmUgaGFuZGxlZC4gV2UmIzM5O3JlIGxvb2tpbmcgZm9yIHdoZXRoZXIgdGhlcmUmIzM5O3MgYSBwb3NzaWJpbGl0eSBvZiB0aGVzZSB2YWx1ZXMgcmVtYWluaW5nIGdhcmJhZ2UuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHVzdWFsIG1ldGhvZHMsIHJldmlld2luZyB0aGUgYWxsb2NhdGlvbiBzaXRlIG9mIGBpc29mc19zYl9pbmZvYCBhbmQgaG93IGBzX3Nlc3Npb25fc3RhcnRgIGFuZCBgc19uem9uZXNgIGFyZSBwb3B1bGF0ZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcmVxdWlyZXMgYSBmdWxsIEtNU0FOIGNoZWNrLCBvciBpZiBzdGFuZGFyZCBLQVNBTiBjb3ZlcmFnZSBpcyBlbm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lzb2ZzX2ZpbGxfc3VwZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9pc29mcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaXNvZnMvaW5vZGUuYz01NTA9c3RhdGljIGJvb2wgcm9vdGRpcl9lbXB0eShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGJsb2NrKVxuLS1cbmZzL2lzb2ZzL2lub2RlLmMtNTczLSAqL1xuZnMvaXNvZnMvaW5vZGUuYzo1NzQ6c3RhdGljIGludCBpc29mc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuZnMvaXNvZnMvaW5vZGUuYy01NzUte1xuLS1cbmZzL2lzb2ZzL2lub2RlLmMtOTM2LVx0XHRwcmludGsoS0VSTl9XQVJOSU5HXG5mcy9pc29mcy9pbm9kZS5jOjkzNzpcdFx0XHRcJiMzNDtpc29mc19maWxsX3N1cGVyOiByb290IGlub2RlIGlzIG5vdCBhIGRpcmVjdG9yeS4gXCYjMzQ7XG5mcy9pc29mcy9pbm9kZS5jLTkzOC1cdFx0XHRcJiMzNDtDb3JydXB0ZWQgbWVkaWE/XFxuXCYjMzQ7KTtcbi0tXG5mcy9pc29mcy9pbm9kZS5jPTE1Mzk9c3RhdGljIGludCBpc29mc19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5mcy9pc29mcy9pbm9kZS5jLTE1NDAte1xuZnMvaXNvZnMvaW5vZGUuYzoxNTQxOlx0cmV0dXJuIGdldF90cmVlX2JkZXYoZmMsIGlzb2ZzX2ZpbGxfc3VwZXIpO1xuZnMvaXNvZnMvaW5vZGUuYy0xNTQyLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTI6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk1OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIHRhaWxvcmVkIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhlIGNvZGUgYXMgYW4gZXhwZXJ0OgoKKipEaXZpbmcgaW50byB0aGUgSVNPRlMgU3VwZXJibG9jayBJbml0aWFsaXphdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgY3JhY2sgb3BlbiBgZnMvaXNvZnMvaW5vZGUuY2AgYW5kIHplcm8gaW4gb24gdGhhdCBgaXNvZnNfZmlsbF9zdXBlcmAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBJU09GUyBmaWxlc3lzdGVtIGdldHMgaW5pdGlhbGl6ZWQgb24gbW91bnQuIFJpZ2h0LCBzbyB3ZSYjMzk7cmUgc3RhcnRpbmcgd2l0aCB0aGUgc3VwZXJibG9jayBzdHJ1Y3R1cmUsIHRoZSBoZWFydCBvZiB0aGUgZmlsZXN5c3RlbSYjMzk7cyBtZXRhZGF0YS4gSSYjMzk7bSBpbW1lZGlhdGVseSBsb29raW5nIGZvciBob3cgdGhlIGRldmljZSBpbmZvcm1hdGlvbiBpcyBwdWxsZWQgaW4gLSBnb3R0YSBmaW5kIHdoZXJlIHRoZSBibG9jayBkZXZpY2UgZ2V0cyBjb25uZWN0ZWQuIElzIGl0IGJlaW5nIHBhc3NlZCBkaXJlY3RseSBhcyBhbiBhcmd1bWVudCwgb3IgaXMgaXQgcmV0cmlldmVkIHNvbWVob3cgZnJvbSB0aGUgYHN0cnVjdCBzdXBlcl9ibG9ja2AgaXRzZWxmPwoKT2theSwgbG9va3MgbGlrZSB3ZSYjMzk7cmUgY2FsbGluZyBgc2dldF9mY2AgYW5kIHRoZW4gYGlzb2ZzX3JlYWRfc3VwZXJgIHdpdGggdGhlIGBzdXBlcl9ibG9ja2AgYXMgYSBwYXJhbWV0ZXIuIGBpc29mc19yZWFkX3N1cGVyYCBpcyBrZXk7IHRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayYjMzk7cyBkb25lIHRvIGFjdHVhbGx5IHJlYWQgZnJvbSB0aGUgZGV2aWNlIGFuZCBidWlsZCB0aGUgaW5pdGlhbCBmaWxlc3lzdGVtIHJlcHJlc2VudGF0aW9uIGluIG1lbW9yeS4gSSBzZWUgaXQmIzM5O3MgZ29pbmcgdG8gYmUgbG9va2luZyBmb3IgdGhlIElTTyA5NjYwIFZvbHVtZSBEZXNjcmlwdG9yIFNldC4gSSYjMzk7bSBrZWVuIHRvIHNlZSBpZiB0aGV5JiMzOTtyZSBoYW5kbGluZyBkaWZmZXJlbnQgdm9sdW1lIGRlc2NyaXB0b3IgdHlwZXMgYW5kIGlmIHRoZSBlcnJvciBjaGVja2luZyBhcm91bmQgdGhvc2UgZGVzY3JpcHRvcnMgaXMgcm9idXN0LiBBbnkgY2xldmVyIHRyaWNrcyBpbiBpZGVudGlmeWluZyB0aGUgcHJpbWFyeSB2b2x1bWUgZGVzY3JpcHRvcj8gQ2hlY2tzdW1zPyBEb3VibGUtY2hlY2tpbmcgdGhlIGlkZW50aWZpZXIgc3RyaW5nPwoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGhvdyBhcmUgdGhlIHJvb3QgZGlyZWN0b3J5JiMzOTtzIGlub2RlIGFuZCB0aGUgc3VwZXJibG9jayYjMzk7cyBgc19yb290YCBwb2ludGVyIGJlaW5nIGVzdGFibGlzaGVkPyBUaGF0JiMzOTtzIHdoYXQgSSYjMzk7bSByZWFsbHkgY29uY2VybmVkIGFib3V0LiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGUgcm9vdCBpbm9kZSBpcyBidWlsdC4gQXJlIHRoZXkgY3JlYXRpbmcgYSBuZXcgaW5vZGUgZGlyZWN0bHksIG9yIGlzIGl0IGEgc3BlY2lhbCBjYXNlPyBIb3cgZG8gdGhleSBoYW5kbGUgdGhlIHZhcmlvdXMgdm9sdW1lIGRlc2NyaXB0b3JzIGFuZCB0aGVpciBhc3NvY2lhdGVkIGRhdGE/IFVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgc3RydWN0dXJlcyBpcyBjcnVjaWFsLCB3aGF0IGFyZSB0aGUgcmVsZXZhbnQgZmllbGRzIGluIHRoZSB2b2x1bWUgZGVzY3JpcHRvcj8gQXJlIHRoZXkgdXNpbmcgYSBidWZmZXIgdG8gc3RvcmUgdGhlIHJvb3QgZGlyZWN0b3J5JiMzOTtzIGZpbGUgc3lzdGVtIGVudHJ5PyBMZXQmIzM5O3MgY2hlY2sgaG93IHRoZSBpbm9kZSBudW1iZXJzIGFyZSBhc3NpZ25lZC4gV2UgY2FuJiMzOTt0IGhhdmUgY29sbGlzaW9ucy4gCgpSaWdodCwgSSYjMzk7bSB3YXRjaGluZyBvdXQgZm9yIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93cyB3aGVuIGNhbGN1bGF0aW5nIGJsb2NrIG9mZnNldHMsIGFuZCBvZiBjb3Vyc2UsIHByb3BlciBlcnJvciBoYW5kbGluZyBhbmQgcmVzb3VyY2UgY2xlYW51cC4gSXMgbWVtb3J5IGJlaW5nIGFsbG9jYXRlZCBhbmQgZGVhbGxvY2F0ZWQgY29ycmVjdGx5LCBlc3BlY2lhbGx5IGZvciB0aGUgZGlyZWN0b3J5IGVudHJpZXMgYW5kIHRoZSBidWZmZXI/IEFueSBtaXNzZWQgYGtmcmVlYCBjYWxscyB3b3VsZCBiZSBhIHNlcmlvdXMgcHJvYmxlbSBpbiB0aGUgbG9uZyBydW4uIEkgYWxzbyB3YW50IHRvIHZlcmlmeSB0aGV5IGFyZSBoYW5kbGluZyBhbnkgZW5kaWFubmVzcyBpc3N1ZXMgY29ycmVjdGx5LCBlc3BlY2lhbGx5IHdoZW4gcGFyc2luZyBtdWx0aS1ieXRlIGZpZWxkcyBmcm9tIHRoZSBkaXNrIGltYWdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2lzb2ZzL2lub2RlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NzQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU3NDpcdHN0YXRpYyBpbnQgaXNvZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiA1NzU6XHR7XG4gNTc2Olx0XHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTCwgKnByaV9iaCA9IE5VTEw7XG4gNTc3Olx0XHRzdHJ1Y3QgaHNfcHJpbWFyeV9kZXNjcmlwdG9yICpoX3ByaSA9IE5VTEw7XG4gNTc4Olx0XHRzdHJ1Y3QgaXNvX3ByaW1hcnlfZGVzY3JpcHRvciAqcHJpID0gTlVMTDtcbiA1Nzk6XHRcdHN0cnVjdCBpc29fc3VwcGxlbWVudGFyeV9kZXNjcmlwdG9yICpzZWMgPSBOVUxMO1xuIDU4MDpcdFx0c3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkICpyb290cDtcbiA1ODE6XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4gNTgyOlx0XHRzdHJ1Y3QgaXNvZnNfb3B0aW9ucyAqb3B0ID0gZmMtXHUwMDNlZnNfcHJpdmF0ZTtcbiA1ODM6XHRcdHN0cnVjdCBpc29mc19zYl9pbmZvICpzYmk7XG4gNTg0Olx0XHR1bnNpZ25lZCBsb25nIGZpcnN0X2RhdGFfem9uZTtcbiA1ODU6XHRcdGludCBqb2xpZXRfbGV2ZWwgPSAwO1xuIDU4NjpcdFx0aW50IGlzb19ibGtudW0sIGJsb2NrO1xuIDU4NzpcdFx0aW50IG9yaWdfem9uZXNpemU7XG4gNTg4Olx0XHRpbnQgdGFibGUsIGVycm9yID0gLUVJTlZBTDtcbiA1ODk6XHRcdHVuc2lnbmVkIGludCB2b2xfZGVzY19zdGFydDtcbiA1OTA6XHRcdGludCBzaWxlbnQgPSBmYy1cdTAwM2VzYl9mbGFncyBcdTAwMjYgU0JfU0lMRU5UO1xuIDU5MTpcdFxuIDU5MjpcdFx0c2JpID0ga3phbGxvY19vYmooKnNiaSk7XG4gNTkzOlx0XHRpZiAoIXNiaSlcbiA1OTQ6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gNTk1Olx0XHRzLVx1MDAzZXNfZnNfaW5mbyA9IHNiaTtcbiA1OTY6XHRcbiA1OTc6XHRcdC8qXG4gNTk4Olx0XHQgKiBGaXJzdCBvZiBhbGwsIGdldCB0aGUgaGFyZHdhcmUgYmxvY2tzaXplIGZvciB0aGlzIGRldmljZS5cbiA1OTk6XHRcdCAqIElmIHdlIGRvbiYjMzk7dCBrbm93IHdoYXQgaXQgaXMsIG9yIHRoZSBoYXJkd2FyZSBibG9ja3NpemUgaXNcbiA2MDA6XHRcdCAqIGxhcmdlciB0aGFuIHRoZSBibG9ja3NpemUgdGhlIHVzZXIgc3BlY2lmaWVkLCB0aGVuIHVzZVxuIDYwMTpcdFx0ICogdGhhdCB2YWx1ZS5cbiA2MDI6XHRcdCAqL1xuIDYwMzpcdFx0LypcbiA2MDQ6XHRcdCAqIFdoYXQgaWYgYnVnZ2VyIHRlbGxzIHVzIHRvIGdvIGJleW9uZCBwYWdlIHNpemU/XG4gNjA1Olx0XHQgKi9cbiA2MDY6XHRcdGlmIChiZGV2X2xvZ2ljYWxfYmxvY2tfc2l6ZShzLVx1MDAzZXNfYmRldikgXHUwMDNlIDIwNDgpIHtcbiA2MDc6XHRcdFx0cHJpbnRrKEtFUk5fV0FSTklOR1xuIDYwODpcdFx0XHQgICAgICAgXCYjMzQ7SVNPRlM6IHVuc3VwcG9ydGVkL2ludmFsaWQgaGFyZHdhcmUgc2VjdG9yIHNpemUgJWRcXG5cJiMzNDssXG4gNjA5Olx0XHRcdFx0YmRldl9sb2dpY2FsX2Jsb2NrX3NpemUocy1cdTAwM2VzX2JkZXYpKTtcbiA2MTA6XHRcdFx0Z290byBvdXRfZnJlZXNiaTtcbiA2MTE6XHRcdH1cbiA2MTI6XHRcdG9wdC1cdTAwM2VibG9ja3NpemUgPSBzYl9taW5fYmxvY2tzaXplKHMsIG9wdC1cdTAwM2VibG9ja3NpemUpO1xuIDYxMzpcdFx0aWYgKCFvcHQtXHUwMDNlYmxvY2tzaXplKSB7XG4gNjE0Olx0XHRcdHByaW50ayhLRVJOX0VSUlxuIDYxNTpcdFx0XHQgICAgICAgXCYjMzQ7SVNPRlM6IHVuYWJsZSB0byBzZXQgYmxvY2tzaXplXFxuXCYjMzQ7KTtcbiA2MTY6XHRcdFx0Z290byBvdXRfZnJlZXNiaTtcbiA2MTc6XHRcdH1cbiA2MTg6XHRcbiA2MTk6XHRcdHNiaS1cdTAwM2VzX2hpZ2hfc2llcnJhID0gMDsgLyogZGVmYXVsdCBpcyBpc285NjYwICovXG4gNjIwOlx0XHRzYmktXHUwMDNlc19zZXNzaW9uID0gb3B0LVx1MDAzZXNlc3Npb247XG4gNjIxOlx0XHRzYmktXHUwMDNlc19zYnNlY3RvciA9IG9wdC1cdTAwM2VzYnNlY3RvcjtcbiA2MjI6XHRcbiA2MjM6XHRcdHZvbF9kZXNjX3N0YXJ0ID0gKG9wdC1cdTAwM2VzYnNlY3RvciAhPSAtMSkgP1xuIDYyNDpcdFx0XHRvcHQtXHUwMDNlc2JzZWN0b3IgOiBpc29mc19nZXRfbGFzdF9zZXNzaW9uKHMsIG9wdC1cdTAwM2VzZXNzaW9uKTtcbiA2MjU6XHRcbiA2MjY6XHRcdGZvciAoaXNvX2Jsa251bSA9IHZvbF9kZXNjX3N0YXJ0JiM0MzsxNjtcbiA2Mjc6XHRcdFx0aXNvX2Jsa251bSBcdTAwM2Mgdm9sX2Rlc2Nfc3RhcnQmIzQzOzEwMDsgaXNvX2Jsa251bSYjNDM7JiM0MzspIHtcbiA2Mjg6XHRcdFx0c3RydWN0IGhzX3ZvbHVtZV9kZXNjcmlwdG9yICpoZHA7XG4gNjI5Olx0XHRcdHN0cnVjdCBpc29fdm9sdW1lX2Rlc2NyaXB0b3IgICp2ZHA7XG4gNjMwOlx0XG4gNjMxOlx0XHRcdGJsb2NrID0gaXNvX2Jsa251bSBcdTAwM2NcdTAwM2MgKElTT0ZTX0JMT0NLX0JJVFMgLSBzLVx1MDAzZXNfYmxvY2tzaXplX2JpdHMpO1xuIDYzMjpcdFx0XHRpZiAoIShiaCA9IHNiX2JyZWFkKHMsIGJsb2NrKSkpXG4gNjMzOlx0XHRcdFx0Z290byBvdXRfbm9fcmVhZDtcbiA2MzQ6XHRcbiA2MzU6XHRcdFx0dmRwID0gKHN0cnVjdCBpc29fdm9sdW1lX2Rlc2NyaXB0b3IgKiliaC1cdTAwM2ViX2RhdGE7XG4gNjM2Olx0XHRcdGhkcCA9IChzdHJ1Y3QgaHNfdm9sdW1lX2Rlc2NyaXB0b3IgKiliaC1cdTAwM2ViX2RhdGE7XG4gNjM3Olx0XG4gNjM4Olx0XHRcdC8qXG4gNjM5Olx0XHRcdCAqIER1ZSB0byB0aGUgb3ZlcmxhcHBpbmcgcGh5c2ljYWwgbG9jYXRpb24gb2YgdGhlIGRlc2NyaXB0b3JzLFxuIDY0MDpcdFx0XHQgKiBJU08gQ0RzIGNhbiBtYXRjaCBoZHAtXHUwMDNlaWQ9PUhTX1NUQU5EQVJEX0lEIGFzIHdlbGwuIFRvIGVuc3VyZVxuIDY0MTpcdFx0XHQgKiBwcm9wZXIgaWRlbnRpZmljYXRpb24gaW4gdGhpcyBjYXNlLCB3ZSBmaXJzdCBjaGVjayBmb3IgSVNPLlxuIDY0MjpcdFx0XHQgKi9cbiA2NDM6XHRcdFx0aWYgKHN0cm5jbXAgKHZkcC1cdTAwM2VpZCwgSVNPX1NUQU5EQVJEX0lELCBzaXplb2YgdmRwLVx1MDAzZWlkKSA9PSAwKSB7XG4gNjQ0Olx0XHRcdFx0aWYgKGlzb251bV83MTEodmRwLVx1MDAzZXR5cGUpID09IElTT19WRF9FTkQpXG4gNjQ1Olx0XHRcdFx0XHRicmVhaztcbiA2NDY6XHRcdFx0XHRpZiAoaXNvbnVtXzcxMSh2ZHAtXHUwMDNldHlwZSkgPT0gSVNPX1ZEX1BSSU1BUlkpIHtcbiA2NDc6XHRcdFx0XHRcdGlmICghcHJpKSB7XG4gNjQ4Olx0XHRcdFx0XHRcdHByaSA9IChzdHJ1Y3QgaXNvX3ByaW1hcnlfZGVzY3JpcHRvciAqKXZkcDtcbiA2NDk6XHRcdFx0XHRcdFx0LyogU2F2ZSB0aGUgYnVmZmVyIGluIGNhc2Ugd2UgbmVlZCBpdCAuLi4gKi9cbiA2NTA6XHRcdFx0XHRcdFx0cHJpX2JoID0gYmg7XG4gNjUxOlx0XHRcdFx0XHRcdGJoID0gTlVMTDtcbiA2NTI6XHRcdFx0XHRcdH1cbiA2NTM6XHRcdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4NzEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYGlzb2ZzX2ZpbGxfc3VwZXJgKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgd2UgbmVlZCB0byB6ZXJvIGluIG9uIGEgcG90ZW50aWFsIGlzc3VlIHdpdGhpbiBgaXNvZnNfZmlsbF9zdXBlcmAuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGNvZGUgYXJvdW5kIGxpbmUgODIwLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgZmlsZXN5c3RlbSwgdGhlcmUmIzM5O3MgbGlrZWx5IHNvbWV0aGluZyBpbnRlcmVzdGluZyBoYXBwZW5pbmcgdGhlcmUgcmVsYXRlZCB0byBbeW91ciBmaWVsZC9zcGVjaWZpYyBhcmVhIG9mIGV4cGVydGlzZSwgZS5nLiwgaG93IHRoZSBzdXBlcmJsb2NrIGlzIGluaXRpYWxpemVkLCB2b2x1bWUgZGVzY3JpcHRvciBwYXJzaW5nLCBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMsIGV0Yy4gLSBiYXNlZCBvbiB5b3VyIGFyZWEgb2Yga25vd2xlZGdlXS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgd2l0aGluIHRoYXQgc2VjdGlvbiB0byBwaW5wb2ludCB3aGV0aGVyIGl0IGlzIGNvbm5lY3RlZCB0byBbdGhlIHByb2JsZW0geW91IGFyZSBpbnZlc3RpZ2F0aW5nXS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTI6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9pc29mcy9pbm9kZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MDA6XHRcdCAqL1xuIDgwMTpcdFx0YnJlbHNlKHByaV9iaCk7XG4gODAyOlx0XHRicmVsc2UoYmgpO1xuIDgwMzpcdFxuIDgwNDpcdFx0LypcbiA4MDU6XHRcdCAqIEZvcmNlIHRoZSBibG9ja3NpemUgdG8gNTEyIGZvciA1MTIgYnl0ZSBzZWN0b3JzLiAgVGhlIGZpbGVcbiA4MDY6XHRcdCAqIHJlYWQgcHJpbWl0aXZlcyByZWFsbHkgZ2V0IGl0IHdyb25nIGluIGEgYmFkIHdheSBpZiB3ZSBkb24mIzM5O3RcbiA4MDc6XHRcdCAqIGRvIHRoaXMuXG4gODA4Olx0XHQgKlxuIDgwOTpcdFx0ICogTm90ZSAtIHdlIHNob3VsZCBuZXZlciBiZSBzZXR0aW5nIHRoZSBibG9ja3NpemUgdG8gc29tZXRoaW5nXG4gODEwOlx0XHQgKiBsZXNzIHRoYW4gdGhlIGhhcmR3YXJlIHNlY3RvciBzaXplIGZvciB0aGUgZGV2aWNlLiAgSWYgd2VcbiA4MTE6XHRcdCAqIGRvLCB3ZSB3b3VsZCBlbmQgdXAgaGF2aW5nIHRvIHJlYWQgbGFyZ2VyIGJ1ZmZlcnMgYW5kIHNwbGl0XG4gODEyOlx0XHQgKiBvdXQgcG9ydGlvbnMgdG8gc2F0aXNmeSByZXF1ZXN0cy5cbiA4MTM6XHRcdCAqXG4gODE0Olx0XHQgKiBOb3RlMi0gdGhlIGlkZWEgaGVyZSBpcyB0aGF0IHdlIHdhbnQgdG8gZGVhbCB3aXRoIHRoZSBvcHRpbWFsXG4gODE1Olx0XHQgKiB6b25lc2l6ZSBpbiB0aGUgZmlsZXN5c3RlbS4gIElmIHdlIGhhdmUgaXQgc2V0IHRvIHNvbWV0aGluZyBsZXNzLFxuIDgxNjpcdFx0ICogdGhlbiB3ZSBoYXZlIGhvcnJpYmxlIHByb2JsZW1zIHdpdGggdHJ5aW5nIHRvIHBpZWNlIHRvZ2V0aGVyXG4gODE3Olx0XHQgKiBiaXRzIG9mIGFkamFjZW50IGJsb2NrcyBpbiBvcmRlciB0byBwcm9wZXJseSByZWFkIGRpcmVjdG9yeVxuIDgxODpcdFx0ICogZW50cmllcy4gIEJ5IGZvcmNpbmcgdGhlIGJsb2Nrc2l6ZSBpbiB0aGlzIHdheSwgd2UgZW5zdXJlXG4gODE5Olx0XHQgKiB0aGF0IHdlIHdpbGwgbmV2ZXIgYmUgcmVxdWlyZWQgdG8gZG8gdGhpcy5cbiA4MjA6XHRcdCAqL1xuIDgyMTpcdFx0aWYgKCFzYl9zZXRfYmxvY2tzaXplKHMsIG9yaWdfem9uZXNpemUpKVxuIDgyMjpcdFx0XHRnb3RvIG91dF9mcmVlc2JpO1xuIDgyMzpcdFxuIDgyNDpcdFx0c2JpLVx1MDAzZXNfc2Vzc2lvbl9zdGFydCA9ICh1NjQpdm9sX2Rlc2Nfc3RhcnQgXHUwMDNjXHUwMDNjXG4gODI1Olx0XHRcdFx0XHQoSVNPRlNfQkxPQ0tfQklUUyAtIHMtXHUwMDNlc19ibG9ja3NpemVfYml0cyk7XG4gODI2Olx0XHRzYmktXHUwMDNlc19ubHNfaW9jaGFyc2V0ID0gTlVMTDtcbiA4Mjc6XHRcbiA4Mjg6XHQjaWZkZWYgQ09ORklHX0pPTElFVFxuIDgyOTpcdFx0aWYgKGpvbGlldF9sZXZlbCkge1xuIDgzMDpcdFx0XHRjaGFyICpwID0gb3B0LVx1MDAzZWlvY2hhcnNldCA/IG9wdC1cdTAwM2Vpb2NoYXJzZXQgOiBDT05GSUdfTkxTX0RFRkFVTFQ7XG4gODMxOlx0XHRcdGlmIChzdHJjbXAocCwgXCYjMzQ7dXRmOFwmIzM0OykgIT0gMCkge1xuIDgzMjpcdFx0XHRcdHNiaS1cdTAwM2VzX25sc19pb2NoYXJzZXQgPSBvcHQtXHUwMDNlaW9jaGFyc2V0ID9cbiA4MzM6XHRcdFx0XHRcdGxvYWRfbmxzKG9wdC1cdTAwM2Vpb2NoYXJzZXQpIDogbG9hZF9ubHNfZGVmYXVsdCgpO1xuIDgzNDpcdFx0XHRcdGlmICghc2JpLVx1MDAzZXNfbmxzX2lvY2hhcnNldClcbiA4MzU6XHRcdFx0XHRcdGdvdG8gb3V0X2ZyZWVzYmk7XG4gODM2Olx0XHRcdH1cbiA4Mzc6XHRcdH1cbiA4Mzg6XHQjZW5kaWZcbiA4Mzk6XHRcdHMtXHUwMDNlc19vcCA9IFx1MDAyNmlzb2ZzX3NvcHM7XG4gODQwOlx0XHRzLVx1MDAzZXNfZXhwb3J0X29wID0gXHUwMDI2aXNvZnNfZXhwb3J0X29wcztcbiA4NDE6XHRcdHNiaS1cdTAwM2VzX21hcHBpbmcgPSBvcHQtXHUwMDNlbWFwO1xuIDg0MjpcdFx0c2JpLVx1MDAzZXNfcm9jayA9IChvcHQtXHUwMDNlcm9jayA/IDIgOiAwKTtcbiA4NDM6XHRcdHNiaS1cdTAwM2VzX3JvY2tfb2Zmc2V0ID0gLTE7IC8qIGluaXRpYWwgb2Zmc2V0LCB3aWxsIGd1ZXNzIHVudGlsIFNQIGlzIGZvdW5kKi9cbiA4NDQ6XHRcdHNiaS1cdTAwM2VzX2NydWZ0ID0gb3B0LVx1MDAzZWNydWZ0O1xuIDg0NTpcdFx0c2JpLVx1MDAzZXNfaGlkZSA9IG9wdC1cdTAwM2VoaWRlO1xuIDg0NjpcdFx0c2JpLVx1MDAzZXNfc2hvd2Fzc29jID0gb3B0LVx1MDAzZXNob3dhc3NvYztcbiA4NDc6XHRcdHNiaS1cdTAwM2VzX3VpZCA9IG9wdC1cdTAwM2V1aWQ7XG4gODQ4Olx0XHRzYmktXHUwMDNlc19naWQgPSBvcHQtXHUwMDNlZ2lkO1xuIDg0OTpcdFx0c2JpLVx1MDAzZXNfdWlkX3NldCA9IG9wdC1cdTAwM2V1aWRfc2V0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTYyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gUm9jayBSaWRnZSBFeHRlbnNpb25zIGluIElTT0ZTKioKCkFscmlnaHQsIHRpbWUgdG8gdHJvdWJsZXNob290IHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBmcy9pc29mcy9yb2NrLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgcm9ja19jb250aW51ZWAgZnVuY3Rpb24uIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgUm9jayBSaWRnZSBleHRlbnNpb25zIGFyZSBoYW5kbGVkIGluIHRoZSBJU08gOTY2MCBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoZSBjb250aW51YXRpb24gcmVjb3JkcyBhcmUgc3RydWN0dXJlZCBhbmQgaG93IHRoZSBzeXN0ZW0gaXRlcmF0ZXMgdGhyb3VnaCB0aGVtIHRvIHJlc29sdmUgZXh0ZW5kZWQgZmlsZW5hbWVzIG9yIGF0dHJpYnV0ZXMuIFRoZSBwb3RlbnRpYWwgcHJvYmxlbSBsaWtlbHkgbGllcyBzb21ld2hlcmUgaW4gdGhlIGxvZ2ljIHRoYXQgaGFuZGxlcyBhIGNvbnRpbnVlZCBSb2NrIFJpZGdlIGVudHJ5LiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlJiMzOTtzIGFuIG9idmlvdXMgZmxhdyBpbiBob3cgdGhlIGRyaXZlciBwcm9jZXNzZXMgdGhvc2UgcmVjb3Jkcy4gSSYjMzk7bSBsb29raW5nIGZvciBhbnl0aGluZyB0aGF0IGNvdWxkIGxlYWQgdG8gaW5jb21wbGV0ZSBvciBpbmNvcnJlY3QgaW50ZXJwcmV0YXRpb24gb2YgdGhlIGV4dGVuZGVkIGF0dHJpYnV0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvaXNvZnMvcm9jay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA4MDpcdCNkZWZpbmUgUlJfTUFYX0NFX0VOVFJJRVMgMzJcbiAgODE6XHRcbiAgODI6XHQvKlxuICA4MzpcdCAqIFJldHVybnMgMCBpZiB0aGUgY2FsbGVyIHNob3VsZCBjb250aW51ZSBzY2FubmluZywgMSBpZiB0aGUgc2NhbiBtdXN0IGVuZFxuICA4NDpcdCAqIGFuZCAtdmUgb24gZXJyb3IuXG4gIDg1Olx0ICovXG4gIDg2Olx0c3RhdGljIGludCByb2NrX2NvbnRpbnVlKHN0cnVjdCByb2NrX3N0YXRlICpycylcbiAgODc6XHR7XG4gIDg4Olx0XHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gcnMtXHUwMDNlaW5vZGUtXHUwMDNlaV9zYjtcbiAgODk6XHRcdHN0cnVjdCBpc29mc19zYl9pbmZvICpzYmkgPSBJU09GU19TQihzYik7XG4gIDkwOlx0XHR1NjQgZXh0ZW50ID0gKHVuc2lnbmVkIGludClycy1cdTAwM2Vjb250X2V4dGVudDtcbiAgOTE6XHRcdHU2NCBzZXNzaW9uX2VuZCA9IHNiaS1cdTAwM2VzX3Nlc3Npb25fc3RhcnQgJiM0MztcbiAgOTI6XHRcdFx0KCh1NjQpc2JpLVx1MDAzZXNfbnpvbmVzIFx1MDAzY1x1MDAzYyAoSVNPRlNfQkxPQ0tfQklUUyAtIHNiLVx1MDAzZXNfYmxvY2tzaXplX2JpdHMpKTtcbiAgOTM6XHRcdGludCByZXQgPSAxO1xuICA5NDpcdFx0aW50IGJsb2Nrc2l6ZSA9IDEgXHUwMDNjXHUwMDNjIHJzLVx1MDAzZWlub2RlLVx1MDAzZWlfYmxrYml0cztcbiAgOTU6XHRcdGNvbnN0IGludCBtaW5fZGVfc2l6ZSA9IG9mZnNldG9mKHN0cnVjdCByb2NrX3JpZGdlLCB1KTtcbiAgOTY6XHRcbiAgOTc6XHRcdGtmcmVlKHJzLVx1MDAzZWJ1ZmZlcik7XG4gIDk4Olx0XHRycy1cdTAwM2VidWZmZXIgPSBOVUxMO1xuICA5OTpcdFxuIDEwMDpcdFx0aWYgKCh1bnNpZ25lZClycy1cdTAwM2Vjb250X29mZnNldCBcdTAwM2UgYmxvY2tzaXplIC0gbWluX2RlX3NpemUgfHxcbiAxMDE6XHRcdCAgICAodW5zaWduZWQpcnMtXHUwMDNlY29udF9zaXplIFx1MDAzZSBibG9ja3NpemUgfHxcbiAxMDI6XHRcdCAgICAodW5zaWduZWQpKHJzLVx1MDAzZWNvbnRfb2Zmc2V0ICYjNDM7IHJzLVx1MDAzZWNvbnRfc2l6ZSkgXHUwMDNlIGJsb2Nrc2l6ZSkge1xuIDEwMzpcdFx0XHRwcmludGsoS0VSTl9OT1RJQ0UgXCYjMzQ7cm9jazogY29ycnVwdGVkIGRpcmVjdG9yeSBlbnRyeS4gXCYjMzQ7XG4gMTA0Olx0XHRcdFx0XCYjMzQ7ZXh0ZW50PSVkLCBvZmZzZXQ9JWQsIHNpemU9JWRcXG5cJiMzNDssXG4gMTA1Olx0XHRcdFx0cnMtXHUwMDNlY29udF9leHRlbnQsIHJzLVx1MDAzZWNvbnRfb2Zmc2V0LCBycy1cdTAwM2Vjb250X3NpemUpO1xuIDEwNjpcdFx0XHRyZXQgPSAtRUlPO1xuIDEwNzpcdFx0XHRnb3RvIG91dDtcbiAxMDg6XHRcdH1cbiAxMDk6XHRcbiAxMTA6XHRcdGlmIChycy1cdTAwM2Vjb250X2V4dGVudCBcdTAwMjZcdTAwMjZcbiAxMTE6XHRcdCAgICAoZXh0ZW50IFx1MDAzYyBzYmktXHUwMDNlc19zZXNzaW9uX3N0YXJ0IHx8XG4gMTEyOlx0XHQgICAgIGV4dGVudCBcdTAwM2U9IHNlc3Npb25fZW5kIHx8XG4gMTEzOlx0XHQgICAgIGV4dGVudCBcdTAwM2U9IHNiX2JkZXZfbnJfYmxvY2tzKHNiKSkpIHtcbiAxMTQ6XHRcdFx0cHJpbnRrKEtFUk5fTk9USUNFIFwmIzM0O3JvY2s6IGNvcnJ1cHRlZCBkaXJlY3RvcnkgZW50cnkuIFwmIzM0O1xuIDExNTpcdFx0XHRcdFwmIzM0O2V4dGVudD0ldSBvdXQgb2Ygdm9sdW1lIChuem9uZXM9JWx1KVxcblwmIzM0OyxcbiAxMTY6XHRcdFx0XHQodW5zaWduZWQpcnMtXHUwMDNlY29udF9leHRlbnQsXG4gMTE3Olx0XHRcdFx0c2JpLVx1MDAzZXNfbnpvbmVzKTtcbiAxMTg6XHRcdFx0cmV0ID0gLUVJTztcbiAxMTk6XHRcdFx0Z290byBvdXQ7XG4gMTIwOlx0XHR9XG4gMTIxOlx0XG4gMTIyOlx0XHRpZiAocnMtXHUwMDNlY29udF9leHRlbnQpIHtcbiAxMjM6XHRcdFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcbiAxMjQ6XHRcbiAxMjU6XHRcdFx0cnMtXHUwMDNlYnVmZmVyID0ga21hbGxvYyhycy1cdTAwM2Vjb250X3NpemUsIEdGUF9LRVJORUwpO1xuIDEyNjpcdFx0XHRpZiAoIXJzLVx1MDAzZWJ1ZmZlcikge1xuIDEyNzpcdFx0XHRcdHJldCA9IC1FTk9NRU07XG4gMTI4Olx0XHRcdFx0Z290byBvdXQ7XG4gMTI5Olx0XHRcdH1cbiAxMzA6XHRcdFx0cmV0ID0gLUVJTztcbiAxMzE6XHRcdFx0aWYgKCYjNDM7JiM0Mztycy1cdTAwM2Vjb250X2xvb3BzIFx1MDAzZT0gUlJfTUFYX0NFX0VOVFJJRVMpXG4gMTMyOlx0XHRcdFx0Z290byBvdXQ7XG4gMTMzOlx0XHRcdGJoID0gc2JfYnJlYWQocnMtXHUwMDNlaW5vZGUtXHUwMDNlaV9zYiwgcnMtXHUwMDNlY29udF9leHRlbnQpO1xuIDEzNDpcdFx0XHRpZiAoYmgpIHtcbiAxMzU6XHRcdFx0XHRtZW1jcHkocnMtXHUwMDNlYnVmZmVyLCBiaC1cdTAwM2ViX2RhdGEgJiM0MzsgcnMtXHUwMDNlY29udF9vZmZzZXQsXG4gMTM2Olx0XHRcdFx0XHRcdHJzLVx1MDAzZWNvbnRfc2l6ZSk7XG4gMTM3Olx0XHRcdFx0cHV0X2JoKGJoKTtcbiAxMzg6XHRcdFx0XHRycy1cdTAwM2VjaHIgPSBycy1cdTAwM2VidWZmZXI7XG4gMTM5Olx0XHRcdFx0cnMtXHUwMDNlbGVuID0gcnMtXHUwMDNlY29udF9zaXplO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTYyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUm9jayBSaWRnZSBDb250aW51YXRpb24gRXh0ZW50IEZpeCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHdoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhpcyBwYXRjaCwgdGhlIHByb2JsZW0gaXQmIzM5O3Mgc29sdmluZz8gQWgsIHJpZ2h0LCBpdCYjMzk7cyBhYm91dCB0aGUgYHJvY2tfY29udGludWVgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgdGhlIGNvbnRpbnVhdGlvbiBleHRlbnQgKGBDRWAgZW50cmllcykgb2YgUm9jayBSaWRnZSBleHRlbnNpb24gcmVjb3Jkcy4gVGhlIG9sZGVyIGNvZGUgd2FzIHVzaW5nIHRoaXM6CgpgYGBjCmlmICgodW5zaWduZWQpcnMtJmd0O2NvbnRfZXh0ZW50ICZndDs9IElTT0ZTX1NCKHJzLSZndDtpbm9kZS0mZ3Q7aV9zYiktJmd0O3NfbnpvbmVzKSB7CmBgYAoKVGhlIHByb2JsZW0gaXMgaW1tZWRpYXRlbHkgb2J2aW91cyB0byBtZS4gV2UmIzM5O3JlIGNvbXBhcmluZyBibG9jayB1bml0cyAoYHJzLSZndDtjb250X2V4dGVudGAsIGVzc2VudGlhbGx5IHRoZSBwaHlzaWNhbCBibG9jay9leHRlbnQgb24gdGhlIGRldmljZSkgd2l0aCBgc19uem9uZXNgLCB3aGljaCByZXByZXNlbnRzIHRoZSBudW1iZXIgb2Ygem9uZXMgaW4gdGhlICpzZXNzaW9uKi4gSW4gYSBtdWx0aS1zZXNzaW9uIHNjZW5hcmlvLCBvciB3aXRoIHZhcnlpbmcgYmxvY2sgc2l6ZXMgYWNyb3NzIHNlc3Npb25zLCB0aGlzIGNvbXBhcmlzb24gaXMgZnVuZGFtZW50YWxseSBmbGF3ZWQuIEl0IGNvdWxkIGxlYWQgdG8gYGNvbnRfZXh0ZW50YCBiZWluZyBjaGVja2VkIGFnYWluc3QgaW5jb3JyZWN0IGJvdW5kYXJpZXMsIHBvdGVudGlhbGx5IHJlc3VsdGluZyBpbiByZWFkcyBvdXRzaWRlIHRoZSBkZXZpY2UmIzM5O3MgYm91bmRzLCBvdXRzaWRlIHRoZSBjdXJyZW50IHNlc3Npb24sIG9yIGV2ZW4gYmVmb3JlIHRoZSBzZXNzaW9uJiMzOTtzIHN0YXJ0LiBUaGlzIHNjcmVhbXMgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgZGF0YSBjb3JydXB0aW9uLCBhIGNsYXNzaWMgcHJvYmxlbS4KClNvLCB0aGUgZml4IGlzIHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IGVmZmVjdGl2ZS4gVGhleSYjMzk7dmUgaW50cm9kdWNlZCBgc19zZXNzaW9uX3N0YXJ0YCB0byBgc3RydWN0IGlzb2ZzX3NiX2luZm9gLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlIGFzIGl0JiMzOTtzIHRoZSBhbmNob3Igb2YgdGhlIGN1cnJlbnQgc2Vzc2lvbiB3aXRoaW4gdGhlIGdyZWF0ZXIgbWVkaXVtLiBDcnVjaWFsbHksIHRoZSBjb2RlIG5vdyBpbml0aWFsaXplcyB0aGlzIGBzX3Nlc3Npb25fc3RhcnRgIHdpdGhpbiBgaXNvZnNfZmlsbF9zdXBlcmAsIHNwZWNpZmljYWxseSBhZnRlciB0aGUgYmxvY2sgc2l6ZSBpcyBzZXQuIEV4Y2VsbGVudCwgdGhhdCYjMzk7cyBjbGVhbi4gVGhlIHVzZSBvZiBga3phbGxvY19vYmpgIHRvIGFsbG9jYXRlIGBzYmlgIGlzIHNvdW5kIGFzIGl0IGVuc3VyZXMgdGhlIHN0cnVjdCBtZW1vcnkgaXMgaW5pdGlhbGl6ZWQgdG8gemVyby4KClRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpdHNlbGYgYWx0ZXJzIGByb2NrX2NvbnRpbnVlKClgIHRvIHBlcmZvcm0gYSBtb3JlIHJvYnVzdCB2YWxpZGF0aW9uIG9mIHRoZSBleHRlbnQsIGNoZWNraW5nIGFnYWluc3QgYHNiaS0mZ3Q7c19zZXNzaW9uX3N0YXJ0YCwgYWxvbmcgd2l0aCBgc2Vzc2lvbl9lbmRgIGFuZCBgc2JfYmRldl9ucl9ibG9ja3Moc2IpYC4gVGhpcyBpcyBwcmVjaXNlbHkgd2hhdCYjMzk7cyBuZWVkZWQgLSBib3VuZHMgY2hlY2tpbmcgb24gYm90aCB0aGUgc3RhcnQgYW5kIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgc2Vzc2lvbi4KCk5vdywgYXMgYSBuZXh0IHN0ZXAsIEkgbmVlZCB0byBsb29rIGZvciBhZGRpdGlvbmFsIHJpc2tzLiBBcmUgdGhlcmUgb3RoZXIgbG9jYXRpb25zIHdoZXJlIGBzX3Nlc3Npb25fc3RhcnRgIGlzIGFjY2Vzc2VkIG9yIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQsIGdpdmVuIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSwgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBsaW5nZXJpbmcgbWVtb3J5IGFjY2VzcyBoYXphcmRzPyBJIHdpbGwgY2hlY2sgd2hldGhlciB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgYm90aCB3aXRoaW4gdGhlIHBhdGNoIGl0c2VsZiBhbmQgaW4gcmVsYXRlZCBjb2RlLiBJJiMzOTttIGtlZW4gdG8gbWFrZSBzdXJlIHRoZSBmaXggaXMgY29tcGxldGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nfc2Vzc2lvbl9zdGFydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2lzb2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9pc29mcy9pbm9kZS5jPTU3ND1zdGF0aWMgaW50IGlzb2ZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvaXNvZnMvaW5vZGUuYy04MjMtXG5mcy9pc29mcy9pbm9kZS5jOjgyNDpcdHNiaS1cdTAwM2VzX3Nlc3Npb25fc3RhcnQgPSAodTY0KXZvbF9kZXNjX3N0YXJ0IFx1MDAzY1x1MDAzY1xuZnMvaXNvZnMvaW5vZGUuYy04MjUtXHRcdFx0XHQoSVNPRlNfQkxPQ0tfQklUUyAtIHMtXHUwMDNlc19ibG9ja3NpemVfYml0cyk7XG4tLVxuZnMvaXNvZnMvaXNvZnMuaD0zMj1zdHJ1Y3QgaXNvZnNfc2JfaW5mbyB7XG4tLVxuZnMvaXNvZnMvaXNvZnMuaC0zOC1cdC8qIFNlc3Npb24gc3RhcnQgaW4gZmlsZXN5c3RlbSBibG9jayB1bml0cy4gKi9cbmZzL2lzb2ZzL2lzb2ZzLmg6Mzk6XHR1NjQgc19zZXNzaW9uX3N0YXJ0O1xuZnMvaXNvZnMvaXNvZnMuaC00MC1cdFxuLS1cbmZzL2lzb2ZzL3JvY2suYz04Nj1zdGF0aWMgaW50IHJvY2tfY29udGludWUoc3RydWN0IHJvY2tfc3RhdGUgKnJzKVxuLS1cbmZzL2lzb2ZzL3JvY2suYy05MC1cdHU2NCBleHRlbnQgPSAodW5zaWduZWQgaW50KXJzLVx1MDAzZWNvbnRfZXh0ZW50O1xuZnMvaXNvZnMvcm9jay5jOjkxOlx0dTY0IHNlc3Npb25fZW5kID0gc2JpLVx1MDAzZXNfc2Vzc2lvbl9zdGFydCAmIzQzO1xuZnMvaXNvZnMvcm9jay5jLTkyLVx0XHQoKHU2NClzYmktXHUwMDNlc19uem9uZXMgXHUwMDNjXHUwMDNjIChJU09GU19CTE9DS19CSVRTIC0gc2ItXHUwMDNlc19ibG9ja3NpemVfYml0cykpO1xuLS1cbmZzL2lzb2ZzL3JvY2suYy0xMTAtXHRpZiAocnMtXHUwMDNlY29udF9leHRlbnQgXHUwMDI2XHUwMDI2XG5mcy9pc29mcy9yb2NrLmM6MTExOlx0ICAgIChleHRlbnQgXHUwMDNjIHNiaS1cdTAwM2VzX3Nlc3Npb25fc3RhcnQgfHxcbmZzL2lzb2ZzL3JvY2suYy0xMTItXHQgICAgIGV4dGVudCBcdTAwM2U9IHNlc3Npb25fZW5kIHx8XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1MDAKCQkJCQkJCW91dHB1dDogMjA3CgkJCQkJCQl0aG91Z2h0czogNjYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBJU09GUyBQYXRjaCBhbmQgaXRzIEtNU0FOIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHZlcmlmeSB0aGUgc2VxdWVuY2Ugb2YgZXZlbnRzIGluIGBpc29mc19maWxsX3N1cGVyYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnRlZCB0byBzZWUgaWYgdGhlIFJvY2sgUmlkZ2UgcGFyc2luZyBvciBgcm9ja19jb250aW51ZWAgbG9naWMgY291bGQgYmUgdHJpZ2dlcmVkICpiZWZvcmUqIGBzYmktJmd0O3Nfc2Vzc2lvbl9zdGFydGAgaXMgc2V0LiBBZnRlciByZXZpZXdpbmcgdGhlIGNvZGUsIGl0JiMzOTtzIGNsZWFyIHRoYXQgYHNiaWAgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAsIHNvIGl0JiMzOTtzIGd1YXJhbnRlZWQgdG8gYmUgemVyby1pbml0aWFsaXplZCBmcm9tIHRoZSBnZXQtZ28uIFRoZW4sIHRoZSB2b2x1bWUgZGVzY3JpcHRvcnMgYXJlIHJlYWQsIHRoZSBibG9jayBzaXplIGlzIHNldCwgYW5kIGNydWNpYWxseSwgYHNiaS0mZ3Q7c19zZXNzaW9uX3N0YXJ0YCBpcyBhc3NpZ25lZCAqYmVmb3JlKiB3ZSBldmVuIGdldCB0byB0aGUgaW5vZGUgcmVhZGluZyBvciBkaXJlY3RvcnkgcGFyc2luZywgd2hlcmUgUm9jayBSaWRnZSBwYXJzaW5nIHdvdWxkIGtpY2sgaW4uIFRoZSBzZXNzaW9uIHN0YXJ0IGlzIGEgc2ltcGxlIGB1NjRgLCBzbyB0aGVyZSYjMzk7cyBubyBjb21wbGV4IHN0cnVjdHVyZSB0byB3b3JyeSBhYm91dC4KClRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyB0aWdodGVuaW5nIGJvdW5kcyBjaGVja3Mgb24gUm9jayBSaWRnZSBjb250aW51YXRpb24gZW50cmllcyAoYENFYCkuIFRoaXMgaXMgYWJvdXQgcHJldmVudGluZyBvdXQtb2YtYm91bmRzIHJlYWRzLCBtZWFuaW5nIHdlIGRvbiYjMzk7dCBhY2NpZGVudGFsbHkgdHJ5IHRvIHJlYWQgZGF0YSBmcm9tIHRoZSBkaXNrIG91dHNpZGUgb2YgdGhlIGludGVuZGVkIHZvbHVtZSBsaW1pdHMuCgpOb3csIGxldCYjMzk7cyBhZGRyZXNzIHRoZSBLTVNBTiBjb25jZXJuLiBUaGUgY2hhbmdlcyBhZGQgZXh0cmEgdmFsaWRhdGlvbiBib3VuZHMgY2hlY2tzIG9uIGBycy0mZ3Q7Y29udF9leHRlbnRgIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBibG9jayBkZXZpY2UgcmVhZHMgaW4gYGlzb2ZzYCBSb2NrIFJpZGdlIHBhcnNpbmcuIE15IG1haW4gY29uY2VybiB3aXRoIEtNU0FOIGlzIGFsd2F5cyBhcm91bmQgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBpc3N1ZXMuIFRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgd2F5cyBmb3IgdW5pbml0aWFsaXplZCBkYXRhIHRvIGxlYWsgdG8gdXNlcnNwYWNlLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBvdXQtb2YtYm91bmRzICpyZWFkcyogaW4gdGhlIGtlcm5lbCBpdHNlbGYsIG5vdCB0aGUgbGVha2luZyBvZiBhbnkga2VybmVsIGRhdGEuCgpTbywgbGV0JiMzOTtzIHJldmlldyB0aGUgY3JpdGVyaWEgY2FyZWZ1bGx5OgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHM/KiogQWJzb2x1dGVseSBub3QuIFRoZSBjb2RlIGRvZXNuJiMzOTt0IGV4cG9zZSBhbnkga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZSB0aGF0IGlzIHVuaW5pdGlhbGl6ZWQuIE5vIGBjb3B5X3RvX3VzZXJgLCBubyBpbmZvcm1hdGlvbiBsZWFrcywgbm8gcGFkZGluZyBsZWFrcy4KMi4gICoqQ29uZGl0aW9uYWwgbG9naWMvYnJhbmNoaW5nIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIE5vcGUuIEV2ZXJ5dGhpbmcgaXMgaW5pdGlhbGl6ZWQgY29ycmVjdGx5LiBgdm9sX2Rlc2Nfc3RhcnRgLCBgc2JpYCwgYHNiaS0mZ3Q7c19zZXNzaW9uX3N0YXJ0YCwgYHJzLSZndDtjb250X2V4dGVudGAsIHRoZXkmIzM5O3JlIGFsbCBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgdXNlZC4KMy4gICoqQWxsb2NhdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyoqIE5vLiBgc2JpYCBpcyB6ZXJvZWQsIGFuZCBgc19zZXNzaW9uX3N0YXJ0YCBpcyBleHBsaWNpdGx5IGFzc2lnbmVkLgo0LiAgKipBbHRlcmVkIGJvdW5kcyBjaGVja3MgcG90ZW50aWFsbHkgYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIGJ5dGVzPyoqIE5vLiBUaGUgcGF0Y2ggb25seSB0aWdodGVucyBib3VuZHMgY2hlY2tzIGFuZCBvbmx5IGNvbnN0cmFpbnMgYmxvY2sgZXh0ZW50IG51bWJlcnMgdG8gYmUgd2l0aGluIHZhbGlkIHJhbmdlcy4gVGhpcyBpcyBhIG1lbW9yeSBzYWZldHkgaXNzdWUsIHdoaWNoIHdpbGwgYmUgY2F1Z2h0IGJ5IEtBU0FOLgoKVGhlcmVmb3JlLCBhZnRlciB0aGlzIGRldGFpbGVkIGFuYWx5c2lzLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IGBOZWVkc0tNU0FOYCBpcyBmYWxzZS4gVGhlc2UgY2hhbmdlcyBhcmUgYWJvdXQgbWVtb3J5ICpzYWZldHkqLCB3aGljaCBLQVNBTiwgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgZXhpc3RpbmcgYm91bmRzIGNoZWNrcywgZWZmZWN0aXZlbHkgaGFuZGxlcy4gVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IEtNU0FOLXJlbGV2YW50IGlzc3VlcywgYW5kIHRoZSBjaGFuZ2VzIGFyZSBsaW1pdGVkIHRvIHRpZ2h0ZW5pbmcgdXAgdGhvc2UgZGlzay9kZXZpY2UgYnVmZmVyIHJlYWRzIHdpdGhpbiB0aGUga2VybmVsLiBJIHdpbGwgZHJhZnQgYSBgS01TQU5SZWFzb25pbmdgIGNvbW1lbnQgdG8gbWFrZSB0aGlzIGRpc3RpbmN0aW9uIHZlcnkgY2xlYXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGZzL2lzb2ZzIHRvIHByb3Blcmx5IHZhbGlkYXRlIFJvY2sgUmlkZ2UgY29udGludWF0aW9uIGV4dGVudHMgKGBDRWAgZW50cmllcykgYWdhaW5zdCBzZXNzaW9uIGFuZCBibG9jayBkZXZpY2UgYm91bmRhcmllcyBieSBpbnRyb2R1Y2luZyBgc2JpLVx1MDAzZXNfc2Vzc2lvbl9zdGFydGAgYW5kIGNvbXBhcmluZyBgY29udF9leHRlbnRgIGFnYWluc3QgdGhlIHZhbGlkIHJhbmdlLiBcblxuLSBgc3RydWN0IGlzb2ZzX3NiX2luZm9gIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmpgLCBhbmQgYHNfc2Vzc2lvbl9zdGFydGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCBkdXJpbmcgc3VwZXJibG9jayBzZXR1cCBiZWZvcmUgYW55IFJvY2sgUmlkZ2UgcGFyc2luZyBvY2N1cnMuXG4tIFRoZSBwYXRjaCB0aWdodGVucyBib3VuZHMgY2hlY2tzIGZvciBibG9jayByZWFkcywgbWl0aWdhdGluZyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBibG9jayByZWFkcyBvbiBjb3JydXB0ZWQvbWFsaWNpb3VzIElTTyBpbWFnZXMgKHdoaWNoIGZhbGwgdW5kZXIgS0FTQU4vZ2VuZXJpYyBib3VuZHMgY2hlY2tpbmcpLlxuLSBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgc3RhY2svaGVhcCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZS5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IHByZXNlbnQgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBmcy9pc29mcyB0byBwcm9wZXJseSB2YWxpZGF0ZSBSb2NrIFJpZGdlIGNvbnRpbnVhdGlvbiBleHRlbnRzIChgQ0VgIGVudHJpZXMpIGFnYWluc3Qgc2Vzc2lvbiBhbmQgYmxvY2sgZGV2aWNlIGJvdW5kYXJpZXMgYnkgaW50cm9kdWNpbmcgYHNiaS1cdTAwM2VzX3Nlc3Npb25fc3RhcnRgIGFuZCBjb21wYXJpbmcgYGNvbnRfZXh0ZW50YCBhZ2FpbnN0IHRoZSB2YWxpZCByYW5nZS4gXG5cbi0gYHN0cnVjdCBpc29mc19zYl9pbmZvYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgYW5kIGBzX3Nlc3Npb25fc3RhcnRgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgZHVyaW5nIHN1cGVyYmxvY2sgc2V0dXAgYmVmb3JlIGFueSBSb2NrIFJpZGdlIHBhcnNpbmcgb2NjdXJzLlxuLSBUaGUgcGF0Y2ggdGlnaHRlbnMgYm91bmRzIGNoZWNrcyBmb3IgYmxvY2sgcmVhZHMsIG1pdGlnYXRpbmcgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYmxvY2sgcmVhZHMgb24gY29ycnVwdGVkL21hbGljaW91cyBJU08gaW1hZ2VzICh3aGljaCBmYWxsIHVuZGVyIEtBU0FOL2dlbmVyaWMgYm91bmRzIGNoZWNraW5nKS5cbi0gTm8gdW5pbml0aWFsaXplZCBtZW1vcnksIHN0YWNrL2hlYXAgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkIHRvIHVzZXIgc3BhY2UuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBwcmVzZW50IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMjoxNToyOS45ODg1NDgyNDdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTkxNjc1ODczNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJU085NjYwX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXNvZnNfZmlsbF9zdXBlclwiLFxuICAgIFwicm9ja19jb250aW51ZVwiLFxuICAgIFwiZ2V0X3JvY2tfcmlkZ2VfZmlsZW5hbWVcIixcbiAgICBcInBhcnNlX3JvY2tfcmlkZ2VfaW5vZGVcIixcbiAgICBcInJvY2tfcmlkZ2Vfc3ltbGlua19yZWFkX2ZvbGlvXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBmcy9pc29mcyB0byBwcm9wZXJseSB2YWxpZGF0ZSBSb2NrIFJpZGdlIGNvbnRpbnVhdGlvbiBleHRlbnRzIChgQ0VgIGVudHJpZXMpIGFnYWluc3Qgc2Vzc2lvbiBhbmQgYmxvY2sgZGV2aWNlIGJvdW5kYXJpZXMgYnkgaW50cm9kdWNpbmcgYHNiaS1cXHUwMDNlc19zZXNzaW9uX3N0YXJ0YCBhbmQgY29tcGFyaW5nIGBjb250X2V4dGVudGAgYWdhaW5zdCB0aGUgdmFsaWQgcmFuZ2UuIFxcblxcbi0gYHN0cnVjdCBpc29mc19zYl9pbmZvYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgYW5kIGBzX3Nlc3Npb25fc3RhcnRgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgZHVyaW5nIHN1cGVyYmxvY2sgc2V0dXAgYmVmb3JlIGFueSBSb2NrIFJpZGdlIHBhcnNpbmcgb2NjdXJzLlxcbi0gVGhlIHBhdGNoIHRpZ2h0ZW5zIGJvdW5kcyBjaGVja3MgZm9yIGJsb2NrIHJlYWRzLCBtaXRpZ2F0aW5nIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGJsb2NrIHJlYWRzIG9uIGNvcnJ1cHRlZC9tYWxpY2lvdXMgSVNPIGltYWdlcyAod2hpY2ggZmFsbCB1bmRlciBLQVNBTi9nZW5lcmljIGJvdW5kcyBjaGVja2luZykuXFxuLSBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgc3RhY2svaGVhcCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZS5cXG5cXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgcHJlc2VudCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHNlc3Npb24gYm91bmRhcnkgYW5kIGJsb2NrIGRldmljZSBjYXBhY2l0eSB2YWxpZGF0aW9uIGZvciBSb2NrIFJpZGdlIENvbnRpbnVhdGlvbiBBcmVhIChDRSkgcmVjb3JkcyBpbiBpc29mcy4gVGhlIG1vZGlmaWVkIGNvZGUgaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGJ5IG1vdW50aW5nIGFuZCByZWFkaW5nIGNyYWZ0ZWQgSVNPOTY2MCBmaWxlc3lzdGVtIGltYWdlcyB2aWEgbG9vcC9kaXNrIGRldmljZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEyOjE1OjI5Ljk4ODU1ODA0N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzMTEyMjE5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGYwMjE1YmZlZjNiNzc2MWU3N2Q4YjU5MmU3ZDdkMGIzNGQ1ZTllZWZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgNyAxMjoxNToyOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9pc29mcy9pbm9kZS5jIGIvZnMvaXNvZnMvaW5vZGUuY1xcbmluZGV4IDMzNzgzNmEwYTE3MDQuLmVmY2I4ZmIyYjEwYzQgMTAwNjQ0XFxuLS0tIGEvZnMvaXNvZnMvaW5vZGUuY1xcbisrKyBiL2ZzL2lzb2ZzL2lub2RlLmNcXG5AQCAtODIxLDYgKzgyMSw4IEBAIHN0YXRpYyBpbnQgaXNvZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4gXFx0aWYgKCFzYl9zZXRfYmxvY2tzaXplKHMsIG9yaWdfem9uZXNpemUpKVxcbiBcXHRcXHRnb3RvIG91dF9mcmVlc2JpO1xcbiBcXG4rXFx0c2JpLVxcdTAwM2VzX3Nlc3Npb25fc3RhcnQgPSAodTY0KXZvbF9kZXNjX3N0YXJ0IFxcdTAwM2NcXHUwMDNjXFxuK1xcdFxcdFxcdFxcdChJU09GU19CTE9DS19CSVRTIC0gcy1cXHUwMDNlc19ibG9ja3NpemVfYml0cyk7XFxuIFxcdHNiaS1cXHUwMDNlc19ubHNfaW9jaGFyc2V0ID0gTlVMTDtcXG4gXFxuICNpZmRlZiBDT05GSUdfSk9MSUVUXFxuZGlmZiAtLWdpdCBhL2ZzL2lzb2ZzL2lzb2ZzLmggYi9mcy9pc29mcy9pc29mcy5oXFxuaW5kZXggZGFjYjljZGFlNGZkMS4uMDczMmUxYWEzYjdmYSAxMDA2NDRcXG4tLS0gYS9mcy9pc29mcy9pc29mcy5oXFxuKysrIGIvZnMvaXNvZnMvaXNvZnMuaFxcbkBAIC0zNSw2ICszNSw4IEBAIHN0cnVjdCBpc29mc19zYl9pbmZvIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBzX2ZpcnN0ZGF0YXpvbmU7XFxuIFxcdHVuc2lnbmVkIGxvbmcgc19sb2dfem9uZV9zaXplO1xcbiBcXHR1bnNpZ25lZCBsb25nIHNfbWF4X3NpemU7XFxuK1xcdC8qIFNlc3Npb24gc3RhcnQgaW4gZmlsZXN5c3RlbSBibG9jayB1bml0cy4gKi9cXG4rXFx0dTY0IHNfc2Vzc2lvbl9zdGFydDtcXG4gXFx0XFxuIFxcdGludCAgICAgICAgICAgc19yb2NrX29mZnNldDsgLyogb2Zmc2V0IG9mIFNVU1AgZmllbGRzIHdpdGhpbiBTVSBhcmVhICovXFxuIFxcdHMzMiAgICAgICAgICAgc19zYnNlY3RvcjtcXG5kaWZmIC0tZ2l0IGEvZnMvaXNvZnMvcm9jay5jIGIvZnMvaXNvZnMvcm9jay5jXFxuaW5kZXggMjYyOGYzMWJkM2E1ZC4uYTk2NDVhOWU4NjI4OSAxMDA2NDRcXG4tLS0gYS9mcy9pc29mcy9yb2NrLmNcXG4rKysgYi9mcy9pc29mcy9yb2NrLmNcXG5AQCAtOSw2ICs5LDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wYWdlbWFwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9ibGtkZXYuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJpc29mcy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwicm9jay5oXFxcIlxcbkBAIC04NCw2ICs4NSwxMSBAQCBzdGF0aWMgdm9pZCBpbml0X3JvY2tfc3RhdGUoc3RydWN0IHJvY2tfc3RhdGUgKnJzLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiAgKi9cXG4gc3RhdGljIGludCByb2NrX2NvbnRpbnVlKHN0cnVjdCByb2NrX3N0YXRlICpycylcXG4ge1xcbitcXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gcnMtXFx1MDAzZWlub2RlLVxcdTAwM2VpX3NiO1xcbitcXHRzdHJ1Y3QgaXNvZnNfc2JfaW5mbyAqc2JpID0gSVNPRlNfU0Ioc2IpO1xcbitcXHR1NjQgZXh0ZW50ID0gKHVuc2lnbmVkIGludClycy1cXHUwMDNlY29udF9leHRlbnQ7XFxuK1xcdHU2NCBzZXNzaW9uX2VuZCA9IHNiaS1cXHUwMDNlc19zZXNzaW9uX3N0YXJ0ICtcXG4rXFx0XFx0KCh1NjQpc2JpLVxcdTAwM2VzX256b25lcyBcXHUwMDNjXFx1MDAzYyAoSVNPRlNfQkxPQ0tfQklUUyAtIHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzKSk7XFxuIFxcdGludCByZXQgPSAxO1xcbiBcXHRpbnQgYmxvY2tzaXplID0gMSBcXHUwMDNjXFx1MDAzYyBycy1cXHUwMDNlaW5vZGUtXFx1MDAzZWlfYmxrYml0cztcXG4gXFx0Y29uc3QgaW50IG1pbl9kZV9zaXplID0gb2Zmc2V0b2Yoc3RydWN0IHJvY2tfcmlkZ2UsIHUpO1xcbkBAIC0xMDEsMTEgKzEwNywxNCBAQCBzdGF0aWMgaW50IHJvY2tfY29udGludWUoc3RydWN0IHJvY2tfc3RhdGUgKnJzKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKCh1bnNpZ25lZClycy1cXHUwMDNlY29udF9leHRlbnQgXFx1MDAzZT0gSVNPRlNfU0IocnMtXFx1MDAzZWlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc19uem9uZXMpIHtcXG4rXFx0aWYgKHJzLVxcdTAwM2Vjb250X2V4dGVudCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgKGV4dGVudCBcXHUwMDNjIHNiaS1cXHUwMDNlc19zZXNzaW9uX3N0YXJ0IHx8XFxuK1xcdCAgICAgZXh0ZW50IFxcdTAwM2U9IHNlc3Npb25fZW5kIHx8XFxuK1xcdCAgICAgZXh0ZW50IFxcdTAwM2U9IHNiX2JkZXZfbnJfYmxvY2tzKHNiKSkpIHtcXG4gXFx0XFx0cHJpbnRrKEtFUk5fTk9USUNFIFxcXCJyb2NrOiBjb3JydXB0ZWQgZGlyZWN0b3J5IGVudHJ5LiBcXFwiXFxuIFxcdFxcdFxcdFxcXCJleHRlbnQ9JXUgb3V0IG9mIHZvbHVtZSAobnpvbmVzPSVsdSlcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCh1bnNpZ25lZClycy1cXHUwMDNlY29udF9leHRlbnQsXFxuLVxcdFxcdFxcdElTT0ZTX1NCKHJzLVxcdTAwM2Vpbm9kZS1cXHUwMDNlaV9zYiktXFx1MDAzZXNfbnpvbmVzKTtcXG4rXFx0XFx0XFx0c2JpLVxcdTAwM2VzX256b25lcyk7XFxuIFxcdFxcdHJldCA9IC1FSU87XFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEyOjE1OjMxLjQyMDY5NTg3MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDEzMjA2NTU5NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVNPOTY2MF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlzb2ZzX2ZpbGxfc3VwZXJcIixcbiAgICBcInJvY2tfY29udGludWVcIixcbiAgICBcImdldF9yb2NrX3JpZGdlX2ZpbGVuYW1lXCIsXG4gICAgXCJwYXJzZV9yb2NrX3JpZGdlX2lub2RlXCIsXG4gICAgXCJyb2NrX3JpZGdlX3N5bWxpbmtfcmVhZF9mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc2Vzc2lvbiBib3VuZGFyeSBhbmQgYmxvY2sgZGV2aWNlIGNhcGFjaXR5IHZhbGlkYXRpb24gZm9yIFJvY2sgUmlkZ2UgQ29udGludWF0aW9uIEFyZWEgKENFKSByZWNvcmRzIGluIGlzb2ZzLiBUaGUgbW9kaWZpZWQgY29kZSBpcyBkaXJlY3RseSByZWFjaGFibGUgYnkgbW91bnRpbmcgYW5kIHJlYWRpbmcgY3JhZnRlZCBJU085NjYwIGZpbGVzeXN0ZW0gaW1hZ2VzIHZpYSBsb29wL2Rpc2sgZGV2aWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmMDIxNWJmZWYzYjc3NjFlNzdkOGI1OTJlN2Q3ZDBiMzRkNWU5ZWVmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxMjoxNToyOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2lzb2ZzL2lub2RlLmMgYi9mcy9pc29mcy9pbm9kZS5jXG5pbmRleCAzMzc4MzZhMGExNzA0Li5lZmNiOGZiMmIxMGM0IDEwMDY0NFxuLS0tIGEvZnMvaXNvZnMvaW5vZGUuY1xuKysrIGIvZnMvaXNvZnMvaW5vZGUuY1xuQEAgLTgyMSw2ICs4MjEsOCBAQCBzdGF0aWMgaW50IGlzb2ZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4gXHRpZiAoIXNiX3NldF9ibG9ja3NpemUocywgb3JpZ196b25lc2l6ZSkpXG4gXHRcdGdvdG8gb3V0X2ZyZWVzYmk7XG4gXG4rXHRzYmktXHUwMDNlc19zZXNzaW9uX3N0YXJ0ID0gKHU2NCl2b2xfZGVzY19zdGFydCBcdTAwM2NcdTAwM2NcbitcdFx0XHRcdChJU09GU19CTE9DS19CSVRTIC0gcy1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzKTtcbiBcdHNiaS1cdTAwM2VzX25sc19pb2NoYXJzZXQgPSBOVUxMO1xuIFxuICNpZmRlZiBDT05GSUdfSk9MSUVUXG5kaWZmIC0tZ2l0IGEvZnMvaXNvZnMvaXNvZnMuaCBiL2ZzL2lzb2ZzL2lzb2ZzLmhcbmluZGV4IGRhY2I5Y2RhZTRmZDEuLjA3MzJlMWFhM2I3ZmEgMTAwNjQ0XG4tLS0gYS9mcy9pc29mcy9pc29mcy5oXG4rKysgYi9mcy9pc29mcy9pc29mcy5oXG5AQCAtMzUsNiArMzUsOCBAQCBzdHJ1Y3QgaXNvZnNfc2JfaW5mbyB7XG4gXHR1bnNpZ25lZCBsb25nIHNfZmlyc3RkYXRhem9uZTtcbiBcdHVuc2lnbmVkIGxvbmcgc19sb2dfem9uZV9zaXplO1xuIFx0dW5zaWduZWQgbG9uZyBzX21heF9zaXplO1xuK1x0LyogU2Vzc2lvbiBzdGFydCBpbiBmaWxlc3lzdGVtIGJsb2NrIHVuaXRzLiAqL1xuK1x0dTY0IHNfc2Vzc2lvbl9zdGFydDtcbiBcdFxuIFx0aW50ICAgICAgICAgICBzX3JvY2tfb2Zmc2V0OyAvKiBvZmZzZXQgb2YgU1VTUCBmaWVsZHMgd2l0aGluIFNVIGFyZWEgKi9cbiBcdHMzMiAgICAgICAgICAgc19zYnNlY3RvcjtcbmRpZmYgLS1naXQgYS9mcy9pc29mcy9yb2NrLmMgYi9mcy9pc29mcy9yb2NrLmNcbmluZGV4IDI2MjhmMzFiZDNhNWQuLmE5NjQ1YTllODYyODkgMTAwNjQ0XG4tLS0gYS9mcy9pc29mcy9yb2NrLmNcbisrKyBiL2ZzL2lzb2ZzL3JvY2suY1xuQEAgLTksNiArOSw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZW1hcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYmxrZGV2LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImlzb2ZzLmhcIlxuICNpbmNsdWRlIFwicm9jay5oXCJcbkBAIC04NCw2ICs4NSwxMSBAQCBzdGF0aWMgdm9pZCBpbml0X3JvY2tfc3RhdGUoc3RydWN0IHJvY2tfc3RhdGUgKnJzLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuICAqL1xuIHN0YXRpYyBpbnQgcm9ja19jb250aW51ZShzdHJ1Y3Qgcm9ja19zdGF0ZSAqcnMpXG4ge1xuK1x0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHJzLVx1MDAzZWlub2RlLVx1MDAzZWlfc2I7XG4rXHRzdHJ1Y3QgaXNvZnNfc2JfaW5mbyAqc2JpID0gSVNPRlNfU0Ioc2IpO1xuK1x0dTY0IGV4dGVudCA9ICh1bnNpZ25lZCBpbnQpcnMtXHUwMDNlY29udF9leHRlbnQ7XG4rXHR1NjQgc2Vzc2lvbl9lbmQgPSBzYmktXHUwMDNlc19zZXNzaW9uX3N0YXJ0ICtcbitcdFx0KCh1NjQpc2JpLVx1MDAzZXNfbnpvbmVzIFx1MDAzY1x1MDAzYyAoSVNPRlNfQkxPQ0tfQklUUyAtIHNiLVx1MDAzZXNfYmxvY2tzaXplX2JpdHMpKTtcbiBcdGludCByZXQgPSAxO1xuIFx0aW50IGJsb2Nrc2l6ZSA9IDEgXHUwMDNjXHUwMDNjIHJzLVx1MDAzZWlub2RlLVx1MDAzZWlfYmxrYml0cztcbiBcdGNvbnN0IGludCBtaW5fZGVfc2l6ZSA9IG9mZnNldG9mKHN0cnVjdCByb2NrX3JpZGdlLCB1KTtcbkBAIC0xMDEsMTEgKzEwNywxNCBAQCBzdGF0aWMgaW50IHJvY2tfY29udGludWUoc3RydWN0IHJvY2tfc3RhdGUgKnJzKVxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdGlmICgodW5zaWduZWQpcnMtXHUwMDNlY29udF9leHRlbnQgXHUwMDNlPSBJU09GU19TQihycy1cdTAwM2Vpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX256b25lcykge1xuK1x0aWYgKHJzLVx1MDAzZWNvbnRfZXh0ZW50IFx1MDAyNlx1MDAyNlxuK1x0ICAgIChleHRlbnQgXHUwMDNjIHNiaS1cdTAwM2VzX3Nlc3Npb25fc3RhcnQgfHxcbitcdCAgICAgZXh0ZW50IFx1MDAzZT0gc2Vzc2lvbl9lbmQgfHxcbitcdCAgICAgZXh0ZW50IFx1MDAzZT0gc2JfYmRldl9ucl9ibG9ja3Moc2IpKSkge1xuIFx0XHRwcmludGsoS0VSTl9OT1RJQ0UgXCJyb2NrOiBjb3JydXB0ZWQgZGlyZWN0b3J5IGVudHJ5LiBcIlxuIFx0XHRcdFwiZXh0ZW50PSV1IG91dCBvZiB2b2x1bWUgKG56b25lcz0lbHUpXFxuXCIsXG4gXHRcdFx0KHVuc2lnbmVkKXJzLVx1MDAzZWNvbnRfZXh0ZW50LFxuLVx0XHRcdElTT0ZTX1NCKHJzLVx1MDAzZWlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfbnpvbmVzKTtcbitcdFx0XHRzYmktXHUwMDNlc19uem9uZXMpO1xuIFx0XHRyZXQgPSAtRUlPO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEyOjE1OjMxLjQyMDY5NzM4MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgwMDY1Mjc3MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoaXMgSVNPRlMgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBzZWUgY2hhbmdlcyBhY3Jvc3MgdGhyZWUgZmlsZXMgaW4gdGhlIGBmcy9pc29mc2AgZGlyZWN0b3J5OiBgaW5vZGUuY2AsIGBpc29mcy5oYCwgYW5kIGByb2NrLmNgLiBJbW1lZGlhdGVseSwgbXkgYXR0ZW50aW9uIGlzIGRyYXduIHRvIHRoZSBgaXNvZnNfZmlsbF9zdXBlcmAgZnVuY3Rpb247IHNwZWNpZmljYWxseSB0aGUgbW9kaWZpY2F0aW9uIHNldHRpbmcgYHNiaS1cdTAwM2VzX3Nlc3Npb25fc3RhcnRgLiBUaGF0J3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24gZm9yIGFueSBJU08gZmlsZXN5c3RlbS5cblxuVGhlbiwgdGhlIG1vcmUgaW50ZXJlc3RpbmcgY2hlY2sgaXMgd2l0aGluIGByb2NrX2NvbnRpbnVlYC4gSXQncyBlbnN1cmluZyB0aGF0IHRoZSBgcnMtXHUwMDNlY29udF9leHRlbnRgIHZhbHVlLCB3aGljaCBzZWVtcyB0byBiZSBhbiBleHRlbnQgY29udGludWF0aW9uIHJlZmVyZW5jZSwgaXMgd2l0aGluIHRoZSBleHBlY3RlZCBib3VuZGFyaWVzLiBUaGUgY29uZGl0aW9uYWwgYGlmIChycy1cdTAwM2Vjb250X2V4dGVudCBcdTAwMjZcdTAwMjYgKGV4dGVudCBcdTAwM2Mgc2JpLVx1MDAzZXNfc2Vzc2lvbl9zdGFydCB8fCBleHRlbnQgXHUwMDNlPSBzZXNzaW9uX2VuZCB8fCBleHRlbnQgXHUwMDNlPSBzYl9iZGV2X25yX2Jsb2NrcyhzYikpKWAgY29uZmlybXMgdGhpcy4gV2UncmUgdmVyaWZ5aW5nIHRoYXQgYGV4dGVudGAgZG9lc24ndCBmYWxsIGJlZm9yZSBgc2JpLVx1MDAzZXNfc2Vzc2lvbl9zdGFydGAsIGFmdGVyIGBzZXNzaW9uX2VuZGAsIGFuZCB3ZSBhbHNvIGNoZWNrIGlmIGl0IGdvZXMgcGFzdCB0aGUgdG90YWwgbnVtYmVyIG9mIGJsb2Nrcy4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCBmaXggZm9yIGEgc2VjdG9yIG91dC1vZi1ib3VuZHMgZXJyb3Igd2hlbiBkZWFsaW5nIHdpdGggbXVsdGktc2Vzc2lvbiBDRHMuXG5cbk5vdywgSSdsbCBxdWlja2x5IGNoZWNrIGBmcy9pc29mcy9LY29uZmlnYC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gd2hpY2ggQ09ORklHIG9wdGlvbnMgYXJlIHJlcXVpcmVkIHRvIGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkuIEtub3dpbmcgdGhlIGRlcGVuZGVuY2llcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhpcyBjaGFuZ2UgYW5kIGlmIGFueSByZWxhdGVkIGZlYXR1cmVzIGFyZSBhZmZlY3RlZC4gSSB3YW50IHRvIHNlZSBpZiB0aGlzIGNoYW5nZSBpbXBhY3RzIGFueSBvdGhlciBhcmVhcyBJJ20gZmFtaWxpYXIgd2l0aCwgcGVyaGFwcyBpbnZvbHZpbmcgbXVsdGktc2Vzc2lvbiBvciBSb2NrIFJpZGdlIGV4dGVuc2lvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NjUsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMjoxNTozOS40MjcyMjgxNjFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjUyNTQwNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVNPRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaXNvZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2lzb2ZzL0tjb25maWc9MTk9Y29uZmlnIEpPTElFVFxcbi0tXFxuZnMvaXNvZnMvS2NvbmZpZy0zMC1cXG5mcy9pc29mcy9LY29uZmlnOjMxOmNvbmZpZyBaSVNPRlNcXG5mcy9pc29mcy9LY29uZmlnLTMyLVxcdGJvb2wgXFxcIlRyYW5zcGFyZW50IGRlY29tcHJlc3Npb24gZXh0ZW5zaW9uXFxcIlxcbi0tXFxuZnMvaXNvZnMvTWFrZWZpbGU9OT1pc29mcy0kKENPTkZJR19KT0xJRVQpXFx0Kz0gam9saWV0Lm9cXG5mcy9pc29mcy9NYWtlZmlsZToxMDppc29mcy0kKENPTkZJR19aSVNPRlMpXFx0Kz0gY29tcHJlc3Mub1xcbi0tXFxuZnMvaXNvZnMvY29tcHJlc3MuYz00MD1zdGF0aWMgbG9mZl90IHppc29mc191bmNvbXByZXNzX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBibG9ja19zdGFydCxcXG4tLVxcbmZzL2lzb2ZzL2NvbXByZXNzLmMtNDQte1xcbmZzL2lzb2ZzL2NvbXByZXNzLmM6NDU6XFx0dW5zaWduZWQgaW50IHppc29mc19ibG9ja19zaGlmdCA9IElTT0ZTX0koaW5vZGUpLVxcdTAwM2VpX2Zvcm1hdF9wYXJtWzFdO1xcbmZzL2lzb2ZzL2NvbXByZXNzLmM6NDY6XFx0dW5zaWduZWQgaW50IGJ1ZnNpemUgPSBJU09GU19CVUZGRVJfU0laRShpbm9kZSk7XFxuZnMvaXNvZnMvY29tcHJlc3MuYzo0NzpcXHR1bnNpZ25lZCBpbnQgYnVmc2hpZnQgPSBJU09GU19CVUZGRVJfQklUUyhpbm9kZSk7XFxuZnMvaXNvZnMvY29tcHJlc3MuYy00OC1cXHR1bnNpZ25lZCBpbnQgYnVmbWFzayA9IGJ1ZnNpemUgLSAxO1xcbi0tXFxuZnMvaXNvZnMvY29tcHJlc3MuYz0yMDg9c3RhdGljIGludCB6aXNvZnNfZmlsbF9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgZnVsbF9wYWdlLCBpbnQgcGNvdW50LFxcbi0tXFxuZnMvaXNvZnMvY29tcHJlc3MuYy0yMTItXFx0bG9mZl90IGJsb2NrX3N0YXJ0LCBibG9ja19lbmQ7XFxuZnMvaXNvZnMvY29tcHJlc3MuYzoyMTM6XFx0dW5zaWduZWQgaW50IGhlYWRlcl9zaXplID0gSVNPRlNfSShpbm9kZSktXFx1MDAzZWlfZm9ybWF0X3Bhcm1bMF07XFxuZnMvaXNvZnMvY29tcHJlc3MuYzoyMTQ6XFx0dW5zaWduZWQgaW50IHppc29mc19ibG9ja19zaGlmdCA9IElTT0ZTX0koaW5vZGUpLVxcdTAwM2VpX2Zvcm1hdF9wYXJtWzFdO1xcbmZzL2lzb2ZzL2NvbXByZXNzLmMtMjE1LVxcdHVuc2lnbmVkIGludCBibG9ja3B0cjtcXG4tLVxcbmZzL2lzb2ZzL2NvbXByZXNzLmMtMjE4LVxcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XFxuZnMvaXNvZnMvY29tcHJlc3MuYzoyMTk6XFx0dW5zaWduZWQgaW50IGJsa2JpdHMgPSBJU09GU19CVUZGRVJfQklUUyhpbm9kZSk7XFxuZnMvaXNvZnMvY29tcHJlc3MuYy0yMjAtXFx0dW5zaWduZWQgaW50IGJsa3NpemUgPSAxIFxcdTAwM2NcXHUwMDNjIGJsa2JpdHM7XFxuLS1cXG5mcy9pc29mcy9jb21wcmVzcy5jPTMwNT1zdGF0aWMgaW50IHppc29mc19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuZnMvaXNvZnMvY29tcHJlc3MuYy0zMTAtXFx0aW50IGksIHBjb3VudCwgZnVsbF9wYWdlO1xcbmZzL2lzb2ZzL2NvbXByZXNzLmM6MzExOlxcdHVuc2lnbmVkIGludCB6aXNvZnNfYmxvY2tfc2hpZnQgPSBJU09GU19JKGlub2RlKS1cXHUwMDNlaV9mb3JtYXRfcGFybVsxXTtcXG5mcy9pc29mcy9jb21wcmVzcy5jLTMxMi1cXHR1bnNpZ25lZCBpbnQgemlzb2ZzX3BhZ2VzX3Blcl9jYmxvY2sgPVxcbi0tXFxuZnMvaXNvZnMvZGlyLmM9ODU9c3RhdGljIGludCBkb19pc29mc19yZWFkZGlyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxuZnMvaXNvZnMvZGlyLmMtODgte1xcbmZzL2lzb2ZzL2Rpci5jOjg5OlxcdHVuc2lnbmVkIGxvbmcgYnVmc2l6ZSA9IElTT0ZTX0JVRkZFUl9TSVpFKGlub2RlKTtcXG5mcy9pc29mcy9kaXIuYzo5MDpcXHR1bnNpZ25lZCBjaGFyIGJ1ZmJpdHMgPSBJU09GU19CVUZGRVJfQklUUyhpbm9kZSk7XFxuZnMvaXNvZnMvZGlyLmMtOTEtXFx0dW5zaWduZWQgbG9uZyBibG9jaywgb2Zmc2V0LCBibG9ja19zYXZlZCwgb2Zmc2V0X3NhdmVkO1xcbi0tXFxuZnMvaXNvZnMvZGlyLmMtOTgtXFx0c3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkICpkZTtcXG5mcy9pc29mcy9kaXIuYzo5OTpcXHRzdHJ1Y3QgaXNvZnNfc2JfaW5mbyAqc2JpID0gSVNPRlNfU0IoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbmZzL2lzb2ZzL2Rpci5jLTEwMC1cXG4tLVxcbmZzL2lzb2ZzL2Rpci5jLTEyNS1cXHRcXHRcXHRiaCA9IE5VTEw7XFxuZnMvaXNvZnMvZGlyLmM6MTI2OlxcdFxcdFxcdGN0eC1cXHUwMDNlcG9zID0gKGN0eC1cXHUwMDNlcG9zICsgSVNPRlNfQkxPQ0tfU0laRSkgXFx1MDAyNiB+KElTT0ZTX0JMT0NLX1NJWkUgLSAxKTtcXG5mcy9pc29mcy9kaXIuYy0xMjctXFx0XFx0XFx0YmxvY2sgPSBjdHgtXFx1MDAzZXBvcyBcXHUwMDNlXFx1MDAzZSBidWZiaXRzO1xcbi0tXFxuZnMvaXNvZnMvZGlyLmM9MjUwPWludCBpc29mc19maWxlYXR0cl9nZXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpXFxuZnMvaXNvZnMvZGlyLmMtMjUxLXtcXG5mcy9pc29mcy9kaXIuYzoyNTI6XFx0c3RydWN0IGlzb2ZzX3NiX2luZm8gKnNiaSA9IElTT0ZTX1NCKGRlbnRyeS1cXHUwMDNlZF9zYik7XFxuZnMvaXNvZnMvZGlyLmMtMjUzLVxcbi0tXFxuZnMvaXNvZnMvZXhwb3J0LmM9MjA9aXNvZnNfZXhwb3J0X2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2lzb2ZzL2V4cG9ydC5jLTI2LVxcbmZzL2lzb2ZzL2V4cG9ydC5jOjI3OlxcdGlmIChibG9jayA9PSAwIHx8IGJsb2NrIFxcdTAwM2U9IElTT0ZTX1NCKHNiKS1cXHUwMDNlc19uem9uZXMpXFxuZnMvaXNvZnMvZXhwb3J0LmMtMjgtXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVTVEFMRSk7XFxuLS1cXG5mcy9pc29mcy9leHBvcnQuYz00ND1zdGF0aWMgc3RydWN0IGRlbnRyeSAqaXNvZnNfZXhwb3J0X2dldF9wYXJlbnQoc3RydWN0IGRlbnRyeSAqY2hpbGQpXFxuLS1cXG5mcy9pc29mcy9leHBvcnQuYy00OC1cXHRzdHJ1Y3QgaW5vZGUgKmNoaWxkX2lub2RlID0gZF9pbm9kZShjaGlsZCk7XFxuZnMvaXNvZnMvZXhwb3J0LmM6NDk6XFx0c3RydWN0IGlzb19pbm9kZV9pbmZvICplX2NoaWxkX2lub2RlID0gSVNPRlNfSShjaGlsZF9pbm9kZSk7XFxuZnMvaXNvZnMvZXhwb3J0LmMtNTAtXFx0c3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkICpkZSA9IE5VTEw7XFxuLS1cXG5mcy9pc29mcy9leHBvcnQuYz0xMTk9aXNvZnNfZXhwb3J0X2VuY29kZV9maChzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvaXNvZnMvZXhwb3J0LmMtMTIzLXtcXG5mcy9pc29mcy9leHBvcnQuYzoxMjQ6XFx0c3RydWN0IGlzb19pbm9kZV9pbmZvICogZWkgPSBJU09GU19JKGlub2RlKTtcXG5mcy9pc29mcy9leHBvcnQuYy0xMjUtXFx0aW50IGxlbiA9ICptYXhfbGVuO1xcbi0tXFxuZnMvaXNvZnMvZXhwb3J0LmMtMTQ5LVxcdFxcdHN0cnVjdCBpc29faW5vZGVfaW5mbyAqZXBhcmVudDtcXG5mcy9pc29mcy9leHBvcnQuYzoxNTA6XFx0XFx0ZXBhcmVudCA9IElTT0ZTX0kocGFyZW50KTtcXG5mcy9pc29mcy9leHBvcnQuYy0xNTEtXFx0XFx0ZmgzMlszXSA9IGVwYXJlbnQtXFx1MDAzZWlfaWdldDVfYmxvY2s7XFxuLS1cXG5mcy9pc29mcy9pbm9kZS5jPTUyPXN0YXRpYyB2b2lkIGlzb2ZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2lzb2ZzL2lub2RlLmMtNTMte1xcbmZzL2lzb2ZzL2lub2RlLmM6NTQ6XFx0c3RydWN0IGlzb2ZzX3NiX2luZm8gKnNiaSA9IElTT0ZTX1NCKHNiKTtcXG5mcy9pc29mcy9pbm9kZS5jLTU1LVxcbi0tXFxuZnMvaXNvZnMvaW5vZGUuYz04MD1zdGF0aWMgdm9pZCBpc29mc19mcmVlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvaXNvZnMvaW5vZGUuYy04MS17XFxuZnMvaXNvZnMvaW5vZGUuYzo4MjpcXHRrbWVtX2NhY2hlX2ZyZWUoaXNvZnNfaW5vZGVfY2FjaGVwLCBJU09GU19JKGlub2RlKSk7XFxuZnMvaXNvZnMvaW5vZGUuYy04My19XFxuLS1cXG5mcy9pc29mcy9pbm9kZS5jPTQ0ND1zdGF0aWMgaW50IGlzb2ZzX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBkZW50cnkgKnJvb3QpXFxuZnMvaXNvZnMvaW5vZGUuYy00NDUte1xcbmZzL2lzb2ZzL2lub2RlLmM6NDQ2OlxcdHN0cnVjdCBpc29mc19zYl9pbmZvICpzYmkgPSBJU09GU19TQihyb290LVxcdTAwM2VkX3NiKTtcXG5mcy9pc29mcy9pbm9kZS5jLTQ0Ny1cXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmMtNDcwLVxcbmZzL2lzb2ZzL2lub2RlLmM6NDcxOlxcdGlmIChzYmktXFx1MDAzZXNfZG1vZGUgIT0gSVNPRlNfSU5WQUxJRF9NT0RFKVxcbmZzL2lzb2ZzL2lub2RlLmMtNDcyLVxcdFxcdHNlcV9wcmludGYobSwgXFxcIixkbW9kZT0lb1xcXCIsIHNiaS1cXHUwMDNlc19kbW9kZSk7XFxuZnMvaXNvZnMvaW5vZGUuYzo0NzM6XFx0aWYgKHNiaS1cXHUwMDNlc19mbW9kZSAhPSBJU09GU19JTlZBTElEX01PREUpXFxuZnMvaXNvZnMvaW5vZGUuYy00NzQtXFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiLGZtb2RlPSVvXFxcIiwgc2JpLVxcdTAwM2VzX2Ztb2RlKTtcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmM9NTAzPXN0YXRpYyB1bnNpZ25lZCBpbnQgaXNvZnNfZ2V0X2xhc3Rfc2Vzc2lvbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzMzIgc2Vzc2lvbilcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmMtNTE2LVxcdFxcdGlmIChjZHJvbV9yZWFkX3RvY2VudHJ5KGNkaSwgXFx1MDAyNnRlKSA9PSAwKSB7XFxuZnMvaXNvZnMvaW5vZGUuYzo1MTc6XFx0XFx0XFx0cHJpbnRrKEtFUk5fREVCVUcgXFxcIklTT0ZTOiBTZXNzaW9uICVkIHN0YXJ0ICVkIHR5cGUgJWRcXFxcblxcXCIsXFxuZnMvaXNvZnMvaW5vZGUuYy01MTgtXFx0XFx0XFx0XFx0c2Vzc2lvbiwgdGUuY2R0ZV9hZGRyLmxiYSxcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmMtNTIzLVxcbmZzL2lzb2ZzL2lub2RlLmM6NTI0OlxcdFxcdHByaW50ayhLRVJOX0VSUiBcXFwiSVNPRlM6IEludmFsaWQgc2Vzc2lvbiBudW1iZXIgb3IgdHlwZSBvZiB0cmFja1xcXFxuXFxcIik7XFxuZnMvaXNvZnMvaW5vZGUuYy01MjUtXFx0fVxcbi0tXFxuZnMvaXNvZnMvaW5vZGUuYz01NzQ9c3RhdGljIGludCBpc29mc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvaXNvZnMvaW5vZGUuYy02MDctXFx0XFx0cHJpbnRrKEtFUk5fV0FSTklOR1xcbmZzL2lzb2ZzL2lub2RlLmM6NjA4OlxcdFxcdCAgICAgICBcXFwiSVNPRlM6IHVuc3VwcG9ydGVkL2ludmFsaWQgaGFyZHdhcmUgc2VjdG9yIHNpemUgJWRcXFxcblxcXCIsXFxuZnMvaXNvZnMvaW5vZGUuYy02MDktXFx0XFx0XFx0YmRldl9sb2dpY2FsX2Jsb2NrX3NpemUocy1cXHUwMDNlc19iZGV2KSk7XFxuLS1cXG5mcy9pc29mcy9pbm9kZS5jLTYxNC1cXHRcXHRwcmludGsoS0VSTl9FUlJcXG5mcy9pc29mcy9pbm9kZS5jOjYxNTpcXHRcXHQgICAgICAgXFxcIklTT0ZTOiB1bmFibGUgdG8gc2V0IGJsb2Nrc2l6ZVxcXFxuXFxcIik7XFxuZnMvaXNvZnMvaW5vZGUuYy02MTYtXFx0XFx0Z290byBvdXRfZnJlZXNiaTtcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmMtNjMwLVxcbmZzL2lzb2ZzL2lub2RlLmM6NjMxOlxcdFxcdGJsb2NrID0gaXNvX2Jsa251bSBcXHUwMDNjXFx1MDAzYyAoSVNPRlNfQkxPQ0tfQklUUyAtIHMtXFx1MDAzZXNfYmxvY2tzaXplX2JpdHMpO1xcbmZzL2lzb2ZzL2lub2RlLmMtNjMyLVxcdFxcdGlmICghKGJoID0gc2JfYnJlYWQocywgYmxvY2spKSlcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmMtNzU0LVxcbmZzL2lzb2ZzL2lub2RlLmM6NzU1OlxcdHMtXFx1MDAzZXNfbWFnaWMgPSBJU09GU19TVVBFUl9NQUdJQztcXG5mcy9pc29mcy9pbm9kZS5jLTc1Ni1cXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmMtNzczLSNpZm5kZWYgQkVRVUlFVFxcbmZzL2lzb2ZzL2lub2RlLmM6Nzc0OlxcdHByaW50ayhLRVJOX0RFQlVHIFxcXCJJU09GUzogTWF4IHNpemU6JWxkICAgTG9nIHpvbmUgc2l6ZTolbGRcXFxcblxcXCIsXFxuZnMvaXNvZnMvaW5vZGUuYy03NzUtXFx0XFx0c2JpLVxcdTAwM2VzX21heF9zaXplLCAxVUwgXFx1MDAzY1xcdTAwM2Mgc2JpLVxcdTAwM2VzX2xvZ196b25lX3NpemUpO1xcbmZzL2lzb2ZzL2lub2RlLmM6Nzc2OlxcdHByaW50ayhLRVJOX0RFQlVHIFxcXCJJU09GUzogRmlyc3QgZGF0YXpvbmU6JWxkXFxcXG5cXFwiLCBzYmktXFx1MDAzZXNfZmlyc3RkYXRhem9uZSk7XFxuZnMvaXNvZnMvaW5vZGUuYy03NzctXFx0aWYoc2JpLVxcdTAwM2VzX2hpZ2hfc2llcnJhKVxcbmZzL2lzb2ZzL2lub2RlLmM6Nzc4OlxcdFxcdHByaW50ayhLRVJOX0RFQlVHIFxcXCJJU09GUzogRGlzYyBpbiBIaWdoIFNpZXJyYSBmb3JtYXQuXFxcXG5cXFwiKTtcXG5mcy9pc29mcy9pbm9kZS5jLTc3OS0jZW5kaWZcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmMtODI0LVxcdHNiaS1cXHUwMDNlc19zZXNzaW9uX3N0YXJ0ID0gKHU2NCl2b2xfZGVzY19zdGFydCBcXHUwMDNjXFx1MDAzY1xcbmZzL2lzb2ZzL2lub2RlLmM6ODI1OlxcdFxcdFxcdFxcdChJU09GU19CTE9DS19CSVRTIC0gcy1cXHUwMDNlc19ibG9ja3NpemVfYml0cyk7XFxuZnMvaXNvZnMvaW5vZGUuYy04MjYtXFx0c2JpLVxcdTAwM2VzX25sc19pb2NoYXJzZXQgPSBOVUxMO1xcbi0tXFxuZnMvaXNvZnMvaW5vZGUuYy04NTctXFx0ICovXFxuZnMvaXNvZnMvaW5vZGUuYzo4NTg6XFx0aWYgKG9wdC1cXHUwMDNlZm1vZGUgIT0gSVNPRlNfSU5WQUxJRF9NT0RFKVxcbmZzL2lzb2ZzL2lub2RlLmMtODU5LVxcdFxcdHNiaS1cXHUwMDNlc19mbW9kZSA9IG9wdC1cXHUwMDNlZm1vZGUgXFx1MDAyNiAwNzc3O1xcbmZzL2lzb2ZzL2lub2RlLmMtODYwLVxcdGVsc2VcXG5mcy9pc29mcy9pbm9kZS5jOjg2MTpcXHRcXHRzYmktXFx1MDAzZXNfZm1vZGUgPSBJU09GU19JTlZBTElEX01PREU7XFxuZnMvaXNvZnMvaW5vZGUuYzo4NjI6XFx0aWYgKG9wdC1cXHUwMDNlZG1vZGUgIT0gSVNPRlNfSU5WQUxJRF9NT0RFKVxcbmZzL2lzb2ZzL2lub2RlLmMtODYzLVxcdFxcdHNiaS1cXHUwMDNlc19kbW9kZSA9IG9wdC1cXHUwMDNlZG1vZGUgXFx1MDAyNiAwNzc3O1xcbmZzL2lzb2ZzL2lub2RlLmMtODY0LVxcdGVsc2VcXG5mcy9pc29mcy9pbm9kZS5jOjg2NTpcXHRcXHRzYmktXFx1MDAzZXNfZG1vZGUgPSBJU09GU19JTlZBTElEX01PREU7XFxuZnMvaXNvZnMvaW5vZGUuYy04NjYtXFxuLS1cXG5mcy9pc29mcy9pbm9kZS5jLTg4MC1cXHRcXHRcXHRwcmludGsoS0VSTl9OT1RJQ0VcXG5mcy9pc29mcy9pbm9kZS5jOjg4MTpcXHRcXHRcXHQgICAgICAgXFxcIklTT0ZTOiByb290IGlub2RlIGlzIHVudXNhYmxlLiBcXFwiXFxuZnMvaXNvZnMvaW5vZGUuYy04ODItXFx0XFx0XFx0ICAgICAgIFxcXCJEaXNhYmxpbmcgUm9jayBSaWRnZSBhbmQgc3dpdGNoaW5nIHRvIEpvbGlldC5cXFwiKTtcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmMtODk2LVxcdFxcdHByaW50ayhLRVJOX05PVElDRVxcbmZzL2lzb2ZzL2lub2RlLmM6ODk3OlxcdFxcdFxcdFxcXCJJU09GUzogcHJpbWFyeSByb290IGRpcmVjdG9yeSBpcyBlbXB0eS4gXFxcIlxcbmZzL2lzb2ZzL2lub2RlLmMtODk4LVxcdFxcdFxcdFxcXCJEaXNhYmxpbmcgUm9jayBSaWRnZSBhbmQgc3dpdGNoaW5nIHRvIEpvbGlldC5cXFwiKTtcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmMtOTE2LVxcdFxcdFxcdHByaW50ayhLRVJOX0RFQlVHXFxuZnMvaXNvZnMvaW5vZGUuYzo5MTc6XFx0XFx0XFx0XFx0XFxcIklTT0ZTOiBjaGFuZ2luZyB0byBzZWNvbmRhcnkgcm9vdFxcXFxuXFxcIik7XFxuZnMvaXNvZnMvaW5vZGUuYy05MTgtXFx0XFx0XFx0aXB1dChpbm9kZSk7XFxuLS1cXG5mcy9pc29mcy9pbm9kZS5jLTk4MC1vdXRfYmFkX3pvbmVfc2l6ZTpcXG5mcy9pc29mcy9pbm9kZS5jOjk4MTpcXHRwcmludGsoS0VSTl9XQVJOSU5HIFxcXCJJU09GUzogQmFkIGxvZ2ljYWwgem9uZSBzaXplICVsZFxcXFxuXFxcIixcXG5mcy9pc29mcy9pbm9kZS5jLTk4Mi1cXHRcXHRzYmktXFx1MDAzZXNfbG9nX3pvbmVfc2l6ZSk7XFxuLS1cXG5mcy9pc29mcy9pbm9kZS5jLTk4NC1vdXRfYmFkX3NpemU6XFxuZnMvaXNvZnMvaW5vZGUuYzo5ODU6XFx0cHJpbnRrKEtFUk5fV0FSTklORyBcXFwiSVNPRlM6IExvZ2ljYWwgem9uZSBzaXplKCVkKSBcXHUwMDNjIGhhcmR3YXJlIGJsb2Nrc2l6ZSgldSlcXFxcblxcXCIsXFxuZnMvaXNvZnMvaW5vZGUuYy05ODYtXFx0XFx0b3JpZ196b25lc2l6ZSwgb3B0LVxcdTAwM2VibG9ja3NpemUpO1xcbi0tXFxuZnMvaXNvZnMvaW5vZGUuYy05ODktXFx0aWYgKCFzaWxlbnQpXFxuZnMvaXNvZnMvaW5vZGUuYzo5OTA6XFx0XFx0cHJpbnRrKEtFUk5fV0FSTklORyBcXFwiSVNPRlM6IFVuYWJsZSB0byBpZGVudGlmeSBDRC1ST00gZm9ybWF0LlxcXFxuXFxcIik7XFxuZnMvaXNvZnMvaW5vZGUuYy05OTEtXFxuLS1cXG5mcy9pc29mcy9pbm9kZS5jPTEwMDE9c3RhdGljIGludCBpc29mc19zdGF0ZnMgKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZilcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmMtMTAwNS1cXG5mcy9pc29mcy9pbm9kZS5jOjEwMDY6XFx0YnVmLVxcdTAwM2VmX3R5cGUgPSBJU09GU19TVVBFUl9NQUdJQztcXG5mcy9pc29mcy9pbm9kZS5jLTEwMDctXFx0YnVmLVxcdTAwM2VmX2JzaXplID0gc2ItXFx1MDAzZXNfYmxvY2tzaXplO1xcbmZzL2lzb2ZzL2lub2RlLmM6MTAwODpcXHRidWYtXFx1MDAzZWZfYmxvY2tzID0gKElTT0ZTX1NCKHNiKS1cXHUwMDNlc19uem9uZXNcXG5mcy9pc29mcy9pbm9kZS5jOjEwMDk6XFx0XFx0XFx1MDAzY1xcdTAwM2MgKElTT0ZTX1NCKHNiKS1cXHUwMDNlc19sb2dfem9uZV9zaXplIC0gc2ItXFx1MDAzZXNfYmxvY2tzaXplX2JpdHMpKTtcXG5mcy9pc29mcy9pbm9kZS5jLTEwMTAtXFx0YnVmLVxcdTAwM2VmX2JmcmVlID0gMDtcXG5mcy9pc29mcy9pbm9kZS5jLTEwMTEtXFx0YnVmLVxcdTAwM2VmX2JhdmFpbCA9IDA7XFxuZnMvaXNvZnMvaW5vZGUuYzoxMDEyOlxcdGJ1Zi1cXHUwMDNlZl9maWxlcyA9IElTT0ZTX1NCKHNiKS1cXHUwMDNlc19uaW5vZGVzO1xcbmZzL2lzb2ZzL2lub2RlLmMtMTAxMy1cXHRidWYtXFx1MDAzZWZfZmZyZWUgPSAwO1xcbi0tXFxuZnMvaXNvZnMvaW5vZGUuYz0xMDI0PWludCBpc29mc19nZXRfYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jayxcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmMtMTAzMS1cXHRpbnQgc2VjdGlvbiwgcnYsIGVycm9yO1xcbmZzL2lzb2ZzL2lub2RlLmM6MTAzMjpcXHRzdHJ1Y3QgaXNvX2lub2RlX2luZm8gKmVpID0gSVNPRlNfSShpbm9kZSk7XFxuZnMvaXNvZnMvaW5vZGUuYy0xMDMzLVxcbi0tXFxuZnMvaXNvZnMvaW5vZGUuYy0xMDQzLVxcdGZpcnN0ZXh0ID0gZWktXFx1MDAzZWlfZmlyc3RfZXh0ZW50O1xcbmZzL2lzb2ZzL2lub2RlLmM6MTA0NDpcXHRzZWN0X3NpemUgPSBlaS1cXHUwMDNlaV9zZWN0aW9uX3NpemUgXFx1MDAzZVxcdTAwM2UgSVNPRlNfQlVGRkVSX0JJVFMoaW5vZGUpO1xcbmZzL2lzb2ZzL2lub2RlLmMtMTA0NS1cXHRuZXh0YmxrID0gZWktXFx1MDAzZWlfbmV4dF9zZWN0aW9uX2Jsb2NrO1xcbi0tXFxuZnMvaXNvZnMvaW5vZGUuYy0xMDU2LVxcdFxcdCAqL1xcbmZzL2lzb2ZzL2lub2RlLmM6MTA1NzpcXHRcXHRpZiAoYl9vZmYgXFx1MDAzZSAoKGlub2RlLVxcdTAwM2VpX3NpemUgKyBQQUdFX1NJWkUgLSAxKSBcXHUwMDNlXFx1MDAzZSBJU09GU19CVUZGRVJfQklUUyhpbm9kZSkpKSB7XFxuZnMvaXNvZnMvaW5vZGUuYy0xMDU4LVxcdFxcdFxcdHByaW50ayhLRVJOX0RFQlVHIFxcXCIlczogYmxvY2sgXFx1MDAzZT0gRU9GICglbHUsICVsbHUpXFxcXG5cXFwiLFxcbi0tXFxuZnMvaXNvZnMvaW5vZGUuYy0xMDc2LVxcdFxcdFxcdH1cXG5mcy9pc29mcy9pbm9kZS5jOjEwNzc6XFx0XFx0XFx0Zmlyc3RleHQgID0gSVNPRlNfSShuaW5vZGUpLVxcdTAwM2VpX2ZpcnN0X2V4dGVudDtcXG5mcy9pc29mcy9pbm9kZS5jOjEwNzg6XFx0XFx0XFx0c2VjdF9zaXplID0gSVNPRlNfSShuaW5vZGUpLVxcdTAwM2VpX3NlY3Rpb25fc2l6ZSBcXHUwMDNlXFx1MDAzZSBJU09GU19CVUZGRVJfQklUUyhuaW5vZGUpO1xcbmZzL2lzb2ZzL2lub2RlLmM6MTA3OTpcXHRcXHRcXHRuZXh0YmxrICAgPSBJU09GU19JKG5pbm9kZSktXFx1MDAzZWlfbmV4dF9zZWN0aW9uX2Jsb2NrO1xcbmZzL2lzb2ZzL2lub2RlLmM6MTA4MDpcXHRcXHRcXHRuZXh0b2ZmICAgPSBJU09GU19JKG5pbm9kZSktXFx1MDAzZWlfbmV4dF9zZWN0aW9uX29mZnNldDtcXG5mcy9pc29mcy9pbm9kZS5jLTEwODEtXFx0XFx0XFx0aXB1dChuaW5vZGUpO1xcbi0tXFxuZnMvaXNvZnMvaW5vZGUuYz0xMTcxPXN0YXRpYyBpbnQgaXNvZnNfcmVhZF9sZXZlbDNfc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2lzb2ZzL2lub2RlLmMtMTE3Mi17XFxuZnMvaXNvZnMvaW5vZGUuYzoxMTczOlxcdHVuc2lnbmVkIGxvbmcgYnVmc2l6ZSA9IElTT0ZTX0JVRkZFUl9TSVpFKGlub2RlKTtcXG5mcy9pc29mcy9pbm9kZS5jOjExNzQ6XFx0aW50IGhpZ2hfc2llcnJhID0gSVNPRlNfU0IoaW5vZGUtXFx1MDAzZWlfc2IpLVxcdTAwM2VzX2hpZ2hfc2llcnJhO1xcbmZzL2lzb2ZzL2lub2RlLmMtMTE3NS1cXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDtcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmMtMTE3OS1cXHRzdHJ1Y3QgaXNvX2RpcmVjdG9yeV9yZWNvcmQgKnRtcGRlID0gTlVMTDtcXG5mcy9pc29mcy9pbm9kZS5jOjExODA6XFx0c3RydWN0IGlzb19pbm9kZV9pbmZvICplaSA9IElTT0ZTX0koaW5vZGUpO1xcbmZzL2lzb2ZzL2lub2RlLmMtMTE4MS1cXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmMtMTI2MC1vdXRfbm9yZWFkOlxcbmZzL2lzb2ZzL2lub2RlLmM6MTI2MTpcXHRwcmludGsoS0VSTl9JTkZPIFxcXCJJU09GUzogdW5hYmxlIHRvIHJlYWQgaS1ub2RlIGJsb2NrICVsdVxcXFxuXFxcIiwgYmxvY2spO1xcbmZzL2lzb2ZzL2lub2RlLmMtMTI2Mi1cXHRrZnJlZSh0bXBkZSk7XFxuLS1cXG5mcy9pc29mcy9pbm9kZS5jPTEyNzI9c3RhdGljIGludCBpc29mc19yZWFkX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCByZWxvY2F0ZWQpXFxuLS1cXG5mcy9pc29mcy9pbm9kZS5jLTEyNzQtXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVxcdTAwM2VpX3NiO1xcbmZzL2lzb2ZzL2lub2RlLmM6MTI3NTpcXHRzdHJ1Y3QgaXNvZnNfc2JfaW5mbyAqc2JpID0gSVNPRlNfU0Ioc2IpO1xcbmZzL2lzb2ZzL2lub2RlLmM6MTI3NjpcXHR1bnNpZ25lZCBsb25nIGJ1ZnNpemUgPSBJU09GU19CVUZGRVJfU0laRShpbm9kZSk7XFxuZnMvaXNvZnMvaW5vZGUuYy0xMjc3LVxcdHVuc2lnbmVkIGxvbmcgYmxvY2s7XFxuLS1cXG5mcy9pc29mcy9pbm9kZS5jLTEyODMtXFx0dW5zaWduZWQgbG9uZyBvZmZzZXQ7XFxuZnMvaXNvZnMvaW5vZGUuYzoxMjg0OlxcdHN0cnVjdCBpc29faW5vZGVfaW5mbyAqZWkgPSBJU09GU19JKGlub2RlKTtcXG5mcy9pc29mcy9pbm9kZS5jLTEyODUtXFx0aW50IHJldCA9IC1FSU87XFxuLS1cXG5mcy9pc29mcy9pbm9kZS5jLTEzMTgtXFx0XFx0XFx0XFx0XFx0ZWktXFx1MDAzZWlfaWdldDVfb2Zmc2V0LFxcbmZzL2lzb2ZzL2lub2RlLmM6MTMxOTpcXHRcXHRcXHRcXHRcXHRJU09GU19CVUZGRVJfQklUUyhpbm9kZSkpO1xcbmZzL2lzb2ZzL2lub2RlLmMtMTMyMC1cXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmMtMTMyNC1cXHRpZiAoZGUtXFx1MDAzZWZsYWdzWy1oaWdoX3NpZXJyYV0gXFx1MDAyNiAyKSB7XFxuZnMvaXNvZnMvaW5vZGUuYzoxMzI1OlxcdFxcdGlmIChzYmktXFx1MDAzZXNfZG1vZGUgIT0gSVNPRlNfSU5WQUxJRF9NT0RFKVxcbmZzL2lzb2ZzL2lub2RlLmMtMTMyNi1cXHRcXHRcXHRpbm9kZS1cXHUwMDNlaV9tb2RlID0gU19JRkRJUiB8IHNiaS1cXHUwMDNlc19kbW9kZTtcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmMtMTMzNi1cXHR9IGVsc2Uge1xcbmZzL2lzb2ZzL2lub2RlLmM6MTMzNzpcXHRcXHRpZiAoc2JpLVxcdTAwM2VzX2Ztb2RlICE9IElTT0ZTX0lOVkFMSURfTU9ERSkge1xcbmZzL2lzb2ZzL2lub2RlLmMtMTMzOC1cXHRcXHRcXHRpbm9kZS1cXHUwMDNlaV9tb2RlID0gU19JRlJFRyB8IHNiaS1cXHUwMDNlc19mbW9kZTtcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmMtMTM3OC1cXHRpZiAoZGUtXFx1MDAzZWludGVybGVhdmVbMF0pIHtcXG5mcy9pc29mcy9pbm9kZS5jOjEzNzk6XFx0XFx0cHJpbnRrKEtFUk5fREVCVUcgXFxcIklTT0ZTOiBJbnRlcmxlYXZlZCBmaWxlcyBub3QgKHlldCkgc3VwcG9ydGVkLlxcXFxuXFxcIik7XFxuZnMvaXNvZnMvaW5vZGUuYy0xMzgwLVxcdFxcdGlub2RlLVxcdTAwM2VpX3NpemUgPSAwO1xcbi0tXFxuZnMvaXNvZnMvaW5vZGUuYy0xMzg1LVxcdGlmIChkZS1cXHUwMDNlZmlsZV91bml0X3NpemVbMF0gIT0gMCkge1xcbmZzL2lzb2ZzL2lub2RlLmM6MTM4NjpcXHRcXHRwcmludGsoS0VSTl9ERUJVRyBcXFwiSVNPRlM6IEZpbGUgdW5pdCBzaXplICE9IDAgZm9yIElTTyBmaWxlICglbGx1KS5cXFxcblxcXCIsXFxuZnMvaXNvZnMvaW5vZGUuYy0xMzg3LVxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX2lubyk7XFxuLS1cXG5mcy9pc29mcy9pbm9kZS5jLTEzOTMtXFx0aWYoKGRlLVxcdTAwM2VmbGFnc1staGlnaF9zaWVycmFdIFxcdTAwMjYgfjIpIT0gMCl7XFxuZnMvaXNvZnMvaW5vZGUuYzoxMzk0OlxcdFxcdHByaW50ayhLRVJOX0RFQlVHIFxcXCJJU09GUzogVW51c3VhbCBmbGFnIHNldHRpbmdzIGZvciBJU08gZmlsZSBcXFwiXFxuZnMvaXNvZnMvaW5vZGUuYy0xMzk1LVxcdFxcdFxcdFxcdFxcXCIoJWxsdSAleCkuXFxcXG5cXFwiLFxcbi0tXFxuZnMvaXNvZnMvaW5vZGUuYy0xNDI0LVxcdGlmIChTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpIFxcdTAwMjZcXHUwMDI2IHNiaS1cXHUwMDNlc19vdmVycmlkZXJvY2twZXJtIFxcdTAwMjZcXHUwMDI2XFxuZnMvaXNvZnMvaW5vZGUuYzoxNDI1OlxcdCAgICBzYmktXFx1MDAzZXNfZG1vZGUgIT0gSVNPRlNfSU5WQUxJRF9NT0RFKVxcbmZzL2lzb2ZzL2lub2RlLmMtMTQyNi1cXHRcXHRpbm9kZS1cXHUwMDNlaV9tb2RlID0gU19JRkRJUiB8IHNiaS1cXHUwMDNlc19kbW9kZTtcXG5mcy9pc29mcy9pbm9kZS5jLTE0MjctXFx0aWYgKFNfSVNSRUcoaW5vZGUtXFx1MDAzZWlfbW9kZSkgXFx1MDAyNlxcdTAwMjYgc2JpLVxcdTAwM2VzX292ZXJyaWRlcm9ja3Blcm0gXFx1MDAyNlxcdTAwMjZcXG5mcy9pc29mcy9pbm9kZS5jOjE0Mjg6XFx0ICAgIHNiaS1cXHUwMDNlc19mbW9kZSAhPSBJU09GU19JTlZBTElEX01PREUpXFxuZnMvaXNvZnMvaW5vZGUuYy0xNDI5LVxcdFxcdGlub2RlLVxcdTAwM2VpX21vZGUgPSBTX0lGUkVHIHwgc2JpLVxcdTAwM2VzX2Ztb2RlO1xcbi0tXFxuZnMvaXNvZnMvaW5vZGUuYy0xNDM0LVxcdFxcdHN3aXRjaCAoZWktXFx1MDAzZWlfZmlsZV9mb3JtYXQpIHtcXG5mcy9pc29mcy9pbm9kZS5jOjE0MzU6I2lmZGVmIENPTkZJR19aSVNPRlNcXG5mcy9pc29mcy9pbm9kZS5jLTE0MzYtXFx0XFx0Y2FzZSBpc29mc19maWxlX2NvbXByZXNzZWQ6XFxuLS1cXG5mcy9pc29mcy9pbm9kZS5jLTE0NTUtXFx0fSBlbHNlIHtcXG5mcy9pc29mcy9pbm9kZS5jOjE0NTY6XFx0XFx0cHJpbnRrKEtFUk5fREVCVUcgXFxcIklTT0ZTOiBJbnZhbGlkIGZpbGUgdHlwZSAwJTA0byBmb3IgaW5vZGUgJWxsdS5cXFxcblxcXCIsXFxuZnMvaXNvZnMvaW5vZGUuYy0xNDU3LVxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX21vZGUsIGlub2RlLVxcdTAwM2VpX2lubyk7XFxuLS1cXG5mcy9pc29mcy9pbm9kZS5jLTE0Njgtb3V0X2JhZHJlYWQ6XFxuZnMvaXNvZnMvaW5vZGUuYzoxNDY5OlxcdHByaW50ayhLRVJOX1dBUk5JTkcgXFxcIklTT0ZTOiB1bmFibGUgdG8gcmVhZCBpLW5vZGUgYmxvY2tcXFxcblxcXCIpO1xcbmZzL2lzb2ZzL2lub2RlLmMtMTQ3MC1mYWlsOlxcbi0tXFxuZnMvaXNvZnMvaW5vZGUuYz0xNDc5PXN0YXRpYyBpbnQgaXNvZnNfaWdldDVfdGVzdChzdHJ1Y3QgaW5vZGUgKmlubywgdm9pZCAqZGF0YSlcXG5mcy9pc29mcy9pbm9kZS5jLTE0ODAte1xcbmZzL2lzb2ZzL2lub2RlLmM6MTQ4MTpcXHRzdHJ1Y3QgaXNvX2lub2RlX2luZm8gKmkgPSBJU09GU19JKGlubyk7XFxuZnMvaXNvZnMvaW5vZGUuYy0xNDgyLVxcdHN0cnVjdCBpc29mc19pZ2V0NV9jYWxsYmFja19kYXRhICpkID1cXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmM9MTQ4OD1zdGF0aWMgaW50IGlzb2ZzX2lnZXQ1X3NldChzdHJ1Y3QgaW5vZGUgKmlubywgdm9pZCAqZGF0YSlcXG5mcy9pc29mcy9pbm9kZS5jLTE0ODkte1xcbmZzL2lzb2ZzL2lub2RlLmM6MTQ5MDpcXHRzdHJ1Y3QgaXNvX2lub2RlX2luZm8gKmkgPSBJU09GU19JKGlubyk7XFxuZnMvaXNvZnMvaW5vZGUuYy0xNDkxLVxcdHN0cnVjdCBpc29mc19pZ2V0NV9jYWxsYmFja19kYXRhICpkID1cXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmM9MTU1OT1zdGF0aWMgaW50IGlzb2ZzX2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9pc29mcy9pbm9kZS5jLTE1NzUtXFx0b3B0LVxcdTAwM2VibG9ja3NpemUgPSAxMDI0O1xcbmZzL2lzb2ZzL2lub2RlLmM6MTU3NjpcXHRvcHQtXFx1MDAzZWZtb2RlID0gb3B0LVxcdTAwM2VkbW9kZSA9IElTT0ZTX0lOVkFMSURfTU9ERTtcXG5mcy9pc29mcy9pbm9kZS5jLTE1NzctXFx0b3B0LVxcdTAwM2V1aWRfc2V0ID0gMDtcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmM9MTYwMz1zdGF0aWMgaW50IF9faW5pdCBpbml0X2lzbzk2NjBfZnModm9pZClcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmMtMTYwNy1cXHRcXHRnb3RvIG91dDtcXG5mcy9pc29mcy9pbm9kZS5jOjE2MDg6I2lmZGVmIENPTkZJR19aSVNPRlNcXG5mcy9pc29mcy9pbm9kZS5jLTE2MDktXFx0ZXJyID0gemlzb2ZzX2luaXQoKTtcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmMtMTYxNy1vdXQyOlxcbmZzL2lzb2ZzL2lub2RlLmM6MTYxODojaWZkZWYgQ09ORklHX1pJU09GU1xcbmZzL2lzb2ZzL2lub2RlLmMtMTYxOS1cXHR6aXNvZnNfY2xlYW51cCgpO1xcbi0tXFxuZnMvaXNvZnMvaW5vZGUuYz0xNjI3PXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X2lzbzk2NjBfZnModm9pZClcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmMtMTYyOS0gICAgICAgIHVucmVnaXN0ZXJfZmlsZXN5c3RlbShcXHUwMDI2aXNvOTY2MF9mc190eXBlKTtcXG5mcy9pc29mcy9pbm9kZS5jOjE2MzA6I2lmZGVmIENPTkZJR19aSVNPRlNcXG5mcy9pc29mcy9pbm9kZS5jLTE2MzEtXFx0emlzb2ZzX2NsZWFudXAoKTtcXG4tLVxcbmZzL2lzb2ZzL2lzb2ZzLmg9MzI9c3RydWN0IGlzb2ZzX3NiX2luZm8ge1xcbi0tXFxuZnMvaXNvZnMvaXNvZnMuaC02NC1cXG5mcy9pc29mcy9pc29mcy5oOjY1OiNkZWZpbmUgSVNPRlNfSU5WQUxJRF9NT0RFICgodW1vZGVfdCkgLTEpXFxuZnMvaXNvZnMvaXNvZnMuaC02Ni1cXG5mcy9pc29mcy9pc29mcy5oOjY3OnN0YXRpYyBpbmxpbmUgc3RydWN0IGlzb2ZzX3NiX2luZm8gKklTT0ZTX1NCKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvaXNvZnMvaXNvZnMuaC02OC17XFxuLS1cXG5mcy9pc29mcy9pc29mcy5oLTcxLVxcbmZzL2lzb2ZzL2lzb2ZzLmg6NzI6c3RhdGljIGlubGluZSBzdHJ1Y3QgaXNvX2lub2RlX2luZm8gKklTT0ZTX0koc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9pc29mcy9pc29mcy5oLTczLXtcXG4tLVxcbmZzL2lzb2ZzL2pvbGlldC5jPTQyPWdldF9qb2xpZXRfZmlsZW5hbWUoc3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkICogZGUsIHVuc2lnbmVkIGNoYXIgKm91dG5hbWUsIHN0cnVjdCBpbm9kZSAqIGlub2RlKVxcbi0tXFxuZnMvaXNvZnMvam9saWV0LmMtNDYtXFxuZnMvaXNvZnMvam9saWV0LmM6NDc6XFx0bmxzID0gSVNPRlNfU0IoaW5vZGUtXFx1MDAzZWlfc2IpLVxcdTAwM2VzX25sc19pb2NoYXJzZXQ7XFxuZnMvaXNvZnMvam9saWV0LmMtNDgtXFxuLS1cXG5mcy9pc29mcy9uYW1laS5jPTQ5PWlzb2ZzX2ZpbmRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL2lzb2ZzL25hbWVpLmMtNTIte1xcbmZzL2lzb2ZzL25hbWVpLmM6NTM6XFx0dW5zaWduZWQgbG9uZyBidWZzaXplID0gSVNPRlNfQlVGRkVSX1NJWkUoZGlyKTtcXG5mcy9pc29mcy9uYW1laS5jOjU0OlxcdHVuc2lnbmVkIGNoYXIgYnVmYml0cyA9IElTT0ZTX0JVRkZFUl9CSVRTKGRpcik7XFxuZnMvaXNvZnMvbmFtZWkuYy01NS1cXHR1bnNpZ25lZCBsb25nIGJsb2NrLCBmX3Bvcywgb2Zmc2V0LCBibG9ja19zYXZlZCwgb2Zmc2V0X3NhdmVkO1xcbmZzL2lzb2ZzL25hbWVpLmMtNTYtXFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7XFxuZnMvaXNvZnMvbmFtZWkuYzo1NzpcXHRzdHJ1Y3QgaXNvZnNfc2JfaW5mbyAqc2JpID0gSVNPRlNfU0IoZGlyLVxcdTAwM2VpX3NiKTtcXG5mcy9pc29mcy9uYW1laS5jLTU4LVxcbmZzL2lzb2ZzL25hbWVpLmM6NTk6XFx0aWYgKCFJU09GU19JKGRpciktXFx1MDAzZWlfZmlyc3RfZXh0ZW50KVxcbmZzL2lzb2ZzL25hbWVpLmMtNjAtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5mcy9pc29mcy9uYW1laS5jLTgyLVxcdFxcdFxcdGJoID0gTlVMTDtcXG5mcy9pc29mcy9uYW1laS5jOjgzOlxcdFxcdFxcdGZfcG9zID0gKGZfcG9zICsgSVNPRlNfQkxPQ0tfU0laRSkgXFx1MDAyNiB+KElTT0ZTX0JMT0NLX1NJWkUgLSAxKTtcXG5mcy9pc29mcy9uYW1laS5jLTg0LVxcdFxcdFxcdGJsb2NrID0gZl9wb3MgXFx1MDAzZVxcdTAwM2UgYnVmYml0cztcXG4tLVxcbmZzL2lzb2ZzL3JvY2suYz00ND1zdGF0aWMgaW50IGNoZWNrX3NwKHN0cnVjdCByb2NrX3JpZGdlICpyciwgc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2lzb2ZzL3JvY2suYy00OS1cXHRcXHRyZXR1cm4gLTE7XFxuZnMvaXNvZnMvcm9jay5jOjUwOlxcdElTT0ZTX1NCKGlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc19yb2NrX29mZnNldCA9IHJyLVxcdTAwM2V1LlNQLnNraXA7XFxuZnMvaXNvZnMvcm9jay5jLTUxLVxcdHJldHVybiAwO1xcbi0tXFxuZnMvaXNvZnMvcm9jay5jPTU0PXN0YXRpYyB2b2lkIHNldHVwX3JvY2tfcmlkZ2Uoc3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkICpkZSxcXG4tLVxcbmZzL2lzb2ZzL3JvY2suYy02NC1cXG5mcy9pc29mcy9yb2NrLmM6NjU6XFx0aWYgKElTT0ZTX1NCKGlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc19yb2NrX29mZnNldCAhPSAtMSkge1xcbmZzL2lzb2ZzL3JvY2suYzo2NjpcXHRcXHRycy1cXHUwMDNlbGVuIC09IElTT0ZTX1NCKGlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc19yb2NrX29mZnNldDtcXG5mcy9pc29mcy9yb2NrLmM6Njc6XFx0XFx0cnMtXFx1MDAzZWNociArPSBJU09GU19TQihpbm9kZS1cXHUwMDNlaV9zYiktXFx1MDAzZXNfcm9ja19vZmZzZXQ7XFxuZnMvaXNvZnMvcm9jay5jLTY4LVxcdFxcdGlmIChycy1cXHUwMDNlbGVuIFxcdTAwM2MgMClcXG4tLVxcbmZzL2lzb2ZzL3JvY2suYz04Nj1zdGF0aWMgaW50IHJvY2tfY29udGludWUoc3RydWN0IHJvY2tfc3RhdGUgKnJzKVxcbi0tXFxuZnMvaXNvZnMvcm9jay5jLTg4LVxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBycy1cXHUwMDNlaW5vZGUtXFx1MDAzZWlfc2I7XFxuZnMvaXNvZnMvcm9jay5jOjg5OlxcdHN0cnVjdCBpc29mc19zYl9pbmZvICpzYmkgPSBJU09GU19TQihzYik7XFxuZnMvaXNvZnMvcm9jay5jLTkwLVxcdHU2NCBleHRlbnQgPSAodW5zaWduZWQgaW50KXJzLVxcdTAwM2Vjb250X2V4dGVudDtcXG5mcy9pc29mcy9yb2NrLmMtOTEtXFx0dTY0IHNlc3Npb25fZW5kID0gc2JpLVxcdTAwM2VzX3Nlc3Npb25fc3RhcnQgK1xcbmZzL2lzb2ZzL3JvY2suYzo5MjpcXHRcXHQoKHU2NClzYmktXFx1MDAzZXNfbnpvbmVzIFxcdTAwM2NcXHUwMDNjIChJU09GU19CTE9DS19CSVRTIC0gc2ItXFx1MDAzZXNfYmxvY2tzaXplX2JpdHMpKTtcXG5mcy9pc29mcy9yb2NrLmMtOTMtXFx0aW50IHJldCA9IDE7XFxuLS1cXG5mcy9pc29mcy9yb2NrLmM9MjE2PWludCBnZXRfcm9ja19yaWRnZV9maWxlbmFtZShzdHJ1Y3QgaXNvX2RpcmVjdG9yeV9yZWNvcmQgKmRlLFxcbi0tXFxuZnMvaXNvZnMvcm9jay5jLTIyNy1cXG5mcy9pc29mcy9yb2NrLmM6MjI4OlxcdGlmICghSVNPRlNfU0IoaW5vZGUtXFx1MDAzZWlfc2IpLVxcdTAwM2VzX3JvY2spXFxuZnMvaXNvZnMvcm9jay5jLTIyOS1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmZzL2lzb2ZzL3JvY2suYz0zMjc9cGFyc2Vfcm9ja19yaWRnZV9pbm9kZV9pbnRlcm5hbChzdHJ1Y3QgaXNvX2RpcmVjdG9yeV9yZWNvcmQgKmRlLFxcbi0tXFxuZnMvaXNvZnMvcm9jay5jLTMzOC1cXG5mcy9pc29mcy9yb2NrLmM6MzM5OlxcdGlmICghSVNPRlNfU0IoaW5vZGUtXFx1MDAzZWlfc2IpLVxcdTAwM2VzX3JvY2spXFxuZnMvaXNvZnMvcm9jay5jLTM0MC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmZzL2lzb2ZzL3JvY2suYy0zNzMtXFx0XFx0c3dpdGNoIChzaWcpIHtcXG5mcy9pc29mcy9yb2NrLmM6Mzc0OiNpZm5kZWYgQ09ORklHX1pJU09GU1xcdFxcdC8qIE5vIGZsYWcgZm9yIFNGIG9yIFpGICovXFxuZnMvaXNvZnMvcm9jay5jLTM3NS1cXHRcXHRjYXNlIFNJRygnUicsICdSJyk6XFxuLS1cXG5mcy9pc29mcy9yb2NrLmMtMzkzLVxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbmZzL2lzb2ZzL3JvY2suYzozOTQ6XFx0XFx0XFx0SVNPRlNfU0IoaW5vZGUtXFx1MDAzZWlfc2IpLVxcdTAwM2VzX3JvY2sgPSAxO1xcbmZzL2lzb2ZzL3JvY2suYy0zOTUtXFx0XFx0XFx0cHJpbnRrKEtFUk5fREVCVUcgXFxcIklTTyA5NjYwIEV4dGVuc2lvbnM6IFxcXCIpO1xcbi0tXFxuZnMvaXNvZnMvcm9jay5jLTUzMy1cXHRcXHRcXHRcXHRwcmludGsoS0VSTl9FUlJcXG5mcy9pc29mcy9yb2NrLmM6NTM0OlxcdFxcdFxcdFxcdCAgICAgICBcXFwiSVNPRlM6IFJlY3Vyc2l2ZSBkaXJlY3RvcnkgcmVsb2NhdGlvbiBcXFwiXFxuZnMvaXNvZnMvcm9jay5jLTUzNS1cXHRcXHRcXHRcXHQgICAgICAgXFxcImlzIG5vdCBzdXBwb3J0ZWRcXFxcblxcXCIpO1xcbi0tXFxuZnMvaXNvZnMvcm9jay5jLTUzOC1cXHRcXHRcXHRyZWxvY19ibG9jayA9IGlzb251bV83MzMocnItXFx1MDAzZXUuQ0wubG9jYXRpb24pO1xcbmZzL2lzb2ZzL3JvY2suYzo1Mzk6XFx0XFx0XFx0aWYgKHJlbG9jX2Jsb2NrID09IElTT0ZTX0koaW5vZGUpLVxcdTAwM2VpX2lnZXQ1X2Jsb2NrIFxcdTAwMjZcXHUwMDI2XFxuZnMvaXNvZnMvcm9jay5jOjU0MDpcXHRcXHRcXHQgICAgSVNPRlNfSShpbm9kZSktXFx1MDAzZWlfaWdldDVfb2Zmc2V0ID09IDApIHtcXG5mcy9pc29mcy9yb2NrLmMtNTQxLVxcdFxcdFxcdFxcdHByaW50ayhLRVJOX0VSUlxcbmZzL2lzb2ZzL3JvY2suYzo1NDI6XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJJU09GUzogRGlyZWN0b3J5IHJlbG9jYXRpb24gcG9pbnRzIHRvIFxcXCJcXG5mcy9pc29mcy9yb2NrLmMtNTQzLVxcdFxcdFxcdFxcdCAgICAgICBcXFwiaXRzZWxmXFxcXG5cXFwiKTtcXG4tLVxcbmZzL2lzb2ZzL3JvY2suYy01NDUtXFx0XFx0XFx0fVxcbmZzL2lzb2ZzL3JvY2suYzo1NDY6XFx0XFx0XFx0SVNPRlNfSShpbm9kZSktXFx1MDAzZWlfZmlyc3RfZXh0ZW50ID0gcmVsb2NfYmxvY2s7XFxuZnMvaXNvZnMvcm9jay5jLTU0Ny1cXHRcXHRcXHRyZWxvYyA9IGlzb2ZzX2lnZXRfcmVsb2MoaW5vZGUtXFx1MDAzZWlfc2IsIHJlbG9jX2Jsb2NrLCAwKTtcXG4tLVxcbmZzL2lzb2ZzL3JvY2suYy01NjMtXFx0XFx0XFx0YnJlYWs7XFxuZnMvaXNvZnMvcm9jay5jOjU2NDojaWZkZWYgQ09ORklHX1pJU09GU1xcbmZzL2lzb2ZzL3JvY2suYy01NjUtXFx0XFx0Y2FzZSBTSUcoJ1onLCAnRicpOiB7XFxuLS1cXG5mcy9pc29mcy9yb2NrLmMtNTY3LVxcbmZzL2lzb2ZzL3JvY2suYzo1Njg6XFx0XFx0XFx0aWYgKElTT0ZTX1NCKGlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc19ub2NvbXByZXNzKVxcbmZzL2lzb2ZzL3JvY2suYy01NjktXFx0XFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5mcy9pc29mcy9yb2NrLmMtNTgzLVxcdFxcdFxcdFxcdFxcdCAqL1xcbmZzL2lzb2ZzL3JvY2suYzo1ODQ6XFx0XFx0XFx0XFx0XFx0SVNPRlNfSShpbm9kZSktXFx1MDAzZWlfZmlsZV9mb3JtYXQgPVxcbmZzL2lzb2ZzL3JvY2suYy01ODUtXFx0XFx0XFx0XFx0XFx0XFx0aXNvZnNfZmlsZV9jb21wcmVzc2VkO1xcbi0tXFxuZnMvaXNvZnMvcm9jay5jLTU5MC1cXHRcXHRcXHRcXHRcXHQgKi9cXG5mcy9pc29mcy9yb2NrLmM6NTkxOlxcdFxcdFxcdFxcdFxcdElTT0ZTX0koaW5vZGUpLVxcdTAwM2VpX2Zvcm1hdF9wYXJtWzBdID1cXG5mcy9pc29mcy9yb2NrLmMtNTkyLVxcdFxcdFxcdFxcdFxcdFxcdGlzb251bV83MTEoXFx1MDAyNnJyLVxcdTAwM2V1LlpGLnBhcm1zWzBdKTtcXG5mcy9pc29mcy9yb2NrLmM6NTkzOlxcdFxcdFxcdFxcdFxcdElTT0ZTX0koaW5vZGUpLVxcdTAwM2VpX2Zvcm1hdF9wYXJtWzFdID1cXG5mcy9pc29mcy9yb2NrLmMtNTk0LVxcdFxcdFxcdFxcdFxcdFxcdGlzb251bV83MTEoXFx1MDAyNnJyLVxcdTAwM2V1LlpGLnBhcm1zWzFdKTtcXG4tLVxcbmZzL2lzb2ZzL3JvY2suYz03MDI9aW50IHBhcnNlX3JvY2tfcmlkZ2VfaW5vZGUoc3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkICpkZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2lzb2ZzL3JvY2suYy03MTEtXFx0ICovXFxuZnMvaXNvZnMvcm9jay5jOjcxMjpcXHRpZiAoKElTT0ZTX1NCKGlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc19yb2NrX29mZnNldCA9PSAtMSlcXG5mcy9pc29mcy9yb2NrLmM6NzEzOlxcdCAgICBcXHUwMDI2XFx1MDAyNiAoSVNPRlNfU0IoaW5vZGUtXFx1MDAzZWlfc2IpLVxcdTAwM2VzX3JvY2sgPT0gMikpIHtcXG5mcy9pc29mcy9yb2NrLmMtNzE0LVxcdFxcdHJlc3VsdCA9IHBhcnNlX3JvY2tfcmlkZ2VfaW5vZGVfaW50ZXJuYWwoZGUsIGlub2RlLFxcbi0tXFxuZnMvaXNvZnMvcm9jay5jPTcyND1zdGF0aWMgaW50IHJvY2tfcmlkZ2Vfc3ltbGlua19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuZnMvaXNvZnMvcm9jay5jLTcyNi1cXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZm9saW8tXFx1MDAzZW1hcHBpbmctXFx1MDAzZWhvc3Q7XFxuZnMvaXNvZnMvcm9jay5jOjcyNzpcXHRzdHJ1Y3QgaXNvX2lub2RlX2luZm8gKmVpID0gSVNPRlNfSShpbm9kZSk7XFxuZnMvaXNvZnMvcm9jay5jOjcyODpcXHRzdHJ1Y3QgaXNvZnNfc2JfaW5mbyAqc2JpID0gSVNPRlNfU0IoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbmZzL2lzb2ZzL3JvY2suYy03MjktXFx0Y2hhciAqbGluayA9IGZvbGlvX2FkZHJlc3MoZm9saW8pO1xcbmZzL2lzb2ZzL3JvY2suYzo3MzA6XFx0dW5zaWduZWQgbG9uZyBidWZzaXplID0gSVNPRlNfQlVGRkVSX1NJWkUoaW5vZGUpO1xcbmZzL2lzb2ZzL3JvY2suYy03MzEtXFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcXG4tLVxcbmZzL2lzb2ZzL3ppc29mcy5oLTExLVxcbmZzL2lzb2ZzL3ppc29mcy5oOjEyOiNpZmRlZiBDT05GSUdfWklTT0ZTXFxuZnMvaXNvZnMvemlzb2ZzLmgtMTMtZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgemlzb2ZzX2FvcHM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEyOjE1OjM5LjQ5MjQ4OTA4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk0MzcwNTk5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkV4YW1pbmluZyB0aGUgSVNPRlMgS2NvbmZpZyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGBmcy9pc29mcy9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgSVNPIDk2NjAgZmlsZXN5c3RlbSBkcml2ZXIgYXJlIGRlZmluZWQsIHRoZSBoZWFydCBvZiBob3cgd2UgY29uZmlndXJlIHRoZSBrZXJuZWwncyBzdXBwb3J0IGZvciByZWFkaW5nIENELVJPTXMgYW5kIG90aGVyIG9wdGljYWwgbWVkaWEuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZSwgd2hhdCB0aGVpciBkZXBlbmRlbmNpZXMgYXJlLCBhbmQgYW55IHBvdGVudGlhbCBjb25mbGljdHMuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gd2hldGhlciB0aGVyZSBoYXZlIGJlZW4gYW55IHJlY2VudCBjaGFuZ2VzLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0YW5kYXJkIHN0dWZmOiBgQ09ORklHX0lTTzk2NjBfRlNgIHRvIGVuYWJsZSB0aGUgYmFzaWMgZHJpdmVyLCBvcHRpb25zIGZvciBSb2NrIFJpZGdlIGV4dGVuc2lvbnMsIEpvbGlldCBzdXBwb3J0LCBtYXliZSBldmVuIHNvbWUgcXVpcmt5IGxlZ2FjeSBmZWF0dXJlcy4gTXkgYXR0ZW50aW9uIHdpbGwgYmUgbGFzZXItZm9jdXNlZCBvbiBhbnl0aGluZyByZWxhdGVkIHRvIHNlY3VyaXR5IGZlYXR1cmVzLCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zLCBhbmQgYW55IHBvdGVudGlhbCBuZXcgYWRkaXRpb25zIEkgc2hvdWxkIGtub3cgYWJvdXQuIExldCdzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIGZpbmQgaW4gdGhpcyBLY29uZmlnIGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjI1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTI6MTU6NDIuNDM2MTk3MTk1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvaXNvZnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIElTTzk2NjBfRlNcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJJU08gOTY2MCBDRFJPTSBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0c2VsZWN0IEJVRkZFUl9IRUFEXFxuICAgNTpcXHRcXHRoZWxwXFxuICAgNjpcXHRcXHQgIFRoaXMgaXMgdGhlIHN0YW5kYXJkIGZpbGUgc3lzdGVtIHVzZWQgb24gQ0QtUk9Ncy4gIEl0IHdhcyBwcmV2aW91c2x5XFxuICAgNzpcXHRcXHQgIGtub3duIGFzIFxcXCJIaWdoIFNpZXJyYSBGaWxlIFN5c3RlbVxcXCIgYW5kIGlzIGNhbGxlZCBcXFwiaHNmc1xcXCIgb24gb3RoZXJcXG4gICA4OlxcdFxcdCAgVW5peCBzeXN0ZW1zLiAgVGhlIHNvLWNhbGxlZCBSb2NrLVJpZGdlIGV4dGVuc2lvbnMgd2hpY2ggYWxsb3cgZm9yXFxuICAgOTpcXHRcXHQgIGxvbmcgVW5peCBmaWxlbmFtZXMgYW5kIHN5bWJvbGljIGxpbmtzIGFyZSBhbHNvIHN1cHBvcnRlZCBieSB0aGlzXFxuICAxMDpcXHRcXHQgIGRyaXZlci4gIElmIHlvdSBoYXZlIGEgQ0QtUk9NIGRyaXZlIGFuZCB3YW50IHRvIGRvIG1vcmUgd2l0aCBpdCB0aGFuXFxuICAxMTpcXHRcXHQgIGp1c3QgbGlzdGVuIHRvIGF1ZGlvIENEcyBhbmQgd2F0Y2ggaXRzIExFRHMsIHNheSBZIChhbmQgcmVhZFxcbiAgMTI6XFx0XFx0ICBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2lzb2ZzLnJzdFxcdTAwM2UgYW5kIHRoZSBDRC1ST00tSE9XVE8sXFxuICAxMzpcXHRcXHQgIGF2YWlsYWJsZSBmcm9tIFxcdTAwM2NodHRwOi8vd3d3LnRsZHAub3JnL2RvY3MuaHRtbCNob3d0b1xcdTAwM2UpLCB0aGVyZWJ5XFxuICAxNDpcXHRcXHQgIGVubGFyZ2luZyB5b3VyIGtlcm5lbCBieSBhYm91dCAyNyBLQjsgb3RoZXJ3aXNlIHNheSBOLlxcbiAgMTU6XFx0XFxuICAxNjpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBmaWxlIHN5c3RlbSBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gIDE3OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGlzb2ZzLlxcbiAgMTg6XFx0XFxuICAxOTpcXHRjb25maWcgSk9MSUVUXFxuICAyMDpcXHRcXHRib29sIFxcXCJNaWNyb3NvZnQgSm9saWV0IENEUk9NIGV4dGVuc2lvbnNcXFwiXFxuICAyMTpcXHRcXHRkZXBlbmRzIG9uIElTTzk2NjBfRlNcXG4gIDIyOlxcdFxcdHNlbGVjdCBOTFNcXG4gIDIzOlxcdFxcdGhlbHBcXG4gIDI0OlxcdFxcdCAgSm9saWV0IGlzIGEgTWljcm9zb2Z0IGV4dGVuc2lvbiBmb3IgdGhlIElTTyA5NjYwIENELVJPTSBmaWxlIHN5c3RlbVxcbiAgMjU6XFx0XFx0ICB3aGljaCBhbGxvd3MgZm9yIGxvbmcgZmlsZW5hbWVzIGluIHVuaWNvZGUgZm9ybWF0ICh1bmljb2RlIGlzIHRoZVxcbiAgMjY6XFx0XFx0ICBuZXcgMTYgYml0IGNoYXJhY3RlciBjb2RlLCBzdWNjZXNzb3IgdG8gQVNDSUksIHdoaWNoIGVuY29kZXMgdGhlXFxuICAyNzpcXHRcXHQgIGNoYXJhY3RlcnMgb2YgYWxtb3N0IGFsbCBsYW5ndWFnZXMgb2YgdGhlIHdvcmxkOyBzZWVcXG4gIDI4OlxcdFxcdCAgXFx1MDAzY2h0dHA6Ly93d3cudW5pY29kZS5vcmcvXFx1MDAzZSBmb3IgbW9yZSBpbmZvcm1hdGlvbikuICBTYXkgWSBoZXJlIGlmIHlvdVxcbiAgMjk6XFx0XFx0ICB3YW50IHRvIGJlIGFibGUgdG8gcmVhZCBKb2xpZXQgQ0QtUk9NcyB1bmRlciBMaW51eC5cXG4gIDMwOlxcdFxcbiAgMzE6XFx0Y29uZmlnIFpJU09GU1xcbiAgMzI6XFx0XFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgZGVjb21wcmVzc2lvbiBleHRlbnNpb25cXFwiXFxuICAzMzpcXHRcXHRkZXBlbmRzIG9uIElTTzk2NjBfRlNcXG4gIDM0OlxcdFxcdHNlbGVjdCBaTElCX0lORkxBVEVcXG4gIDM1OlxcdFxcdGhlbHBcXG4gIDM2OlxcdFxcdCAgVGhpcyBpcyBhIExpbnV4LXNwZWNpZmljIGV4dGVuc2lvbiB0byBSb2NrUmlkZ2Ugd2hpY2ggbGV0cyB5b3Ugc3RvcmVcXG4gIDM3OlxcdFxcdCAgZGF0YSBpbiBjb21wcmVzc2VkIGZvcm0gb24gYSBDRC1ST00gYW5kIGhhdmUgaXQgdHJhbnNwYXJlbnRseVxcbiAgMzg6XFx0XFx0ICBkZWNvbXByZXNzZWQgd2hlbiB0aGUgQ0QtUk9NIGlzIGFjY2Vzc2VkLiAgU2VlXFxuICAzOTpcXHRcXHQgIFxcdTAwM2NodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L3V0aWxzL2ZzL3ppc29mcy9cXHUwMDNlIGZvciB0aGUgdG9vbHNcXG4gIDQwOlxcdFxcdCAgbmVjZXNzYXJ5IHRvIGNyZWF0ZSBzdWNoIGEgZmlsZXN5c3RlbS4gIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gYmVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTI6MTU6NDIuNDM2MjU3NzQ1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTg0NTM4NjY4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipBbmFseXppbmcgSVNPIDk2NjAgUm9jayBSaWRnZSBFeHRlbnNpb25zKipcblxuQWxyaWdodCwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYGZzL2lzb2ZzL3JvY2suY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgUm9jayBSaWRnZSBleHRlbnNpb25zIGFyZSBoYW5kbGVkLCBzbyB0aGUgYXJlYSBhcm91bmQgYHJvY2tfY29udGludWVgIGlzIGNydWNpYWwuIFRoYXQgZnVuY3Rpb24gaXMgbGlrZWx5IGEga2V5IHBpZWNlIGluIHByb2Nlc3NpbmcgdGhlIGV4dGVuZGVkIGF0dHJpYnV0ZXMuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgY2FsbGVycy5cblxuSSdsbCB0aGVuIHBpdm90IG15IGF0dGVudGlvbiB0byB0aGUgcGFyc2luZyBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBgcGFyc2Vfcm9ja19yaWRnZV9pbm9kZWAuIFRoYXQncyB3aGVyZSB0aGUgaW5vZGUgaW5mb3JtYXRpb24gZ2V0cyBpbnRlcnByZXRlZCwgYW5kIGBnZXRfcm9ja19yaWRnZV9maWxlbmFtZWAgaXMgYW5vdGhlciBjcml0aWNhbCBwaWVjZSwgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBjb25zdHJ1Y3RpbmcgdGhlIGFjdHVhbCBmaWxlbmFtZXMgYmFzZWQgb24gdGhlIFJvY2sgUmlkZ2UgZXh0ZW5zaW9ucy4gVW5kZXJzdGFuZGluZyB0aGVpciBpbnRlcmFjdGlvbnMgd2lsbCByZXZlYWwgaG93IHRoZSBleHRlbmRlZCBmaWxlc3lzdGVtIG1ldGFkYXRhIGlzIGFjY2Vzc2VkIGFuZCB0cmFuc2Zvcm1lZCBmb3IgdGhlIGVuZC11c2VyLiBFc3NlbnRpYWxseSwgSSBuZWVkIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cgZnJvbSB0aGUgcmF3IElTTyBpbWFnZSBmb3JtYXQgdG8gdGhlIFBPU0lYLWNvbXBhdGlibGUgcmVwcmVzZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTg3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMjoxNTo0OC4yODE2NDYyNTFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9pc29mcy9yb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgODA6XFx0I2RlZmluZSBSUl9NQVhfQ0VfRU5UUklFUyAzMlxcbiAgODE6XFx0XFxuICA4MjpcXHQvKlxcbiAgODM6XFx0ICogUmV0dXJucyAwIGlmIHRoZSBjYWxsZXIgc2hvdWxkIGNvbnRpbnVlIHNjYW5uaW5nLCAxIGlmIHRoZSBzY2FuIG11c3QgZW5kXFxuICA4NDpcXHQgKiBhbmQgLXZlIG9uIGVycm9yLlxcbiAgODU6XFx0ICovXFxuICA4NjpcXHRzdGF0aWMgaW50IHJvY2tfY29udGludWUoc3RydWN0IHJvY2tfc3RhdGUgKnJzKVxcbiAgODc6XFx0e1xcbiAgODg6XFx0XFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHJzLVxcdTAwM2Vpbm9kZS1cXHUwMDNlaV9zYjtcXG4gIDg5OlxcdFxcdHN0cnVjdCBpc29mc19zYl9pbmZvICpzYmkgPSBJU09GU19TQihzYik7XFxuICA5MDpcXHRcXHR1NjQgZXh0ZW50ID0gKHVuc2lnbmVkIGludClycy1cXHUwMDNlY29udF9leHRlbnQ7XFxuICA5MTpcXHRcXHR1NjQgc2Vzc2lvbl9lbmQgPSBzYmktXFx1MDAzZXNfc2Vzc2lvbl9zdGFydCArXFxuICA5MjpcXHRcXHRcXHQoKHU2NClzYmktXFx1MDAzZXNfbnpvbmVzIFxcdTAwM2NcXHUwMDNjIChJU09GU19CTE9DS19CSVRTIC0gc2ItXFx1MDAzZXNfYmxvY2tzaXplX2JpdHMpKTtcXG4gIDkzOlxcdFxcdGludCByZXQgPSAxO1xcbiAgOTQ6XFx0XFx0aW50IGJsb2Nrc2l6ZSA9IDEgXFx1MDAzY1xcdTAwM2MgcnMtXFx1MDAzZWlub2RlLVxcdTAwM2VpX2Jsa2JpdHM7XFxuICA5NTpcXHRcXHRjb25zdCBpbnQgbWluX2RlX3NpemUgPSBvZmZzZXRvZihzdHJ1Y3Qgcm9ja19yaWRnZSwgdSk7XFxuICA5NjpcXHRcXG4gIDk3OlxcdFxcdGtmcmVlKHJzLVxcdTAwM2VidWZmZXIpO1xcbiAgOTg6XFx0XFx0cnMtXFx1MDAzZWJ1ZmZlciA9IE5VTEw7XFxuICA5OTpcXHRcXG4gMTAwOlxcdFxcdGlmICgodW5zaWduZWQpcnMtXFx1MDAzZWNvbnRfb2Zmc2V0IFxcdTAwM2UgYmxvY2tzaXplIC0gbWluX2RlX3NpemUgfHxcXG4gMTAxOlxcdFxcdCAgICAodW5zaWduZWQpcnMtXFx1MDAzZWNvbnRfc2l6ZSBcXHUwMDNlIGJsb2Nrc2l6ZSB8fFxcbiAxMDI6XFx0XFx0ICAgICh1bnNpZ25lZCkocnMtXFx1MDAzZWNvbnRfb2Zmc2V0ICsgcnMtXFx1MDAzZWNvbnRfc2l6ZSkgXFx1MDAzZSBibG9ja3NpemUpIHtcXG4gMTAzOlxcdFxcdFxcdHByaW50ayhLRVJOX05PVElDRSBcXFwicm9jazogY29ycnVwdGVkIGRpcmVjdG9yeSBlbnRyeS4gXFxcIlxcbiAxMDQ6XFx0XFx0XFx0XFx0XFxcImV4dGVudD0lZCwgb2Zmc2V0PSVkLCBzaXplPSVkXFxcXG5cXFwiLFxcbiAxMDU6XFx0XFx0XFx0XFx0cnMtXFx1MDAzZWNvbnRfZXh0ZW50LCBycy1cXHUwMDNlY29udF9vZmZzZXQsIHJzLVxcdTAwM2Vjb250X3NpemUpO1xcbiAxMDY6XFx0XFx0XFx0cmV0ID0gLUVJTztcXG4gMTA3OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAxMDg6XFx0XFx0fVxcbiAxMDk6XFx0XFxuIDExMDpcXHRcXHRpZiAocnMtXFx1MDAzZWNvbnRfZXh0ZW50IFxcdTAwMjZcXHUwMDI2XFxuIDExMTpcXHRcXHQgICAgKGV4dGVudCBcXHUwMDNjIHNiaS1cXHUwMDNlc19zZXNzaW9uX3N0YXJ0IHx8XFxuIDExMjpcXHRcXHQgICAgIGV4dGVudCBcXHUwMDNlPSBzZXNzaW9uX2VuZCB8fFxcbiAxMTM6XFx0XFx0ICAgICBleHRlbnQgXFx1MDAzZT0gc2JfYmRldl9ucl9ibG9ja3Moc2IpKSkge1xcbiAxMTQ6XFx0XFx0XFx0cHJpbnRrKEtFUk5fTk9USUNFIFxcXCJyb2NrOiBjb3JydXB0ZWQgZGlyZWN0b3J5IGVudHJ5LiBcXFwiXFxuIDExNTpcXHRcXHRcXHRcXHRcXFwiZXh0ZW50PSV1IG91dCBvZiB2b2x1bWUgKG56b25lcz0lbHUpXFxcXG5cXFwiLFxcbiAxMTY6XFx0XFx0XFx0XFx0KHVuc2lnbmVkKXJzLVxcdTAwM2Vjb250X2V4dGVudCxcXG4gMTE3OlxcdFxcdFxcdFxcdHNiaS1cXHUwMDNlc19uem9uZXMpO1xcbiAxMTg6XFx0XFx0XFx0cmV0ID0gLUVJTztcXG4gMTE5OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAxMjA6XFx0XFx0fVxcbiAxMjE6XFx0XFxuIDEyMjpcXHRcXHRpZiAocnMtXFx1MDAzZWNvbnRfZXh0ZW50KSB7XFxuIDEyMzpcXHRcXHRcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xcbiAxMjQ6XFx0XFxuIDEyNTpcXHRcXHRcXHRycy1cXHUwMDNlYnVmZmVyID0ga21hbGxvYyhycy1cXHUwMDNlY29udF9zaXplLCBHRlBfS0VSTkVMKTtcXG4gMTI2OlxcdFxcdFxcdGlmICghcnMtXFx1MDAzZWJ1ZmZlcikge1xcbiAxMjc6XFx0XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4gMTI4OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiAxMjk6XFx0XFx0XFx0fVxcbiAxMzA6XFx0XFx0XFx0cmV0ID0gLUVJTztcXG4gMTMxOlxcdFxcdFxcdGlmICgrK3JzLVxcdTAwM2Vjb250X2xvb3BzIFxcdTAwM2U9IFJSX01BWF9DRV9FTlRSSUVTKVxcbiAxMzI6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDEzMzpcXHRcXHRcXHRiaCA9IHNiX2JyZWFkKHJzLVxcdTAwM2Vpbm9kZS1cXHUwMDNlaV9zYiwgcnMtXFx1MDAzZWNvbnRfZXh0ZW50KTtcXG4gMTM0OlxcdFxcdFxcdGlmIChiaCkge1xcbiAxMzU6XFx0XFx0XFx0XFx0bWVtY3B5KHJzLVxcdTAwM2VidWZmZXIsIGJoLVxcdTAwM2ViX2RhdGEgKyBycy1cXHUwMDNlY29udF9vZmZzZXQsXFxuIDEzNjpcXHRcXHRcXHRcXHRcXHRcXHRycy1cXHUwMDNlY29udF9zaXplKTtcXG4gMTM3OlxcdFxcdFxcdFxcdHB1dF9iaChiaCk7XFxuIDEzODpcXHRcXHRcXHRcXHRycy1cXHUwMDNlY2hyID0gcnMtXFx1MDAzZWJ1ZmZlcjtcXG4gMTM5OlxcdFxcdFxcdFxcdHJzLVxcdTAwM2VsZW4gPSBycy1cXHUwMDNlY29udF9zaXplO1xcbiAxNDA6XFx0XFx0XFx0XFx0cnMtXFx1MDAzZWNvbnRfZXh0ZW50ID0gMDtcXG4gMTQxOlxcdFxcdFxcdFxcdHJzLVxcdTAwM2Vjb250X3NpemUgPSAwO1xcbiAxNDI6XFx0XFx0XFx0XFx0cnMtXFx1MDAzZWNvbnRfb2Zmc2V0ID0gMDtcXG4gMTQzOlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbiAxNDQ6XFx0XFx0XFx0fVxcbiAxNDU6XFx0XFx0XFx0cHJpbnRrKFxcXCJVbmFibGUgdG8gcmVhZCByb2NrLXJpZGdlIGF0dHJpYnV0ZXNcXFxcblxcXCIpO1xcbiAxNDY6XFx0XFx0fVxcbiAxNDc6XFx0b3V0OlxcbiAxNDg6XFx0XFx0a2ZyZWUocnMtXFx1MDAzZWJ1ZmZlcik7XFxuIDE0OTpcXHRcXHRycy1cXHUwMDNlYnVmZmVyID0gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTI6MTU6NDguMjgxNzMzMjIxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzI0MjgzMzc2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBDYWxsIFBhdGhzIFJlbGF0ZWQgdG8gYHJvY2tfY29udGludWVgIGFuZCBSb2NrIFJpZGdlIFBhcnNpbmcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBjYWxsIGdyYXBoLiBUaGUgaW5pdGlhbCBxdWVzdGlvbiBpcyBzdHJhaWdodGZvcndhcmQ6ICp3aG8qIGlzIGNhbGxpbmcgdGhlIGByb2NrX2NvbnRpbnVlYCBmdW5jdGlvbj8gVW5kZXJzdGFuZGluZyBpdHMgaW1tZWRpYXRlIGNhbGxlcnMgaXMgdGhlIGNydWNpYWwgZmlyc3Qgc3RlcC4gSXQgZ2l2ZXMgbWUgYSBzdGFydGluZyBwb2ludCB0byBzZWUgd2hhdCBjb2RlIHBhdGhzIGFyZSBhY3RpdmVseSB1c2luZyB0aGlzIGZ1bmN0aW9uLlxuXG5CdXQgSSBjYW4ndCBzdG9wIHRoZXJlLiBJIGFsc28gbmVlZCB0byBicm9hZGVuIHRoZSBzY29wZSBhbmQgZXhhbWluZSBhbGwgdGhlIGNhbGxlcnMgKmludm9sdmVkKiB3aXRoIFJvY2sgUmlkZ2UgcGFyc2luZyBsb2dpYyBtb3JlIGdlbmVyYWxseS4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjayBhcyBmYXIgYXMgcG9zc2libGUuIEknbSB0aGlua2luZyBJJ2xsIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSB0d28gZ3JvdXBzIGludGVyc2VjdCBhbmQgaW50ZXJhY3Qgd2l0aCBlYWNoIG90aGVyLiBJdCBtYXkgYmUgdGhhdCB0aGVyZSBpcyBhIGJ1ZyBvciB1bndhbnRlZCBiZWhhdmlvciB0aGF0IEkgY2FuIGZpeCBvciByZWZhY3Rvci4gVGhlIHF1ZXN0aW9uIGlzLCBob3cgZmFyIGJhY2sgc2hvdWxkIEkgZ28/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NTg0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMjoxNTo1MS41MjQ1NjkzNjZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4NDQxNTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJvY2tfY29udGludWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaXNvZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2lzb2ZzL3JvY2suYz03Mz1zdGF0aWMgdm9pZCBpbml0X3JvY2tfc3RhdGUoc3RydWN0IHJvY2tfc3RhdGUgKnJzLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvaXNvZnMvcm9jay5jLTg1LSAqL1xcbmZzL2lzb2ZzL3JvY2suYzo4NjpzdGF0aWMgaW50IHJvY2tfY29udGludWUoc3RydWN0IHJvY2tfc3RhdGUgKnJzKVxcbmZzL2lzb2ZzL3JvY2suYy04Ny17XFxuLS1cXG5mcy9pc29mcy9yb2NrLmM9MjE2PWludCBnZXRfcm9ja19yaWRnZV9maWxlbmFtZShzdHJ1Y3QgaXNvX2RpcmVjdG9yeV9yZWNvcmQgKmRlLFxcbi0tXFxuZnMvaXNvZnMvcm9jay5jLTMwOS1cXHR9XFxuZnMvaXNvZnMvcm9jay5jOjMxMDpcXHRyZXQgPSByb2NrX2NvbnRpbnVlKFxcdTAwMjZycyk7XFxuZnMvaXNvZnMvcm9jay5jLTMxMS1cXHRpZiAocmV0ID09IDApXFxuLS1cXG5mcy9pc29mcy9yb2NrLmM9MzI3PXBhcnNlX3JvY2tfcmlkZ2VfaW5vZGVfaW50ZXJuYWwoc3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkICpkZSxcXG4tLVxcbmZzL2lzb2ZzL3JvY2suYy02MTItXFx0fVxcbmZzL2lzb2ZzL3JvY2suYzo2MTM6XFx0cmV0ID0gcm9ja19jb250aW51ZShcXHUwMDI2cnMpO1xcbmZzL2lzb2ZzL3JvY2suYy02MTQtXFx0aWYgKHJldCA9PSAwKVxcbi0tXFxuZnMvaXNvZnMvcm9jay5jPTcyND1zdGF0aWMgaW50IHJvY2tfcmlkZ2Vfc3ltbGlua19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuZnMvaXNvZnMvcm9jay5jLTgwNS1cXHR9XFxuZnMvaXNvZnMvcm9jay5jOjgwNjpcXHRyZXQgPSByb2NrX2NvbnRpbnVlKFxcdTAwMjZycyk7XFxuZnMvaXNvZnMvcm9jay5jLTgwNy1cXHRpZiAocmV0ID09IDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEyOjE1OjUxLjYxMzAxMzg4MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjg2MDQyNDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gSVNPRlMgUm9jayBSaWRnZSBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGdldCBhIGdyYXNwIG9uIGhvdyBSb2NrIFJpZGdlIGV4dGVuc2lvbnMgYXJlIGhhbmRsZWQgaW4gdGhlIElTT0ZTIGltcGxlbWVudGF0aW9uLiAgVGhlIGtleSBmdW5jdGlvbiBoZXJlIHNlZW1zIHRvIGJlIGByb2NrX2NvbnRpbnVlYC4gIEl0J3MgcHJldHR5IGNsZWFyIGZyb20gdGhpcyB0aGF0IGByb2NrX2NvbnRpbnVlYCBpcyBjZW50cmFsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgY2FsbGluZyBpdCwgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucy4gVGhlIGNhbGwgc3RhY2sgZ2l2ZXMgbWUgdGhlIGltbWVkaWF0ZSBjb25uZWN0aW9uczogIEl0J3MgY2FsbGVkIGJ5IGBnZXRfcm9ja19yaWRnZV9maWxlbmFtZWAsIHdoaWNoIGlzIG9idmlvdXMgZW5vdWdoLiBCdXQgbW9yZSBpbXBvcnRhbnRseSwgaXQncyBhbHNvIGNhbGxlZCBieSBgcGFyc2Vfcm9ja19yaWRnZV9pbm9kZV9pbnRlcm5hbGAsIHdoaWNoLCBJIGtub3csIGlzIHVzZWQgd2hlbiBhY3R1YWxseSBkZWFsaW5nIHdpdGggaW5vZGVzLiBBbmQgZnVydGhlciBzdGlsbCwgYHBhcnNlX3JvY2tfcmlkZ2VfaW5vZGVfaW50ZXJuYWxgIGlzIGNhbGxlZCBieSBgcGFyc2Vfcm9ja19yaWRnZV9pbm9kZWAgKHdoaWNoIHdpbGwgZXZlbnR1YWxseSBiZSBjYWxsZWQgYnkgb3RoZXIgZnVuY3Rpb25zLCBJIGFtIHN1cmUpLiBGaW5hbGx5IGByb2NrX3JpZGdlX3N5bWxpbmtfcmVhZF9mb2xpb2AgaXMgYW5vdGhlciBpbXBvcnRhbnQgcGxhY2UgaXQgaXMgdXNlZC4gSSBhbSBhc3N1bWluZyB0aGF0IGl0IGlzIHVzZWQgZm9yIGhhbmRsaW5nIFJvY2sgUmlkZ2UgZXh0ZW5zaW9ucyBpbiBzeW1saW5rcy5cblxuTm93LCBgaXNvZnNfZmlsbF9zdXBlcmAgc2V0cyBgc2JpLVx1MDAzZXNfc2Vzc2lvbl9zdGFydGAuIFRoaXMgbWVhbnMgdGhlIHN1cGVyYmxvY2sgaW5mb3JtYXRpb24gaXMga2V5IHRvIHRoZSBzZXNzaW9uIGRhdGEsIHBhcnRpY3VsYXJseSB0aGUgc3RhcnQgcG9pbnQuICBUaGF0J3MgcHJvYmFibHkgd2hlcmUgdGhlIGltYWdlIGluZm9ybWF0aW9uIGFuZCBtZXRhZGF0YSBsaXZlcy4gQW5kIEknbSB3aWxsaW5nIHRvIGJldCB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIHRoZSBvdmVyYWxsIHBhcnNpbmcgcHJvY2Vzcy4gSSdtIGdvaW5nIHRvIGhlYWQgdG8gYGZzL2lzb2ZzL2lub2RlLmNgIG5vdyB0byBleGFtaW5lIGBpc29mc19maWxsX3N1cGVyYC4gVW5kZXJzdGFuZGluZyBob3cgdGhlIHN1cGVyYmxvY2sgaXMgaW5pdGlhbGl6ZWQgaXMgY3JpdGljYWwgZm9yIHNlZWluZyBob3cgdGhlIHdob2xlIFJvY2sgUmlkZ2Ugc3RydWN0dXJlIGlzIHNldCB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyMTcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTI6MTU6NTUuMjk5MDU4OTM0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9pc29mcy9pbm9kZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgxMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgxMDpcXHRcXHQgKiBsZXNzIHRoYW4gdGhlIGhhcmR3YXJlIHNlY3RvciBzaXplIGZvciB0aGUgZGV2aWNlLiAgSWYgd2VcXG4gODExOlxcdFxcdCAqIGRvLCB3ZSB3b3VsZCBlbmQgdXAgaGF2aW5nIHRvIHJlYWQgbGFyZ2VyIGJ1ZmZlcnMgYW5kIHNwbGl0XFxuIDgxMjpcXHRcXHQgKiBvdXQgcG9ydGlvbnMgdG8gc2F0aXNmeSByZXF1ZXN0cy5cXG4gODEzOlxcdFxcdCAqXFxuIDgxNDpcXHRcXHQgKiBOb3RlMi0gdGhlIGlkZWEgaGVyZSBpcyB0aGF0IHdlIHdhbnQgdG8gZGVhbCB3aXRoIHRoZSBvcHRpbWFsXFxuIDgxNTpcXHRcXHQgKiB6b25lc2l6ZSBpbiB0aGUgZmlsZXN5c3RlbS4gIElmIHdlIGhhdmUgaXQgc2V0IHRvIHNvbWV0aGluZyBsZXNzLFxcbiA4MTY6XFx0XFx0ICogdGhlbiB3ZSBoYXZlIGhvcnJpYmxlIHByb2JsZW1zIHdpdGggdHJ5aW5nIHRvIHBpZWNlIHRvZ2V0aGVyXFxuIDgxNzpcXHRcXHQgKiBiaXRzIG9mIGFkamFjZW50IGJsb2NrcyBpbiBvcmRlciB0byBwcm9wZXJseSByZWFkIGRpcmVjdG9yeVxcbiA4MTg6XFx0XFx0ICogZW50cmllcy4gIEJ5IGZvcmNpbmcgdGhlIGJsb2Nrc2l6ZSBpbiB0aGlzIHdheSwgd2UgZW5zdXJlXFxuIDgxOTpcXHRcXHQgKiB0aGF0IHdlIHdpbGwgbmV2ZXIgYmUgcmVxdWlyZWQgdG8gZG8gdGhpcy5cXG4gODIwOlxcdFxcdCAqL1xcbiA4MjE6XFx0XFx0aWYgKCFzYl9zZXRfYmxvY2tzaXplKHMsIG9yaWdfem9uZXNpemUpKVxcbiA4MjI6XFx0XFx0XFx0Z290byBvdXRfZnJlZXNiaTtcXG4gODIzOlxcdFxcbiA4MjQ6XFx0XFx0c2JpLVxcdTAwM2VzX3Nlc3Npb25fc3RhcnQgPSAodTY0KXZvbF9kZXNjX3N0YXJ0IFxcdTAwM2NcXHUwMDNjXFxuIDgyNTpcXHRcXHRcXHRcXHRcXHQoSVNPRlNfQkxPQ0tfQklUUyAtIHMtXFx1MDAzZXNfYmxvY2tzaXplX2JpdHMpO1xcbiA4MjY6XFx0XFx0c2JpLVxcdTAwM2VzX25sc19pb2NoYXJzZXQgPSBOVUxMO1xcbiA4Mjc6XFx0XFxuIDgyODpcXHQjaWZkZWYgQ09ORklHX0pPTElFVFxcbiA4Mjk6XFx0XFx0aWYgKGpvbGlldF9sZXZlbCkge1xcbiA4MzA6XFx0XFx0XFx0Y2hhciAqcCA9IG9wdC1cXHUwMDNlaW9jaGFyc2V0ID8gb3B0LVxcdTAwM2Vpb2NoYXJzZXQgOiBDT05GSUdfTkxTX0RFRkFVTFQ7XFxuIDgzMTpcXHRcXHRcXHRpZiAoc3RyY21wKHAsIFxcXCJ1dGY4XFxcIikgIT0gMCkge1xcbiA4MzI6XFx0XFx0XFx0XFx0c2JpLVxcdTAwM2VzX25sc19pb2NoYXJzZXQgPSBvcHQtXFx1MDAzZWlvY2hhcnNldCA/XFxuIDgzMzpcXHRcXHRcXHRcXHRcXHRsb2FkX25scyhvcHQtXFx1MDAzZWlvY2hhcnNldCkgOiBsb2FkX25sc19kZWZhdWx0KCk7XFxuIDgzNDpcXHRcXHRcXHRcXHRpZiAoIXNiaS1cXHUwMDNlc19ubHNfaW9jaGFyc2V0KVxcbiA4MzU6XFx0XFx0XFx0XFx0XFx0Z290byBvdXRfZnJlZXNiaTtcXG4gODM2OlxcdFxcdFxcdH1cXG4gODM3OlxcdFxcdH1cXG4gODM4OlxcdCNlbmRpZlxcbiA4Mzk6XFx0XFx0cy1cXHUwMDNlc19vcCA9IFxcdTAwMjZpc29mc19zb3BzO1xcbiA4NDA6XFx0XFx0cy1cXHUwMDNlc19leHBvcnRfb3AgPSBcXHUwMDI2aXNvZnNfZXhwb3J0X29wcztcXG4gODQxOlxcdFxcdHNiaS1cXHUwMDNlc19tYXBwaW5nID0gb3B0LVxcdTAwM2VtYXA7XFxuIDg0MjpcXHRcXHRzYmktXFx1MDAzZXNfcm9jayA9IChvcHQtXFx1MDAzZXJvY2sgPyAyIDogMCk7XFxuIDg0MzpcXHRcXHRzYmktXFx1MDAzZXNfcm9ja19vZmZzZXQgPSAtMTsgLyogaW5pdGlhbCBvZmZzZXQsIHdpbGwgZ3Vlc3MgdW50aWwgU1AgaXMgZm91bmQqL1xcbiA4NDQ6XFx0XFx0c2JpLVxcdTAwM2VzX2NydWZ0ID0gb3B0LVxcdTAwM2VjcnVmdDtcXG4gODQ1OlxcdFxcdHNiaS1cXHUwMDNlc19oaWRlID0gb3B0LVxcdTAwM2VoaWRlO1xcbiA4NDY6XFx0XFx0c2JpLVxcdTAwM2VzX3Nob3dhc3NvYyA9IG9wdC1cXHUwMDNlc2hvd2Fzc29jO1xcbiA4NDc6XFx0XFx0c2JpLVxcdTAwM2VzX3VpZCA9IG9wdC1cXHUwMDNldWlkO1xcbiA4NDg6XFx0XFx0c2JpLVxcdTAwM2VzX2dpZCA9IG9wdC1cXHUwMDNlZ2lkO1xcbiA4NDk6XFx0XFx0c2JpLVxcdTAwM2VzX3VpZF9zZXQgPSBvcHQtXFx1MDAzZXVpZF9zZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEyOjE1OjU1LjI5OTE2NDQ3NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODEwMTYxODYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEZpbGVzeXN0ZW0gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvcmUgaXNzdWU6IGl0J3MgYSBib3VuZHMtY2hlY2tpbmcgcHJvYmxlbSB3aXRoaW4gUm9jayBSaWRnZSBDRSByZWNvcmRzIGZvciBJU085NjYwLiBTcGVjaWZpY2FsbHksIHRoZSBvcmlnaW5hbCBjaGVjayBmb3IgYHJzLVx1MDAzZWNvbnRfZXh0ZW50YCBkaWRuJ3QgZnVsbHkgY29uc2lkZXIgc2Vzc2lvbiBvZmZzZXRzIG9yIHRoZSBibG9jayBkZXZpY2UncyBzaXplLCBsZWFkaW5nIHRvIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzLiBDbGFzc2ljIGdvdGNoYS5cblxuVGhlIG5leHQgcXVlc3Rpb24gaXMgYWx3YXlzLCBcIklzIHRoaXMgYWN0dWFsbHkgZXhwbG9pdGFibGU/XCIgQ2FuIHdlIHJlYWxpc3RpY2FsbHkgdHJpZ2dlciB0aGlzIGluIGEgbW9kZXJuIGVudmlyb25tZW50PyBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgdGhhdC4gQW5kIHllcywgZ29vZC4gVGhlIHRleHQgbWVudGlvbnMgdGhhdCBzeXprYWxsZXIsIGEgcHJvbWluZW50IGZ1enplciwgdGFyZ2V0cyBmaWxlc3lzdGVtcywgaW5jbHVkaW5nIElTTzk2NjAuIEl0IGV2ZW4gaGlnaGxpZ2h0cyB0aGUgcmVsZXZhbnQgc2V0dXA6IHRoZSBgbW91bnRgIHN5c2NhbGwgd2l0aCB0aGUgYC10IGlzbzk2NjBgIG9wdGlvbiBhbmQgbG9vcCBkZXZpY2VzIG9yIGRpc2sgaW1hZ2VzLiBTb3VuZHMgbGlrZSBhIHZlcnkgcmVhbCBhdHRhY2sgc3VyZmFjZSwgbWFraW5nIHRoaXMgZGVmaW5pdGVseSBgV29ydGhGdXp6aW5nPXRydWVgLiBNeSBleHBlcnRpc2Ugd2l0aCBmdXp6aW5nIHRlY2huaXF1ZXMgc2F5cywgeWVzLCB0aGlzIGlzIGEgdGFyZ2V0LlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8ga25vdyB0aGUgcHJlcmVxdWlzaXRlcy4gV2hhdCBjb25maWdzIGFyZSBuZWVkZWQgdG8gZXZlbiByZWFjaCB0aGlzIGNvZGU/IEl0IHJlcXVpcmVzIGBJU085NjYwX0ZTYCwgb2YgY291cnNlLiBJcyBSb2NrIFJpZGdlIGl0cyBvd24gc2VwYXJhdGUgY29uZmlnLCBvciBpcyBpdCBpbXBsaWNpdGx5IHBhcnQgb2YgYElTTzk2NjBfRlNgPyBMZXQncyBjaGVjayBgZnMvaXNvZnMvTWFrZWZpbGVgIHRvIGJlIHN1cmUuIEkgY2FuIHByb2JhYmx5IGd1ZXNzIGJ1dCBpdCdzIGltcG9ydGFudCB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc0NDksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMjoxNTo1OS4xMDkzMjkzMzZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvaXNvZnMvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciB0aGUgTGludXggaXNvZnMgZmlsZXN5c3RlbSByb3V0aW5lcy5cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0b2JqLSQoQ09ORklHX0lTTzk2NjBfRlMpICs9IGlzb2ZzLm9cXG4gICA3OlxcdFxcbiAgIDg6XFx0aXNvZnMteSBcXHRcXHQ6PSBuYW1laS5vIGlub2RlLm8gZGlyLm8gdXRpbC5vIHJvY2subyBleHBvcnQub1xcbiAgIDk6XFx0aXNvZnMtJChDT05GSUdfSk9MSUVUKVxcdCs9IGpvbGlldC5vXFxuICAxMDpcXHRpc29mcy0kKENPTkZJR19aSVNPRlMpXFx0Kz0gY29tcHJlc3Mub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMjoxNTo1OS4xMDkzNzg1NDZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzUzNzI2MTE3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSVNPOTY2MCBSb2NrIFJpZGdlIEV4dGVuc2lvbnMqKlxuXG5Pa2F5LCBzbyBpZiBgQ09ORklHX0lTTzk2NjBfRlNgIGlzIG9uLCBgcm9jay5vYCBpcyBhdXRvbWF0aWNhbGx5IHBhcnQgb2YgYGlzb2ZzLm9gLiBNYWtlcyBzZW5zZSwgdGhleSdyZSBpbnRyaW5zaWNhbGx5IGxpbmtlZC4gTm93LCBsZXQncyBmaWd1cmUgb3V0IHdoYXQgZnVuY3Rpb25zIG5lZWQgdG8gYmUgZXhwb3NlZCBhcyBgRm9jdXNTeW1ib2xzYC4gSSBuZWVkOlxuXG4qICAgYGlzb2ZzX2ZpbGxfc3VwZXJgXG4qICAgYHJvY2tfY29udGludWVgXG4qICAgYGdldF9yb2NrX3JpZGdlX2ZpbGVuYW1lYFxuKiAgIGBwYXJzZV9yb2NrX3JpZGdlX2lub2RlX2ludGVybmFsYCAob3IgbWF5YmUganVzdCBgcGFyc2Vfcm9ja19yaWRnZV9pbm9kZWAgaWYgdGhhdCdzIHRoZSBvbmUgd2UgbmVlZCkuXG4qICAgYHJvY2tfcmlkZ2Vfc3ltbGlua19yZWFkX2ZvbGlvYFxuXG5UaGUgbmV4dCBjcml0aWNhbCBzdGVwIGlzIHRvIGRldGVybWluZSBpZiBgcm9ja19jb250aW51ZWAgaXMgaW5saW5lIG9yIHN0YXRpYy4gTGV0J3Mgc2VlLi4uIHllcCwgaXQncyBkZWZpbmVkIGFzIGBzdGF0aWMgaW50IHJvY2tfY29udGludWUoLi4uKWAgaW4gYGZzL2lzb2ZzL3JvY2suY2AuIFdpdGggY29tcGlsZXIgb3B0aW1pemF0aW9ucywgaXQgY291bGQgYmUgaW5saW5lZC4gVGhhdCBtZWFucyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxlcnMgb2YgYHJvY2tfY29udGludWVgIHRvIG1ha2UgYSBkZWZpbml0aXZlIGp1ZGdlbWVudC4gSXQgbG9va3MgbGlrZSBgcGFyc2Vfcm9ja19yaWRnZV9pbm9kZWAgaXMgbm9uLXN0YXRpYywgc28gdGhlIGNhbGxlciBvZiB0aGF0IGZ1bmN0aW9uIHdpbGwgYmUgdGhlIHRoaW5nIHRvIHdhdGNoIGZvci4gTGV0J3Mgc2VlIHRoZSBjYWxsZXJzIG9mIGByb2NrX2NvbnRpbnVlYCBhbmQgdGhlbiBmaWd1cmUgb3V0IGhvdyBgcGFyc2Vfcm9ja19yaWRnZV9pbm9kZWAgYW5kIGBnZXRfcm9ja19yaWRnZV9maWxlbmFtZWAgYXJlIHVzZWQgaW4gcmVsYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTUyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTI6MTY6MDIuNjQ2NjQxOTgyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjgyMTMzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYXJzZV9yb2NrX3JpZGdlX2lub2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2lzb2ZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9pc29mcy9pbm9kZS5jPTEyNzI9c3RhdGljIGludCBpc29mc19yZWFkX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCByZWxvY2F0ZWQpXFxuLS1cXG5mcy9pc29mcy9pbm9kZS5jLTE0MTUtXFx0aWYgKCFoaWdoX3NpZXJyYSkge1xcbmZzL2lzb2ZzL2lub2RlLmM6MTQxNjpcXHRcXHRwYXJzZV9yb2NrX3JpZGdlX2lub2RlKGRlLCBpbm9kZSwgcmVsb2NhdGVkKTtcXG5mcy9pc29mcy9pbm9kZS5jLTE0MTctXFx0XFx0LyogaWYgd2Ugd2FudCB1aWQvZ2lkIHNldCwgb3ZlcnJpZGUgdGhlIHJvY2sgcmlkZ2Ugc2V0dGluZyAqL1xcbi0tXFxuZnMvaXNvZnMvaW5vZGUuYy0xNDUyLVxcdFxcdCAgIFNfSVNGSUZPKGlub2RlLVxcdTAwM2VpX21vZGUpIHx8IFNfSVNTT0NLKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuZnMvaXNvZnMvaW5vZGUuYzoxNDUzOlxcdFxcdC8qIFhYWCAtIHBhcnNlX3JvY2tfcmlkZ2VfaW5vZGUoKSBoYWQgYWxyZWFkeSBzZXQgaV9yZGV2LiAqL1xcbmZzL2lzb2ZzL2lub2RlLmMtMTQ1NC1cXHRcXHRpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIGlub2RlLVxcdTAwM2VpX21vZGUsIGlub2RlLVxcdTAwM2VpX3JkZXYpO1xcbi0tXFxuZnMvaXNvZnMvaXNvZnMuaD0xMTU9c3RydWN0IGlub2RlO1xcdFxcdC8qIFRvIG1ha2UgZ2NjIGhhcHB5ICovXFxuZnMvaXNvZnMvaXNvZnMuaC0xMTYtXFxuZnMvaXNvZnMvaXNvZnMuaDoxMTc6ZXh0ZXJuIGludCBwYXJzZV9yb2NrX3JpZGdlX2lub2RlKHN0cnVjdCBpc29fZGlyZWN0b3J5X3JlY29yZCAqLCBzdHJ1Y3QgaW5vZGUgKiwgaW50IHJlbG9jYXRlZCk7XFxuZnMvaXNvZnMvaXNvZnMuaC0xMTgtZXh0ZXJuIGludCBnZXRfcm9ja19yaWRnZV9maWxlbmFtZShzdHJ1Y3QgaXNvX2RpcmVjdG9yeV9yZWNvcmQgKiwgY2hhciAqLCBzdHJ1Y3QgaW5vZGUgKik7XFxuLS1cXG5mcy9pc29mcy9yb2NrLmM9MzI2PXN0YXRpYyBpbnRcXG5mcy9pc29mcy9yb2NrLmM6MzI3OnBhcnNlX3JvY2tfcmlkZ2VfaW5vZGVfaW50ZXJuYWwoc3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkICpkZSxcXG5mcy9pc29mcy9yb2NrLmMtMzI4LVxcdFxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBmbGFncylcXG4tLVxcbmZzL2lzb2ZzL3JvY2suYz02MjY9c3RhdGljIGNoYXIgKmdldF9zeW1saW5rX2NodW5rKGNoYXIgKnJwbnQsIHN0cnVjdCByb2NrX3JpZGdlICpyciwgY2hhciAqcGxpbWl0KVxcbi0tXFxuZnMvaXNvZnMvcm9jay5jLTcwMS1cXG5mcy9pc29mcy9yb2NrLmM6NzAyOmludCBwYXJzZV9yb2NrX3JpZGdlX2lub2RlKHN0cnVjdCBpc29fZGlyZWN0b3J5X3JlY29yZCAqZGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvaXNvZnMvcm9jay5jLTcwMy1cXHRcXHRcXHQgICBpbnQgcmVsb2NhdGVkKVxcbi0tXFxuZnMvaXNvZnMvcm9jay5jLTcwNS1cXHRpbnQgZmxhZ3MgPSByZWxvY2F0ZWQgPyBSUl9SRUxPQ19ERSA6IDA7XFxuZnMvaXNvZnMvcm9jay5jOjcwNjpcXHRpbnQgcmVzdWx0ID0gcGFyc2Vfcm9ja19yaWRnZV9pbm9kZV9pbnRlcm5hbChkZSwgaW5vZGUsIGZsYWdzKTtcXG5mcy9pc29mcy9yb2NrLmMtNzA3LVxcbi0tXFxuZnMvaXNvZnMvcm9jay5jLTcxMy1cXHQgICAgXFx1MDAyNlxcdTAwMjYgKElTT0ZTX1NCKGlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc19yb2NrID09IDIpKSB7XFxuZnMvaXNvZnMvcm9jay5jOjcxNDpcXHRcXHRyZXN1bHQgPSBwYXJzZV9yb2NrX3JpZGdlX2lub2RlX2ludGVybmFsKGRlLCBpbm9kZSxcXG5mcy9pc29mcy9yb2NrLmMtNzE1LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBmbGFncyB8IFJSX1JFR0FSRF9YQSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEyOjE2OjAyLjcwMzQ2ODQzM1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjM4NjI0NzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6XG5cbioqQ2hlY2tpbmcgQ2FsbGVyIEZ1bmN0aW9ucyBmb3IgYGdldF9yb2NrX3JpZGdlX2ZpbGVuYW1lYCoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGNvZGUgYW5kIEkndmUgY29tZSBhY3Jvc3MgYGdldF9yb2NrX3JpZGdlX2ZpbGVuYW1lYC4gTXkgaW5pdGlhbCBjb25jZXJuIGlzbid0IGFib3V0IHRoZSBmdW5jdGlvbiBpdHNlbGYgKnBlciBzZSosIGJ1dCByYXRoZXIsIGhvdyBhbmQgd2hlcmUgaXQncyBiZWluZyAqdXNlZCouIFNvLCBpbnN0ZWFkIG9mIGp1c3QgYXNzdW1pbmcgSSB1bmRlcnN0YW5kIGl0cyByb2xlLCBJJ20gdGhpbmtpbmcsIFwiTGV0J3MgdHJhY2sgZG93biBhbGwgdGhlIHBsYWNlcyB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICpjYWxsZWQqLlwiIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgaXRzIHVzZSBpcyBjcnVjaWFsLiBJIG5lZWQgdG8gc2VlIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucy4gVGhpcyB3aWxsIGhlbHAgbWUgZ3Jhc3AgdGhlIGJpZ2dlciBwaWN0dXJlLCB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9mIHRoZSBmdW5jdGlvbiwgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzIG9yIGlzc3VlcyByZWxhdGVkIHRvIGl0cyBpbnRlZ3JhdGlvbiB3aXRoaW4gdGhlIG92ZXJhbGwgc3lzdGVtLiBBIHRob3JvdWdoIHVuZGVyc3RhbmRpbmcgb2YgaXRzIGNhbGxlcnMgaXMgdGhlIGZpcnN0IHN0ZXAhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NDUwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTI6MTY6MDQuOTQyMDk2MTI0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTM3NzE2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfcm9ja19yaWRnZV9maWxlbmFtZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9pc29mcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaXNvZnMvZGlyLmM9ODU9c3RhdGljIGludCBkb19pc29mc19yZWFkZGlyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxuZnMvaXNvZnMvZGlyLmMtMTkyLVxcdFxcdGlmIChzYmktXFx1MDAzZXNfcm9jaykge1xcbmZzL2lzb2ZzL2Rpci5jOjE5MzpcXHRcXHRcXHRsZW4gPSBnZXRfcm9ja19yaWRnZV9maWxlbmFtZShkZSwgdG1wbmFtZSwgaW5vZGUpO1xcbmZzL2lzb2ZzL2Rpci5jLTE5NC1cXHRcXHRcXHRpZiAobGVuICE9IDApIHtcXHRcXHQvKiBtYXkgYmUgLTEgKi9cXG4tLVxcbmZzL2lzb2ZzL2lzb2ZzLmg9MTE3PWV4dGVybiBpbnQgcGFyc2Vfcm9ja19yaWRnZV9pbm9kZShzdHJ1Y3QgaXNvX2RpcmVjdG9yeV9yZWNvcmQgKiwgc3RydWN0IGlub2RlICosIGludCByZWxvY2F0ZWQpO1xcbmZzL2lzb2ZzL2lzb2ZzLmg6MTE4OmV4dGVybiBpbnQgZ2V0X3JvY2tfcmlkZ2VfZmlsZW5hbWUoc3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkICosIGNoYXIgKiwgc3RydWN0IGlub2RlICopO1xcbmZzL2lzb2ZzL2lzb2ZzLmgtMTE5LWV4dGVybiBpbnQgaXNvZnNfbmFtZV90cmFuc2xhdGUoc3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkICosIGNoYXIgKiwgc3RydWN0IGlub2RlICopO1xcbi0tXFxuZnMvaXNvZnMvbmFtZWkuYz00OT1pc29mc19maW5kX2VudHJ5KHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9pc29mcy9uYW1laS5jLTEwNC1cXHRcXHRpZiAoc2JpLVxcdTAwM2VzX3JvY2sgXFx1MDAyNlxcdTAwMjZcXG5mcy9pc29mcy9uYW1laS5jOjEwNTpcXHRcXHQgICAgKChpID0gZ2V0X3JvY2tfcmlkZ2VfZmlsZW5hbWUoZGUsIHRtcG5hbWUsIGRpcikpKSkge1xcbmZzL2lzb2ZzL25hbWVpLmMtMTA2LVxcdFxcdFxcdGRsZW4gPSBpO1xcdC8qIHBvc3NpYmx5IC0xICovXFxuLS1cXG5mcy9pc29mcy9yb2NrLmM9MTU3PXN0YXRpYyBpbnQgcm9ja19jaGVja19vdmVyZmxvdyhzdHJ1Y3Qgcm9ja19zdGF0ZSAqcnMsIGludCBzaWcpXFxuLS1cXG5mcy9pc29mcy9yb2NrLmMtMjE1LSAqL1xcbmZzL2lzb2ZzL3JvY2suYzoyMTY6aW50IGdldF9yb2NrX3JpZGdlX2ZpbGVuYW1lKHN0cnVjdCBpc29fZGlyZWN0b3J5X3JlY29yZCAqZGUsXFxuZnMvaXNvZnMvcm9jay5jLTIxNy1cXHRcXHRcXHQgICAgY2hhciAqcmV0bmFtZSwgc3RydWN0IGlub2RlICppbm9kZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTI6MTY6MDQuOTg3NDgwMTg3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyNTMwNDk1NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIGZ1bmN0aW9uIGByb2NrX3JpZGdlX3N5bWxpbmtfcmVhZF9mb2xpb2A6XG5cbioqQW5hbHl6aW5nIGByb2NrX3JpZGdlX3N5bWxpbmtfcmVhZF9mb2xpb2AqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgcm9ja19yaWRnZV9zeW1saW5rX3JlYWRfZm9saW9gLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBrbm93IHRoaXMgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIFJvY2sgUmlkZ2UgZXh0ZW5zaW9ucywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gc3ltbGlua3MgYW5kLCBnaXZlbiB0aGUgXCJyZWFkXCIgYW5kIFwiZm9saW9cIiBiaXRzLCBwcm9iYWJseSBob3cgdGhleSdyZSBoYW5kbGVkIHdoZW4gYmVpbmcgcmVhZCBpbnRvIGEgcGFnZSBjYWNoZSBvciBzaW1pbGFyIHN0cnVjdHVyZS4gVGhpcyBpcyBsaWtlbHkgcGFydCBvZiBhIGJyb2FkZXIgZmlsZSBzeXN0ZW0gaW1wbGVtZW50YXRpb24sIGxpa2VseSBkZWFsaW5nIHdpdGggYSBmaWxlIHN5c3RlbSB0aGF0IHN1cHBvcnRzIFJvY2sgUmlkZ2UgZXh0ZW5zaW9ucywgc3VjaCBhcyBpbiB0aGUgY29udGV4dCBvZiBhbiBJU08gaW1hZ2Ugb3Igc2ltaWxhciBmb3JtYXQgd2l0aCBleHRlbmRlZCBtZXRhZGF0YS5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9ucyBhcmU6XG5cbiogICBXaGF0IGFyZSB0aGUgZWRnZSBjYXNlcz8gV2hhdCdzIHRoZSBwb3RlbnRpYWwgZm9yIGluZmluaXRlIHJlY3Vyc2lvbiBpZiBhIHN5bWxpbmsgcG9pbnRzIHRvIGl0c2VsZiBkaXJlY3RseSBvciBpbmRpcmVjdGx5PyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlJ3Mgcm9idXN0IGN5Y2xlIGRldGVjdGlvbiBidWlsdCBpbiwgb3IgdGhhdCB0aGUgZGVzaWduIGluaGVyZW50bHkgcHJldmVudHMgdGhpcy5cbiogICBIb3cgaXMgdGhlICphY3R1YWwqIGRhdGEgcmVhZCBpbnRvIHRoZSBmb2xpbz8gSXMgaXQgYSBkaXJlY3QgbWVtb3J5IGNvcHksIG9yIGlzIHRoZXJlIGJ1ZmZlcmluZyBpbnZvbHZlZD8gSSdsbCBuZWVkIHRvIGxvb2sgYXQgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIGlmIGxhcmdlIHN5bWxpbmtzIGFyZSBiZWluZyBoYW5kbGVkLlxuKiAgIFdoYXQncyB0aGUgZXJyb3IgaGFuZGxpbmcgbGlrZT8gSG93IGFyZSBpc3N1ZXMgbGlrZSBicm9rZW4gc3ltbGlua3MgKHBvaW50aW5nIHRvIG5vbi1leGlzdGVudCB0YXJnZXRzKSwgYWNjZXNzIGRlbmllZCBzY2VuYXJpb3MsIG9yIGJ1ZmZlciBvdmVyZmxvd3MgaGFuZGxlZD8gVGhlIGRldGFpbHMgaGVyZSBhcmUgY3JpdGljYWwgZm9yIHJvYnVzdG5lc3MuXG4qICAgSXMgdGhpcyBiZWluZyBvcHRpbWl6ZWQgZm9yIHJlYWQtYWhlYWQ/IFN5bWxpbmtzIGNhbiBjYXVzZSBqdW1wcyBpbiByZWFkIGFjY2Vzcywgc28gaXMgdGhlIHN5c3RlbSBiZWluZyBjbGV2ZXIgaW4gaG93IGl0IGFudGljaXBhdGVzIGFuZCBwcmVmZXRjaGVzP1xuKiAgIFdoYXQgaXMgdGhlIGNvbnRleHQgb2YgdGhlIGZvbGlvPyBJJ20gY3VyaW91cyB3aGF0IGRhdGEgaXQgY29udGFpbnMgYW5kIGlmIGl0J3Mgc2FmZSB0byBhc3N1bWUgYSBjZXJ0YWluIHNpemUgb2YgdGhlIGRlc3RpbmF0aW9uLlxuXG5PdmVyYWxsLCBJJ20gZXhwZWN0aW5nIHRvIHNlZSBhIGZ1bmN0aW9uIHRoYXQncyBwb3RlbnRpYWxseSBwZXJmb3JtYW5jZS1jcml0aWNhbCwgYW5kIGNlcnRhaW5seSBuZWVkcyB0byBiZSByb2J1c3QgYW5kIHNlY3VyZS4gSSdtIGdvaW5nIHRvIGxvb2sgY2xvc2VseSBmb3IgaG93IGl0IGhhbmRsZXMgdGhlc2UgdHJpY2t5IHN5bWxpbmsgc2NlbmFyaW9zIGFuZCBhbnkgcG90ZW50aWFsbHkgcmlza3kgbWVtb3J5IG9wZXJhdGlvbnMuIEl04oCZcyBhbHNvIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGNvbnRleHQsIHNvIEkgbmVlZCB0byBjaGVjayB0aGUgZnVuY3Rpb24gY2FsbHMgYW5kIHJlbGF0ZWQgY29kZSBpbiBvcmRlciB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgY29tcGxldGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDE1MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEyOjE2OjA4LjI0MDUzMTk3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTcwMzUwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyb2NrX3JpZGdlX3N5bWxpbmtfcmVhZF9mb2xpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9pc29mcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaXNvZnMvcm9jay5jPTcwMj1pbnQgcGFyc2Vfcm9ja19yaWRnZV9pbm9kZShzdHJ1Y3QgaXNvX2RpcmVjdG9yeV9yZWNvcmQgKmRlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvaXNvZnMvcm9jay5jLTcyMy0gKi9cXG5mcy9pc29mcy9yb2NrLmM6NzI0OnN0YXRpYyBpbnQgcm9ja19yaWRnZV9zeW1saW5rX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuZnMvaXNvZnMvcm9jay5jLTcyNS17XFxuLS1cXG5mcy9pc29mcy9yb2NrLmM9ODM3PWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaXNvZnNfc3ltbGlua19hb3BzID0ge1xcbmZzL2lzb2ZzL3JvY2suYzo4Mzg6XFx0LnJlYWRfZm9saW8gPSByb2NrX3JpZGdlX3N5bWxpbmtfcmVhZF9mb2xpb1xcbmZzL2lzb2ZzL3JvY2suYy04MzktfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTI6MTY6MDguMjkwMjQwMzkyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzNzI1NTg5MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBJU085NjYwIHdpdGggUm9jayBSaWRnZSBFeHRlbnNpb246IEEgRm9jdXNlZCBBcHByb2FjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgcHJpbWFyeSBmb2N1cyBpcyBvbiBmdXp6aW5nIHRoZSBJU085NjYwIGZpbGUgc3lzdGVtLCBzcGVjaWZpY2FsbHkgd2hlbiBSb2NrIFJpZGdlIGV4dGVuc2lvbnMgYXJlIGluIHBsYXkuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBpZGVudGlmaWVkIHRoZSByaWdodCBhcmVhcy4gTXkgbGlzdCBvZiBrZXkgc3ltYm9scyBzZWVtcyBzb2xpZDogYGlzb2ZzX2ZpbGxfc3VwZXJgLCBgcm9ja19jb250aW51ZWAsIGBnZXRfcm9ja19yaWRnZV9maWxlbmFtZWAsIGBwYXJzZV9yb2NrX3JpZGdlX2lub2RlYCwgYW5kIGByb2NrX3JpZGdlX3N5bWxpbmtfcmVhZF9mb2xpb2AuIFRob3NlIGFyZSB0aGUgY29yZSBmdW5jdGlvbnMgSSB3YW50IHRvIHRhcmdldC5cblxuTm93LCBhIHF1aWNrIGNvbmZpZ3VyYXRpb24gY2hlY2suIGBJU085NjYwX0ZTYCBpcyB0aGUgbWFpbiBvbmUgSSBuZWVkIHRvIGVuYWJsZTsgdGhhdCdzIHRoZSBiYXNlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWdzLCBidXQgSSBkb24ndCB0aGluayBJJ2xsIG5lZWQgYW55IG1vcmUuIE5leHQsIGEgcXVpY2sgY2hlY2sgb2YgdGhlIG1vZGlmaWVkIGZpbGVzIGNvbmZpcm1zIHRoYXQgdGhlIHdvcmsgaXMgY29udGFpbmVkIHByaW1hcmlseSBpbiBgZnMvaXNvZnNgLiBTcGVjaWZpY2FsbHksIGBmcy9pc29mcy9pbm9kZS5jYCAod2hlcmUgSSBmaW5kIGBpc29mc19maWxsX3N1cGVyYCksIGBmcy9pc29mcy9pc29mcy5oYCAoZm9yIHRoZSBgaXNvZnNfc2JfaW5mb2Agc3RydWN0KSwgYW5kIGBmcy9pc29mcy9yb2NrLmNgICh3aGVyZSBJJ2xsIGZpbmQgYHJvY2tfY29udGludWVgKS5cblxuUmV2aWV3aW5nIHRoZSBpbnN0cnVjdGlvbnMsIGl04oCZcyBhbGwgc2V0IHVwIHRoZSB3YXkgSSBleHBlY3QuIGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byBgdHJ1ZWAsIGBFbmFibGVDb25maWdzYCBpbmNsdWRlcyBteSBgSVNPOTY2MF9GU2AsIGFuZCB0aGUgYEZvY3VzU3ltYm9sc2AgYXJlIGV4YWN0bHkgd2hhdCBJIGdhdGhlcmVkLiBUaGUgYFJlYXNvbmluZ2AgcHJvdmlkZXMgYSBjb25jaXNlIGV4cGxhbmF0aW9uLlxuXG5Pa2F5LCBsZXQncyBtYWtlIHN1cmUgSSd2ZSBnb3QgZXZlcnl0aGluZyBpbiBteSBoZWFkLiBBbGwgdGhlIGNvZGUgY2hhbmdlcyBhcmUgd2l0aGluIHRoZSBgaXNvZnNgIGRyaXZlciwgYW5kIHRoYXQncyBwZXJmZWN0LiBUaGlzIGNhbiBiZSBleGVyY2lzZWQgZWl0aGVyIGJ5IG1vdW50aW5nIElTTyBpbWFnZXMgZGlyZWN0bHkgZnJvbSB1c2VyIHNwYWNlIG9yIGJ5IHVzaW5nIHN5emthbGxlciwgbGV2ZXJhZ2luZyBsb29wIGRldmljZXMgb3IgZGlyZWN0IGRpc2sgZGV2aWNlcy4gSW1wb3J0YW50bHksIHRoaXMgcGF0Y2ggZm9jdXNlcyBvbiBhZGRpbmcgYm91bmRhcnkgY2hlY2tzIHdpdGhpbiBSb2NrIFJpZGdlIENvbnRpbnVhdGlvbiBBcmVhIHJlY29yZHMsIGVuc3VyaW5nIHRoYXQgd2UgZG9uJ3QgcmVhZCBvdXQtb2YtYm91bmRzIGR1ZSB0byBzZXNzaW9uIGJvdW5kYXJpZXMgb3IgdW5kZXJseWluZyBibG9jayBkZXZpY2Ugc2l6ZSBpc3N1ZXMuIFRoYXQncyBhIGNsYXNzaWMgYW5kIHZhbHVhYmxlIGZ1enppbmcgdGFyZ2V0LlxuXG5BbHJpZ2h0LCBJJ20gcmVhZHkuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDg1NSwiT3V0cHV0VG9rZW5zIjoxMzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTI6MTY6MTIuNjYyODAxMzAxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg1NDA1MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklTTzk2NjBfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpc29mc19maWxsX3N1cGVyXCIsXG4gICAgXCJyb2NrX2NvbnRpbnVlXCIsXG4gICAgXCJnZXRfcm9ja19yaWRnZV9maWxlbmFtZVwiLFxuICAgIFwicGFyc2Vfcm9ja19yaWRnZV9pbm9kZVwiLFxuICAgIFwicm9ja19yaWRnZV9zeW1saW5rX3JlYWRfZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHNlc3Npb24gYm91bmRhcnkgYW5kIGJsb2NrIGRldmljZSBjYXBhY2l0eSB2YWxpZGF0aW9uIGZvciBSb2NrIFJpZGdlIENvbnRpbnVhdGlvbiBBcmVhIChDRSkgcmVjb3JkcyBpbiBpc29mcy4gVGhlIG1vZGlmaWVkIGNvZGUgaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGJ5IG1vdW50aW5nIGFuZCByZWFkaW5nIGNyYWZ0ZWQgSVNPOTY2MCBmaWxlc3lzdGVtIGltYWdlcyB2aWEgbG9vcC9kaXNrIGRldmljZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVNPOTY2MF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlzb2ZzX2ZpbGxfc3VwZXJcIixcbiAgICBcInJvY2tfY29udGludWVcIixcbiAgICBcImdldF9yb2NrX3JpZGdlX2ZpbGVuYW1lXCIsXG4gICAgXCJwYXJzZV9yb2NrX3JpZGdlX2lub2RlXCIsXG4gICAgXCJyb2NrX3JpZGdlX3N5bWxpbmtfcmVhZF9mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc2Vzc2lvbiBib3VuZGFyeSBhbmQgYmxvY2sgZGV2aWNlIGNhcGFjaXR5IHZhbGlkYXRpb24gZm9yIFJvY2sgUmlkZ2UgQ29udGludWF0aW9uIEFyZWEgKENFKSByZWNvcmRzIGluIGlzb2ZzLiBUaGUgbW9kaWZpZWQgY29kZSBpcyBkaXJlY3RseSByZWFjaGFibGUgYnkgbW91bnRpbmcgYW5kIHJlYWRpbmcgY3JhZnRlZCBJU085NjYwIGZpbGVzeXN0ZW0gaW1hZ2VzIHZpYSBsb29wL2Rpc2sgZGV2aWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTI6MTY6MTIuNzQxMzU1NjU4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTE2Mzk0MDI1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEyOjE2OjEyLjc0MjQzMjY1OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI5MTYyODU5MDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBmcy9pc29mcyB0byBwcm9wZXJseSB2YWxpZGF0ZSBSb2NrIFJpZGdlIGNvbnRpbnVhdGlvbiBleHRlbnRzIChgQ0VgIGVudHJpZXMpIGFnYWluc3Qgc2Vzc2lvbiBhbmQgYmxvY2sgZGV2aWNlIGJvdW5kYXJpZXMgYnkgaW50cm9kdWNpbmcgYHNiaS1cXHUwMDNlc19zZXNzaW9uX3N0YXJ0YCBhbmQgY29tcGFyaW5nIGBjb250X2V4dGVudGAgYWdhaW5zdCB0aGUgdmFsaWQgcmFuZ2UuIFxcblxcbi0gYHN0cnVjdCBpc29mc19zYl9pbmZvYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgYW5kIGBzX3Nlc3Npb25fc3RhcnRgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgZHVyaW5nIHN1cGVyYmxvY2sgc2V0dXAgYmVmb3JlIGFueSBSb2NrIFJpZGdlIHBhcnNpbmcgb2NjdXJzLlxcbi0gVGhlIHBhdGNoIHRpZ2h0ZW5zIGJvdW5kcyBjaGVja3MgZm9yIGJsb2NrIHJlYWRzLCBtaXRpZ2F0aW5nIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGJsb2NrIHJlYWRzIG9uIGNvcnJ1cHRlZC9tYWxpY2lvdXMgSVNPIGltYWdlcyAod2hpY2ggZmFsbCB1bmRlciBLQVNBTi9nZW5lcmljIGJvdW5kcyBjaGVja2luZykuXFxuLSBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgc3RhY2svaGVhcCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZS5cXG5cXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgcHJlc2VudCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmMDIxNWJmZWYzYjc3NjFlNzdkOGI1OTJlN2Q3ZDBiMzRkNWU5ZWVmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxMjoxNToyOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2lzb2ZzL2lub2RlLmMgYi9mcy9pc29mcy9pbm9kZS5jXG5pbmRleCAzMzc4MzZhMGExNzA0Li5lZmNiOGZiMmIxMGM0IDEwMDY0NFxuLS0tIGEvZnMvaXNvZnMvaW5vZGUuY1xuKysrIGIvZnMvaXNvZnMvaW5vZGUuY1xuQEAgLTgyMSw2ICs4MjEsOCBAQCBzdGF0aWMgaW50IGlzb2ZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4gXHRpZiAoIXNiX3NldF9ibG9ja3NpemUocywgb3JpZ196b25lc2l6ZSkpXG4gXHRcdGdvdG8gb3V0X2ZyZWVzYmk7XG4gXG4rXHRzYmktXHUwMDNlc19zZXNzaW9uX3N0YXJ0ID0gKHU2NCl2b2xfZGVzY19zdGFydCBcdTAwM2NcdTAwM2NcbitcdFx0XHRcdChJU09GU19CTE9DS19CSVRTIC0gcy1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzKTtcbiBcdHNiaS1cdTAwM2VzX25sc19pb2NoYXJzZXQgPSBOVUxMO1xuIFxuICNpZmRlZiBDT05GSUdfSk9MSUVUXG5kaWZmIC0tZ2l0IGEvZnMvaXNvZnMvaXNvZnMuaCBiL2ZzL2lzb2ZzL2lzb2ZzLmhcbmluZGV4IGRhY2I5Y2RhZTRmZDEuLjA3MzJlMWFhM2I3ZmEgMTAwNjQ0XG4tLS0gYS9mcy9pc29mcy9pc29mcy5oXG4rKysgYi9mcy9pc29mcy9pc29mcy5oXG5AQCAtMzUsNiArMzUsOCBAQCBzdHJ1Y3QgaXNvZnNfc2JfaW5mbyB7XG4gXHR1bnNpZ25lZCBsb25nIHNfZmlyc3RkYXRhem9uZTtcbiBcdHVuc2lnbmVkIGxvbmcgc19sb2dfem9uZV9zaXplO1xuIFx0dW5zaWduZWQgbG9uZyBzX21heF9zaXplO1xuK1x0LyogU2Vzc2lvbiBzdGFydCBpbiBmaWxlc3lzdGVtIGJsb2NrIHVuaXRzLiAqL1xuK1x0dTY0IHNfc2Vzc2lvbl9zdGFydDtcbiBcdFxuIFx0aW50ICAgICAgICAgICBzX3JvY2tfb2Zmc2V0OyAvKiBvZmZzZXQgb2YgU1VTUCBmaWVsZHMgd2l0aGluIFNVIGFyZWEgKi9cbiBcdHMzMiAgICAgICAgICAgc19zYnNlY3RvcjtcbmRpZmYgLS1naXQgYS9mcy9pc29mcy9yb2NrLmMgYi9mcy9pc29mcy9yb2NrLmNcbmluZGV4IDI2MjhmMzFiZDNhNWQuLmE5NjQ1YTllODYyODkgMTAwNjQ0XG4tLS0gYS9mcy9pc29mcy9yb2NrLmNcbisrKyBiL2ZzL2lzb2ZzL3JvY2suY1xuQEAgLTksNiArOSw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZW1hcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYmxrZGV2LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImlzb2ZzLmhcIlxuICNpbmNsdWRlIFwicm9jay5oXCJcbkBAIC04NCw2ICs4NSwxMSBAQCBzdGF0aWMgdm9pZCBpbml0X3JvY2tfc3RhdGUoc3RydWN0IHJvY2tfc3RhdGUgKnJzLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuICAqL1xuIHN0YXRpYyBpbnQgcm9ja19jb250aW51ZShzdHJ1Y3Qgcm9ja19zdGF0ZSAqcnMpXG4ge1xuK1x0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHJzLVx1MDAzZWlub2RlLVx1MDAzZWlfc2I7XG4rXHRzdHJ1Y3QgaXNvZnNfc2JfaW5mbyAqc2JpID0gSVNPRlNfU0Ioc2IpO1xuK1x0dTY0IGV4dGVudCA9ICh1bnNpZ25lZCBpbnQpcnMtXHUwMDNlY29udF9leHRlbnQ7XG4rXHR1NjQgc2Vzc2lvbl9lbmQgPSBzYmktXHUwMDNlc19zZXNzaW9uX3N0YXJ0ICtcbitcdFx0KCh1NjQpc2JpLVx1MDAzZXNfbnpvbmVzIFx1MDAzY1x1MDAzYyAoSVNPRlNfQkxPQ0tfQklUUyAtIHNiLVx1MDAzZXNfYmxvY2tzaXplX2JpdHMpKTtcbiBcdGludCByZXQgPSAxO1xuIFx0aW50IGJsb2Nrc2l6ZSA9IDEgXHUwMDNjXHUwMDNjIHJzLVx1MDAzZWlub2RlLVx1MDAzZWlfYmxrYml0cztcbiBcdGNvbnN0IGludCBtaW5fZGVfc2l6ZSA9IG9mZnNldG9mKHN0cnVjdCByb2NrX3JpZGdlLCB1KTtcbkBAIC0xMDEsMTEgKzEwNywxNCBAQCBzdGF0aWMgaW50IHJvY2tfY29udGludWUoc3RydWN0IHJvY2tfc3RhdGUgKnJzKVxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdGlmICgodW5zaWduZWQpcnMtXHUwMDNlY29udF9leHRlbnQgXHUwMDNlPSBJU09GU19TQihycy1cdTAwM2Vpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX256b25lcykge1xuK1x0aWYgKHJzLVx1MDAzZWNvbnRfZXh0ZW50IFx1MDAyNlx1MDAyNlxuK1x0ICAgIChleHRlbnQgXHUwMDNjIHNiaS1cdTAwM2VzX3Nlc3Npb25fc3RhcnQgfHxcbitcdCAgICAgZXh0ZW50IFx1MDAzZT0gc2Vzc2lvbl9lbmQgfHxcbitcdCAgICAgZXh0ZW50IFx1MDAzZT0gc2JfYmRldl9ucl9ibG9ja3Moc2IpKSkge1xuIFx0XHRwcmludGsoS0VSTl9OT1RJQ0UgXCJyb2NrOiBjb3JydXB0ZWQgZGlyZWN0b3J5IGVudHJ5LiBcIlxuIFx0XHRcdFwiZXh0ZW50PSV1IG91dCBvZiB2b2x1bWUgKG56b25lcz0lbHUpXFxuXCIsXG4gXHRcdFx0KHVuc2lnbmVkKXJzLVx1MDAzZWNvbnRfZXh0ZW50LFxuLVx0XHRcdElTT0ZTX1NCKHJzLVx1MDAzZWlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfbnpvbmVzKTtcbitcdFx0XHRzYmktXHUwMDNlc19uem9uZXMpO1xuIFx0XHRyZXQgPSAtRUlPO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEyOjE2OjEyLjc0MjQzNTAyOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NDQ5ODM4MDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrIGluIHRoZSBJU09GUyBGaWxlc3lzdGVtKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGEgcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgc3BlY2lmaWNhbGx5IHdpdGggdGhlIGBOZWVkc0tNU0FOPXRydWVgIGZsYWcsIG9yIGlmIHN0YW5kYXJkIEtBU0FOIGNoZWNrcyBhcmUgc3VmZmljaWVudCAoYE5lZWRzS01TQU49ZmFsc2VgKS4gSXQgbG9va3MgbGlrZSB3ZSdyZSBkZWFsaW5nIHdpdGggY2FsY3VsYXRpb25zIHJlbGF0ZWQgdG8gc2Vzc2lvbiBzdGFydCBhbmQgZW5kIHBvaW50cyB3aXRoaW4gdGhlIElTT0ZTIGZpbGVzeXN0ZW0uXG5cbkxvb2tpbmcgYXQgdGhlIGNvZGUsIGluIGBmcy9pc29mcy9pbm9kZS5jYCwgdGhlIGBpc29mc19maWxsX3N1cGVyYCBmdW5jdGlvbiBwb3B1bGF0ZXMgYHNiaS1cdTAwM2VzX3Nlc3Npb25fc3RhcnRgLiBUaGlzIGBzX3Nlc3Npb25fc3RhcnRgIGlzIHRoZW4gdXNlZCBpbiBgZnMvaXNvZnMvcm9jay5jYCB3aXRoaW4gdGhlIGByb2NrX2NvbnRpbnVlYCBmdW5jdGlvbi4gSXQgc2VlbXMgdG8gYmUgcGFydCBvZiBhIGxhcmdlciBjYWxjdWxhdGlvbiBkZXRlcm1pbmluZyB0aGUgZXh0ZW50IG9mIHNvbWUgZGF0YS4gU3BlY2lmaWNhbGx5LCBpdCdzIHVzZWQgdG8gZGVyaXZlIGBzZXNzaW9uX2VuZGAsIHdoaWNoIGlzIHRoZW4gY29tcGFyZWQgYWdhaW5zdCBgZXh0ZW50YC4gVGhlIGNyaXRpY2FsIHBpZWNlIGlzIHdoZXRoZXIgYHNiaS1cdTAwM2VzX3Nlc3Npb25fc3RhcnRgIGlzIHJlbGlhYmx5IGluaXRpYWxpemVkIGJlZm9yZSBpdHMgdXNlIGluIHRoaXMgY2FsY3VsYXRpb24gYW5kIHN1YnNlcXVlbnQgY29tcGFyaXNvbi4gVGhlIGtleSBoZXJlIGlzIGFsc28gYHNiaS1cdTAwM2VzX256b25lc2AsIHdoaWNoIGlzIGFwcGFyZW50bHkgYWxzbyBwYXJ0IG9mIGRldGVybWluaW5nIGBzZXNzaW9uX2VuZGAuXG5cbkkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBob3cgYGlzb2ZzX3NiX2luZm9gIGlzIGFsbG9jYXRlZCBhbmQgaG93IGl0cyBtZW1iZXJzIGFyZSBoYW5kbGVkLiBXZSdyZSBsb29raW5nIGZvciB3aGV0aGVyIHRoZXJlJ3MgYSBwb3NzaWJpbGl0eSBvZiB0aGVzZSB2YWx1ZXMgcmVtYWluaW5nIGdhcmJhZ2UuIEknbGwgbmVlZCB0byB1c2UgbXkgdXN1YWwgbWV0aG9kcywgcmV2aWV3aW5nIHRoZSBhbGxvY2F0aW9uIHNpdGUgb2YgYGlzb2ZzX3NiX2luZm9gIGFuZCBob3cgYHNfc2Vzc2lvbl9zdGFydGAgYW5kIGBzX256b25lc2AgYXJlIHBvcHVsYXRlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyByZXF1aXJlcyBhIGZ1bGwgS01TQU4gY2hlY2ssIG9yIGlmIHN0YW5kYXJkIEtBU0FOIGNvdmVyYWdlIGlzIGVub3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg3NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEyOjE2OjE5LjE5MjI3NjAxNVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc0NzM4NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXNvZnNfZmlsbF9zdXBlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9pc29mcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaXNvZnMvaW5vZGUuYz01NTA9c3RhdGljIGJvb2wgcm9vdGRpcl9lbXB0eShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGJsb2NrKVxcbi0tXFxuZnMvaXNvZnMvaW5vZGUuYy01NzMtICovXFxuZnMvaXNvZnMvaW5vZGUuYzo1NzQ6c3RhdGljIGludCBpc29mc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbmZzL2lzb2ZzL2lub2RlLmMtNTc1LXtcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmMtOTM2LVxcdFxcdHByaW50ayhLRVJOX1dBUk5JTkdcXG5mcy9pc29mcy9pbm9kZS5jOjkzNzpcXHRcXHRcXHRcXFwiaXNvZnNfZmlsbF9zdXBlcjogcm9vdCBpbm9kZSBpcyBub3QgYSBkaXJlY3RvcnkuIFxcXCJcXG5mcy9pc29mcy9pbm9kZS5jLTkzOC1cXHRcXHRcXHRcXFwiQ29ycnVwdGVkIG1lZGlhP1xcXFxuXFxcIik7XFxuLS1cXG5mcy9pc29mcy9pbm9kZS5jPTE1Mzk9c3RhdGljIGludCBpc29mc19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuZnMvaXNvZnMvaW5vZGUuYy0xNTQwLXtcXG5mcy9pc29mcy9pbm9kZS5jOjE1NDE6XFx0cmV0dXJuIGdldF90cmVlX2JkZXYoZmMsIGlzb2ZzX2ZpbGxfc3VwZXIpO1xcbmZzL2lzb2ZzL2lub2RlLmMtMTU0Mi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEyOjE2OjE5LjI0OTc1NzUwNVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDcxNzY5MDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGUgY29kZSBhcyBhbiBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gdGhlIElTT0ZTIFN1cGVyYmxvY2sgSW5pdGlhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBjcmFjayBvcGVuIGBmcy9pc29mcy9pbm9kZS5jYCBhbmQgemVybyBpbiBvbiB0aGF0IGBpc29mc19maWxsX3N1cGVyYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIElTT0ZTIGZpbGVzeXN0ZW0gZ2V0cyBpbml0aWFsaXplZCBvbiBtb3VudC4gUmlnaHQsIHNvIHdlJ3JlIHN0YXJ0aW5nIHdpdGggdGhlIHN1cGVyYmxvY2sgc3RydWN0dXJlLCB0aGUgaGVhcnQgb2YgdGhlIGZpbGVzeXN0ZW0ncyBtZXRhZGF0YS4gSSdtIGltbWVkaWF0ZWx5IGxvb2tpbmcgZm9yIGhvdyB0aGUgZGV2aWNlIGluZm9ybWF0aW9uIGlzIHB1bGxlZCBpbiAtIGdvdHRhIGZpbmQgd2hlcmUgdGhlIGJsb2NrIGRldmljZSBnZXRzIGNvbm5lY3RlZC4gSXMgaXQgYmVpbmcgcGFzc2VkIGRpcmVjdGx5IGFzIGFuIGFyZ3VtZW50LCBvciBpcyBpdCByZXRyaWV2ZWQgc29tZWhvdyBmcm9tIHRoZSBgc3RydWN0IHN1cGVyX2Jsb2NrYCBpdHNlbGY/XG5cbk9rYXksIGxvb2tzIGxpa2Ugd2UncmUgY2FsbGluZyBgc2dldF9mY2AgYW5kIHRoZW4gYGlzb2ZzX3JlYWRfc3VwZXJgIHdpdGggdGhlIGBzdXBlcl9ibG9ja2AgYXMgYSBwYXJhbWV0ZXIuIGBpc29mc19yZWFkX3N1cGVyYCBpcyBrZXk7IHRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yaydzIGRvbmUgdG8gYWN0dWFsbHkgcmVhZCBmcm9tIHRoZSBkZXZpY2UgYW5kIGJ1aWxkIHRoZSBpbml0aWFsIGZpbGVzeXN0ZW0gcmVwcmVzZW50YXRpb24gaW4gbWVtb3J5LiBJIHNlZSBpdCdzIGdvaW5nIHRvIGJlIGxvb2tpbmcgZm9yIHRoZSBJU08gOTY2MCBWb2x1bWUgRGVzY3JpcHRvciBTZXQuIEknbSBrZWVuIHRvIHNlZSBpZiB0aGV5J3JlIGhhbmRsaW5nIGRpZmZlcmVudCB2b2x1bWUgZGVzY3JpcHRvciB0eXBlcyBhbmQgaWYgdGhlIGVycm9yIGNoZWNraW5nIGFyb3VuZCB0aG9zZSBkZXNjcmlwdG9ycyBpcyByb2J1c3QuIEFueSBjbGV2ZXIgdHJpY2tzIGluIGlkZW50aWZ5aW5nIHRoZSBwcmltYXJ5IHZvbHVtZSBkZXNjcmlwdG9yPyBDaGVja3N1bXM/IERvdWJsZS1jaGVja2luZyB0aGUgaWRlbnRpZmllciBzdHJpbmc/XG5cbk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBob3cgYXJlIHRoZSByb290IGRpcmVjdG9yeSdzIGlub2RlIGFuZCB0aGUgc3VwZXJibG9jaydzIGBzX3Jvb3RgIHBvaW50ZXIgYmVpbmcgZXN0YWJsaXNoZWQ/IFRoYXQncyB3aGF0IEknbSByZWFsbHkgY29uY2VybmVkIGFib3V0LiBMZXQncyBzZWUgaG93IHRoZSByb290IGlub2RlIGlzIGJ1aWx0LiBBcmUgdGhleSBjcmVhdGluZyBhIG5ldyBpbm9kZSBkaXJlY3RseSwgb3IgaXMgaXQgYSBzcGVjaWFsIGNhc2U/IEhvdyBkbyB0aGV5IGhhbmRsZSB0aGUgdmFyaW91cyB2b2x1bWUgZGVzY3JpcHRvcnMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgZGF0YT8gVW5kZXJzdGFuZGluZyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGlzIGNydWNpYWwsIHdoYXQgYXJlIHRoZSByZWxldmFudCBmaWVsZHMgaW4gdGhlIHZvbHVtZSBkZXNjcmlwdG9yPyBBcmUgdGhleSB1c2luZyBhIGJ1ZmZlciB0byBzdG9yZSB0aGUgcm9vdCBkaXJlY3RvcnkncyBmaWxlIHN5c3RlbSBlbnRyeT8gTGV0J3MgY2hlY2sgaG93IHRoZSBpbm9kZSBudW1iZXJzIGFyZSBhc3NpZ25lZC4gV2UgY2FuJ3QgaGF2ZSBjb2xsaXNpb25zLiBcblxuUmlnaHQsIEknbSB3YXRjaGluZyBvdXQgZm9yIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93cyB3aGVuIGNhbGN1bGF0aW5nIGJsb2NrIG9mZnNldHMsIGFuZCBvZiBjb3Vyc2UsIHByb3BlciBlcnJvciBoYW5kbGluZyBhbmQgcmVzb3VyY2UgY2xlYW51cC4gSXMgbWVtb3J5IGJlaW5nIGFsbG9jYXRlZCBhbmQgZGVhbGxvY2F0ZWQgY29ycmVjdGx5LCBlc3BlY2lhbGx5IGZvciB0aGUgZGlyZWN0b3J5IGVudHJpZXMgYW5kIHRoZSBidWZmZXI/IEFueSBtaXNzZWQgYGtmcmVlYCBjYWxscyB3b3VsZCBiZSBhIHNlcmlvdXMgcHJvYmxlbSBpbiB0aGUgbG9uZyBydW4uIEkgYWxzbyB3YW50IHRvIHZlcmlmeSB0aGV5IGFyZSBoYW5kbGluZyBhbnkgZW5kaWFubmVzcyBpc3N1ZXMgY29ycmVjdGx5LCBlc3BlY2lhbGx5IHdoZW4gcGFyc2luZyBtdWx0aS1ieXRlIGZpZWxkcyBmcm9tIHRoZSBkaXNrIGltYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTU4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTI6MTY6MjIuNzIxNTMwMTYzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9pc29mcy9pbm9kZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU3NCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU3NDpcXHRzdGF0aWMgaW50IGlzb2ZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuIDU3NTpcXHR7XFxuIDU3NjpcXHRcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTCwgKnByaV9iaCA9IE5VTEw7XFxuIDU3NzpcXHRcXHRzdHJ1Y3QgaHNfcHJpbWFyeV9kZXNjcmlwdG9yICpoX3ByaSA9IE5VTEw7XFxuIDU3ODpcXHRcXHRzdHJ1Y3QgaXNvX3ByaW1hcnlfZGVzY3JpcHRvciAqcHJpID0gTlVMTDtcXG4gNTc5OlxcdFxcdHN0cnVjdCBpc29fc3VwcGxlbWVudGFyeV9kZXNjcmlwdG9yICpzZWMgPSBOVUxMO1xcbiA1ODA6XFx0XFx0c3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkICpyb290cDtcXG4gNTgxOlxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XFxuIDU4MjpcXHRcXHRzdHJ1Y3QgaXNvZnNfb3B0aW9ucyAqb3B0ID0gZmMtXFx1MDAzZWZzX3ByaXZhdGU7XFxuIDU4MzpcXHRcXHRzdHJ1Y3QgaXNvZnNfc2JfaW5mbyAqc2JpO1xcbiA1ODQ6XFx0XFx0dW5zaWduZWQgbG9uZyBmaXJzdF9kYXRhX3pvbmU7XFxuIDU4NTpcXHRcXHRpbnQgam9saWV0X2xldmVsID0gMDtcXG4gNTg2OlxcdFxcdGludCBpc29fYmxrbnVtLCBibG9jaztcXG4gNTg3OlxcdFxcdGludCBvcmlnX3pvbmVzaXplO1xcbiA1ODg6XFx0XFx0aW50IHRhYmxlLCBlcnJvciA9IC1FSU5WQUw7XFxuIDU4OTpcXHRcXHR1bnNpZ25lZCBpbnQgdm9sX2Rlc2Nfc3RhcnQ7XFxuIDU5MDpcXHRcXHRpbnQgc2lsZW50ID0gZmMtXFx1MDAzZXNiX2ZsYWdzIFxcdTAwMjYgU0JfU0lMRU5UO1xcbiA1OTE6XFx0XFxuIDU5MjpcXHRcXHRzYmkgPSBremFsbG9jX29iaigqc2JpKTtcXG4gNTkzOlxcdFxcdGlmICghc2JpKVxcbiA1OTQ6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDU5NTpcXHRcXHRzLVxcdTAwM2VzX2ZzX2luZm8gPSBzYmk7XFxuIDU5NjpcXHRcXG4gNTk3OlxcdFxcdC8qXFxuIDU5ODpcXHRcXHQgKiBGaXJzdCBvZiBhbGwsIGdldCB0aGUgaGFyZHdhcmUgYmxvY2tzaXplIGZvciB0aGlzIGRldmljZS5cXG4gNTk5OlxcdFxcdCAqIElmIHdlIGRvbid0IGtub3cgd2hhdCBpdCBpcywgb3IgdGhlIGhhcmR3YXJlIGJsb2Nrc2l6ZSBpc1xcbiA2MDA6XFx0XFx0ICogbGFyZ2VyIHRoYW4gdGhlIGJsb2Nrc2l6ZSB0aGUgdXNlciBzcGVjaWZpZWQsIHRoZW4gdXNlXFxuIDYwMTpcXHRcXHQgKiB0aGF0IHZhbHVlLlxcbiA2MDI6XFx0XFx0ICovXFxuIDYwMzpcXHRcXHQvKlxcbiA2MDQ6XFx0XFx0ICogV2hhdCBpZiBidWdnZXIgdGVsbHMgdXMgdG8gZ28gYmV5b25kIHBhZ2Ugc2l6ZT9cXG4gNjA1OlxcdFxcdCAqL1xcbiA2MDY6XFx0XFx0aWYgKGJkZXZfbG9naWNhbF9ibG9ja19zaXplKHMtXFx1MDAzZXNfYmRldikgXFx1MDAzZSAyMDQ4KSB7XFxuIDYwNzpcXHRcXHRcXHRwcmludGsoS0VSTl9XQVJOSU5HXFxuIDYwODpcXHRcXHRcXHQgICAgICAgXFxcIklTT0ZTOiB1bnN1cHBvcnRlZC9pbnZhbGlkIGhhcmR3YXJlIHNlY3RvciBzaXplICVkXFxcXG5cXFwiLFxcbiA2MDk6XFx0XFx0XFx0XFx0YmRldl9sb2dpY2FsX2Jsb2NrX3NpemUocy1cXHUwMDNlc19iZGV2KSk7XFxuIDYxMDpcXHRcXHRcXHRnb3RvIG91dF9mcmVlc2JpO1xcbiA2MTE6XFx0XFx0fVxcbiA2MTI6XFx0XFx0b3B0LVxcdTAwM2VibG9ja3NpemUgPSBzYl9taW5fYmxvY2tzaXplKHMsIG9wdC1cXHUwMDNlYmxvY2tzaXplKTtcXG4gNjEzOlxcdFxcdGlmICghb3B0LVxcdTAwM2VibG9ja3NpemUpIHtcXG4gNjE0OlxcdFxcdFxcdHByaW50ayhLRVJOX0VSUlxcbiA2MTU6XFx0XFx0XFx0ICAgICAgIFxcXCJJU09GUzogdW5hYmxlIHRvIHNldCBibG9ja3NpemVcXFxcblxcXCIpO1xcbiA2MTY6XFx0XFx0XFx0Z290byBvdXRfZnJlZXNiaTtcXG4gNjE3OlxcdFxcdH1cXG4gNjE4OlxcdFxcbiA2MTk6XFx0XFx0c2JpLVxcdTAwM2VzX2hpZ2hfc2llcnJhID0gMDsgLyogZGVmYXVsdCBpcyBpc285NjYwICovXFxuIDYyMDpcXHRcXHRzYmktXFx1MDAzZXNfc2Vzc2lvbiA9IG9wdC1cXHUwMDNlc2Vzc2lvbjtcXG4gNjIxOlxcdFxcdHNiaS1cXHUwMDNlc19zYnNlY3RvciA9IG9wdC1cXHUwMDNlc2JzZWN0b3I7XFxuIDYyMjpcXHRcXG4gNjIzOlxcdFxcdHZvbF9kZXNjX3N0YXJ0ID0gKG9wdC1cXHUwMDNlc2JzZWN0b3IgIT0gLTEpID9cXG4gNjI0OlxcdFxcdFxcdG9wdC1cXHUwMDNlc2JzZWN0b3IgOiBpc29mc19nZXRfbGFzdF9zZXNzaW9uKHMsIG9wdC1cXHUwMDNlc2Vzc2lvbik7XFxuIDYyNTpcXHRcXG4gNjI2OlxcdFxcdGZvciAoaXNvX2Jsa251bSA9IHZvbF9kZXNjX3N0YXJ0KzE2O1xcbiA2Mjc6XFx0XFx0XFx0aXNvX2Jsa251bSBcXHUwMDNjIHZvbF9kZXNjX3N0YXJ0KzEwMDsgaXNvX2Jsa251bSsrKSB7XFxuIDYyODpcXHRcXHRcXHRzdHJ1Y3QgaHNfdm9sdW1lX2Rlc2NyaXB0b3IgKmhkcDtcXG4gNjI5OlxcdFxcdFxcdHN0cnVjdCBpc29fdm9sdW1lX2Rlc2NyaXB0b3IgICp2ZHA7XFxuIDYzMDpcXHRcXG4gNjMxOlxcdFxcdFxcdGJsb2NrID0gaXNvX2Jsa251bSBcXHUwMDNjXFx1MDAzYyAoSVNPRlNfQkxPQ0tfQklUUyAtIHMtXFx1MDAzZXNfYmxvY2tzaXplX2JpdHMpO1xcbiA2MzI6XFx0XFx0XFx0aWYgKCEoYmggPSBzYl9icmVhZChzLCBibG9jaykpKVxcbiA2MzM6XFx0XFx0XFx0XFx0Z290byBvdXRfbm9fcmVhZDtcXG4gNjM0OlxcdFxcbiA2MzU6XFx0XFx0XFx0dmRwID0gKHN0cnVjdCBpc29fdm9sdW1lX2Rlc2NyaXB0b3IgKiliaC1cXHUwMDNlYl9kYXRhO1xcbiA2MzY6XFx0XFx0XFx0aGRwID0gKHN0cnVjdCBoc192b2x1bWVfZGVzY3JpcHRvciAqKWJoLVxcdTAwM2ViX2RhdGE7XFxuIDYzNzpcXHRcXG4gNjM4OlxcdFxcdFxcdC8qXFxuIDYzOTpcXHRcXHRcXHQgKiBEdWUgdG8gdGhlIG92ZXJsYXBwaW5nIHBoeXNpY2FsIGxvY2F0aW9uIG9mIHRoZSBkZXNjcmlwdG9ycyxcXG4gNjQwOlxcdFxcdFxcdCAqIElTTyBDRHMgY2FuIG1hdGNoIGhkcC1cXHUwMDNlaWQ9PUhTX1NUQU5EQVJEX0lEIGFzIHdlbGwuIFRvIGVuc3VyZVxcbiA2NDE6XFx0XFx0XFx0ICogcHJvcGVyIGlkZW50aWZpY2F0aW9uIGluIHRoaXMgY2FzZSwgd2UgZmlyc3QgY2hlY2sgZm9yIElTTy5cXG4gNjQyOlxcdFxcdFxcdCAqL1xcbiA2NDM6XFx0XFx0XFx0aWYgKHN0cm5jbXAgKHZkcC1cXHUwMDNlaWQsIElTT19TVEFOREFSRF9JRCwgc2l6ZW9mIHZkcC1cXHUwMDNlaWQpID09IDApIHtcXG4gNjQ0OlxcdFxcdFxcdFxcdGlmIChpc29udW1fNzExKHZkcC1cXHUwMDNldHlwZSkgPT0gSVNPX1ZEX0VORClcXG4gNjQ1OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA2NDY6XFx0XFx0XFx0XFx0aWYgKGlzb251bV83MTEodmRwLVxcdTAwM2V0eXBlKSA9PSBJU09fVkRfUFJJTUFSWSkge1xcbiA2NDc6XFx0XFx0XFx0XFx0XFx0aWYgKCFwcmkpIHtcXG4gNjQ4OlxcdFxcdFxcdFxcdFxcdFxcdHByaSA9IChzdHJ1Y3QgaXNvX3ByaW1hcnlfZGVzY3JpcHRvciAqKXZkcDtcXG4gNjQ5OlxcdFxcdFxcdFxcdFxcdFxcdC8qIFNhdmUgdGhlIGJ1ZmZlciBpbiBjYXNlIHdlIG5lZWQgaXQgLi4uICovXFxuIDY1MDpcXHRcXHRcXHRcXHRcXHRcXHRwcmlfYmggPSBiaDtcXG4gNjUxOlxcdFxcdFxcdFxcdFxcdFxcdGJoID0gTlVMTDtcXG4gNjUyOlxcdFxcdFxcdFxcdFxcdH1cXG4gNjUzOlxcdFxcdFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTI6MTY6MjIuNzIxNjM5MDgzWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0ODI2MTAwMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgaXNvZnNfZmlsbF9zdXBlcmAqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgd2UgbmVlZCB0byB6ZXJvIGluIG9uIGEgcG90ZW50aWFsIGlzc3VlIHdpdGhpbiBgaXNvZnNfZmlsbF9zdXBlcmAuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgY29kZSBhcm91bmQgbGluZSA4MjAuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBmaWxlc3lzdGVtLCB0aGVyZSdzIGxpa2VseSBzb21ldGhpbmcgaW50ZXJlc3RpbmcgaGFwcGVuaW5nIHRoZXJlIHJlbGF0ZWQgdG8gW3lvdXIgZmllbGQvc3BlY2lmaWMgYXJlYSBvZiBleHBlcnRpc2UsIGUuZy4sIGhvdyB0aGUgc3VwZXJibG9jayBpcyBpbml0aWFsaXplZCwgdm9sdW1lIGRlc2NyaXB0b3IgcGFyc2luZywgYWxsb2NhdGlvbiBzdHJhdGVnaWVzLCBldGMuIC0gYmFzZWQgb24geW91ciBhcmVhIG9mIGtub3dsZWRnZV0uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIHdpdGhpbiB0aGF0IHNlY3Rpb24gdG8gcGlucG9pbnQgd2hldGhlciBpdCBpcyBjb25uZWN0ZWQgdG8gW3RoZSBwcm9ibGVtIHlvdSBhcmUgaW52ZXN0aWdhdGluZ10uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4NzEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEyOjE2OjI1LjIwNDI1MTg1NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvaXNvZnMvaW5vZGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MDA6XFx0XFx0ICovXFxuIDgwMTpcXHRcXHRicmVsc2UocHJpX2JoKTtcXG4gODAyOlxcdFxcdGJyZWxzZShiaCk7XFxuIDgwMzpcXHRcXG4gODA0OlxcdFxcdC8qXFxuIDgwNTpcXHRcXHQgKiBGb3JjZSB0aGUgYmxvY2tzaXplIHRvIDUxMiBmb3IgNTEyIGJ5dGUgc2VjdG9ycy4gIFRoZSBmaWxlXFxuIDgwNjpcXHRcXHQgKiByZWFkIHByaW1pdGl2ZXMgcmVhbGx5IGdldCBpdCB3cm9uZyBpbiBhIGJhZCB3YXkgaWYgd2UgZG9uJ3RcXG4gODA3OlxcdFxcdCAqIGRvIHRoaXMuXFxuIDgwODpcXHRcXHQgKlxcbiA4MDk6XFx0XFx0ICogTm90ZSAtIHdlIHNob3VsZCBuZXZlciBiZSBzZXR0aW5nIHRoZSBibG9ja3NpemUgdG8gc29tZXRoaW5nXFxuIDgxMDpcXHRcXHQgKiBsZXNzIHRoYW4gdGhlIGhhcmR3YXJlIHNlY3RvciBzaXplIGZvciB0aGUgZGV2aWNlLiAgSWYgd2VcXG4gODExOlxcdFxcdCAqIGRvLCB3ZSB3b3VsZCBlbmQgdXAgaGF2aW5nIHRvIHJlYWQgbGFyZ2VyIGJ1ZmZlcnMgYW5kIHNwbGl0XFxuIDgxMjpcXHRcXHQgKiBvdXQgcG9ydGlvbnMgdG8gc2F0aXNmeSByZXF1ZXN0cy5cXG4gODEzOlxcdFxcdCAqXFxuIDgxNDpcXHRcXHQgKiBOb3RlMi0gdGhlIGlkZWEgaGVyZSBpcyB0aGF0IHdlIHdhbnQgdG8gZGVhbCB3aXRoIHRoZSBvcHRpbWFsXFxuIDgxNTpcXHRcXHQgKiB6b25lc2l6ZSBpbiB0aGUgZmlsZXN5c3RlbS4gIElmIHdlIGhhdmUgaXQgc2V0IHRvIHNvbWV0aGluZyBsZXNzLFxcbiA4MTY6XFx0XFx0ICogdGhlbiB3ZSBoYXZlIGhvcnJpYmxlIHByb2JsZW1zIHdpdGggdHJ5aW5nIHRvIHBpZWNlIHRvZ2V0aGVyXFxuIDgxNzpcXHRcXHQgKiBiaXRzIG9mIGFkamFjZW50IGJsb2NrcyBpbiBvcmRlciB0byBwcm9wZXJseSByZWFkIGRpcmVjdG9yeVxcbiA4MTg6XFx0XFx0ICogZW50cmllcy4gIEJ5IGZvcmNpbmcgdGhlIGJsb2Nrc2l6ZSBpbiB0aGlzIHdheSwgd2UgZW5zdXJlXFxuIDgxOTpcXHRcXHQgKiB0aGF0IHdlIHdpbGwgbmV2ZXIgYmUgcmVxdWlyZWQgdG8gZG8gdGhpcy5cXG4gODIwOlxcdFxcdCAqL1xcbiA4MjE6XFx0XFx0aWYgKCFzYl9zZXRfYmxvY2tzaXplKHMsIG9yaWdfem9uZXNpemUpKVxcbiA4MjI6XFx0XFx0XFx0Z290byBvdXRfZnJlZXNiaTtcXG4gODIzOlxcdFxcbiA4MjQ6XFx0XFx0c2JpLVxcdTAwM2VzX3Nlc3Npb25fc3RhcnQgPSAodTY0KXZvbF9kZXNjX3N0YXJ0IFxcdTAwM2NcXHUwMDNjXFxuIDgyNTpcXHRcXHRcXHRcXHRcXHQoSVNPRlNfQkxPQ0tfQklUUyAtIHMtXFx1MDAzZXNfYmxvY2tzaXplX2JpdHMpO1xcbiA4MjY6XFx0XFx0c2JpLVxcdTAwM2VzX25sc19pb2NoYXJzZXQgPSBOVUxMO1xcbiA4Mjc6XFx0XFxuIDgyODpcXHQjaWZkZWYgQ09ORklHX0pPTElFVFxcbiA4Mjk6XFx0XFx0aWYgKGpvbGlldF9sZXZlbCkge1xcbiA4MzA6XFx0XFx0XFx0Y2hhciAqcCA9IG9wdC1cXHUwMDNlaW9jaGFyc2V0ID8gb3B0LVxcdTAwM2Vpb2NoYXJzZXQgOiBDT05GSUdfTkxTX0RFRkFVTFQ7XFxuIDgzMTpcXHRcXHRcXHRpZiAoc3RyY21wKHAsIFxcXCJ1dGY4XFxcIikgIT0gMCkge1xcbiA4MzI6XFx0XFx0XFx0XFx0c2JpLVxcdTAwM2VzX25sc19pb2NoYXJzZXQgPSBvcHQtXFx1MDAzZWlvY2hhcnNldCA/XFxuIDgzMzpcXHRcXHRcXHRcXHRcXHRsb2FkX25scyhvcHQtXFx1MDAzZWlvY2hhcnNldCkgOiBsb2FkX25sc19kZWZhdWx0KCk7XFxuIDgzNDpcXHRcXHRcXHRcXHRpZiAoIXNiaS1cXHUwMDNlc19ubHNfaW9jaGFyc2V0KVxcbiA4MzU6XFx0XFx0XFx0XFx0XFx0Z290byBvdXRfZnJlZXNiaTtcXG4gODM2OlxcdFxcdFxcdH1cXG4gODM3OlxcdFxcdH1cXG4gODM4OlxcdCNlbmRpZlxcbiA4Mzk6XFx0XFx0cy1cXHUwMDNlc19vcCA9IFxcdTAwMjZpc29mc19zb3BzO1xcbiA4NDA6XFx0XFx0cy1cXHUwMDNlc19leHBvcnRfb3AgPSBcXHUwMDI2aXNvZnNfZXhwb3J0X29wcztcXG4gODQxOlxcdFxcdHNiaS1cXHUwMDNlc19tYXBwaW5nID0gb3B0LVxcdTAwM2VtYXA7XFxuIDg0MjpcXHRcXHRzYmktXFx1MDAzZXNfcm9jayA9IChvcHQtXFx1MDAzZXJvY2sgPyAyIDogMCk7XFxuIDg0MzpcXHRcXHRzYmktXFx1MDAzZXNfcm9ja19vZmZzZXQgPSAtMTsgLyogaW5pdGlhbCBvZmZzZXQsIHdpbGwgZ3Vlc3MgdW50aWwgU1AgaXMgZm91bmQqL1xcbiA4NDQ6XFx0XFx0c2JpLVxcdTAwM2VzX2NydWZ0ID0gb3B0LVxcdTAwM2VjcnVmdDtcXG4gODQ1OlxcdFxcdHNiaS1cXHUwMDNlc19oaWRlID0gb3B0LVxcdTAwM2VoaWRlO1xcbiA4NDY6XFx0XFx0c2JpLVxcdTAwM2VzX3Nob3dhc3NvYyA9IG9wdC1cXHUwMDNlc2hvd2Fzc29jO1xcbiA4NDc6XFx0XFx0c2JpLVxcdTAwM2VzX3VpZCA9IG9wdC1cXHUwMDNldWlkO1xcbiA4NDg6XFx0XFx0c2JpLVxcdTAwM2VzX2dpZCA9IG9wdC1cXHUwMDNlZ2lkO1xcbiA4NDk6XFx0XFx0c2JpLVxcdTAwM2VzX3VpZF9zZXQgPSBvcHQtXFx1MDAzZXVpZF9zZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEyOjE2OjI1LjIwNDM1NDk5NFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODY4ODExMjYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byBSb2NrIFJpZGdlIEV4dGVuc2lvbnMgaW4gSVNPRlMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIHRyb3VibGVzaG9vdCB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgZnMvaXNvZnMvcm9jay5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYHJvY2tfY29udGludWVgIGZ1bmN0aW9uLiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IFJvY2sgUmlkZ2UgZXh0ZW5zaW9ucyBhcmUgaGFuZGxlZCBpbiB0aGUgSVNPIDk2NjAgZmlsZXN5c3RlbSBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGUgY29udGludWF0aW9uIHJlY29yZHMgYXJlIHN0cnVjdHVyZWQgYW5kIGhvdyB0aGUgc3lzdGVtIGl0ZXJhdGVzIHRocm91Z2ggdGhlbSB0byByZXNvbHZlIGV4dGVuZGVkIGZpbGVuYW1lcyBvciBhdHRyaWJ1dGVzLiBUaGUgcG90ZW50aWFsIHByb2JsZW0gbGlrZWx5IGxpZXMgc29tZXdoZXJlIGluIHRoZSBsb2dpYyB0aGF0IGhhbmRsZXMgYSBjb250aW51ZWQgUm9jayBSaWRnZSBlbnRyeS4gTGV0J3Mgc2VlIGlmIHRoZXJlJ3MgYW4gb2J2aW91cyBmbGF3IGluIGhvdyB0aGUgZHJpdmVyIHByb2Nlc3NlcyB0aG9zZSByZWNvcmRzLiBJJ20gbG9va2luZyBmb3IgYW55dGhpbmcgdGhhdCBjb3VsZCBsZWFkIHRvIGluY29tcGxldGUgb3IgaW5jb3JyZWN0IGludGVycHJldGF0aW9uIG9mIHRoZSBleHRlbmRlZCBhdHRyaWJ1dGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTYyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMjoxNjoyNy4wNzMxNjgwNzZaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvaXNvZnMvcm9jay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDgwOlxcdCNkZWZpbmUgUlJfTUFYX0NFX0VOVFJJRVMgMzJcXG4gIDgxOlxcdFxcbiAgODI6XFx0LypcXG4gIDgzOlxcdCAqIFJldHVybnMgMCBpZiB0aGUgY2FsbGVyIHNob3VsZCBjb250aW51ZSBzY2FubmluZywgMSBpZiB0aGUgc2NhbiBtdXN0IGVuZFxcbiAgODQ6XFx0ICogYW5kIC12ZSBvbiBlcnJvci5cXG4gIDg1OlxcdCAqL1xcbiAgODY6XFx0c3RhdGljIGludCByb2NrX2NvbnRpbnVlKHN0cnVjdCByb2NrX3N0YXRlICpycylcXG4gIDg3OlxcdHtcXG4gIDg4OlxcdFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBycy1cXHUwMDNlaW5vZGUtXFx1MDAzZWlfc2I7XFxuICA4OTpcXHRcXHRzdHJ1Y3QgaXNvZnNfc2JfaW5mbyAqc2JpID0gSVNPRlNfU0Ioc2IpO1xcbiAgOTA6XFx0XFx0dTY0IGV4dGVudCA9ICh1bnNpZ25lZCBpbnQpcnMtXFx1MDAzZWNvbnRfZXh0ZW50O1xcbiAgOTE6XFx0XFx0dTY0IHNlc3Npb25fZW5kID0gc2JpLVxcdTAwM2VzX3Nlc3Npb25fc3RhcnQgK1xcbiAgOTI6XFx0XFx0XFx0KCh1NjQpc2JpLVxcdTAwM2VzX256b25lcyBcXHUwMDNjXFx1MDAzYyAoSVNPRlNfQkxPQ0tfQklUUyAtIHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzKSk7XFxuICA5MzpcXHRcXHRpbnQgcmV0ID0gMTtcXG4gIDk0OlxcdFxcdGludCBibG9ja3NpemUgPSAxIFxcdTAwM2NcXHUwMDNjIHJzLVxcdTAwM2Vpbm9kZS1cXHUwMDNlaV9ibGtiaXRzO1xcbiAgOTU6XFx0XFx0Y29uc3QgaW50IG1pbl9kZV9zaXplID0gb2Zmc2V0b2Yoc3RydWN0IHJvY2tfcmlkZ2UsIHUpO1xcbiAgOTY6XFx0XFxuICA5NzpcXHRcXHRrZnJlZShycy1cXHUwMDNlYnVmZmVyKTtcXG4gIDk4OlxcdFxcdHJzLVxcdTAwM2VidWZmZXIgPSBOVUxMO1xcbiAgOTk6XFx0XFxuIDEwMDpcXHRcXHRpZiAoKHVuc2lnbmVkKXJzLVxcdTAwM2Vjb250X29mZnNldCBcXHUwMDNlIGJsb2Nrc2l6ZSAtIG1pbl9kZV9zaXplIHx8XFxuIDEwMTpcXHRcXHQgICAgKHVuc2lnbmVkKXJzLVxcdTAwM2Vjb250X3NpemUgXFx1MDAzZSBibG9ja3NpemUgfHxcXG4gMTAyOlxcdFxcdCAgICAodW5zaWduZWQpKHJzLVxcdTAwM2Vjb250X29mZnNldCArIHJzLVxcdTAwM2Vjb250X3NpemUpIFxcdTAwM2UgYmxvY2tzaXplKSB7XFxuIDEwMzpcXHRcXHRcXHRwcmludGsoS0VSTl9OT1RJQ0UgXFxcInJvY2s6IGNvcnJ1cHRlZCBkaXJlY3RvcnkgZW50cnkuIFxcXCJcXG4gMTA0OlxcdFxcdFxcdFxcdFxcXCJleHRlbnQ9JWQsIG9mZnNldD0lZCwgc2l6ZT0lZFxcXFxuXFxcIixcXG4gMTA1OlxcdFxcdFxcdFxcdHJzLVxcdTAwM2Vjb250X2V4dGVudCwgcnMtXFx1MDAzZWNvbnRfb2Zmc2V0LCBycy1cXHUwMDNlY29udF9zaXplKTtcXG4gMTA2OlxcdFxcdFxcdHJldCA9IC1FSU87XFxuIDEwNzpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMTA4OlxcdFxcdH1cXG4gMTA5OlxcdFxcbiAxMTA6XFx0XFx0aWYgKHJzLVxcdTAwM2Vjb250X2V4dGVudCBcXHUwMDI2XFx1MDAyNlxcbiAxMTE6XFx0XFx0ICAgIChleHRlbnQgXFx1MDAzYyBzYmktXFx1MDAzZXNfc2Vzc2lvbl9zdGFydCB8fFxcbiAxMTI6XFx0XFx0ICAgICBleHRlbnQgXFx1MDAzZT0gc2Vzc2lvbl9lbmQgfHxcXG4gMTEzOlxcdFxcdCAgICAgZXh0ZW50IFxcdTAwM2U9IHNiX2JkZXZfbnJfYmxvY2tzKHNiKSkpIHtcXG4gMTE0OlxcdFxcdFxcdHByaW50ayhLRVJOX05PVElDRSBcXFwicm9jazogY29ycnVwdGVkIGRpcmVjdG9yeSBlbnRyeS4gXFxcIlxcbiAxMTU6XFx0XFx0XFx0XFx0XFxcImV4dGVudD0ldSBvdXQgb2Ygdm9sdW1lIChuem9uZXM9JWx1KVxcXFxuXFxcIixcXG4gMTE2OlxcdFxcdFxcdFxcdCh1bnNpZ25lZClycy1cXHUwMDNlY29udF9leHRlbnQsXFxuIDExNzpcXHRcXHRcXHRcXHRzYmktXFx1MDAzZXNfbnpvbmVzKTtcXG4gMTE4OlxcdFxcdFxcdHJldCA9IC1FSU87XFxuIDExOTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMTIwOlxcdFxcdH1cXG4gMTIxOlxcdFxcbiAxMjI6XFx0XFx0aWYgKHJzLVxcdTAwM2Vjb250X2V4dGVudCkge1xcbiAxMjM6XFx0XFx0XFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcXG4gMTI0OlxcdFxcbiAxMjU6XFx0XFx0XFx0cnMtXFx1MDAzZWJ1ZmZlciA9IGttYWxsb2MocnMtXFx1MDAzZWNvbnRfc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuIDEyNjpcXHRcXHRcXHRpZiAoIXJzLVxcdTAwM2VidWZmZXIpIHtcXG4gMTI3OlxcdFxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuIDEyODpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gMTI5OlxcdFxcdFxcdH1cXG4gMTMwOlxcdFxcdFxcdHJldCA9IC1FSU87XFxuIDEzMTpcXHRcXHRcXHRpZiAoKytycy1cXHUwMDNlY29udF9sb29wcyBcXHUwMDNlPSBSUl9NQVhfQ0VfRU5UUklFUylcXG4gMTMyOlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiAxMzM6XFx0XFx0XFx0YmggPSBzYl9icmVhZChycy1cXHUwMDNlaW5vZGUtXFx1MDAzZWlfc2IsIHJzLVxcdTAwM2Vjb250X2V4dGVudCk7XFxuIDEzNDpcXHRcXHRcXHRpZiAoYmgpIHtcXG4gMTM1OlxcdFxcdFxcdFxcdG1lbWNweShycy1cXHUwMDNlYnVmZmVyLCBiaC1cXHUwMDNlYl9kYXRhICsgcnMtXFx1MDAzZWNvbnRfb2Zmc2V0LFxcbiAxMzY6XFx0XFx0XFx0XFx0XFx0XFx0cnMtXFx1MDAzZWNvbnRfc2l6ZSk7XFxuIDEzNzpcXHRcXHRcXHRcXHRwdXRfYmgoYmgpO1xcbiAxMzg6XFx0XFx0XFx0XFx0cnMtXFx1MDAzZWNociA9IHJzLVxcdTAwM2VidWZmZXI7XFxuIDEzOTpcXHRcXHRcXHRcXHRycy1cXHUwMDNlbGVuID0gcnMtXFx1MDAzZWNvbnRfc2l6ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTI6MTY6MjcuMDczMjUwMjU2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYzODA2NTA2OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSb2NrIFJpZGdlIENvbnRpbnVhdGlvbiBFeHRlbnQgRml4KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHdoYXQncyB0aGUgY29yZSBvZiB0aGlzIHBhdGNoLCB0aGUgcHJvYmxlbSBpdCdzIHNvbHZpbmc/IEFoLCByaWdodCwgaXQncyBhYm91dCB0aGUgYHJvY2tfY29udGludWVgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgdGhlIGNvbnRpbnVhdGlvbiBleHRlbnQgKGBDRWAgZW50cmllcykgb2YgUm9jayBSaWRnZSBleHRlbnNpb24gcmVjb3Jkcy4gVGhlIG9sZGVyIGNvZGUgd2FzIHVzaW5nIHRoaXM6XG5cbmBgYGNcbmlmICgodW5zaWduZWQpcnMtXHUwMDNlY29udF9leHRlbnQgXHUwMDNlPSBJU09GU19TQihycy1cdTAwM2Vpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX256b25lcykge1xuYGBgXG5cblRoZSBwcm9ibGVtIGlzIGltbWVkaWF0ZWx5IG9idmlvdXMgdG8gbWUuIFdlJ3JlIGNvbXBhcmluZyBibG9jayB1bml0cyAoYHJzLVx1MDAzZWNvbnRfZXh0ZW50YCwgZXNzZW50aWFsbHkgdGhlIHBoeXNpY2FsIGJsb2NrL2V4dGVudCBvbiB0aGUgZGV2aWNlKSB3aXRoIGBzX256b25lc2AsIHdoaWNoIHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiB6b25lcyBpbiB0aGUgKnNlc3Npb24qLiBJbiBhIG11bHRpLXNlc3Npb24gc2NlbmFyaW8sIG9yIHdpdGggdmFyeWluZyBibG9jayBzaXplcyBhY3Jvc3Mgc2Vzc2lvbnMsIHRoaXMgY29tcGFyaXNvbiBpcyBmdW5kYW1lbnRhbGx5IGZsYXdlZC4gSXQgY291bGQgbGVhZCB0byBgY29udF9leHRlbnRgIGJlaW5nIGNoZWNrZWQgYWdhaW5zdCBpbmNvcnJlY3QgYm91bmRhcmllcywgcG90ZW50aWFsbHkgcmVzdWx0aW5nIGluIHJlYWRzIG91dHNpZGUgdGhlIGRldmljZSdzIGJvdW5kcywgb3V0c2lkZSB0aGUgY3VycmVudCBzZXNzaW9uLCBvciBldmVuIGJlZm9yZSB0aGUgc2Vzc2lvbidzIHN0YXJ0LiBUaGlzIHNjcmVhbXMgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgZGF0YSBjb3JydXB0aW9uLCBhIGNsYXNzaWMgcHJvYmxlbS5cblxuU28sIHRoZSBmaXggaXMgc3RyYWlnaHRmb3J3YXJkLCBidXQgZWZmZWN0aXZlLiBUaGV5J3ZlIGludHJvZHVjZWQgYHNfc2Vzc2lvbl9zdGFydGAgdG8gYHN0cnVjdCBpc29mc19zYl9pbmZvYCwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZSBhcyBpdCdzIHRoZSBhbmNob3Igb2YgdGhlIGN1cnJlbnQgc2Vzc2lvbiB3aXRoaW4gdGhlIGdyZWF0ZXIgbWVkaXVtLiBDcnVjaWFsbHksIHRoZSBjb2RlIG5vdyBpbml0aWFsaXplcyB0aGlzIGBzX3Nlc3Npb25fc3RhcnRgIHdpdGhpbiBgaXNvZnNfZmlsbF9zdXBlcmAsIHNwZWNpZmljYWxseSBhZnRlciB0aGUgYmxvY2sgc2l6ZSBpcyBzZXQuIEV4Y2VsbGVudCwgdGhhdCdzIGNsZWFuLiBUaGUgdXNlIG9mIGBremFsbG9jX29iamAgdG8gYWxsb2NhdGUgYHNiaWAgaXMgc291bmQgYXMgaXQgZW5zdXJlcyB0aGUgc3RydWN0IG1lbW9yeSBpcyBpbml0aWFsaXplZCB0byB6ZXJvLlxuXG5UaGUgY29yZSBvZiB0aGUgcGF0Y2ggaXRzZWxmIGFsdGVycyBgcm9ja19jb250aW51ZSgpYCB0byBwZXJmb3JtIGEgbW9yZSByb2J1c3QgdmFsaWRhdGlvbiBvZiB0aGUgZXh0ZW50LCBjaGVja2luZyBhZ2FpbnN0IGBzYmktXHUwMDNlc19zZXNzaW9uX3N0YXJ0YCwgYWxvbmcgd2l0aCBgc2Vzc2lvbl9lbmRgIGFuZCBgc2JfYmRldl9ucl9ibG9ja3Moc2IpYC4gVGhpcyBpcyBwcmVjaXNlbHkgd2hhdCdzIG5lZWRlZCAtIGJvdW5kcyBjaGVja2luZyBvbiBib3RoIHRoZSBzdGFydCBhbmQgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBzZXNzaW9uLlxuXG5Ob3csIGFzIGEgbmV4dCBzdGVwLCBJIG5lZWQgdG8gbG9vayBmb3IgYWRkaXRpb25hbCByaXNrcy4gQXJlIHRoZXJlIG90aGVyIGxvY2F0aW9ucyB3aGVyZSBgc19zZXNzaW9uX3N0YXJ0YCBpcyBhY2Nlc3NlZCBvciBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkLCBnaXZlbiB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UsIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gbGluZ2VyaW5nIG1lbW9yeSBhY2Nlc3MgaGF6YXJkcz8gSSB3aWxsIGNoZWNrIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGJvdGggd2l0aGluIHRoZSBwYXRjaCBpdHNlbGYgYW5kIGluIHJlbGF0ZWQgY29kZS4gSSdtIGtlZW4gdG8gbWFrZSBzdXJlIHRoZSBmaXggaXMgY29tcGxldGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxNjIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMjoxNjozMy40NTM5MDQyNFoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5NzMxMDQxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzX3Nlc3Npb25fc3RhcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaXNvZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2lzb2ZzL2lub2RlLmM9NTc0PXN0YXRpYyBpbnQgaXNvZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmMtODIzLVxcbmZzL2lzb2ZzL2lub2RlLmM6ODI0OlxcdHNiaS1cXHUwMDNlc19zZXNzaW9uX3N0YXJ0ID0gKHU2NCl2b2xfZGVzY19zdGFydCBcXHUwMDNjXFx1MDAzY1xcbmZzL2lzb2ZzL2lub2RlLmMtODI1LVxcdFxcdFxcdFxcdChJU09GU19CTE9DS19CSVRTIC0gcy1cXHUwMDNlc19ibG9ja3NpemVfYml0cyk7XFxuLS1cXG5mcy9pc29mcy9pc29mcy5oPTMyPXN0cnVjdCBpc29mc19zYl9pbmZvIHtcXG4tLVxcbmZzL2lzb2ZzL2lzb2ZzLmgtMzgtXFx0LyogU2Vzc2lvbiBzdGFydCBpbiBmaWxlc3lzdGVtIGJsb2NrIHVuaXRzLiAqL1xcbmZzL2lzb2ZzL2lzb2ZzLmg6Mzk6XFx0dTY0IHNfc2Vzc2lvbl9zdGFydDtcXG5mcy9pc29mcy9pc29mcy5oLTQwLVxcdFxcbi0tXFxuZnMvaXNvZnMvcm9jay5jPTg2PXN0YXRpYyBpbnQgcm9ja19jb250aW51ZShzdHJ1Y3Qgcm9ja19zdGF0ZSAqcnMpXFxuLS1cXG5mcy9pc29mcy9yb2NrLmMtOTAtXFx0dTY0IGV4dGVudCA9ICh1bnNpZ25lZCBpbnQpcnMtXFx1MDAzZWNvbnRfZXh0ZW50O1xcbmZzL2lzb2ZzL3JvY2suYzo5MTpcXHR1NjQgc2Vzc2lvbl9lbmQgPSBzYmktXFx1MDAzZXNfc2Vzc2lvbl9zdGFydCArXFxuZnMvaXNvZnMvcm9jay5jLTkyLVxcdFxcdCgodTY0KXNiaS1cXHUwMDNlc19uem9uZXMgXFx1MDAzY1xcdTAwM2MgKElTT0ZTX0JMT0NLX0JJVFMgLSBzYi1cXHUwMDNlc19ibG9ja3NpemVfYml0cykpO1xcbi0tXFxuZnMvaXNvZnMvcm9jay5jLTExMC1cXHRpZiAocnMtXFx1MDAzZWNvbnRfZXh0ZW50IFxcdTAwMjZcXHUwMDI2XFxuZnMvaXNvZnMvcm9jay5jOjExMTpcXHQgICAgKGV4dGVudCBcXHUwMDNjIHNiaS1cXHUwMDNlc19zZXNzaW9uX3N0YXJ0IHx8XFxuZnMvaXNvZnMvcm9jay5jLTExMi1cXHQgICAgIGV4dGVudCBcXHUwMDNlPSBzZXNzaW9uX2VuZCB8fFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMjoxNjozNC43NTEyMTk2NTZaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzE1NDA1MDUxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgSVNPRlMgUGF0Y2ggYW5kIGl0cyBLTVNBTiBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gdmVyaWZ5IHRoZSBzZXF1ZW5jZSBvZiBldmVudHMgaW4gYGlzb2ZzX2ZpbGxfc3VwZXJgLiBTcGVjaWZpY2FsbHksIEkgd2FudGVkIHRvIHNlZSBpZiB0aGUgUm9jayBSaWRnZSBwYXJzaW5nIG9yIGByb2NrX2NvbnRpbnVlYCBsb2dpYyBjb3VsZCBiZSB0cmlnZ2VyZWQgKmJlZm9yZSogYHNiaS1cdTAwM2VzX3Nlc3Npb25fc3RhcnRgIGlzIHNldC4gQWZ0ZXIgcmV2aWV3aW5nIHRoZSBjb2RlLCBpdCdzIGNsZWFyIHRoYXQgYHNiaWAgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAsIHNvIGl0J3MgZ3VhcmFudGVlZCB0byBiZSB6ZXJvLWluaXRpYWxpemVkIGZyb20gdGhlIGdldC1nby4gVGhlbiwgdGhlIHZvbHVtZSBkZXNjcmlwdG9ycyBhcmUgcmVhZCwgdGhlIGJsb2NrIHNpemUgaXMgc2V0LCBhbmQgY3J1Y2lhbGx5LCBgc2JpLVx1MDAzZXNfc2Vzc2lvbl9zdGFydGAgaXMgYXNzaWduZWQgKmJlZm9yZSogd2UgZXZlbiBnZXQgdG8gdGhlIGlub2RlIHJlYWRpbmcgb3IgZGlyZWN0b3J5IHBhcnNpbmcsIHdoZXJlIFJvY2sgUmlkZ2UgcGFyc2luZyB3b3VsZCBraWNrIGluLiBUaGUgc2Vzc2lvbiBzdGFydCBpcyBhIHNpbXBsZSBgdTY0YCwgc28gdGhlcmUncyBubyBjb21wbGV4IHN0cnVjdHVyZSB0byB3b3JyeSBhYm91dC5cblxuVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGludm9sdmVzIHRpZ2h0ZW5pbmcgYm91bmRzIGNoZWNrcyBvbiBSb2NrIFJpZGdlIGNvbnRpbnVhdGlvbiBlbnRyaWVzIChgQ0VgKS4gVGhpcyBpcyBhYm91dCBwcmV2ZW50aW5nIG91dC1vZi1ib3VuZHMgcmVhZHMsIG1lYW5pbmcgd2UgZG9uJ3QgYWNjaWRlbnRhbGx5IHRyeSB0byByZWFkIGRhdGEgZnJvbSB0aGUgZGlzayBvdXRzaWRlIG9mIHRoZSBpbnRlbmRlZCB2b2x1bWUgbGltaXRzLlxuXG5Ob3csIGxldCdzIGFkZHJlc3MgdGhlIEtNU0FOIGNvbmNlcm4uIFRoZSBjaGFuZ2VzIGFkZCBleHRyYSB2YWxpZGF0aW9uIGJvdW5kcyBjaGVja3Mgb24gYHJzLVx1MDAzZWNvbnRfZXh0ZW50YCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYmxvY2sgZGV2aWNlIHJlYWRzIGluIGBpc29mc2AgUm9jayBSaWRnZSBwYXJzaW5nLiBNeSBtYWluIGNvbmNlcm4gd2l0aCBLTVNBTiBpcyBhbHdheXMgYXJvdW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgaXNzdWVzLiBUaGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgd2F5cyBmb3IgdW5pbml0aWFsaXplZCBkYXRhIHRvIGxlYWsgdG8gdXNlcnNwYWNlLiBXZSdyZSB0YWxraW5nIGFib3V0IG91dC1vZi1ib3VuZHMgKnJlYWRzKiBpbiB0aGUga2VybmVsIGl0c2VsZiwgbm90IHRoZSBsZWFraW5nIG9mIGFueSBrZXJuZWwgZGF0YS5cblxuU28sIGxldCdzIHJldmlldyB0aGUgY3JpdGVyaWEgY2FyZWZ1bGx5OlxuXG4xLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2Ugd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcz8qKiBBYnNvbHV0ZWx5IG5vdC4gVGhlIGNvZGUgZG9lc24ndCBleHBvc2UgYW55IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UgdGhhdCBpcyB1bmluaXRpYWxpemVkLiBObyBgY29weV90b191c2VyYCwgbm8gaW5mb3JtYXRpb24gbGVha3MsIG5vIHBhZGRpbmcgbGVha3MuXG4yLiAgKipDb25kaXRpb25hbCBsb2dpYy9icmFuY2hpbmcgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogTm9wZS4gRXZlcnl0aGluZyBpcyBpbml0aWFsaXplZCBjb3JyZWN0bHkuIGB2b2xfZGVzY19zdGFydGAsIGBzYmlgLCBgc2JpLVx1MDAzZXNfc2Vzc2lvbl9zdGFydGAsIGBycy1cdTAwM2Vjb250X2V4dGVudGAsIHRoZXkncmUgYWxsIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyB1c2VkLlxuMy4gICoqQWxsb2NhdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyoqIE5vLiBgc2JpYCBpcyB6ZXJvZWQsIGFuZCBgc19zZXNzaW9uX3N0YXJ0YCBpcyBleHBsaWNpdGx5IGFzc2lnbmVkLlxuNC4gICoqQWx0ZXJlZCBib3VuZHMgY2hlY2tzIHBvdGVudGlhbGx5IGFjY2Vzc2luZyB1bmluaXRpYWxpemVkIGJ1ZmZlciBieXRlcz8qKiBOby4gVGhlIHBhdGNoIG9ubHkgdGlnaHRlbnMgYm91bmRzIGNoZWNrcyBhbmQgb25seSBjb25zdHJhaW5zIGJsb2NrIGV4dGVudCBudW1iZXJzIHRvIGJlIHdpdGhpbiB2YWxpZCByYW5nZXMuIFRoaXMgaXMgYSBtZW1vcnkgc2FmZXR5IGlzc3VlLCB3aGljaCB3aWxsIGJlIGNhdWdodCBieSBLQVNBTi5cblxuVGhlcmVmb3JlLCBhZnRlciB0aGlzIGRldGFpbGVkIGFuYWx5c2lzLCBJJ20gY29uZmlkZW50IHRoYXQgYE5lZWRzS01TQU5gIGlzIGZhbHNlLiBUaGVzZSBjaGFuZ2VzIGFyZSBhYm91dCBtZW1vcnkgKnNhZmV0eSosIHdoaWNoIEtBU0FOLCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBleGlzdGluZyBib3VuZHMgY2hlY2tzLCBlZmZlY3RpdmVseSBoYW5kbGVzLiBUaGUgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBLTVNBTi1yZWxldmFudCBpc3N1ZXMsIGFuZCB0aGUgY2hhbmdlcyBhcmUgbGltaXRlZCB0byB0aWdodGVuaW5nIHVwIHRob3NlIGRpc2svZGV2aWNlIGJ1ZmZlciByZWFkcyB3aXRoaW4gdGhlIGtlcm5lbC4gSSB3aWxsIGRyYWZ0IGEgYEtNU0FOUmVhc29uaW5nYCBjb21tZW50IHRvIG1ha2UgdGhpcyBkaXN0aW5jdGlvbiB2ZXJ5IGNsZWFyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTAwLCJPdXRwdXRUb2tlbnMiOjIwNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMjoxNjo0MS45MDUyNzYzOTRaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGZzL2lzb2ZzIHRvIHByb3Blcmx5IHZhbGlkYXRlIFJvY2sgUmlkZ2UgY29udGludWF0aW9uIGV4dGVudHMgKGBDRWAgZW50cmllcykgYWdhaW5zdCBzZXNzaW9uIGFuZCBibG9jayBkZXZpY2UgYm91bmRhcmllcyBieSBpbnRyb2R1Y2luZyBgc2JpLVxcdTAwM2VzX3Nlc3Npb25fc3RhcnRgIGFuZCBjb21wYXJpbmcgYGNvbnRfZXh0ZW50YCBhZ2FpbnN0IHRoZSB2YWxpZCByYW5nZS4gXFxuXFxuLSBgc3RydWN0IGlzb2ZzX3NiX2luZm9gIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmpgLCBhbmQgYHNfc2Vzc2lvbl9zdGFydGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCBkdXJpbmcgc3VwZXJibG9jayBzZXR1cCBiZWZvcmUgYW55IFJvY2sgUmlkZ2UgcGFyc2luZyBvY2N1cnMuXFxuLSBUaGUgcGF0Y2ggdGlnaHRlbnMgYm91bmRzIGNoZWNrcyBmb3IgYmxvY2sgcmVhZHMsIG1pdGlnYXRpbmcgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYmxvY2sgcmVhZHMgb24gY29ycnVwdGVkL21hbGljaW91cyBJU08gaW1hZ2VzICh3aGljaCBmYWxsIHVuZGVyIEtBU0FOL2dlbmVyaWMgYm91bmRzIGNoZWNraW5nKS5cXG4tIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzdGFjay9oZWFwIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCB0byB1c2VyIHNwYWNlLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBwcmVzZW50IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGZzL2lzb2ZzIHRvIHByb3Blcmx5IHZhbGlkYXRlIFJvY2sgUmlkZ2UgY29udGludWF0aW9uIGV4dGVudHMgKGBDRWAgZW50cmllcykgYWdhaW5zdCBzZXNzaW9uIGFuZCBibG9jayBkZXZpY2UgYm91bmRhcmllcyBieSBpbnRyb2R1Y2luZyBgc2JpLVxcdTAwM2VzX3Nlc3Npb25fc3RhcnRgIGFuZCBjb21wYXJpbmcgYGNvbnRfZXh0ZW50YCBhZ2FpbnN0IHRoZSB2YWxpZCByYW5nZS4gXFxuXFxuLSBgc3RydWN0IGlzb2ZzX3NiX2luZm9gIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmpgLCBhbmQgYHNfc2Vzc2lvbl9zdGFydGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCBkdXJpbmcgc3VwZXJibG9jayBzZXR1cCBiZWZvcmUgYW55IFJvY2sgUmlkZ2UgcGFyc2luZyBvY2N1cnMuXFxuLSBUaGUgcGF0Y2ggdGlnaHRlbnMgYm91bmRzIGNoZWNrcyBmb3IgYmxvY2sgcmVhZHMsIG1pdGlnYXRpbmcgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYmxvY2sgcmVhZHMgb24gY29ycnVwdGVkL21hbGljaW91cyBJU08gaW1hZ2VzICh3aGljaCBmYWxsIHVuZGVyIEtBU0FOL2dlbmVyaWMgYm91bmRzIGNoZWNraW5nKS5cXG4tIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzdGFjay9oZWFwIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCB0byB1c2VyIHNwYWNlLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBwcmVzZW50IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6dp2s[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 11:32:40 +0000 UTC FinishedAt: 2026-09-07 12:16:42 +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": "21860bb220225edeb87e9c831e6bf25c620e2126", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ISO9660_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "21860bb220225edeb87e9c831e6bf25c620e2126", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ISO9660_FS" ], "series_id": "a84db8e6-ca63-475e-b9c8-cbd1a849cb84" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "isofs_fill_super", "rock_continue", "get_rock_ridge_filename", "parse_rock_ridge_inode", "rock_ridge_symlink_read_folio" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lTTzk2NjBfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpc29mc19maWxsX3N1cGVyJiMzNDssCiAgICAmIzM0O3JvY2tfY29udGludWUmIzM0OywKICAgICYjMzQ7Z2V0X3JvY2tfcmlkZ2VfZmlsZW5hbWUmIzM0OywKICAgICYjMzQ7cGFyc2Vfcm9ja19yaWRnZV9pbm9kZSYjMzQ7LAogICAgJiMzNDtyb2NrX3JpZGdlX3N5bWxpbmtfcmVhZF9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGZzL2lzb2ZzIHRvIHByb3Blcmx5IHZhbGlkYXRlIFJvY2sgUmlkZ2UgY29udGludWF0aW9uIGV4dGVudHMgKGBDRWAgZW50cmllcykgYWdhaW5zdCBzZXNzaW9uIGFuZCBibG9jayBkZXZpY2UgYm91bmRhcmllcyBieSBpbnRyb2R1Y2luZyBgc2JpLVx1MDAzZXNfc2Vzc2lvbl9zdGFydGAgYW5kIGNvbXBhcmluZyBgY29udF9leHRlbnRgIGFnYWluc3QgdGhlIHZhbGlkIHJhbmdlLiBcblxuLSBgc3RydWN0IGlzb2ZzX3NiX2luZm9gIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmpgLCBhbmQgYHNfc2Vzc2lvbl9zdGFydGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCBkdXJpbmcgc3VwZXJibG9jayBzZXR1cCBiZWZvcmUgYW55IFJvY2sgUmlkZ2UgcGFyc2luZyBvY2N1cnMuXG4tIFRoZSBwYXRjaCB0aWdodGVucyBib3VuZHMgY2hlY2tzIGZvciBibG9jayByZWFkcywgbWl0aWdhdGluZyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBibG9jayByZWFkcyBvbiBjb3JydXB0ZWQvbWFsaWNpb3VzIElTTyBpbWFnZXMgKHdoaWNoIGZhbGwgdW5kZXIgS0FTQU4vZ2VuZXJpYyBib3VuZHMgY2hlY2tpbmcpLlxuLSBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgc3RhY2svaGVhcCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZS5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IHByZXNlbnQgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc2Vzc2lvbiBib3VuZGFyeSBhbmQgYmxvY2sgZGV2aWNlIGNhcGFjaXR5IHZhbGlkYXRpb24gZm9yIFJvY2sgUmlkZ2UgQ29udGludWF0aW9uIEFyZWEgKENFKSByZWNvcmRzIGluIGlzb2ZzLiBUaGUgbW9kaWZpZWQgY29kZSBpcyBkaXJlY3RseSByZWFjaGFibGUgYnkgbW91bnRpbmcgYW5kIHJlYWRpbmcgY3JhZnRlZCBJU085NjYwIGZpbGVzeXN0ZW0gaW1hZ2VzIHZpYSBsb29wL2Rpc2sgZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMjoxNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGYwMjE1YmZlZjNiNzc2MWU3N2Q4YjU5MmU3ZDdkMGIzNGQ1ZTllZWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDEyOjE1OjI4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2lzb2ZzL2lub2RlLmMgYi9mcy9pc29mcy9pbm9kZS5jXG5pbmRleCAzMzc4MzZhMGExNzA0Li5lZmNiOGZiMmIxMGM0IDEwMDY0NFxuLS0tIGEvZnMvaXNvZnMvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaXNvZnMvaW5vZGUuY1xuQEAgLTgyMSw2ICYjNDM7ODIxLDggQEAgc3RhdGljIGludCBpc29mc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuIFx0aWYgKCFzYl9zZXRfYmxvY2tzaXplKHMsIG9yaWdfem9uZXNpemUpKVxuIFx0XHRnb3RvIG91dF9mcmVlc2JpO1xuIFxuJiM0MztcdHNiaS1cdTAwM2VzX3Nlc3Npb25fc3RhcnQgPSAodTY0KXZvbF9kZXNjX3N0YXJ0IFx1MDAzY1x1MDAzY1xuJiM0MztcdFx0XHRcdChJU09GU19CTE9DS19CSVRTIC0gcy1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzKTtcbiBcdHNiaS1cdTAwM2VzX25sc19pb2NoYXJzZXQgPSBOVUxMO1xuIFxuICNpZmRlZiBDT05GSUdfSk9MSUVUXG5kaWZmIC0tZ2l0IGEvZnMvaXNvZnMvaXNvZnMuaCBiL2ZzL2lzb2ZzL2lzb2ZzLmhcbmluZGV4IGRhY2I5Y2RhZTRmZDEuLjA3MzJlMWFhM2I3ZmEgMTAwNjQ0XG4tLS0gYS9mcy9pc29mcy9pc29mcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9pc29mcy9pc29mcy5oXG5AQCAtMzUsNiAmIzQzOzM1LDggQEAgc3RydWN0IGlzb2ZzX3NiX2luZm8ge1xuIFx0dW5zaWduZWQgbG9uZyBzX2ZpcnN0ZGF0YXpvbmU7XG4gXHR1bnNpZ25lZCBsb25nIHNfbG9nX3pvbmVfc2l6ZTtcbiBcdHVuc2lnbmVkIGxvbmcgc19tYXhfc2l6ZTtcbiYjNDM7XHQvKiBTZXNzaW9uIHN0YXJ0IGluIGZpbGVzeXN0ZW0gYmxvY2sgdW5pdHMuICovXG4mIzQzO1x0dTY0IHNfc2Vzc2lvbl9zdGFydDtcbiBcdFxuIFx0aW50ICAgICAgICAgICBzX3JvY2tfb2Zmc2V0OyAvKiBvZmZzZXQgb2YgU1VTUCBmaWVsZHMgd2l0aGluIFNVIGFyZWEgKi9cbiBcdHMzMiAgICAgICAgICAgc19zYnNlY3RvcjtcbmRpZmYgLS1naXQgYS9mcy9pc29mcy9yb2NrLmMgYi9mcy9pc29mcy9yb2NrLmNcbmluZGV4IDI2MjhmMzFiZDNhNWQuLmE5NjQ1YTllODYyODkgMTAwNjQ0XG4tLS0gYS9mcy9pc29mcy9yb2NrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2lzb2ZzL3JvY2suY1xuQEAgLTksNiAmIzQzOzksNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9ibGtkZXYuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O2lzb2ZzLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtyb2NrLmhcJiMzNDtcbkBAIC04NCw2ICYjNDM7ODUsMTEgQEAgc3RhdGljIHZvaWQgaW5pdF9yb2NrX3N0YXRlKHN0cnVjdCByb2NrX3N0YXRlICpycywgc3RydWN0IGlub2RlICppbm9kZSlcbiAgKi9cbiBzdGF0aWMgaW50IHJvY2tfY29udGludWUoc3RydWN0IHJvY2tfc3RhdGUgKnJzKVxuIHtcbiYjNDM7XHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gcnMtXHUwMDNlaW5vZGUtXHUwMDNlaV9zYjtcbiYjNDM7XHRzdHJ1Y3QgaXNvZnNfc2JfaW5mbyAqc2JpID0gSVNPRlNfU0Ioc2IpO1xuJiM0MztcdHU2NCBleHRlbnQgPSAodW5zaWduZWQgaW50KXJzLVx1MDAzZWNvbnRfZXh0ZW50O1xuJiM0MztcdHU2NCBzZXNzaW9uX2VuZCA9IHNiaS1cdTAwM2VzX3Nlc3Npb25fc3RhcnQgJiM0MztcbiYjNDM7XHRcdCgodTY0KXNiaS1cdTAwM2VzX256b25lcyBcdTAwM2NcdTAwM2MgKElTT0ZTX0JMT0NLX0JJVFMgLSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzKSk7XG4gXHRpbnQgcmV0ID0gMTtcbiBcdGludCBibG9ja3NpemUgPSAxIFx1MDAzY1x1MDAzYyBycy1cdTAwM2Vpbm9kZS1cdTAwM2VpX2Jsa2JpdHM7XG4gXHRjb25zdCBpbnQgbWluX2RlX3NpemUgPSBvZmZzZXRvZihzdHJ1Y3Qgcm9ja19yaWRnZSwgdSk7XG5AQCAtMTAxLDExICYjNDM7MTA3LDE0IEBAIHN0YXRpYyBpbnQgcm9ja19jb250aW51ZShzdHJ1Y3Qgcm9ja19zdGF0ZSAqcnMpXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0aWYgKCh1bnNpZ25lZClycy1cdTAwM2Vjb250X2V4dGVudCBcdTAwM2U9IElTT0ZTX1NCKHJzLVx1MDAzZWlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfbnpvbmVzKSB7XG4mIzQzO1x0aWYgKHJzLVx1MDAzZWNvbnRfZXh0ZW50IFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAoZXh0ZW50IFx1MDAzYyBzYmktXHUwMDNlc19zZXNzaW9uX3N0YXJ0IHx8XG4mIzQzO1x0ICAgICBleHRlbnQgXHUwMDNlPSBzZXNzaW9uX2VuZCB8fFxuJiM0MztcdCAgICAgZXh0ZW50IFx1MDAzZT0gc2JfYmRldl9ucl9ibG9ja3Moc2IpKSkge1xuIFx0XHRwcmludGsoS0VSTl9OT1RJQ0UgXCYjMzQ7cm9jazogY29ycnVwdGVkIGRpcmVjdG9yeSBlbnRyeS4gXCYjMzQ7XG4gXHRcdFx0XCYjMzQ7ZXh0ZW50PSV1IG91dCBvZiB2b2x1bWUgKG56b25lcz0lbHUpXFxuXCYjMzQ7LFxuIFx0XHRcdCh1bnNpZ25lZClycy1cdTAwM2Vjb250X2V4dGVudCxcbi1cdFx0XHRJU09GU19TQihycy1cdTAwM2Vpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX256b25lcyk7XG4mIzQzO1x0XHRcdHNiaS1cdTAwM2VzX256b25lcyk7XG4gXHRcdHJldCA9IC1FSU87XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjE1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lTTzk2NjBfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpc29mc19maWxsX3N1cGVyJiMzNDssCiAgICAmIzM0O3JvY2tfY29udGludWUmIzM0OywKICAgICYjMzQ7Z2V0X3JvY2tfcmlkZ2VfZmlsZW5hbWUmIzM0OywKICAgICYjMzQ7cGFyc2Vfcm9ja19yaWRnZV9pbm9kZSYjMzQ7LAogICAgJiMzNDtyb2NrX3JpZGdlX3N5bWxpbmtfcmVhZF9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHNlc3Npb24gYm91bmRhcnkgYW5kIGJsb2NrIGRldmljZSBjYXBhY2l0eSB2YWxpZGF0aW9uIGZvciBSb2NrIFJpZGdlIENvbnRpbnVhdGlvbiBBcmVhIChDRSkgcmVjb3JkcyBpbiBpc29mcy4gVGhlIG1vZGlmaWVkIGNvZGUgaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGJ5IG1vdW50aW5nIGFuZCByZWFkaW5nIGNyYWZ0ZWQgSVNPOTY2MCBmaWxlc3lzdGVtIGltYWdlcyB2aWEgbG9vcC9kaXNrIGRldmljZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmMDIxNWJmZWYzYjc3NjFlNzdkOGI1OTJlN2Q3ZDBiMzRkNWU5ZWVmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAxMjoxNToyOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2lzb2ZzL2lub2RlLmMgYi9mcy9pc29mcy9pbm9kZS5jCmluZGV4IDMzNzgzNmEwYTE3MDQuLmVmY2I4ZmIyYjEwYzQgMTAwNjQ0Ci0tLSBhL2ZzL2lzb2ZzL2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaXNvZnMvaW5vZGUuYwpAQCAtODIxLDYgJiM0Mzs4MjEsOCBAQCBzdGF0aWMgaW50IGlzb2ZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpCiAJaWYgKCFzYl9zZXRfYmxvY2tzaXplKHMsIG9yaWdfem9uZXNpemUpKQogCQlnb3RvIG91dF9mcmVlc2JpOwogCiYjNDM7CXNiaS0mZ3Q7c19zZXNzaW9uX3N0YXJ0ID0gKHU2NCl2b2xfZGVzY19zdGFydCAmbHQ7Jmx0OwomIzQzOwkJCQkoSVNPRlNfQkxPQ0tfQklUUyAtIHMtJmd0O3NfYmxvY2tzaXplX2JpdHMpOwogCXNiaS0mZ3Q7c19ubHNfaW9jaGFyc2V0ID0gTlVMTDsKIAogI2lmZGVmIENPTkZJR19KT0xJRVQKZGlmZiAtLWdpdCBhL2ZzL2lzb2ZzL2lzb2ZzLmggYi9mcy9pc29mcy9pc29mcy5oCmluZGV4IGRhY2I5Y2RhZTRmZDEuLjA3MzJlMWFhM2I3ZmEgMTAwNjQ0Ci0tLSBhL2ZzL2lzb2ZzL2lzb2ZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaXNvZnMvaXNvZnMuaApAQCAtMzUsNiAmIzQzOzM1LDggQEAgc3RydWN0IGlzb2ZzX3NiX2luZm8gewogCXVuc2lnbmVkIGxvbmcgc19maXJzdGRhdGF6b25lOwogCXVuc2lnbmVkIGxvbmcgc19sb2dfem9uZV9zaXplOwogCXVuc2lnbmVkIGxvbmcgc19tYXhfc2l6ZTsKJiM0MzsJLyogU2Vzc2lvbiBzdGFydCBpbiBmaWxlc3lzdGVtIGJsb2NrIHVuaXRzLiAqLwomIzQzOwl1NjQgc19zZXNzaW9uX3N0YXJ0OwogCQogCWludCAgICAgICAgICAgc19yb2NrX29mZnNldDsgLyogb2Zmc2V0IG9mIFNVU1AgZmllbGRzIHdpdGhpbiBTVSBhcmVhICovCiAJczMyICAgICAgICAgICBzX3Nic2VjdG9yOwpkaWZmIC0tZ2l0IGEvZnMvaXNvZnMvcm9jay5jIGIvZnMvaXNvZnMvcm9jay5jCmluZGV4IDI2MjhmMzFiZDNhNWQuLmE5NjQ1YTllODYyODkgMTAwNjQ0Ci0tLSBhL2ZzL2lzb2ZzL3JvY2suYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9pc29mcy9yb2NrLmMKQEAgLTksNiAmIzQzOzksNyBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2VtYXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYmxrZGV2LmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7aXNvZnMuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3JvY2suaCYjMzQ7CkBAIC04NCw2ICYjNDM7ODUsMTEgQEAgc3RhdGljIHZvaWQgaW5pdF9yb2NrX3N0YXRlKHN0cnVjdCByb2NrX3N0YXRlICpycywgc3RydWN0IGlub2RlICppbm9kZSkKICAqLwogc3RhdGljIGludCByb2NrX2NvbnRpbnVlKHN0cnVjdCByb2NrX3N0YXRlICpycykKIHsKJiM0MzsJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHJzLSZndDtpbm9kZS0mZ3Q7aV9zYjsKJiM0MzsJc3RydWN0IGlzb2ZzX3NiX2luZm8gKnNiaSA9IElTT0ZTX1NCKHNiKTsKJiM0MzsJdTY0IGV4dGVudCA9ICh1bnNpZ25lZCBpbnQpcnMtJmd0O2NvbnRfZXh0ZW50OwomIzQzOwl1NjQgc2Vzc2lvbl9lbmQgPSBzYmktJmd0O3Nfc2Vzc2lvbl9zdGFydCAmIzQzOwomIzQzOwkJKCh1NjQpc2JpLSZndDtzX256b25lcyAmbHQ7Jmx0OyAoSVNPRlNfQkxPQ0tfQklUUyAtIHNiLSZndDtzX2Jsb2Nrc2l6ZV9iaXRzKSk7CiAJaW50IHJldCA9IDE7CiAJaW50IGJsb2Nrc2l6ZSA9IDEgJmx0OyZsdDsgcnMtJmd0O2lub2RlLSZndDtpX2Jsa2JpdHM7CiAJY29uc3QgaW50IG1pbl9kZV9zaXplID0gb2Zmc2V0b2Yoc3RydWN0IHJvY2tfcmlkZ2UsIHUpOwpAQCAtMTAxLDExICYjNDM7MTA3LDE0IEBAIHN0YXRpYyBpbnQgcm9ja19jb250aW51ZShzdHJ1Y3Qgcm9ja19zdGF0ZSAqcnMpCiAJCWdvdG8gb3V0OwogCX0KIAotCWlmICgodW5zaWduZWQpcnMtJmd0O2NvbnRfZXh0ZW50ICZndDs9IElTT0ZTX1NCKHJzLSZndDtpbm9kZS0mZ3Q7aV9zYiktJmd0O3NfbnpvbmVzKSB7CiYjNDM7CWlmIChycy0mZ3Q7Y29udF9leHRlbnQgJmFtcDsmYW1wOwomIzQzOwkgICAgKGV4dGVudCAmbHQ7IHNiaS0mZ3Q7c19zZXNzaW9uX3N0YXJ0IHx8CiYjNDM7CSAgICAgZXh0ZW50ICZndDs9IHNlc3Npb25fZW5kIHx8CiYjNDM7CSAgICAgZXh0ZW50ICZndDs9IHNiX2JkZXZfbnJfYmxvY2tzKHNiKSkpIHsKIAkJcHJpbnRrKEtFUk5fTk9USUNFICYjMzQ7cm9jazogY29ycnVwdGVkIGRpcmVjdG9yeSBlbnRyeS4gJiMzNDsKIAkJCSYjMzQ7ZXh0ZW50PSV1IG91dCBvZiB2b2x1bWUgKG56b25lcz0lbHUpXG4mIzM0OywKIAkJCSh1bnNpZ25lZClycy0mZ3Q7Y29udF9leHRlbnQsCi0JCQlJU09GU19TQihycy0mZ3Q7aW5vZGUtJmd0O2lfc2IpLSZndDtzX256b25lcyk7CiYjNDM7CQkJc2JpLSZndDtzX256b25lcyk7CiAJCXJldCA9IC1FSU87CiAJCWdvdG8gb3V0OwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY2NQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhpcyBJU09GUyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEkgc2VlIGNoYW5nZXMgYWNyb3NzIHRocmVlIGZpbGVzIGluIHRoZSBgZnMvaXNvZnNgIGRpcmVjdG9yeTogYGlub2RlLmNgLCBgaXNvZnMuaGAsIGFuZCBgcm9jay5jYC4gSW1tZWRpYXRlbHksIG15IGF0dGVudGlvbiBpcyBkcmF3biB0byB0aGUgYGlzb2ZzX2ZpbGxfc3VwZXJgIGZ1bmN0aW9uOyBzcGVjaWZpY2FsbHkgdGhlIG1vZGlmaWNhdGlvbiBzZXR0aW5nIGBzYmktJmd0O3Nfc2Vzc2lvbl9zdGFydGAuIFRoYXQmIzM5O3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24gZm9yIGFueSBJU08gZmlsZXN5c3RlbS4KClRoZW4sIHRoZSBtb3JlIGludGVyZXN0aW5nIGNoZWNrIGlzIHdpdGhpbiBgcm9ja19jb250aW51ZWAuIEl0JiMzOTtzIGVuc3VyaW5nIHRoYXQgdGhlIGBycy0mZ3Q7Y29udF9leHRlbnRgIHZhbHVlLCB3aGljaCBzZWVtcyB0byBiZSBhbiBleHRlbnQgY29udGludWF0aW9uIHJlZmVyZW5jZSwgaXMgd2l0aGluIHRoZSBleHBlY3RlZCBib3VuZGFyaWVzLiBUaGUgY29uZGl0aW9uYWwgYGlmIChycy0mZ3Q7Y29udF9leHRlbnQgJmFtcDsmYW1wOyAoZXh0ZW50ICZsdDsgc2JpLSZndDtzX3Nlc3Npb25fc3RhcnQgfHwgZXh0ZW50ICZndDs9IHNlc3Npb25fZW5kIHx8IGV4dGVudCAmZ3Q7PSBzYl9iZGV2X25yX2Jsb2NrcyhzYikpKWAgY29uZmlybXMgdGhpcy4gV2UmIzM5O3JlIHZlcmlmeWluZyB0aGF0IGBleHRlbnRgIGRvZXNuJiMzOTt0IGZhbGwgYmVmb3JlIGBzYmktJmd0O3Nfc2Vzc2lvbl9zdGFydGAsIGFmdGVyIGBzZXNzaW9uX2VuZGAsIGFuZCB3ZSBhbHNvIGNoZWNrIGlmIGl0IGdvZXMgcGFzdCB0aGUgdG90YWwgbnVtYmVyIG9mIGJsb2Nrcy4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCBmaXggZm9yIGEgc2VjdG9yIG91dC1vZi1ib3VuZHMgZXJyb3Igd2hlbiBkZWFsaW5nIHdpdGggbXVsdGktc2Vzc2lvbiBDRHMuCgpOb3csIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgYGZzL2lzb2ZzL0tjb25maWdgLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gd2hpY2ggQ09ORklHIG9wdGlvbnMgYXJlIHJlcXVpcmVkIHRvIGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkuIEtub3dpbmcgdGhlIGRlcGVuZGVuY2llcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhpcyBjaGFuZ2UgYW5kIGlmIGFueSByZWxhdGVkIGZlYXR1cmVzIGFyZSBhZmZlY3RlZC4gSSB3YW50IHRvIHNlZSBpZiB0aGlzIGNoYW5nZSBpbXBhY3RzIGFueSBvdGhlciBhcmVhcyBJJiMzOTttIGZhbWlsaWFyIHdpdGgsIHBlcmhhcHMgaW52b2x2aW5nIG11bHRpLXNlc3Npb24gb3IgUm9jayBSaWRnZSBleHRlbnNpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lTT0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaXNvZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2lzb2ZzL0tjb25maWc9MTk9Y29uZmlnIEpPTElFVFxuLS1cbmZzL2lzb2ZzL0tjb25maWctMzAtXG5mcy9pc29mcy9LY29uZmlnOjMxOmNvbmZpZyBaSVNPRlNcbmZzL2lzb2ZzL0tjb25maWctMzItXHRib29sIFwmIzM0O1RyYW5zcGFyZW50IGRlY29tcHJlc3Npb24gZXh0ZW5zaW9uXCYjMzQ7XG4tLVxuZnMvaXNvZnMvTWFrZWZpbGU9OT1pc29mcy0kKENPTkZJR19KT0xJRVQpXHQmIzQzOz0gam9saWV0Lm9cbmZzL2lzb2ZzL01ha2VmaWxlOjEwOmlzb2ZzLSQoQ09ORklHX1pJU09GUylcdCYjNDM7PSBjb21wcmVzcy5vXG4tLVxuZnMvaXNvZnMvY29tcHJlc3MuYz00MD1zdGF0aWMgbG9mZl90IHppc29mc191bmNvbXByZXNzX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBibG9ja19zdGFydCxcbi0tXG5mcy9pc29mcy9jb21wcmVzcy5jLTQ0LXtcbmZzL2lzb2ZzL2NvbXByZXNzLmM6NDU6XHR1bnNpZ25lZCBpbnQgemlzb2ZzX2Jsb2NrX3NoaWZ0ID0gSVNPRlNfSShpbm9kZSktXHUwMDNlaV9mb3JtYXRfcGFybVsxXTtcbmZzL2lzb2ZzL2NvbXByZXNzLmM6NDY6XHR1bnNpZ25lZCBpbnQgYnVmc2l6ZSA9IElTT0ZTX0JVRkZFUl9TSVpFKGlub2RlKTtcbmZzL2lzb2ZzL2NvbXByZXNzLmM6NDc6XHR1bnNpZ25lZCBpbnQgYnVmc2hpZnQgPSBJU09GU19CVUZGRVJfQklUUyhpbm9kZSk7XG5mcy9pc29mcy9jb21wcmVzcy5jLTQ4LVx0dW5zaWduZWQgaW50IGJ1Zm1hc2sgPSBidWZzaXplIC0gMTtcbi0tXG5mcy9pc29mcy9jb21wcmVzcy5jPTIwOD1zdGF0aWMgaW50IHppc29mc19maWxsX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBmdWxsX3BhZ2UsIGludCBwY291bnQsXG4tLVxuZnMvaXNvZnMvY29tcHJlc3MuYy0yMTItXHRsb2ZmX3QgYmxvY2tfc3RhcnQsIGJsb2NrX2VuZDtcbmZzL2lzb2ZzL2NvbXByZXNzLmM6MjEzOlx0dW5zaWduZWQgaW50IGhlYWRlcl9zaXplID0gSVNPRlNfSShpbm9kZSktXHUwMDNlaV9mb3JtYXRfcGFybVswXTtcbmZzL2lzb2ZzL2NvbXByZXNzLmM6MjE0Olx0dW5zaWduZWQgaW50IHppc29mc19ibG9ja19zaGlmdCA9IElTT0ZTX0koaW5vZGUpLVx1MDAzZWlfZm9ybWF0X3Bhcm1bMV07XG5mcy9pc29mcy9jb21wcmVzcy5jLTIxNS1cdHVuc2lnbmVkIGludCBibG9ja3B0cjtcbi0tXG5mcy9pc29mcy9jb21wcmVzcy5jLTIxOC1cdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XG5mcy9pc29mcy9jb21wcmVzcy5jOjIxOTpcdHVuc2lnbmVkIGludCBibGtiaXRzID0gSVNPRlNfQlVGRkVSX0JJVFMoaW5vZGUpO1xuZnMvaXNvZnMvY29tcHJlc3MuYy0yMjAtXHR1bnNpZ25lZCBpbnQgYmxrc2l6ZSA9IDEgXHUwMDNjXHUwMDNjIGJsa2JpdHM7XG4tLVxuZnMvaXNvZnMvY29tcHJlc3MuYz0zMDU9c3RhdGljIGludCB6aXNvZnNfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5mcy9pc29mcy9jb21wcmVzcy5jLTMxMC1cdGludCBpLCBwY291bnQsIGZ1bGxfcGFnZTtcbmZzL2lzb2ZzL2NvbXByZXNzLmM6MzExOlx0dW5zaWduZWQgaW50IHppc29mc19ibG9ja19zaGlmdCA9IElTT0ZTX0koaW5vZGUpLVx1MDAzZWlfZm9ybWF0X3Bhcm1bMV07XG5mcy9pc29mcy9jb21wcmVzcy5jLTMxMi1cdHVuc2lnbmVkIGludCB6aXNvZnNfcGFnZXNfcGVyX2NibG9jayA9XG4tLVxuZnMvaXNvZnMvZGlyLmM9ODU9c3RhdGljIGludCBkb19pc29mc19yZWFkZGlyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbmZzL2lzb2ZzL2Rpci5jLTg4LXtcbmZzL2lzb2ZzL2Rpci5jOjg5Olx0dW5zaWduZWQgbG9uZyBidWZzaXplID0gSVNPRlNfQlVGRkVSX1NJWkUoaW5vZGUpO1xuZnMvaXNvZnMvZGlyLmM6OTA6XHR1bnNpZ25lZCBjaGFyIGJ1ZmJpdHMgPSBJU09GU19CVUZGRVJfQklUUyhpbm9kZSk7XG5mcy9pc29mcy9kaXIuYy05MS1cdHVuc2lnbmVkIGxvbmcgYmxvY2ssIG9mZnNldCwgYmxvY2tfc2F2ZWQsIG9mZnNldF9zYXZlZDtcbi0tXG5mcy9pc29mcy9kaXIuYy05OC1cdHN0cnVjdCBpc29fZGlyZWN0b3J5X3JlY29yZCAqZGU7XG5mcy9pc29mcy9kaXIuYzo5OTpcdHN0cnVjdCBpc29mc19zYl9pbmZvICpzYmkgPSBJU09GU19TQihpbm9kZS1cdTAwM2VpX3NiKTtcbmZzL2lzb2ZzL2Rpci5jLTEwMC1cbi0tXG5mcy9pc29mcy9kaXIuYy0xMjUtXHRcdFx0YmggPSBOVUxMO1xuZnMvaXNvZnMvZGlyLmM6MTI2Olx0XHRcdGN0eC1cdTAwM2Vwb3MgPSAoY3R4LVx1MDAzZXBvcyAmIzQzOyBJU09GU19CTE9DS19TSVpFKSBcdTAwMjYgfihJU09GU19CTE9DS19TSVpFIC0gMSk7XG5mcy9pc29mcy9kaXIuYy0xMjctXHRcdFx0YmxvY2sgPSBjdHgtXHUwMDNlcG9zIFx1MDAzZVx1MDAzZSBidWZiaXRzO1xuLS1cbmZzL2lzb2ZzL2Rpci5jPTI1MD1pbnQgaXNvZnNfZmlsZWF0dHJfZ2V0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKVxuZnMvaXNvZnMvZGlyLmMtMjUxLXtcbmZzL2lzb2ZzL2Rpci5jOjI1MjpcdHN0cnVjdCBpc29mc19zYl9pbmZvICpzYmkgPSBJU09GU19TQihkZW50cnktXHUwMDNlZF9zYik7XG5mcy9pc29mcy9kaXIuYy0yNTMtXG4tLVxuZnMvaXNvZnMvZXhwb3J0LmM9MjA9aXNvZnNfZXhwb3J0X2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9pc29mcy9leHBvcnQuYy0yNi1cbmZzL2lzb2ZzL2V4cG9ydC5jOjI3Olx0aWYgKGJsb2NrID09IDAgfHwgYmxvY2sgXHUwMDNlPSBJU09GU19TQihzYiktXHUwMDNlc19uem9uZXMpXG5mcy9pc29mcy9leHBvcnQuYy0yOC1cdFx0cmV0dXJuIEVSUl9QVFIoLUVTVEFMRSk7XG4tLVxuZnMvaXNvZnMvZXhwb3J0LmM9NDQ9c3RhdGljIHN0cnVjdCBkZW50cnkgKmlzb2ZzX2V4cG9ydF9nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKVxuLS1cbmZzL2lzb2ZzL2V4cG9ydC5jLTQ4LVx0c3RydWN0IGlub2RlICpjaGlsZF9pbm9kZSA9IGRfaW5vZGUoY2hpbGQpO1xuZnMvaXNvZnMvZXhwb3J0LmM6NDk6XHRzdHJ1Y3QgaXNvX2lub2RlX2luZm8gKmVfY2hpbGRfaW5vZGUgPSBJU09GU19JKGNoaWxkX2lub2RlKTtcbmZzL2lzb2ZzL2V4cG9ydC5jLTUwLVx0c3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkICpkZSA9IE5VTEw7XG4tLVxuZnMvaXNvZnMvZXhwb3J0LmM9MTE5PWlzb2ZzX2V4cG9ydF9lbmNvZGVfZmgoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9pc29mcy9leHBvcnQuYy0xMjMte1xuZnMvaXNvZnMvZXhwb3J0LmM6MTI0Olx0c3RydWN0IGlzb19pbm9kZV9pbmZvICogZWkgPSBJU09GU19JKGlub2RlKTtcbmZzL2lzb2ZzL2V4cG9ydC5jLTEyNS1cdGludCBsZW4gPSAqbWF4X2xlbjtcbi0tXG5mcy9pc29mcy9leHBvcnQuYy0xNDktXHRcdHN0cnVjdCBpc29faW5vZGVfaW5mbyAqZXBhcmVudDtcbmZzL2lzb2ZzL2V4cG9ydC5jOjE1MDpcdFx0ZXBhcmVudCA9IElTT0ZTX0kocGFyZW50KTtcbmZzL2lzb2ZzL2V4cG9ydC5jLTE1MS1cdFx0ZmgzMlszXSA9IGVwYXJlbnQtXHUwMDNlaV9pZ2V0NV9ibG9jaztcbi0tXG5mcy9pc29mcy9pbm9kZS5jPTUyPXN0YXRpYyB2b2lkIGlzb2ZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvaXNvZnMvaW5vZGUuYy01My17XG5mcy9pc29mcy9pbm9kZS5jOjU0Olx0c3RydWN0IGlzb2ZzX3NiX2luZm8gKnNiaSA9IElTT0ZTX1NCKHNiKTtcbmZzL2lzb2ZzL2lub2RlLmMtNTUtXG4tLVxuZnMvaXNvZnMvaW5vZGUuYz04MD1zdGF0aWMgdm9pZCBpc29mc19mcmVlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9pc29mcy9pbm9kZS5jLTgxLXtcbmZzL2lzb2ZzL2lub2RlLmM6ODI6XHRrbWVtX2NhY2hlX2ZyZWUoaXNvZnNfaW5vZGVfY2FjaGVwLCBJU09GU19JKGlub2RlKSk7XG5mcy9pc29mcy9pbm9kZS5jLTgzLX1cbi0tXG5mcy9pc29mcy9pbm9kZS5jPTQ0ND1zdGF0aWMgaW50IGlzb2ZzX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBkZW50cnkgKnJvb3QpXG5mcy9pc29mcy9pbm9kZS5jLTQ0NS17XG5mcy9pc29mcy9pbm9kZS5jOjQ0NjpcdHN0cnVjdCBpc29mc19zYl9pbmZvICpzYmkgPSBJU09GU19TQihyb290LVx1MDAzZWRfc2IpO1xuZnMvaXNvZnMvaW5vZGUuYy00NDctXG4tLVxuZnMvaXNvZnMvaW5vZGUuYy00NzAtXG5mcy9pc29mcy9pbm9kZS5jOjQ3MTpcdGlmIChzYmktXHUwMDNlc19kbW9kZSAhPSBJU09GU19JTlZBTElEX01PREUpXG5mcy9pc29mcy9pbm9kZS5jLTQ3Mi1cdFx0c2VxX3ByaW50ZihtLCBcJiMzNDssZG1vZGU9JW9cJiMzNDssIHNiaS1cdTAwM2VzX2Rtb2RlKTtcbmZzL2lzb2ZzL2lub2RlLmM6NDczOlx0aWYgKHNiaS1cdTAwM2VzX2Ztb2RlICE9IElTT0ZTX0lOVkFMSURfTU9ERSlcbmZzL2lzb2ZzL2lub2RlLmMtNDc0LVx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyxmbW9kZT0lb1wmIzM0Oywgc2JpLVx1MDAzZXNfZm1vZGUpO1xuLS1cbmZzL2lzb2ZzL2lub2RlLmM9NTAzPXN0YXRpYyB1bnNpZ25lZCBpbnQgaXNvZnNfZ2V0X2xhc3Rfc2Vzc2lvbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzMzIgc2Vzc2lvbilcbi0tXG5mcy9pc29mcy9pbm9kZS5jLTUxNi1cdFx0aWYgKGNkcm9tX3JlYWRfdG9jZW50cnkoY2RpLCBcdTAwMjZ0ZSkgPT0gMCkge1xuZnMvaXNvZnMvaW5vZGUuYzo1MTc6XHRcdFx0cHJpbnRrKEtFUk5fREVCVUcgXCYjMzQ7SVNPRlM6IFNlc3Npb24gJWQgc3RhcnQgJWQgdHlwZSAlZFxcblwmIzM0OyxcbmZzL2lzb2ZzL2lub2RlLmMtNTE4LVx0XHRcdFx0c2Vzc2lvbiwgdGUuY2R0ZV9hZGRyLmxiYSxcbi0tXG5mcy9pc29mcy9pbm9kZS5jLTUyMy1cbmZzL2lzb2ZzL2lub2RlLmM6NTI0Olx0XHRwcmludGsoS0VSTl9FUlIgXCYjMzQ7SVNPRlM6IEludmFsaWQgc2Vzc2lvbiBudW1iZXIgb3IgdHlwZSBvZiB0cmFja1xcblwmIzM0Oyk7XG5mcy9pc29mcy9pbm9kZS5jLTUyNS1cdH1cbi0tXG5mcy9pc29mcy9pbm9kZS5jPTU3ND1zdGF0aWMgaW50IGlzb2ZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvaXNvZnMvaW5vZGUuYy02MDctXHRcdHByaW50ayhLRVJOX1dBUk5JTkdcbmZzL2lzb2ZzL2lub2RlLmM6NjA4Olx0XHQgICAgICAgXCYjMzQ7SVNPRlM6IHVuc3VwcG9ydGVkL2ludmFsaWQgaGFyZHdhcmUgc2VjdG9yIHNpemUgJWRcXG5cJiMzNDssXG5mcy9pc29mcy9pbm9kZS5jLTYwOS1cdFx0XHRiZGV2X2xvZ2ljYWxfYmxvY2tfc2l6ZShzLVx1MDAzZXNfYmRldikpO1xuLS1cbmZzL2lzb2ZzL2lub2RlLmMtNjE0LVx0XHRwcmludGsoS0VSTl9FUlJcbmZzL2lzb2ZzL2lub2RlLmM6NjE1Olx0XHQgICAgICAgXCYjMzQ7SVNPRlM6IHVuYWJsZSB0byBzZXQgYmxvY2tzaXplXFxuXCYjMzQ7KTtcbmZzL2lzb2ZzL2lub2RlLmMtNjE2LVx0XHRnb3RvIG91dF9mcmVlc2JpO1xuLS1cbmZzL2lzb2ZzL2lub2RlLmMtNjMwLVxuZnMvaXNvZnMvaW5vZGUuYzo2MzE6XHRcdGJsb2NrID0gaXNvX2Jsa251bSBcdTAwM2NcdTAwM2MgKElTT0ZTX0JMT0NLX0JJVFMgLSBzLVx1MDAzZXNfYmxvY2tzaXplX2JpdHMpO1xuZnMvaXNvZnMvaW5vZGUuYy02MzItXHRcdGlmICghKGJoID0gc2JfYnJlYWQocywgYmxvY2spKSlcbi0tXG5mcy9pc29mcy9pbm9kZS5jLTc1NC1cbmZzL2lzb2ZzL2lub2RlLmM6NzU1Olx0cy1cdTAwM2VzX21hZ2ljID0gSVNPRlNfU1VQRVJfTUFHSUM7XG5mcy9pc29mcy9pbm9kZS5jLTc1Ni1cbi0tXG5mcy9pc29mcy9pbm9kZS5jLTc3My0jaWZuZGVmIEJFUVVJRVRcbmZzL2lzb2ZzL2lub2RlLmM6Nzc0Olx0cHJpbnRrKEtFUk5fREVCVUcgXCYjMzQ7SVNPRlM6IE1heCBzaXplOiVsZCAgIExvZyB6b25lIHNpemU6JWxkXFxuXCYjMzQ7LFxuZnMvaXNvZnMvaW5vZGUuYy03NzUtXHRcdHNiaS1cdTAwM2VzX21heF9zaXplLCAxVUwgXHUwMDNjXHUwMDNjIHNiaS1cdTAwM2VzX2xvZ196b25lX3NpemUpO1xuZnMvaXNvZnMvaW5vZGUuYzo3NzY6XHRwcmludGsoS0VSTl9ERUJVRyBcJiMzNDtJU09GUzogRmlyc3QgZGF0YXpvbmU6JWxkXFxuXCYjMzQ7LCBzYmktXHUwMDNlc19maXJzdGRhdGF6b25lKTtcbmZzL2lzb2ZzL2lub2RlLmMtNzc3LVx0aWYoc2JpLVx1MDAzZXNfaGlnaF9zaWVycmEpXG5mcy9pc29mcy9pbm9kZS5jOjc3ODpcdFx0cHJpbnRrKEtFUk5fREVCVUcgXCYjMzQ7SVNPRlM6IERpc2MgaW4gSGlnaCBTaWVycmEgZm9ybWF0LlxcblwmIzM0Oyk7XG5mcy9pc29mcy9pbm9kZS5jLTc3OS0jZW5kaWZcbi0tXG5mcy9pc29mcy9pbm9kZS5jLTgyNC1cdHNiaS1cdTAwM2VzX3Nlc3Npb25fc3RhcnQgPSAodTY0KXZvbF9kZXNjX3N0YXJ0IFx1MDAzY1x1MDAzY1xuZnMvaXNvZnMvaW5vZGUuYzo4MjU6XHRcdFx0XHQoSVNPRlNfQkxPQ0tfQklUUyAtIHMtXHUwMDNlc19ibG9ja3NpemVfYml0cyk7XG5mcy9pc29mcy9pbm9kZS5jLTgyNi1cdHNiaS1cdTAwM2VzX25sc19pb2NoYXJzZXQgPSBOVUxMO1xuLS1cbmZzL2lzb2ZzL2lub2RlLmMtODU3LVx0ICovXG5mcy9pc29mcy9pbm9kZS5jOjg1ODpcdGlmIChvcHQtXHUwMDNlZm1vZGUgIT0gSVNPRlNfSU5WQUxJRF9NT0RFKVxuZnMvaXNvZnMvaW5vZGUuYy04NTktXHRcdHNiaS1cdTAwM2VzX2Ztb2RlID0gb3B0LVx1MDAzZWZtb2RlIFx1MDAyNiAwNzc3O1xuZnMvaXNvZnMvaW5vZGUuYy04NjAtXHRlbHNlXG5mcy9pc29mcy9pbm9kZS5jOjg2MTpcdFx0c2JpLVx1MDAzZXNfZm1vZGUgPSBJU09GU19JTlZBTElEX01PREU7XG5mcy9pc29mcy9pbm9kZS5jOjg2MjpcdGlmIChvcHQtXHUwMDNlZG1vZGUgIT0gSVNPRlNfSU5WQUxJRF9NT0RFKVxuZnMvaXNvZnMvaW5vZGUuYy04NjMtXHRcdHNiaS1cdTAwM2VzX2Rtb2RlID0gb3B0LVx1MDAzZWRtb2RlIFx1MDAyNiAwNzc3O1xuZnMvaXNvZnMvaW5vZGUuYy04NjQtXHRlbHNlXG5mcy9pc29mcy9pbm9kZS5jOjg2NTpcdFx0c2JpLVx1MDAzZXNfZG1vZGUgPSBJU09GU19JTlZBTElEX01PREU7XG5mcy9pc29mcy9pbm9kZS5jLTg2Ni1cbi0tXG5mcy9pc29mcy9pbm9kZS5jLTg4MC1cdFx0XHRwcmludGsoS0VSTl9OT1RJQ0VcbmZzL2lzb2ZzL2lub2RlLmM6ODgxOlx0XHRcdCAgICAgICBcJiMzNDtJU09GUzogcm9vdCBpbm9kZSBpcyB1bnVzYWJsZS4gXCYjMzQ7XG5mcy9pc29mcy9pbm9kZS5jLTg4Mi1cdFx0XHQgICAgICAgXCYjMzQ7RGlzYWJsaW5nIFJvY2sgUmlkZ2UgYW5kIHN3aXRjaGluZyB0byBKb2xpZXQuXCYjMzQ7KTtcbi0tXG5mcy9pc29mcy9pbm9kZS5jLTg5Ni1cdFx0cHJpbnRrKEtFUk5fTk9USUNFXG5mcy9pc29mcy9pbm9kZS5jOjg5NzpcdFx0XHRcJiMzNDtJU09GUzogcHJpbWFyeSByb290IGRpcmVjdG9yeSBpcyBlbXB0eS4gXCYjMzQ7XG5mcy9pc29mcy9pbm9kZS5jLTg5OC1cdFx0XHRcJiMzNDtEaXNhYmxpbmcgUm9jayBSaWRnZSBhbmQgc3dpdGNoaW5nIHRvIEpvbGlldC5cJiMzNDspO1xuLS1cbmZzL2lzb2ZzL2lub2RlLmMtOTE2LVx0XHRcdHByaW50ayhLRVJOX0RFQlVHXG5mcy9pc29mcy9pbm9kZS5jOjkxNzpcdFx0XHRcdFwmIzM0O0lTT0ZTOiBjaGFuZ2luZyB0byBzZWNvbmRhcnkgcm9vdFxcblwmIzM0Oyk7XG5mcy9pc29mcy9pbm9kZS5jLTkxOC1cdFx0XHRpcHV0KGlub2RlKTtcbi0tXG5mcy9pc29mcy9pbm9kZS5jLTk4MC1vdXRfYmFkX3pvbmVfc2l6ZTpcbmZzL2lzb2ZzL2lub2RlLmM6OTgxOlx0cHJpbnRrKEtFUk5fV0FSTklORyBcJiMzNDtJU09GUzogQmFkIGxvZ2ljYWwgem9uZSBzaXplICVsZFxcblwmIzM0OyxcbmZzL2lzb2ZzL2lub2RlLmMtOTgyLVx0XHRzYmktXHUwMDNlc19sb2dfem9uZV9zaXplKTtcbi0tXG5mcy9pc29mcy9pbm9kZS5jLTk4NC1vdXRfYmFkX3NpemU6XG5mcy9pc29mcy9pbm9kZS5jOjk4NTpcdHByaW50ayhLRVJOX1dBUk5JTkcgXCYjMzQ7SVNPRlM6IExvZ2ljYWwgem9uZSBzaXplKCVkKSBcdTAwM2MgaGFyZHdhcmUgYmxvY2tzaXplKCV1KVxcblwmIzM0OyxcbmZzL2lzb2ZzL2lub2RlLmMtOTg2LVx0XHRvcmlnX3pvbmVzaXplLCBvcHQtXHUwMDNlYmxvY2tzaXplKTtcbi0tXG5mcy9pc29mcy9pbm9kZS5jLTk4OS1cdGlmICghc2lsZW50KVxuZnMvaXNvZnMvaW5vZGUuYzo5OTA6XHRcdHByaW50ayhLRVJOX1dBUk5JTkcgXCYjMzQ7SVNPRlM6IFVuYWJsZSB0byBpZGVudGlmeSBDRC1ST00gZm9ybWF0LlxcblwmIzM0Oyk7XG5mcy9pc29mcy9pbm9kZS5jLTk5MS1cbi0tXG5mcy9pc29mcy9pbm9kZS5jPTEwMDE9c3RhdGljIGludCBpc29mc19zdGF0ZnMgKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1Zilcbi0tXG5mcy9pc29mcy9pbm9kZS5jLTEwMDUtXG5mcy9pc29mcy9pbm9kZS5jOjEwMDY6XHRidWYtXHUwMDNlZl90eXBlID0gSVNPRlNfU1VQRVJfTUFHSUM7XG5mcy9pc29mcy9pbm9kZS5jLTEwMDctXHRidWYtXHUwMDNlZl9ic2l6ZSA9IHNiLVx1MDAzZXNfYmxvY2tzaXplO1xuZnMvaXNvZnMvaW5vZGUuYzoxMDA4Olx0YnVmLVx1MDAzZWZfYmxvY2tzID0gKElTT0ZTX1NCKHNiKS1cdTAwM2VzX256b25lc1xuZnMvaXNvZnMvaW5vZGUuYzoxMDA5Olx0XHRcdTAwM2NcdTAwM2MgKElTT0ZTX1NCKHNiKS1cdTAwM2VzX2xvZ196b25lX3NpemUgLSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzKSk7XG5mcy9pc29mcy9pbm9kZS5jLTEwMTAtXHRidWYtXHUwMDNlZl9iZnJlZSA9IDA7XG5mcy9pc29mcy9pbm9kZS5jLTEwMTEtXHRidWYtXHUwMDNlZl9iYXZhaWwgPSAwO1xuZnMvaXNvZnMvaW5vZGUuYzoxMDEyOlx0YnVmLVx1MDAzZWZfZmlsZXMgPSBJU09GU19TQihzYiktXHUwMDNlc19uaW5vZGVzO1xuZnMvaXNvZnMvaW5vZGUuYy0xMDEzLVx0YnVmLVx1MDAzZWZfZmZyZWUgPSAwO1xuLS1cbmZzL2lzb2ZzL2lub2RlLmM9MTAyND1pbnQgaXNvZnNfZ2V0X2Jsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssXG4tLVxuZnMvaXNvZnMvaW5vZGUuYy0xMDMxLVx0aW50IHNlY3Rpb24sIHJ2LCBlcnJvcjtcbmZzL2lzb2ZzL2lub2RlLmM6MTAzMjpcdHN0cnVjdCBpc29faW5vZGVfaW5mbyAqZWkgPSBJU09GU19JKGlub2RlKTtcbmZzL2lzb2ZzL2lub2RlLmMtMTAzMy1cbi0tXG5mcy9pc29mcy9pbm9kZS5jLTEwNDMtXHRmaXJzdGV4dCA9IGVpLVx1MDAzZWlfZmlyc3RfZXh0ZW50O1xuZnMvaXNvZnMvaW5vZGUuYzoxMDQ0Olx0c2VjdF9zaXplID0gZWktXHUwMDNlaV9zZWN0aW9uX3NpemUgXHUwMDNlXHUwMDNlIElTT0ZTX0JVRkZFUl9CSVRTKGlub2RlKTtcbmZzL2lzb2ZzL2lub2RlLmMtMTA0NS1cdG5leHRibGsgPSBlaS1cdTAwM2VpX25leHRfc2VjdGlvbl9ibG9jaztcbi0tXG5mcy9pc29mcy9pbm9kZS5jLTEwNTYtXHRcdCAqL1xuZnMvaXNvZnMvaW5vZGUuYzoxMDU3Olx0XHRpZiAoYl9vZmYgXHUwMDNlICgoaW5vZGUtXHUwMDNlaV9zaXplICYjNDM7IFBBR0VfU0laRSAtIDEpIFx1MDAzZVx1MDAzZSBJU09GU19CVUZGRVJfQklUUyhpbm9kZSkpKSB7XG5mcy9pc29mcy9pbm9kZS5jLTEwNTgtXHRcdFx0cHJpbnRrKEtFUk5fREVCVUcgXCYjMzQ7JXM6IGJsb2NrIFx1MDAzZT0gRU9GICglbHUsICVsbHUpXFxuXCYjMzQ7LFxuLS1cbmZzL2lzb2ZzL2lub2RlLmMtMTA3Ni1cdFx0XHR9XG5mcy9pc29mcy9pbm9kZS5jOjEwNzc6XHRcdFx0Zmlyc3RleHQgID0gSVNPRlNfSShuaW5vZGUpLVx1MDAzZWlfZmlyc3RfZXh0ZW50O1xuZnMvaXNvZnMvaW5vZGUuYzoxMDc4Olx0XHRcdHNlY3Rfc2l6ZSA9IElTT0ZTX0kobmlub2RlKS1cdTAwM2VpX3NlY3Rpb25fc2l6ZSBcdTAwM2VcdTAwM2UgSVNPRlNfQlVGRkVSX0JJVFMobmlub2RlKTtcbmZzL2lzb2ZzL2lub2RlLmM6MTA3OTpcdFx0XHRuZXh0YmxrICAgPSBJU09GU19JKG5pbm9kZSktXHUwMDNlaV9uZXh0X3NlY3Rpb25fYmxvY2s7XG5mcy9pc29mcy9pbm9kZS5jOjEwODA6XHRcdFx0bmV4dG9mZiAgID0gSVNPRlNfSShuaW5vZGUpLVx1MDAzZWlfbmV4dF9zZWN0aW9uX29mZnNldDtcbmZzL2lzb2ZzL2lub2RlLmMtMTA4MS1cdFx0XHRpcHV0KG5pbm9kZSk7XG4tLVxuZnMvaXNvZnMvaW5vZGUuYz0xMTcxPXN0YXRpYyBpbnQgaXNvZnNfcmVhZF9sZXZlbDNfc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvaXNvZnMvaW5vZGUuYy0xMTcyLXtcbmZzL2lzb2ZzL2lub2RlLmM6MTE3MzpcdHVuc2lnbmVkIGxvbmcgYnVmc2l6ZSA9IElTT0ZTX0JVRkZFUl9TSVpFKGlub2RlKTtcbmZzL2lzb2ZzL2lub2RlLmM6MTE3NDpcdGludCBoaWdoX3NpZXJyYSA9IElTT0ZTX1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfaGlnaF9zaWVycmE7XG5mcy9pc29mcy9pbm9kZS5jLTExNzUtXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDtcbi0tXG5mcy9pc29mcy9pbm9kZS5jLTExNzktXHRzdHJ1Y3QgaXNvX2RpcmVjdG9yeV9yZWNvcmQgKnRtcGRlID0gTlVMTDtcbmZzL2lzb2ZzL2lub2RlLmM6MTE4MDpcdHN0cnVjdCBpc29faW5vZGVfaW5mbyAqZWkgPSBJU09GU19JKGlub2RlKTtcbmZzL2lzb2ZzL2lub2RlLmMtMTE4MS1cbi0tXG5mcy9pc29mcy9pbm9kZS5jLTEyNjAtb3V0X25vcmVhZDpcbmZzL2lzb2ZzL2lub2RlLmM6MTI2MTpcdHByaW50ayhLRVJOX0lORk8gXCYjMzQ7SVNPRlM6IHVuYWJsZSB0byByZWFkIGktbm9kZSBibG9jayAlbHVcXG5cJiMzNDssIGJsb2NrKTtcbmZzL2lzb2ZzL2lub2RlLmMtMTI2Mi1cdGtmcmVlKHRtcGRlKTtcbi0tXG5mcy9pc29mcy9pbm9kZS5jPTEyNzI9c3RhdGljIGludCBpc29mc19yZWFkX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCByZWxvY2F0ZWQpXG4tLVxuZnMvaXNvZnMvaW5vZGUuYy0xMjc0LVx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVx1MDAzZWlfc2I7XG5mcy9pc29mcy9pbm9kZS5jOjEyNzU6XHRzdHJ1Y3QgaXNvZnNfc2JfaW5mbyAqc2JpID0gSVNPRlNfU0Ioc2IpO1xuZnMvaXNvZnMvaW5vZGUuYzoxMjc2Olx0dW5zaWduZWQgbG9uZyBidWZzaXplID0gSVNPRlNfQlVGRkVSX1NJWkUoaW5vZGUpO1xuZnMvaXNvZnMvaW5vZGUuYy0xMjc3LVx0dW5zaWduZWQgbG9uZyBibG9jaztcbi0tXG5mcy9pc29mcy9pbm9kZS5jLTEyODMtXHR1bnNpZ25lZCBsb25nIG9mZnNldDtcbmZzL2lzb2ZzL2lub2RlLmM6MTI4NDpcdHN0cnVjdCBpc29faW5vZGVfaW5mbyAqZWkgPSBJU09GU19JKGlub2RlKTtcbmZzL2lzb2ZzL2lub2RlLmMtMTI4NS1cdGludCByZXQgPSAtRUlPO1xuLS1cbmZzL2lzb2ZzL2lub2RlLmMtMTMxOC1cdFx0XHRcdFx0ZWktXHUwMDNlaV9pZ2V0NV9vZmZzZXQsXG5mcy9pc29mcy9pbm9kZS5jOjEzMTk6XHRcdFx0XHRcdElTT0ZTX0JVRkZFUl9CSVRTKGlub2RlKSk7XG5mcy9pc29mcy9pbm9kZS5jLTEzMjAtXG4tLVxuZnMvaXNvZnMvaW5vZGUuYy0xMzI0LVx0aWYgKGRlLVx1MDAzZWZsYWdzWy1oaWdoX3NpZXJyYV0gXHUwMDI2IDIpIHtcbmZzL2lzb2ZzL2lub2RlLmM6MTMyNTpcdFx0aWYgKHNiaS1cdTAwM2VzX2Rtb2RlICE9IElTT0ZTX0lOVkFMSURfTU9ERSlcbmZzL2lzb2ZzL2lub2RlLmMtMTMyNi1cdFx0XHRpbm9kZS1cdTAwM2VpX21vZGUgPSBTX0lGRElSIHwgc2JpLVx1MDAzZXNfZG1vZGU7XG4tLVxuZnMvaXNvZnMvaW5vZGUuYy0xMzM2LVx0fSBlbHNlIHtcbmZzL2lzb2ZzL2lub2RlLmM6MTMzNzpcdFx0aWYgKHNiaS1cdTAwM2VzX2Ztb2RlICE9IElTT0ZTX0lOVkFMSURfTU9ERSkge1xuZnMvaXNvZnMvaW5vZGUuYy0xMzM4LVx0XHRcdGlub2RlLVx1MDAzZWlfbW9kZSA9IFNfSUZSRUcgfCBzYmktXHUwMDNlc19mbW9kZTtcbi0tXG5mcy9pc29mcy9pbm9kZS5jLTEzNzgtXHRpZiAoZGUtXHUwMDNlaW50ZXJsZWF2ZVswXSkge1xuZnMvaXNvZnMvaW5vZGUuYzoxMzc5Olx0XHRwcmludGsoS0VSTl9ERUJVRyBcJiMzNDtJU09GUzogSW50ZXJsZWF2ZWQgZmlsZXMgbm90ICh5ZXQpIHN1cHBvcnRlZC5cXG5cJiMzNDspO1xuZnMvaXNvZnMvaW5vZGUuYy0xMzgwLVx0XHRpbm9kZS1cdTAwM2VpX3NpemUgPSAwO1xuLS1cbmZzL2lzb2ZzL2lub2RlLmMtMTM4NS1cdGlmIChkZS1cdTAwM2VmaWxlX3VuaXRfc2l6ZVswXSAhPSAwKSB7XG5mcy9pc29mcy9pbm9kZS5jOjEzODY6XHRcdHByaW50ayhLRVJOX0RFQlVHIFwmIzM0O0lTT0ZTOiBGaWxlIHVuaXQgc2l6ZSAhPSAwIGZvciBJU08gZmlsZSAoJWxsdSkuXFxuXCYjMzQ7LFxuZnMvaXNvZnMvaW5vZGUuYy0xMzg3LVx0XHRcdGlub2RlLVx1MDAzZWlfaW5vKTtcbi0tXG5mcy9pc29mcy9pbm9kZS5jLTEzOTMtXHRpZigoZGUtXHUwMDNlZmxhZ3NbLWhpZ2hfc2llcnJhXSBcdTAwMjYgfjIpIT0gMCl7XG5mcy9pc29mcy9pbm9kZS5jOjEzOTQ6XHRcdHByaW50ayhLRVJOX0RFQlVHIFwmIzM0O0lTT0ZTOiBVbnVzdWFsIGZsYWcgc2V0dGluZ3MgZm9yIElTTyBmaWxlIFwmIzM0O1xuZnMvaXNvZnMvaW5vZGUuYy0xMzk1LVx0XHRcdFx0XCYjMzQ7KCVsbHUgJXgpLlxcblwmIzM0Oyxcbi0tXG5mcy9pc29mcy9pbm9kZS5jLTE0MjQtXHRpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpIFx1MDAyNlx1MDAyNiBzYmktXHUwMDNlc19vdmVycmlkZXJvY2twZXJtIFx1MDAyNlx1MDAyNlxuZnMvaXNvZnMvaW5vZGUuYzoxNDI1Olx0ICAgIHNiaS1cdTAwM2VzX2Rtb2RlICE9IElTT0ZTX0lOVkFMSURfTU9ERSlcbmZzL2lzb2ZzL2lub2RlLmMtMTQyNi1cdFx0aW5vZGUtXHUwMDNlaV9tb2RlID0gU19JRkRJUiB8IHNiaS1cdTAwM2VzX2Rtb2RlO1xuZnMvaXNvZnMvaW5vZGUuYy0xNDI3LVx0aWYgKFNfSVNSRUcoaW5vZGUtXHUwMDNlaV9tb2RlKSBcdTAwMjZcdTAwMjYgc2JpLVx1MDAzZXNfb3ZlcnJpZGVyb2NrcGVybSBcdTAwMjZcdTAwMjZcbmZzL2lzb2ZzL2lub2RlLmM6MTQyODpcdCAgICBzYmktXHUwMDNlc19mbW9kZSAhPSBJU09GU19JTlZBTElEX01PREUpXG5mcy9pc29mcy9pbm9kZS5jLTE0MjktXHRcdGlub2RlLVx1MDAzZWlfbW9kZSA9IFNfSUZSRUcgfCBzYmktXHUwMDNlc19mbW9kZTtcbi0tXG5mcy9pc29mcy9pbm9kZS5jLTE0MzQtXHRcdHN3aXRjaCAoZWktXHUwMDNlaV9maWxlX2Zvcm1hdCkge1xuZnMvaXNvZnMvaW5vZGUuYzoxNDM1OiNpZmRlZiBDT05GSUdfWklTT0ZTXG5mcy9pc29mcy9pbm9kZS5jLTE0MzYtXHRcdGNhc2UgaXNvZnNfZmlsZV9jb21wcmVzc2VkOlxuLS1cbmZzL2lzb2ZzL2lub2RlLmMtMTQ1NS1cdH0gZWxzZSB7XG5mcy9pc29mcy9pbm9kZS5jOjE0NTY6XHRcdHByaW50ayhLRVJOX0RFQlVHIFwmIzM0O0lTT0ZTOiBJbnZhbGlkIGZpbGUgdHlwZSAwJTA0byBmb3IgaW5vZGUgJWxsdS5cXG5cJiMzNDssXG5mcy9pc29mcy9pbm9kZS5jLTE0NTctXHRcdFx0aW5vZGUtXHUwMDNlaV9tb2RlLCBpbm9kZS1cdTAwM2VpX2lubyk7XG4tLVxuZnMvaXNvZnMvaW5vZGUuYy0xNDY4LW91dF9iYWRyZWFkOlxuZnMvaXNvZnMvaW5vZGUuYzoxNDY5Olx0cHJpbnRrKEtFUk5fV0FSTklORyBcJiMzNDtJU09GUzogdW5hYmxlIHRvIHJlYWQgaS1ub2RlIGJsb2NrXFxuXCYjMzQ7KTtcbmZzL2lzb2ZzL2lub2RlLmMtMTQ3MC1mYWlsOlxuLS1cbmZzL2lzb2ZzL2lub2RlLmM9MTQ3OT1zdGF0aWMgaW50IGlzb2ZzX2lnZXQ1X3Rlc3Qoc3RydWN0IGlub2RlICppbm8sIHZvaWQgKmRhdGEpXG5mcy9pc29mcy9pbm9kZS5jLTE0ODAte1xuZnMvaXNvZnMvaW5vZGUuYzoxNDgxOlx0c3RydWN0IGlzb19pbm9kZV9pbmZvICppID0gSVNPRlNfSShpbm8pO1xuZnMvaXNvZnMvaW5vZGUuYy0xNDgyLVx0c3RydWN0IGlzb2ZzX2lnZXQ1X2NhbGxiYWNrX2RhdGEgKmQgPVxuLS1cbmZzL2lzb2ZzL2lub2RlLmM9MTQ4OD1zdGF0aWMgaW50IGlzb2ZzX2lnZXQ1X3NldChzdHJ1Y3QgaW5vZGUgKmlubywgdm9pZCAqZGF0YSlcbmZzL2lzb2ZzL2lub2RlLmMtMTQ4OS17XG5mcy9pc29mcy9pbm9kZS5jOjE0OTA6XHRzdHJ1Y3QgaXNvX2lub2RlX2luZm8gKmkgPSBJU09GU19JKGlubyk7XG5mcy9pc29mcy9pbm9kZS5jLTE0OTEtXHRzdHJ1Y3QgaXNvZnNfaWdldDVfY2FsbGJhY2tfZGF0YSAqZCA9XG4tLVxuZnMvaXNvZnMvaW5vZGUuYz0xNTU5PXN0YXRpYyBpbnQgaXNvZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9pc29mcy9pbm9kZS5jLTE1NzUtXHRvcHQtXHUwMDNlYmxvY2tzaXplID0gMTAyNDtcbmZzL2lzb2ZzL2lub2RlLmM6MTU3NjpcdG9wdC1cdTAwM2VmbW9kZSA9IG9wdC1cdTAwM2VkbW9kZSA9IElTT0ZTX0lOVkFMSURfTU9ERTtcbmZzL2lzb2ZzL2lub2RlLmMtMTU3Ny1cdG9wdC1cdTAwM2V1aWRfc2V0ID0gMDtcbi0tXG5mcy9pc29mcy9pbm9kZS5jPTE2MDM9c3RhdGljIGludCBfX2luaXQgaW5pdF9pc285NjYwX2ZzKHZvaWQpXG4tLVxuZnMvaXNvZnMvaW5vZGUuYy0xNjA3LVx0XHRnb3RvIG91dDtcbmZzL2lzb2ZzL2lub2RlLmM6MTYwODojaWZkZWYgQ09ORklHX1pJU09GU1xuZnMvaXNvZnMvaW5vZGUuYy0xNjA5LVx0ZXJyID0gemlzb2ZzX2luaXQoKTtcbi0tXG5mcy9pc29mcy9pbm9kZS5jLTE2MTctb3V0MjpcbmZzL2lzb2ZzL2lub2RlLmM6MTYxODojaWZkZWYgQ09ORklHX1pJU09GU1xuZnMvaXNvZnMvaW5vZGUuYy0xNjE5LVx0emlzb2ZzX2NsZWFudXAoKTtcbi0tXG5mcy9pc29mcy9pbm9kZS5jPTE2Mjc9c3RhdGljIHZvaWQgX19leGl0IGV4aXRfaXNvOTY2MF9mcyh2b2lkKVxuLS1cbmZzL2lzb2ZzL2lub2RlLmMtMTYyOS0gICAgICAgIHVucmVnaXN0ZXJfZmlsZXN5c3RlbShcdTAwMjZpc285NjYwX2ZzX3R5cGUpO1xuZnMvaXNvZnMvaW5vZGUuYzoxNjMwOiNpZmRlZiBDT05GSUdfWklTT0ZTXG5mcy9pc29mcy9pbm9kZS5jLTE2MzEtXHR6aXNvZnNfY2xlYW51cCgpO1xuLS1cbmZzL2lzb2ZzL2lzb2ZzLmg9MzI9c3RydWN0IGlzb2ZzX3NiX2luZm8ge1xuLS1cbmZzL2lzb2ZzL2lzb2ZzLmgtNjQtXG5mcy9pc29mcy9pc29mcy5oOjY1OiNkZWZpbmUgSVNPRlNfSU5WQUxJRF9NT0RFICgodW1vZGVfdCkgLTEpXG5mcy9pc29mcy9pc29mcy5oLTY2LVxuZnMvaXNvZnMvaXNvZnMuaDo2NzpzdGF0aWMgaW5saW5lIHN0cnVjdCBpc29mc19zYl9pbmZvICpJU09GU19TQihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvaXNvZnMvaXNvZnMuaC02OC17XG4tLVxuZnMvaXNvZnMvaXNvZnMuaC03MS1cbmZzL2lzb2ZzL2lzb2ZzLmg6NzI6c3RhdGljIGlubGluZSBzdHJ1Y3QgaXNvX2lub2RlX2luZm8gKklTT0ZTX0koc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2lzb2ZzL2lzb2ZzLmgtNzMte1xuLS1cbmZzL2lzb2ZzL2pvbGlldC5jPTQyPWdldF9qb2xpZXRfZmlsZW5hbWUoc3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkICogZGUsIHVuc2lnbmVkIGNoYXIgKm91dG5hbWUsIHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuLS1cbmZzL2lzb2ZzL2pvbGlldC5jLTQ2LVxuZnMvaXNvZnMvam9saWV0LmM6NDc6XHRubHMgPSBJU09GU19TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX25sc19pb2NoYXJzZXQ7XG5mcy9pc29mcy9qb2xpZXQuYy00OC1cbi0tXG5mcy9pc29mcy9uYW1laS5jPTQ5PWlzb2ZzX2ZpbmRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9pc29mcy9uYW1laS5jLTUyLXtcbmZzL2lzb2ZzL25hbWVpLmM6NTM6XHR1bnNpZ25lZCBsb25nIGJ1ZnNpemUgPSBJU09GU19CVUZGRVJfU0laRShkaXIpO1xuZnMvaXNvZnMvbmFtZWkuYzo1NDpcdHVuc2lnbmVkIGNoYXIgYnVmYml0cyA9IElTT0ZTX0JVRkZFUl9CSVRTKGRpcik7XG5mcy9pc29mcy9uYW1laS5jLTU1LVx0dW5zaWduZWQgbG9uZyBibG9jaywgZl9wb3MsIG9mZnNldCwgYmxvY2tfc2F2ZWQsIG9mZnNldF9zYXZlZDtcbmZzL2lzb2ZzL25hbWVpLmMtNTYtXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDtcbmZzL2lzb2ZzL25hbWVpLmM6NTc6XHRzdHJ1Y3QgaXNvZnNfc2JfaW5mbyAqc2JpID0gSVNPRlNfU0IoZGlyLVx1MDAzZWlfc2IpO1xuZnMvaXNvZnMvbmFtZWkuYy01OC1cbmZzL2lzb2ZzL25hbWVpLmM6NTk6XHRpZiAoIUlTT0ZTX0koZGlyKS1cdTAwM2VpX2ZpcnN0X2V4dGVudClcbmZzL2lzb2ZzL25hbWVpLmMtNjAtXHRcdHJldHVybiAwO1xuLS1cbmZzL2lzb2ZzL25hbWVpLmMtODItXHRcdFx0YmggPSBOVUxMO1xuZnMvaXNvZnMvbmFtZWkuYzo4MzpcdFx0XHRmX3BvcyA9IChmX3BvcyAmIzQzOyBJU09GU19CTE9DS19TSVpFKSBcdTAwMjYgfihJU09GU19CTE9DS19TSVpFIC0gMSk7XG5mcy9pc29mcy9uYW1laS5jLTg0LVx0XHRcdGJsb2NrID0gZl9wb3MgXHUwMDNlXHUwMDNlIGJ1ZmJpdHM7XG4tLVxuZnMvaXNvZnMvcm9jay5jPTQ0PXN0YXRpYyBpbnQgY2hlY2tfc3Aoc3RydWN0IHJvY2tfcmlkZ2UgKnJyLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2lzb2ZzL3JvY2suYy00OS1cdFx0cmV0dXJuIC0xO1xuZnMvaXNvZnMvcm9jay5jOjUwOlx0SVNPRlNfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc19yb2NrX29mZnNldCA9IHJyLVx1MDAzZXUuU1Auc2tpcDtcbmZzL2lzb2ZzL3JvY2suYy01MS1cdHJldHVybiAwO1xuLS1cbmZzL2lzb2ZzL3JvY2suYz01ND1zdGF0aWMgdm9pZCBzZXR1cF9yb2NrX3JpZGdlKHN0cnVjdCBpc29fZGlyZWN0b3J5X3JlY29yZCAqZGUsXG4tLVxuZnMvaXNvZnMvcm9jay5jLTY0LVxuZnMvaXNvZnMvcm9jay5jOjY1Olx0aWYgKElTT0ZTX1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfcm9ja19vZmZzZXQgIT0gLTEpIHtcbmZzL2lzb2ZzL3JvY2suYzo2NjpcdFx0cnMtXHUwMDNlbGVuIC09IElTT0ZTX1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfcm9ja19vZmZzZXQ7XG5mcy9pc29mcy9yb2NrLmM6Njc6XHRcdHJzLVx1MDAzZWNociAmIzQzOz0gSVNPRlNfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc19yb2NrX29mZnNldDtcbmZzL2lzb2ZzL3JvY2suYy02OC1cdFx0aWYgKHJzLVx1MDAzZWxlbiBcdTAwM2MgMClcbi0tXG5mcy9pc29mcy9yb2NrLmM9ODY9c3RhdGljIGludCByb2NrX2NvbnRpbnVlKHN0cnVjdCByb2NrX3N0YXRlICpycylcbi0tXG5mcy9pc29mcy9yb2NrLmMtODgtXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gcnMtXHUwMDNlaW5vZGUtXHUwMDNlaV9zYjtcbmZzL2lzb2ZzL3JvY2suYzo4OTpcdHN0cnVjdCBpc29mc19zYl9pbmZvICpzYmkgPSBJU09GU19TQihzYik7XG5mcy9pc29mcy9yb2NrLmMtOTAtXHR1NjQgZXh0ZW50ID0gKHVuc2lnbmVkIGludClycy1cdTAwM2Vjb250X2V4dGVudDtcbmZzL2lzb2ZzL3JvY2suYy05MS1cdHU2NCBzZXNzaW9uX2VuZCA9IHNiaS1cdTAwM2VzX3Nlc3Npb25fc3RhcnQgJiM0MztcbmZzL2lzb2ZzL3JvY2suYzo5MjpcdFx0KCh1NjQpc2JpLVx1MDAzZXNfbnpvbmVzIFx1MDAzY1x1MDAzYyAoSVNPRlNfQkxPQ0tfQklUUyAtIHNiLVx1MDAzZXNfYmxvY2tzaXplX2JpdHMpKTtcbmZzL2lzb2ZzL3JvY2suYy05My1cdGludCByZXQgPSAxO1xuLS1cbmZzL2lzb2ZzL3JvY2suYz0yMTY9aW50IGdldF9yb2NrX3JpZGdlX2ZpbGVuYW1lKHN0cnVjdCBpc29fZGlyZWN0b3J5X3JlY29yZCAqZGUsXG4tLVxuZnMvaXNvZnMvcm9jay5jLTIyNy1cbmZzL2lzb2ZzL3JvY2suYzoyMjg6XHRpZiAoIUlTT0ZTX1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfcm9jaylcbmZzL2lzb2ZzL3JvY2suYy0yMjktXHRcdHJldHVybiAwO1xuLS1cbmZzL2lzb2ZzL3JvY2suYz0zMjc9cGFyc2Vfcm9ja19yaWRnZV9pbm9kZV9pbnRlcm5hbChzdHJ1Y3QgaXNvX2RpcmVjdG9yeV9yZWNvcmQgKmRlLFxuLS1cbmZzL2lzb2ZzL3JvY2suYy0zMzgtXG5mcy9pc29mcy9yb2NrLmM6MzM5Olx0aWYgKCFJU09GU19TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX3JvY2spXG5mcy9pc29mcy9yb2NrLmMtMzQwLVx0XHRyZXR1cm4gMDtcbi0tXG5mcy9pc29mcy9yb2NrLmMtMzczLVx0XHRzd2l0Y2ggKHNpZykge1xuZnMvaXNvZnMvcm9jay5jOjM3NDojaWZuZGVmIENPTkZJR19aSVNPRlNcdFx0LyogTm8gZmxhZyBmb3IgU0Ygb3IgWkYgKi9cbmZzL2lzb2ZzL3JvY2suYy0zNzUtXHRcdGNhc2UgU0lHKCYjMzk7UiYjMzk7LCAmIzM5O1ImIzM5Oyk6XG4tLVxuZnMvaXNvZnMvcm9jay5jLTM5My1cdFx0XHRcdGdvdG8gb3V0O1xuZnMvaXNvZnMvcm9jay5jOjM5NDpcdFx0XHRJU09GU19TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX3JvY2sgPSAxO1xuZnMvaXNvZnMvcm9jay5jLTM5NS1cdFx0XHRwcmludGsoS0VSTl9ERUJVRyBcJiMzNDtJU08gOTY2MCBFeHRlbnNpb25zOiBcJiMzNDspO1xuLS1cbmZzL2lzb2ZzL3JvY2suYy01MzMtXHRcdFx0XHRwcmludGsoS0VSTl9FUlJcbmZzL2lzb2ZzL3JvY2suYzo1MzQ6XHRcdFx0XHQgICAgICAgXCYjMzQ7SVNPRlM6IFJlY3Vyc2l2ZSBkaXJlY3RvcnkgcmVsb2NhdGlvbiBcJiMzNDtcbmZzL2lzb2ZzL3JvY2suYy01MzUtXHRcdFx0XHQgICAgICAgXCYjMzQ7aXMgbm90IHN1cHBvcnRlZFxcblwmIzM0Oyk7XG4tLVxuZnMvaXNvZnMvcm9jay5jLTUzOC1cdFx0XHRyZWxvY19ibG9jayA9IGlzb251bV83MzMocnItXHUwMDNldS5DTC5sb2NhdGlvbik7XG5mcy9pc29mcy9yb2NrLmM6NTM5Olx0XHRcdGlmIChyZWxvY19ibG9jayA9PSBJU09GU19JKGlub2RlKS1cdTAwM2VpX2lnZXQ1X2Jsb2NrIFx1MDAyNlx1MDAyNlxuZnMvaXNvZnMvcm9jay5jOjU0MDpcdFx0XHQgICAgSVNPRlNfSShpbm9kZSktXHUwMDNlaV9pZ2V0NV9vZmZzZXQgPT0gMCkge1xuZnMvaXNvZnMvcm9jay5jLTU0MS1cdFx0XHRcdHByaW50ayhLRVJOX0VSUlxuZnMvaXNvZnMvcm9jay5jOjU0MjpcdFx0XHRcdCAgICAgICBcJiMzNDtJU09GUzogRGlyZWN0b3J5IHJlbG9jYXRpb24gcG9pbnRzIHRvIFwmIzM0O1xuZnMvaXNvZnMvcm9jay5jLTU0My1cdFx0XHRcdCAgICAgICBcJiMzNDtpdHNlbGZcXG5cJiMzNDspO1xuLS1cbmZzL2lzb2ZzL3JvY2suYy01NDUtXHRcdFx0fVxuZnMvaXNvZnMvcm9jay5jOjU0NjpcdFx0XHRJU09GU19JKGlub2RlKS1cdTAwM2VpX2ZpcnN0X2V4dGVudCA9IHJlbG9jX2Jsb2NrO1xuZnMvaXNvZnMvcm9jay5jLTU0Ny1cdFx0XHRyZWxvYyA9IGlzb2ZzX2lnZXRfcmVsb2MoaW5vZGUtXHUwMDNlaV9zYiwgcmVsb2NfYmxvY2ssIDApO1xuLS1cbmZzL2lzb2ZzL3JvY2suYy01NjMtXHRcdFx0YnJlYWs7XG5mcy9pc29mcy9yb2NrLmM6NTY0OiNpZmRlZiBDT05GSUdfWklTT0ZTXG5mcy9pc29mcy9yb2NrLmMtNTY1LVx0XHRjYXNlIFNJRygmIzM5O1omIzM5OywgJiMzOTtGJiMzOTspOiB7XG4tLVxuZnMvaXNvZnMvcm9jay5jLTU2Ny1cbmZzL2lzb2ZzL3JvY2suYzo1Njg6XHRcdFx0aWYgKElTT0ZTX1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfbm9jb21wcmVzcylcbmZzL2lzb2ZzL3JvY2suYy01NjktXHRcdFx0XHRicmVhaztcbi0tXG5mcy9pc29mcy9yb2NrLmMtNTgzLVx0XHRcdFx0XHQgKi9cbmZzL2lzb2ZzL3JvY2suYzo1ODQ6XHRcdFx0XHRcdElTT0ZTX0koaW5vZGUpLVx1MDAzZWlfZmlsZV9mb3JtYXQgPVxuZnMvaXNvZnMvcm9jay5jLTU4NS1cdFx0XHRcdFx0XHRpc29mc19maWxlX2NvbXByZXNzZWQ7XG4tLVxuZnMvaXNvZnMvcm9jay5jLTU5MC1cdFx0XHRcdFx0ICovXG5mcy9pc29mcy9yb2NrLmM6NTkxOlx0XHRcdFx0XHRJU09GU19JKGlub2RlKS1cdTAwM2VpX2Zvcm1hdF9wYXJtWzBdID1cbmZzL2lzb2ZzL3JvY2suYy01OTItXHRcdFx0XHRcdFx0aXNvbnVtXzcxMShcdTAwMjZyci1cdTAwM2V1LlpGLnBhcm1zWzBdKTtcbmZzL2lzb2ZzL3JvY2suYzo1OTM6XHRcdFx0XHRcdElTT0ZTX0koaW5vZGUpLVx1MDAzZWlfZm9ybWF0X3Bhcm1bMV0gPVxuZnMvaXNvZnMvcm9jay5jLTU5NC1cdFx0XHRcdFx0XHRpc29udW1fNzExKFx1MDAyNnJyLVx1MDAzZXUuWkYucGFybXNbMV0pO1xuLS1cbmZzL2lzb2ZzL3JvY2suYz03MDI9aW50IHBhcnNlX3JvY2tfcmlkZ2VfaW5vZGUoc3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkICpkZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9pc29mcy9yb2NrLmMtNzExLVx0ICovXG5mcy9pc29mcy9yb2NrLmM6NzEyOlx0aWYgKChJU09GU19TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX3JvY2tfb2Zmc2V0ID09IC0xKVxuZnMvaXNvZnMvcm9jay5jOjcxMzpcdCAgICBcdTAwMjZcdTAwMjYgKElTT0ZTX1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfcm9jayA9PSAyKSkge1xuZnMvaXNvZnMvcm9jay5jLTcxNC1cdFx0cmVzdWx0ID0gcGFyc2Vfcm9ja19yaWRnZV9pbm9kZV9pbnRlcm5hbChkZSwgaW5vZGUsXG4tLVxuZnMvaXNvZnMvcm9jay5jPTcyND1zdGF0aWMgaW50IHJvY2tfcmlkZ2Vfc3ltbGlua19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmZzL2lzb2ZzL3JvY2suYy03MjYtXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZm9saW8tXHUwMDNlbWFwcGluZy1cdTAwM2Vob3N0O1xuZnMvaXNvZnMvcm9jay5jOjcyNzpcdHN0cnVjdCBpc29faW5vZGVfaW5mbyAqZWkgPSBJU09GU19JKGlub2RlKTtcbmZzL2lzb2ZzL3JvY2suYzo3Mjg6XHRzdHJ1Y3QgaXNvZnNfc2JfaW5mbyAqc2JpID0gSVNPRlNfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG5mcy9pc29mcy9yb2NrLmMtNzI5LVx0Y2hhciAqbGluayA9IGZvbGlvX2FkZHJlc3MoZm9saW8pO1xuZnMvaXNvZnMvcm9jay5jOjczMDpcdHVuc2lnbmVkIGxvbmcgYnVmc2l6ZSA9IElTT0ZTX0JVRkZFUl9TSVpFKGlub2RlKTtcbmZzL2lzb2ZzL3JvY2suYy03MzEtXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xuLS1cbmZzL2lzb2ZzL3ppc29mcy5oLTExLVxuZnMvaXNvZnMvemlzb2ZzLmg6MTI6I2lmZGVmIENPTkZJR19aSVNPRlNcbmZzL2lzb2ZzL3ppc29mcy5oLTEzLWV4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHppc29mc19hb3BzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjI1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkV4YW1pbmluZyB0aGUgSVNPRlMgS2NvbmZpZyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgZnMvaXNvZnMvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIElTTyA5NjYwIGZpbGVzeXN0ZW0gZHJpdmVyIGFyZSBkZWZpbmVkLCB0aGUgaGVhcnQgb2YgaG93IHdlIGNvbmZpZ3VyZSB0aGUga2VybmVsJiMzOTtzIHN1cHBvcnQgZm9yIHJlYWRpbmcgQ0QtUk9NcyBhbmQgb3RoZXIgb3B0aWNhbCBtZWRpYS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCB3aGF0IHRoZWlyIGRlcGVuZGVuY2llcyBhcmUsIGFuZCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gd2hldGhlciB0aGVyZSBoYXZlIGJlZW4gYW55IHJlY2VudCBjaGFuZ2VzLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBzdGFuZGFyZCBzdHVmZjogYENPTkZJR19JU085NjYwX0ZTYCB0byBlbmFibGUgdGhlIGJhc2ljIGRyaXZlciwgb3B0aW9ucyBmb3IgUm9jayBSaWRnZSBleHRlbnNpb25zLCBKb2xpZXQgc3VwcG9ydCwgbWF5YmUgZXZlbiBzb21lIHF1aXJreSBsZWdhY3kgZmVhdHVyZXMuIE15IGF0dGVudGlvbiB3aWxsIGJlIGxhc2VyLWZvY3VzZWQgb24gYW55dGhpbmcgcmVsYXRlZCB0byBzZWN1cml0eSBmZWF0dXJlcywgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucywgYW5kIGFueSBwb3RlbnRpYWwgbmV3IGFkZGl0aW9ucyBJIHNob3VsZCBrbm93IGFib3V0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyB3ZSBjYW4gZmluZCBpbiB0aGlzIEtjb25maWcgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2lzb2ZzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgSVNPOTY2MF9GU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7SVNPIDk2NjAgQ0RST00gZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuICAgNDpcdFx0c2VsZWN0IEJVRkZFUl9IRUFEXG4gICA1Olx0XHRoZWxwXG4gICA2Olx0XHQgIFRoaXMgaXMgdGhlIHN0YW5kYXJkIGZpbGUgc3lzdGVtIHVzZWQgb24gQ0QtUk9Ncy4gIEl0IHdhcyBwcmV2aW91c2x5XG4gICA3Olx0XHQgIGtub3duIGFzIFwmIzM0O0hpZ2ggU2llcnJhIEZpbGUgU3lzdGVtXCYjMzQ7IGFuZCBpcyBjYWxsZWQgXCYjMzQ7aHNmc1wmIzM0OyBvbiBvdGhlclxuICAgODpcdFx0ICBVbml4IHN5c3RlbXMuICBUaGUgc28tY2FsbGVkIFJvY2stUmlkZ2UgZXh0ZW5zaW9ucyB3aGljaCBhbGxvdyBmb3JcbiAgIDk6XHRcdCAgbG9uZyBVbml4IGZpbGVuYW1lcyBhbmQgc3ltYm9saWMgbGlua3MgYXJlIGFsc28gc3VwcG9ydGVkIGJ5IHRoaXNcbiAgMTA6XHRcdCAgZHJpdmVyLiAgSWYgeW91IGhhdmUgYSBDRC1ST00gZHJpdmUgYW5kIHdhbnQgdG8gZG8gbW9yZSB3aXRoIGl0IHRoYW5cbiAgMTE6XHRcdCAganVzdCBsaXN0ZW4gdG8gYXVkaW8gQ0RzIGFuZCB3YXRjaCBpdHMgTEVEcywgc2F5IFkgKGFuZCByZWFkXG4gIDEyOlx0XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pc29mcy5yc3RcdTAwM2UgYW5kIHRoZSBDRC1ST00tSE9XVE8sXG4gIDEzOlx0XHQgIGF2YWlsYWJsZSBmcm9tIFx1MDAzY2h0dHA6Ly93d3cudGxkcC5vcmcvZG9jcy5odG1sI2hvd3RvXHUwMDNlKSwgdGhlcmVieVxuICAxNDpcdFx0ICBlbmxhcmdpbmcgeW91ciBrZXJuZWwgYnkgYWJvdXQgMjcgS0I7IG90aGVyd2lzZSBzYXkgTi5cbiAgMTU6XHRcbiAgMTY6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGZpbGUgc3lzdGVtIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuICAxNzpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaXNvZnMuXG4gIDE4Olx0XG4gIDE5Olx0Y29uZmlnIEpPTElFVFxuICAyMDpcdFx0Ym9vbCBcJiMzNDtNaWNyb3NvZnQgSm9saWV0IENEUk9NIGV4dGVuc2lvbnNcJiMzNDtcbiAgMjE6XHRcdGRlcGVuZHMgb24gSVNPOTY2MF9GU1xuICAyMjpcdFx0c2VsZWN0IE5MU1xuICAyMzpcdFx0aGVscFxuICAyNDpcdFx0ICBKb2xpZXQgaXMgYSBNaWNyb3NvZnQgZXh0ZW5zaW9uIGZvciB0aGUgSVNPIDk2NjAgQ0QtUk9NIGZpbGUgc3lzdGVtXG4gIDI1Olx0XHQgIHdoaWNoIGFsbG93cyBmb3IgbG9uZyBmaWxlbmFtZXMgaW4gdW5pY29kZSBmb3JtYXQgKHVuaWNvZGUgaXMgdGhlXG4gIDI2Olx0XHQgIG5ldyAxNiBiaXQgY2hhcmFjdGVyIGNvZGUsIHN1Y2Nlc3NvciB0byBBU0NJSSwgd2hpY2ggZW5jb2RlcyB0aGVcbiAgMjc6XHRcdCAgY2hhcmFjdGVycyBvZiBhbG1vc3QgYWxsIGxhbmd1YWdlcyBvZiB0aGUgd29ybGQ7IHNlZVxuICAyODpcdFx0ICBcdTAwM2NodHRwOi8vd3d3LnVuaWNvZGUub3JnL1x1MDAzZSBmb3IgbW9yZSBpbmZvcm1hdGlvbikuICBTYXkgWSBoZXJlIGlmIHlvdVxuICAyOTpcdFx0ICB3YW50IHRvIGJlIGFibGUgdG8gcmVhZCBKb2xpZXQgQ0QtUk9NcyB1bmRlciBMaW51eC5cbiAgMzA6XHRcbiAgMzE6XHRjb25maWcgWklTT0ZTXG4gIDMyOlx0XHRib29sIFwmIzM0O1RyYW5zcGFyZW50IGRlY29tcHJlc3Npb24gZXh0ZW5zaW9uXCYjMzQ7XG4gIDMzOlx0XHRkZXBlbmRzIG9uIElTTzk2NjBfRlNcbiAgMzQ6XHRcdHNlbGVjdCBaTElCX0lORkxBVEVcbiAgMzU6XHRcdGhlbHBcbiAgMzY6XHRcdCAgVGhpcyBpcyBhIExpbnV4LXNwZWNpZmljIGV4dGVuc2lvbiB0byBSb2NrUmlkZ2Ugd2hpY2ggbGV0cyB5b3Ugc3RvcmVcbiAgMzc6XHRcdCAgZGF0YSBpbiBjb21wcmVzc2VkIGZvcm0gb24gYSBDRC1ST00gYW5kIGhhdmUgaXQgdHJhbnNwYXJlbnRseVxuICAzODpcdFx0ICBkZWNvbXByZXNzZWQgd2hlbiB0aGUgQ0QtUk9NIGlzIGFjY2Vzc2VkLiAgU2VlXG4gIDM5Olx0XHQgIFx1MDAzY2h0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMvZnMvemlzb2ZzL1x1MDAzZSBmb3IgdGhlIHRvb2xzXG4gIDQwOlx0XHQgIG5lY2Vzc2FyeSB0byBjcmVhdGUgc3VjaCBhIGZpbGVzeXN0ZW0uICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxODcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqQW5hbHl6aW5nIElTTyA5NjYwIFJvY2sgUmlkZ2UgRXh0ZW5zaW9ucyoqCgpBbHJpZ2h0LCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgZnMvaXNvZnMvcm9jay5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBSb2NrIFJpZGdlIGV4dGVuc2lvbnMgYXJlIGhhbmRsZWQsIHNvIHRoZSBhcmVhIGFyb3VuZCBgcm9ja19jb250aW51ZWAgaXMgY3J1Y2lhbC4gVGhhdCBmdW5jdGlvbiBpcyBsaWtlbHkgYSBrZXkgcGllY2UgaW4gcHJvY2Vzc2luZyB0aGUgZXh0ZW5kZWQgYXR0cmlidXRlcy4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgY2FsbGVycy4KCkkmIzM5O2xsIHRoZW4gcGl2b3QgbXkgYXR0ZW50aW9uIHRvIHRoZSBwYXJzaW5nIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGBwYXJzZV9yb2NrX3JpZGdlX2lub2RlYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgaW5vZGUgaW5mb3JtYXRpb24gZ2V0cyBpbnRlcnByZXRlZCwgYW5kIGBnZXRfcm9ja19yaWRnZV9maWxlbmFtZWAgaXMgYW5vdGhlciBjcml0aWNhbCBwaWVjZSwgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBjb25zdHJ1Y3RpbmcgdGhlIGFjdHVhbCBmaWxlbmFtZXMgYmFzZWQgb24gdGhlIFJvY2sgUmlkZ2UgZXh0ZW5zaW9ucy4gVW5kZXJzdGFuZGluZyB0aGVpciBpbnRlcmFjdGlvbnMgd2lsbCByZXZlYWwgaG93IHRoZSBleHRlbmRlZCBmaWxlc3lzdGVtIG1ldGFkYXRhIGlzIGFjY2Vzc2VkIGFuZCB0cmFuc2Zvcm1lZCBmb3IgdGhlIGVuZC11c2VyLiBFc3NlbnRpYWxseSwgSSBuZWVkIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cgZnJvbSB0aGUgcmF3IElTTyBpbWFnZSBmb3JtYXQgdG8gdGhlIFBPU0lYLWNvbXBhdGlibGUgcmVwcmVzZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTI6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9pc29mcy9yb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDgwOlx0I2RlZmluZSBSUl9NQVhfQ0VfRU5UUklFUyAzMlxuICA4MTpcdFxuICA4MjpcdC8qXG4gIDgzOlx0ICogUmV0dXJucyAwIGlmIHRoZSBjYWxsZXIgc2hvdWxkIGNvbnRpbnVlIHNjYW5uaW5nLCAxIGlmIHRoZSBzY2FuIG11c3QgZW5kXG4gIDg0Olx0ICogYW5kIC12ZSBvbiBlcnJvci5cbiAgODU6XHQgKi9cbiAgODY6XHRzdGF0aWMgaW50IHJvY2tfY29udGludWUoc3RydWN0IHJvY2tfc3RhdGUgKnJzKVxuICA4NzpcdHtcbiAgODg6XHRcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBycy1cdTAwM2Vpbm9kZS1cdTAwM2VpX3NiO1xuICA4OTpcdFx0c3RydWN0IGlzb2ZzX3NiX2luZm8gKnNiaSA9IElTT0ZTX1NCKHNiKTtcbiAgOTA6XHRcdHU2NCBleHRlbnQgPSAodW5zaWduZWQgaW50KXJzLVx1MDAzZWNvbnRfZXh0ZW50O1xuICA5MTpcdFx0dTY0IHNlc3Npb25fZW5kID0gc2JpLVx1MDAzZXNfc2Vzc2lvbl9zdGFydCAmIzQzO1xuICA5MjpcdFx0XHQoKHU2NClzYmktXHUwMDNlc19uem9uZXMgXHUwMDNjXHUwMDNjIChJU09GU19CTE9DS19CSVRTIC0gc2ItXHUwMDNlc19ibG9ja3NpemVfYml0cykpO1xuICA5MzpcdFx0aW50IHJldCA9IDE7XG4gIDk0Olx0XHRpbnQgYmxvY2tzaXplID0gMSBcdTAwM2NcdTAwM2MgcnMtXHUwMDNlaW5vZGUtXHUwMDNlaV9ibGtiaXRzO1xuICA5NTpcdFx0Y29uc3QgaW50IG1pbl9kZV9zaXplID0gb2Zmc2V0b2Yoc3RydWN0IHJvY2tfcmlkZ2UsIHUpO1xuICA5NjpcdFxuICA5NzpcdFx0a2ZyZWUocnMtXHUwMDNlYnVmZmVyKTtcbiAgOTg6XHRcdHJzLVx1MDAzZWJ1ZmZlciA9IE5VTEw7XG4gIDk5Olx0XG4gMTAwOlx0XHRpZiAoKHVuc2lnbmVkKXJzLVx1MDAzZWNvbnRfb2Zmc2V0IFx1MDAzZSBibG9ja3NpemUgLSBtaW5fZGVfc2l6ZSB8fFxuIDEwMTpcdFx0ICAgICh1bnNpZ25lZClycy1cdTAwM2Vjb250X3NpemUgXHUwMDNlIGJsb2Nrc2l6ZSB8fFxuIDEwMjpcdFx0ICAgICh1bnNpZ25lZCkocnMtXHUwMDNlY29udF9vZmZzZXQgJiM0MzsgcnMtXHUwMDNlY29udF9zaXplKSBcdTAwM2UgYmxvY2tzaXplKSB7XG4gMTAzOlx0XHRcdHByaW50ayhLRVJOX05PVElDRSBcJiMzNDtyb2NrOiBjb3JydXB0ZWQgZGlyZWN0b3J5IGVudHJ5LiBcJiMzNDtcbiAxMDQ6XHRcdFx0XHRcJiMzNDtleHRlbnQ9JWQsIG9mZnNldD0lZCwgc2l6ZT0lZFxcblwmIzM0OyxcbiAxMDU6XHRcdFx0XHRycy1cdTAwM2Vjb250X2V4dGVudCwgcnMtXHUwMDNlY29udF9vZmZzZXQsIHJzLVx1MDAzZWNvbnRfc2l6ZSk7XG4gMTA2Olx0XHRcdHJldCA9IC1FSU87XG4gMTA3Olx0XHRcdGdvdG8gb3V0O1xuIDEwODpcdFx0fVxuIDEwOTpcdFxuIDExMDpcdFx0aWYgKHJzLVx1MDAzZWNvbnRfZXh0ZW50IFx1MDAyNlx1MDAyNlxuIDExMTpcdFx0ICAgIChleHRlbnQgXHUwMDNjIHNiaS1cdTAwM2VzX3Nlc3Npb25fc3RhcnQgfHxcbiAxMTI6XHRcdCAgICAgZXh0ZW50IFx1MDAzZT0gc2Vzc2lvbl9lbmQgfHxcbiAxMTM6XHRcdCAgICAgZXh0ZW50IFx1MDAzZT0gc2JfYmRldl9ucl9ibG9ja3Moc2IpKSkge1xuIDExNDpcdFx0XHRwcmludGsoS0VSTl9OT1RJQ0UgXCYjMzQ7cm9jazogY29ycnVwdGVkIGRpcmVjdG9yeSBlbnRyeS4gXCYjMzQ7XG4gMTE1Olx0XHRcdFx0XCYjMzQ7ZXh0ZW50PSV1IG91dCBvZiB2b2x1bWUgKG56b25lcz0lbHUpXFxuXCYjMzQ7LFxuIDExNjpcdFx0XHRcdCh1bnNpZ25lZClycy1cdTAwM2Vjb250X2V4dGVudCxcbiAxMTc6XHRcdFx0XHRzYmktXHUwMDNlc19uem9uZXMpO1xuIDExODpcdFx0XHRyZXQgPSAtRUlPO1xuIDExOTpcdFx0XHRnb3RvIG91dDtcbiAxMjA6XHRcdH1cbiAxMjE6XHRcbiAxMjI6XHRcdGlmIChycy1cdTAwM2Vjb250X2V4dGVudCkge1xuIDEyMzpcdFx0XHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xuIDEyNDpcdFxuIDEyNTpcdFx0XHRycy1cdTAwM2VidWZmZXIgPSBrbWFsbG9jKHJzLVx1MDAzZWNvbnRfc2l6ZSwgR0ZQX0tFUk5FTCk7XG4gMTI2Olx0XHRcdGlmICghcnMtXHUwMDNlYnVmZmVyKSB7XG4gMTI3Olx0XHRcdFx0cmV0ID0gLUVOT01FTTtcbiAxMjg6XHRcdFx0XHRnb3RvIG91dDtcbiAxMjk6XHRcdFx0fVxuIDEzMDpcdFx0XHRyZXQgPSAtRUlPO1xuIDEzMTpcdFx0XHRpZiAoJiM0MzsmIzQzO3JzLVx1MDAzZWNvbnRfbG9vcHMgXHUwMDNlPSBSUl9NQVhfQ0VfRU5UUklFUylcbiAxMzI6XHRcdFx0XHRnb3RvIG91dDtcbiAxMzM6XHRcdFx0YmggPSBzYl9icmVhZChycy1cdTAwM2Vpbm9kZS1cdTAwM2VpX3NiLCBycy1cdTAwM2Vjb250X2V4dGVudCk7XG4gMTM0Olx0XHRcdGlmIChiaCkge1xuIDEzNTpcdFx0XHRcdG1lbWNweShycy1cdTAwM2VidWZmZXIsIGJoLVx1MDAzZWJfZGF0YSAmIzQzOyBycy1cdTAwM2Vjb250X29mZnNldCxcbiAxMzY6XHRcdFx0XHRcdFx0cnMtXHUwMDNlY29udF9zaXplKTtcbiAxMzc6XHRcdFx0XHRwdXRfYmgoYmgpO1xuIDEzODpcdFx0XHRcdHJzLVx1MDAzZWNociA9IHJzLVx1MDAzZWJ1ZmZlcjtcbiAxMzk6XHRcdFx0XHRycy1cdTAwM2VsZW4gPSBycy1cdTAwM2Vjb250X3NpemU7XG4gMTQwOlx0XHRcdFx0cnMtXHUwMDNlY29udF9leHRlbnQgPSAwO1xuIDE0MTpcdFx0XHRcdHJzLVx1MDAzZWNvbnRfc2l6ZSA9IDA7XG4gMTQyOlx0XHRcdFx0cnMtXHUwMDNlY29udF9vZmZzZXQgPSAwO1xuIDE0MzpcdFx0XHRcdHJldHVybiAwO1xuIDE0NDpcdFx0XHR9XG4gMTQ1Olx0XHRcdHByaW50ayhcJiMzNDtVbmFibGUgdG8gcmVhZCByb2NrLXJpZGdlIGF0dHJpYnV0ZXNcXG5cJiMzNDspO1xuIDE0NjpcdFx0fVxuIDE0NzpcdG91dDpcbiAxNDg6XHRcdGtmcmVlKHJzLVx1MDAzZWJ1ZmZlcik7XG4gMTQ5Olx0XHRycy1cdTAwM2VidWZmZXIgPSBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTg0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBDYWxsIFBhdGhzIFJlbGF0ZWQgdG8gYHJvY2tfY29udGludWVgIGFuZCBSb2NrIFJpZGdlIFBhcnNpbmcqKgoKT2theSwgc28gSSBuZWVkIHRvIGRyaWxsIGRvd24gaW50byB0aGUgY2FsbCBncmFwaC4gVGhlIGluaXRpYWwgcXVlc3Rpb24gaXMgc3RyYWlnaHRmb3J3YXJkOiAqd2hvKiBpcyBjYWxsaW5nIHRoZSBgcm9ja19jb250aW51ZWAgZnVuY3Rpb24/IFVuZGVyc3RhbmRpbmcgaXRzIGltbWVkaWF0ZSBjYWxsZXJzIGlzIHRoZSBjcnVjaWFsIGZpcnN0IHN0ZXAuIEl0IGdpdmVzIG1lIGEgc3RhcnRpbmcgcG9pbnQgdG8gc2VlIHdoYXQgY29kZSBwYXRocyBhcmUgYWN0aXZlbHkgdXNpbmcgdGhpcyBmdW5jdGlvbi4KCkJ1dCBJIGNhbiYjMzk7dCBzdG9wIHRoZXJlLiBJIGFsc28gbmVlZCB0byBicm9hZGVuIHRoZSBzY29wZSBhbmQgZXhhbWluZSBhbGwgdGhlIGNhbGxlcnMgKmludm9sdmVkKiB3aXRoIFJvY2sgUmlkZ2UgcGFyc2luZyBsb2dpYyBtb3JlIGdlbmVyYWxseS4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjayBhcyBmYXIgYXMgcG9zc2libGUuIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgd2FudCB0byBzZWUgaG93IHRoZXNlIHR3byBncm91cHMgaW50ZXJzZWN0IGFuZCBpbnRlcmFjdCB3aXRoIGVhY2ggb3RoZXIuIEl0IG1heSBiZSB0aGF0IHRoZXJlIGlzIGEgYnVnIG9yIHVud2FudGVkIGJlaGF2aW9yIHRoYXQgSSBjYW4gZml4IG9yIHJlZmFjdG9yLiBUaGUgcXVlc3Rpb24gaXMsIGhvdyBmYXIgYmFjayBzaG91bGQgSSBnbz8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTI6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cm9ja19jb250aW51ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2lzb2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9pc29mcy9yb2NrLmM9NzM9c3RhdGljIHZvaWQgaW5pdF9yb2NrX3N0YXRlKHN0cnVjdCByb2NrX3N0YXRlICpycywgc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9pc29mcy9yb2NrLmMtODUtICovXG5mcy9pc29mcy9yb2NrLmM6ODY6c3RhdGljIGludCByb2NrX2NvbnRpbnVlKHN0cnVjdCByb2NrX3N0YXRlICpycylcbmZzL2lzb2ZzL3JvY2suYy04Ny17XG4tLVxuZnMvaXNvZnMvcm9jay5jPTIxNj1pbnQgZ2V0X3JvY2tfcmlkZ2VfZmlsZW5hbWUoc3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkICpkZSxcbi0tXG5mcy9pc29mcy9yb2NrLmMtMzA5LVx0fVxuZnMvaXNvZnMvcm9jay5jOjMxMDpcdHJldCA9IHJvY2tfY29udGludWUoXHUwMDI2cnMpO1xuZnMvaXNvZnMvcm9jay5jLTMxMS1cdGlmIChyZXQgPT0gMClcbi0tXG5mcy9pc29mcy9yb2NrLmM9MzI3PXBhcnNlX3JvY2tfcmlkZ2VfaW5vZGVfaW50ZXJuYWwoc3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkICpkZSxcbi0tXG5mcy9pc29mcy9yb2NrLmMtNjEyLVx0fVxuZnMvaXNvZnMvcm9jay5jOjYxMzpcdHJldCA9IHJvY2tfY29udGludWUoXHUwMDI2cnMpO1xuZnMvaXNvZnMvcm9jay5jLTYxNC1cdGlmIChyZXQgPT0gMClcbi0tXG5mcy9pc29mcy9yb2NrLmM9NzI0PXN0YXRpYyBpbnQgcm9ja19yaWRnZV9zeW1saW5rX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuZnMvaXNvZnMvcm9jay5jLTgwNS1cdH1cbmZzL2lzb2ZzL3JvY2suYzo4MDY6XHRyZXQgPSByb2NrX2NvbnRpbnVlKFx1MDAyNnJzKTtcbmZzL2lzb2ZzL3JvY2suYy04MDctXHRpZiAocmV0ID09IDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjE3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gSVNPRlMgUm9jayBSaWRnZSBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gZ2V0IGEgZ3Jhc3Agb24gaG93IFJvY2sgUmlkZ2UgZXh0ZW5zaW9ucyBhcmUgaGFuZGxlZCBpbiB0aGUgSVNPRlMgaW1wbGVtZW50YXRpb24uICBUaGUga2V5IGZ1bmN0aW9uIGhlcmUgc2VlbXMgdG8gYmUgYHJvY2tfY29udGludWVgLiAgSXQmIzM5O3MgcHJldHR5IGNsZWFyIGZyb20gdGhpcyB0aGF0IGByb2NrX2NvbnRpbnVlYCBpcyBjZW50cmFsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGNhbGxpbmcgaXQsIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMuIFRoZSBjYWxsIHN0YWNrIGdpdmVzIG1lIHRoZSBpbW1lZGlhdGUgY29ubmVjdGlvbnM6ICBJdCYjMzk7cyBjYWxsZWQgYnkgYGdldF9yb2NrX3JpZGdlX2ZpbGVuYW1lYCwgd2hpY2ggaXMgb2J2aW91cyBlbm91Z2guIEJ1dCBtb3JlIGltcG9ydGFudGx5LCBpdCYjMzk7cyBhbHNvIGNhbGxlZCBieSBgcGFyc2Vfcm9ja19yaWRnZV9pbm9kZV9pbnRlcm5hbGAsIHdoaWNoLCBJIGtub3csIGlzIHVzZWQgd2hlbiBhY3R1YWxseSBkZWFsaW5nIHdpdGggaW5vZGVzLiBBbmQgZnVydGhlciBzdGlsbCwgYHBhcnNlX3JvY2tfcmlkZ2VfaW5vZGVfaW50ZXJuYWxgIGlzIGNhbGxlZCBieSBgcGFyc2Vfcm9ja19yaWRnZV9pbm9kZWAgKHdoaWNoIHdpbGwgZXZlbnR1YWxseSBiZSBjYWxsZWQgYnkgb3RoZXIgZnVuY3Rpb25zLCBJIGFtIHN1cmUpLiBGaW5hbGx5IGByb2NrX3JpZGdlX3N5bWxpbmtfcmVhZF9mb2xpb2AgaXMgYW5vdGhlciBpbXBvcnRhbnQgcGxhY2UgaXQgaXMgdXNlZC4gSSBhbSBhc3N1bWluZyB0aGF0IGl0IGlzIHVzZWQgZm9yIGhhbmRsaW5nIFJvY2sgUmlkZ2UgZXh0ZW5zaW9ucyBpbiBzeW1saW5rcy4KCk5vdywgYGlzb2ZzX2ZpbGxfc3VwZXJgIHNldHMgYHNiaS0mZ3Q7c19zZXNzaW9uX3N0YXJ0YC4gVGhpcyBtZWFucyB0aGUgc3VwZXJibG9jayBpbmZvcm1hdGlvbiBpcyBrZXkgdG8gdGhlIHNlc3Npb24gZGF0YSwgcGFydGljdWxhcmx5IHRoZSBzdGFydCBwb2ludC4gIFRoYXQmIzM5O3MgcHJvYmFibHkgd2hlcmUgdGhlIGltYWdlIGluZm9ybWF0aW9uIGFuZCBtZXRhZGF0YSBsaXZlcy4gQW5kIEkmIzM5O20gd2lsbGluZyB0byBiZXQgdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byB0aGUgb3ZlcmFsbCBwYXJzaW5nIHByb2Nlc3MuIEkmIzM5O20gZ29pbmcgdG8gaGVhZCB0byBgZnMvaXNvZnMvaW5vZGUuY2Agbm93IHRvIGV4YW1pbmUgYGlzb2ZzX2ZpbGxfc3VwZXJgLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGUgc3VwZXJibG9jayBpcyBpbml0aWFsaXplZCBpcyBjcml0aWNhbCBmb3Igc2VlaW5nIGhvdyB0aGUgd2hvbGUgUm9jayBSaWRnZSBzdHJ1Y3R1cmUgaXMgc2V0IHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2lzb2ZzL2lub2RlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgxMDpcdFx0ICogbGVzcyB0aGFuIHRoZSBoYXJkd2FyZSBzZWN0b3Igc2l6ZSBmb3IgdGhlIGRldmljZS4gIElmIHdlXG4gODExOlx0XHQgKiBkbywgd2Ugd291bGQgZW5kIHVwIGhhdmluZyB0byByZWFkIGxhcmdlciBidWZmZXJzIGFuZCBzcGxpdFxuIDgxMjpcdFx0ICogb3V0IHBvcnRpb25zIHRvIHNhdGlzZnkgcmVxdWVzdHMuXG4gODEzOlx0XHQgKlxuIDgxNDpcdFx0ICogTm90ZTItIHRoZSBpZGVhIGhlcmUgaXMgdGhhdCB3ZSB3YW50IHRvIGRlYWwgd2l0aCB0aGUgb3B0aW1hbFxuIDgxNTpcdFx0ICogem9uZXNpemUgaW4gdGhlIGZpbGVzeXN0ZW0uICBJZiB3ZSBoYXZlIGl0IHNldCB0byBzb21ldGhpbmcgbGVzcyxcbiA4MTY6XHRcdCAqIHRoZW4gd2UgaGF2ZSBob3JyaWJsZSBwcm9ibGVtcyB3aXRoIHRyeWluZyB0byBwaWVjZSB0b2dldGhlclxuIDgxNzpcdFx0ICogYml0cyBvZiBhZGphY2VudCBibG9ja3MgaW4gb3JkZXIgdG8gcHJvcGVybHkgcmVhZCBkaXJlY3RvcnlcbiA4MTg6XHRcdCAqIGVudHJpZXMuICBCeSBmb3JjaW5nIHRoZSBibG9ja3NpemUgaW4gdGhpcyB3YXksIHdlIGVuc3VyZVxuIDgxOTpcdFx0ICogdGhhdCB3ZSB3aWxsIG5ldmVyIGJlIHJlcXVpcmVkIHRvIGRvIHRoaXMuXG4gODIwOlx0XHQgKi9cbiA4MjE6XHRcdGlmICghc2Jfc2V0X2Jsb2Nrc2l6ZShzLCBvcmlnX3pvbmVzaXplKSlcbiA4MjI6XHRcdFx0Z290byBvdXRfZnJlZXNiaTtcbiA4MjM6XHRcbiA4MjQ6XHRcdHNiaS1cdTAwM2VzX3Nlc3Npb25fc3RhcnQgPSAodTY0KXZvbF9kZXNjX3N0YXJ0IFx1MDAzY1x1MDAzY1xuIDgyNTpcdFx0XHRcdFx0KElTT0ZTX0JMT0NLX0JJVFMgLSBzLVx1MDAzZXNfYmxvY2tzaXplX2JpdHMpO1xuIDgyNjpcdFx0c2JpLVx1MDAzZXNfbmxzX2lvY2hhcnNldCA9IE5VTEw7XG4gODI3Olx0XG4gODI4Olx0I2lmZGVmIENPTkZJR19KT0xJRVRcbiA4Mjk6XHRcdGlmIChqb2xpZXRfbGV2ZWwpIHtcbiA4MzA6XHRcdFx0Y2hhciAqcCA9IG9wdC1cdTAwM2Vpb2NoYXJzZXQgPyBvcHQtXHUwMDNlaW9jaGFyc2V0IDogQ09ORklHX05MU19ERUZBVUxUO1xuIDgzMTpcdFx0XHRpZiAoc3RyY21wKHAsIFwmIzM0O3V0ZjhcJiMzNDspICE9IDApIHtcbiA4MzI6XHRcdFx0XHRzYmktXHUwMDNlc19ubHNfaW9jaGFyc2V0ID0gb3B0LVx1MDAzZWlvY2hhcnNldCA/XG4gODMzOlx0XHRcdFx0XHRsb2FkX25scyhvcHQtXHUwMDNlaW9jaGFyc2V0KSA6IGxvYWRfbmxzX2RlZmF1bHQoKTtcbiA4MzQ6XHRcdFx0XHRpZiAoIXNiaS1cdTAwM2VzX25sc19pb2NoYXJzZXQpXG4gODM1Olx0XHRcdFx0XHRnb3RvIG91dF9mcmVlc2JpO1xuIDgzNjpcdFx0XHR9XG4gODM3Olx0XHR9XG4gODM4Olx0I2VuZGlmXG4gODM5Olx0XHRzLVx1MDAzZXNfb3AgPSBcdTAwMjZpc29mc19zb3BzO1xuIDg0MDpcdFx0cy1cdTAwM2VzX2V4cG9ydF9vcCA9IFx1MDAyNmlzb2ZzX2V4cG9ydF9vcHM7XG4gODQxOlx0XHRzYmktXHUwMDNlc19tYXBwaW5nID0gb3B0LVx1MDAzZW1hcDtcbiA4NDI6XHRcdHNiaS1cdTAwM2VzX3JvY2sgPSAob3B0LVx1MDAzZXJvY2sgPyAyIDogMCk7XG4gODQzOlx0XHRzYmktXHUwMDNlc19yb2NrX29mZnNldCA9IC0xOyAvKiBpbml0aWFsIG9mZnNldCwgd2lsbCBndWVzcyB1bnRpbCBTUCBpcyBmb3VuZCovXG4gODQ0Olx0XHRzYmktXHUwMDNlc19jcnVmdCA9IG9wdC1cdTAwM2VjcnVmdDtcbiA4NDU6XHRcdHNiaS1cdTAwM2VzX2hpZGUgPSBvcHQtXHUwMDNlaGlkZTtcbiA4NDY6XHRcdHNiaS1cdTAwM2VzX3Nob3dhc3NvYyA9IG9wdC1cdTAwM2VzaG93YXNzb2M7XG4gODQ3Olx0XHRzYmktXHUwMDNlc191aWQgPSBvcHQtXHUwMDNldWlkO1xuIDg0ODpcdFx0c2JpLVx1MDAzZXNfZ2lkID0gb3B0LVx1MDAzZWdpZDtcbiA4NDk6XHRcdHNiaS1cdTAwM2VzX3VpZF9zZXQgPSBvcHQtXHUwMDNldWlkX3NldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0NDkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgRmlsZXN5c3RlbSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb3JlIGlzc3VlOiBpdCYjMzk7cyBhIGJvdW5kcy1jaGVja2luZyBwcm9ibGVtIHdpdGhpbiBSb2NrIFJpZGdlIENFIHJlY29yZHMgZm9yIElTTzk2NjAuIFNwZWNpZmljYWxseSwgdGhlIG9yaWdpbmFsIGNoZWNrIGZvciBgcnMtJmd0O2NvbnRfZXh0ZW50YCBkaWRuJiMzOTt0IGZ1bGx5IGNvbnNpZGVyIHNlc3Npb24gb2Zmc2V0cyBvciB0aGUgYmxvY2sgZGV2aWNlJiMzOTtzIHNpemUsIGxlYWRpbmcgdG8gcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMuIENsYXNzaWMgZ290Y2hhLgoKVGhlIG5leHQgcXVlc3Rpb24gaXMgYWx3YXlzLCAmIzM0O0lzIHRoaXMgYWN0dWFsbHkgZXhwbG9pdGFibGU/JiMzNDsgQ2FuIHdlIHJlYWxpc3RpY2FsbHkgdHJpZ2dlciB0aGlzIGluIGEgbW9kZXJuIGVudmlyb25tZW50PyBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgdGhhdC4gQW5kIHllcywgZ29vZC4gVGhlIHRleHQgbWVudGlvbnMgdGhhdCBzeXprYWxsZXIsIGEgcHJvbWluZW50IGZ1enplciwgdGFyZ2V0cyBmaWxlc3lzdGVtcywgaW5jbHVkaW5nIElTTzk2NjAuIEl0IGV2ZW4gaGlnaGxpZ2h0cyB0aGUgcmVsZXZhbnQgc2V0dXA6IHRoZSBgbW91bnRgIHN5c2NhbGwgd2l0aCB0aGUgYC10IGlzbzk2NjBgIG9wdGlvbiBhbmQgbG9vcCBkZXZpY2VzIG9yIGRpc2sgaW1hZ2VzLiBTb3VuZHMgbGlrZSBhIHZlcnkgcmVhbCBhdHRhY2sgc3VyZmFjZSwgbWFraW5nIHRoaXMgZGVmaW5pdGVseSBgV29ydGhGdXp6aW5nPXRydWVgLiBNeSBleHBlcnRpc2Ugd2l0aCBmdXp6aW5nIHRlY2huaXF1ZXMgc2F5cywgeWVzLCB0aGlzIGlzIGEgdGFyZ2V0LgoKRmluYWxseSwgSSBuZWVkIHRvIGtub3cgdGhlIHByZXJlcXVpc2l0ZXMuIFdoYXQgY29uZmlncyBhcmUgbmVlZGVkIHRvIGV2ZW4gcmVhY2ggdGhpcyBjb2RlPyBJdCByZXF1aXJlcyBgSVNPOTY2MF9GU2AsIG9mIGNvdXJzZS4gSXMgUm9jayBSaWRnZSBpdHMgb3duIHNlcGFyYXRlIGNvbmZpZywgb3IgaXMgaXQgaW1wbGljaXRseSBwYXJ0IG9mIGBJU085NjYwX0ZTYD8gTGV0JiMzOTtzIGNoZWNrIGBmcy9pc29mcy9NYWtlZmlsZWAgdG8gYmUgc3VyZS4gSSBjYW4gcHJvYmFibHkgZ3Vlc3MgYnV0IGl0JiMzOTtzIGltcG9ydGFudCB0byBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTI6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9pc29mcy9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4IGlzb2ZzIGZpbGVzeXN0ZW0gcm91dGluZXMuXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG9iai0kKENPTkZJR19JU085NjYwX0ZTKSAmIzQzOz0gaXNvZnMub1xuICAgNzpcdFxuICAgODpcdGlzb2ZzLXkgXHRcdDo9IG5hbWVpLm8gaW5vZGUubyBkaXIubyB1dGlsLm8gcm9jay5vIGV4cG9ydC5vXG4gICA5Olx0aXNvZnMtJChDT05GSUdfSk9MSUVUKVx0JiM0Mzs9IGpvbGlldC5vXG4gIDEwOlx0aXNvZnMtJChDT05GSUdfWklTT0ZTKVx0JiM0Mzs9IGNvbXByZXNzLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxNTIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIElTTzk2NjAgUm9jayBSaWRnZSBFeHRlbnNpb25zKioKCk9rYXksIHNvIGlmIGBDT05GSUdfSVNPOTY2MF9GU2AgaXMgb24sIGByb2NrLm9gIGlzIGF1dG9tYXRpY2FsbHkgcGFydCBvZiBgaXNvZnMub2AuIE1ha2VzIHNlbnNlLCB0aGV5JiMzOTtyZSBpbnRyaW5zaWNhbGx5IGxpbmtlZC4gTm93LCBsZXQmIzM5O3MgZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9ucyBuZWVkIHRvIGJlIGV4cG9zZWQgYXMgYEZvY3VzU3ltYm9sc2AuIEkgbmVlZDoKCiogICBgaXNvZnNfZmlsbF9zdXBlcmAKKiAgIGByb2NrX2NvbnRpbnVlYAoqICAgYGdldF9yb2NrX3JpZGdlX2ZpbGVuYW1lYAoqICAgYHBhcnNlX3JvY2tfcmlkZ2VfaW5vZGVfaW50ZXJuYWxgIChvciBtYXliZSBqdXN0IGBwYXJzZV9yb2NrX3JpZGdlX2lub2RlYCBpZiB0aGF0JiMzOTtzIHRoZSBvbmUgd2UgbmVlZCkuCiogICBgcm9ja19yaWRnZV9zeW1saW5rX3JlYWRfZm9saW9gCgpUaGUgbmV4dCBjcml0aWNhbCBzdGVwIGlzIHRvIGRldGVybWluZSBpZiBgcm9ja19jb250aW51ZWAgaXMgaW5saW5lIG9yIHN0YXRpYy4gTGV0JiMzOTtzIHNlZS4uLiB5ZXAsIGl0JiMzOTtzIGRlZmluZWQgYXMgYHN0YXRpYyBpbnQgcm9ja19jb250aW51ZSguLi4pYCBpbiBgZnMvaXNvZnMvcm9jay5jYC4gV2l0aCBjb21waWxlciBvcHRpbWl6YXRpb25zLCBpdCBjb3VsZCBiZSBpbmxpbmVkLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBjaGVjayB0aGUgY2FsbGVycyBvZiBgcm9ja19jb250aW51ZWAgdG8gbWFrZSBhIGRlZmluaXRpdmUganVkZ2VtZW50LiBJdCBsb29rcyBsaWtlIGBwYXJzZV9yb2NrX3JpZGdlX2lub2RlYCBpcyBub24tc3RhdGljLCBzbyB0aGUgY2FsbGVyIG9mIHRoYXQgZnVuY3Rpb24gd2lsbCBiZSB0aGUgdGhpbmcgdG8gd2F0Y2ggZm9yLiBMZXQmIzM5O3Mgc2VlIHRoZSBjYWxsZXJzIG9mIGByb2NrX2NvbnRpbnVlYCBhbmQgdGhlbiBmaWd1cmUgb3V0IGhvdyBgcGFyc2Vfcm9ja19yaWRnZV9pbm9kZWAgYW5kIGBnZXRfcm9ja19yaWRnZV9maWxlbmFtZWAgYXJlIHVzZWQgaW4gcmVsYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhcnNlX3JvY2tfcmlkZ2VfaW5vZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9pc29mcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaXNvZnMvaW5vZGUuYz0xMjcyPXN0YXRpYyBpbnQgaXNvZnNfcmVhZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgcmVsb2NhdGVkKVxuLS1cbmZzL2lzb2ZzL2lub2RlLmMtMTQxNS1cdGlmICghaGlnaF9zaWVycmEpIHtcbmZzL2lzb2ZzL2lub2RlLmM6MTQxNjpcdFx0cGFyc2Vfcm9ja19yaWRnZV9pbm9kZShkZSwgaW5vZGUsIHJlbG9jYXRlZCk7XG5mcy9pc29mcy9pbm9kZS5jLTE0MTctXHRcdC8qIGlmIHdlIHdhbnQgdWlkL2dpZCBzZXQsIG92ZXJyaWRlIHRoZSByb2NrIHJpZGdlIHNldHRpbmcgKi9cbi0tXG5mcy9pc29mcy9pbm9kZS5jLTE0NTItXHRcdCAgIFNfSVNGSUZPKGlub2RlLVx1MDAzZWlfbW9kZSkgfHwgU19JU1NPQ0soaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuZnMvaXNvZnMvaW5vZGUuYzoxNDUzOlx0XHQvKiBYWFggLSBwYXJzZV9yb2NrX3JpZGdlX2lub2RlKCkgaGFkIGFscmVhZHkgc2V0IGlfcmRldi4gKi9cbmZzL2lzb2ZzL2lub2RlLmMtMTQ1NC1cdFx0aW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBpbm9kZS1cdTAwM2VpX21vZGUsIGlub2RlLVx1MDAzZWlfcmRldik7XG4tLVxuZnMvaXNvZnMvaXNvZnMuaD0xMTU9c3RydWN0IGlub2RlO1x0XHQvKiBUbyBtYWtlIGdjYyBoYXBweSAqL1xuZnMvaXNvZnMvaXNvZnMuaC0xMTYtXG5mcy9pc29mcy9pc29mcy5oOjExNzpleHRlcm4gaW50IHBhcnNlX3JvY2tfcmlkZ2VfaW5vZGUoc3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkICosIHN0cnVjdCBpbm9kZSAqLCBpbnQgcmVsb2NhdGVkKTtcbmZzL2lzb2ZzL2lzb2ZzLmgtMTE4LWV4dGVybiBpbnQgZ2V0X3JvY2tfcmlkZ2VfZmlsZW5hbWUoc3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkICosIGNoYXIgKiwgc3RydWN0IGlub2RlICopO1xuLS1cbmZzL2lzb2ZzL3JvY2suYz0zMjY9c3RhdGljIGludFxuZnMvaXNvZnMvcm9jay5jOjMyNzpwYXJzZV9yb2NrX3JpZGdlX2lub2RlX2ludGVybmFsKHN0cnVjdCBpc29fZGlyZWN0b3J5X3JlY29yZCAqZGUsXG5mcy9pc29mcy9yb2NrLmMtMzI4LVx0XHRcdFx0c3RydWN0IGlub2RlICppbm9kZSwgaW50IGZsYWdzKVxuLS1cbmZzL2lzb2ZzL3JvY2suYz02MjY9c3RhdGljIGNoYXIgKmdldF9zeW1saW5rX2NodW5rKGNoYXIgKnJwbnQsIHN0cnVjdCByb2NrX3JpZGdlICpyciwgY2hhciAqcGxpbWl0KVxuLS1cbmZzL2lzb2ZzL3JvY2suYy03MDEtXG5mcy9pc29mcy9yb2NrLmM6NzAyOmludCBwYXJzZV9yb2NrX3JpZGdlX2lub2RlKHN0cnVjdCBpc29fZGlyZWN0b3J5X3JlY29yZCAqZGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9pc29mcy9yb2NrLmMtNzAzLVx0XHRcdCAgIGludCByZWxvY2F0ZWQpXG4tLVxuZnMvaXNvZnMvcm9jay5jLTcwNS1cdGludCBmbGFncyA9IHJlbG9jYXRlZCA/IFJSX1JFTE9DX0RFIDogMDtcbmZzL2lzb2ZzL3JvY2suYzo3MDY6XHRpbnQgcmVzdWx0ID0gcGFyc2Vfcm9ja19yaWRnZV9pbm9kZV9pbnRlcm5hbChkZSwgaW5vZGUsIGZsYWdzKTtcbmZzL2lzb2ZzL3JvY2suYy03MDctXG4tLVxuZnMvaXNvZnMvcm9jay5jLTcxMy1cdCAgICBcdTAwMjZcdTAwMjYgKElTT0ZTX1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfcm9jayA9PSAyKSkge1xuZnMvaXNvZnMvcm9jay5jOjcxNDpcdFx0cmVzdWx0ID0gcGFyc2Vfcm9ja19yaWRnZV9pbm9kZV9pbnRlcm5hbChkZSwgaW5vZGUsXG5mcy9pc29mcy9yb2NrLmMtNzE1LVx0XHRcdFx0XHRcdFx0IGZsYWdzIHwgUlJfUkVHQVJEX1hBKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTI6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk0NTAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczoKCioqQ2hlY2tpbmcgQ2FsbGVyIEZ1bmN0aW9ucyBmb3IgYGdldF9yb2NrX3JpZGdlX2ZpbGVuYW1lYCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgY29kZSBhbmQgSSYjMzk7dmUgY29tZSBhY3Jvc3MgYGdldF9yb2NrX3JpZGdlX2ZpbGVuYW1lYC4gTXkgaW5pdGlhbCBjb25jZXJuIGlzbiYjMzk7dCBhYm91dCB0aGUgZnVuY3Rpb24gaXRzZWxmICpwZXIgc2UqLCBidXQgcmF0aGVyLCBob3cgYW5kIHdoZXJlIGl0JiMzOTtzIGJlaW5nICp1c2VkKi4gU28sIGluc3RlYWQgb2YganVzdCBhc3N1bWluZyBJIHVuZGVyc3RhbmQgaXRzIHJvbGUsIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7TGV0JiMzOTtzIHRyYWNrIGRvd24gYWxsIHRoZSBwbGFjZXMgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSAqY2FsbGVkKi4mIzM0OyBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIGl0cyB1c2UgaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIHNlZSB0aGUgY2FsbGluZyBmdW5jdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIGdyYXNwIHRoZSBiaWdnZXIgcGljdHVyZSwgdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiB0aGUgZnVuY3Rpb24sIGFuZCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBvciBpc3N1ZXMgcmVsYXRlZCB0byBpdHMgaW50ZWdyYXRpb24gd2l0aGluIHRoZSBvdmVyYWxsIHN5c3RlbS4gQSB0aG9yb3VnaCB1bmRlcnN0YW5kaW5nIG9mIGl0cyBjYWxsZXJzIGlzIHRoZSBmaXJzdCBzdGVwIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfcm9ja19yaWRnZV9maWxlbmFtZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2lzb2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9pc29mcy9kaXIuYz04NT1zdGF0aWMgaW50IGRvX2lzb2ZzX3JlYWRkaXIoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuZnMvaXNvZnMvZGlyLmMtMTkyLVx0XHRpZiAoc2JpLVx1MDAzZXNfcm9jaykge1xuZnMvaXNvZnMvZGlyLmM6MTkzOlx0XHRcdGxlbiA9IGdldF9yb2NrX3JpZGdlX2ZpbGVuYW1lKGRlLCB0bXBuYW1lLCBpbm9kZSk7XG5mcy9pc29mcy9kaXIuYy0xOTQtXHRcdFx0aWYgKGxlbiAhPSAwKSB7XHRcdC8qIG1heSBiZSAtMSAqL1xuLS1cbmZzL2lzb2ZzL2lzb2ZzLmg9MTE3PWV4dGVybiBpbnQgcGFyc2Vfcm9ja19yaWRnZV9pbm9kZShzdHJ1Y3QgaXNvX2RpcmVjdG9yeV9yZWNvcmQgKiwgc3RydWN0IGlub2RlICosIGludCByZWxvY2F0ZWQpO1xuZnMvaXNvZnMvaXNvZnMuaDoxMTg6ZXh0ZXJuIGludCBnZXRfcm9ja19yaWRnZV9maWxlbmFtZShzdHJ1Y3QgaXNvX2RpcmVjdG9yeV9yZWNvcmQgKiwgY2hhciAqLCBzdHJ1Y3QgaW5vZGUgKik7XG5mcy9pc29mcy9pc29mcy5oLTExOS1leHRlcm4gaW50IGlzb2ZzX25hbWVfdHJhbnNsYXRlKHN0cnVjdCBpc29fZGlyZWN0b3J5X3JlY29yZCAqLCBjaGFyICosIHN0cnVjdCBpbm9kZSAqKTtcbi0tXG5mcy9pc29mcy9uYW1laS5jPTQ5PWlzb2ZzX2ZpbmRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9pc29mcy9uYW1laS5jLTEwNC1cdFx0aWYgKHNiaS1cdTAwM2VzX3JvY2sgXHUwMDI2XHUwMDI2XG5mcy9pc29mcy9uYW1laS5jOjEwNTpcdFx0ICAgICgoaSA9IGdldF9yb2NrX3JpZGdlX2ZpbGVuYW1lKGRlLCB0bXBuYW1lLCBkaXIpKSkpIHtcbmZzL2lzb2ZzL25hbWVpLmMtMTA2LVx0XHRcdGRsZW4gPSBpO1x0LyogcG9zc2libHkgLTEgKi9cbi0tXG5mcy9pc29mcy9yb2NrLmM9MTU3PXN0YXRpYyBpbnQgcm9ja19jaGVja19vdmVyZmxvdyhzdHJ1Y3Qgcm9ja19zdGF0ZSAqcnMsIGludCBzaWcpXG4tLVxuZnMvaXNvZnMvcm9jay5jLTIxNS0gKi9cbmZzL2lzb2ZzL3JvY2suYzoyMTY6aW50IGdldF9yb2NrX3JpZGdlX2ZpbGVuYW1lKHN0cnVjdCBpc29fZGlyZWN0b3J5X3JlY29yZCAqZGUsXG5mcy9pc29mcy9yb2NrLmMtMjE3LVx0XHRcdCAgICBjaGFyICpyZXRuYW1lLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDE1MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgZnVuY3Rpb24gYHJvY2tfcmlkZ2Vfc3ltbGlua19yZWFkX2ZvbGlvYDoKCioqQW5hbHl6aW5nIGByb2NrX3JpZGdlX3N5bWxpbmtfcmVhZF9mb2xpb2AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGByb2NrX3JpZGdlX3N5bWxpbmtfcmVhZF9mb2xpb2AuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIGtub3cgdGhpcyBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggUm9jayBSaWRnZSBleHRlbnNpb25zLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBzeW1saW5rcyBhbmQsIGdpdmVuIHRoZSAmIzM0O3JlYWQmIzM0OyBhbmQgJiMzNDtmb2xpbyYjMzQ7IGJpdHMsIHByb2JhYmx5IGhvdyB0aGV5JiMzOTtyZSBoYW5kbGVkIHdoZW4gYmVpbmcgcmVhZCBpbnRvIGEgcGFnZSBjYWNoZSBvciBzaW1pbGFyIHN0cnVjdHVyZS4gVGhpcyBpcyBsaWtlbHkgcGFydCBvZiBhIGJyb2FkZXIgZmlsZSBzeXN0ZW0gaW1wbGVtZW50YXRpb24sIGxpa2VseSBkZWFsaW5nIHdpdGggYSBmaWxlIHN5c3RlbSB0aGF0IHN1cHBvcnRzIFJvY2sgUmlkZ2UgZXh0ZW5zaW9ucywgc3VjaCBhcyBpbiB0aGUgY29udGV4dCBvZiBhbiBJU08gaW1hZ2Ugb3Igc2ltaWxhciBmb3JtYXQgd2l0aCBleHRlbmRlZCBtZXRhZGF0YS4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbnMgYXJlOgoKKiAgIFdoYXQgYXJlIHRoZSBlZGdlIGNhc2VzPyBXaGF0JiMzOTtzIHRoZSBwb3RlbnRpYWwgZm9yIGluZmluaXRlIHJlY3Vyc2lvbiBpZiBhIHN5bWxpbmsgcG9pbnRzIHRvIGl0c2VsZiBkaXJlY3RseSBvciBpbmRpcmVjdGx5PyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlJiMzOTtzIHJvYnVzdCBjeWNsZSBkZXRlY3Rpb24gYnVpbHQgaW4sIG9yIHRoYXQgdGhlIGRlc2lnbiBpbmhlcmVudGx5IHByZXZlbnRzIHRoaXMuCiogICBIb3cgaXMgdGhlICphY3R1YWwqIGRhdGEgcmVhZCBpbnRvIHRoZSBmb2xpbz8gSXMgaXQgYSBkaXJlY3QgbWVtb3J5IGNvcHksIG9yIGlzIHRoZXJlIGJ1ZmZlcmluZyBpbnZvbHZlZD8gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBpZiBsYXJnZSBzeW1saW5rcyBhcmUgYmVpbmcgaGFuZGxlZC4KKiAgIFdoYXQmIzM5O3MgdGhlIGVycm9yIGhhbmRsaW5nIGxpa2U/IEhvdyBhcmUgaXNzdWVzIGxpa2UgYnJva2VuIHN5bWxpbmtzIChwb2ludGluZyB0byBub24tZXhpc3RlbnQgdGFyZ2V0cyksIGFjY2VzcyBkZW5pZWQgc2NlbmFyaW9zLCBvciBidWZmZXIgb3ZlcmZsb3dzIGhhbmRsZWQ/IFRoZSBkZXRhaWxzIGhlcmUgYXJlIGNyaXRpY2FsIGZvciByb2J1c3RuZXNzLgoqICAgSXMgdGhpcyBiZWluZyBvcHRpbWl6ZWQgZm9yIHJlYWQtYWhlYWQ/IFN5bWxpbmtzIGNhbiBjYXVzZSBqdW1wcyBpbiByZWFkIGFjY2Vzcywgc28gaXMgdGhlIHN5c3RlbSBiZWluZyBjbGV2ZXIgaW4gaG93IGl0IGFudGljaXBhdGVzIGFuZCBwcmVmZXRjaGVzPwoqICAgV2hhdCBpcyB0aGUgY29udGV4dCBvZiB0aGUgZm9saW8/IEkmIzM5O20gY3VyaW91cyB3aGF0IGRhdGEgaXQgY29udGFpbnMgYW5kIGlmIGl0JiMzOTtzIHNhZmUgdG8gYXNzdW1lIGEgY2VydGFpbiBzaXplIG9mIHRoZSBkZXN0aW5hdGlvbi4KCk92ZXJhbGwsIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBhIGZ1bmN0aW9uIHRoYXQmIzM5O3MgcG90ZW50aWFsbHkgcGVyZm9ybWFuY2UtY3JpdGljYWwsIGFuZCBjZXJ0YWlubHkgbmVlZHMgdG8gYmUgcm9idXN0IGFuZCBzZWN1cmUuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBjbG9zZWx5IGZvciBob3cgaXQgaGFuZGxlcyB0aGVzZSB0cmlja3kgc3ltbGluayBzY2VuYXJpb3MgYW5kIGFueSBwb3RlbnRpYWxseSByaXNreSBtZW1vcnkgb3BlcmF0aW9ucy4gSXTigJlzIGFsc28gaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgY29udGV4dCwgc28gSSBuZWVkIHRvIGNoZWNrIHRoZSBmdW5jdGlvbiBjYWxscyBhbmQgcmVsYXRlZCBjb2RlIGluIG9yZGVyIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBjb21wbGV0ZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JvY2tfcmlkZ2Vfc3ltbGlua19yZWFkX2ZvbGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaXNvZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2lzb2ZzL3JvY2suYz03MDI9aW50IHBhcnNlX3JvY2tfcmlkZ2VfaW5vZGUoc3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkICpkZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9pc29mcy9yb2NrLmMtNzIzLSAqL1xuZnMvaXNvZnMvcm9jay5jOjcyNDpzdGF0aWMgaW50IHJvY2tfcmlkZ2Vfc3ltbGlua19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuZnMvaXNvZnMvcm9jay5jLTcyNS17XG4tLVxuZnMvaXNvZnMvcm9jay5jPTgzNz1jb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGlzb2ZzX3N5bWxpbmtfYW9wcyA9IHtcbmZzL2lzb2ZzL3JvY2suYzo4Mzg6XHQucmVhZF9mb2xpbyA9IHJvY2tfcmlkZ2Vfc3ltbGlua19yZWFkX2ZvbGlvXG5mcy9pc29mcy9yb2NrLmMtODM5LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwODU1CgkJCQkJCQlvdXRwdXQ6IDEzNAoJCQkJCQkJdGhvdWdodHM6IDM1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIElTTzk2NjAgd2l0aCBSb2NrIFJpZGdlIEV4dGVuc2lvbjogQSBGb2N1c2VkIEFwcHJvYWNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IHByaW1hcnkgZm9jdXMgaXMgb24gZnV6emluZyB0aGUgSVNPOTY2MCBmaWxlIHN5c3RlbSwgc3BlY2lmaWNhbGx5IHdoZW4gUm9jayBSaWRnZSBleHRlbnNpb25zIGFyZSBpbiBwbGF5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O3ZlIGlkZW50aWZpZWQgdGhlIHJpZ2h0IGFyZWFzLiBNeSBsaXN0IG9mIGtleSBzeW1ib2xzIHNlZW1zIHNvbGlkOiBgaXNvZnNfZmlsbF9zdXBlcmAsIGByb2NrX2NvbnRpbnVlYCwgYGdldF9yb2NrX3JpZGdlX2ZpbGVuYW1lYCwgYHBhcnNlX3JvY2tfcmlkZ2VfaW5vZGVgLCBhbmQgYHJvY2tfcmlkZ2Vfc3ltbGlua19yZWFkX2ZvbGlvYC4gVGhvc2UgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyBJIHdhbnQgdG8gdGFyZ2V0LgoKTm93LCBhIHF1aWNrIGNvbmZpZ3VyYXRpb24gY2hlY2suIGBJU085NjYwX0ZTYCBpcyB0aGUgbWFpbiBvbmUgSSBuZWVkIHRvIGVuYWJsZTsgdGhhdCYjMzk7cyB0aGUgYmFzZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3MsIGJ1dCBJIGRvbiYjMzk7dCB0aGluayBJJiMzOTtsbCBuZWVkIGFueSBtb3JlLiBOZXh0LCBhIHF1aWNrIGNoZWNrIG9mIHRoZSBtb2RpZmllZCBmaWxlcyBjb25maXJtcyB0aGF0IHRoZSB3b3JrIGlzIGNvbnRhaW5lZCBwcmltYXJpbHkgaW4gYGZzL2lzb2ZzYC4gU3BlY2lmaWNhbGx5LCBgZnMvaXNvZnMvaW5vZGUuY2AgKHdoZXJlIEkgZmluZCBgaXNvZnNfZmlsbF9zdXBlcmApLCBgZnMvaXNvZnMvaXNvZnMuaGAgKGZvciB0aGUgYGlzb2ZzX3NiX2luZm9gIHN0cnVjdCksIGFuZCBgZnMvaXNvZnMvcm9jay5jYCAod2hlcmUgSSYjMzk7bGwgZmluZCBgcm9ja19jb250aW51ZWApLgoKUmV2aWV3aW5nIHRoZSBpbnN0cnVjdGlvbnMsIGl04oCZcyBhbGwgc2V0IHVwIHRoZSB3YXkgSSBleHBlY3QuIGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byBgdHJ1ZWAsIGBFbmFibGVDb25maWdzYCBpbmNsdWRlcyBteSBgSVNPOTY2MF9GU2AsIGFuZCB0aGUgYEZvY3VzU3ltYm9sc2AgYXJlIGV4YWN0bHkgd2hhdCBJIGdhdGhlcmVkLiBUaGUgYFJlYXNvbmluZ2AgcHJvdmlkZXMgYSBjb25jaXNlIGV4cGxhbmF0aW9uLgoKT2theSwgbGV0JiMzOTtzIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgZXZlcnl0aGluZyBpbiBteSBoZWFkLiBBbGwgdGhlIGNvZGUgY2hhbmdlcyBhcmUgd2l0aGluIHRoZSBgaXNvZnNgIGRyaXZlciwgYW5kIHRoYXQmIzM5O3MgcGVyZmVjdC4gVGhpcyBjYW4gYmUgZXhlcmNpc2VkIGVpdGhlciBieSBtb3VudGluZyBJU08gaW1hZ2VzIGRpcmVjdGx5IGZyb20gdXNlciBzcGFjZSBvciBieSB1c2luZyBzeXprYWxsZXIsIGxldmVyYWdpbmcgbG9vcCBkZXZpY2VzIG9yIGRpcmVjdCBkaXNrIGRldmljZXMuIEltcG9ydGFudGx5LCB0aGlzIHBhdGNoIGZvY3VzZXMgb24gYWRkaW5nIGJvdW5kYXJ5IGNoZWNrcyB3aXRoaW4gUm9jayBSaWRnZSBDb250aW51YXRpb24gQXJlYSByZWNvcmRzLCBlbnN1cmluZyB0aGF0IHdlIGRvbiYjMzk7dCByZWFkIG91dC1vZi1ib3VuZHMgZHVlIHRvIHNlc3Npb24gYm91bmRhcmllcyBvciB1bmRlcmx5aW5nIGJsb2NrIGRldmljZSBzaXplIGlzc3Vlcy4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgYW5kIHZhbHVhYmxlIGZ1enppbmcgdGFyZ2V0LgoKQWxyaWdodCwgSSYjMzk7bSByZWFkeS4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJU085NjYwX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXNvZnNfZmlsbF9zdXBlciYjMzQ7LAogICAgJiMzNDtyb2NrX2NvbnRpbnVlJiMzNDssCiAgICAmIzM0O2dldF9yb2NrX3JpZGdlX2ZpbGVuYW1lJiMzNDssCiAgICAmIzM0O3BhcnNlX3JvY2tfcmlkZ2VfaW5vZGUmIzM0OywKICAgICYjMzQ7cm9ja19yaWRnZV9zeW1saW5rX3JlYWRfZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzZXNzaW9uIGJvdW5kYXJ5IGFuZCBibG9jayBkZXZpY2UgY2FwYWNpdHkgdmFsaWRhdGlvbiBmb3IgUm9jayBSaWRnZSBDb250aW51YXRpb24gQXJlYSAoQ0UpIHJlY29yZHMgaW4gaXNvZnMuIFRoZSBtb2RpZmllZCBjb2RlIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSBieSBtb3VudGluZyBhbmQgcmVhZGluZyBjcmFmdGVkIElTTzk2NjAgZmlsZXN5c3RlbSBpbWFnZXMgdmlhIGxvb3AvZGlzayBkZXZpY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJU085NjYwX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXNvZnNfZmlsbF9zdXBlciYjMzQ7LAogICAgJiMzNDtyb2NrX2NvbnRpbnVlJiMzNDssCiAgICAmIzM0O2dldF9yb2NrX3JpZGdlX2ZpbGVuYW1lJiMzNDssCiAgICAmIzM0O3BhcnNlX3JvY2tfcmlkZ2VfaW5vZGUmIzM0OywKICAgICYjMzQ7cm9ja19yaWRnZV9zeW1saW5rX3JlYWRfZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzZXNzaW9uIGJvdW5kYXJ5IGFuZCBibG9jayBkZXZpY2UgY2FwYWNpdHkgdmFsaWRhdGlvbiBmb3IgUm9jayBSaWRnZSBDb250aW51YXRpb24gQXJlYSAoQ0UpIHJlY29yZHMgaW4gaXNvZnMuIFRoZSBtb2RpZmllZCBjb2RlIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSBieSBtb3VudGluZyBhbmQgcmVhZGluZyBjcmFmdGVkIElTTzk2NjAgZmlsZXN5c3RlbSBpbWFnZXMgdmlhIGxvb3AvZGlzayBkZXZpY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMjoxNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjE2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZnMvaXNvZnMgdG8gcHJvcGVybHkgdmFsaWRhdGUgUm9jayBSaWRnZSBjb250aW51YXRpb24gZXh0ZW50cyAoYENFYCBlbnRyaWVzKSBhZ2FpbnN0IHNlc3Npb24gYW5kIGJsb2NrIGRldmljZSBib3VuZGFyaWVzIGJ5IGludHJvZHVjaW5nIGBzYmktXHUwMDNlc19zZXNzaW9uX3N0YXJ0YCBhbmQgY29tcGFyaW5nIGBjb250X2V4dGVudGAgYWdhaW5zdCB0aGUgdmFsaWQgcmFuZ2UuIFxuXG4tIGBzdHJ1Y3QgaXNvZnNfc2JfaW5mb2AgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAsIGFuZCBgc19zZXNzaW9uX3N0YXJ0YCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIGR1cmluZyBzdXBlcmJsb2NrIHNldHVwIGJlZm9yZSBhbnkgUm9jayBSaWRnZSBwYXJzaW5nIG9jY3Vycy5cbi0gVGhlIHBhdGNoIHRpZ2h0ZW5zIGJvdW5kcyBjaGVja3MgZm9yIGJsb2NrIHJlYWRzLCBtaXRpZ2F0aW5nIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGJsb2NrIHJlYWRzIG9uIGNvcnJ1cHRlZC9tYWxpY2lvdXMgSVNPIGltYWdlcyAod2hpY2ggZmFsbCB1bmRlciBLQVNBTi9nZW5lcmljIGJvdW5kcyBjaGVja2luZykuXG4tIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzdGFjay9oZWFwIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCB0byB1c2VyIHNwYWNlLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgcHJlc2VudCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGYwMjE1YmZlZjNiNzc2MWU3N2Q4YjU5MmU3ZDdkMGIzNGQ1ZTllZWYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDEyOjE1OjI4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvaXNvZnMvaW5vZGUuYyBiL2ZzL2lzb2ZzL2lub2RlLmMKaW5kZXggMzM3ODM2YTBhMTcwNC4uZWZjYjhmYjJiMTBjNCAxMDA2NDQKLS0tIGEvZnMvaXNvZnMvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9pc29mcy9pbm9kZS5jCkBAIC04MjEsNiAmIzQzOzgyMSw4IEBAIHN0YXRpYyBpbnQgaXNvZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHN0cnVjdCBmc19jb250ZXh0ICpmYykKIAlpZiAoIXNiX3NldF9ibG9ja3NpemUocywgb3JpZ196b25lc2l6ZSkpCiAJCWdvdG8gb3V0X2ZyZWVzYmk7CiAKJiM0MzsJc2JpLSZndDtzX3Nlc3Npb25fc3RhcnQgPSAodTY0KXZvbF9kZXNjX3N0YXJ0ICZsdDsmbHQ7CiYjNDM7CQkJCShJU09GU19CTE9DS19CSVRTIC0gcy0mZ3Q7c19ibG9ja3NpemVfYml0cyk7CiAJc2JpLSZndDtzX25sc19pb2NoYXJzZXQgPSBOVUxMOwogCiAjaWZkZWYgQ09ORklHX0pPTElFVApkaWZmIC0tZ2l0IGEvZnMvaXNvZnMvaXNvZnMuaCBiL2ZzL2lzb2ZzL2lzb2ZzLmgKaW5kZXggZGFjYjljZGFlNGZkMS4uMDczMmUxYWEzYjdmYSAxMDA2NDQKLS0tIGEvZnMvaXNvZnMvaXNvZnMuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9pc29mcy9pc29mcy5oCkBAIC0zNSw2ICYjNDM7MzUsOCBAQCBzdHJ1Y3QgaXNvZnNfc2JfaW5mbyB7CiAJdW5zaWduZWQgbG9uZyBzX2ZpcnN0ZGF0YXpvbmU7CiAJdW5zaWduZWQgbG9uZyBzX2xvZ196b25lX3NpemU7CiAJdW5zaWduZWQgbG9uZyBzX21heF9zaXplOwomIzQzOwkvKiBTZXNzaW9uIHN0YXJ0IGluIGZpbGVzeXN0ZW0gYmxvY2sgdW5pdHMuICovCiYjNDM7CXU2NCBzX3Nlc3Npb25fc3RhcnQ7CiAJCiAJaW50ICAgICAgICAgICBzX3JvY2tfb2Zmc2V0OyAvKiBvZmZzZXQgb2YgU1VTUCBmaWVsZHMgd2l0aGluIFNVIGFyZWEgKi8KIAlzMzIgICAgICAgICAgIHNfc2JzZWN0b3I7CmRpZmYgLS1naXQgYS9mcy9pc29mcy9yb2NrLmMgYi9mcy9pc29mcy9yb2NrLmMKaW5kZXggMjYyOGYzMWJkM2E1ZC4uYTk2NDVhOWU4NjI4OSAxMDA2NDQKLS0tIGEvZnMvaXNvZnMvcm9jay5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2lzb2ZzL3JvY2suYwpAQCAtOSw2ICYjNDM7OSw3IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGFnZW1hcC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9ibGtkZXYuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtpc29mcy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7cm9jay5oJiMzNDsKQEAgLTg0LDYgJiM0Mzs4NSwxMSBAQCBzdGF0aWMgdm9pZCBpbml0X3JvY2tfc3RhdGUoc3RydWN0IHJvY2tfc3RhdGUgKnJzLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogICovCiBzdGF0aWMgaW50IHJvY2tfY29udGludWUoc3RydWN0IHJvY2tfc3RhdGUgKnJzKQogewomIzQzOwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gcnMtJmd0O2lub2RlLSZndDtpX3NiOwomIzQzOwlzdHJ1Y3QgaXNvZnNfc2JfaW5mbyAqc2JpID0gSVNPRlNfU0Ioc2IpOwomIzQzOwl1NjQgZXh0ZW50ID0gKHVuc2lnbmVkIGludClycy0mZ3Q7Y29udF9leHRlbnQ7CiYjNDM7CXU2NCBzZXNzaW9uX2VuZCA9IHNiaS0mZ3Q7c19zZXNzaW9uX3N0YXJ0ICYjNDM7CiYjNDM7CQkoKHU2NClzYmktJmd0O3NfbnpvbmVzICZsdDsmbHQ7IChJU09GU19CTE9DS19CSVRTIC0gc2ItJmd0O3NfYmxvY2tzaXplX2JpdHMpKTsKIAlpbnQgcmV0ID0gMTsKIAlpbnQgYmxvY2tzaXplID0gMSAmbHQ7Jmx0OyBycy0mZ3Q7aW5vZGUtJmd0O2lfYmxrYml0czsKIAljb25zdCBpbnQgbWluX2RlX3NpemUgPSBvZmZzZXRvZihzdHJ1Y3Qgcm9ja19yaWRnZSwgdSk7CkBAIC0xMDEsMTEgJiM0MzsxMDcsMTQgQEAgc3RhdGljIGludCByb2NrX2NvbnRpbnVlKHN0cnVjdCByb2NrX3N0YXRlICpycykKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKCh1bnNpZ25lZClycy0mZ3Q7Y29udF9leHRlbnQgJmd0Oz0gSVNPRlNfU0IocnMtJmd0O2lub2RlLSZndDtpX3NiKS0mZ3Q7c19uem9uZXMpIHsKJiM0MzsJaWYgKHJzLSZndDtjb250X2V4dGVudCAmYW1wOyZhbXA7CiYjNDM7CSAgICAoZXh0ZW50ICZsdDsgc2JpLSZndDtzX3Nlc3Npb25fc3RhcnQgfHwKJiM0MzsJICAgICBleHRlbnQgJmd0Oz0gc2Vzc2lvbl9lbmQgfHwKJiM0MzsJICAgICBleHRlbnQgJmd0Oz0gc2JfYmRldl9ucl9ibG9ja3Moc2IpKSkgewogCQlwcmludGsoS0VSTl9OT1RJQ0UgJiMzNDtyb2NrOiBjb3JydXB0ZWQgZGlyZWN0b3J5IGVudHJ5LiAmIzM0OwogCQkJJiMzNDtleHRlbnQ9JXUgb3V0IG9mIHZvbHVtZSAobnpvbmVzPSVsdSlcbiYjMzQ7LAogCQkJKHVuc2lnbmVkKXJzLSZndDtjb250X2V4dGVudCwKLQkJCUlTT0ZTX1NCKHJzLSZndDtpbm9kZS0mZ3Q7aV9zYiktJmd0O3NfbnpvbmVzKTsKJiM0MzsJCQlzYmktJmd0O3NfbnpvbmVzKTsKIAkJcmV0ID0gLUVJTzsKIAkJZ290byBvdXQ7CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTI6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg3NwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlzayBpbiB0aGUgSVNPRlMgRmlsZXN5c3RlbSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGEgcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgc3BlY2lmaWNhbGx5IHdpdGggdGhlIGBOZWVkc0tNU0FOPXRydWVgIGZsYWcsIG9yIGlmIHN0YW5kYXJkIEtBU0FOIGNoZWNrcyBhcmUgc3VmZmljaWVudCAoYE5lZWRzS01TQU49ZmFsc2VgKS4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGNhbGN1bGF0aW9ucyByZWxhdGVkIHRvIHNlc3Npb24gc3RhcnQgYW5kIGVuZCBwb2ludHMgd2l0aGluIHRoZSBJU09GUyBmaWxlc3lzdGVtLgoKTG9va2luZyBhdCB0aGUgY29kZSwgaW4gYGZzL2lzb2ZzL2lub2RlLmNgLCB0aGUgYGlzb2ZzX2ZpbGxfc3VwZXJgIGZ1bmN0aW9uIHBvcHVsYXRlcyBgc2JpLSZndDtzX3Nlc3Npb25fc3RhcnRgLiBUaGlzIGBzX3Nlc3Npb25fc3RhcnRgIGlzIHRoZW4gdXNlZCBpbiBgZnMvaXNvZnMvcm9jay5jYCB3aXRoaW4gdGhlIGByb2NrX2NvbnRpbnVlYCBmdW5jdGlvbi4gSXQgc2VlbXMgdG8gYmUgcGFydCBvZiBhIGxhcmdlciBjYWxjdWxhdGlvbiBkZXRlcm1pbmluZyB0aGUgZXh0ZW50IG9mIHNvbWUgZGF0YS4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyB1c2VkIHRvIGRlcml2ZSBgc2Vzc2lvbl9lbmRgLCB3aGljaCBpcyB0aGVuIGNvbXBhcmVkIGFnYWluc3QgYGV4dGVudGAuIFRoZSBjcml0aWNhbCBwaWVjZSBpcyB3aGV0aGVyIGBzYmktJmd0O3Nfc2Vzc2lvbl9zdGFydGAgaXMgcmVsaWFibHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGl0cyB1c2UgaW4gdGhpcyBjYWxjdWxhdGlvbiBhbmQgc3Vic2VxdWVudCBjb21wYXJpc29uLiBUaGUga2V5IGhlcmUgaXMgYWxzbyBgc2JpLSZndDtzX256b25lc2AsIHdoaWNoIGlzIGFwcGFyZW50bHkgYWxzbyBwYXJ0IG9mIGRldGVybWluaW5nIGBzZXNzaW9uX2VuZGAuCgpJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaG93IGBpc29mc19zYl9pbmZvYCBpcyBhbGxvY2F0ZWQgYW5kIGhvdyBpdHMgbWVtYmVycyBhcmUgaGFuZGxlZC4gV2UmIzM5O3JlIGxvb2tpbmcgZm9yIHdoZXRoZXIgdGhlcmUmIzM5O3MgYSBwb3NzaWJpbGl0eSBvZiB0aGVzZSB2YWx1ZXMgcmVtYWluaW5nIGdhcmJhZ2UuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHVzdWFsIG1ldGhvZHMsIHJldmlld2luZyB0aGUgYWxsb2NhdGlvbiBzaXRlIG9mIGBpc29mc19zYl9pbmZvYCBhbmQgaG93IGBzX3Nlc3Npb25fc3RhcnRgIGFuZCBgc19uem9uZXNgIGFyZSBwb3B1bGF0ZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcmVxdWlyZXMgYSBmdWxsIEtNU0FOIGNoZWNrLCBvciBpZiBzdGFuZGFyZCBLQVNBTiBjb3ZlcmFnZSBpcyBlbm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lzb2ZzX2ZpbGxfc3VwZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9pc29mcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaXNvZnMvaW5vZGUuYz01NTA9c3RhdGljIGJvb2wgcm9vdGRpcl9lbXB0eShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGJsb2NrKVxuLS1cbmZzL2lzb2ZzL2lub2RlLmMtNTczLSAqL1xuZnMvaXNvZnMvaW5vZGUuYzo1NzQ6c3RhdGljIGludCBpc29mc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuZnMvaXNvZnMvaW5vZGUuYy01NzUte1xuLS1cbmZzL2lzb2ZzL2lub2RlLmMtOTM2LVx0XHRwcmludGsoS0VSTl9XQVJOSU5HXG5mcy9pc29mcy9pbm9kZS5jOjkzNzpcdFx0XHRcJiMzNDtpc29mc19maWxsX3N1cGVyOiByb290IGlub2RlIGlzIG5vdCBhIGRpcmVjdG9yeS4gXCYjMzQ7XG5mcy9pc29mcy9pbm9kZS5jLTkzOC1cdFx0XHRcJiMzNDtDb3JydXB0ZWQgbWVkaWE/XFxuXCYjMzQ7KTtcbi0tXG5mcy9pc29mcy9pbm9kZS5jPTE1Mzk9c3RhdGljIGludCBpc29mc19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5mcy9pc29mcy9pbm9kZS5jLTE1NDAte1xuZnMvaXNvZnMvaW5vZGUuYzoxNTQxOlx0cmV0dXJuIGdldF90cmVlX2JkZXYoZmMsIGlzb2ZzX2ZpbGxfc3VwZXIpO1xuZnMvaXNvZnMvaW5vZGUuYy0xNTQyLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTI6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk1OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIHRhaWxvcmVkIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhlIGNvZGUgYXMgYW4gZXhwZXJ0OgoKKipEaXZpbmcgaW50byB0aGUgSVNPRlMgU3VwZXJibG9jayBJbml0aWFsaXphdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgY3JhY2sgb3BlbiBgZnMvaXNvZnMvaW5vZGUuY2AgYW5kIHplcm8gaW4gb24gdGhhdCBgaXNvZnNfZmlsbF9zdXBlcmAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBJU09GUyBmaWxlc3lzdGVtIGdldHMgaW5pdGlhbGl6ZWQgb24gbW91bnQuIFJpZ2h0LCBzbyB3ZSYjMzk7cmUgc3RhcnRpbmcgd2l0aCB0aGUgc3VwZXJibG9jayBzdHJ1Y3R1cmUsIHRoZSBoZWFydCBvZiB0aGUgZmlsZXN5c3RlbSYjMzk7cyBtZXRhZGF0YS4gSSYjMzk7bSBpbW1lZGlhdGVseSBsb29raW5nIGZvciBob3cgdGhlIGRldmljZSBpbmZvcm1hdGlvbiBpcyBwdWxsZWQgaW4gLSBnb3R0YSBmaW5kIHdoZXJlIHRoZSBibG9jayBkZXZpY2UgZ2V0cyBjb25uZWN0ZWQuIElzIGl0IGJlaW5nIHBhc3NlZCBkaXJlY3RseSBhcyBhbiBhcmd1bWVudCwgb3IgaXMgaXQgcmV0cmlldmVkIHNvbWVob3cgZnJvbSB0aGUgYHN0cnVjdCBzdXBlcl9ibG9ja2AgaXRzZWxmPwoKT2theSwgbG9va3MgbGlrZSB3ZSYjMzk7cmUgY2FsbGluZyBgc2dldF9mY2AgYW5kIHRoZW4gYGlzb2ZzX3JlYWRfc3VwZXJgIHdpdGggdGhlIGBzdXBlcl9ibG9ja2AgYXMgYSBwYXJhbWV0ZXIuIGBpc29mc19yZWFkX3N1cGVyYCBpcyBrZXk7IHRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayYjMzk7cyBkb25lIHRvIGFjdHVhbGx5IHJlYWQgZnJvbSB0aGUgZGV2aWNlIGFuZCBidWlsZCB0aGUgaW5pdGlhbCBmaWxlc3lzdGVtIHJlcHJlc2VudGF0aW9uIGluIG1lbW9yeS4gSSBzZWUgaXQmIzM5O3MgZ29pbmcgdG8gYmUgbG9va2luZyBmb3IgdGhlIElTTyA5NjYwIFZvbHVtZSBEZXNjcmlwdG9yIFNldC4gSSYjMzk7bSBrZWVuIHRvIHNlZSBpZiB0aGV5JiMzOTtyZSBoYW5kbGluZyBkaWZmZXJlbnQgdm9sdW1lIGRlc2NyaXB0b3IgdHlwZXMgYW5kIGlmIHRoZSBlcnJvciBjaGVja2luZyBhcm91bmQgdGhvc2UgZGVzY3JpcHRvcnMgaXMgcm9idXN0LiBBbnkgY2xldmVyIHRyaWNrcyBpbiBpZGVudGlmeWluZyB0aGUgcHJpbWFyeSB2b2x1bWUgZGVzY3JpcHRvcj8gQ2hlY2tzdW1zPyBEb3VibGUtY2hlY2tpbmcgdGhlIGlkZW50aWZpZXIgc3RyaW5nPwoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGhvdyBhcmUgdGhlIHJvb3QgZGlyZWN0b3J5JiMzOTtzIGlub2RlIGFuZCB0aGUgc3VwZXJibG9jayYjMzk7cyBgc19yb290YCBwb2ludGVyIGJlaW5nIGVzdGFibGlzaGVkPyBUaGF0JiMzOTtzIHdoYXQgSSYjMzk7bSByZWFsbHkgY29uY2VybmVkIGFib3V0LiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGUgcm9vdCBpbm9kZSBpcyBidWlsdC4gQXJlIHRoZXkgY3JlYXRpbmcgYSBuZXcgaW5vZGUgZGlyZWN0bHksIG9yIGlzIGl0IGEgc3BlY2lhbCBjYXNlPyBIb3cgZG8gdGhleSBoYW5kbGUgdGhlIHZhcmlvdXMgdm9sdW1lIGRlc2NyaXB0b3JzIGFuZCB0aGVpciBhc3NvY2lhdGVkIGRhdGE/IFVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgc3RydWN0dXJlcyBpcyBjcnVjaWFsLCB3aGF0IGFyZSB0aGUgcmVsZXZhbnQgZmllbGRzIGluIHRoZSB2b2x1bWUgZGVzY3JpcHRvcj8gQXJlIHRoZXkgdXNpbmcgYSBidWZmZXIgdG8gc3RvcmUgdGhlIHJvb3QgZGlyZWN0b3J5JiMzOTtzIGZpbGUgc3lzdGVtIGVudHJ5PyBMZXQmIzM5O3MgY2hlY2sgaG93IHRoZSBpbm9kZSBudW1iZXJzIGFyZSBhc3NpZ25lZC4gV2UgY2FuJiMzOTt0IGhhdmUgY29sbGlzaW9ucy4gCgpSaWdodCwgSSYjMzk7bSB3YXRjaGluZyBvdXQgZm9yIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93cyB3aGVuIGNhbGN1bGF0aW5nIGJsb2NrIG9mZnNldHMsIGFuZCBvZiBjb3Vyc2UsIHByb3BlciBlcnJvciBoYW5kbGluZyBhbmQgcmVzb3VyY2UgY2xlYW51cC4gSXMgbWVtb3J5IGJlaW5nIGFsbG9jYXRlZCBhbmQgZGVhbGxvY2F0ZWQgY29ycmVjdGx5LCBlc3BlY2lhbGx5IGZvciB0aGUgZGlyZWN0b3J5IGVudHJpZXMgYW5kIHRoZSBidWZmZXI/IEFueSBtaXNzZWQgYGtmcmVlYCBjYWxscyB3b3VsZCBiZSBhIHNlcmlvdXMgcHJvYmxlbSBpbiB0aGUgbG9uZyBydW4uIEkgYWxzbyB3YW50IHRvIHZlcmlmeSB0aGV5IGFyZSBoYW5kbGluZyBhbnkgZW5kaWFubmVzcyBpc3N1ZXMgY29ycmVjdGx5LCBlc3BlY2lhbGx5IHdoZW4gcGFyc2luZyBtdWx0aS1ieXRlIGZpZWxkcyBmcm9tIHRoZSBkaXNrIGltYWdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2lzb2ZzL2lub2RlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NzQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU3NDpcdHN0YXRpYyBpbnQgaXNvZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiA1NzU6XHR7XG4gNTc2Olx0XHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTCwgKnByaV9iaCA9IE5VTEw7XG4gNTc3Olx0XHRzdHJ1Y3QgaHNfcHJpbWFyeV9kZXNjcmlwdG9yICpoX3ByaSA9IE5VTEw7XG4gNTc4Olx0XHRzdHJ1Y3QgaXNvX3ByaW1hcnlfZGVzY3JpcHRvciAqcHJpID0gTlVMTDtcbiA1Nzk6XHRcdHN0cnVjdCBpc29fc3VwcGxlbWVudGFyeV9kZXNjcmlwdG9yICpzZWMgPSBOVUxMO1xuIDU4MDpcdFx0c3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkICpyb290cDtcbiA1ODE6XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4gNTgyOlx0XHRzdHJ1Y3QgaXNvZnNfb3B0aW9ucyAqb3B0ID0gZmMtXHUwMDNlZnNfcHJpdmF0ZTtcbiA1ODM6XHRcdHN0cnVjdCBpc29mc19zYl9pbmZvICpzYmk7XG4gNTg0Olx0XHR1bnNpZ25lZCBsb25nIGZpcnN0X2RhdGFfem9uZTtcbiA1ODU6XHRcdGludCBqb2xpZXRfbGV2ZWwgPSAwO1xuIDU4NjpcdFx0aW50IGlzb19ibGtudW0sIGJsb2NrO1xuIDU4NzpcdFx0aW50IG9yaWdfem9uZXNpemU7XG4gNTg4Olx0XHRpbnQgdGFibGUsIGVycm9yID0gLUVJTlZBTDtcbiA1ODk6XHRcdHVuc2lnbmVkIGludCB2b2xfZGVzY19zdGFydDtcbiA1OTA6XHRcdGludCBzaWxlbnQgPSBmYy1cdTAwM2VzYl9mbGFncyBcdTAwMjYgU0JfU0lMRU5UO1xuIDU5MTpcdFxuIDU5MjpcdFx0c2JpID0ga3phbGxvY19vYmooKnNiaSk7XG4gNTkzOlx0XHRpZiAoIXNiaSlcbiA1OTQ6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gNTk1Olx0XHRzLVx1MDAzZXNfZnNfaW5mbyA9IHNiaTtcbiA1OTY6XHRcbiA1OTc6XHRcdC8qXG4gNTk4Olx0XHQgKiBGaXJzdCBvZiBhbGwsIGdldCB0aGUgaGFyZHdhcmUgYmxvY2tzaXplIGZvciB0aGlzIGRldmljZS5cbiA1OTk6XHRcdCAqIElmIHdlIGRvbiYjMzk7dCBrbm93IHdoYXQgaXQgaXMsIG9yIHRoZSBoYXJkd2FyZSBibG9ja3NpemUgaXNcbiA2MDA6XHRcdCAqIGxhcmdlciB0aGFuIHRoZSBibG9ja3NpemUgdGhlIHVzZXIgc3BlY2lmaWVkLCB0aGVuIHVzZVxuIDYwMTpcdFx0ICogdGhhdCB2YWx1ZS5cbiA2MDI6XHRcdCAqL1xuIDYwMzpcdFx0LypcbiA2MDQ6XHRcdCAqIFdoYXQgaWYgYnVnZ2VyIHRlbGxzIHVzIHRvIGdvIGJleW9uZCBwYWdlIHNpemU/XG4gNjA1Olx0XHQgKi9cbiA2MDY6XHRcdGlmIChiZGV2X2xvZ2ljYWxfYmxvY2tfc2l6ZShzLVx1MDAzZXNfYmRldikgXHUwMDNlIDIwNDgpIHtcbiA2MDc6XHRcdFx0cHJpbnRrKEtFUk5fV0FSTklOR1xuIDYwODpcdFx0XHQgICAgICAgXCYjMzQ7SVNPRlM6IHVuc3VwcG9ydGVkL2ludmFsaWQgaGFyZHdhcmUgc2VjdG9yIHNpemUgJWRcXG5cJiMzNDssXG4gNjA5Olx0XHRcdFx0YmRldl9sb2dpY2FsX2Jsb2NrX3NpemUocy1cdTAwM2VzX2JkZXYpKTtcbiA2MTA6XHRcdFx0Z290byBvdXRfZnJlZXNiaTtcbiA2MTE6XHRcdH1cbiA2MTI6XHRcdG9wdC1cdTAwM2VibG9ja3NpemUgPSBzYl9taW5fYmxvY2tzaXplKHMsIG9wdC1cdTAwM2VibG9ja3NpemUpO1xuIDYxMzpcdFx0aWYgKCFvcHQtXHUwMDNlYmxvY2tzaXplKSB7XG4gNjE0Olx0XHRcdHByaW50ayhLRVJOX0VSUlxuIDYxNTpcdFx0XHQgICAgICAgXCYjMzQ7SVNPRlM6IHVuYWJsZSB0byBzZXQgYmxvY2tzaXplXFxuXCYjMzQ7KTtcbiA2MTY6XHRcdFx0Z290byBvdXRfZnJlZXNiaTtcbiA2MTc6XHRcdH1cbiA2MTg6XHRcbiA2MTk6XHRcdHNiaS1cdTAwM2VzX2hpZ2hfc2llcnJhID0gMDsgLyogZGVmYXVsdCBpcyBpc285NjYwICovXG4gNjIwOlx0XHRzYmktXHUwMDNlc19zZXNzaW9uID0gb3B0LVx1MDAzZXNlc3Npb247XG4gNjIxOlx0XHRzYmktXHUwMDNlc19zYnNlY3RvciA9IG9wdC1cdTAwM2VzYnNlY3RvcjtcbiA2MjI6XHRcbiA2MjM6XHRcdHZvbF9kZXNjX3N0YXJ0ID0gKG9wdC1cdTAwM2VzYnNlY3RvciAhPSAtMSkgP1xuIDYyNDpcdFx0XHRvcHQtXHUwMDNlc2JzZWN0b3IgOiBpc29mc19nZXRfbGFzdF9zZXNzaW9uKHMsIG9wdC1cdTAwM2VzZXNzaW9uKTtcbiA2MjU6XHRcbiA2MjY6XHRcdGZvciAoaXNvX2Jsa251bSA9IHZvbF9kZXNjX3N0YXJ0JiM0MzsxNjtcbiA2Mjc6XHRcdFx0aXNvX2Jsa251bSBcdTAwM2Mgdm9sX2Rlc2Nfc3RhcnQmIzQzOzEwMDsgaXNvX2Jsa251bSYjNDM7JiM0MzspIHtcbiA2Mjg6XHRcdFx0c3RydWN0IGhzX3ZvbHVtZV9kZXNjcmlwdG9yICpoZHA7XG4gNjI5Olx0XHRcdHN0cnVjdCBpc29fdm9sdW1lX2Rlc2NyaXB0b3IgICp2ZHA7XG4gNjMwOlx0XG4gNjMxOlx0XHRcdGJsb2NrID0gaXNvX2Jsa251bSBcdTAwM2NcdTAwM2MgKElTT0ZTX0JMT0NLX0JJVFMgLSBzLVx1MDAzZXNfYmxvY2tzaXplX2JpdHMpO1xuIDYzMjpcdFx0XHRpZiAoIShiaCA9IHNiX2JyZWFkKHMsIGJsb2NrKSkpXG4gNjMzOlx0XHRcdFx0Z290byBvdXRfbm9fcmVhZDtcbiA2MzQ6XHRcbiA2MzU6XHRcdFx0dmRwID0gKHN0cnVjdCBpc29fdm9sdW1lX2Rlc2NyaXB0b3IgKiliaC1cdTAwM2ViX2RhdGE7XG4gNjM2Olx0XHRcdGhkcCA9IChzdHJ1Y3QgaHNfdm9sdW1lX2Rlc2NyaXB0b3IgKiliaC1cdTAwM2ViX2RhdGE7XG4gNjM3Olx0XG4gNjM4Olx0XHRcdC8qXG4gNjM5Olx0XHRcdCAqIER1ZSB0byB0aGUgb3ZlcmxhcHBpbmcgcGh5c2ljYWwgbG9jYXRpb24gb2YgdGhlIGRlc2NyaXB0b3JzLFxuIDY0MDpcdFx0XHQgKiBJU08gQ0RzIGNhbiBtYXRjaCBoZHAtXHUwMDNlaWQ9PUhTX1NUQU5EQVJEX0lEIGFzIHdlbGwuIFRvIGVuc3VyZVxuIDY0MTpcdFx0XHQgKiBwcm9wZXIgaWRlbnRpZmljYXRpb24gaW4gdGhpcyBjYXNlLCB3ZSBmaXJzdCBjaGVjayBmb3IgSVNPLlxuIDY0MjpcdFx0XHQgKi9cbiA2NDM6XHRcdFx0aWYgKHN0cm5jbXAgKHZkcC1cdTAwM2VpZCwgSVNPX1NUQU5EQVJEX0lELCBzaXplb2YgdmRwLVx1MDAzZWlkKSA9PSAwKSB7XG4gNjQ0Olx0XHRcdFx0aWYgKGlzb251bV83MTEodmRwLVx1MDAzZXR5cGUpID09IElTT19WRF9FTkQpXG4gNjQ1Olx0XHRcdFx0XHRicmVhaztcbiA2NDY6XHRcdFx0XHRpZiAoaXNvbnVtXzcxMSh2ZHAtXHUwMDNldHlwZSkgPT0gSVNPX1ZEX1BSSU1BUlkpIHtcbiA2NDc6XHRcdFx0XHRcdGlmICghcHJpKSB7XG4gNjQ4Olx0XHRcdFx0XHRcdHByaSA9IChzdHJ1Y3QgaXNvX3ByaW1hcnlfZGVzY3JpcHRvciAqKXZkcDtcbiA2NDk6XHRcdFx0XHRcdFx0LyogU2F2ZSB0aGUgYnVmZmVyIGluIGNhc2Ugd2UgbmVlZCBpdCAuLi4gKi9cbiA2NTA6XHRcdFx0XHRcdFx0cHJpX2JoID0gYmg7XG4gNjUxOlx0XHRcdFx0XHRcdGJoID0gTlVMTDtcbiA2NTI6XHRcdFx0XHRcdH1cbiA2NTM6XHRcdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4NzEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYGlzb2ZzX2ZpbGxfc3VwZXJgKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgd2UgbmVlZCB0byB6ZXJvIGluIG9uIGEgcG90ZW50aWFsIGlzc3VlIHdpdGhpbiBgaXNvZnNfZmlsbF9zdXBlcmAuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGNvZGUgYXJvdW5kIGxpbmUgODIwLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgZmlsZXN5c3RlbSwgdGhlcmUmIzM5O3MgbGlrZWx5IHNvbWV0aGluZyBpbnRlcmVzdGluZyBoYXBwZW5pbmcgdGhlcmUgcmVsYXRlZCB0byBbeW91ciBmaWVsZC9zcGVjaWZpYyBhcmVhIG9mIGV4cGVydGlzZSwgZS5nLiwgaG93IHRoZSBzdXBlcmJsb2NrIGlzIGluaXRpYWxpemVkLCB2b2x1bWUgZGVzY3JpcHRvciBwYXJzaW5nLCBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMsIGV0Yy4gLSBiYXNlZCBvbiB5b3VyIGFyZWEgb2Yga25vd2xlZGdlXS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgd2l0aGluIHRoYXQgc2VjdGlvbiB0byBwaW5wb2ludCB3aGV0aGVyIGl0IGlzIGNvbm5lY3RlZCB0byBbdGhlIHByb2JsZW0geW91IGFyZSBpbnZlc3RpZ2F0aW5nXS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTI6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9pc29mcy9pbm9kZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MDA6XHRcdCAqL1xuIDgwMTpcdFx0YnJlbHNlKHByaV9iaCk7XG4gODAyOlx0XHRicmVsc2UoYmgpO1xuIDgwMzpcdFxuIDgwNDpcdFx0LypcbiA4MDU6XHRcdCAqIEZvcmNlIHRoZSBibG9ja3NpemUgdG8gNTEyIGZvciA1MTIgYnl0ZSBzZWN0b3JzLiAgVGhlIGZpbGVcbiA4MDY6XHRcdCAqIHJlYWQgcHJpbWl0aXZlcyByZWFsbHkgZ2V0IGl0IHdyb25nIGluIGEgYmFkIHdheSBpZiB3ZSBkb24mIzM5O3RcbiA4MDc6XHRcdCAqIGRvIHRoaXMuXG4gODA4Olx0XHQgKlxuIDgwOTpcdFx0ICogTm90ZSAtIHdlIHNob3VsZCBuZXZlciBiZSBzZXR0aW5nIHRoZSBibG9ja3NpemUgdG8gc29tZXRoaW5nXG4gODEwOlx0XHQgKiBsZXNzIHRoYW4gdGhlIGhhcmR3YXJlIHNlY3RvciBzaXplIGZvciB0aGUgZGV2aWNlLiAgSWYgd2VcbiA4MTE6XHRcdCAqIGRvLCB3ZSB3b3VsZCBlbmQgdXAgaGF2aW5nIHRvIHJlYWQgbGFyZ2VyIGJ1ZmZlcnMgYW5kIHNwbGl0XG4gODEyOlx0XHQgKiBvdXQgcG9ydGlvbnMgdG8gc2F0aXNmeSByZXF1ZXN0cy5cbiA4MTM6XHRcdCAqXG4gODE0Olx0XHQgKiBOb3RlMi0gdGhlIGlkZWEgaGVyZSBpcyB0aGF0IHdlIHdhbnQgdG8gZGVhbCB3aXRoIHRoZSBvcHRpbWFsXG4gODE1Olx0XHQgKiB6b25lc2l6ZSBpbiB0aGUgZmlsZXN5c3RlbS4gIElmIHdlIGhhdmUgaXQgc2V0IHRvIHNvbWV0aGluZyBsZXNzLFxuIDgxNjpcdFx0ICogdGhlbiB3ZSBoYXZlIGhvcnJpYmxlIHByb2JsZW1zIHdpdGggdHJ5aW5nIHRvIHBpZWNlIHRvZ2V0aGVyXG4gODE3Olx0XHQgKiBiaXRzIG9mIGFkamFjZW50IGJsb2NrcyBpbiBvcmRlciB0byBwcm9wZXJseSByZWFkIGRpcmVjdG9yeVxuIDgxODpcdFx0ICogZW50cmllcy4gIEJ5IGZvcmNpbmcgdGhlIGJsb2Nrc2l6ZSBpbiB0aGlzIHdheSwgd2UgZW5zdXJlXG4gODE5Olx0XHQgKiB0aGF0IHdlIHdpbGwgbmV2ZXIgYmUgcmVxdWlyZWQgdG8gZG8gdGhpcy5cbiA4MjA6XHRcdCAqL1xuIDgyMTpcdFx0aWYgKCFzYl9zZXRfYmxvY2tzaXplKHMsIG9yaWdfem9uZXNpemUpKVxuIDgyMjpcdFx0XHRnb3RvIG91dF9mcmVlc2JpO1xuIDgyMzpcdFxuIDgyNDpcdFx0c2JpLVx1MDAzZXNfc2Vzc2lvbl9zdGFydCA9ICh1NjQpdm9sX2Rlc2Nfc3RhcnQgXHUwMDNjXHUwMDNjXG4gODI1Olx0XHRcdFx0XHQoSVNPRlNfQkxPQ0tfQklUUyAtIHMtXHUwMDNlc19ibG9ja3NpemVfYml0cyk7XG4gODI2Olx0XHRzYmktXHUwMDNlc19ubHNfaW9jaGFyc2V0ID0gTlVMTDtcbiA4Mjc6XHRcbiA4Mjg6XHQjaWZkZWYgQ09ORklHX0pPTElFVFxuIDgyOTpcdFx0aWYgKGpvbGlldF9sZXZlbCkge1xuIDgzMDpcdFx0XHRjaGFyICpwID0gb3B0LVx1MDAzZWlvY2hhcnNldCA/IG9wdC1cdTAwM2Vpb2NoYXJzZXQgOiBDT05GSUdfTkxTX0RFRkFVTFQ7XG4gODMxOlx0XHRcdGlmIChzdHJjbXAocCwgXCYjMzQ7dXRmOFwmIzM0OykgIT0gMCkge1xuIDgzMjpcdFx0XHRcdHNiaS1cdTAwM2VzX25sc19pb2NoYXJzZXQgPSBvcHQtXHUwMDNlaW9jaGFyc2V0ID9cbiA4MzM6XHRcdFx0XHRcdGxvYWRfbmxzKG9wdC1cdTAwM2Vpb2NoYXJzZXQpIDogbG9hZF9ubHNfZGVmYXVsdCgpO1xuIDgzNDpcdFx0XHRcdGlmICghc2JpLVx1MDAzZXNfbmxzX2lvY2hhcnNldClcbiA4MzU6XHRcdFx0XHRcdGdvdG8gb3V0X2ZyZWVzYmk7XG4gODM2Olx0XHRcdH1cbiA4Mzc6XHRcdH1cbiA4Mzg6XHQjZW5kaWZcbiA4Mzk6XHRcdHMtXHUwMDNlc19vcCA9IFx1MDAyNmlzb2ZzX3NvcHM7XG4gODQwOlx0XHRzLVx1MDAzZXNfZXhwb3J0X29wID0gXHUwMDI2aXNvZnNfZXhwb3J0X29wcztcbiA4NDE6XHRcdHNiaS1cdTAwM2VzX21hcHBpbmcgPSBvcHQtXHUwMDNlbWFwO1xuIDg0MjpcdFx0c2JpLVx1MDAzZXNfcm9jayA9IChvcHQtXHUwMDNlcm9jayA/IDIgOiAwKTtcbiA4NDM6XHRcdHNiaS1cdTAwM2VzX3JvY2tfb2Zmc2V0ID0gLTE7IC8qIGluaXRpYWwgb2Zmc2V0LCB3aWxsIGd1ZXNzIHVudGlsIFNQIGlzIGZvdW5kKi9cbiA4NDQ6XHRcdHNiaS1cdTAwM2VzX2NydWZ0ID0gb3B0LVx1MDAzZWNydWZ0O1xuIDg0NTpcdFx0c2JpLVx1MDAzZXNfaGlkZSA9IG9wdC1cdTAwM2VoaWRlO1xuIDg0NjpcdFx0c2JpLVx1MDAzZXNfc2hvd2Fzc29jID0gb3B0LVx1MDAzZXNob3dhc3NvYztcbiA4NDc6XHRcdHNiaS1cdTAwM2VzX3VpZCA9IG9wdC1cdTAwM2V1aWQ7XG4gODQ4Olx0XHRzYmktXHUwMDNlc19naWQgPSBvcHQtXHUwMDNlZ2lkO1xuIDg0OTpcdFx0c2JpLVx1MDAzZXNfdWlkX3NldCA9IG9wdC1cdTAwM2V1aWRfc2V0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTYyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gUm9jayBSaWRnZSBFeHRlbnNpb25zIGluIElTT0ZTKioKCkFscmlnaHQsIHRpbWUgdG8gdHJvdWJsZXNob290IHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBmcy9pc29mcy9yb2NrLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgcm9ja19jb250aW51ZWAgZnVuY3Rpb24uIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgUm9jayBSaWRnZSBleHRlbnNpb25zIGFyZSBoYW5kbGVkIGluIHRoZSBJU08gOTY2MCBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoZSBjb250aW51YXRpb24gcmVjb3JkcyBhcmUgc3RydWN0dXJlZCBhbmQgaG93IHRoZSBzeXN0ZW0gaXRlcmF0ZXMgdGhyb3VnaCB0aGVtIHRvIHJlc29sdmUgZXh0ZW5kZWQgZmlsZW5hbWVzIG9yIGF0dHJpYnV0ZXMuIFRoZSBwb3RlbnRpYWwgcHJvYmxlbSBsaWtlbHkgbGllcyBzb21ld2hlcmUgaW4gdGhlIGxvZ2ljIHRoYXQgaGFuZGxlcyBhIGNvbnRpbnVlZCBSb2NrIFJpZGdlIGVudHJ5LiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlJiMzOTtzIGFuIG9idmlvdXMgZmxhdyBpbiBob3cgdGhlIGRyaXZlciBwcm9jZXNzZXMgdGhvc2UgcmVjb3Jkcy4gSSYjMzk7bSBsb29raW5nIGZvciBhbnl0aGluZyB0aGF0IGNvdWxkIGxlYWQgdG8gaW5jb21wbGV0ZSBvciBpbmNvcnJlY3QgaW50ZXJwcmV0YXRpb24gb2YgdGhlIGV4dGVuZGVkIGF0dHJpYnV0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvaXNvZnMvcm9jay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA4MDpcdCNkZWZpbmUgUlJfTUFYX0NFX0VOVFJJRVMgMzJcbiAgODE6XHRcbiAgODI6XHQvKlxuICA4MzpcdCAqIFJldHVybnMgMCBpZiB0aGUgY2FsbGVyIHNob3VsZCBjb250aW51ZSBzY2FubmluZywgMSBpZiB0aGUgc2NhbiBtdXN0IGVuZFxuICA4NDpcdCAqIGFuZCAtdmUgb24gZXJyb3IuXG4gIDg1Olx0ICovXG4gIDg2Olx0c3RhdGljIGludCByb2NrX2NvbnRpbnVlKHN0cnVjdCByb2NrX3N0YXRlICpycylcbiAgODc6XHR7XG4gIDg4Olx0XHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gcnMtXHUwMDNlaW5vZGUtXHUwMDNlaV9zYjtcbiAgODk6XHRcdHN0cnVjdCBpc29mc19zYl9pbmZvICpzYmkgPSBJU09GU19TQihzYik7XG4gIDkwOlx0XHR1NjQgZXh0ZW50ID0gKHVuc2lnbmVkIGludClycy1cdTAwM2Vjb250X2V4dGVudDtcbiAgOTE6XHRcdHU2NCBzZXNzaW9uX2VuZCA9IHNiaS1cdTAwM2VzX3Nlc3Npb25fc3RhcnQgJiM0MztcbiAgOTI6XHRcdFx0KCh1NjQpc2JpLVx1MDAzZXNfbnpvbmVzIFx1MDAzY1x1MDAzYyAoSVNPRlNfQkxPQ0tfQklUUyAtIHNiLVx1MDAzZXNfYmxvY2tzaXplX2JpdHMpKTtcbiAgOTM6XHRcdGludCByZXQgPSAxO1xuICA5NDpcdFx0aW50IGJsb2Nrc2l6ZSA9IDEgXHUwMDNjXHUwMDNjIHJzLVx1MDAzZWlub2RlLVx1MDAzZWlfYmxrYml0cztcbiAgOTU6XHRcdGNvbnN0IGludCBtaW5fZGVfc2l6ZSA9IG9mZnNldG9mKHN0cnVjdCByb2NrX3JpZGdlLCB1KTtcbiAgOTY6XHRcbiAgOTc6XHRcdGtmcmVlKHJzLVx1MDAzZWJ1ZmZlcik7XG4gIDk4Olx0XHRycy1cdTAwM2VidWZmZXIgPSBOVUxMO1xuICA5OTpcdFxuIDEwMDpcdFx0aWYgKCh1bnNpZ25lZClycy1cdTAwM2Vjb250X29mZnNldCBcdTAwM2UgYmxvY2tzaXplIC0gbWluX2RlX3NpemUgfHxcbiAxMDE6XHRcdCAgICAodW5zaWduZWQpcnMtXHUwMDNlY29udF9zaXplIFx1MDAzZSBibG9ja3NpemUgfHxcbiAxMDI6XHRcdCAgICAodW5zaWduZWQpKHJzLVx1MDAzZWNvbnRfb2Zmc2V0ICYjNDM7IHJzLVx1MDAzZWNvbnRfc2l6ZSkgXHUwMDNlIGJsb2Nrc2l6ZSkge1xuIDEwMzpcdFx0XHRwcmludGsoS0VSTl9OT1RJQ0UgXCYjMzQ7cm9jazogY29ycnVwdGVkIGRpcmVjdG9yeSBlbnRyeS4gXCYjMzQ7XG4gMTA0Olx0XHRcdFx0XCYjMzQ7ZXh0ZW50PSVkLCBvZmZzZXQ9JWQsIHNpemU9JWRcXG5cJiMzNDssXG4gMTA1Olx0XHRcdFx0cnMtXHUwMDNlY29udF9leHRlbnQsIHJzLVx1MDAzZWNvbnRfb2Zmc2V0LCBycy1cdTAwM2Vjb250X3NpemUpO1xuIDEwNjpcdFx0XHRyZXQgPSAtRUlPO1xuIDEwNzpcdFx0XHRnb3RvIG91dDtcbiAxMDg6XHRcdH1cbiAxMDk6XHRcbiAxMTA6XHRcdGlmIChycy1cdTAwM2Vjb250X2V4dGVudCBcdTAwMjZcdTAwMjZcbiAxMTE6XHRcdCAgICAoZXh0ZW50IFx1MDAzYyBzYmktXHUwMDNlc19zZXNzaW9uX3N0YXJ0IHx8XG4gMTEyOlx0XHQgICAgIGV4dGVudCBcdTAwM2U9IHNlc3Npb25fZW5kIHx8XG4gMTEzOlx0XHQgICAgIGV4dGVudCBcdTAwM2U9IHNiX2JkZXZfbnJfYmxvY2tzKHNiKSkpIHtcbiAxMTQ6XHRcdFx0cHJpbnRrKEtFUk5fTk9USUNFIFwmIzM0O3JvY2s6IGNvcnJ1cHRlZCBkaXJlY3RvcnkgZW50cnkuIFwmIzM0O1xuIDExNTpcdFx0XHRcdFwmIzM0O2V4dGVudD0ldSBvdXQgb2Ygdm9sdW1lIChuem9uZXM9JWx1KVxcblwmIzM0OyxcbiAxMTY6XHRcdFx0XHQodW5zaWduZWQpcnMtXHUwMDNlY29udF9leHRlbnQsXG4gMTE3Olx0XHRcdFx0c2JpLVx1MDAzZXNfbnpvbmVzKTtcbiAxMTg6XHRcdFx0cmV0ID0gLUVJTztcbiAxMTk6XHRcdFx0Z290byBvdXQ7XG4gMTIwOlx0XHR9XG4gMTIxOlx0XG4gMTIyOlx0XHRpZiAocnMtXHUwMDNlY29udF9leHRlbnQpIHtcbiAxMjM6XHRcdFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcbiAxMjQ6XHRcbiAxMjU6XHRcdFx0cnMtXHUwMDNlYnVmZmVyID0ga21hbGxvYyhycy1cdTAwM2Vjb250X3NpemUsIEdGUF9LRVJORUwpO1xuIDEyNjpcdFx0XHRpZiAoIXJzLVx1MDAzZWJ1ZmZlcikge1xuIDEyNzpcdFx0XHRcdHJldCA9IC1FTk9NRU07XG4gMTI4Olx0XHRcdFx0Z290byBvdXQ7XG4gMTI5Olx0XHRcdH1cbiAxMzA6XHRcdFx0cmV0ID0gLUVJTztcbiAxMzE6XHRcdFx0aWYgKCYjNDM7JiM0Mztycy1cdTAwM2Vjb250X2xvb3BzIFx1MDAzZT0gUlJfTUFYX0NFX0VOVFJJRVMpXG4gMTMyOlx0XHRcdFx0Z290byBvdXQ7XG4gMTMzOlx0XHRcdGJoID0gc2JfYnJlYWQocnMtXHUwMDNlaW5vZGUtXHUwMDNlaV9zYiwgcnMtXHUwMDNlY29udF9leHRlbnQpO1xuIDEzNDpcdFx0XHRpZiAoYmgpIHtcbiAxMzU6XHRcdFx0XHRtZW1jcHkocnMtXHUwMDNlYnVmZmVyLCBiaC1cdTAwM2ViX2RhdGEgJiM0MzsgcnMtXHUwMDNlY29udF9vZmZzZXQsXG4gMTM2Olx0XHRcdFx0XHRcdHJzLVx1MDAzZWNvbnRfc2l6ZSk7XG4gMTM3Olx0XHRcdFx0cHV0X2JoKGJoKTtcbiAxMzg6XHRcdFx0XHRycy1cdTAwM2VjaHIgPSBycy1cdTAwM2VidWZmZXI7XG4gMTM5Olx0XHRcdFx0cnMtXHUwMDNlbGVuID0gcnMtXHUwMDNlY29udF9zaXplO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMjoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTYyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUm9jayBSaWRnZSBDb250aW51YXRpb24gRXh0ZW50IEZpeCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHdoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhpcyBwYXRjaCwgdGhlIHByb2JsZW0gaXQmIzM5O3Mgc29sdmluZz8gQWgsIHJpZ2h0LCBpdCYjMzk7cyBhYm91dCB0aGUgYHJvY2tfY29udGludWVgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgdGhlIGNvbnRpbnVhdGlvbiBleHRlbnQgKGBDRWAgZW50cmllcykgb2YgUm9jayBSaWRnZSBleHRlbnNpb24gcmVjb3Jkcy4gVGhlIG9sZGVyIGNvZGUgd2FzIHVzaW5nIHRoaXM6CgpgYGBjCmlmICgodW5zaWduZWQpcnMtJmd0O2NvbnRfZXh0ZW50ICZndDs9IElTT0ZTX1NCKHJzLSZndDtpbm9kZS0mZ3Q7aV9zYiktJmd0O3NfbnpvbmVzKSB7CmBgYAoKVGhlIHByb2JsZW0gaXMgaW1tZWRpYXRlbHkgb2J2aW91cyB0byBtZS4gV2UmIzM5O3JlIGNvbXBhcmluZyBibG9jayB1bml0cyAoYHJzLSZndDtjb250X2V4dGVudGAsIGVzc2VudGlhbGx5IHRoZSBwaHlzaWNhbCBibG9jay9leHRlbnQgb24gdGhlIGRldmljZSkgd2l0aCBgc19uem9uZXNgLCB3aGljaCByZXByZXNlbnRzIHRoZSBudW1iZXIgb2Ygem9uZXMgaW4gdGhlICpzZXNzaW9uKi4gSW4gYSBtdWx0aS1zZXNzaW9uIHNjZW5hcmlvLCBvciB3aXRoIHZhcnlpbmcgYmxvY2sgc2l6ZXMgYWNyb3NzIHNlc3Npb25zLCB0aGlzIGNvbXBhcmlzb24gaXMgZnVuZGFtZW50YWxseSBmbGF3ZWQuIEl0IGNvdWxkIGxlYWQgdG8gYGNvbnRfZXh0ZW50YCBiZWluZyBjaGVja2VkIGFnYWluc3QgaW5jb3JyZWN0IGJvdW5kYXJpZXMsIHBvdGVudGlhbGx5IHJlc3VsdGluZyBpbiByZWFkcyBvdXRzaWRlIHRoZSBkZXZpY2UmIzM5O3MgYm91bmRzLCBvdXRzaWRlIHRoZSBjdXJyZW50IHNlc3Npb24sIG9yIGV2ZW4gYmVmb3JlIHRoZSBzZXNzaW9uJiMzOTtzIHN0YXJ0LiBUaGlzIHNjcmVhbXMgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgZGF0YSBjb3JydXB0aW9uLCBhIGNsYXNzaWMgcHJvYmxlbS4KClNvLCB0aGUgZml4IGlzIHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IGVmZmVjdGl2ZS4gVGhleSYjMzk7dmUgaW50cm9kdWNlZCBgc19zZXNzaW9uX3N0YXJ0YCB0byBgc3RydWN0IGlzb2ZzX3NiX2luZm9gLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlIGFzIGl0JiMzOTtzIHRoZSBhbmNob3Igb2YgdGhlIGN1cnJlbnQgc2Vzc2lvbiB3aXRoaW4gdGhlIGdyZWF0ZXIgbWVkaXVtLiBDcnVjaWFsbHksIHRoZSBjb2RlIG5vdyBpbml0aWFsaXplcyB0aGlzIGBzX3Nlc3Npb25fc3RhcnRgIHdpdGhpbiBgaXNvZnNfZmlsbF9zdXBlcmAsIHNwZWNpZmljYWxseSBhZnRlciB0aGUgYmxvY2sgc2l6ZSBpcyBzZXQuIEV4Y2VsbGVudCwgdGhhdCYjMzk7cyBjbGVhbi4gVGhlIHVzZSBvZiBga3phbGxvY19vYmpgIHRvIGFsbG9jYXRlIGBzYmlgIGlzIHNvdW5kIGFzIGl0IGVuc3VyZXMgdGhlIHN0cnVjdCBtZW1vcnkgaXMgaW5pdGlhbGl6ZWQgdG8gemVyby4KClRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpdHNlbGYgYWx0ZXJzIGByb2NrX2NvbnRpbnVlKClgIHRvIHBlcmZvcm0gYSBtb3JlIHJvYnVzdCB2YWxpZGF0aW9uIG9mIHRoZSBleHRlbnQsIGNoZWNraW5nIGFnYWluc3QgYHNiaS0mZ3Q7c19zZXNzaW9uX3N0YXJ0YCwgYWxvbmcgd2l0aCBgc2Vzc2lvbl9lbmRgIGFuZCBgc2JfYmRldl9ucl9ibG9ja3Moc2IpYC4gVGhpcyBpcyBwcmVjaXNlbHkgd2hhdCYjMzk7cyBuZWVkZWQgLSBib3VuZHMgY2hlY2tpbmcgb24gYm90aCB0aGUgc3RhcnQgYW5kIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgc2Vzc2lvbi4KCk5vdywgYXMgYSBuZXh0IHN0ZXAsIEkgbmVlZCB0byBsb29rIGZvciBhZGRpdGlvbmFsIHJpc2tzLiBBcmUgdGhlcmUgb3RoZXIgbG9jYXRpb25zIHdoZXJlIGBzX3Nlc3Npb25fc3RhcnRgIGlzIGFjY2Vzc2VkIG9yIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQsIGdpdmVuIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSwgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBsaW5nZXJpbmcgbWVtb3J5IGFjY2VzcyBoYXphcmRzPyBJIHdpbGwgY2hlY2sgd2hldGhlciB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgYm90aCB3aXRoaW4gdGhlIHBhdGNoIGl0c2VsZiBhbmQgaW4gcmVsYXRlZCBjb2RlLiBJJiMzOTttIGtlZW4gdG8gbWFrZSBzdXJlIHRoZSBmaXggaXMgY29tcGxldGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nfc2Vzc2lvbl9zdGFydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2lzb2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9pc29mcy9pbm9kZS5jPTU3ND1zdGF0aWMgaW50IGlzb2ZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvaXNvZnMvaW5vZGUuYy04MjMtXG5mcy9pc29mcy9pbm9kZS5jOjgyNDpcdHNiaS1cdTAwM2VzX3Nlc3Npb25fc3RhcnQgPSAodTY0KXZvbF9kZXNjX3N0YXJ0IFx1MDAzY1x1MDAzY1xuZnMvaXNvZnMvaW5vZGUuYy04MjUtXHRcdFx0XHQoSVNPRlNfQkxPQ0tfQklUUyAtIHMtXHUwMDNlc19ibG9ja3NpemVfYml0cyk7XG4tLVxuZnMvaXNvZnMvaXNvZnMuaD0zMj1zdHJ1Y3QgaXNvZnNfc2JfaW5mbyB7XG4tLVxuZnMvaXNvZnMvaXNvZnMuaC0zOC1cdC8qIFNlc3Npb24gc3RhcnQgaW4gZmlsZXN5c3RlbSBibG9jayB1bml0cy4gKi9cbmZzL2lzb2ZzL2lzb2ZzLmg6Mzk6XHR1NjQgc19zZXNzaW9uX3N0YXJ0O1xuZnMvaXNvZnMvaXNvZnMuaC00MC1cdFxuLS1cbmZzL2lzb2ZzL3JvY2suYz04Nj1zdGF0aWMgaW50IHJvY2tfY29udGludWUoc3RydWN0IHJvY2tfc3RhdGUgKnJzKVxuLS1cbmZzL2lzb2ZzL3JvY2suYy05MC1cdHU2NCBleHRlbnQgPSAodW5zaWduZWQgaW50KXJzLVx1MDAzZWNvbnRfZXh0ZW50O1xuZnMvaXNvZnMvcm9jay5jOjkxOlx0dTY0IHNlc3Npb25fZW5kID0gc2JpLVx1MDAzZXNfc2Vzc2lvbl9zdGFydCAmIzQzO1xuZnMvaXNvZnMvcm9jay5jLTkyLVx0XHQoKHU2NClzYmktXHUwMDNlc19uem9uZXMgXHUwMDNjXHUwMDNjIChJU09GU19CTE9DS19CSVRTIC0gc2ItXHUwMDNlc19ibG9ja3NpemVfYml0cykpO1xuLS1cbmZzL2lzb2ZzL3JvY2suYy0xMTAtXHRpZiAocnMtXHUwMDNlY29udF9leHRlbnQgXHUwMDI2XHUwMDI2XG5mcy9pc29mcy9yb2NrLmM6MTExOlx0ICAgIChleHRlbnQgXHUwMDNjIHNiaS1cdTAwM2VzX3Nlc3Npb25fc3RhcnQgfHxcbmZzL2lzb2ZzL3JvY2suYy0xMTItXHQgICAgIGV4dGVudCBcdTAwM2U9IHNlc3Npb25fZW5kIHx8XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1MDAKCQkJCQkJCW91dHB1dDogMjA3CgkJCQkJCQl0aG91Z2h0czogNjYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBJU09GUyBQYXRjaCBhbmQgaXRzIEtNU0FOIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHZlcmlmeSB0aGUgc2VxdWVuY2Ugb2YgZXZlbnRzIGluIGBpc29mc19maWxsX3N1cGVyYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnRlZCB0byBzZWUgaWYgdGhlIFJvY2sgUmlkZ2UgcGFyc2luZyBvciBgcm9ja19jb250aW51ZWAgbG9naWMgY291bGQgYmUgdHJpZ2dlcmVkICpiZWZvcmUqIGBzYmktJmd0O3Nfc2Vzc2lvbl9zdGFydGAgaXMgc2V0LiBBZnRlciByZXZpZXdpbmcgdGhlIGNvZGUsIGl0JiMzOTtzIGNsZWFyIHRoYXQgYHNiaWAgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAsIHNvIGl0JiMzOTtzIGd1YXJhbnRlZWQgdG8gYmUgemVyby1pbml0aWFsaXplZCBmcm9tIHRoZSBnZXQtZ28uIFRoZW4sIHRoZSB2b2x1bWUgZGVzY3JpcHRvcnMgYXJlIHJlYWQsIHRoZSBibG9jayBzaXplIGlzIHNldCwgYW5kIGNydWNpYWxseSwgYHNiaS0mZ3Q7c19zZXNzaW9uX3N0YXJ0YCBpcyBhc3NpZ25lZCAqYmVmb3JlKiB3ZSBldmVuIGdldCB0byB0aGUgaW5vZGUgcmVhZGluZyBvciBkaXJlY3RvcnkgcGFyc2luZywgd2hlcmUgUm9jayBSaWRnZSBwYXJzaW5nIHdvdWxkIGtpY2sgaW4uIFRoZSBzZXNzaW9uIHN0YXJ0IGlzIGEgc2ltcGxlIGB1NjRgLCBzbyB0aGVyZSYjMzk7cyBubyBjb21wbGV4IHN0cnVjdHVyZSB0byB3b3JyeSBhYm91dC4KClRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyB0aWdodGVuaW5nIGJvdW5kcyBjaGVja3Mgb24gUm9jayBSaWRnZSBjb250aW51YXRpb24gZW50cmllcyAoYENFYCkuIFRoaXMgaXMgYWJvdXQgcHJldmVudGluZyBvdXQtb2YtYm91bmRzIHJlYWRzLCBtZWFuaW5nIHdlIGRvbiYjMzk7dCBhY2NpZGVudGFsbHkgdHJ5IHRvIHJlYWQgZGF0YSBmcm9tIHRoZSBkaXNrIG91dHNpZGUgb2YgdGhlIGludGVuZGVkIHZvbHVtZSBsaW1pdHMuCgpOb3csIGxldCYjMzk7cyBhZGRyZXNzIHRoZSBLTVNBTiBjb25jZXJuLiBUaGUgY2hhbmdlcyBhZGQgZXh0cmEgdmFsaWRhdGlvbiBib3VuZHMgY2hlY2tzIG9uIGBycy0mZ3Q7Y29udF9leHRlbnRgIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBibG9jayBkZXZpY2UgcmVhZHMgaW4gYGlzb2ZzYCBSb2NrIFJpZGdlIHBhcnNpbmcuIE15IG1haW4gY29uY2VybiB3aXRoIEtNU0FOIGlzIGFsd2F5cyBhcm91bmQgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBpc3N1ZXMuIFRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgd2F5cyBmb3IgdW5pbml0aWFsaXplZCBkYXRhIHRvIGxlYWsgdG8gdXNlcnNwYWNlLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBvdXQtb2YtYm91bmRzICpyZWFkcyogaW4gdGhlIGtlcm5lbCBpdHNlbGYsIG5vdCB0aGUgbGVha2luZyBvZiBhbnkga2VybmVsIGRhdGEuCgpTbywgbGV0JiMzOTtzIHJldmlldyB0aGUgY3JpdGVyaWEgY2FyZWZ1bGx5OgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHM/KiogQWJzb2x1dGVseSBub3QuIFRoZSBjb2RlIGRvZXNuJiMzOTt0IGV4cG9zZSBhbnkga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZSB0aGF0IGlzIHVuaW5pdGlhbGl6ZWQuIE5vIGBjb3B5X3RvX3VzZXJgLCBubyBpbmZvcm1hdGlvbiBsZWFrcywgbm8gcGFkZGluZyBsZWFrcy4KMi4gICoqQ29uZGl0aW9uYWwgbG9naWMvYnJhbmNoaW5nIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIE5vcGUuIEV2ZXJ5dGhpbmcgaXMgaW5pdGlhbGl6ZWQgY29ycmVjdGx5LiBgdm9sX2Rlc2Nfc3RhcnRgLCBgc2JpYCwgYHNiaS0mZ3Q7c19zZXNzaW9uX3N0YXJ0YCwgYHJzLSZndDtjb250X2V4dGVudGAsIHRoZXkmIzM5O3JlIGFsbCBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgdXNlZC4KMy4gICoqQWxsb2NhdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyoqIE5vLiBgc2JpYCBpcyB6ZXJvZWQsIGFuZCBgc19zZXNzaW9uX3N0YXJ0YCBpcyBleHBsaWNpdGx5IGFzc2lnbmVkLgo0LiAgKipBbHRlcmVkIGJvdW5kcyBjaGVja3MgcG90ZW50aWFsbHkgYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIGJ5dGVzPyoqIE5vLiBUaGUgcGF0Y2ggb25seSB0aWdodGVucyBib3VuZHMgY2hlY2tzIGFuZCBvbmx5IGNvbnN0cmFpbnMgYmxvY2sgZXh0ZW50IG51bWJlcnMgdG8gYmUgd2l0aGluIHZhbGlkIHJhbmdlcy4gVGhpcyBpcyBhIG1lbW9yeSBzYWZldHkgaXNzdWUsIHdoaWNoIHdpbGwgYmUgY2F1Z2h0IGJ5IEtBU0FOLgoKVGhlcmVmb3JlLCBhZnRlciB0aGlzIGRldGFpbGVkIGFuYWx5c2lzLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IGBOZWVkc0tNU0FOYCBpcyBmYWxzZS4gVGhlc2UgY2hhbmdlcyBhcmUgYWJvdXQgbWVtb3J5ICpzYWZldHkqLCB3aGljaCBLQVNBTiwgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgZXhpc3RpbmcgYm91bmRzIGNoZWNrcywgZWZmZWN0aXZlbHkgaGFuZGxlcy4gVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IEtNU0FOLXJlbGV2YW50IGlzc3VlcywgYW5kIHRoZSBjaGFuZ2VzIGFyZSBsaW1pdGVkIHRvIHRpZ2h0ZW5pbmcgdXAgdGhvc2UgZGlzay9kZXZpY2UgYnVmZmVyIHJlYWRzIHdpdGhpbiB0aGUga2VybmVsLiBJIHdpbGwgZHJhZnQgYSBgS01TQU5SZWFzb25pbmdgIGNvbW1lbnQgdG8gbWFrZSB0aGlzIGRpc3RpbmN0aW9uIHZlcnkgY2xlYXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEyOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGZzL2lzb2ZzIHRvIHByb3Blcmx5IHZhbGlkYXRlIFJvY2sgUmlkZ2UgY29udGludWF0aW9uIGV4dGVudHMgKGBDRWAgZW50cmllcykgYWdhaW5zdCBzZXNzaW9uIGFuZCBibG9jayBkZXZpY2UgYm91bmRhcmllcyBieSBpbnRyb2R1Y2luZyBgc2JpLVx1MDAzZXNfc2Vzc2lvbl9zdGFydGAgYW5kIGNvbXBhcmluZyBgY29udF9leHRlbnRgIGFnYWluc3QgdGhlIHZhbGlkIHJhbmdlLiBcblxuLSBgc3RydWN0IGlzb2ZzX3NiX2luZm9gIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmpgLCBhbmQgYHNfc2Vzc2lvbl9zdGFydGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCBkdXJpbmcgc3VwZXJibG9jayBzZXR1cCBiZWZvcmUgYW55IFJvY2sgUmlkZ2UgcGFyc2luZyBvY2N1cnMuXG4tIFRoZSBwYXRjaCB0aWdodGVucyBib3VuZHMgY2hlY2tzIGZvciBibG9jayByZWFkcywgbWl0aWdhdGluZyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBibG9jayByZWFkcyBvbiBjb3JydXB0ZWQvbWFsaWNpb3VzIElTTyBpbWFnZXMgKHdoaWNoIGZhbGwgdW5kZXIgS0FTQU4vZ2VuZXJpYyBib3VuZHMgY2hlY2tpbmcpLlxuLSBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgc3RhY2svaGVhcCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZS5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IHByZXNlbnQgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBmcy9pc29mcyB0byBwcm9wZXJseSB2YWxpZGF0ZSBSb2NrIFJpZGdlIGNvbnRpbnVhdGlvbiBleHRlbnRzIChgQ0VgIGVudHJpZXMpIGFnYWluc3Qgc2Vzc2lvbiBhbmQgYmxvY2sgZGV2aWNlIGJvdW5kYXJpZXMgYnkgaW50cm9kdWNpbmcgYHNiaS1cdTAwM2VzX3Nlc3Npb25fc3RhcnRgIGFuZCBjb21wYXJpbmcgYGNvbnRfZXh0ZW50YCBhZ2FpbnN0IHRoZSB2YWxpZCByYW5nZS4gXG5cbi0gYHN0cnVjdCBpc29mc19zYl9pbmZvYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgYW5kIGBzX3Nlc3Npb25fc3RhcnRgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgZHVyaW5nIHN1cGVyYmxvY2sgc2V0dXAgYmVmb3JlIGFueSBSb2NrIFJpZGdlIHBhcnNpbmcgb2NjdXJzLlxuLSBUaGUgcGF0Y2ggdGlnaHRlbnMgYm91bmRzIGNoZWNrcyBmb3IgYmxvY2sgcmVhZHMsIG1pdGlnYXRpbmcgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYmxvY2sgcmVhZHMgb24gY29ycnVwdGVkL21hbGljaW91cyBJU08gaW1hZ2VzICh3aGljaCBmYWxsIHVuZGVyIEtBU0FOL2dlbmVyaWMgYm91bmRzIGNoZWNraW5nKS5cbi0gTm8gdW5pbml0aWFsaXplZCBtZW1vcnksIHN0YWNrL2hlYXAgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkIHRvIHVzZXIgc3BhY2UuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBwcmVzZW50IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMjoxNToyOS45ODg1NDgyNDdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTkxNjc1ODczNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJU085NjYwX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXNvZnNfZmlsbF9zdXBlclwiLFxuICAgIFwicm9ja19jb250aW51ZVwiLFxuICAgIFwiZ2V0X3JvY2tfcmlkZ2VfZmlsZW5hbWVcIixcbiAgICBcInBhcnNlX3JvY2tfcmlkZ2VfaW5vZGVcIixcbiAgICBcInJvY2tfcmlkZ2Vfc3ltbGlua19yZWFkX2ZvbGlvXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBmcy9pc29mcyB0byBwcm9wZXJseSB2YWxpZGF0ZSBSb2NrIFJpZGdlIGNvbnRpbnVhdGlvbiBleHRlbnRzIChgQ0VgIGVudHJpZXMpIGFnYWluc3Qgc2Vzc2lvbiBhbmQgYmxvY2sgZGV2aWNlIGJvdW5kYXJpZXMgYnkgaW50cm9kdWNpbmcgYHNiaS1cXHUwMDNlc19zZXNzaW9uX3N0YXJ0YCBhbmQgY29tcGFyaW5nIGBjb250X2V4dGVudGAgYWdhaW5zdCB0aGUgdmFsaWQgcmFuZ2UuIFxcblxcbi0gYHN0cnVjdCBpc29mc19zYl9pbmZvYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgYW5kIGBzX3Nlc3Npb25fc3RhcnRgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgZHVyaW5nIHN1cGVyYmxvY2sgc2V0dXAgYmVmb3JlIGFueSBSb2NrIFJpZGdlIHBhcnNpbmcgb2NjdXJzLlxcbi0gVGhlIHBhdGNoIHRpZ2h0ZW5zIGJvdW5kcyBjaGVja3MgZm9yIGJsb2NrIHJlYWRzLCBtaXRpZ2F0aW5nIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGJsb2NrIHJlYWRzIG9uIGNvcnJ1cHRlZC9tYWxpY2lvdXMgSVNPIGltYWdlcyAod2hpY2ggZmFsbCB1bmRlciBLQVNBTi9nZW5lcmljIGJvdW5kcyBjaGVja2luZykuXFxuLSBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgc3RhY2svaGVhcCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZS5cXG5cXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgcHJlc2VudCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHNlc3Npb24gYm91bmRhcnkgYW5kIGJsb2NrIGRldmljZSBjYXBhY2l0eSB2YWxpZGF0aW9uIGZvciBSb2NrIFJpZGdlIENvbnRpbnVhdGlvbiBBcmVhIChDRSkgcmVjb3JkcyBpbiBpc29mcy4gVGhlIG1vZGlmaWVkIGNvZGUgaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGJ5IG1vdW50aW5nIGFuZCByZWFkaW5nIGNyYWZ0ZWQgSVNPOTY2MCBmaWxlc3lzdGVtIGltYWdlcyB2aWEgbG9vcC9kaXNrIGRldmljZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEyOjE1OjI5Ljk4ODU1ODA0N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzMTEyMjE5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGYwMjE1YmZlZjNiNzc2MWU3N2Q4YjU5MmU3ZDdkMGIzNGQ1ZTllZWZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgNyAxMjoxNToyOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9pc29mcy9pbm9kZS5jIGIvZnMvaXNvZnMvaW5vZGUuY1xcbmluZGV4IDMzNzgzNmEwYTE3MDQuLmVmY2I4ZmIyYjEwYzQgMTAwNjQ0XFxuLS0tIGEvZnMvaXNvZnMvaW5vZGUuY1xcbisrKyBiL2ZzL2lzb2ZzL2lub2RlLmNcXG5AQCAtODIxLDYgKzgyMSw4IEBAIHN0YXRpYyBpbnQgaXNvZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4gXFx0aWYgKCFzYl9zZXRfYmxvY2tzaXplKHMsIG9yaWdfem9uZXNpemUpKVxcbiBcXHRcXHRnb3RvIG91dF9mcmVlc2JpO1xcbiBcXG4rXFx0c2JpLVxcdTAwM2VzX3Nlc3Npb25fc3RhcnQgPSAodTY0KXZvbF9kZXNjX3N0YXJ0IFxcdTAwM2NcXHUwMDNjXFxuK1xcdFxcdFxcdFxcdChJU09GU19CTE9DS19CSVRTIC0gcy1cXHUwMDNlc19ibG9ja3NpemVfYml0cyk7XFxuIFxcdHNiaS1cXHUwMDNlc19ubHNfaW9jaGFyc2V0ID0gTlVMTDtcXG4gXFxuICNpZmRlZiBDT05GSUdfSk9MSUVUXFxuZGlmZiAtLWdpdCBhL2ZzL2lzb2ZzL2lzb2ZzLmggYi9mcy9pc29mcy9pc29mcy5oXFxuaW5kZXggZGFjYjljZGFlNGZkMS4uMDczMmUxYWEzYjdmYSAxMDA2NDRcXG4tLS0gYS9mcy9pc29mcy9pc29mcy5oXFxuKysrIGIvZnMvaXNvZnMvaXNvZnMuaFxcbkBAIC0zNSw2ICszNSw4IEBAIHN0cnVjdCBpc29mc19zYl9pbmZvIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBzX2ZpcnN0ZGF0YXpvbmU7XFxuIFxcdHVuc2lnbmVkIGxvbmcgc19sb2dfem9uZV9zaXplO1xcbiBcXHR1bnNpZ25lZCBsb25nIHNfbWF4X3NpemU7XFxuK1xcdC8qIFNlc3Npb24gc3RhcnQgaW4gZmlsZXN5c3RlbSBibG9jayB1bml0cy4gKi9cXG4rXFx0dTY0IHNfc2Vzc2lvbl9zdGFydDtcXG4gXFx0XFxuIFxcdGludCAgICAgICAgICAgc19yb2NrX29mZnNldDsgLyogb2Zmc2V0IG9mIFNVU1AgZmllbGRzIHdpdGhpbiBTVSBhcmVhICovXFxuIFxcdHMzMiAgICAgICAgICAgc19zYnNlY3RvcjtcXG5kaWZmIC0tZ2l0IGEvZnMvaXNvZnMvcm9jay5jIGIvZnMvaXNvZnMvcm9jay5jXFxuaW5kZXggMjYyOGYzMWJkM2E1ZC4uYTk2NDVhOWU4NjI4OSAxMDA2NDRcXG4tLS0gYS9mcy9pc29mcy9yb2NrLmNcXG4rKysgYi9mcy9pc29mcy9yb2NrLmNcXG5AQCAtOSw2ICs5LDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wYWdlbWFwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9ibGtkZXYuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJpc29mcy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwicm9jay5oXFxcIlxcbkBAIC04NCw2ICs4NSwxMSBAQCBzdGF0aWMgdm9pZCBpbml0X3JvY2tfc3RhdGUoc3RydWN0IHJvY2tfc3RhdGUgKnJzLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiAgKi9cXG4gc3RhdGljIGludCByb2NrX2NvbnRpbnVlKHN0cnVjdCByb2NrX3N0YXRlICpycylcXG4ge1xcbitcXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gcnMtXFx1MDAzZWlub2RlLVxcdTAwM2VpX3NiO1xcbitcXHRzdHJ1Y3QgaXNvZnNfc2JfaW5mbyAqc2JpID0gSVNPRlNfU0Ioc2IpO1xcbitcXHR1NjQgZXh0ZW50ID0gKHVuc2lnbmVkIGludClycy1cXHUwMDNlY29udF9leHRlbnQ7XFxuK1xcdHU2NCBzZXNzaW9uX2VuZCA9IHNiaS1cXHUwMDNlc19zZXNzaW9uX3N0YXJ0ICtcXG4rXFx0XFx0KCh1NjQpc2JpLVxcdTAwM2VzX256b25lcyBcXHUwMDNjXFx1MDAzYyAoSVNPRlNfQkxPQ0tfQklUUyAtIHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzKSk7XFxuIFxcdGludCByZXQgPSAxO1xcbiBcXHRpbnQgYmxvY2tzaXplID0gMSBcXHUwMDNjXFx1MDAzYyBycy1cXHUwMDNlaW5vZGUtXFx1MDAzZWlfYmxrYml0cztcXG4gXFx0Y29uc3QgaW50IG1pbl9kZV9zaXplID0gb2Zmc2V0b2Yoc3RydWN0IHJvY2tfcmlkZ2UsIHUpO1xcbkBAIC0xMDEsMTEgKzEwNywxNCBAQCBzdGF0aWMgaW50IHJvY2tfY29udGludWUoc3RydWN0IHJvY2tfc3RhdGUgKnJzKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKCh1bnNpZ25lZClycy1cXHUwMDNlY29udF9leHRlbnQgXFx1MDAzZT0gSVNPRlNfU0IocnMtXFx1MDAzZWlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc19uem9uZXMpIHtcXG4rXFx0aWYgKHJzLVxcdTAwM2Vjb250X2V4dGVudCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgKGV4dGVudCBcXHUwMDNjIHNiaS1cXHUwMDNlc19zZXNzaW9uX3N0YXJ0IHx8XFxuK1xcdCAgICAgZXh0ZW50IFxcdTAwM2U9IHNlc3Npb25fZW5kIHx8XFxuK1xcdCAgICAgZXh0ZW50IFxcdTAwM2U9IHNiX2JkZXZfbnJfYmxvY2tzKHNiKSkpIHtcXG4gXFx0XFx0cHJpbnRrKEtFUk5fTk9USUNFIFxcXCJyb2NrOiBjb3JydXB0ZWQgZGlyZWN0b3J5IGVudHJ5LiBcXFwiXFxuIFxcdFxcdFxcdFxcXCJleHRlbnQ9JXUgb3V0IG9mIHZvbHVtZSAobnpvbmVzPSVsdSlcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCh1bnNpZ25lZClycy1cXHUwMDNlY29udF9leHRlbnQsXFxuLVxcdFxcdFxcdElTT0ZTX1NCKHJzLVxcdTAwM2Vpbm9kZS1cXHUwMDNlaV9zYiktXFx1MDAzZXNfbnpvbmVzKTtcXG4rXFx0XFx0XFx0c2JpLVxcdTAwM2VzX256b25lcyk7XFxuIFxcdFxcdHJldCA9IC1FSU87XFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEyOjE1OjMxLjQyMDY5NTg3MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDEzMjA2NTU5NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVNPOTY2MF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlzb2ZzX2ZpbGxfc3VwZXJcIixcbiAgICBcInJvY2tfY29udGludWVcIixcbiAgICBcImdldF9yb2NrX3JpZGdlX2ZpbGVuYW1lXCIsXG4gICAgXCJwYXJzZV9yb2NrX3JpZGdlX2lub2RlXCIsXG4gICAgXCJyb2NrX3JpZGdlX3N5bWxpbmtfcmVhZF9mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc2Vzc2lvbiBib3VuZGFyeSBhbmQgYmxvY2sgZGV2aWNlIGNhcGFjaXR5IHZhbGlkYXRpb24gZm9yIFJvY2sgUmlkZ2UgQ29udGludWF0aW9uIEFyZWEgKENFKSByZWNvcmRzIGluIGlzb2ZzLiBUaGUgbW9kaWZpZWQgY29kZSBpcyBkaXJlY3RseSByZWFjaGFibGUgYnkgbW91bnRpbmcgYW5kIHJlYWRpbmcgY3JhZnRlZCBJU085NjYwIGZpbGVzeXN0ZW0gaW1hZ2VzIHZpYSBsb29wL2Rpc2sgZGV2aWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmMDIxNWJmZWYzYjc3NjFlNzdkOGI1OTJlN2Q3ZDBiMzRkNWU5ZWVmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxMjoxNToyOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2lzb2ZzL2lub2RlLmMgYi9mcy9pc29mcy9pbm9kZS5jXG5pbmRleCAzMzc4MzZhMGExNzA0Li5lZmNiOGZiMmIxMGM0IDEwMDY0NFxuLS0tIGEvZnMvaXNvZnMvaW5vZGUuY1xuKysrIGIvZnMvaXNvZnMvaW5vZGUuY1xuQEAgLTgyMSw2ICs4MjEsOCBAQCBzdGF0aWMgaW50IGlzb2ZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4gXHRpZiAoIXNiX3NldF9ibG9ja3NpemUocywgb3JpZ196b25lc2l6ZSkpXG4gXHRcdGdvdG8gb3V0X2ZyZWVzYmk7XG4gXG4rXHRzYmktXHUwMDNlc19zZXNzaW9uX3N0YXJ0ID0gKHU2NCl2b2xfZGVzY19zdGFydCBcdTAwM2NcdTAwM2NcbitcdFx0XHRcdChJU09GU19CTE9DS19CSVRTIC0gcy1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzKTtcbiBcdHNiaS1cdTAwM2VzX25sc19pb2NoYXJzZXQgPSBOVUxMO1xuIFxuICNpZmRlZiBDT05GSUdfSk9MSUVUXG5kaWZmIC0tZ2l0IGEvZnMvaXNvZnMvaXNvZnMuaCBiL2ZzL2lzb2ZzL2lzb2ZzLmhcbmluZGV4IGRhY2I5Y2RhZTRmZDEuLjA3MzJlMWFhM2I3ZmEgMTAwNjQ0XG4tLS0gYS9mcy9pc29mcy9pc29mcy5oXG4rKysgYi9mcy9pc29mcy9pc29mcy5oXG5AQCAtMzUsNiArMzUsOCBAQCBzdHJ1Y3QgaXNvZnNfc2JfaW5mbyB7XG4gXHR1bnNpZ25lZCBsb25nIHNfZmlyc3RkYXRhem9uZTtcbiBcdHVuc2lnbmVkIGxvbmcgc19sb2dfem9uZV9zaXplO1xuIFx0dW5zaWduZWQgbG9uZyBzX21heF9zaXplO1xuK1x0LyogU2Vzc2lvbiBzdGFydCBpbiBmaWxlc3lzdGVtIGJsb2NrIHVuaXRzLiAqL1xuK1x0dTY0IHNfc2Vzc2lvbl9zdGFydDtcbiBcdFxuIFx0aW50ICAgICAgICAgICBzX3JvY2tfb2Zmc2V0OyAvKiBvZmZzZXQgb2YgU1VTUCBmaWVsZHMgd2l0aGluIFNVIGFyZWEgKi9cbiBcdHMzMiAgICAgICAgICAgc19zYnNlY3RvcjtcbmRpZmYgLS1naXQgYS9mcy9pc29mcy9yb2NrLmMgYi9mcy9pc29mcy9yb2NrLmNcbmluZGV4IDI2MjhmMzFiZDNhNWQuLmE5NjQ1YTllODYyODkgMTAwNjQ0XG4tLS0gYS9mcy9pc29mcy9yb2NrLmNcbisrKyBiL2ZzL2lzb2ZzL3JvY2suY1xuQEAgLTksNiArOSw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZW1hcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYmxrZGV2LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImlzb2ZzLmhcIlxuICNpbmNsdWRlIFwicm9jay5oXCJcbkBAIC04NCw2ICs4NSwxMSBAQCBzdGF0aWMgdm9pZCBpbml0X3JvY2tfc3RhdGUoc3RydWN0IHJvY2tfc3RhdGUgKnJzLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuICAqL1xuIHN0YXRpYyBpbnQgcm9ja19jb250aW51ZShzdHJ1Y3Qgcm9ja19zdGF0ZSAqcnMpXG4ge1xuK1x0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHJzLVx1MDAzZWlub2RlLVx1MDAzZWlfc2I7XG4rXHRzdHJ1Y3QgaXNvZnNfc2JfaW5mbyAqc2JpID0gSVNPRlNfU0Ioc2IpO1xuK1x0dTY0IGV4dGVudCA9ICh1bnNpZ25lZCBpbnQpcnMtXHUwMDNlY29udF9leHRlbnQ7XG4rXHR1NjQgc2Vzc2lvbl9lbmQgPSBzYmktXHUwMDNlc19zZXNzaW9uX3N0YXJ0ICtcbitcdFx0KCh1NjQpc2JpLVx1MDAzZXNfbnpvbmVzIFx1MDAzY1x1MDAzYyAoSVNPRlNfQkxPQ0tfQklUUyAtIHNiLVx1MDAzZXNfYmxvY2tzaXplX2JpdHMpKTtcbiBcdGludCByZXQgPSAxO1xuIFx0aW50IGJsb2Nrc2l6ZSA9IDEgXHUwMDNjXHUwMDNjIHJzLVx1MDAzZWlub2RlLVx1MDAzZWlfYmxrYml0cztcbiBcdGNvbnN0IGludCBtaW5fZGVfc2l6ZSA9IG9mZnNldG9mKHN0cnVjdCByb2NrX3JpZGdlLCB1KTtcbkBAIC0xMDEsMTEgKzEwNywxNCBAQCBzdGF0aWMgaW50IHJvY2tfY29udGludWUoc3RydWN0IHJvY2tfc3RhdGUgKnJzKVxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdGlmICgodW5zaWduZWQpcnMtXHUwMDNlY29udF9leHRlbnQgXHUwMDNlPSBJU09GU19TQihycy1cdTAwM2Vpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX256b25lcykge1xuK1x0aWYgKHJzLVx1MDAzZWNvbnRfZXh0ZW50IFx1MDAyNlx1MDAyNlxuK1x0ICAgIChleHRlbnQgXHUwMDNjIHNiaS1cdTAwM2VzX3Nlc3Npb25fc3RhcnQgfHxcbitcdCAgICAgZXh0ZW50IFx1MDAzZT0gc2Vzc2lvbl9lbmQgfHxcbitcdCAgICAgZXh0ZW50IFx1MDAzZT0gc2JfYmRldl9ucl9ibG9ja3Moc2IpKSkge1xuIFx0XHRwcmludGsoS0VSTl9OT1RJQ0UgXCJyb2NrOiBjb3JydXB0ZWQgZGlyZWN0b3J5IGVudHJ5LiBcIlxuIFx0XHRcdFwiZXh0ZW50PSV1IG91dCBvZiB2b2x1bWUgKG56b25lcz0lbHUpXFxuXCIsXG4gXHRcdFx0KHVuc2lnbmVkKXJzLVx1MDAzZWNvbnRfZXh0ZW50LFxuLVx0XHRcdElTT0ZTX1NCKHJzLVx1MDAzZWlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfbnpvbmVzKTtcbitcdFx0XHRzYmktXHUwMDNlc19uem9uZXMpO1xuIFx0XHRyZXQgPSAtRUlPO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEyOjE1OjMxLjQyMDY5NzM4MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgwMDY1Mjc3MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoaXMgSVNPRlMgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBzZWUgY2hhbmdlcyBhY3Jvc3MgdGhyZWUgZmlsZXMgaW4gdGhlIGBmcy9pc29mc2AgZGlyZWN0b3J5OiBgaW5vZGUuY2AsIGBpc29mcy5oYCwgYW5kIGByb2NrLmNgLiBJbW1lZGlhdGVseSwgbXkgYXR0ZW50aW9uIGlzIGRyYXduIHRvIHRoZSBgaXNvZnNfZmlsbF9zdXBlcmAgZnVuY3Rpb247IHNwZWNpZmljYWxseSB0aGUgbW9kaWZpY2F0aW9uIHNldHRpbmcgYHNiaS1cdTAwM2VzX3Nlc3Npb25fc3RhcnRgLiBUaGF0J3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24gZm9yIGFueSBJU08gZmlsZXN5c3RlbS5cblxuVGhlbiwgdGhlIG1vcmUgaW50ZXJlc3RpbmcgY2hlY2sgaXMgd2l0aGluIGByb2NrX2NvbnRpbnVlYC4gSXQncyBlbnN1cmluZyB0aGF0IHRoZSBgcnMtXHUwMDNlY29udF9leHRlbnRgIHZhbHVlLCB3aGljaCBzZWVtcyB0byBiZSBhbiBleHRlbnQgY29udGludWF0aW9uIHJlZmVyZW5jZSwgaXMgd2l0aGluIHRoZSBleHBlY3RlZCBib3VuZGFyaWVzLiBUaGUgY29uZGl0aW9uYWwgYGlmIChycy1cdTAwM2Vjb250X2V4dGVudCBcdTAwMjZcdTAwMjYgKGV4dGVudCBcdTAwM2Mgc2JpLVx1MDAzZXNfc2Vzc2lvbl9zdGFydCB8fCBleHRlbnQgXHUwMDNlPSBzZXNzaW9uX2VuZCB8fCBleHRlbnQgXHUwMDNlPSBzYl9iZGV2X25yX2Jsb2NrcyhzYikpKWAgY29uZmlybXMgdGhpcy4gV2UncmUgdmVyaWZ5aW5nIHRoYXQgYGV4dGVudGAgZG9lc24ndCBmYWxsIGJlZm9yZSBgc2JpLVx1MDAzZXNfc2Vzc2lvbl9zdGFydGAsIGFmdGVyIGBzZXNzaW9uX2VuZGAsIGFuZCB3ZSBhbHNvIGNoZWNrIGlmIGl0IGdvZXMgcGFzdCB0aGUgdG90YWwgbnVtYmVyIG9mIGJsb2Nrcy4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCBmaXggZm9yIGEgc2VjdG9yIG91dC1vZi1ib3VuZHMgZXJyb3Igd2hlbiBkZWFsaW5nIHdpdGggbXVsdGktc2Vzc2lvbiBDRHMuXG5cbk5vdywgSSdsbCBxdWlja2x5IGNoZWNrIGBmcy9pc29mcy9LY29uZmlnYC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gd2hpY2ggQ09ORklHIG9wdGlvbnMgYXJlIHJlcXVpcmVkIHRvIGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkuIEtub3dpbmcgdGhlIGRlcGVuZGVuY2llcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhpcyBjaGFuZ2UgYW5kIGlmIGFueSByZWxhdGVkIGZlYXR1cmVzIGFyZSBhZmZlY3RlZC4gSSB3YW50IHRvIHNlZSBpZiB0aGlzIGNoYW5nZSBpbXBhY3RzIGFueSBvdGhlciBhcmVhcyBJJ20gZmFtaWxpYXIgd2l0aCwgcGVyaGFwcyBpbnZvbHZpbmcgbXVsdGktc2Vzc2lvbiBvciBSb2NrIFJpZGdlIGV4dGVuc2lvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NjUsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMjoxNTozOS40MjcyMjgxNjFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjUyNTQwNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVNPRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaXNvZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2lzb2ZzL0tjb25maWc9MTk9Y29uZmlnIEpPTElFVFxcbi0tXFxuZnMvaXNvZnMvS2NvbmZpZy0zMC1cXG5mcy9pc29mcy9LY29uZmlnOjMxOmNvbmZpZyBaSVNPRlNcXG5mcy9pc29mcy9LY29uZmlnLTMyLVxcdGJvb2wgXFxcIlRyYW5zcGFyZW50IGRlY29tcHJlc3Npb24gZXh0ZW5zaW9uXFxcIlxcbi0tXFxuZnMvaXNvZnMvTWFrZWZpbGU9OT1pc29mcy0kKENPTkZJR19KT0xJRVQpXFx0Kz0gam9saWV0Lm9cXG5mcy9pc29mcy9NYWtlZmlsZToxMDppc29mcy0kKENPTkZJR19aSVNPRlMpXFx0Kz0gY29tcHJlc3Mub1xcbi0tXFxuZnMvaXNvZnMvY29tcHJlc3MuYz00MD1zdGF0aWMgbG9mZl90IHppc29mc191bmNvbXByZXNzX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBibG9ja19zdGFydCxcXG4tLVxcbmZzL2lzb2ZzL2NvbXByZXNzLmMtNDQte1xcbmZzL2lzb2ZzL2NvbXByZXNzLmM6NDU6XFx0dW5zaWduZWQgaW50IHppc29mc19ibG9ja19zaGlmdCA9IElTT0ZTX0koaW5vZGUpLVxcdTAwM2VpX2Zvcm1hdF9wYXJtWzFdO1xcbmZzL2lzb2ZzL2NvbXByZXNzLmM6NDY6XFx0dW5zaWduZWQgaW50IGJ1ZnNpemUgPSBJU09GU19CVUZGRVJfU0laRShpbm9kZSk7XFxuZnMvaXNvZnMvY29tcHJlc3MuYzo0NzpcXHR1bnNpZ25lZCBpbnQgYnVmc2hpZnQgPSBJU09GU19CVUZGRVJfQklUUyhpbm9kZSk7XFxuZnMvaXNvZnMvY29tcHJlc3MuYy00OC1cXHR1bnNpZ25lZCBpbnQgYnVmbWFzayA9IGJ1ZnNpemUgLSAxO1xcbi0tXFxuZnMvaXNvZnMvY29tcHJlc3MuYz0yMDg9c3RhdGljIGludCB6aXNvZnNfZmlsbF9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgZnVsbF9wYWdlLCBpbnQgcGNvdW50LFxcbi0tXFxuZnMvaXNvZnMvY29tcHJlc3MuYy0yMTItXFx0bG9mZl90IGJsb2NrX3N0YXJ0LCBibG9ja19lbmQ7XFxuZnMvaXNvZnMvY29tcHJlc3MuYzoyMTM6XFx0dW5zaWduZWQgaW50IGhlYWRlcl9zaXplID0gSVNPRlNfSShpbm9kZSktXFx1MDAzZWlfZm9ybWF0X3Bhcm1bMF07XFxuZnMvaXNvZnMvY29tcHJlc3MuYzoyMTQ6XFx0dW5zaWduZWQgaW50IHppc29mc19ibG9ja19zaGlmdCA9IElTT0ZTX0koaW5vZGUpLVxcdTAwM2VpX2Zvcm1hdF9wYXJtWzFdO1xcbmZzL2lzb2ZzL2NvbXByZXNzLmMtMjE1LVxcdHVuc2lnbmVkIGludCBibG9ja3B0cjtcXG4tLVxcbmZzL2lzb2ZzL2NvbXByZXNzLmMtMjE4LVxcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7XFxuZnMvaXNvZnMvY29tcHJlc3MuYzoyMTk6XFx0dW5zaWduZWQgaW50IGJsa2JpdHMgPSBJU09GU19CVUZGRVJfQklUUyhpbm9kZSk7XFxuZnMvaXNvZnMvY29tcHJlc3MuYy0yMjAtXFx0dW5zaWduZWQgaW50IGJsa3NpemUgPSAxIFxcdTAwM2NcXHUwMDNjIGJsa2JpdHM7XFxuLS1cXG5mcy9pc29mcy9jb21wcmVzcy5jPTMwNT1zdGF0aWMgaW50IHppc29mc19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuZnMvaXNvZnMvY29tcHJlc3MuYy0zMTAtXFx0aW50IGksIHBjb3VudCwgZnVsbF9wYWdlO1xcbmZzL2lzb2ZzL2NvbXByZXNzLmM6MzExOlxcdHVuc2lnbmVkIGludCB6aXNvZnNfYmxvY2tfc2hpZnQgPSBJU09GU19JKGlub2RlKS1cXHUwMDNlaV9mb3JtYXRfcGFybVsxXTtcXG5mcy9pc29mcy9jb21wcmVzcy5jLTMxMi1cXHR1bnNpZ25lZCBpbnQgemlzb2ZzX3BhZ2VzX3Blcl9jYmxvY2sgPVxcbi0tXFxuZnMvaXNvZnMvZGlyLmM9ODU9c3RhdGljIGludCBkb19pc29mc19yZWFkZGlyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxuZnMvaXNvZnMvZGlyLmMtODgte1xcbmZzL2lzb2ZzL2Rpci5jOjg5OlxcdHVuc2lnbmVkIGxvbmcgYnVmc2l6ZSA9IElTT0ZTX0JVRkZFUl9TSVpFKGlub2RlKTtcXG5mcy9pc29mcy9kaXIuYzo5MDpcXHR1bnNpZ25lZCBjaGFyIGJ1ZmJpdHMgPSBJU09GU19CVUZGRVJfQklUUyhpbm9kZSk7XFxuZnMvaXNvZnMvZGlyLmMtOTEtXFx0dW5zaWduZWQgbG9uZyBibG9jaywgb2Zmc2V0LCBibG9ja19zYXZlZCwgb2Zmc2V0X3NhdmVkO1xcbi0tXFxuZnMvaXNvZnMvZGlyLmMtOTgtXFx0c3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkICpkZTtcXG5mcy9pc29mcy9kaXIuYzo5OTpcXHRzdHJ1Y3QgaXNvZnNfc2JfaW5mbyAqc2JpID0gSVNPRlNfU0IoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbmZzL2lzb2ZzL2Rpci5jLTEwMC1cXG4tLVxcbmZzL2lzb2ZzL2Rpci5jLTEyNS1cXHRcXHRcXHRiaCA9IE5VTEw7XFxuZnMvaXNvZnMvZGlyLmM6MTI2OlxcdFxcdFxcdGN0eC1cXHUwMDNlcG9zID0gKGN0eC1cXHUwMDNlcG9zICsgSVNPRlNfQkxPQ0tfU0laRSkgXFx1MDAyNiB+KElTT0ZTX0JMT0NLX1NJWkUgLSAxKTtcXG5mcy9pc29mcy9kaXIuYy0xMjctXFx0XFx0XFx0YmxvY2sgPSBjdHgtXFx1MDAzZXBvcyBcXHUwMDNlXFx1MDAzZSBidWZiaXRzO1xcbi0tXFxuZnMvaXNvZnMvZGlyLmM9MjUwPWludCBpc29mc19maWxlYXR0cl9nZXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpXFxuZnMvaXNvZnMvZGlyLmMtMjUxLXtcXG5mcy9pc29mcy9kaXIuYzoyNTI6XFx0c3RydWN0IGlzb2ZzX3NiX2luZm8gKnNiaSA9IElTT0ZTX1NCKGRlbnRyeS1cXHUwMDNlZF9zYik7XFxuZnMvaXNvZnMvZGlyLmMtMjUzLVxcbi0tXFxuZnMvaXNvZnMvZXhwb3J0LmM9MjA9aXNvZnNfZXhwb3J0X2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2lzb2ZzL2V4cG9ydC5jLTI2LVxcbmZzL2lzb2ZzL2V4cG9ydC5jOjI3OlxcdGlmIChibG9jayA9PSAwIHx8IGJsb2NrIFxcdTAwM2U9IElTT0ZTX1NCKHNiKS1cXHUwMDNlc19uem9uZXMpXFxuZnMvaXNvZnMvZXhwb3J0LmMtMjgtXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVTVEFMRSk7XFxuLS1cXG5mcy9pc29mcy9leHBvcnQuYz00ND1zdGF0aWMgc3RydWN0IGRlbnRyeSAqaXNvZnNfZXhwb3J0X2dldF9wYXJlbnQoc3RydWN0IGRlbnRyeSAqY2hpbGQpXFxuLS1cXG5mcy9pc29mcy9leHBvcnQuYy00OC1cXHRzdHJ1Y3QgaW5vZGUgKmNoaWxkX2lub2RlID0gZF9pbm9kZShjaGlsZCk7XFxuZnMvaXNvZnMvZXhwb3J0LmM6NDk6XFx0c3RydWN0IGlzb19pbm9kZV9pbmZvICplX2NoaWxkX2lub2RlID0gSVNPRlNfSShjaGlsZF9pbm9kZSk7XFxuZnMvaXNvZnMvZXhwb3J0LmMtNTAtXFx0c3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkICpkZSA9IE5VTEw7XFxuLS1cXG5mcy9pc29mcy9leHBvcnQuYz0xMTk9aXNvZnNfZXhwb3J0X2VuY29kZV9maChzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvaXNvZnMvZXhwb3J0LmMtMTIzLXtcXG5mcy9pc29mcy9leHBvcnQuYzoxMjQ6XFx0c3RydWN0IGlzb19pbm9kZV9pbmZvICogZWkgPSBJU09GU19JKGlub2RlKTtcXG5mcy9pc29mcy9leHBvcnQuYy0xMjUtXFx0aW50IGxlbiA9ICptYXhfbGVuO1xcbi0tXFxuZnMvaXNvZnMvZXhwb3J0LmMtMTQ5LVxcdFxcdHN0cnVjdCBpc29faW5vZGVfaW5mbyAqZXBhcmVudDtcXG5mcy9pc29mcy9leHBvcnQuYzoxNTA6XFx0XFx0ZXBhcmVudCA9IElTT0ZTX0kocGFyZW50KTtcXG5mcy9pc29mcy9leHBvcnQuYy0xNTEtXFx0XFx0ZmgzMlszXSA9IGVwYXJlbnQtXFx1MDAzZWlfaWdldDVfYmxvY2s7XFxuLS1cXG5mcy9pc29mcy9pbm9kZS5jPTUyPXN0YXRpYyB2b2lkIGlzb2ZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2lzb2ZzL2lub2RlLmMtNTMte1xcbmZzL2lzb2ZzL2lub2RlLmM6NTQ6XFx0c3RydWN0IGlzb2ZzX3NiX2luZm8gKnNiaSA9IElTT0ZTX1NCKHNiKTtcXG5mcy9pc29mcy9pbm9kZS5jLTU1LVxcbi0tXFxuZnMvaXNvZnMvaW5vZGUuYz04MD1zdGF0aWMgdm9pZCBpc29mc19mcmVlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvaXNvZnMvaW5vZGUuYy04MS17XFxuZnMvaXNvZnMvaW5vZGUuYzo4MjpcXHRrbWVtX2NhY2hlX2ZyZWUoaXNvZnNfaW5vZGVfY2FjaGVwLCBJU09GU19JKGlub2RlKSk7XFxuZnMvaXNvZnMvaW5vZGUuYy04My19XFxuLS1cXG5mcy9pc29mcy9pbm9kZS5jPTQ0ND1zdGF0aWMgaW50IGlzb2ZzX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBkZW50cnkgKnJvb3QpXFxuZnMvaXNvZnMvaW5vZGUuYy00NDUte1xcbmZzL2lzb2ZzL2lub2RlLmM6NDQ2OlxcdHN0cnVjdCBpc29mc19zYl9pbmZvICpzYmkgPSBJU09GU19TQihyb290LVxcdTAwM2VkX3NiKTtcXG5mcy9pc29mcy9pbm9kZS5jLTQ0Ny1cXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmMtNDcwLVxcbmZzL2lzb2ZzL2lub2RlLmM6NDcxOlxcdGlmIChzYmktXFx1MDAzZXNfZG1vZGUgIT0gSVNPRlNfSU5WQUxJRF9NT0RFKVxcbmZzL2lzb2ZzL2lub2RlLmMtNDcyLVxcdFxcdHNlcV9wcmludGYobSwgXFxcIixkbW9kZT0lb1xcXCIsIHNiaS1cXHUwMDNlc19kbW9kZSk7XFxuZnMvaXNvZnMvaW5vZGUuYzo0NzM6XFx0aWYgKHNiaS1cXHUwMDNlc19mbW9kZSAhPSBJU09GU19JTlZBTElEX01PREUpXFxuZnMvaXNvZnMvaW5vZGUuYy00NzQtXFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiLGZtb2RlPSVvXFxcIiwgc2JpLVxcdTAwM2VzX2Ztb2RlKTtcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmM9NTAzPXN0YXRpYyB1bnNpZ25lZCBpbnQgaXNvZnNfZ2V0X2xhc3Rfc2Vzc2lvbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzMzIgc2Vzc2lvbilcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmMtNTE2LVxcdFxcdGlmIChjZHJvbV9yZWFkX3RvY2VudHJ5KGNkaSwgXFx1MDAyNnRlKSA9PSAwKSB7XFxuZnMvaXNvZnMvaW5vZGUuYzo1MTc6XFx0XFx0XFx0cHJpbnRrKEtFUk5fREVCVUcgXFxcIklTT0ZTOiBTZXNzaW9uICVkIHN0YXJ0ICVkIHR5cGUgJWRcXFxcblxcXCIsXFxuZnMvaXNvZnMvaW5vZGUuYy01MTgtXFx0XFx0XFx0XFx0c2Vzc2lvbiwgdGUuY2R0ZV9hZGRyLmxiYSxcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmMtNTIzLVxcbmZzL2lzb2ZzL2lub2RlLmM6NTI0OlxcdFxcdHByaW50ayhLRVJOX0VSUiBcXFwiSVNPRlM6IEludmFsaWQgc2Vzc2lvbiBudW1iZXIgb3IgdHlwZSBvZiB0cmFja1xcXFxuXFxcIik7XFxuZnMvaXNvZnMvaW5vZGUuYy01MjUtXFx0fVxcbi0tXFxuZnMvaXNvZnMvaW5vZGUuYz01NzQ9c3RhdGljIGludCBpc29mc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvaXNvZnMvaW5vZGUuYy02MDctXFx0XFx0cHJpbnRrKEtFUk5fV0FSTklOR1xcbmZzL2lzb2ZzL2lub2RlLmM6NjA4OlxcdFxcdCAgICAgICBcXFwiSVNPRlM6IHVuc3VwcG9ydGVkL2ludmFsaWQgaGFyZHdhcmUgc2VjdG9yIHNpemUgJWRcXFxcblxcXCIsXFxuZnMvaXNvZnMvaW5vZGUuYy02MDktXFx0XFx0XFx0YmRldl9sb2dpY2FsX2Jsb2NrX3NpemUocy1cXHUwMDNlc19iZGV2KSk7XFxuLS1cXG5mcy9pc29mcy9pbm9kZS5jLTYxNC1cXHRcXHRwcmludGsoS0VSTl9FUlJcXG5mcy9pc29mcy9pbm9kZS5jOjYxNTpcXHRcXHQgICAgICAgXFxcIklTT0ZTOiB1bmFibGUgdG8gc2V0IGJsb2Nrc2l6ZVxcXFxuXFxcIik7XFxuZnMvaXNvZnMvaW5vZGUuYy02MTYtXFx0XFx0Z290byBvdXRfZnJlZXNiaTtcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmMtNjMwLVxcbmZzL2lzb2ZzL2lub2RlLmM6NjMxOlxcdFxcdGJsb2NrID0gaXNvX2Jsa251bSBcXHUwMDNjXFx1MDAzYyAoSVNPRlNfQkxPQ0tfQklUUyAtIHMtXFx1MDAzZXNfYmxvY2tzaXplX2JpdHMpO1xcbmZzL2lzb2ZzL2lub2RlLmMtNjMyLVxcdFxcdGlmICghKGJoID0gc2JfYnJlYWQocywgYmxvY2spKSlcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmMtNzU0LVxcbmZzL2lzb2ZzL2lub2RlLmM6NzU1OlxcdHMtXFx1MDAzZXNfbWFnaWMgPSBJU09GU19TVVBFUl9NQUdJQztcXG5mcy9pc29mcy9pbm9kZS5jLTc1Ni1cXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmMtNzczLSNpZm5kZWYgQkVRVUlFVFxcbmZzL2lzb2ZzL2lub2RlLmM6Nzc0OlxcdHByaW50ayhLRVJOX0RFQlVHIFxcXCJJU09GUzogTWF4IHNpemU6JWxkICAgTG9nIHpvbmUgc2l6ZTolbGRcXFxcblxcXCIsXFxuZnMvaXNvZnMvaW5vZGUuYy03NzUtXFx0XFx0c2JpLVxcdTAwM2VzX21heF9zaXplLCAxVUwgXFx1MDAzY1xcdTAwM2Mgc2JpLVxcdTAwM2VzX2xvZ196b25lX3NpemUpO1xcbmZzL2lzb2ZzL2lub2RlLmM6Nzc2OlxcdHByaW50ayhLRVJOX0RFQlVHIFxcXCJJU09GUzogRmlyc3QgZGF0YXpvbmU6JWxkXFxcXG5cXFwiLCBzYmktXFx1MDAzZXNfZmlyc3RkYXRhem9uZSk7XFxuZnMvaXNvZnMvaW5vZGUuYy03NzctXFx0aWYoc2JpLVxcdTAwM2VzX2hpZ2hfc2llcnJhKVxcbmZzL2lzb2ZzL2lub2RlLmM6Nzc4OlxcdFxcdHByaW50ayhLRVJOX0RFQlVHIFxcXCJJU09GUzogRGlzYyBpbiBIaWdoIFNpZXJyYSBmb3JtYXQuXFxcXG5cXFwiKTtcXG5mcy9pc29mcy9pbm9kZS5jLTc3OS0jZW5kaWZcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmMtODI0LVxcdHNiaS1cXHUwMDNlc19zZXNzaW9uX3N0YXJ0ID0gKHU2NCl2b2xfZGVzY19zdGFydCBcXHUwMDNjXFx1MDAzY1xcbmZzL2lzb2ZzL2lub2RlLmM6ODI1OlxcdFxcdFxcdFxcdChJU09GU19CTE9DS19CSVRTIC0gcy1cXHUwMDNlc19ibG9ja3NpemVfYml0cyk7XFxuZnMvaXNvZnMvaW5vZGUuYy04MjYtXFx0c2JpLVxcdTAwM2VzX25sc19pb2NoYXJzZXQgPSBOVUxMO1xcbi0tXFxuZnMvaXNvZnMvaW5vZGUuYy04NTctXFx0ICovXFxuZnMvaXNvZnMvaW5vZGUuYzo4NTg6XFx0aWYgKG9wdC1cXHUwMDNlZm1vZGUgIT0gSVNPRlNfSU5WQUxJRF9NT0RFKVxcbmZzL2lzb2ZzL2lub2RlLmMtODU5LVxcdFxcdHNiaS1cXHUwMDNlc19mbW9kZSA9IG9wdC1cXHUwMDNlZm1vZGUgXFx1MDAyNiAwNzc3O1xcbmZzL2lzb2ZzL2lub2RlLmMtODYwLVxcdGVsc2VcXG5mcy9pc29mcy9pbm9kZS5jOjg2MTpcXHRcXHRzYmktXFx1MDAzZXNfZm1vZGUgPSBJU09GU19JTlZBTElEX01PREU7XFxuZnMvaXNvZnMvaW5vZGUuYzo4NjI6XFx0aWYgKG9wdC1cXHUwMDNlZG1vZGUgIT0gSVNPRlNfSU5WQUxJRF9NT0RFKVxcbmZzL2lzb2ZzL2lub2RlLmMtODYzLVxcdFxcdHNiaS1cXHUwMDNlc19kbW9kZSA9IG9wdC1cXHUwMDNlZG1vZGUgXFx1MDAyNiAwNzc3O1xcbmZzL2lzb2ZzL2lub2RlLmMtODY0LVxcdGVsc2VcXG5mcy9pc29mcy9pbm9kZS5jOjg2NTpcXHRcXHRzYmktXFx1MDAzZXNfZG1vZGUgPSBJU09GU19JTlZBTElEX01PREU7XFxuZnMvaXNvZnMvaW5vZGUuYy04NjYtXFxuLS1cXG5mcy9pc29mcy9pbm9kZS5jLTg4MC1cXHRcXHRcXHRwcmludGsoS0VSTl9OT1RJQ0VcXG5mcy9pc29mcy9pbm9kZS5jOjg4MTpcXHRcXHRcXHQgICAgICAgXFxcIklTT0ZTOiByb290IGlub2RlIGlzIHVudXNhYmxlLiBcXFwiXFxuZnMvaXNvZnMvaW5vZGUuYy04ODItXFx0XFx0XFx0ICAgICAgIFxcXCJEaXNhYmxpbmcgUm9jayBSaWRnZSBhbmQgc3dpdGNoaW5nIHRvIEpvbGlldC5cXFwiKTtcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmMtODk2LVxcdFxcdHByaW50ayhLRVJOX05PVElDRVxcbmZzL2lzb2ZzL2lub2RlLmM6ODk3OlxcdFxcdFxcdFxcXCJJU09GUzogcHJpbWFyeSByb290IGRpcmVjdG9yeSBpcyBlbXB0eS4gXFxcIlxcbmZzL2lzb2ZzL2lub2RlLmMtODk4LVxcdFxcdFxcdFxcXCJEaXNhYmxpbmcgUm9jayBSaWRnZSBhbmQgc3dpdGNoaW5nIHRvIEpvbGlldC5cXFwiKTtcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmMtOTE2LVxcdFxcdFxcdHByaW50ayhLRVJOX0RFQlVHXFxuZnMvaXNvZnMvaW5vZGUuYzo5MTc6XFx0XFx0XFx0XFx0XFxcIklTT0ZTOiBjaGFuZ2luZyB0byBzZWNvbmRhcnkgcm9vdFxcXFxuXFxcIik7XFxuZnMvaXNvZnMvaW5vZGUuYy05MTgtXFx0XFx0XFx0aXB1dChpbm9kZSk7XFxuLS1cXG5mcy9pc29mcy9pbm9kZS5jLTk4MC1vdXRfYmFkX3pvbmVfc2l6ZTpcXG5mcy9pc29mcy9pbm9kZS5jOjk4MTpcXHRwcmludGsoS0VSTl9XQVJOSU5HIFxcXCJJU09GUzogQmFkIGxvZ2ljYWwgem9uZSBzaXplICVsZFxcXFxuXFxcIixcXG5mcy9pc29mcy9pbm9kZS5jLTk4Mi1cXHRcXHRzYmktXFx1MDAzZXNfbG9nX3pvbmVfc2l6ZSk7XFxuLS1cXG5mcy9pc29mcy9pbm9kZS5jLTk4NC1vdXRfYmFkX3NpemU6XFxuZnMvaXNvZnMvaW5vZGUuYzo5ODU6XFx0cHJpbnRrKEtFUk5fV0FSTklORyBcXFwiSVNPRlM6IExvZ2ljYWwgem9uZSBzaXplKCVkKSBcXHUwMDNjIGhhcmR3YXJlIGJsb2Nrc2l6ZSgldSlcXFxcblxcXCIsXFxuZnMvaXNvZnMvaW5vZGUuYy05ODYtXFx0XFx0b3JpZ196b25lc2l6ZSwgb3B0LVxcdTAwM2VibG9ja3NpemUpO1xcbi0tXFxuZnMvaXNvZnMvaW5vZGUuYy05ODktXFx0aWYgKCFzaWxlbnQpXFxuZnMvaXNvZnMvaW5vZGUuYzo5OTA6XFx0XFx0cHJpbnRrKEtFUk5fV0FSTklORyBcXFwiSVNPRlM6IFVuYWJsZSB0byBpZGVudGlmeSBDRC1ST00gZm9ybWF0LlxcXFxuXFxcIik7XFxuZnMvaXNvZnMvaW5vZGUuYy05OTEtXFxuLS1cXG5mcy9pc29mcy9pbm9kZS5jPTEwMDE9c3RhdGljIGludCBpc29mc19zdGF0ZnMgKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZilcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmMtMTAwNS1cXG5mcy9pc29mcy9pbm9kZS5jOjEwMDY6XFx0YnVmLVxcdTAwM2VmX3R5cGUgPSBJU09GU19TVVBFUl9NQUdJQztcXG5mcy9pc29mcy9pbm9kZS5jLTEwMDctXFx0YnVmLVxcdTAwM2VmX2JzaXplID0gc2ItXFx1MDAzZXNfYmxvY2tzaXplO1xcbmZzL2lzb2ZzL2lub2RlLmM6MTAwODpcXHRidWYtXFx1MDAzZWZfYmxvY2tzID0gKElTT0ZTX1NCKHNiKS1cXHUwMDNlc19uem9uZXNcXG5mcy9pc29mcy9pbm9kZS5jOjEwMDk6XFx0XFx0XFx1MDAzY1xcdTAwM2MgKElTT0ZTX1NCKHNiKS1cXHUwMDNlc19sb2dfem9uZV9zaXplIC0gc2ItXFx1MDAzZXNfYmxvY2tzaXplX2JpdHMpKTtcXG5mcy9pc29mcy9pbm9kZS5jLTEwMTAtXFx0YnVmLVxcdTAwM2VmX2JmcmVlID0gMDtcXG5mcy9pc29mcy9pbm9kZS5jLTEwMTEtXFx0YnVmLVxcdTAwM2VmX2JhdmFpbCA9IDA7XFxuZnMvaXNvZnMvaW5vZGUuYzoxMDEyOlxcdGJ1Zi1cXHUwMDNlZl9maWxlcyA9IElTT0ZTX1NCKHNiKS1cXHUwMDNlc19uaW5vZGVzO1xcbmZzL2lzb2ZzL2lub2RlLmMtMTAxMy1cXHRidWYtXFx1MDAzZWZfZmZyZWUgPSAwO1xcbi0tXFxuZnMvaXNvZnMvaW5vZGUuYz0xMDI0PWludCBpc29mc19nZXRfYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jayxcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmMtMTAzMS1cXHRpbnQgc2VjdGlvbiwgcnYsIGVycm9yO1xcbmZzL2lzb2ZzL2lub2RlLmM6MTAzMjpcXHRzdHJ1Y3QgaXNvX2lub2RlX2luZm8gKmVpID0gSVNPRlNfSShpbm9kZSk7XFxuZnMvaXNvZnMvaW5vZGUuYy0xMDMzLVxcbi0tXFxuZnMvaXNvZnMvaW5vZGUuYy0xMDQzLVxcdGZpcnN0ZXh0ID0gZWktXFx1MDAzZWlfZmlyc3RfZXh0ZW50O1xcbmZzL2lzb2ZzL2lub2RlLmM6MTA0NDpcXHRzZWN0X3NpemUgPSBlaS1cXHUwMDNlaV9zZWN0aW9uX3NpemUgXFx1MDAzZVxcdTAwM2UgSVNPRlNfQlVGRkVSX0JJVFMoaW5vZGUpO1xcbmZzL2lzb2ZzL2lub2RlLmMtMTA0NS1cXHRuZXh0YmxrID0gZWktXFx1MDAzZWlfbmV4dF9zZWN0aW9uX2Jsb2NrO1xcbi0tXFxuZnMvaXNvZnMvaW5vZGUuYy0xMDU2LVxcdFxcdCAqL1xcbmZzL2lzb2ZzL2lub2RlLmM6MTA1NzpcXHRcXHRpZiAoYl9vZmYgXFx1MDAzZSAoKGlub2RlLVxcdTAwM2VpX3NpemUgKyBQQUdFX1NJWkUgLSAxKSBcXHUwMDNlXFx1MDAzZSBJU09GU19CVUZGRVJfQklUUyhpbm9kZSkpKSB7XFxuZnMvaXNvZnMvaW5vZGUuYy0xMDU4LVxcdFxcdFxcdHByaW50ayhLRVJOX0RFQlVHIFxcXCIlczogYmxvY2sgXFx1MDAzZT0gRU9GICglbHUsICVsbHUpXFxcXG5cXFwiLFxcbi0tXFxuZnMvaXNvZnMvaW5vZGUuYy0xMDc2LVxcdFxcdFxcdH1cXG5mcy9pc29mcy9pbm9kZS5jOjEwNzc6XFx0XFx0XFx0Zmlyc3RleHQgID0gSVNPRlNfSShuaW5vZGUpLVxcdTAwM2VpX2ZpcnN0X2V4dGVudDtcXG5mcy9pc29mcy9pbm9kZS5jOjEwNzg6XFx0XFx0XFx0c2VjdF9zaXplID0gSVNPRlNfSShuaW5vZGUpLVxcdTAwM2VpX3NlY3Rpb25fc2l6ZSBcXHUwMDNlXFx1MDAzZSBJU09GU19CVUZGRVJfQklUUyhuaW5vZGUpO1xcbmZzL2lzb2ZzL2lub2RlLmM6MTA3OTpcXHRcXHRcXHRuZXh0YmxrICAgPSBJU09GU19JKG5pbm9kZSktXFx1MDAzZWlfbmV4dF9zZWN0aW9uX2Jsb2NrO1xcbmZzL2lzb2ZzL2lub2RlLmM6MTA4MDpcXHRcXHRcXHRuZXh0b2ZmICAgPSBJU09GU19JKG5pbm9kZSktXFx1MDAzZWlfbmV4dF9zZWN0aW9uX29mZnNldDtcXG5mcy9pc29mcy9pbm9kZS5jLTEwODEtXFx0XFx0XFx0aXB1dChuaW5vZGUpO1xcbi0tXFxuZnMvaXNvZnMvaW5vZGUuYz0xMTcxPXN0YXRpYyBpbnQgaXNvZnNfcmVhZF9sZXZlbDNfc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2lzb2ZzL2lub2RlLmMtMTE3Mi17XFxuZnMvaXNvZnMvaW5vZGUuYzoxMTczOlxcdHVuc2lnbmVkIGxvbmcgYnVmc2l6ZSA9IElTT0ZTX0JVRkZFUl9TSVpFKGlub2RlKTtcXG5mcy9pc29mcy9pbm9kZS5jOjExNzQ6XFx0aW50IGhpZ2hfc2llcnJhID0gSVNPRlNfU0IoaW5vZGUtXFx1MDAzZWlfc2IpLVxcdTAwM2VzX2hpZ2hfc2llcnJhO1xcbmZzL2lzb2ZzL2lub2RlLmMtMTE3NS1cXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDtcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmMtMTE3OS1cXHRzdHJ1Y3QgaXNvX2RpcmVjdG9yeV9yZWNvcmQgKnRtcGRlID0gTlVMTDtcXG5mcy9pc29mcy9pbm9kZS5jOjExODA6XFx0c3RydWN0IGlzb19pbm9kZV9pbmZvICplaSA9IElTT0ZTX0koaW5vZGUpO1xcbmZzL2lzb2ZzL2lub2RlLmMtMTE4MS1cXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmMtMTI2MC1vdXRfbm9yZWFkOlxcbmZzL2lzb2ZzL2lub2RlLmM6MTI2MTpcXHRwcmludGsoS0VSTl9JTkZPIFxcXCJJU09GUzogdW5hYmxlIHRvIHJlYWQgaS1ub2RlIGJsb2NrICVsdVxcXFxuXFxcIiwgYmxvY2spO1xcbmZzL2lzb2ZzL2lub2RlLmMtMTI2Mi1cXHRrZnJlZSh0bXBkZSk7XFxuLS1cXG5mcy9pc29mcy9pbm9kZS5jPTEyNzI9c3RhdGljIGludCBpc29mc19yZWFkX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCByZWxvY2F0ZWQpXFxuLS1cXG5mcy9pc29mcy9pbm9kZS5jLTEyNzQtXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVxcdTAwM2VpX3NiO1xcbmZzL2lzb2ZzL2lub2RlLmM6MTI3NTpcXHRzdHJ1Y3QgaXNvZnNfc2JfaW5mbyAqc2JpID0gSVNPRlNfU0Ioc2IpO1xcbmZzL2lzb2ZzL2lub2RlLmM6MTI3NjpcXHR1bnNpZ25lZCBsb25nIGJ1ZnNpemUgPSBJU09GU19CVUZGRVJfU0laRShpbm9kZSk7XFxuZnMvaXNvZnMvaW5vZGUuYy0xMjc3LVxcdHVuc2lnbmVkIGxvbmcgYmxvY2s7XFxuLS1cXG5mcy9pc29mcy9pbm9kZS5jLTEyODMtXFx0dW5zaWduZWQgbG9uZyBvZmZzZXQ7XFxuZnMvaXNvZnMvaW5vZGUuYzoxMjg0OlxcdHN0cnVjdCBpc29faW5vZGVfaW5mbyAqZWkgPSBJU09GU19JKGlub2RlKTtcXG5mcy9pc29mcy9pbm9kZS5jLTEyODUtXFx0aW50IHJldCA9IC1FSU87XFxuLS1cXG5mcy9pc29mcy9pbm9kZS5jLTEzMTgtXFx0XFx0XFx0XFx0XFx0ZWktXFx1MDAzZWlfaWdldDVfb2Zmc2V0LFxcbmZzL2lzb2ZzL2lub2RlLmM6MTMxOTpcXHRcXHRcXHRcXHRcXHRJU09GU19CVUZGRVJfQklUUyhpbm9kZSkpO1xcbmZzL2lzb2ZzL2lub2RlLmMtMTMyMC1cXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmMtMTMyNC1cXHRpZiAoZGUtXFx1MDAzZWZsYWdzWy1oaWdoX3NpZXJyYV0gXFx1MDAyNiAyKSB7XFxuZnMvaXNvZnMvaW5vZGUuYzoxMzI1OlxcdFxcdGlmIChzYmktXFx1MDAzZXNfZG1vZGUgIT0gSVNPRlNfSU5WQUxJRF9NT0RFKVxcbmZzL2lzb2ZzL2lub2RlLmMtMTMyNi1cXHRcXHRcXHRpbm9kZS1cXHUwMDNlaV9tb2RlID0gU19JRkRJUiB8IHNiaS1cXHUwMDNlc19kbW9kZTtcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmMtMTMzNi1cXHR9IGVsc2Uge1xcbmZzL2lzb2ZzL2lub2RlLmM6MTMzNzpcXHRcXHRpZiAoc2JpLVxcdTAwM2VzX2Ztb2RlICE9IElTT0ZTX0lOVkFMSURfTU9ERSkge1xcbmZzL2lzb2ZzL2lub2RlLmMtMTMzOC1cXHRcXHRcXHRpbm9kZS1cXHUwMDNlaV9tb2RlID0gU19JRlJFRyB8IHNiaS1cXHUwMDNlc19mbW9kZTtcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmMtMTM3OC1cXHRpZiAoZGUtXFx1MDAzZWludGVybGVhdmVbMF0pIHtcXG5mcy9pc29mcy9pbm9kZS5jOjEzNzk6XFx0XFx0cHJpbnRrKEtFUk5fREVCVUcgXFxcIklTT0ZTOiBJbnRlcmxlYXZlZCBmaWxlcyBub3QgKHlldCkgc3VwcG9ydGVkLlxcXFxuXFxcIik7XFxuZnMvaXNvZnMvaW5vZGUuYy0xMzgwLVxcdFxcdGlub2RlLVxcdTAwM2VpX3NpemUgPSAwO1xcbi0tXFxuZnMvaXNvZnMvaW5vZGUuYy0xMzg1LVxcdGlmIChkZS1cXHUwMDNlZmlsZV91bml0X3NpemVbMF0gIT0gMCkge1xcbmZzL2lzb2ZzL2lub2RlLmM6MTM4NjpcXHRcXHRwcmludGsoS0VSTl9ERUJVRyBcXFwiSVNPRlM6IEZpbGUgdW5pdCBzaXplICE9IDAgZm9yIElTTyBmaWxlICglbGx1KS5cXFxcblxcXCIsXFxuZnMvaXNvZnMvaW5vZGUuYy0xMzg3LVxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX2lubyk7XFxuLS1cXG5mcy9pc29mcy9pbm9kZS5jLTEzOTMtXFx0aWYoKGRlLVxcdTAwM2VmbGFnc1staGlnaF9zaWVycmFdIFxcdTAwMjYgfjIpIT0gMCl7XFxuZnMvaXNvZnMvaW5vZGUuYzoxMzk0OlxcdFxcdHByaW50ayhLRVJOX0RFQlVHIFxcXCJJU09GUzogVW51c3VhbCBmbGFnIHNldHRpbmdzIGZvciBJU08gZmlsZSBcXFwiXFxuZnMvaXNvZnMvaW5vZGUuYy0xMzk1LVxcdFxcdFxcdFxcdFxcXCIoJWxsdSAleCkuXFxcXG5cXFwiLFxcbi0tXFxuZnMvaXNvZnMvaW5vZGUuYy0xNDI0LVxcdGlmIChTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpIFxcdTAwMjZcXHUwMDI2IHNiaS1cXHUwMDNlc19vdmVycmlkZXJvY2twZXJtIFxcdTAwMjZcXHUwMDI2XFxuZnMvaXNvZnMvaW5vZGUuYzoxNDI1OlxcdCAgICBzYmktXFx1MDAzZXNfZG1vZGUgIT0gSVNPRlNfSU5WQUxJRF9NT0RFKVxcbmZzL2lzb2ZzL2lub2RlLmMtMTQyNi1cXHRcXHRpbm9kZS1cXHUwMDNlaV9tb2RlID0gU19JRkRJUiB8IHNiaS1cXHUwMDNlc19kbW9kZTtcXG5mcy9pc29mcy9pbm9kZS5jLTE0MjctXFx0aWYgKFNfSVNSRUcoaW5vZGUtXFx1MDAzZWlfbW9kZSkgXFx1MDAyNlxcdTAwMjYgc2JpLVxcdTAwM2VzX292ZXJyaWRlcm9ja3Blcm0gXFx1MDAyNlxcdTAwMjZcXG5mcy9pc29mcy9pbm9kZS5jOjE0Mjg6XFx0ICAgIHNiaS1cXHUwMDNlc19mbW9kZSAhPSBJU09GU19JTlZBTElEX01PREUpXFxuZnMvaXNvZnMvaW5vZGUuYy0xNDI5LVxcdFxcdGlub2RlLVxcdTAwM2VpX21vZGUgPSBTX0lGUkVHIHwgc2JpLVxcdTAwM2VzX2Ztb2RlO1xcbi0tXFxuZnMvaXNvZnMvaW5vZGUuYy0xNDM0LVxcdFxcdHN3aXRjaCAoZWktXFx1MDAzZWlfZmlsZV9mb3JtYXQpIHtcXG5mcy9pc29mcy9pbm9kZS5jOjE0MzU6I2lmZGVmIENPTkZJR19aSVNPRlNcXG5mcy9pc29mcy9pbm9kZS5jLTE0MzYtXFx0XFx0Y2FzZSBpc29mc19maWxlX2NvbXByZXNzZWQ6XFxuLS1cXG5mcy9pc29mcy9pbm9kZS5jLTE0NTUtXFx0fSBlbHNlIHtcXG5mcy9pc29mcy9pbm9kZS5jOjE0NTY6XFx0XFx0cHJpbnRrKEtFUk5fREVCVUcgXFxcIklTT0ZTOiBJbnZhbGlkIGZpbGUgdHlwZSAwJTA0byBmb3IgaW5vZGUgJWxsdS5cXFxcblxcXCIsXFxuZnMvaXNvZnMvaW5vZGUuYy0xNDU3LVxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX21vZGUsIGlub2RlLVxcdTAwM2VpX2lubyk7XFxuLS1cXG5mcy9pc29mcy9pbm9kZS5jLTE0Njgtb3V0X2JhZHJlYWQ6XFxuZnMvaXNvZnMvaW5vZGUuYzoxNDY5OlxcdHByaW50ayhLRVJOX1dBUk5JTkcgXFxcIklTT0ZTOiB1bmFibGUgdG8gcmVhZCBpLW5vZGUgYmxvY2tcXFxcblxcXCIpO1xcbmZzL2lzb2ZzL2lub2RlLmMtMTQ3MC1mYWlsOlxcbi0tXFxuZnMvaXNvZnMvaW5vZGUuYz0xNDc5PXN0YXRpYyBpbnQgaXNvZnNfaWdldDVfdGVzdChzdHJ1Y3QgaW5vZGUgKmlubywgdm9pZCAqZGF0YSlcXG5mcy9pc29mcy9pbm9kZS5jLTE0ODAte1xcbmZzL2lzb2ZzL2lub2RlLmM6MTQ4MTpcXHRzdHJ1Y3QgaXNvX2lub2RlX2luZm8gKmkgPSBJU09GU19JKGlubyk7XFxuZnMvaXNvZnMvaW5vZGUuYy0xNDgyLVxcdHN0cnVjdCBpc29mc19pZ2V0NV9jYWxsYmFja19kYXRhICpkID1cXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmM9MTQ4OD1zdGF0aWMgaW50IGlzb2ZzX2lnZXQ1X3NldChzdHJ1Y3QgaW5vZGUgKmlubywgdm9pZCAqZGF0YSlcXG5mcy9pc29mcy9pbm9kZS5jLTE0ODkte1xcbmZzL2lzb2ZzL2lub2RlLmM6MTQ5MDpcXHRzdHJ1Y3QgaXNvX2lub2RlX2luZm8gKmkgPSBJU09GU19JKGlubyk7XFxuZnMvaXNvZnMvaW5vZGUuYy0xNDkxLVxcdHN0cnVjdCBpc29mc19pZ2V0NV9jYWxsYmFja19kYXRhICpkID1cXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmM9MTU1OT1zdGF0aWMgaW50IGlzb2ZzX2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9pc29mcy9pbm9kZS5jLTE1NzUtXFx0b3B0LVxcdTAwM2VibG9ja3NpemUgPSAxMDI0O1xcbmZzL2lzb2ZzL2lub2RlLmM6MTU3NjpcXHRvcHQtXFx1MDAzZWZtb2RlID0gb3B0LVxcdTAwM2VkbW9kZSA9IElTT0ZTX0lOVkFMSURfTU9ERTtcXG5mcy9pc29mcy9pbm9kZS5jLTE1NzctXFx0b3B0LVxcdTAwM2V1aWRfc2V0ID0gMDtcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmM9MTYwMz1zdGF0aWMgaW50IF9faW5pdCBpbml0X2lzbzk2NjBfZnModm9pZClcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmMtMTYwNy1cXHRcXHRnb3RvIG91dDtcXG5mcy9pc29mcy9pbm9kZS5jOjE2MDg6I2lmZGVmIENPTkZJR19aSVNPRlNcXG5mcy9pc29mcy9pbm9kZS5jLTE2MDktXFx0ZXJyID0gemlzb2ZzX2luaXQoKTtcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmMtMTYxNy1vdXQyOlxcbmZzL2lzb2ZzL2lub2RlLmM6MTYxODojaWZkZWYgQ09ORklHX1pJU09GU1xcbmZzL2lzb2ZzL2lub2RlLmMtMTYxOS1cXHR6aXNvZnNfY2xlYW51cCgpO1xcbi0tXFxuZnMvaXNvZnMvaW5vZGUuYz0xNjI3PXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X2lzbzk2NjBfZnModm9pZClcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmMtMTYyOS0gICAgICAgIHVucmVnaXN0ZXJfZmlsZXN5c3RlbShcXHUwMDI2aXNvOTY2MF9mc190eXBlKTtcXG5mcy9pc29mcy9pbm9kZS5jOjE2MzA6I2lmZGVmIENPTkZJR19aSVNPRlNcXG5mcy9pc29mcy9pbm9kZS5jLTE2MzEtXFx0emlzb2ZzX2NsZWFudXAoKTtcXG4tLVxcbmZzL2lzb2ZzL2lzb2ZzLmg9MzI9c3RydWN0IGlzb2ZzX3NiX2luZm8ge1xcbi0tXFxuZnMvaXNvZnMvaXNvZnMuaC02NC1cXG5mcy9pc29mcy9pc29mcy5oOjY1OiNkZWZpbmUgSVNPRlNfSU5WQUxJRF9NT0RFICgodW1vZGVfdCkgLTEpXFxuZnMvaXNvZnMvaXNvZnMuaC02Ni1cXG5mcy9pc29mcy9pc29mcy5oOjY3OnN0YXRpYyBpbmxpbmUgc3RydWN0IGlzb2ZzX3NiX2luZm8gKklTT0ZTX1NCKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvaXNvZnMvaXNvZnMuaC02OC17XFxuLS1cXG5mcy9pc29mcy9pc29mcy5oLTcxLVxcbmZzL2lzb2ZzL2lzb2ZzLmg6NzI6c3RhdGljIGlubGluZSBzdHJ1Y3QgaXNvX2lub2RlX2luZm8gKklTT0ZTX0koc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9pc29mcy9pc29mcy5oLTczLXtcXG4tLVxcbmZzL2lzb2ZzL2pvbGlldC5jPTQyPWdldF9qb2xpZXRfZmlsZW5hbWUoc3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkICogZGUsIHVuc2lnbmVkIGNoYXIgKm91dG5hbWUsIHN0cnVjdCBpbm9kZSAqIGlub2RlKVxcbi0tXFxuZnMvaXNvZnMvam9saWV0LmMtNDYtXFxuZnMvaXNvZnMvam9saWV0LmM6NDc6XFx0bmxzID0gSVNPRlNfU0IoaW5vZGUtXFx1MDAzZWlfc2IpLVxcdTAwM2VzX25sc19pb2NoYXJzZXQ7XFxuZnMvaXNvZnMvam9saWV0LmMtNDgtXFxuLS1cXG5mcy9pc29mcy9uYW1laS5jPTQ5PWlzb2ZzX2ZpbmRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL2lzb2ZzL25hbWVpLmMtNTIte1xcbmZzL2lzb2ZzL25hbWVpLmM6NTM6XFx0dW5zaWduZWQgbG9uZyBidWZzaXplID0gSVNPRlNfQlVGRkVSX1NJWkUoZGlyKTtcXG5mcy9pc29mcy9uYW1laS5jOjU0OlxcdHVuc2lnbmVkIGNoYXIgYnVmYml0cyA9IElTT0ZTX0JVRkZFUl9CSVRTKGRpcik7XFxuZnMvaXNvZnMvbmFtZWkuYy01NS1cXHR1bnNpZ25lZCBsb25nIGJsb2NrLCBmX3Bvcywgb2Zmc2V0LCBibG9ja19zYXZlZCwgb2Zmc2V0X3NhdmVkO1xcbmZzL2lzb2ZzL25hbWVpLmMtNTYtXFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7XFxuZnMvaXNvZnMvbmFtZWkuYzo1NzpcXHRzdHJ1Y3QgaXNvZnNfc2JfaW5mbyAqc2JpID0gSVNPRlNfU0IoZGlyLVxcdTAwM2VpX3NiKTtcXG5mcy9pc29mcy9uYW1laS5jLTU4LVxcbmZzL2lzb2ZzL25hbWVpLmM6NTk6XFx0aWYgKCFJU09GU19JKGRpciktXFx1MDAzZWlfZmlyc3RfZXh0ZW50KVxcbmZzL2lzb2ZzL25hbWVpLmMtNjAtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5mcy9pc29mcy9uYW1laS5jLTgyLVxcdFxcdFxcdGJoID0gTlVMTDtcXG5mcy9pc29mcy9uYW1laS5jOjgzOlxcdFxcdFxcdGZfcG9zID0gKGZfcG9zICsgSVNPRlNfQkxPQ0tfU0laRSkgXFx1MDAyNiB+KElTT0ZTX0JMT0NLX1NJWkUgLSAxKTtcXG5mcy9pc29mcy9uYW1laS5jLTg0LVxcdFxcdFxcdGJsb2NrID0gZl9wb3MgXFx1MDAzZVxcdTAwM2UgYnVmYml0cztcXG4tLVxcbmZzL2lzb2ZzL3JvY2suYz00ND1zdGF0aWMgaW50IGNoZWNrX3NwKHN0cnVjdCByb2NrX3JpZGdlICpyciwgc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2lzb2ZzL3JvY2suYy00OS1cXHRcXHRyZXR1cm4gLTE7XFxuZnMvaXNvZnMvcm9jay5jOjUwOlxcdElTT0ZTX1NCKGlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc19yb2NrX29mZnNldCA9IHJyLVxcdTAwM2V1LlNQLnNraXA7XFxuZnMvaXNvZnMvcm9jay5jLTUxLVxcdHJldHVybiAwO1xcbi0tXFxuZnMvaXNvZnMvcm9jay5jPTU0PXN0YXRpYyB2b2lkIHNldHVwX3JvY2tfcmlkZ2Uoc3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkICpkZSxcXG4tLVxcbmZzL2lzb2ZzL3JvY2suYy02NC1cXG5mcy9pc29mcy9yb2NrLmM6NjU6XFx0aWYgKElTT0ZTX1NCKGlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc19yb2NrX29mZnNldCAhPSAtMSkge1xcbmZzL2lzb2ZzL3JvY2suYzo2NjpcXHRcXHRycy1cXHUwMDNlbGVuIC09IElTT0ZTX1NCKGlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc19yb2NrX29mZnNldDtcXG5mcy9pc29mcy9yb2NrLmM6Njc6XFx0XFx0cnMtXFx1MDAzZWNociArPSBJU09GU19TQihpbm9kZS1cXHUwMDNlaV9zYiktXFx1MDAzZXNfcm9ja19vZmZzZXQ7XFxuZnMvaXNvZnMvcm9jay5jLTY4LVxcdFxcdGlmIChycy1cXHUwMDNlbGVuIFxcdTAwM2MgMClcXG4tLVxcbmZzL2lzb2ZzL3JvY2suYz04Nj1zdGF0aWMgaW50IHJvY2tfY29udGludWUoc3RydWN0IHJvY2tfc3RhdGUgKnJzKVxcbi0tXFxuZnMvaXNvZnMvcm9jay5jLTg4LVxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBycy1cXHUwMDNlaW5vZGUtXFx1MDAzZWlfc2I7XFxuZnMvaXNvZnMvcm9jay5jOjg5OlxcdHN0cnVjdCBpc29mc19zYl9pbmZvICpzYmkgPSBJU09GU19TQihzYik7XFxuZnMvaXNvZnMvcm9jay5jLTkwLVxcdHU2NCBleHRlbnQgPSAodW5zaWduZWQgaW50KXJzLVxcdTAwM2Vjb250X2V4dGVudDtcXG5mcy9pc29mcy9yb2NrLmMtOTEtXFx0dTY0IHNlc3Npb25fZW5kID0gc2JpLVxcdTAwM2VzX3Nlc3Npb25fc3RhcnQgK1xcbmZzL2lzb2ZzL3JvY2suYzo5MjpcXHRcXHQoKHU2NClzYmktXFx1MDAzZXNfbnpvbmVzIFxcdTAwM2NcXHUwMDNjIChJU09GU19CTE9DS19CSVRTIC0gc2ItXFx1MDAzZXNfYmxvY2tzaXplX2JpdHMpKTtcXG5mcy9pc29mcy9yb2NrLmMtOTMtXFx0aW50IHJldCA9IDE7XFxuLS1cXG5mcy9pc29mcy9yb2NrLmM9MjE2PWludCBnZXRfcm9ja19yaWRnZV9maWxlbmFtZShzdHJ1Y3QgaXNvX2RpcmVjdG9yeV9yZWNvcmQgKmRlLFxcbi0tXFxuZnMvaXNvZnMvcm9jay5jLTIyNy1cXG5mcy9pc29mcy9yb2NrLmM6MjI4OlxcdGlmICghSVNPRlNfU0IoaW5vZGUtXFx1MDAzZWlfc2IpLVxcdTAwM2VzX3JvY2spXFxuZnMvaXNvZnMvcm9jay5jLTIyOS1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmZzL2lzb2ZzL3JvY2suYz0zMjc9cGFyc2Vfcm9ja19yaWRnZV9pbm9kZV9pbnRlcm5hbChzdHJ1Y3QgaXNvX2RpcmVjdG9yeV9yZWNvcmQgKmRlLFxcbi0tXFxuZnMvaXNvZnMvcm9jay5jLTMzOC1cXG5mcy9pc29mcy9yb2NrLmM6MzM5OlxcdGlmICghSVNPRlNfU0IoaW5vZGUtXFx1MDAzZWlfc2IpLVxcdTAwM2VzX3JvY2spXFxuZnMvaXNvZnMvcm9jay5jLTM0MC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmZzL2lzb2ZzL3JvY2suYy0zNzMtXFx0XFx0c3dpdGNoIChzaWcpIHtcXG5mcy9pc29mcy9yb2NrLmM6Mzc0OiNpZm5kZWYgQ09ORklHX1pJU09GU1xcdFxcdC8qIE5vIGZsYWcgZm9yIFNGIG9yIFpGICovXFxuZnMvaXNvZnMvcm9jay5jLTM3NS1cXHRcXHRjYXNlIFNJRygnUicsICdSJyk6XFxuLS1cXG5mcy9pc29mcy9yb2NrLmMtMzkzLVxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbmZzL2lzb2ZzL3JvY2suYzozOTQ6XFx0XFx0XFx0SVNPRlNfU0IoaW5vZGUtXFx1MDAzZWlfc2IpLVxcdTAwM2VzX3JvY2sgPSAxO1xcbmZzL2lzb2ZzL3JvY2suYy0zOTUtXFx0XFx0XFx0cHJpbnRrKEtFUk5fREVCVUcgXFxcIklTTyA5NjYwIEV4dGVuc2lvbnM6IFxcXCIpO1xcbi0tXFxuZnMvaXNvZnMvcm9jay5jLTUzMy1cXHRcXHRcXHRcXHRwcmludGsoS0VSTl9FUlJcXG5mcy9pc29mcy9yb2NrLmM6NTM0OlxcdFxcdFxcdFxcdCAgICAgICBcXFwiSVNPRlM6IFJlY3Vyc2l2ZSBkaXJlY3RvcnkgcmVsb2NhdGlvbiBcXFwiXFxuZnMvaXNvZnMvcm9jay5jLTUzNS1cXHRcXHRcXHRcXHQgICAgICAgXFxcImlzIG5vdCBzdXBwb3J0ZWRcXFxcblxcXCIpO1xcbi0tXFxuZnMvaXNvZnMvcm9jay5jLTUzOC1cXHRcXHRcXHRyZWxvY19ibG9jayA9IGlzb251bV83MzMocnItXFx1MDAzZXUuQ0wubG9jYXRpb24pO1xcbmZzL2lzb2ZzL3JvY2suYzo1Mzk6XFx0XFx0XFx0aWYgKHJlbG9jX2Jsb2NrID09IElTT0ZTX0koaW5vZGUpLVxcdTAwM2VpX2lnZXQ1X2Jsb2NrIFxcdTAwMjZcXHUwMDI2XFxuZnMvaXNvZnMvcm9jay5jOjU0MDpcXHRcXHRcXHQgICAgSVNPRlNfSShpbm9kZSktXFx1MDAzZWlfaWdldDVfb2Zmc2V0ID09IDApIHtcXG5mcy9pc29mcy9yb2NrLmMtNTQxLVxcdFxcdFxcdFxcdHByaW50ayhLRVJOX0VSUlxcbmZzL2lzb2ZzL3JvY2suYzo1NDI6XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJJU09GUzogRGlyZWN0b3J5IHJlbG9jYXRpb24gcG9pbnRzIHRvIFxcXCJcXG5mcy9pc29mcy9yb2NrLmMtNTQzLVxcdFxcdFxcdFxcdCAgICAgICBcXFwiaXRzZWxmXFxcXG5cXFwiKTtcXG4tLVxcbmZzL2lzb2ZzL3JvY2suYy01NDUtXFx0XFx0XFx0fVxcbmZzL2lzb2ZzL3JvY2suYzo1NDY6XFx0XFx0XFx0SVNPRlNfSShpbm9kZSktXFx1MDAzZWlfZmlyc3RfZXh0ZW50ID0gcmVsb2NfYmxvY2s7XFxuZnMvaXNvZnMvcm9jay5jLTU0Ny1cXHRcXHRcXHRyZWxvYyA9IGlzb2ZzX2lnZXRfcmVsb2MoaW5vZGUtXFx1MDAzZWlfc2IsIHJlbG9jX2Jsb2NrLCAwKTtcXG4tLVxcbmZzL2lzb2ZzL3JvY2suYy01NjMtXFx0XFx0XFx0YnJlYWs7XFxuZnMvaXNvZnMvcm9jay5jOjU2NDojaWZkZWYgQ09ORklHX1pJU09GU1xcbmZzL2lzb2ZzL3JvY2suYy01NjUtXFx0XFx0Y2FzZSBTSUcoJ1onLCAnRicpOiB7XFxuLS1cXG5mcy9pc29mcy9yb2NrLmMtNTY3LVxcbmZzL2lzb2ZzL3JvY2suYzo1Njg6XFx0XFx0XFx0aWYgKElTT0ZTX1NCKGlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc19ub2NvbXByZXNzKVxcbmZzL2lzb2ZzL3JvY2suYy01NjktXFx0XFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5mcy9pc29mcy9yb2NrLmMtNTgzLVxcdFxcdFxcdFxcdFxcdCAqL1xcbmZzL2lzb2ZzL3JvY2suYzo1ODQ6XFx0XFx0XFx0XFx0XFx0SVNPRlNfSShpbm9kZSktXFx1MDAzZWlfZmlsZV9mb3JtYXQgPVxcbmZzL2lzb2ZzL3JvY2suYy01ODUtXFx0XFx0XFx0XFx0XFx0XFx0aXNvZnNfZmlsZV9jb21wcmVzc2VkO1xcbi0tXFxuZnMvaXNvZnMvcm9jay5jLTU5MC1cXHRcXHRcXHRcXHRcXHQgKi9cXG5mcy9pc29mcy9yb2NrLmM6NTkxOlxcdFxcdFxcdFxcdFxcdElTT0ZTX0koaW5vZGUpLVxcdTAwM2VpX2Zvcm1hdF9wYXJtWzBdID1cXG5mcy9pc29mcy9yb2NrLmMtNTkyLVxcdFxcdFxcdFxcdFxcdFxcdGlzb251bV83MTEoXFx1MDAyNnJyLVxcdTAwM2V1LlpGLnBhcm1zWzBdKTtcXG5mcy9pc29mcy9yb2NrLmM6NTkzOlxcdFxcdFxcdFxcdFxcdElTT0ZTX0koaW5vZGUpLVxcdTAwM2VpX2Zvcm1hdF9wYXJtWzFdID1cXG5mcy9pc29mcy9yb2NrLmMtNTk0LVxcdFxcdFxcdFxcdFxcdFxcdGlzb251bV83MTEoXFx1MDAyNnJyLVxcdTAwM2V1LlpGLnBhcm1zWzFdKTtcXG4tLVxcbmZzL2lzb2ZzL3JvY2suYz03MDI9aW50IHBhcnNlX3JvY2tfcmlkZ2VfaW5vZGUoc3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkICpkZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2lzb2ZzL3JvY2suYy03MTEtXFx0ICovXFxuZnMvaXNvZnMvcm9jay5jOjcxMjpcXHRpZiAoKElTT0ZTX1NCKGlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc19yb2NrX29mZnNldCA9PSAtMSlcXG5mcy9pc29mcy9yb2NrLmM6NzEzOlxcdCAgICBcXHUwMDI2XFx1MDAyNiAoSVNPRlNfU0IoaW5vZGUtXFx1MDAzZWlfc2IpLVxcdTAwM2VzX3JvY2sgPT0gMikpIHtcXG5mcy9pc29mcy9yb2NrLmMtNzE0LVxcdFxcdHJlc3VsdCA9IHBhcnNlX3JvY2tfcmlkZ2VfaW5vZGVfaW50ZXJuYWwoZGUsIGlub2RlLFxcbi0tXFxuZnMvaXNvZnMvcm9jay5jPTcyND1zdGF0aWMgaW50IHJvY2tfcmlkZ2Vfc3ltbGlua19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuZnMvaXNvZnMvcm9jay5jLTcyNi1cXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZm9saW8tXFx1MDAzZW1hcHBpbmctXFx1MDAzZWhvc3Q7XFxuZnMvaXNvZnMvcm9jay5jOjcyNzpcXHRzdHJ1Y3QgaXNvX2lub2RlX2luZm8gKmVpID0gSVNPRlNfSShpbm9kZSk7XFxuZnMvaXNvZnMvcm9jay5jOjcyODpcXHRzdHJ1Y3QgaXNvZnNfc2JfaW5mbyAqc2JpID0gSVNPRlNfU0IoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbmZzL2lzb2ZzL3JvY2suYy03MjktXFx0Y2hhciAqbGluayA9IGZvbGlvX2FkZHJlc3MoZm9saW8pO1xcbmZzL2lzb2ZzL3JvY2suYzo3MzA6XFx0dW5zaWduZWQgbG9uZyBidWZzaXplID0gSVNPRlNfQlVGRkVSX1NJWkUoaW5vZGUpO1xcbmZzL2lzb2ZzL3JvY2suYy03MzEtXFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcXG4tLVxcbmZzL2lzb2ZzL3ppc29mcy5oLTExLVxcbmZzL2lzb2ZzL3ppc29mcy5oOjEyOiNpZmRlZiBDT05GSUdfWklTT0ZTXFxuZnMvaXNvZnMvemlzb2ZzLmgtMTMtZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgemlzb2ZzX2FvcHM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEyOjE1OjM5LjQ5MjQ4OTA4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk0MzcwNTk5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkV4YW1pbmluZyB0aGUgSVNPRlMgS2NvbmZpZyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGBmcy9pc29mcy9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgSVNPIDk2NjAgZmlsZXN5c3RlbSBkcml2ZXIgYXJlIGRlZmluZWQsIHRoZSBoZWFydCBvZiBob3cgd2UgY29uZmlndXJlIHRoZSBrZXJuZWwncyBzdXBwb3J0IGZvciByZWFkaW5nIENELVJPTXMgYW5kIG90aGVyIG9wdGljYWwgbWVkaWEuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZSwgd2hhdCB0aGVpciBkZXBlbmRlbmNpZXMgYXJlLCBhbmQgYW55IHBvdGVudGlhbCBjb25mbGljdHMuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gd2hldGhlciB0aGVyZSBoYXZlIGJlZW4gYW55IHJlY2VudCBjaGFuZ2VzLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0YW5kYXJkIHN0dWZmOiBgQ09ORklHX0lTTzk2NjBfRlNgIHRvIGVuYWJsZSB0aGUgYmFzaWMgZHJpdmVyLCBvcHRpb25zIGZvciBSb2NrIFJpZGdlIGV4dGVuc2lvbnMsIEpvbGlldCBzdXBwb3J0LCBtYXliZSBldmVuIHNvbWUgcXVpcmt5IGxlZ2FjeSBmZWF0dXJlcy4gTXkgYXR0ZW50aW9uIHdpbGwgYmUgbGFzZXItZm9jdXNlZCBvbiBhbnl0aGluZyByZWxhdGVkIHRvIHNlY3VyaXR5IGZlYXR1cmVzLCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zLCBhbmQgYW55IHBvdGVudGlhbCBuZXcgYWRkaXRpb25zIEkgc2hvdWxkIGtub3cgYWJvdXQuIExldCdzIHNlZSB3aGF0IGdlbXMgd2UgY2FuIGZpbmQgaW4gdGhpcyBLY29uZmlnIGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjI1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTI6MTU6NDIuNDM2MTk3MTk1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvaXNvZnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIElTTzk2NjBfRlNcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJJU08gOTY2MCBDRFJPTSBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0c2VsZWN0IEJVRkZFUl9IRUFEXFxuICAgNTpcXHRcXHRoZWxwXFxuICAgNjpcXHRcXHQgIFRoaXMgaXMgdGhlIHN0YW5kYXJkIGZpbGUgc3lzdGVtIHVzZWQgb24gQ0QtUk9Ncy4gIEl0IHdhcyBwcmV2aW91c2x5XFxuICAgNzpcXHRcXHQgIGtub3duIGFzIFxcXCJIaWdoIFNpZXJyYSBGaWxlIFN5c3RlbVxcXCIgYW5kIGlzIGNhbGxlZCBcXFwiaHNmc1xcXCIgb24gb3RoZXJcXG4gICA4OlxcdFxcdCAgVW5peCBzeXN0ZW1zLiAgVGhlIHNvLWNhbGxlZCBSb2NrLVJpZGdlIGV4dGVuc2lvbnMgd2hpY2ggYWxsb3cgZm9yXFxuICAgOTpcXHRcXHQgIGxvbmcgVW5peCBmaWxlbmFtZXMgYW5kIHN5bWJvbGljIGxpbmtzIGFyZSBhbHNvIHN1cHBvcnRlZCBieSB0aGlzXFxuICAxMDpcXHRcXHQgIGRyaXZlci4gIElmIHlvdSBoYXZlIGEgQ0QtUk9NIGRyaXZlIGFuZCB3YW50IHRvIGRvIG1vcmUgd2l0aCBpdCB0aGFuXFxuICAxMTpcXHRcXHQgIGp1c3QgbGlzdGVuIHRvIGF1ZGlvIENEcyBhbmQgd2F0Y2ggaXRzIExFRHMsIHNheSBZIChhbmQgcmVhZFxcbiAgMTI6XFx0XFx0ICBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2lzb2ZzLnJzdFxcdTAwM2UgYW5kIHRoZSBDRC1ST00tSE9XVE8sXFxuICAxMzpcXHRcXHQgIGF2YWlsYWJsZSBmcm9tIFxcdTAwM2NodHRwOi8vd3d3LnRsZHAub3JnL2RvY3MuaHRtbCNob3d0b1xcdTAwM2UpLCB0aGVyZWJ5XFxuICAxNDpcXHRcXHQgIGVubGFyZ2luZyB5b3VyIGtlcm5lbCBieSBhYm91dCAyNyBLQjsgb3RoZXJ3aXNlIHNheSBOLlxcbiAgMTU6XFx0XFxuICAxNjpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBmaWxlIHN5c3RlbSBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gIDE3OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGlzb2ZzLlxcbiAgMTg6XFx0XFxuICAxOTpcXHRjb25maWcgSk9MSUVUXFxuICAyMDpcXHRcXHRib29sIFxcXCJNaWNyb3NvZnQgSm9saWV0IENEUk9NIGV4dGVuc2lvbnNcXFwiXFxuICAyMTpcXHRcXHRkZXBlbmRzIG9uIElTTzk2NjBfRlNcXG4gIDIyOlxcdFxcdHNlbGVjdCBOTFNcXG4gIDIzOlxcdFxcdGhlbHBcXG4gIDI0OlxcdFxcdCAgSm9saWV0IGlzIGEgTWljcm9zb2Z0IGV4dGVuc2lvbiBmb3IgdGhlIElTTyA5NjYwIENELVJPTSBmaWxlIHN5c3RlbVxcbiAgMjU6XFx0XFx0ICB3aGljaCBhbGxvd3MgZm9yIGxvbmcgZmlsZW5hbWVzIGluIHVuaWNvZGUgZm9ybWF0ICh1bmljb2RlIGlzIHRoZVxcbiAgMjY6XFx0XFx0ICBuZXcgMTYgYml0IGNoYXJhY3RlciBjb2RlLCBzdWNjZXNzb3IgdG8gQVNDSUksIHdoaWNoIGVuY29kZXMgdGhlXFxuICAyNzpcXHRcXHQgIGNoYXJhY3RlcnMgb2YgYWxtb3N0IGFsbCBsYW5ndWFnZXMgb2YgdGhlIHdvcmxkOyBzZWVcXG4gIDI4OlxcdFxcdCAgXFx1MDAzY2h0dHA6Ly93d3cudW5pY29kZS5vcmcvXFx1MDAzZSBmb3IgbW9yZSBpbmZvcm1hdGlvbikuICBTYXkgWSBoZXJlIGlmIHlvdVxcbiAgMjk6XFx0XFx0ICB3YW50IHRvIGJlIGFibGUgdG8gcmVhZCBKb2xpZXQgQ0QtUk9NcyB1bmRlciBMaW51eC5cXG4gIDMwOlxcdFxcbiAgMzE6XFx0Y29uZmlnIFpJU09GU1xcbiAgMzI6XFx0XFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgZGVjb21wcmVzc2lvbiBleHRlbnNpb25cXFwiXFxuICAzMzpcXHRcXHRkZXBlbmRzIG9uIElTTzk2NjBfRlNcXG4gIDM0OlxcdFxcdHNlbGVjdCBaTElCX0lORkxBVEVcXG4gIDM1OlxcdFxcdGhlbHBcXG4gIDM2OlxcdFxcdCAgVGhpcyBpcyBhIExpbnV4LXNwZWNpZmljIGV4dGVuc2lvbiB0byBSb2NrUmlkZ2Ugd2hpY2ggbGV0cyB5b3Ugc3RvcmVcXG4gIDM3OlxcdFxcdCAgZGF0YSBpbiBjb21wcmVzc2VkIGZvcm0gb24gYSBDRC1ST00gYW5kIGhhdmUgaXQgdHJhbnNwYXJlbnRseVxcbiAgMzg6XFx0XFx0ICBkZWNvbXByZXNzZWQgd2hlbiB0aGUgQ0QtUk9NIGlzIGFjY2Vzc2VkLiAgU2VlXFxuICAzOTpcXHRcXHQgIFxcdTAwM2NodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L3V0aWxzL2ZzL3ppc29mcy9cXHUwMDNlIGZvciB0aGUgdG9vbHNcXG4gIDQwOlxcdFxcdCAgbmVjZXNzYXJ5IHRvIGNyZWF0ZSBzdWNoIGEgZmlsZXN5c3RlbS4gIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gYmVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTI6MTU6NDIuNDM2MjU3NzQ1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTg0NTM4NjY4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipBbmFseXppbmcgSVNPIDk2NjAgUm9jayBSaWRnZSBFeHRlbnNpb25zKipcblxuQWxyaWdodCwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYGZzL2lzb2ZzL3JvY2suY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgUm9jayBSaWRnZSBleHRlbnNpb25zIGFyZSBoYW5kbGVkLCBzbyB0aGUgYXJlYSBhcm91bmQgYHJvY2tfY29udGludWVgIGlzIGNydWNpYWwuIFRoYXQgZnVuY3Rpb24gaXMgbGlrZWx5IGEga2V5IHBpZWNlIGluIHByb2Nlc3NpbmcgdGhlIGV4dGVuZGVkIGF0dHJpYnV0ZXMuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgY2FsbGVycy5cblxuSSdsbCB0aGVuIHBpdm90IG15IGF0dGVudGlvbiB0byB0aGUgcGFyc2luZyBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBgcGFyc2Vfcm9ja19yaWRnZV9pbm9kZWAuIFRoYXQncyB3aGVyZSB0aGUgaW5vZGUgaW5mb3JtYXRpb24gZ2V0cyBpbnRlcnByZXRlZCwgYW5kIGBnZXRfcm9ja19yaWRnZV9maWxlbmFtZWAgaXMgYW5vdGhlciBjcml0aWNhbCBwaWVjZSwgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBjb25zdHJ1Y3RpbmcgdGhlIGFjdHVhbCBmaWxlbmFtZXMgYmFzZWQgb24gdGhlIFJvY2sgUmlkZ2UgZXh0ZW5zaW9ucy4gVW5kZXJzdGFuZGluZyB0aGVpciBpbnRlcmFjdGlvbnMgd2lsbCByZXZlYWwgaG93IHRoZSBleHRlbmRlZCBmaWxlc3lzdGVtIG1ldGFkYXRhIGlzIGFjY2Vzc2VkIGFuZCB0cmFuc2Zvcm1lZCBmb3IgdGhlIGVuZC11c2VyLiBFc3NlbnRpYWxseSwgSSBuZWVkIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cgZnJvbSB0aGUgcmF3IElTTyBpbWFnZSBmb3JtYXQgdG8gdGhlIFBPU0lYLWNvbXBhdGlibGUgcmVwcmVzZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTg3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMjoxNTo0OC4yODE2NDYyNTFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9pc29mcy9yb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgODA6XFx0I2RlZmluZSBSUl9NQVhfQ0VfRU5UUklFUyAzMlxcbiAgODE6XFx0XFxuICA4MjpcXHQvKlxcbiAgODM6XFx0ICogUmV0dXJucyAwIGlmIHRoZSBjYWxsZXIgc2hvdWxkIGNvbnRpbnVlIHNjYW5uaW5nLCAxIGlmIHRoZSBzY2FuIG11c3QgZW5kXFxuICA4NDpcXHQgKiBhbmQgLXZlIG9uIGVycm9yLlxcbiAgODU6XFx0ICovXFxuICA4NjpcXHRzdGF0aWMgaW50IHJvY2tfY29udGludWUoc3RydWN0IHJvY2tfc3RhdGUgKnJzKVxcbiAgODc6XFx0e1xcbiAgODg6XFx0XFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHJzLVxcdTAwM2Vpbm9kZS1cXHUwMDNlaV9zYjtcXG4gIDg5OlxcdFxcdHN0cnVjdCBpc29mc19zYl9pbmZvICpzYmkgPSBJU09GU19TQihzYik7XFxuICA5MDpcXHRcXHR1NjQgZXh0ZW50ID0gKHVuc2lnbmVkIGludClycy1cXHUwMDNlY29udF9leHRlbnQ7XFxuICA5MTpcXHRcXHR1NjQgc2Vzc2lvbl9lbmQgPSBzYmktXFx1MDAzZXNfc2Vzc2lvbl9zdGFydCArXFxuICA5MjpcXHRcXHRcXHQoKHU2NClzYmktXFx1MDAzZXNfbnpvbmVzIFxcdTAwM2NcXHUwMDNjIChJU09GU19CTE9DS19CSVRTIC0gc2ItXFx1MDAzZXNfYmxvY2tzaXplX2JpdHMpKTtcXG4gIDkzOlxcdFxcdGludCByZXQgPSAxO1xcbiAgOTQ6XFx0XFx0aW50IGJsb2Nrc2l6ZSA9IDEgXFx1MDAzY1xcdTAwM2MgcnMtXFx1MDAzZWlub2RlLVxcdTAwM2VpX2Jsa2JpdHM7XFxuICA5NTpcXHRcXHRjb25zdCBpbnQgbWluX2RlX3NpemUgPSBvZmZzZXRvZihzdHJ1Y3Qgcm9ja19yaWRnZSwgdSk7XFxuICA5NjpcXHRcXG4gIDk3OlxcdFxcdGtmcmVlKHJzLVxcdTAwM2VidWZmZXIpO1xcbiAgOTg6XFx0XFx0cnMtXFx1MDAzZWJ1ZmZlciA9IE5VTEw7XFxuICA5OTpcXHRcXG4gMTAwOlxcdFxcdGlmICgodW5zaWduZWQpcnMtXFx1MDAzZWNvbnRfb2Zmc2V0IFxcdTAwM2UgYmxvY2tzaXplIC0gbWluX2RlX3NpemUgfHxcXG4gMTAxOlxcdFxcdCAgICAodW5zaWduZWQpcnMtXFx1MDAzZWNvbnRfc2l6ZSBcXHUwMDNlIGJsb2Nrc2l6ZSB8fFxcbiAxMDI6XFx0XFx0ICAgICh1bnNpZ25lZCkocnMtXFx1MDAzZWNvbnRfb2Zmc2V0ICsgcnMtXFx1MDAzZWNvbnRfc2l6ZSkgXFx1MDAzZSBibG9ja3NpemUpIHtcXG4gMTAzOlxcdFxcdFxcdHByaW50ayhLRVJOX05PVElDRSBcXFwicm9jazogY29ycnVwdGVkIGRpcmVjdG9yeSBlbnRyeS4gXFxcIlxcbiAxMDQ6XFx0XFx0XFx0XFx0XFxcImV4dGVudD0lZCwgb2Zmc2V0PSVkLCBzaXplPSVkXFxcXG5cXFwiLFxcbiAxMDU6XFx0XFx0XFx0XFx0cnMtXFx1MDAzZWNvbnRfZXh0ZW50LCBycy1cXHUwMDNlY29udF9vZmZzZXQsIHJzLVxcdTAwM2Vjb250X3NpemUpO1xcbiAxMDY6XFx0XFx0XFx0cmV0ID0gLUVJTztcXG4gMTA3OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAxMDg6XFx0XFx0fVxcbiAxMDk6XFx0XFxuIDExMDpcXHRcXHRpZiAocnMtXFx1MDAzZWNvbnRfZXh0ZW50IFxcdTAwMjZcXHUwMDI2XFxuIDExMTpcXHRcXHQgICAgKGV4dGVudCBcXHUwMDNjIHNiaS1cXHUwMDNlc19zZXNzaW9uX3N0YXJ0IHx8XFxuIDExMjpcXHRcXHQgICAgIGV4dGVudCBcXHUwMDNlPSBzZXNzaW9uX2VuZCB8fFxcbiAxMTM6XFx0XFx0ICAgICBleHRlbnQgXFx1MDAzZT0gc2JfYmRldl9ucl9ibG9ja3Moc2IpKSkge1xcbiAxMTQ6XFx0XFx0XFx0cHJpbnRrKEtFUk5fTk9USUNFIFxcXCJyb2NrOiBjb3JydXB0ZWQgZGlyZWN0b3J5IGVudHJ5LiBcXFwiXFxuIDExNTpcXHRcXHRcXHRcXHRcXFwiZXh0ZW50PSV1IG91dCBvZiB2b2x1bWUgKG56b25lcz0lbHUpXFxcXG5cXFwiLFxcbiAxMTY6XFx0XFx0XFx0XFx0KHVuc2lnbmVkKXJzLVxcdTAwM2Vjb250X2V4dGVudCxcXG4gMTE3OlxcdFxcdFxcdFxcdHNiaS1cXHUwMDNlc19uem9uZXMpO1xcbiAxMTg6XFx0XFx0XFx0cmV0ID0gLUVJTztcXG4gMTE5OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAxMjA6XFx0XFx0fVxcbiAxMjE6XFx0XFxuIDEyMjpcXHRcXHRpZiAocnMtXFx1MDAzZWNvbnRfZXh0ZW50KSB7XFxuIDEyMzpcXHRcXHRcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoO1xcbiAxMjQ6XFx0XFxuIDEyNTpcXHRcXHRcXHRycy1cXHUwMDNlYnVmZmVyID0ga21hbGxvYyhycy1cXHUwMDNlY29udF9zaXplLCBHRlBfS0VSTkVMKTtcXG4gMTI2OlxcdFxcdFxcdGlmICghcnMtXFx1MDAzZWJ1ZmZlcikge1xcbiAxMjc6XFx0XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4gMTI4OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiAxMjk6XFx0XFx0XFx0fVxcbiAxMzA6XFx0XFx0XFx0cmV0ID0gLUVJTztcXG4gMTMxOlxcdFxcdFxcdGlmICgrK3JzLVxcdTAwM2Vjb250X2xvb3BzIFxcdTAwM2U9IFJSX01BWF9DRV9FTlRSSUVTKVxcbiAxMzI6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDEzMzpcXHRcXHRcXHRiaCA9IHNiX2JyZWFkKHJzLVxcdTAwM2Vpbm9kZS1cXHUwMDNlaV9zYiwgcnMtXFx1MDAzZWNvbnRfZXh0ZW50KTtcXG4gMTM0OlxcdFxcdFxcdGlmIChiaCkge1xcbiAxMzU6XFx0XFx0XFx0XFx0bWVtY3B5KHJzLVxcdTAwM2VidWZmZXIsIGJoLVxcdTAwM2ViX2RhdGEgKyBycy1cXHUwMDNlY29udF9vZmZzZXQsXFxuIDEzNjpcXHRcXHRcXHRcXHRcXHRcXHRycy1cXHUwMDNlY29udF9zaXplKTtcXG4gMTM3OlxcdFxcdFxcdFxcdHB1dF9iaChiaCk7XFxuIDEzODpcXHRcXHRcXHRcXHRycy1cXHUwMDNlY2hyID0gcnMtXFx1MDAzZWJ1ZmZlcjtcXG4gMTM5OlxcdFxcdFxcdFxcdHJzLVxcdTAwM2VsZW4gPSBycy1cXHUwMDNlY29udF9zaXplO1xcbiAxNDA6XFx0XFx0XFx0XFx0cnMtXFx1MDAzZWNvbnRfZXh0ZW50ID0gMDtcXG4gMTQxOlxcdFxcdFxcdFxcdHJzLVxcdTAwM2Vjb250X3NpemUgPSAwO1xcbiAxNDI6XFx0XFx0XFx0XFx0cnMtXFx1MDAzZWNvbnRfb2Zmc2V0ID0gMDtcXG4gMTQzOlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbiAxNDQ6XFx0XFx0XFx0fVxcbiAxNDU6XFx0XFx0XFx0cHJpbnRrKFxcXCJVbmFibGUgdG8gcmVhZCByb2NrLXJpZGdlIGF0dHJpYnV0ZXNcXFxcblxcXCIpO1xcbiAxNDY6XFx0XFx0fVxcbiAxNDc6XFx0b3V0OlxcbiAxNDg6XFx0XFx0a2ZyZWUocnMtXFx1MDAzZWJ1ZmZlcik7XFxuIDE0OTpcXHRcXHRycy1cXHUwMDNlYnVmZmVyID0gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTI6MTU6NDguMjgxNzMzMjIxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzI0MjgzMzc2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBDYWxsIFBhdGhzIFJlbGF0ZWQgdG8gYHJvY2tfY29udGludWVgIGFuZCBSb2NrIFJpZGdlIFBhcnNpbmcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBjYWxsIGdyYXBoLiBUaGUgaW5pdGlhbCBxdWVzdGlvbiBpcyBzdHJhaWdodGZvcndhcmQ6ICp3aG8qIGlzIGNhbGxpbmcgdGhlIGByb2NrX2NvbnRpbnVlYCBmdW5jdGlvbj8gVW5kZXJzdGFuZGluZyBpdHMgaW1tZWRpYXRlIGNhbGxlcnMgaXMgdGhlIGNydWNpYWwgZmlyc3Qgc3RlcC4gSXQgZ2l2ZXMgbWUgYSBzdGFydGluZyBwb2ludCB0byBzZWUgd2hhdCBjb2RlIHBhdGhzIGFyZSBhY3RpdmVseSB1c2luZyB0aGlzIGZ1bmN0aW9uLlxuXG5CdXQgSSBjYW4ndCBzdG9wIHRoZXJlLiBJIGFsc28gbmVlZCB0byBicm9hZGVuIHRoZSBzY29wZSBhbmQgZXhhbWluZSBhbGwgdGhlIGNhbGxlcnMgKmludm9sdmVkKiB3aXRoIFJvY2sgUmlkZ2UgcGFyc2luZyBsb2dpYyBtb3JlIGdlbmVyYWxseS4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjayBhcyBmYXIgYXMgcG9zc2libGUuIEknbSB0aGlua2luZyBJJ2xsIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSB0d28gZ3JvdXBzIGludGVyc2VjdCBhbmQgaW50ZXJhY3Qgd2l0aCBlYWNoIG90aGVyLiBJdCBtYXkgYmUgdGhhdCB0aGVyZSBpcyBhIGJ1ZyBvciB1bndhbnRlZCBiZWhhdmlvciB0aGF0IEkgY2FuIGZpeCBvciByZWZhY3Rvci4gVGhlIHF1ZXN0aW9uIGlzLCBob3cgZmFyIGJhY2sgc2hvdWxkIEkgZ28/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NTg0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMjoxNTo1MS41MjQ1NjkzNjZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4NDQxNTQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJvY2tfY29udGludWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaXNvZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2lzb2ZzL3JvY2suYz03Mz1zdGF0aWMgdm9pZCBpbml0X3JvY2tfc3RhdGUoc3RydWN0IHJvY2tfc3RhdGUgKnJzLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvaXNvZnMvcm9jay5jLTg1LSAqL1xcbmZzL2lzb2ZzL3JvY2suYzo4NjpzdGF0aWMgaW50IHJvY2tfY29udGludWUoc3RydWN0IHJvY2tfc3RhdGUgKnJzKVxcbmZzL2lzb2ZzL3JvY2suYy04Ny17XFxuLS1cXG5mcy9pc29mcy9yb2NrLmM9MjE2PWludCBnZXRfcm9ja19yaWRnZV9maWxlbmFtZShzdHJ1Y3QgaXNvX2RpcmVjdG9yeV9yZWNvcmQgKmRlLFxcbi0tXFxuZnMvaXNvZnMvcm9jay5jLTMwOS1cXHR9XFxuZnMvaXNvZnMvcm9jay5jOjMxMDpcXHRyZXQgPSByb2NrX2NvbnRpbnVlKFxcdTAwMjZycyk7XFxuZnMvaXNvZnMvcm9jay5jLTMxMS1cXHRpZiAocmV0ID09IDApXFxuLS1cXG5mcy9pc29mcy9yb2NrLmM9MzI3PXBhcnNlX3JvY2tfcmlkZ2VfaW5vZGVfaW50ZXJuYWwoc3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkICpkZSxcXG4tLVxcbmZzL2lzb2ZzL3JvY2suYy02MTItXFx0fVxcbmZzL2lzb2ZzL3JvY2suYzo2MTM6XFx0cmV0ID0gcm9ja19jb250aW51ZShcXHUwMDI2cnMpO1xcbmZzL2lzb2ZzL3JvY2suYy02MTQtXFx0aWYgKHJldCA9PSAwKVxcbi0tXFxuZnMvaXNvZnMvcm9jay5jPTcyND1zdGF0aWMgaW50IHJvY2tfcmlkZ2Vfc3ltbGlua19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuZnMvaXNvZnMvcm9jay5jLTgwNS1cXHR9XFxuZnMvaXNvZnMvcm9jay5jOjgwNjpcXHRyZXQgPSByb2NrX2NvbnRpbnVlKFxcdTAwMjZycyk7XFxuZnMvaXNvZnMvcm9jay5jLTgwNy1cXHRpZiAocmV0ID09IDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEyOjE1OjUxLjYxMzAxMzg4MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjg2MDQyNDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gSVNPRlMgUm9jayBSaWRnZSBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGdldCBhIGdyYXNwIG9uIGhvdyBSb2NrIFJpZGdlIGV4dGVuc2lvbnMgYXJlIGhhbmRsZWQgaW4gdGhlIElTT0ZTIGltcGxlbWVudGF0aW9uLiAgVGhlIGtleSBmdW5jdGlvbiBoZXJlIHNlZW1zIHRvIGJlIGByb2NrX2NvbnRpbnVlYC4gIEl0J3MgcHJldHR5IGNsZWFyIGZyb20gdGhpcyB0aGF0IGByb2NrX2NvbnRpbnVlYCBpcyBjZW50cmFsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgY2FsbGluZyBpdCwgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucy4gVGhlIGNhbGwgc3RhY2sgZ2l2ZXMgbWUgdGhlIGltbWVkaWF0ZSBjb25uZWN0aW9uczogIEl0J3MgY2FsbGVkIGJ5IGBnZXRfcm9ja19yaWRnZV9maWxlbmFtZWAsIHdoaWNoIGlzIG9idmlvdXMgZW5vdWdoLiBCdXQgbW9yZSBpbXBvcnRhbnRseSwgaXQncyBhbHNvIGNhbGxlZCBieSBgcGFyc2Vfcm9ja19yaWRnZV9pbm9kZV9pbnRlcm5hbGAsIHdoaWNoLCBJIGtub3csIGlzIHVzZWQgd2hlbiBhY3R1YWxseSBkZWFsaW5nIHdpdGggaW5vZGVzLiBBbmQgZnVydGhlciBzdGlsbCwgYHBhcnNlX3JvY2tfcmlkZ2VfaW5vZGVfaW50ZXJuYWxgIGlzIGNhbGxlZCBieSBgcGFyc2Vfcm9ja19yaWRnZV9pbm9kZWAgKHdoaWNoIHdpbGwgZXZlbnR1YWxseSBiZSBjYWxsZWQgYnkgb3RoZXIgZnVuY3Rpb25zLCBJIGFtIHN1cmUpLiBGaW5hbGx5IGByb2NrX3JpZGdlX3N5bWxpbmtfcmVhZF9mb2xpb2AgaXMgYW5vdGhlciBpbXBvcnRhbnQgcGxhY2UgaXQgaXMgdXNlZC4gSSBhbSBhc3N1bWluZyB0aGF0IGl0IGlzIHVzZWQgZm9yIGhhbmRsaW5nIFJvY2sgUmlkZ2UgZXh0ZW5zaW9ucyBpbiBzeW1saW5rcy5cblxuTm93LCBgaXNvZnNfZmlsbF9zdXBlcmAgc2V0cyBgc2JpLVx1MDAzZXNfc2Vzc2lvbl9zdGFydGAuIFRoaXMgbWVhbnMgdGhlIHN1cGVyYmxvY2sgaW5mb3JtYXRpb24gaXMga2V5IHRvIHRoZSBzZXNzaW9uIGRhdGEsIHBhcnRpY3VsYXJseSB0aGUgc3RhcnQgcG9pbnQuICBUaGF0J3MgcHJvYmFibHkgd2hlcmUgdGhlIGltYWdlIGluZm9ybWF0aW9uIGFuZCBtZXRhZGF0YSBsaXZlcy4gQW5kIEknbSB3aWxsaW5nIHRvIGJldCB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIHRoZSBvdmVyYWxsIHBhcnNpbmcgcHJvY2Vzcy4gSSdtIGdvaW5nIHRvIGhlYWQgdG8gYGZzL2lzb2ZzL2lub2RlLmNgIG5vdyB0byBleGFtaW5lIGBpc29mc19maWxsX3N1cGVyYC4gVW5kZXJzdGFuZGluZyBob3cgdGhlIHN1cGVyYmxvY2sgaXMgaW5pdGlhbGl6ZWQgaXMgY3JpdGljYWwgZm9yIHNlZWluZyBob3cgdGhlIHdob2xlIFJvY2sgUmlkZ2Ugc3RydWN0dXJlIGlzIHNldCB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyMTcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTI6MTU6NTUuMjk5MDU4OTM0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9pc29mcy9pbm9kZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgxMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgxMDpcXHRcXHQgKiBsZXNzIHRoYW4gdGhlIGhhcmR3YXJlIHNlY3RvciBzaXplIGZvciB0aGUgZGV2aWNlLiAgSWYgd2VcXG4gODExOlxcdFxcdCAqIGRvLCB3ZSB3b3VsZCBlbmQgdXAgaGF2aW5nIHRvIHJlYWQgbGFyZ2VyIGJ1ZmZlcnMgYW5kIHNwbGl0XFxuIDgxMjpcXHRcXHQgKiBvdXQgcG9ydGlvbnMgdG8gc2F0aXNmeSByZXF1ZXN0cy5cXG4gODEzOlxcdFxcdCAqXFxuIDgxNDpcXHRcXHQgKiBOb3RlMi0gdGhlIGlkZWEgaGVyZSBpcyB0aGF0IHdlIHdhbnQgdG8gZGVhbCB3aXRoIHRoZSBvcHRpbWFsXFxuIDgxNTpcXHRcXHQgKiB6b25lc2l6ZSBpbiB0aGUgZmlsZXN5c3RlbS4gIElmIHdlIGhhdmUgaXQgc2V0IHRvIHNvbWV0aGluZyBsZXNzLFxcbiA4MTY6XFx0XFx0ICogdGhlbiB3ZSBoYXZlIGhvcnJpYmxlIHByb2JsZW1zIHdpdGggdHJ5aW5nIHRvIHBpZWNlIHRvZ2V0aGVyXFxuIDgxNzpcXHRcXHQgKiBiaXRzIG9mIGFkamFjZW50IGJsb2NrcyBpbiBvcmRlciB0byBwcm9wZXJseSByZWFkIGRpcmVjdG9yeVxcbiA4MTg6XFx0XFx0ICogZW50cmllcy4gIEJ5IGZvcmNpbmcgdGhlIGJsb2Nrc2l6ZSBpbiB0aGlzIHdheSwgd2UgZW5zdXJlXFxuIDgxOTpcXHRcXHQgKiB0aGF0IHdlIHdpbGwgbmV2ZXIgYmUgcmVxdWlyZWQgdG8gZG8gdGhpcy5cXG4gODIwOlxcdFxcdCAqL1xcbiA4MjE6XFx0XFx0aWYgKCFzYl9zZXRfYmxvY2tzaXplKHMsIG9yaWdfem9uZXNpemUpKVxcbiA4MjI6XFx0XFx0XFx0Z290byBvdXRfZnJlZXNiaTtcXG4gODIzOlxcdFxcbiA4MjQ6XFx0XFx0c2JpLVxcdTAwM2VzX3Nlc3Npb25fc3RhcnQgPSAodTY0KXZvbF9kZXNjX3N0YXJ0IFxcdTAwM2NcXHUwMDNjXFxuIDgyNTpcXHRcXHRcXHRcXHRcXHQoSVNPRlNfQkxPQ0tfQklUUyAtIHMtXFx1MDAzZXNfYmxvY2tzaXplX2JpdHMpO1xcbiA4MjY6XFx0XFx0c2JpLVxcdTAwM2VzX25sc19pb2NoYXJzZXQgPSBOVUxMO1xcbiA4Mjc6XFx0XFxuIDgyODpcXHQjaWZkZWYgQ09ORklHX0pPTElFVFxcbiA4Mjk6XFx0XFx0aWYgKGpvbGlldF9sZXZlbCkge1xcbiA4MzA6XFx0XFx0XFx0Y2hhciAqcCA9IG9wdC1cXHUwMDNlaW9jaGFyc2V0ID8gb3B0LVxcdTAwM2Vpb2NoYXJzZXQgOiBDT05GSUdfTkxTX0RFRkFVTFQ7XFxuIDgzMTpcXHRcXHRcXHRpZiAoc3RyY21wKHAsIFxcXCJ1dGY4XFxcIikgIT0gMCkge1xcbiA4MzI6XFx0XFx0XFx0XFx0c2JpLVxcdTAwM2VzX25sc19pb2NoYXJzZXQgPSBvcHQtXFx1MDAzZWlvY2hhcnNldCA/XFxuIDgzMzpcXHRcXHRcXHRcXHRcXHRsb2FkX25scyhvcHQtXFx1MDAzZWlvY2hhcnNldCkgOiBsb2FkX25sc19kZWZhdWx0KCk7XFxuIDgzNDpcXHRcXHRcXHRcXHRpZiAoIXNiaS1cXHUwMDNlc19ubHNfaW9jaGFyc2V0KVxcbiA4MzU6XFx0XFx0XFx0XFx0XFx0Z290byBvdXRfZnJlZXNiaTtcXG4gODM2OlxcdFxcdFxcdH1cXG4gODM3OlxcdFxcdH1cXG4gODM4OlxcdCNlbmRpZlxcbiA4Mzk6XFx0XFx0cy1cXHUwMDNlc19vcCA9IFxcdTAwMjZpc29mc19zb3BzO1xcbiA4NDA6XFx0XFx0cy1cXHUwMDNlc19leHBvcnRfb3AgPSBcXHUwMDI2aXNvZnNfZXhwb3J0X29wcztcXG4gODQxOlxcdFxcdHNiaS1cXHUwMDNlc19tYXBwaW5nID0gb3B0LVxcdTAwM2VtYXA7XFxuIDg0MjpcXHRcXHRzYmktXFx1MDAzZXNfcm9jayA9IChvcHQtXFx1MDAzZXJvY2sgPyAyIDogMCk7XFxuIDg0MzpcXHRcXHRzYmktXFx1MDAzZXNfcm9ja19vZmZzZXQgPSAtMTsgLyogaW5pdGlhbCBvZmZzZXQsIHdpbGwgZ3Vlc3MgdW50aWwgU1AgaXMgZm91bmQqL1xcbiA4NDQ6XFx0XFx0c2JpLVxcdTAwM2VzX2NydWZ0ID0gb3B0LVxcdTAwM2VjcnVmdDtcXG4gODQ1OlxcdFxcdHNiaS1cXHUwMDNlc19oaWRlID0gb3B0LVxcdTAwM2VoaWRlO1xcbiA4NDY6XFx0XFx0c2JpLVxcdTAwM2VzX3Nob3dhc3NvYyA9IG9wdC1cXHUwMDNlc2hvd2Fzc29jO1xcbiA4NDc6XFx0XFx0c2JpLVxcdTAwM2VzX3VpZCA9IG9wdC1cXHUwMDNldWlkO1xcbiA4NDg6XFx0XFx0c2JpLVxcdTAwM2VzX2dpZCA9IG9wdC1cXHUwMDNlZ2lkO1xcbiA4NDk6XFx0XFx0c2JpLVxcdTAwM2VzX3VpZF9zZXQgPSBvcHQtXFx1MDAzZXVpZF9zZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEyOjE1OjU1LjI5OTE2NDQ3NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODEwMTYxODYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEZpbGVzeXN0ZW0gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvcmUgaXNzdWU6IGl0J3MgYSBib3VuZHMtY2hlY2tpbmcgcHJvYmxlbSB3aXRoaW4gUm9jayBSaWRnZSBDRSByZWNvcmRzIGZvciBJU085NjYwLiBTcGVjaWZpY2FsbHksIHRoZSBvcmlnaW5hbCBjaGVjayBmb3IgYHJzLVx1MDAzZWNvbnRfZXh0ZW50YCBkaWRuJ3QgZnVsbHkgY29uc2lkZXIgc2Vzc2lvbiBvZmZzZXRzIG9yIHRoZSBibG9jayBkZXZpY2UncyBzaXplLCBsZWFkaW5nIHRvIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzLiBDbGFzc2ljIGdvdGNoYS5cblxuVGhlIG5leHQgcXVlc3Rpb24gaXMgYWx3YXlzLCBcIklzIHRoaXMgYWN0dWFsbHkgZXhwbG9pdGFibGU/XCIgQ2FuIHdlIHJlYWxpc3RpY2FsbHkgdHJpZ2dlciB0aGlzIGluIGEgbW9kZXJuIGVudmlyb25tZW50PyBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgdGhhdC4gQW5kIHllcywgZ29vZC4gVGhlIHRleHQgbWVudGlvbnMgdGhhdCBzeXprYWxsZXIsIGEgcHJvbWluZW50IGZ1enplciwgdGFyZ2V0cyBmaWxlc3lzdGVtcywgaW5jbHVkaW5nIElTTzk2NjAuIEl0IGV2ZW4gaGlnaGxpZ2h0cyB0aGUgcmVsZXZhbnQgc2V0dXA6IHRoZSBgbW91bnRgIHN5c2NhbGwgd2l0aCB0aGUgYC10IGlzbzk2NjBgIG9wdGlvbiBhbmQgbG9vcCBkZXZpY2VzIG9yIGRpc2sgaW1hZ2VzLiBTb3VuZHMgbGlrZSBhIHZlcnkgcmVhbCBhdHRhY2sgc3VyZmFjZSwgbWFraW5nIHRoaXMgZGVmaW5pdGVseSBgV29ydGhGdXp6aW5nPXRydWVgLiBNeSBleHBlcnRpc2Ugd2l0aCBmdXp6aW5nIHRlY2huaXF1ZXMgc2F5cywgeWVzLCB0aGlzIGlzIGEgdGFyZ2V0LlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8ga25vdyB0aGUgcHJlcmVxdWlzaXRlcy4gV2hhdCBjb25maWdzIGFyZSBuZWVkZWQgdG8gZXZlbiByZWFjaCB0aGlzIGNvZGU/IEl0IHJlcXVpcmVzIGBJU085NjYwX0ZTYCwgb2YgY291cnNlLiBJcyBSb2NrIFJpZGdlIGl0cyBvd24gc2VwYXJhdGUgY29uZmlnLCBvciBpcyBpdCBpbXBsaWNpdGx5IHBhcnQgb2YgYElTTzk2NjBfRlNgPyBMZXQncyBjaGVjayBgZnMvaXNvZnMvTWFrZWZpbGVgIHRvIGJlIHN1cmUuIEkgY2FuIHByb2JhYmx5IGd1ZXNzIGJ1dCBpdCdzIGltcG9ydGFudCB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc0NDksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMjoxNTo1OS4xMDkzMjkzMzZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvaXNvZnMvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciB0aGUgTGludXggaXNvZnMgZmlsZXN5c3RlbSByb3V0aW5lcy5cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0b2JqLSQoQ09ORklHX0lTTzk2NjBfRlMpICs9IGlzb2ZzLm9cXG4gICA3OlxcdFxcbiAgIDg6XFx0aXNvZnMteSBcXHRcXHQ6PSBuYW1laS5vIGlub2RlLm8gZGlyLm8gdXRpbC5vIHJvY2subyBleHBvcnQub1xcbiAgIDk6XFx0aXNvZnMtJChDT05GSUdfSk9MSUVUKVxcdCs9IGpvbGlldC5vXFxuICAxMDpcXHRpc29mcy0kKENPTkZJR19aSVNPRlMpXFx0Kz0gY29tcHJlc3Mub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMjoxNTo1OS4xMDkzNzg1NDZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzUzNzI2MTE3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSVNPOTY2MCBSb2NrIFJpZGdlIEV4dGVuc2lvbnMqKlxuXG5Pa2F5LCBzbyBpZiBgQ09ORklHX0lTTzk2NjBfRlNgIGlzIG9uLCBgcm9jay5vYCBpcyBhdXRvbWF0aWNhbGx5IHBhcnQgb2YgYGlzb2ZzLm9gLiBNYWtlcyBzZW5zZSwgdGhleSdyZSBpbnRyaW5zaWNhbGx5IGxpbmtlZC4gTm93LCBsZXQncyBmaWd1cmUgb3V0IHdoYXQgZnVuY3Rpb25zIG5lZWQgdG8gYmUgZXhwb3NlZCBhcyBgRm9jdXNTeW1ib2xzYC4gSSBuZWVkOlxuXG4qICAgYGlzb2ZzX2ZpbGxfc3VwZXJgXG4qICAgYHJvY2tfY29udGludWVgXG4qICAgYGdldF9yb2NrX3JpZGdlX2ZpbGVuYW1lYFxuKiAgIGBwYXJzZV9yb2NrX3JpZGdlX2lub2RlX2ludGVybmFsYCAob3IgbWF5YmUganVzdCBgcGFyc2Vfcm9ja19yaWRnZV9pbm9kZWAgaWYgdGhhdCdzIHRoZSBvbmUgd2UgbmVlZCkuXG4qICAgYHJvY2tfcmlkZ2Vfc3ltbGlua19yZWFkX2ZvbGlvYFxuXG5UaGUgbmV4dCBjcml0aWNhbCBzdGVwIGlzIHRvIGRldGVybWluZSBpZiBgcm9ja19jb250aW51ZWAgaXMgaW5saW5lIG9yIHN0YXRpYy4gTGV0J3Mgc2VlLi4uIHllcCwgaXQncyBkZWZpbmVkIGFzIGBzdGF0aWMgaW50IHJvY2tfY29udGludWUoLi4uKWAgaW4gYGZzL2lzb2ZzL3JvY2suY2AuIFdpdGggY29tcGlsZXIgb3B0aW1pemF0aW9ucywgaXQgY291bGQgYmUgaW5saW5lZC4gVGhhdCBtZWFucyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxlcnMgb2YgYHJvY2tfY29udGludWVgIHRvIG1ha2UgYSBkZWZpbml0aXZlIGp1ZGdlbWVudC4gSXQgbG9va3MgbGlrZSBgcGFyc2Vfcm9ja19yaWRnZV9pbm9kZWAgaXMgbm9uLXN0YXRpYywgc28gdGhlIGNhbGxlciBvZiB0aGF0IGZ1bmN0aW9uIHdpbGwgYmUgdGhlIHRoaW5nIHRvIHdhdGNoIGZvci4gTGV0J3Mgc2VlIHRoZSBjYWxsZXJzIG9mIGByb2NrX2NvbnRpbnVlYCBhbmQgdGhlbiBmaWd1cmUgb3V0IGhvdyBgcGFyc2Vfcm9ja19yaWRnZV9pbm9kZWAgYW5kIGBnZXRfcm9ja19yaWRnZV9maWxlbmFtZWAgYXJlIHVzZWQgaW4gcmVsYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTUyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTI6MTY6MDIuNjQ2NjQxOTgyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjgyMTMzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYXJzZV9yb2NrX3JpZGdlX2lub2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2lzb2ZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9pc29mcy9pbm9kZS5jPTEyNzI9c3RhdGljIGludCBpc29mc19yZWFkX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCByZWxvY2F0ZWQpXFxuLS1cXG5mcy9pc29mcy9pbm9kZS5jLTE0MTUtXFx0aWYgKCFoaWdoX3NpZXJyYSkge1xcbmZzL2lzb2ZzL2lub2RlLmM6MTQxNjpcXHRcXHRwYXJzZV9yb2NrX3JpZGdlX2lub2RlKGRlLCBpbm9kZSwgcmVsb2NhdGVkKTtcXG5mcy9pc29mcy9pbm9kZS5jLTE0MTctXFx0XFx0LyogaWYgd2Ugd2FudCB1aWQvZ2lkIHNldCwgb3ZlcnJpZGUgdGhlIHJvY2sgcmlkZ2Ugc2V0dGluZyAqL1xcbi0tXFxuZnMvaXNvZnMvaW5vZGUuYy0xNDUyLVxcdFxcdCAgIFNfSVNGSUZPKGlub2RlLVxcdTAwM2VpX21vZGUpIHx8IFNfSVNTT0NLKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuZnMvaXNvZnMvaW5vZGUuYzoxNDUzOlxcdFxcdC8qIFhYWCAtIHBhcnNlX3JvY2tfcmlkZ2VfaW5vZGUoKSBoYWQgYWxyZWFkeSBzZXQgaV9yZGV2LiAqL1xcbmZzL2lzb2ZzL2lub2RlLmMtMTQ1NC1cXHRcXHRpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIGlub2RlLVxcdTAwM2VpX21vZGUsIGlub2RlLVxcdTAwM2VpX3JkZXYpO1xcbi0tXFxuZnMvaXNvZnMvaXNvZnMuaD0xMTU9c3RydWN0IGlub2RlO1xcdFxcdC8qIFRvIG1ha2UgZ2NjIGhhcHB5ICovXFxuZnMvaXNvZnMvaXNvZnMuaC0xMTYtXFxuZnMvaXNvZnMvaXNvZnMuaDoxMTc6ZXh0ZXJuIGludCBwYXJzZV9yb2NrX3JpZGdlX2lub2RlKHN0cnVjdCBpc29fZGlyZWN0b3J5X3JlY29yZCAqLCBzdHJ1Y3QgaW5vZGUgKiwgaW50IHJlbG9jYXRlZCk7XFxuZnMvaXNvZnMvaXNvZnMuaC0xMTgtZXh0ZXJuIGludCBnZXRfcm9ja19yaWRnZV9maWxlbmFtZShzdHJ1Y3QgaXNvX2RpcmVjdG9yeV9yZWNvcmQgKiwgY2hhciAqLCBzdHJ1Y3QgaW5vZGUgKik7XFxuLS1cXG5mcy9pc29mcy9yb2NrLmM9MzI2PXN0YXRpYyBpbnRcXG5mcy9pc29mcy9yb2NrLmM6MzI3OnBhcnNlX3JvY2tfcmlkZ2VfaW5vZGVfaW50ZXJuYWwoc3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkICpkZSxcXG5mcy9pc29mcy9yb2NrLmMtMzI4LVxcdFxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBmbGFncylcXG4tLVxcbmZzL2lzb2ZzL3JvY2suYz02MjY9c3RhdGljIGNoYXIgKmdldF9zeW1saW5rX2NodW5rKGNoYXIgKnJwbnQsIHN0cnVjdCByb2NrX3JpZGdlICpyciwgY2hhciAqcGxpbWl0KVxcbi0tXFxuZnMvaXNvZnMvcm9jay5jLTcwMS1cXG5mcy9pc29mcy9yb2NrLmM6NzAyOmludCBwYXJzZV9yb2NrX3JpZGdlX2lub2RlKHN0cnVjdCBpc29fZGlyZWN0b3J5X3JlY29yZCAqZGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvaXNvZnMvcm9jay5jLTcwMy1cXHRcXHRcXHQgICBpbnQgcmVsb2NhdGVkKVxcbi0tXFxuZnMvaXNvZnMvcm9jay5jLTcwNS1cXHRpbnQgZmxhZ3MgPSByZWxvY2F0ZWQgPyBSUl9SRUxPQ19ERSA6IDA7XFxuZnMvaXNvZnMvcm9jay5jOjcwNjpcXHRpbnQgcmVzdWx0ID0gcGFyc2Vfcm9ja19yaWRnZV9pbm9kZV9pbnRlcm5hbChkZSwgaW5vZGUsIGZsYWdzKTtcXG5mcy9pc29mcy9yb2NrLmMtNzA3LVxcbi0tXFxuZnMvaXNvZnMvcm9jay5jLTcxMy1cXHQgICAgXFx1MDAyNlxcdTAwMjYgKElTT0ZTX1NCKGlub2RlLVxcdTAwM2VpX3NiKS1cXHUwMDNlc19yb2NrID09IDIpKSB7XFxuZnMvaXNvZnMvcm9jay5jOjcxNDpcXHRcXHRyZXN1bHQgPSBwYXJzZV9yb2NrX3JpZGdlX2lub2RlX2ludGVybmFsKGRlLCBpbm9kZSxcXG5mcy9pc29mcy9yb2NrLmMtNzE1LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBmbGFncyB8IFJSX1JFR0FSRF9YQSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEyOjE2OjAyLjcwMzQ2ODQzM1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjM4NjI0NzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6XG5cbioqQ2hlY2tpbmcgQ2FsbGVyIEZ1bmN0aW9ucyBmb3IgYGdldF9yb2NrX3JpZGdlX2ZpbGVuYW1lYCoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGNvZGUgYW5kIEkndmUgY29tZSBhY3Jvc3MgYGdldF9yb2NrX3JpZGdlX2ZpbGVuYW1lYC4gTXkgaW5pdGlhbCBjb25jZXJuIGlzbid0IGFib3V0IHRoZSBmdW5jdGlvbiBpdHNlbGYgKnBlciBzZSosIGJ1dCByYXRoZXIsIGhvdyBhbmQgd2hlcmUgaXQncyBiZWluZyAqdXNlZCouIFNvLCBpbnN0ZWFkIG9mIGp1c3QgYXNzdW1pbmcgSSB1bmRlcnN0YW5kIGl0cyByb2xlLCBJJ20gdGhpbmtpbmcsIFwiTGV0J3MgdHJhY2sgZG93biBhbGwgdGhlIHBsYWNlcyB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICpjYWxsZWQqLlwiIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgaXRzIHVzZSBpcyBjcnVjaWFsLiBJIG5lZWQgdG8gc2VlIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucy4gVGhpcyB3aWxsIGhlbHAgbWUgZ3Jhc3AgdGhlIGJpZ2dlciBwaWN0dXJlLCB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9mIHRoZSBmdW5jdGlvbiwgYW5kIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzIG9yIGlzc3VlcyByZWxhdGVkIHRvIGl0cyBpbnRlZ3JhdGlvbiB3aXRoaW4gdGhlIG92ZXJhbGwgc3lzdGVtLiBBIHRob3JvdWdoIHVuZGVyc3RhbmRpbmcgb2YgaXRzIGNhbGxlcnMgaXMgdGhlIGZpcnN0IHN0ZXAhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NDUwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTI6MTY6MDQuOTQyMDk2MTI0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTM3NzE2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfcm9ja19yaWRnZV9maWxlbmFtZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9pc29mcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaXNvZnMvZGlyLmM9ODU9c3RhdGljIGludCBkb19pc29mc19yZWFkZGlyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxuZnMvaXNvZnMvZGlyLmMtMTkyLVxcdFxcdGlmIChzYmktXFx1MDAzZXNfcm9jaykge1xcbmZzL2lzb2ZzL2Rpci5jOjE5MzpcXHRcXHRcXHRsZW4gPSBnZXRfcm9ja19yaWRnZV9maWxlbmFtZShkZSwgdG1wbmFtZSwgaW5vZGUpO1xcbmZzL2lzb2ZzL2Rpci5jLTE5NC1cXHRcXHRcXHRpZiAobGVuICE9IDApIHtcXHRcXHQvKiBtYXkgYmUgLTEgKi9cXG4tLVxcbmZzL2lzb2ZzL2lzb2ZzLmg9MTE3PWV4dGVybiBpbnQgcGFyc2Vfcm9ja19yaWRnZV9pbm9kZShzdHJ1Y3QgaXNvX2RpcmVjdG9yeV9yZWNvcmQgKiwgc3RydWN0IGlub2RlICosIGludCByZWxvY2F0ZWQpO1xcbmZzL2lzb2ZzL2lzb2ZzLmg6MTE4OmV4dGVybiBpbnQgZ2V0X3JvY2tfcmlkZ2VfZmlsZW5hbWUoc3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkICosIGNoYXIgKiwgc3RydWN0IGlub2RlICopO1xcbmZzL2lzb2ZzL2lzb2ZzLmgtMTE5LWV4dGVybiBpbnQgaXNvZnNfbmFtZV90cmFuc2xhdGUoc3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkICosIGNoYXIgKiwgc3RydWN0IGlub2RlICopO1xcbi0tXFxuZnMvaXNvZnMvbmFtZWkuYz00OT1pc29mc19maW5kX2VudHJ5KHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9pc29mcy9uYW1laS5jLTEwNC1cXHRcXHRpZiAoc2JpLVxcdTAwM2VzX3JvY2sgXFx1MDAyNlxcdTAwMjZcXG5mcy9pc29mcy9uYW1laS5jOjEwNTpcXHRcXHQgICAgKChpID0gZ2V0X3JvY2tfcmlkZ2VfZmlsZW5hbWUoZGUsIHRtcG5hbWUsIGRpcikpKSkge1xcbmZzL2lzb2ZzL25hbWVpLmMtMTA2LVxcdFxcdFxcdGRsZW4gPSBpO1xcdC8qIHBvc3NpYmx5IC0xICovXFxuLS1cXG5mcy9pc29mcy9yb2NrLmM9MTU3PXN0YXRpYyBpbnQgcm9ja19jaGVja19vdmVyZmxvdyhzdHJ1Y3Qgcm9ja19zdGF0ZSAqcnMsIGludCBzaWcpXFxuLS1cXG5mcy9pc29mcy9yb2NrLmMtMjE1LSAqL1xcbmZzL2lzb2ZzL3JvY2suYzoyMTY6aW50IGdldF9yb2NrX3JpZGdlX2ZpbGVuYW1lKHN0cnVjdCBpc29fZGlyZWN0b3J5X3JlY29yZCAqZGUsXFxuZnMvaXNvZnMvcm9jay5jLTIxNy1cXHRcXHRcXHQgICAgY2hhciAqcmV0bmFtZSwgc3RydWN0IGlub2RlICppbm9kZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTI6MTY6MDQuOTg3NDgwMTg3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyNTMwNDk1NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIGZ1bmN0aW9uIGByb2NrX3JpZGdlX3N5bWxpbmtfcmVhZF9mb2xpb2A6XG5cbioqQW5hbHl6aW5nIGByb2NrX3JpZGdlX3N5bWxpbmtfcmVhZF9mb2xpb2AqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgcm9ja19yaWRnZV9zeW1saW5rX3JlYWRfZm9saW9gLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBrbm93IHRoaXMgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIFJvY2sgUmlkZ2UgZXh0ZW5zaW9ucywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gc3ltbGlua3MgYW5kLCBnaXZlbiB0aGUgXCJyZWFkXCIgYW5kIFwiZm9saW9cIiBiaXRzLCBwcm9iYWJseSBob3cgdGhleSdyZSBoYW5kbGVkIHdoZW4gYmVpbmcgcmVhZCBpbnRvIGEgcGFnZSBjYWNoZSBvciBzaW1pbGFyIHN0cnVjdHVyZS4gVGhpcyBpcyBsaWtlbHkgcGFydCBvZiBhIGJyb2FkZXIgZmlsZSBzeXN0ZW0gaW1wbGVtZW50YXRpb24sIGxpa2VseSBkZWFsaW5nIHdpdGggYSBmaWxlIHN5c3RlbSB0aGF0IHN1cHBvcnRzIFJvY2sgUmlkZ2UgZXh0ZW5zaW9ucywgc3VjaCBhcyBpbiB0aGUgY29udGV4dCBvZiBhbiBJU08gaW1hZ2Ugb3Igc2ltaWxhciBmb3JtYXQgd2l0aCBleHRlbmRlZCBtZXRhZGF0YS5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9ucyBhcmU6XG5cbiogICBXaGF0IGFyZSB0aGUgZWRnZSBjYXNlcz8gV2hhdCdzIHRoZSBwb3RlbnRpYWwgZm9yIGluZmluaXRlIHJlY3Vyc2lvbiBpZiBhIHN5bWxpbmsgcG9pbnRzIHRvIGl0c2VsZiBkaXJlY3RseSBvciBpbmRpcmVjdGx5PyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlJ3Mgcm9idXN0IGN5Y2xlIGRldGVjdGlvbiBidWlsdCBpbiwgb3IgdGhhdCB0aGUgZGVzaWduIGluaGVyZW50bHkgcHJldmVudHMgdGhpcy5cbiogICBIb3cgaXMgdGhlICphY3R1YWwqIGRhdGEgcmVhZCBpbnRvIHRoZSBmb2xpbz8gSXMgaXQgYSBkaXJlY3QgbWVtb3J5IGNvcHksIG9yIGlzIHRoZXJlIGJ1ZmZlcmluZyBpbnZvbHZlZD8gSSdsbCBuZWVkIHRvIGxvb2sgYXQgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIGlmIGxhcmdlIHN5bWxpbmtzIGFyZSBiZWluZyBoYW5kbGVkLlxuKiAgIFdoYXQncyB0aGUgZXJyb3IgaGFuZGxpbmcgbGlrZT8gSG93IGFyZSBpc3N1ZXMgbGlrZSBicm9rZW4gc3ltbGlua3MgKHBvaW50aW5nIHRvIG5vbi1leGlzdGVudCB0YXJnZXRzKSwgYWNjZXNzIGRlbmllZCBzY2VuYXJpb3MsIG9yIGJ1ZmZlciBvdmVyZmxvd3MgaGFuZGxlZD8gVGhlIGRldGFpbHMgaGVyZSBhcmUgY3JpdGljYWwgZm9yIHJvYnVzdG5lc3MuXG4qICAgSXMgdGhpcyBiZWluZyBvcHRpbWl6ZWQgZm9yIHJlYWQtYWhlYWQ/IFN5bWxpbmtzIGNhbiBjYXVzZSBqdW1wcyBpbiByZWFkIGFjY2Vzcywgc28gaXMgdGhlIHN5c3RlbSBiZWluZyBjbGV2ZXIgaW4gaG93IGl0IGFudGljaXBhdGVzIGFuZCBwcmVmZXRjaGVzP1xuKiAgIFdoYXQgaXMgdGhlIGNvbnRleHQgb2YgdGhlIGZvbGlvPyBJJ20gY3VyaW91cyB3aGF0IGRhdGEgaXQgY29udGFpbnMgYW5kIGlmIGl0J3Mgc2FmZSB0byBhc3N1bWUgYSBjZXJ0YWluIHNpemUgb2YgdGhlIGRlc3RpbmF0aW9uLlxuXG5PdmVyYWxsLCBJJ20gZXhwZWN0aW5nIHRvIHNlZSBhIGZ1bmN0aW9uIHRoYXQncyBwb3RlbnRpYWxseSBwZXJmb3JtYW5jZS1jcml0aWNhbCwgYW5kIGNlcnRhaW5seSBuZWVkcyB0byBiZSByb2J1c3QgYW5kIHNlY3VyZS4gSSdtIGdvaW5nIHRvIGxvb2sgY2xvc2VseSBmb3IgaG93IGl0IGhhbmRsZXMgdGhlc2UgdHJpY2t5IHN5bWxpbmsgc2NlbmFyaW9zIGFuZCBhbnkgcG90ZW50aWFsbHkgcmlza3kgbWVtb3J5IG9wZXJhdGlvbnMuIEl04oCZcyBhbHNvIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGNvbnRleHQsIHNvIEkgbmVlZCB0byBjaGVjayB0aGUgZnVuY3Rpb24gY2FsbHMgYW5kIHJlbGF0ZWQgY29kZSBpbiBvcmRlciB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgY29tcGxldGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDE1MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEyOjE2OjA4LjI0MDUzMTk3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTcwMzUwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyb2NrX3JpZGdlX3N5bWxpbmtfcmVhZF9mb2xpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9pc29mcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaXNvZnMvcm9jay5jPTcwMj1pbnQgcGFyc2Vfcm9ja19yaWRnZV9pbm9kZShzdHJ1Y3QgaXNvX2RpcmVjdG9yeV9yZWNvcmQgKmRlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvaXNvZnMvcm9jay5jLTcyMy0gKi9cXG5mcy9pc29mcy9yb2NrLmM6NzI0OnN0YXRpYyBpbnQgcm9ja19yaWRnZV9zeW1saW5rX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuZnMvaXNvZnMvcm9jay5jLTcyNS17XFxuLS1cXG5mcy9pc29mcy9yb2NrLmM9ODM3PWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaXNvZnNfc3ltbGlua19hb3BzID0ge1xcbmZzL2lzb2ZzL3JvY2suYzo4Mzg6XFx0LnJlYWRfZm9saW8gPSByb2NrX3JpZGdlX3N5bWxpbmtfcmVhZF9mb2xpb1xcbmZzL2lzb2ZzL3JvY2suYy04MzktfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTI6MTY6MDguMjkwMjQwMzkyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzNzI1NTg5MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBJU085NjYwIHdpdGggUm9jayBSaWRnZSBFeHRlbnNpb246IEEgRm9jdXNlZCBBcHByb2FjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgcHJpbWFyeSBmb2N1cyBpcyBvbiBmdXp6aW5nIHRoZSBJU085NjYwIGZpbGUgc3lzdGVtLCBzcGVjaWZpY2FsbHkgd2hlbiBSb2NrIFJpZGdlIGV4dGVuc2lvbnMgYXJlIGluIHBsYXkuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBpZGVudGlmaWVkIHRoZSByaWdodCBhcmVhcy4gTXkgbGlzdCBvZiBrZXkgc3ltYm9scyBzZWVtcyBzb2xpZDogYGlzb2ZzX2ZpbGxfc3VwZXJgLCBgcm9ja19jb250aW51ZWAsIGBnZXRfcm9ja19yaWRnZV9maWxlbmFtZWAsIGBwYXJzZV9yb2NrX3JpZGdlX2lub2RlYCwgYW5kIGByb2NrX3JpZGdlX3N5bWxpbmtfcmVhZF9mb2xpb2AuIFRob3NlIGFyZSB0aGUgY29yZSBmdW5jdGlvbnMgSSB3YW50IHRvIHRhcmdldC5cblxuTm93LCBhIHF1aWNrIGNvbmZpZ3VyYXRpb24gY2hlY2suIGBJU085NjYwX0ZTYCBpcyB0aGUgbWFpbiBvbmUgSSBuZWVkIHRvIGVuYWJsZTsgdGhhdCdzIHRoZSBiYXNlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWdzLCBidXQgSSBkb24ndCB0aGluayBJJ2xsIG5lZWQgYW55IG1vcmUuIE5leHQsIGEgcXVpY2sgY2hlY2sgb2YgdGhlIG1vZGlmaWVkIGZpbGVzIGNvbmZpcm1zIHRoYXQgdGhlIHdvcmsgaXMgY29udGFpbmVkIHByaW1hcmlseSBpbiBgZnMvaXNvZnNgLiBTcGVjaWZpY2FsbHksIGBmcy9pc29mcy9pbm9kZS5jYCAod2hlcmUgSSBmaW5kIGBpc29mc19maWxsX3N1cGVyYCksIGBmcy9pc29mcy9pc29mcy5oYCAoZm9yIHRoZSBgaXNvZnNfc2JfaW5mb2Agc3RydWN0KSwgYW5kIGBmcy9pc29mcy9yb2NrLmNgICh3aGVyZSBJJ2xsIGZpbmQgYHJvY2tfY29udGludWVgKS5cblxuUmV2aWV3aW5nIHRoZSBpbnN0cnVjdGlvbnMsIGl04oCZcyBhbGwgc2V0IHVwIHRoZSB3YXkgSSBleHBlY3QuIGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byBgdHJ1ZWAsIGBFbmFibGVDb25maWdzYCBpbmNsdWRlcyBteSBgSVNPOTY2MF9GU2AsIGFuZCB0aGUgYEZvY3VzU3ltYm9sc2AgYXJlIGV4YWN0bHkgd2hhdCBJIGdhdGhlcmVkLiBUaGUgYFJlYXNvbmluZ2AgcHJvdmlkZXMgYSBjb25jaXNlIGV4cGxhbmF0aW9uLlxuXG5Pa2F5LCBsZXQncyBtYWtlIHN1cmUgSSd2ZSBnb3QgZXZlcnl0aGluZyBpbiBteSBoZWFkLiBBbGwgdGhlIGNvZGUgY2hhbmdlcyBhcmUgd2l0aGluIHRoZSBgaXNvZnNgIGRyaXZlciwgYW5kIHRoYXQncyBwZXJmZWN0LiBUaGlzIGNhbiBiZSBleGVyY2lzZWQgZWl0aGVyIGJ5IG1vdW50aW5nIElTTyBpbWFnZXMgZGlyZWN0bHkgZnJvbSB1c2VyIHNwYWNlIG9yIGJ5IHVzaW5nIHN5emthbGxlciwgbGV2ZXJhZ2luZyBsb29wIGRldmljZXMgb3IgZGlyZWN0IGRpc2sgZGV2aWNlcy4gSW1wb3J0YW50bHksIHRoaXMgcGF0Y2ggZm9jdXNlcyBvbiBhZGRpbmcgYm91bmRhcnkgY2hlY2tzIHdpdGhpbiBSb2NrIFJpZGdlIENvbnRpbnVhdGlvbiBBcmVhIHJlY29yZHMsIGVuc3VyaW5nIHRoYXQgd2UgZG9uJ3QgcmVhZCBvdXQtb2YtYm91bmRzIGR1ZSB0byBzZXNzaW9uIGJvdW5kYXJpZXMgb3IgdW5kZXJseWluZyBibG9jayBkZXZpY2Ugc2l6ZSBpc3N1ZXMuIFRoYXQncyBhIGNsYXNzaWMgYW5kIHZhbHVhYmxlIGZ1enppbmcgdGFyZ2V0LlxuXG5BbHJpZ2h0LCBJJ20gcmVhZHkuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDg1NSwiT3V0cHV0VG9rZW5zIjoxMzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTI6MTY6MTIuNjYyODAxMzAxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg1NDA1MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklTTzk2NjBfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpc29mc19maWxsX3N1cGVyXCIsXG4gICAgXCJyb2NrX2NvbnRpbnVlXCIsXG4gICAgXCJnZXRfcm9ja19yaWRnZV9maWxlbmFtZVwiLFxuICAgIFwicGFyc2Vfcm9ja19yaWRnZV9pbm9kZVwiLFxuICAgIFwicm9ja19yaWRnZV9zeW1saW5rX3JlYWRfZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHNlc3Npb24gYm91bmRhcnkgYW5kIGJsb2NrIGRldmljZSBjYXBhY2l0eSB2YWxpZGF0aW9uIGZvciBSb2NrIFJpZGdlIENvbnRpbnVhdGlvbiBBcmVhIChDRSkgcmVjb3JkcyBpbiBpc29mcy4gVGhlIG1vZGlmaWVkIGNvZGUgaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGJ5IG1vdW50aW5nIGFuZCByZWFkaW5nIGNyYWZ0ZWQgSVNPOTY2MCBmaWxlc3lzdGVtIGltYWdlcyB2aWEgbG9vcC9kaXNrIGRldmljZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVNPOTY2MF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlzb2ZzX2ZpbGxfc3VwZXJcIixcbiAgICBcInJvY2tfY29udGludWVcIixcbiAgICBcImdldF9yb2NrX3JpZGdlX2ZpbGVuYW1lXCIsXG4gICAgXCJwYXJzZV9yb2NrX3JpZGdlX2lub2RlXCIsXG4gICAgXCJyb2NrX3JpZGdlX3N5bWxpbmtfcmVhZF9mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc2Vzc2lvbiBib3VuZGFyeSBhbmQgYmxvY2sgZGV2aWNlIGNhcGFjaXR5IHZhbGlkYXRpb24gZm9yIFJvY2sgUmlkZ2UgQ29udGludWF0aW9uIEFyZWEgKENFKSByZWNvcmRzIGluIGlzb2ZzLiBUaGUgbW9kaWZpZWQgY29kZSBpcyBkaXJlY3RseSByZWFjaGFibGUgYnkgbW91bnRpbmcgYW5kIHJlYWRpbmcgY3JhZnRlZCBJU085NjYwIGZpbGVzeXN0ZW0gaW1hZ2VzIHZpYSBsb29wL2Rpc2sgZGV2aWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTI6MTY6MTIuNzQxMzU1NjU4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTE2Mzk0MDI1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEyOjE2OjEyLjc0MjQzMjY1OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI5MTYyODU5MDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBmcy9pc29mcyB0byBwcm9wZXJseSB2YWxpZGF0ZSBSb2NrIFJpZGdlIGNvbnRpbnVhdGlvbiBleHRlbnRzIChgQ0VgIGVudHJpZXMpIGFnYWluc3Qgc2Vzc2lvbiBhbmQgYmxvY2sgZGV2aWNlIGJvdW5kYXJpZXMgYnkgaW50cm9kdWNpbmcgYHNiaS1cXHUwMDNlc19zZXNzaW9uX3N0YXJ0YCBhbmQgY29tcGFyaW5nIGBjb250X2V4dGVudGAgYWdhaW5zdCB0aGUgdmFsaWQgcmFuZ2UuIFxcblxcbi0gYHN0cnVjdCBpc29mc19zYl9pbmZvYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgYW5kIGBzX3Nlc3Npb25fc3RhcnRgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgZHVyaW5nIHN1cGVyYmxvY2sgc2V0dXAgYmVmb3JlIGFueSBSb2NrIFJpZGdlIHBhcnNpbmcgb2NjdXJzLlxcbi0gVGhlIHBhdGNoIHRpZ2h0ZW5zIGJvdW5kcyBjaGVja3MgZm9yIGJsb2NrIHJlYWRzLCBtaXRpZ2F0aW5nIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGJsb2NrIHJlYWRzIG9uIGNvcnJ1cHRlZC9tYWxpY2lvdXMgSVNPIGltYWdlcyAod2hpY2ggZmFsbCB1bmRlciBLQVNBTi9nZW5lcmljIGJvdW5kcyBjaGVja2luZykuXFxuLSBObyB1bmluaXRpYWxpemVkIG1lbW9yeSwgc3RhY2svaGVhcCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZS5cXG5cXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgcHJlc2VudCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmMDIxNWJmZWYzYjc3NjFlNzdkOGI1OTJlN2Q3ZDBiMzRkNWU5ZWVmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxMjoxNToyOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2lzb2ZzL2lub2RlLmMgYi9mcy9pc29mcy9pbm9kZS5jXG5pbmRleCAzMzc4MzZhMGExNzA0Li5lZmNiOGZiMmIxMGM0IDEwMDY0NFxuLS0tIGEvZnMvaXNvZnMvaW5vZGUuY1xuKysrIGIvZnMvaXNvZnMvaW5vZGUuY1xuQEAgLTgyMSw2ICs4MjEsOCBAQCBzdGF0aWMgaW50IGlzb2ZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4gXHRpZiAoIXNiX3NldF9ibG9ja3NpemUocywgb3JpZ196b25lc2l6ZSkpXG4gXHRcdGdvdG8gb3V0X2ZyZWVzYmk7XG4gXG4rXHRzYmktXHUwMDNlc19zZXNzaW9uX3N0YXJ0ID0gKHU2NCl2b2xfZGVzY19zdGFydCBcdTAwM2NcdTAwM2NcbitcdFx0XHRcdChJU09GU19CTE9DS19CSVRTIC0gcy1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzKTtcbiBcdHNiaS1cdTAwM2VzX25sc19pb2NoYXJzZXQgPSBOVUxMO1xuIFxuICNpZmRlZiBDT05GSUdfSk9MSUVUXG5kaWZmIC0tZ2l0IGEvZnMvaXNvZnMvaXNvZnMuaCBiL2ZzL2lzb2ZzL2lzb2ZzLmhcbmluZGV4IGRhY2I5Y2RhZTRmZDEuLjA3MzJlMWFhM2I3ZmEgMTAwNjQ0XG4tLS0gYS9mcy9pc29mcy9pc29mcy5oXG4rKysgYi9mcy9pc29mcy9pc29mcy5oXG5AQCAtMzUsNiArMzUsOCBAQCBzdHJ1Y3QgaXNvZnNfc2JfaW5mbyB7XG4gXHR1bnNpZ25lZCBsb25nIHNfZmlyc3RkYXRhem9uZTtcbiBcdHVuc2lnbmVkIGxvbmcgc19sb2dfem9uZV9zaXplO1xuIFx0dW5zaWduZWQgbG9uZyBzX21heF9zaXplO1xuK1x0LyogU2Vzc2lvbiBzdGFydCBpbiBmaWxlc3lzdGVtIGJsb2NrIHVuaXRzLiAqL1xuK1x0dTY0IHNfc2Vzc2lvbl9zdGFydDtcbiBcdFxuIFx0aW50ICAgICAgICAgICBzX3JvY2tfb2Zmc2V0OyAvKiBvZmZzZXQgb2YgU1VTUCBmaWVsZHMgd2l0aGluIFNVIGFyZWEgKi9cbiBcdHMzMiAgICAgICAgICAgc19zYnNlY3RvcjtcbmRpZmYgLS1naXQgYS9mcy9pc29mcy9yb2NrLmMgYi9mcy9pc29mcy9yb2NrLmNcbmluZGV4IDI2MjhmMzFiZDNhNWQuLmE5NjQ1YTllODYyODkgMTAwNjQ0XG4tLS0gYS9mcy9pc29mcy9yb2NrLmNcbisrKyBiL2ZzL2lzb2ZzL3JvY2suY1xuQEAgLTksNiArOSw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZW1hcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYmxrZGV2LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImlzb2ZzLmhcIlxuICNpbmNsdWRlIFwicm9jay5oXCJcbkBAIC04NCw2ICs4NSwxMSBAQCBzdGF0aWMgdm9pZCBpbml0X3JvY2tfc3RhdGUoc3RydWN0IHJvY2tfc3RhdGUgKnJzLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuICAqL1xuIHN0YXRpYyBpbnQgcm9ja19jb250aW51ZShzdHJ1Y3Qgcm9ja19zdGF0ZSAqcnMpXG4ge1xuK1x0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHJzLVx1MDAzZWlub2RlLVx1MDAzZWlfc2I7XG4rXHRzdHJ1Y3QgaXNvZnNfc2JfaW5mbyAqc2JpID0gSVNPRlNfU0Ioc2IpO1xuK1x0dTY0IGV4dGVudCA9ICh1bnNpZ25lZCBpbnQpcnMtXHUwMDNlY29udF9leHRlbnQ7XG4rXHR1NjQgc2Vzc2lvbl9lbmQgPSBzYmktXHUwMDNlc19zZXNzaW9uX3N0YXJ0ICtcbitcdFx0KCh1NjQpc2JpLVx1MDAzZXNfbnpvbmVzIFx1MDAzY1x1MDAzYyAoSVNPRlNfQkxPQ0tfQklUUyAtIHNiLVx1MDAzZXNfYmxvY2tzaXplX2JpdHMpKTtcbiBcdGludCByZXQgPSAxO1xuIFx0aW50IGJsb2Nrc2l6ZSA9IDEgXHUwMDNjXHUwMDNjIHJzLVx1MDAzZWlub2RlLVx1MDAzZWlfYmxrYml0cztcbiBcdGNvbnN0IGludCBtaW5fZGVfc2l6ZSA9IG9mZnNldG9mKHN0cnVjdCByb2NrX3JpZGdlLCB1KTtcbkBAIC0xMDEsMTEgKzEwNywxNCBAQCBzdGF0aWMgaW50IHJvY2tfY29udGludWUoc3RydWN0IHJvY2tfc3RhdGUgKnJzKVxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdGlmICgodW5zaWduZWQpcnMtXHUwMDNlY29udF9leHRlbnQgXHUwMDNlPSBJU09GU19TQihycy1cdTAwM2Vpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX256b25lcykge1xuK1x0aWYgKHJzLVx1MDAzZWNvbnRfZXh0ZW50IFx1MDAyNlx1MDAyNlxuK1x0ICAgIChleHRlbnQgXHUwMDNjIHNiaS1cdTAwM2VzX3Nlc3Npb25fc3RhcnQgfHxcbitcdCAgICAgZXh0ZW50IFx1MDAzZT0gc2Vzc2lvbl9lbmQgfHxcbitcdCAgICAgZXh0ZW50IFx1MDAzZT0gc2JfYmRldl9ucl9ibG9ja3Moc2IpKSkge1xuIFx0XHRwcmludGsoS0VSTl9OT1RJQ0UgXCJyb2NrOiBjb3JydXB0ZWQgZGlyZWN0b3J5IGVudHJ5LiBcIlxuIFx0XHRcdFwiZXh0ZW50PSV1IG91dCBvZiB2b2x1bWUgKG56b25lcz0lbHUpXFxuXCIsXG4gXHRcdFx0KHVuc2lnbmVkKXJzLVx1MDAzZWNvbnRfZXh0ZW50LFxuLVx0XHRcdElTT0ZTX1NCKHJzLVx1MDAzZWlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfbnpvbmVzKTtcbitcdFx0XHRzYmktXHUwMDNlc19uem9uZXMpO1xuIFx0XHRyZXQgPSAtRUlPO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEyOjE2OjEyLjc0MjQzNTAyOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NDQ5ODM4MDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrIGluIHRoZSBJU09GUyBGaWxlc3lzdGVtKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGEgcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgc3BlY2lmaWNhbGx5IHdpdGggdGhlIGBOZWVkc0tNU0FOPXRydWVgIGZsYWcsIG9yIGlmIHN0YW5kYXJkIEtBU0FOIGNoZWNrcyBhcmUgc3VmZmljaWVudCAoYE5lZWRzS01TQU49ZmFsc2VgKS4gSXQgbG9va3MgbGlrZSB3ZSdyZSBkZWFsaW5nIHdpdGggY2FsY3VsYXRpb25zIHJlbGF0ZWQgdG8gc2Vzc2lvbiBzdGFydCBhbmQgZW5kIHBvaW50cyB3aXRoaW4gdGhlIElTT0ZTIGZpbGVzeXN0ZW0uXG5cbkxvb2tpbmcgYXQgdGhlIGNvZGUsIGluIGBmcy9pc29mcy9pbm9kZS5jYCwgdGhlIGBpc29mc19maWxsX3N1cGVyYCBmdW5jdGlvbiBwb3B1bGF0ZXMgYHNiaS1cdTAwM2VzX3Nlc3Npb25fc3RhcnRgLiBUaGlzIGBzX3Nlc3Npb25fc3RhcnRgIGlzIHRoZW4gdXNlZCBpbiBgZnMvaXNvZnMvcm9jay5jYCB3aXRoaW4gdGhlIGByb2NrX2NvbnRpbnVlYCBmdW5jdGlvbi4gSXQgc2VlbXMgdG8gYmUgcGFydCBvZiBhIGxhcmdlciBjYWxjdWxhdGlvbiBkZXRlcm1pbmluZyB0aGUgZXh0ZW50IG9mIHNvbWUgZGF0YS4gU3BlY2lmaWNhbGx5LCBpdCdzIHVzZWQgdG8gZGVyaXZlIGBzZXNzaW9uX2VuZGAsIHdoaWNoIGlzIHRoZW4gY29tcGFyZWQgYWdhaW5zdCBgZXh0ZW50YC4gVGhlIGNyaXRpY2FsIHBpZWNlIGlzIHdoZXRoZXIgYHNiaS1cdTAwM2VzX3Nlc3Npb25fc3RhcnRgIGlzIHJlbGlhYmx5IGluaXRpYWxpemVkIGJlZm9yZSBpdHMgdXNlIGluIHRoaXMgY2FsY3VsYXRpb24gYW5kIHN1YnNlcXVlbnQgY29tcGFyaXNvbi4gVGhlIGtleSBoZXJlIGlzIGFsc28gYHNiaS1cdTAwM2VzX256b25lc2AsIHdoaWNoIGlzIGFwcGFyZW50bHkgYWxzbyBwYXJ0IG9mIGRldGVybWluaW5nIGBzZXNzaW9uX2VuZGAuXG5cbkkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBob3cgYGlzb2ZzX3NiX2luZm9gIGlzIGFsbG9jYXRlZCBhbmQgaG93IGl0cyBtZW1iZXJzIGFyZSBoYW5kbGVkLiBXZSdyZSBsb29raW5nIGZvciB3aGV0aGVyIHRoZXJlJ3MgYSBwb3NzaWJpbGl0eSBvZiB0aGVzZSB2YWx1ZXMgcmVtYWluaW5nIGdhcmJhZ2UuIEknbGwgbmVlZCB0byB1c2UgbXkgdXN1YWwgbWV0aG9kcywgcmV2aWV3aW5nIHRoZSBhbGxvY2F0aW9uIHNpdGUgb2YgYGlzb2ZzX3NiX2luZm9gIGFuZCBob3cgYHNfc2Vzc2lvbl9zdGFydGAgYW5kIGBzX256b25lc2AgYXJlIHBvcHVsYXRlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyByZXF1aXJlcyBhIGZ1bGwgS01TQU4gY2hlY2ssIG9yIGlmIHN0YW5kYXJkIEtBU0FOIGNvdmVyYWdlIGlzIGVub3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg3NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEyOjE2OjE5LjE5MjI3NjAxNVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc0NzM4NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXNvZnNfZmlsbF9zdXBlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9pc29mcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaXNvZnMvaW5vZGUuYz01NTA9c3RhdGljIGJvb2wgcm9vdGRpcl9lbXB0eShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGJsb2NrKVxcbi0tXFxuZnMvaXNvZnMvaW5vZGUuYy01NzMtICovXFxuZnMvaXNvZnMvaW5vZGUuYzo1NzQ6c3RhdGljIGludCBpc29mc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbmZzL2lzb2ZzL2lub2RlLmMtNTc1LXtcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmMtOTM2LVxcdFxcdHByaW50ayhLRVJOX1dBUk5JTkdcXG5mcy9pc29mcy9pbm9kZS5jOjkzNzpcXHRcXHRcXHRcXFwiaXNvZnNfZmlsbF9zdXBlcjogcm9vdCBpbm9kZSBpcyBub3QgYSBkaXJlY3RvcnkuIFxcXCJcXG5mcy9pc29mcy9pbm9kZS5jLTkzOC1cXHRcXHRcXHRcXFwiQ29ycnVwdGVkIG1lZGlhP1xcXFxuXFxcIik7XFxuLS1cXG5mcy9pc29mcy9pbm9kZS5jPTE1Mzk9c3RhdGljIGludCBpc29mc19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuZnMvaXNvZnMvaW5vZGUuYy0xNTQwLXtcXG5mcy9pc29mcy9pbm9kZS5jOjE1NDE6XFx0cmV0dXJuIGdldF90cmVlX2JkZXYoZmMsIGlzb2ZzX2ZpbGxfc3VwZXIpO1xcbmZzL2lzb2ZzL2lub2RlLmMtMTU0Mi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEyOjE2OjE5LjI0OTc1NzUwNVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDcxNzY5MDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGUgY29kZSBhcyBhbiBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gdGhlIElTT0ZTIFN1cGVyYmxvY2sgSW5pdGlhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBjcmFjayBvcGVuIGBmcy9pc29mcy9pbm9kZS5jYCBhbmQgemVybyBpbiBvbiB0aGF0IGBpc29mc19maWxsX3N1cGVyYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIElTT0ZTIGZpbGVzeXN0ZW0gZ2V0cyBpbml0aWFsaXplZCBvbiBtb3VudC4gUmlnaHQsIHNvIHdlJ3JlIHN0YXJ0aW5nIHdpdGggdGhlIHN1cGVyYmxvY2sgc3RydWN0dXJlLCB0aGUgaGVhcnQgb2YgdGhlIGZpbGVzeXN0ZW0ncyBtZXRhZGF0YS4gSSdtIGltbWVkaWF0ZWx5IGxvb2tpbmcgZm9yIGhvdyB0aGUgZGV2aWNlIGluZm9ybWF0aW9uIGlzIHB1bGxlZCBpbiAtIGdvdHRhIGZpbmQgd2hlcmUgdGhlIGJsb2NrIGRldmljZSBnZXRzIGNvbm5lY3RlZC4gSXMgaXQgYmVpbmcgcGFzc2VkIGRpcmVjdGx5IGFzIGFuIGFyZ3VtZW50LCBvciBpcyBpdCByZXRyaWV2ZWQgc29tZWhvdyBmcm9tIHRoZSBgc3RydWN0IHN1cGVyX2Jsb2NrYCBpdHNlbGY/XG5cbk9rYXksIGxvb2tzIGxpa2Ugd2UncmUgY2FsbGluZyBgc2dldF9mY2AgYW5kIHRoZW4gYGlzb2ZzX3JlYWRfc3VwZXJgIHdpdGggdGhlIGBzdXBlcl9ibG9ja2AgYXMgYSBwYXJhbWV0ZXIuIGBpc29mc19yZWFkX3N1cGVyYCBpcyBrZXk7IHRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yaydzIGRvbmUgdG8gYWN0dWFsbHkgcmVhZCBmcm9tIHRoZSBkZXZpY2UgYW5kIGJ1aWxkIHRoZSBpbml0aWFsIGZpbGVzeXN0ZW0gcmVwcmVzZW50YXRpb24gaW4gbWVtb3J5LiBJIHNlZSBpdCdzIGdvaW5nIHRvIGJlIGxvb2tpbmcgZm9yIHRoZSBJU08gOTY2MCBWb2x1bWUgRGVzY3JpcHRvciBTZXQuIEknbSBrZWVuIHRvIHNlZSBpZiB0aGV5J3JlIGhhbmRsaW5nIGRpZmZlcmVudCB2b2x1bWUgZGVzY3JpcHRvciB0eXBlcyBhbmQgaWYgdGhlIGVycm9yIGNoZWNraW5nIGFyb3VuZCB0aG9zZSBkZXNjcmlwdG9ycyBpcyByb2J1c3QuIEFueSBjbGV2ZXIgdHJpY2tzIGluIGlkZW50aWZ5aW5nIHRoZSBwcmltYXJ5IHZvbHVtZSBkZXNjcmlwdG9yPyBDaGVja3N1bXM/IERvdWJsZS1jaGVja2luZyB0aGUgaWRlbnRpZmllciBzdHJpbmc/XG5cbk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBob3cgYXJlIHRoZSByb290IGRpcmVjdG9yeSdzIGlub2RlIGFuZCB0aGUgc3VwZXJibG9jaydzIGBzX3Jvb3RgIHBvaW50ZXIgYmVpbmcgZXN0YWJsaXNoZWQ/IFRoYXQncyB3aGF0IEknbSByZWFsbHkgY29uY2VybmVkIGFib3V0LiBMZXQncyBzZWUgaG93IHRoZSByb290IGlub2RlIGlzIGJ1aWx0LiBBcmUgdGhleSBjcmVhdGluZyBhIG5ldyBpbm9kZSBkaXJlY3RseSwgb3IgaXMgaXQgYSBzcGVjaWFsIGNhc2U/IEhvdyBkbyB0aGV5IGhhbmRsZSB0aGUgdmFyaW91cyB2b2x1bWUgZGVzY3JpcHRvcnMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgZGF0YT8gVW5kZXJzdGFuZGluZyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGlzIGNydWNpYWwsIHdoYXQgYXJlIHRoZSByZWxldmFudCBmaWVsZHMgaW4gdGhlIHZvbHVtZSBkZXNjcmlwdG9yPyBBcmUgdGhleSB1c2luZyBhIGJ1ZmZlciB0byBzdG9yZSB0aGUgcm9vdCBkaXJlY3RvcnkncyBmaWxlIHN5c3RlbSBlbnRyeT8gTGV0J3MgY2hlY2sgaG93IHRoZSBpbm9kZSBudW1iZXJzIGFyZSBhc3NpZ25lZC4gV2UgY2FuJ3QgaGF2ZSBjb2xsaXNpb25zLiBcblxuUmlnaHQsIEknbSB3YXRjaGluZyBvdXQgZm9yIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93cyB3aGVuIGNhbGN1bGF0aW5nIGJsb2NrIG9mZnNldHMsIGFuZCBvZiBjb3Vyc2UsIHByb3BlciBlcnJvciBoYW5kbGluZyBhbmQgcmVzb3VyY2UgY2xlYW51cC4gSXMgbWVtb3J5IGJlaW5nIGFsbG9jYXRlZCBhbmQgZGVhbGxvY2F0ZWQgY29ycmVjdGx5LCBlc3BlY2lhbGx5IGZvciB0aGUgZGlyZWN0b3J5IGVudHJpZXMgYW5kIHRoZSBidWZmZXI/IEFueSBtaXNzZWQgYGtmcmVlYCBjYWxscyB3b3VsZCBiZSBhIHNlcmlvdXMgcHJvYmxlbSBpbiB0aGUgbG9uZyBydW4uIEkgYWxzbyB3YW50IHRvIHZlcmlmeSB0aGV5IGFyZSBoYW5kbGluZyBhbnkgZW5kaWFubmVzcyBpc3N1ZXMgY29ycmVjdGx5LCBlc3BlY2lhbGx5IHdoZW4gcGFyc2luZyBtdWx0aS1ieXRlIGZpZWxkcyBmcm9tIHRoZSBkaXNrIGltYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTU4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTI6MTY6MjIuNzIxNTMwMTYzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9pc29mcy9pbm9kZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU3NCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU3NDpcXHRzdGF0aWMgaW50IGlzb2ZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuIDU3NTpcXHR7XFxuIDU3NjpcXHRcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTCwgKnByaV9iaCA9IE5VTEw7XFxuIDU3NzpcXHRcXHRzdHJ1Y3QgaHNfcHJpbWFyeV9kZXNjcmlwdG9yICpoX3ByaSA9IE5VTEw7XFxuIDU3ODpcXHRcXHRzdHJ1Y3QgaXNvX3ByaW1hcnlfZGVzY3JpcHRvciAqcHJpID0gTlVMTDtcXG4gNTc5OlxcdFxcdHN0cnVjdCBpc29fc3VwcGxlbWVudGFyeV9kZXNjcmlwdG9yICpzZWMgPSBOVUxMO1xcbiA1ODA6XFx0XFx0c3RydWN0IGlzb19kaXJlY3RvcnlfcmVjb3JkICpyb290cDtcXG4gNTgxOlxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XFxuIDU4MjpcXHRcXHRzdHJ1Y3QgaXNvZnNfb3B0aW9ucyAqb3B0ID0gZmMtXFx1MDAzZWZzX3ByaXZhdGU7XFxuIDU4MzpcXHRcXHRzdHJ1Y3QgaXNvZnNfc2JfaW5mbyAqc2JpO1xcbiA1ODQ6XFx0XFx0dW5zaWduZWQgbG9uZyBmaXJzdF9kYXRhX3pvbmU7XFxuIDU4NTpcXHRcXHRpbnQgam9saWV0X2xldmVsID0gMDtcXG4gNTg2OlxcdFxcdGludCBpc29fYmxrbnVtLCBibG9jaztcXG4gNTg3OlxcdFxcdGludCBvcmlnX3pvbmVzaXplO1xcbiA1ODg6XFx0XFx0aW50IHRhYmxlLCBlcnJvciA9IC1FSU5WQUw7XFxuIDU4OTpcXHRcXHR1bnNpZ25lZCBpbnQgdm9sX2Rlc2Nfc3RhcnQ7XFxuIDU5MDpcXHRcXHRpbnQgc2lsZW50ID0gZmMtXFx1MDAzZXNiX2ZsYWdzIFxcdTAwMjYgU0JfU0lMRU5UO1xcbiA1OTE6XFx0XFxuIDU5MjpcXHRcXHRzYmkgPSBremFsbG9jX29iaigqc2JpKTtcXG4gNTkzOlxcdFxcdGlmICghc2JpKVxcbiA1OTQ6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDU5NTpcXHRcXHRzLVxcdTAwM2VzX2ZzX2luZm8gPSBzYmk7XFxuIDU5NjpcXHRcXG4gNTk3OlxcdFxcdC8qXFxuIDU5ODpcXHRcXHQgKiBGaXJzdCBvZiBhbGwsIGdldCB0aGUgaGFyZHdhcmUgYmxvY2tzaXplIGZvciB0aGlzIGRldmljZS5cXG4gNTk5OlxcdFxcdCAqIElmIHdlIGRvbid0IGtub3cgd2hhdCBpdCBpcywgb3IgdGhlIGhhcmR3YXJlIGJsb2Nrc2l6ZSBpc1xcbiA2MDA6XFx0XFx0ICogbGFyZ2VyIHRoYW4gdGhlIGJsb2Nrc2l6ZSB0aGUgdXNlciBzcGVjaWZpZWQsIHRoZW4gdXNlXFxuIDYwMTpcXHRcXHQgKiB0aGF0IHZhbHVlLlxcbiA2MDI6XFx0XFx0ICovXFxuIDYwMzpcXHRcXHQvKlxcbiA2MDQ6XFx0XFx0ICogV2hhdCBpZiBidWdnZXIgdGVsbHMgdXMgdG8gZ28gYmV5b25kIHBhZ2Ugc2l6ZT9cXG4gNjA1OlxcdFxcdCAqL1xcbiA2MDY6XFx0XFx0aWYgKGJkZXZfbG9naWNhbF9ibG9ja19zaXplKHMtXFx1MDAzZXNfYmRldikgXFx1MDAzZSAyMDQ4KSB7XFxuIDYwNzpcXHRcXHRcXHRwcmludGsoS0VSTl9XQVJOSU5HXFxuIDYwODpcXHRcXHRcXHQgICAgICAgXFxcIklTT0ZTOiB1bnN1cHBvcnRlZC9pbnZhbGlkIGhhcmR3YXJlIHNlY3RvciBzaXplICVkXFxcXG5cXFwiLFxcbiA2MDk6XFx0XFx0XFx0XFx0YmRldl9sb2dpY2FsX2Jsb2NrX3NpemUocy1cXHUwMDNlc19iZGV2KSk7XFxuIDYxMDpcXHRcXHRcXHRnb3RvIG91dF9mcmVlc2JpO1xcbiA2MTE6XFx0XFx0fVxcbiA2MTI6XFx0XFx0b3B0LVxcdTAwM2VibG9ja3NpemUgPSBzYl9taW5fYmxvY2tzaXplKHMsIG9wdC1cXHUwMDNlYmxvY2tzaXplKTtcXG4gNjEzOlxcdFxcdGlmICghb3B0LVxcdTAwM2VibG9ja3NpemUpIHtcXG4gNjE0OlxcdFxcdFxcdHByaW50ayhLRVJOX0VSUlxcbiA2MTU6XFx0XFx0XFx0ICAgICAgIFxcXCJJU09GUzogdW5hYmxlIHRvIHNldCBibG9ja3NpemVcXFxcblxcXCIpO1xcbiA2MTY6XFx0XFx0XFx0Z290byBvdXRfZnJlZXNiaTtcXG4gNjE3OlxcdFxcdH1cXG4gNjE4OlxcdFxcbiA2MTk6XFx0XFx0c2JpLVxcdTAwM2VzX2hpZ2hfc2llcnJhID0gMDsgLyogZGVmYXVsdCBpcyBpc285NjYwICovXFxuIDYyMDpcXHRcXHRzYmktXFx1MDAzZXNfc2Vzc2lvbiA9IG9wdC1cXHUwMDNlc2Vzc2lvbjtcXG4gNjIxOlxcdFxcdHNiaS1cXHUwMDNlc19zYnNlY3RvciA9IG9wdC1cXHUwMDNlc2JzZWN0b3I7XFxuIDYyMjpcXHRcXG4gNjIzOlxcdFxcdHZvbF9kZXNjX3N0YXJ0ID0gKG9wdC1cXHUwMDNlc2JzZWN0b3IgIT0gLTEpID9cXG4gNjI0OlxcdFxcdFxcdG9wdC1cXHUwMDNlc2JzZWN0b3IgOiBpc29mc19nZXRfbGFzdF9zZXNzaW9uKHMsIG9wdC1cXHUwMDNlc2Vzc2lvbik7XFxuIDYyNTpcXHRcXG4gNjI2OlxcdFxcdGZvciAoaXNvX2Jsa251bSA9IHZvbF9kZXNjX3N0YXJ0KzE2O1xcbiA2Mjc6XFx0XFx0XFx0aXNvX2Jsa251bSBcXHUwMDNjIHZvbF9kZXNjX3N0YXJ0KzEwMDsgaXNvX2Jsa251bSsrKSB7XFxuIDYyODpcXHRcXHRcXHRzdHJ1Y3QgaHNfdm9sdW1lX2Rlc2NyaXB0b3IgKmhkcDtcXG4gNjI5OlxcdFxcdFxcdHN0cnVjdCBpc29fdm9sdW1lX2Rlc2NyaXB0b3IgICp2ZHA7XFxuIDYzMDpcXHRcXG4gNjMxOlxcdFxcdFxcdGJsb2NrID0gaXNvX2Jsa251bSBcXHUwMDNjXFx1MDAzYyAoSVNPRlNfQkxPQ0tfQklUUyAtIHMtXFx1MDAzZXNfYmxvY2tzaXplX2JpdHMpO1xcbiA2MzI6XFx0XFx0XFx0aWYgKCEoYmggPSBzYl9icmVhZChzLCBibG9jaykpKVxcbiA2MzM6XFx0XFx0XFx0XFx0Z290byBvdXRfbm9fcmVhZDtcXG4gNjM0OlxcdFxcbiA2MzU6XFx0XFx0XFx0dmRwID0gKHN0cnVjdCBpc29fdm9sdW1lX2Rlc2NyaXB0b3IgKiliaC1cXHUwMDNlYl9kYXRhO1xcbiA2MzY6XFx0XFx0XFx0aGRwID0gKHN0cnVjdCBoc192b2x1bWVfZGVzY3JpcHRvciAqKWJoLVxcdTAwM2ViX2RhdGE7XFxuIDYzNzpcXHRcXG4gNjM4OlxcdFxcdFxcdC8qXFxuIDYzOTpcXHRcXHRcXHQgKiBEdWUgdG8gdGhlIG92ZXJsYXBwaW5nIHBoeXNpY2FsIGxvY2F0aW9uIG9mIHRoZSBkZXNjcmlwdG9ycyxcXG4gNjQwOlxcdFxcdFxcdCAqIElTTyBDRHMgY2FuIG1hdGNoIGhkcC1cXHUwMDNlaWQ9PUhTX1NUQU5EQVJEX0lEIGFzIHdlbGwuIFRvIGVuc3VyZVxcbiA2NDE6XFx0XFx0XFx0ICogcHJvcGVyIGlkZW50aWZpY2F0aW9uIGluIHRoaXMgY2FzZSwgd2UgZmlyc3QgY2hlY2sgZm9yIElTTy5cXG4gNjQyOlxcdFxcdFxcdCAqL1xcbiA2NDM6XFx0XFx0XFx0aWYgKHN0cm5jbXAgKHZkcC1cXHUwMDNlaWQsIElTT19TVEFOREFSRF9JRCwgc2l6ZW9mIHZkcC1cXHUwMDNlaWQpID09IDApIHtcXG4gNjQ0OlxcdFxcdFxcdFxcdGlmIChpc29udW1fNzExKHZkcC1cXHUwMDNldHlwZSkgPT0gSVNPX1ZEX0VORClcXG4gNjQ1OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA2NDY6XFx0XFx0XFx0XFx0aWYgKGlzb251bV83MTEodmRwLVxcdTAwM2V0eXBlKSA9PSBJU09fVkRfUFJJTUFSWSkge1xcbiA2NDc6XFx0XFx0XFx0XFx0XFx0aWYgKCFwcmkpIHtcXG4gNjQ4OlxcdFxcdFxcdFxcdFxcdFxcdHByaSA9IChzdHJ1Y3QgaXNvX3ByaW1hcnlfZGVzY3JpcHRvciAqKXZkcDtcXG4gNjQ5OlxcdFxcdFxcdFxcdFxcdFxcdC8qIFNhdmUgdGhlIGJ1ZmZlciBpbiBjYXNlIHdlIG5lZWQgaXQgLi4uICovXFxuIDY1MDpcXHRcXHRcXHRcXHRcXHRcXHRwcmlfYmggPSBiaDtcXG4gNjUxOlxcdFxcdFxcdFxcdFxcdFxcdGJoID0gTlVMTDtcXG4gNjUyOlxcdFxcdFxcdFxcdFxcdH1cXG4gNjUzOlxcdFxcdFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTI6MTY6MjIuNzIxNjM5MDgzWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0ODI2MTAwMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgaXNvZnNfZmlsbF9zdXBlcmAqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgd2UgbmVlZCB0byB6ZXJvIGluIG9uIGEgcG90ZW50aWFsIGlzc3VlIHdpdGhpbiBgaXNvZnNfZmlsbF9zdXBlcmAuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgY29kZSBhcm91bmQgbGluZSA4MjAuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBmaWxlc3lzdGVtLCB0aGVyZSdzIGxpa2VseSBzb21ldGhpbmcgaW50ZXJlc3RpbmcgaGFwcGVuaW5nIHRoZXJlIHJlbGF0ZWQgdG8gW3lvdXIgZmllbGQvc3BlY2lmaWMgYXJlYSBvZiBleHBlcnRpc2UsIGUuZy4sIGhvdyB0aGUgc3VwZXJibG9jayBpcyBpbml0aWFsaXplZCwgdm9sdW1lIGRlc2NyaXB0b3IgcGFyc2luZywgYWxsb2NhdGlvbiBzdHJhdGVnaWVzLCBldGMuIC0gYmFzZWQgb24geW91ciBhcmVhIG9mIGtub3dsZWRnZV0uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIHdpdGhpbiB0aGF0IHNlY3Rpb24gdG8gcGlucG9pbnQgd2hldGhlciBpdCBpcyBjb25uZWN0ZWQgdG8gW3RoZSBwcm9ibGVtIHlvdSBhcmUgaW52ZXN0aWdhdGluZ10uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4NzEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEyOjE2OjI1LjIwNDI1MTg1NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvaXNvZnMvaW5vZGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MDA6XFx0XFx0ICovXFxuIDgwMTpcXHRcXHRicmVsc2UocHJpX2JoKTtcXG4gODAyOlxcdFxcdGJyZWxzZShiaCk7XFxuIDgwMzpcXHRcXG4gODA0OlxcdFxcdC8qXFxuIDgwNTpcXHRcXHQgKiBGb3JjZSB0aGUgYmxvY2tzaXplIHRvIDUxMiBmb3IgNTEyIGJ5dGUgc2VjdG9ycy4gIFRoZSBmaWxlXFxuIDgwNjpcXHRcXHQgKiByZWFkIHByaW1pdGl2ZXMgcmVhbGx5IGdldCBpdCB3cm9uZyBpbiBhIGJhZCB3YXkgaWYgd2UgZG9uJ3RcXG4gODA3OlxcdFxcdCAqIGRvIHRoaXMuXFxuIDgwODpcXHRcXHQgKlxcbiA4MDk6XFx0XFx0ICogTm90ZSAtIHdlIHNob3VsZCBuZXZlciBiZSBzZXR0aW5nIHRoZSBibG9ja3NpemUgdG8gc29tZXRoaW5nXFxuIDgxMDpcXHRcXHQgKiBsZXNzIHRoYW4gdGhlIGhhcmR3YXJlIHNlY3RvciBzaXplIGZvciB0aGUgZGV2aWNlLiAgSWYgd2VcXG4gODExOlxcdFxcdCAqIGRvLCB3ZSB3b3VsZCBlbmQgdXAgaGF2aW5nIHRvIHJlYWQgbGFyZ2VyIGJ1ZmZlcnMgYW5kIHNwbGl0XFxuIDgxMjpcXHRcXHQgKiBvdXQgcG9ydGlvbnMgdG8gc2F0aXNmeSByZXF1ZXN0cy5cXG4gODEzOlxcdFxcdCAqXFxuIDgxNDpcXHRcXHQgKiBOb3RlMi0gdGhlIGlkZWEgaGVyZSBpcyB0aGF0IHdlIHdhbnQgdG8gZGVhbCB3aXRoIHRoZSBvcHRpbWFsXFxuIDgxNTpcXHRcXHQgKiB6b25lc2l6ZSBpbiB0aGUgZmlsZXN5c3RlbS4gIElmIHdlIGhhdmUgaXQgc2V0IHRvIHNvbWV0aGluZyBsZXNzLFxcbiA4MTY6XFx0XFx0ICogdGhlbiB3ZSBoYXZlIGhvcnJpYmxlIHByb2JsZW1zIHdpdGggdHJ5aW5nIHRvIHBpZWNlIHRvZ2V0aGVyXFxuIDgxNzpcXHRcXHQgKiBiaXRzIG9mIGFkamFjZW50IGJsb2NrcyBpbiBvcmRlciB0byBwcm9wZXJseSByZWFkIGRpcmVjdG9yeVxcbiA4MTg6XFx0XFx0ICogZW50cmllcy4gIEJ5IGZvcmNpbmcgdGhlIGJsb2Nrc2l6ZSBpbiB0aGlzIHdheSwgd2UgZW5zdXJlXFxuIDgxOTpcXHRcXHQgKiB0aGF0IHdlIHdpbGwgbmV2ZXIgYmUgcmVxdWlyZWQgdG8gZG8gdGhpcy5cXG4gODIwOlxcdFxcdCAqL1xcbiA4MjE6XFx0XFx0aWYgKCFzYl9zZXRfYmxvY2tzaXplKHMsIG9yaWdfem9uZXNpemUpKVxcbiA4MjI6XFx0XFx0XFx0Z290byBvdXRfZnJlZXNiaTtcXG4gODIzOlxcdFxcbiA4MjQ6XFx0XFx0c2JpLVxcdTAwM2VzX3Nlc3Npb25fc3RhcnQgPSAodTY0KXZvbF9kZXNjX3N0YXJ0IFxcdTAwM2NcXHUwMDNjXFxuIDgyNTpcXHRcXHRcXHRcXHRcXHQoSVNPRlNfQkxPQ0tfQklUUyAtIHMtXFx1MDAzZXNfYmxvY2tzaXplX2JpdHMpO1xcbiA4MjY6XFx0XFx0c2JpLVxcdTAwM2VzX25sc19pb2NoYXJzZXQgPSBOVUxMO1xcbiA4Mjc6XFx0XFxuIDgyODpcXHQjaWZkZWYgQ09ORklHX0pPTElFVFxcbiA4Mjk6XFx0XFx0aWYgKGpvbGlldF9sZXZlbCkge1xcbiA4MzA6XFx0XFx0XFx0Y2hhciAqcCA9IG9wdC1cXHUwMDNlaW9jaGFyc2V0ID8gb3B0LVxcdTAwM2Vpb2NoYXJzZXQgOiBDT05GSUdfTkxTX0RFRkFVTFQ7XFxuIDgzMTpcXHRcXHRcXHRpZiAoc3RyY21wKHAsIFxcXCJ1dGY4XFxcIikgIT0gMCkge1xcbiA4MzI6XFx0XFx0XFx0XFx0c2JpLVxcdTAwM2VzX25sc19pb2NoYXJzZXQgPSBvcHQtXFx1MDAzZWlvY2hhcnNldCA/XFxuIDgzMzpcXHRcXHRcXHRcXHRcXHRsb2FkX25scyhvcHQtXFx1MDAzZWlvY2hhcnNldCkgOiBsb2FkX25sc19kZWZhdWx0KCk7XFxuIDgzNDpcXHRcXHRcXHRcXHRpZiAoIXNiaS1cXHUwMDNlc19ubHNfaW9jaGFyc2V0KVxcbiA4MzU6XFx0XFx0XFx0XFx0XFx0Z290byBvdXRfZnJlZXNiaTtcXG4gODM2OlxcdFxcdFxcdH1cXG4gODM3OlxcdFxcdH1cXG4gODM4OlxcdCNlbmRpZlxcbiA4Mzk6XFx0XFx0cy1cXHUwMDNlc19vcCA9IFxcdTAwMjZpc29mc19zb3BzO1xcbiA4NDA6XFx0XFx0cy1cXHUwMDNlc19leHBvcnRfb3AgPSBcXHUwMDI2aXNvZnNfZXhwb3J0X29wcztcXG4gODQxOlxcdFxcdHNiaS1cXHUwMDNlc19tYXBwaW5nID0gb3B0LVxcdTAwM2VtYXA7XFxuIDg0MjpcXHRcXHRzYmktXFx1MDAzZXNfcm9jayA9IChvcHQtXFx1MDAzZXJvY2sgPyAyIDogMCk7XFxuIDg0MzpcXHRcXHRzYmktXFx1MDAzZXNfcm9ja19vZmZzZXQgPSAtMTsgLyogaW5pdGlhbCBvZmZzZXQsIHdpbGwgZ3Vlc3MgdW50aWwgU1AgaXMgZm91bmQqL1xcbiA4NDQ6XFx0XFx0c2JpLVxcdTAwM2VzX2NydWZ0ID0gb3B0LVxcdTAwM2VjcnVmdDtcXG4gODQ1OlxcdFxcdHNiaS1cXHUwMDNlc19oaWRlID0gb3B0LVxcdTAwM2VoaWRlO1xcbiA4NDY6XFx0XFx0c2JpLVxcdTAwM2VzX3Nob3dhc3NvYyA9IG9wdC1cXHUwMDNlc2hvd2Fzc29jO1xcbiA4NDc6XFx0XFx0c2JpLVxcdTAwM2VzX3VpZCA9IG9wdC1cXHUwMDNldWlkO1xcbiA4NDg6XFx0XFx0c2JpLVxcdTAwM2VzX2dpZCA9IG9wdC1cXHUwMDNlZ2lkO1xcbiA4NDk6XFx0XFx0c2JpLVxcdTAwM2VzX3VpZF9zZXQgPSBvcHQtXFx1MDAzZXVpZF9zZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEyOjE2OjI1LjIwNDM1NDk5NFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODY4ODExMjYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byBSb2NrIFJpZGdlIEV4dGVuc2lvbnMgaW4gSVNPRlMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIHRyb3VibGVzaG9vdCB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgZnMvaXNvZnMvcm9jay5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYHJvY2tfY29udGludWVgIGZ1bmN0aW9uLiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IFJvY2sgUmlkZ2UgZXh0ZW5zaW9ucyBhcmUgaGFuZGxlZCBpbiB0aGUgSVNPIDk2NjAgZmlsZXN5c3RlbSBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGUgY29udGludWF0aW9uIHJlY29yZHMgYXJlIHN0cnVjdHVyZWQgYW5kIGhvdyB0aGUgc3lzdGVtIGl0ZXJhdGVzIHRocm91Z2ggdGhlbSB0byByZXNvbHZlIGV4dGVuZGVkIGZpbGVuYW1lcyBvciBhdHRyaWJ1dGVzLiBUaGUgcG90ZW50aWFsIHByb2JsZW0gbGlrZWx5IGxpZXMgc29tZXdoZXJlIGluIHRoZSBsb2dpYyB0aGF0IGhhbmRsZXMgYSBjb250aW51ZWQgUm9jayBSaWRnZSBlbnRyeS4gTGV0J3Mgc2VlIGlmIHRoZXJlJ3MgYW4gb2J2aW91cyBmbGF3IGluIGhvdyB0aGUgZHJpdmVyIHByb2Nlc3NlcyB0aG9zZSByZWNvcmRzLiBJJ20gbG9va2luZyBmb3IgYW55dGhpbmcgdGhhdCBjb3VsZCBsZWFkIHRvIGluY29tcGxldGUgb3IgaW5jb3JyZWN0IGludGVycHJldGF0aW9uIG9mIHRoZSBleHRlbmRlZCBhdHRyaWJ1dGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTYyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMjoxNjoyNy4wNzMxNjgwNzZaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvaXNvZnMvcm9jay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDgwOlxcdCNkZWZpbmUgUlJfTUFYX0NFX0VOVFJJRVMgMzJcXG4gIDgxOlxcdFxcbiAgODI6XFx0LypcXG4gIDgzOlxcdCAqIFJldHVybnMgMCBpZiB0aGUgY2FsbGVyIHNob3VsZCBjb250aW51ZSBzY2FubmluZywgMSBpZiB0aGUgc2NhbiBtdXN0IGVuZFxcbiAgODQ6XFx0ICogYW5kIC12ZSBvbiBlcnJvci5cXG4gIDg1OlxcdCAqL1xcbiAgODY6XFx0c3RhdGljIGludCByb2NrX2NvbnRpbnVlKHN0cnVjdCByb2NrX3N0YXRlICpycylcXG4gIDg3OlxcdHtcXG4gIDg4OlxcdFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBycy1cXHUwMDNlaW5vZGUtXFx1MDAzZWlfc2I7XFxuICA4OTpcXHRcXHRzdHJ1Y3QgaXNvZnNfc2JfaW5mbyAqc2JpID0gSVNPRlNfU0Ioc2IpO1xcbiAgOTA6XFx0XFx0dTY0IGV4dGVudCA9ICh1bnNpZ25lZCBpbnQpcnMtXFx1MDAzZWNvbnRfZXh0ZW50O1xcbiAgOTE6XFx0XFx0dTY0IHNlc3Npb25fZW5kID0gc2JpLVxcdTAwM2VzX3Nlc3Npb25fc3RhcnQgK1xcbiAgOTI6XFx0XFx0XFx0KCh1NjQpc2JpLVxcdTAwM2VzX256b25lcyBcXHUwMDNjXFx1MDAzYyAoSVNPRlNfQkxPQ0tfQklUUyAtIHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzKSk7XFxuICA5MzpcXHRcXHRpbnQgcmV0ID0gMTtcXG4gIDk0OlxcdFxcdGludCBibG9ja3NpemUgPSAxIFxcdTAwM2NcXHUwMDNjIHJzLVxcdTAwM2Vpbm9kZS1cXHUwMDNlaV9ibGtiaXRzO1xcbiAgOTU6XFx0XFx0Y29uc3QgaW50IG1pbl9kZV9zaXplID0gb2Zmc2V0b2Yoc3RydWN0IHJvY2tfcmlkZ2UsIHUpO1xcbiAgOTY6XFx0XFxuICA5NzpcXHRcXHRrZnJlZShycy1cXHUwMDNlYnVmZmVyKTtcXG4gIDk4OlxcdFxcdHJzLVxcdTAwM2VidWZmZXIgPSBOVUxMO1xcbiAgOTk6XFx0XFxuIDEwMDpcXHRcXHRpZiAoKHVuc2lnbmVkKXJzLVxcdTAwM2Vjb250X29mZnNldCBcXHUwMDNlIGJsb2Nrc2l6ZSAtIG1pbl9kZV9zaXplIHx8XFxuIDEwMTpcXHRcXHQgICAgKHVuc2lnbmVkKXJzLVxcdTAwM2Vjb250X3NpemUgXFx1MDAzZSBibG9ja3NpemUgfHxcXG4gMTAyOlxcdFxcdCAgICAodW5zaWduZWQpKHJzLVxcdTAwM2Vjb250X29mZnNldCArIHJzLVxcdTAwM2Vjb250X3NpemUpIFxcdTAwM2UgYmxvY2tzaXplKSB7XFxuIDEwMzpcXHRcXHRcXHRwcmludGsoS0VSTl9OT1RJQ0UgXFxcInJvY2s6IGNvcnJ1cHRlZCBkaXJlY3RvcnkgZW50cnkuIFxcXCJcXG4gMTA0OlxcdFxcdFxcdFxcdFxcXCJleHRlbnQ9JWQsIG9mZnNldD0lZCwgc2l6ZT0lZFxcXFxuXFxcIixcXG4gMTA1OlxcdFxcdFxcdFxcdHJzLVxcdTAwM2Vjb250X2V4dGVudCwgcnMtXFx1MDAzZWNvbnRfb2Zmc2V0LCBycy1cXHUwMDNlY29udF9zaXplKTtcXG4gMTA2OlxcdFxcdFxcdHJldCA9IC1FSU87XFxuIDEwNzpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMTA4OlxcdFxcdH1cXG4gMTA5OlxcdFxcbiAxMTA6XFx0XFx0aWYgKHJzLVxcdTAwM2Vjb250X2V4dGVudCBcXHUwMDI2XFx1MDAyNlxcbiAxMTE6XFx0XFx0ICAgIChleHRlbnQgXFx1MDAzYyBzYmktXFx1MDAzZXNfc2Vzc2lvbl9zdGFydCB8fFxcbiAxMTI6XFx0XFx0ICAgICBleHRlbnQgXFx1MDAzZT0gc2Vzc2lvbl9lbmQgfHxcXG4gMTEzOlxcdFxcdCAgICAgZXh0ZW50IFxcdTAwM2U9IHNiX2JkZXZfbnJfYmxvY2tzKHNiKSkpIHtcXG4gMTE0OlxcdFxcdFxcdHByaW50ayhLRVJOX05PVElDRSBcXFwicm9jazogY29ycnVwdGVkIGRpcmVjdG9yeSBlbnRyeS4gXFxcIlxcbiAxMTU6XFx0XFx0XFx0XFx0XFxcImV4dGVudD0ldSBvdXQgb2Ygdm9sdW1lIChuem9uZXM9JWx1KVxcXFxuXFxcIixcXG4gMTE2OlxcdFxcdFxcdFxcdCh1bnNpZ25lZClycy1cXHUwMDNlY29udF9leHRlbnQsXFxuIDExNzpcXHRcXHRcXHRcXHRzYmktXFx1MDAzZXNfbnpvbmVzKTtcXG4gMTE4OlxcdFxcdFxcdHJldCA9IC1FSU87XFxuIDExOTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMTIwOlxcdFxcdH1cXG4gMTIxOlxcdFxcbiAxMjI6XFx0XFx0aWYgKHJzLVxcdTAwM2Vjb250X2V4dGVudCkge1xcbiAxMjM6XFx0XFx0XFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaDtcXG4gMTI0OlxcdFxcbiAxMjU6XFx0XFx0XFx0cnMtXFx1MDAzZWJ1ZmZlciA9IGttYWxsb2MocnMtXFx1MDAzZWNvbnRfc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuIDEyNjpcXHRcXHRcXHRpZiAoIXJzLVxcdTAwM2VidWZmZXIpIHtcXG4gMTI3OlxcdFxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuIDEyODpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gMTI5OlxcdFxcdFxcdH1cXG4gMTMwOlxcdFxcdFxcdHJldCA9IC1FSU87XFxuIDEzMTpcXHRcXHRcXHRpZiAoKytycy1cXHUwMDNlY29udF9sb29wcyBcXHUwMDNlPSBSUl9NQVhfQ0VfRU5UUklFUylcXG4gMTMyOlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiAxMzM6XFx0XFx0XFx0YmggPSBzYl9icmVhZChycy1cXHUwMDNlaW5vZGUtXFx1MDAzZWlfc2IsIHJzLVxcdTAwM2Vjb250X2V4dGVudCk7XFxuIDEzNDpcXHRcXHRcXHRpZiAoYmgpIHtcXG4gMTM1OlxcdFxcdFxcdFxcdG1lbWNweShycy1cXHUwMDNlYnVmZmVyLCBiaC1cXHUwMDNlYl9kYXRhICsgcnMtXFx1MDAzZWNvbnRfb2Zmc2V0LFxcbiAxMzY6XFx0XFx0XFx0XFx0XFx0XFx0cnMtXFx1MDAzZWNvbnRfc2l6ZSk7XFxuIDEzNzpcXHRcXHRcXHRcXHRwdXRfYmgoYmgpO1xcbiAxMzg6XFx0XFx0XFx0XFx0cnMtXFx1MDAzZWNociA9IHJzLVxcdTAwM2VidWZmZXI7XFxuIDEzOTpcXHRcXHRcXHRcXHRycy1cXHUwMDNlbGVuID0gcnMtXFx1MDAzZWNvbnRfc2l6ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTI6MTY6MjcuMDczMjUwMjU2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYzODA2NTA2OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSb2NrIFJpZGdlIENvbnRpbnVhdGlvbiBFeHRlbnQgRml4KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHdoYXQncyB0aGUgY29yZSBvZiB0aGlzIHBhdGNoLCB0aGUgcHJvYmxlbSBpdCdzIHNvbHZpbmc/IEFoLCByaWdodCwgaXQncyBhYm91dCB0aGUgYHJvY2tfY29udGludWVgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgdGhlIGNvbnRpbnVhdGlvbiBleHRlbnQgKGBDRWAgZW50cmllcykgb2YgUm9jayBSaWRnZSBleHRlbnNpb24gcmVjb3Jkcy4gVGhlIG9sZGVyIGNvZGUgd2FzIHVzaW5nIHRoaXM6XG5cbmBgYGNcbmlmICgodW5zaWduZWQpcnMtXHUwMDNlY29udF9leHRlbnQgXHUwMDNlPSBJU09GU19TQihycy1cdTAwM2Vpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX256b25lcykge1xuYGBgXG5cblRoZSBwcm9ibGVtIGlzIGltbWVkaWF0ZWx5IG9idmlvdXMgdG8gbWUuIFdlJ3JlIGNvbXBhcmluZyBibG9jayB1bml0cyAoYHJzLVx1MDAzZWNvbnRfZXh0ZW50YCwgZXNzZW50aWFsbHkgdGhlIHBoeXNpY2FsIGJsb2NrL2V4dGVudCBvbiB0aGUgZGV2aWNlKSB3aXRoIGBzX256b25lc2AsIHdoaWNoIHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiB6b25lcyBpbiB0aGUgKnNlc3Npb24qLiBJbiBhIG11bHRpLXNlc3Npb24gc2NlbmFyaW8sIG9yIHdpdGggdmFyeWluZyBibG9jayBzaXplcyBhY3Jvc3Mgc2Vzc2lvbnMsIHRoaXMgY29tcGFyaXNvbiBpcyBmdW5kYW1lbnRhbGx5IGZsYXdlZC4gSXQgY291bGQgbGVhZCB0byBgY29udF9leHRlbnRgIGJlaW5nIGNoZWNrZWQgYWdhaW5zdCBpbmNvcnJlY3QgYm91bmRhcmllcywgcG90ZW50aWFsbHkgcmVzdWx0aW5nIGluIHJlYWRzIG91dHNpZGUgdGhlIGRldmljZSdzIGJvdW5kcywgb3V0c2lkZSB0aGUgY3VycmVudCBzZXNzaW9uLCBvciBldmVuIGJlZm9yZSB0aGUgc2Vzc2lvbidzIHN0YXJ0LiBUaGlzIHNjcmVhbXMgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgZGF0YSBjb3JydXB0aW9uLCBhIGNsYXNzaWMgcHJvYmxlbS5cblxuU28sIHRoZSBmaXggaXMgc3RyYWlnaHRmb3J3YXJkLCBidXQgZWZmZWN0aXZlLiBUaGV5J3ZlIGludHJvZHVjZWQgYHNfc2Vzc2lvbl9zdGFydGAgdG8gYHN0cnVjdCBpc29mc19zYl9pbmZvYCwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZSBhcyBpdCdzIHRoZSBhbmNob3Igb2YgdGhlIGN1cnJlbnQgc2Vzc2lvbiB3aXRoaW4gdGhlIGdyZWF0ZXIgbWVkaXVtLiBDcnVjaWFsbHksIHRoZSBjb2RlIG5vdyBpbml0aWFsaXplcyB0aGlzIGBzX3Nlc3Npb25fc3RhcnRgIHdpdGhpbiBgaXNvZnNfZmlsbF9zdXBlcmAsIHNwZWNpZmljYWxseSBhZnRlciB0aGUgYmxvY2sgc2l6ZSBpcyBzZXQuIEV4Y2VsbGVudCwgdGhhdCdzIGNsZWFuLiBUaGUgdXNlIG9mIGBremFsbG9jX29iamAgdG8gYWxsb2NhdGUgYHNiaWAgaXMgc291bmQgYXMgaXQgZW5zdXJlcyB0aGUgc3RydWN0IG1lbW9yeSBpcyBpbml0aWFsaXplZCB0byB6ZXJvLlxuXG5UaGUgY29yZSBvZiB0aGUgcGF0Y2ggaXRzZWxmIGFsdGVycyBgcm9ja19jb250aW51ZSgpYCB0byBwZXJmb3JtIGEgbW9yZSByb2J1c3QgdmFsaWRhdGlvbiBvZiB0aGUgZXh0ZW50LCBjaGVja2luZyBhZ2FpbnN0IGBzYmktXHUwMDNlc19zZXNzaW9uX3N0YXJ0YCwgYWxvbmcgd2l0aCBgc2Vzc2lvbl9lbmRgIGFuZCBgc2JfYmRldl9ucl9ibG9ja3Moc2IpYC4gVGhpcyBpcyBwcmVjaXNlbHkgd2hhdCdzIG5lZWRlZCAtIGJvdW5kcyBjaGVja2luZyBvbiBib3RoIHRoZSBzdGFydCBhbmQgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBzZXNzaW9uLlxuXG5Ob3csIGFzIGEgbmV4dCBzdGVwLCBJIG5lZWQgdG8gbG9vayBmb3IgYWRkaXRpb25hbCByaXNrcy4gQXJlIHRoZXJlIG90aGVyIGxvY2F0aW9ucyB3aGVyZSBgc19zZXNzaW9uX3N0YXJ0YCBpcyBhY2Nlc3NlZCBvciBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkLCBnaXZlbiB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UsIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gbGluZ2VyaW5nIG1lbW9yeSBhY2Nlc3MgaGF6YXJkcz8gSSB3aWxsIGNoZWNrIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGJvdGggd2l0aGluIHRoZSBwYXRjaCBpdHNlbGYgYW5kIGluIHJlbGF0ZWQgY29kZS4gSSdtIGtlZW4gdG8gbWFrZSBzdXJlIHRoZSBmaXggaXMgY29tcGxldGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxNjIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMjoxNjozMy40NTM5MDQyNFoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5NzMxMDQxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzX3Nlc3Npb25fc3RhcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaXNvZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2lzb2ZzL2lub2RlLmM9NTc0PXN0YXRpYyBpbnQgaXNvZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL2lzb2ZzL2lub2RlLmMtODIzLVxcbmZzL2lzb2ZzL2lub2RlLmM6ODI0OlxcdHNiaS1cXHUwMDNlc19zZXNzaW9uX3N0YXJ0ID0gKHU2NCl2b2xfZGVzY19zdGFydCBcXHUwMDNjXFx1MDAzY1xcbmZzL2lzb2ZzL2lub2RlLmMtODI1LVxcdFxcdFxcdFxcdChJU09GU19CTE9DS19CSVRTIC0gcy1cXHUwMDNlc19ibG9ja3NpemVfYml0cyk7XFxuLS1cXG5mcy9pc29mcy9pc29mcy5oPTMyPXN0cnVjdCBpc29mc19zYl9pbmZvIHtcXG4tLVxcbmZzL2lzb2ZzL2lzb2ZzLmgtMzgtXFx0LyogU2Vzc2lvbiBzdGFydCBpbiBmaWxlc3lzdGVtIGJsb2NrIHVuaXRzLiAqL1xcbmZzL2lzb2ZzL2lzb2ZzLmg6Mzk6XFx0dTY0IHNfc2Vzc2lvbl9zdGFydDtcXG5mcy9pc29mcy9pc29mcy5oLTQwLVxcdFxcbi0tXFxuZnMvaXNvZnMvcm9jay5jPTg2PXN0YXRpYyBpbnQgcm9ja19jb250aW51ZShzdHJ1Y3Qgcm9ja19zdGF0ZSAqcnMpXFxuLS1cXG5mcy9pc29mcy9yb2NrLmMtOTAtXFx0dTY0IGV4dGVudCA9ICh1bnNpZ25lZCBpbnQpcnMtXFx1MDAzZWNvbnRfZXh0ZW50O1xcbmZzL2lzb2ZzL3JvY2suYzo5MTpcXHR1NjQgc2Vzc2lvbl9lbmQgPSBzYmktXFx1MDAzZXNfc2Vzc2lvbl9zdGFydCArXFxuZnMvaXNvZnMvcm9jay5jLTkyLVxcdFxcdCgodTY0KXNiaS1cXHUwMDNlc19uem9uZXMgXFx1MDAzY1xcdTAwM2MgKElTT0ZTX0JMT0NLX0JJVFMgLSBzYi1cXHUwMDNlc19ibG9ja3NpemVfYml0cykpO1xcbi0tXFxuZnMvaXNvZnMvcm9jay5jLTExMC1cXHRpZiAocnMtXFx1MDAzZWNvbnRfZXh0ZW50IFxcdTAwMjZcXHUwMDI2XFxuZnMvaXNvZnMvcm9jay5jOjExMTpcXHQgICAgKGV4dGVudCBcXHUwMDNjIHNiaS1cXHUwMDNlc19zZXNzaW9uX3N0YXJ0IHx8XFxuZnMvaXNvZnMvcm9jay5jLTExMi1cXHQgICAgIGV4dGVudCBcXHUwMDNlPSBzZXNzaW9uX2VuZCB8fFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMjoxNjozNC43NTEyMTk2NTZaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzE1NDA1MDUxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgSVNPRlMgUGF0Y2ggYW5kIGl0cyBLTVNBTiBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gdmVyaWZ5IHRoZSBzZXF1ZW5jZSBvZiBldmVudHMgaW4gYGlzb2ZzX2ZpbGxfc3VwZXJgLiBTcGVjaWZpY2FsbHksIEkgd2FudGVkIHRvIHNlZSBpZiB0aGUgUm9jayBSaWRnZSBwYXJzaW5nIG9yIGByb2NrX2NvbnRpbnVlYCBsb2dpYyBjb3VsZCBiZSB0cmlnZ2VyZWQgKmJlZm9yZSogYHNiaS1cdTAwM2VzX3Nlc3Npb25fc3RhcnRgIGlzIHNldC4gQWZ0ZXIgcmV2aWV3aW5nIHRoZSBjb2RlLCBpdCdzIGNsZWFyIHRoYXQgYHNiaWAgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAsIHNvIGl0J3MgZ3VhcmFudGVlZCB0byBiZSB6ZXJvLWluaXRpYWxpemVkIGZyb20gdGhlIGdldC1nby4gVGhlbiwgdGhlIHZvbHVtZSBkZXNjcmlwdG9ycyBhcmUgcmVhZCwgdGhlIGJsb2NrIHNpemUgaXMgc2V0LCBhbmQgY3J1Y2lhbGx5LCBgc2JpLVx1MDAzZXNfc2Vzc2lvbl9zdGFydGAgaXMgYXNzaWduZWQgKmJlZm9yZSogd2UgZXZlbiBnZXQgdG8gdGhlIGlub2RlIHJlYWRpbmcgb3IgZGlyZWN0b3J5IHBhcnNpbmcsIHdoZXJlIFJvY2sgUmlkZ2UgcGFyc2luZyB3b3VsZCBraWNrIGluLiBUaGUgc2Vzc2lvbiBzdGFydCBpcyBhIHNpbXBsZSBgdTY0YCwgc28gdGhlcmUncyBubyBjb21wbGV4IHN0cnVjdHVyZSB0byB3b3JyeSBhYm91dC5cblxuVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGludm9sdmVzIHRpZ2h0ZW5pbmcgYm91bmRzIGNoZWNrcyBvbiBSb2NrIFJpZGdlIGNvbnRpbnVhdGlvbiBlbnRyaWVzIChgQ0VgKS4gVGhpcyBpcyBhYm91dCBwcmV2ZW50aW5nIG91dC1vZi1ib3VuZHMgcmVhZHMsIG1lYW5pbmcgd2UgZG9uJ3QgYWNjaWRlbnRhbGx5IHRyeSB0byByZWFkIGRhdGEgZnJvbSB0aGUgZGlzayBvdXRzaWRlIG9mIHRoZSBpbnRlbmRlZCB2b2x1bWUgbGltaXRzLlxuXG5Ob3csIGxldCdzIGFkZHJlc3MgdGhlIEtNU0FOIGNvbmNlcm4uIFRoZSBjaGFuZ2VzIGFkZCBleHRyYSB2YWxpZGF0aW9uIGJvdW5kcyBjaGVja3Mgb24gYHJzLVx1MDAzZWNvbnRfZXh0ZW50YCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYmxvY2sgZGV2aWNlIHJlYWRzIGluIGBpc29mc2AgUm9jayBSaWRnZSBwYXJzaW5nLiBNeSBtYWluIGNvbmNlcm4gd2l0aCBLTVNBTiBpcyBhbHdheXMgYXJvdW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgaXNzdWVzLiBUaGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgd2F5cyBmb3IgdW5pbml0aWFsaXplZCBkYXRhIHRvIGxlYWsgdG8gdXNlcnNwYWNlLiBXZSdyZSB0YWxraW5nIGFib3V0IG91dC1vZi1ib3VuZHMgKnJlYWRzKiBpbiB0aGUga2VybmVsIGl0c2VsZiwgbm90IHRoZSBsZWFraW5nIG9mIGFueSBrZXJuZWwgZGF0YS5cblxuU28sIGxldCdzIHJldmlldyB0aGUgY3JpdGVyaWEgY2FyZWZ1bGx5OlxuXG4xLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2Ugd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcz8qKiBBYnNvbHV0ZWx5IG5vdC4gVGhlIGNvZGUgZG9lc24ndCBleHBvc2UgYW55IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UgdGhhdCBpcyB1bmluaXRpYWxpemVkLiBObyBgY29weV90b191c2VyYCwgbm8gaW5mb3JtYXRpb24gbGVha3MsIG5vIHBhZGRpbmcgbGVha3MuXG4yLiAgKipDb25kaXRpb25hbCBsb2dpYy9icmFuY2hpbmcgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogTm9wZS4gRXZlcnl0aGluZyBpcyBpbml0aWFsaXplZCBjb3JyZWN0bHkuIGB2b2xfZGVzY19zdGFydGAsIGBzYmlgLCBgc2JpLVx1MDAzZXNfc2Vzc2lvbl9zdGFydGAsIGBycy1cdTAwM2Vjb250X2V4dGVudGAsIHRoZXkncmUgYWxsIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyB1c2VkLlxuMy4gICoqQWxsb2NhdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyoqIE5vLiBgc2JpYCBpcyB6ZXJvZWQsIGFuZCBgc19zZXNzaW9uX3N0YXJ0YCBpcyBleHBsaWNpdGx5IGFzc2lnbmVkLlxuNC4gICoqQWx0ZXJlZCBib3VuZHMgY2hlY2tzIHBvdGVudGlhbGx5IGFjY2Vzc2luZyB1bmluaXRpYWxpemVkIGJ1ZmZlciBieXRlcz8qKiBOby4gVGhlIHBhdGNoIG9ubHkgdGlnaHRlbnMgYm91bmRzIGNoZWNrcyBhbmQgb25seSBjb25zdHJhaW5zIGJsb2NrIGV4dGVudCBudW1iZXJzIHRvIGJlIHdpdGhpbiB2YWxpZCByYW5nZXMuIFRoaXMgaXMgYSBtZW1vcnkgc2FmZXR5IGlzc3VlLCB3aGljaCB3aWxsIGJlIGNhdWdodCBieSBLQVNBTi5cblxuVGhlcmVmb3JlLCBhZnRlciB0aGlzIGRldGFpbGVkIGFuYWx5c2lzLCBJJ20gY29uZmlkZW50IHRoYXQgYE5lZWRzS01TQU5gIGlzIGZhbHNlLiBUaGVzZSBjaGFuZ2VzIGFyZSBhYm91dCBtZW1vcnkgKnNhZmV0eSosIHdoaWNoIEtBU0FOLCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBleGlzdGluZyBib3VuZHMgY2hlY2tzLCBlZmZlY3RpdmVseSBoYW5kbGVzLiBUaGUgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBLTVNBTi1yZWxldmFudCBpc3N1ZXMsIGFuZCB0aGUgY2hhbmdlcyBhcmUgbGltaXRlZCB0byB0aWdodGVuaW5nIHVwIHRob3NlIGRpc2svZGV2aWNlIGJ1ZmZlciByZWFkcyB3aXRoaW4gdGhlIGtlcm5lbC4gSSB3aWxsIGRyYWZ0IGEgYEtNU0FOUmVhc29uaW5nYCBjb21tZW50IHRvIG1ha2UgdGhpcyBkaXN0aW5jdGlvbiB2ZXJ5IGNsZWFyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTAwLCJPdXRwdXRUb2tlbnMiOjIwNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMjoxNjo0MS45MDUyNzYzOTRaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGZzL2lzb2ZzIHRvIHByb3Blcmx5IHZhbGlkYXRlIFJvY2sgUmlkZ2UgY29udGludWF0aW9uIGV4dGVudHMgKGBDRWAgZW50cmllcykgYWdhaW5zdCBzZXNzaW9uIGFuZCBibG9jayBkZXZpY2UgYm91bmRhcmllcyBieSBpbnRyb2R1Y2luZyBgc2JpLVxcdTAwM2VzX3Nlc3Npb25fc3RhcnRgIGFuZCBjb21wYXJpbmcgYGNvbnRfZXh0ZW50YCBhZ2FpbnN0IHRoZSB2YWxpZCByYW5nZS4gXFxuXFxuLSBgc3RydWN0IGlzb2ZzX3NiX2luZm9gIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmpgLCBhbmQgYHNfc2Vzc2lvbl9zdGFydGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCBkdXJpbmcgc3VwZXJibG9jayBzZXR1cCBiZWZvcmUgYW55IFJvY2sgUmlkZ2UgcGFyc2luZyBvY2N1cnMuXFxuLSBUaGUgcGF0Y2ggdGlnaHRlbnMgYm91bmRzIGNoZWNrcyBmb3IgYmxvY2sgcmVhZHMsIG1pdGlnYXRpbmcgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYmxvY2sgcmVhZHMgb24gY29ycnVwdGVkL21hbGljaW91cyBJU08gaW1hZ2VzICh3aGljaCBmYWxsIHVuZGVyIEtBU0FOL2dlbmVyaWMgYm91bmRzIGNoZWNraW5nKS5cXG4tIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzdGFjay9oZWFwIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCB0byB1c2VyIHNwYWNlLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBwcmVzZW50IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGZzL2lzb2ZzIHRvIHByb3Blcmx5IHZhbGlkYXRlIFJvY2sgUmlkZ2UgY29udGludWF0aW9uIGV4dGVudHMgKGBDRWAgZW50cmllcykgYWdhaW5zdCBzZXNzaW9uIGFuZCBibG9jayBkZXZpY2UgYm91bmRhcmllcyBieSBpbnRyb2R1Y2luZyBgc2JpLVxcdTAwM2VzX3Nlc3Npb25fc3RhcnRgIGFuZCBjb21wYXJpbmcgYGNvbnRfZXh0ZW50YCBhZ2FpbnN0IHRoZSB2YWxpZCByYW5nZS4gXFxuXFxuLSBgc3RydWN0IGlzb2ZzX3NiX2luZm9gIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19vYmpgLCBhbmQgYHNfc2Vzc2lvbl9zdGFydGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCBkdXJpbmcgc3VwZXJibG9jayBzZXR1cCBiZWZvcmUgYW55IFJvY2sgUmlkZ2UgcGFyc2luZyBvY2N1cnMuXFxuLSBUaGUgcGF0Y2ggdGlnaHRlbnMgYm91bmRzIGNoZWNrcyBmb3IgYmxvY2sgcmVhZHMsIG1pdGlnYXRpbmcgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYmxvY2sgcmVhZHMgb24gY29ycnVwdGVkL21hbGljaW91cyBJU08gaW1hZ2VzICh3aGljaCBmYWxsIHVuZGVyIEtBU0FOL2dlbmVyaWMgYm91bmRzIGNoZWNraW5nKS5cXG4tIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzdGFjay9oZWFwIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCB0byB1c2VyIHNwYWNlLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBwcmVzZW50IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6dp2s[1] Phase: Succeeded StartedAt: 2026-09-07 12:16:52 +0000 UTC FinishedAt: 2026-09-07 12:16:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6dp2s[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-07 12:16:52 +0000 UTC FinishedAt: 2026-09-07 12:16:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6dp2s[2] Phase: Succeeded StartedAt: 2026-09-07 12:16:52 +0000 UTC FinishedAt: 2026-09-07 15:56:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6dp2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isofs_fill_super","rock_continue","get_rock_ridge_filename","parse_rock_ridge_inode","rock_ridge_symlink_read_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"a84db8e6-ca63-475e-b9c8-cbd1a849cb84","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-07 12:16:52 +0000 UTC FinishedAt: 2026-09-07 15:56:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isofs_fill_super","rock_continue","get_rock_ridge_filename","parse_rock_ridge_inode","rock_ridge_symlink_read_folio"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"a84db8e6-ca63-475e-b9c8-cbd1a849cb84","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-workflow6dp2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isofs_fill_super","rock_continue","get_rock_ridge_filename","parse_rock_ridge_inode","rock_ridge_symlink_read_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"a84db8e6-ca63-475e-b9c8-cbd1a849cb84","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-07 12:16:52 +0000 UTC FinishedAt: 2026-09-07 12:17:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6dp2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isofs_fill_super","rock_continue","get_rock_ridge_filename","parse_rock_ridge_inode","rock_ridge_symlink_read_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"a84db8e6-ca63-475e-b9c8-cbd1a849cb84","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-07 12:16:52 +0000 UTC FinishedAt: 2026-09-07 12:16:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"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-workflow6dp2s/series-workflow6dp2s-convert-artifact-430032296/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6dp2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isofs_fill_super","rock_continue","get_rock_ridge_filename","parse_rock_ridge_inode","rock_ridge_symlink_read_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"a84db8e6-ca63-475e-b9c8-cbd1a849cb84","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-07 12:17:02 +0000 UTC FinishedAt: 2026-09-07 12:33:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6dp2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isofs_fill_super","rock_continue","get_rock_ridge_filename","parse_rock_ridge_inode","rock_ridge_symlink_read_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"a84db8e6-ca63-475e-b9c8-cbd1a849cb84","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-07 12:17:02 +0000 UTC FinishedAt: 2026-09-07 12:33:19 +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:*31606c5a-dc69-4c7e-9df8-9a1d20b4aba3,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-workflow6dp2s/series-workflow6dp2s-convert-artifact-430032296/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": "f96ebf88-0a56-4aeb-8f00-3c7ff5feb9c7", "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-workflow6dp2s/series-workflow6dp2s-build-action-2256682014/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6dp2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isofs_fill_super","rock_continue","get_rock_ridge_filename","parse_rock_ridge_inode","rock_ridge_symlink_read_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"a84db8e6-ca63-475e-b9c8-cbd1a849cb84","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-07 12:17:02 +0000 UTC FinishedAt: 2026-09-07 12:33:09 +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:*31606c5a-dc69-4c7e-9df8-9a1d20b4aba3,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-workflow6dp2s/series-workflow6dp2s-convert-artifact-430032296/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": "f96ebf88-0a56-4aeb-8f00-3c7ff5feb9c7", "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-workflow6dp2s/series-workflow6dp2s-build-action-2256682014/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6dp2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isofs_fill_super","rock_continue","get_rock_ridge_filename","parse_rock_ridge_inode","rock_ridge_symlink_read_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"a84db8e6-ca63-475e-b9c8-cbd1a849cb84","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-07 12:33:19 +0000 UTC FinishedAt: 2026-09-07 12:33:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6dp2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isofs_fill_super","rock_continue","get_rock_ridge_filename","parse_rock_ridge_inode","rock_ridge_symlink_read_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"a84db8e6-ca63-475e-b9c8-cbd1a849cb84","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-07 12:33:19 +0000 UTC FinishedAt: 2026-09-07 12:33:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6dp2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isofs_fill_super","rock_continue","get_rock_ridge_filename","parse_rock_ridge_inode","rock_ridge_symlink_read_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"a84db8e6-ca63-475e-b9c8-cbd1a849cb84","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-07 12:33:19 +0000 UTC FinishedAt: 2026-09-07 12:33:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6dp2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isofs_fill_super","rock_continue","get_rock_ridge_filename","parse_rock_ridge_inode","rock_ridge_symlink_read_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"a84db8e6-ca63-475e-b9c8-cbd1a849cb84","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-07 12:33:19 +0000 UTC FinishedAt: 2026-09-07 12:33:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"a84db8e6-ca63-475e-b9c8-cbd1a849cb84","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-workflow6dp2s/series-workflow6dp2s-convert-artifact-1827622031/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6dp2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isofs_fill_super","rock_continue","get_rock_ridge_filename","parse_rock_ridge_inode","rock_ridge_symlink_read_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"a84db8e6-ca63-475e-b9c8-cbd1a849cb84","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-07 12:33:29 +0000 UTC FinishedAt: 2026-09-07 12:35:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6dp2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isofs_fill_super","rock_continue","get_rock_ridge_filename","parse_rock_ridge_inode","rock_ridge_symlink_read_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"a84db8e6-ca63-475e-b9c8-cbd1a849cb84","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-07 12:33:29 +0000 UTC FinishedAt: 2026-09-07 12:35:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f96ebf88-0a56-4aeb-8f00-3c7ff5feb9c7,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-workflow6dp2s/series-workflow6dp2s-build-action-2256682014/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-workflow6dp2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isofs_fill_super","rock_continue","get_rock_ridge_filename","parse_rock_ridge_inode","rock_ridge_symlink_read_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"a84db8e6-ca63-475e-b9c8-cbd1a849cb84","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-07 12:35:29 +0000 UTC FinishedAt: 2026-09-07 12:35:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6dp2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isofs_fill_super","rock_continue","get_rock_ridge_filename","parse_rock_ridge_inode","rock_ridge_symlink_read_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"a84db8e6-ca63-475e-b9c8-cbd1a849cb84","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-07 12:35:29 +0000 UTC FinishedAt: 2026-09-07 12:35:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6dp2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isofs_fill_super","rock_continue","get_rock_ridge_filename","parse_rock_ridge_inode","rock_ridge_symlink_read_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"a84db8e6-ca63-475e-b9c8-cbd1a849cb84","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-07 12:35:29 +0000 UTC FinishedAt: 2026-09-07 12:53:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6dp2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isofs_fill_super","rock_continue","get_rock_ridge_filename","parse_rock_ridge_inode","rock_ridge_symlink_read_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"a84db8e6-ca63-475e-b9c8-cbd1a849cb84","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-07 12:35:29 +0000 UTC FinishedAt: 2026-09-07 12:53:33 +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:*31606c5a-dc69-4c7e-9df8-9a1d20b4aba3,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-workflow6dp2s/series-workflow6dp2s-convert-artifact-1827622031/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": "3262510c-8abf-4801-a89a-0a835ecec52b", "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-workflow6dp2s/series-workflow6dp2s-build-action-15216035/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6dp2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isofs_fill_super","rock_continue","get_rock_ridge_filename","parse_rock_ridge_inode","rock_ridge_symlink_read_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"a84db8e6-ca63-475e-b9c8-cbd1a849cb84","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-07 12:35:29 +0000 UTC FinishedAt: 2026-09-07 12:53:23 +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:*31606c5a-dc69-4c7e-9df8-9a1d20b4aba3,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-workflow6dp2s/series-workflow6dp2s-convert-artifact-1827622031/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": "3262510c-8abf-4801-a89a-0a835ecec52b", "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-workflow6dp2s/series-workflow6dp2s-build-action-15216035/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6dp2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isofs_fill_super","rock_continue","get_rock_ridge_filename","parse_rock_ridge_inode","rock_ridge_symlink_read_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"a84db8e6-ca63-475e-b9c8-cbd1a849cb84","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-07 12:53:33 +0000 UTC FinishedAt: 2026-09-07 12:53:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6dp2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isofs_fill_super","rock_continue","get_rock_ridge_filename","parse_rock_ridge_inode","rock_ridge_symlink_read_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"a84db8e6-ca63-475e-b9c8-cbd1a849cb84","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-07 12:53:33 +0000 UTC FinishedAt: 2026-09-07 12:53:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6dp2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isofs_fill_super","rock_continue","get_rock_ridge_filename","parse_rock_ridge_inode","rock_ridge_symlink_read_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"a84db8e6-ca63-475e-b9c8-cbd1a849cb84","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-07 12:53:33 +0000 UTC FinishedAt: 2026-09-07 12:55:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6dp2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isofs_fill_super","rock_continue","get_rock_ridge_filename","parse_rock_ridge_inode","rock_ridge_symlink_read_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"a84db8e6-ca63-475e-b9c8-cbd1a849cb84","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-07 12:53:33 +0000 UTC FinishedAt: 2026-09-07 12:55:01 +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:*3262510c-8abf-4801-a89a-0a835ecec52b,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-workflow6dp2s/series-workflow6dp2s-build-action-15216035/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-workflow6dp2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isofs_fill_super","rock_continue","get_rock_ridge_filename","parse_rock_ridge_inode","rock_ridge_symlink_read_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"a84db8e6-ca63-475e-b9c8-cbd1a849cb84","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-07 12:55:11 +0000 UTC FinishedAt: 2026-09-07 15:56:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6dp2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isofs_fill_super","rock_continue","get_rock_ridge_filename","parse_rock_ridge_inode","rock_ridge_symlink_read_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"a84db8e6-ca63-475e-b9c8-cbd1a849cb84","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-07 12:55:11 +0000 UTC FinishedAt: 2026-09-07 15:56:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isofs_fill_super","rock_continue","get_rock_ridge_filename","parse_rock_ridge_inode","rock_ridge_symlink_read_folio"],"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:*f96ebf88-0a56-4aeb-8f00-3c7ff5feb9c7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3262510c-8abf-4801-a89a-0a835ecec52b,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-workflow6dp2s/series-workflow6dp2s-build-action-2256682014/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-workflow6dp2s/series-workflow6dp2s-build-action-15216035/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6dp2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isofs_fill_super","rock_continue","get_rock_ridge_filename","parse_rock_ridge_inode","rock_ridge_symlink_read_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"a84db8e6-ca63-475e-b9c8-cbd1a849cb84","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-07 12:55:11 +0000 UTC FinishedAt: 2026-09-07 12:55:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6dp2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isofs_fill_super","rock_continue","get_rock_ridge_filename","parse_rock_ridge_inode","rock_ridge_symlink_read_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"a84db8e6-ca63-475e-b9c8-cbd1a849cb84","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-07 12:55:11 +0000 UTC FinishedAt: 2026-09-07 12:55:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isofs_fill_super","rock_continue","get_rock_ridge_filename","parse_rock_ridge_inode","rock_ridge_symlink_read_folio"],"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-workflow6dp2s/series-workflow6dp2s-convert-artifact-3753371976/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6dp2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isofs_fill_super","rock_continue","get_rock_ridge_filename","parse_rock_ridge_inode","rock_ridge_symlink_read_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"a84db8e6-ca63-475e-b9c8-cbd1a849cb84","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-07 12:55:11 +0000 UTC FinishedAt: 2026-09-07 12:55:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6dp2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isofs_fill_super","rock_continue","get_rock_ridge_filename","parse_rock_ridge_inode","rock_ridge_symlink_read_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"a84db8e6-ca63-475e-b9c8-cbd1a849cb84","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-07 12:55:11 +0000 UTC FinishedAt: 2026-09-07 12:55:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6dp2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isofs_fill_super","rock_continue","get_rock_ridge_filename","parse_rock_ridge_inode","rock_ridge_symlink_read_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"a84db8e6-ca63-475e-b9c8-cbd1a849cb84","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-07 12:55:11 +0000 UTC FinishedAt: 2026-09-07 12:55:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6dp2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isofs_fill_super","rock_continue","get_rock_ridge_filename","parse_rock_ridge_inode","rock_ridge_symlink_read_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"a84db8e6-ca63-475e-b9c8-cbd1a849cb84","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-07 12:55:21 +0000 UTC FinishedAt: 2026-09-07 15:56:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6dp2s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["isofs_fill_super","rock_continue","get_rock_ridge_filename","parse_rock_ridge_inode","rock_ridge_symlink_read_folio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["ISO9660_FS"],"series_id":"a84db8e6-ca63-475e-b9c8-cbd1a849cb84","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-07 12:55:21 +0000 UTC FinishedAt: 2026-09-07 15:56:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f96ebf88-0a56-4aeb-8f00-3c7ff5feb9c7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3262510c-8abf-4801-a89a-0a835ecec52b,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-workflow6dp2s/series-workflow6dp2s-build-action-2256682014/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-workflow6dp2s/series-workflow6dp2s-build-action-15216035/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-workflow6dp2s/series-workflow6dp2s-convert-artifact-3753371976/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,}