Name: series-workflowv6bll Phase: Succeeded StartedAt: 2026-08-12 19:02:45 +0000 UTC FinishedAt: 2026-08-12 23:55:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv6bll[0] Phase: Succeeded StartedAt: 2026-08-12 19:02:45 +0000 UTC FinishedAt: 2026-08-12 20:02:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv6bll[0].run-triage Phase: Succeeded StartedAt: 2026-08-12 19:02:45 +0000 UTC FinishedAt: 2026-08-12 20:02:49 +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": "c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "JFS_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": "c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "JFS_FS" ], "series_id": "be566569-3f6e-4871-8d25-b7f975b5c6ab" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "jfs_fill_super", "__get_metapage", "diRead", "diWrite", "dbMount", "ea_get" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0pGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2pmc19maWxsX3N1cGVyJiMzNDssCiAgICAmIzM0O19fZ2V0X21ldGFwYWdlJiMzNDssCiAgICAmIzM0O2RpUmVhZCYjMzQ7LAogICAgJiMzNDtkaVdyaXRlJiMzNDssCiAgICAmIzM0O2RiTW91bnQmIzM0OywKICAgICYjMzQ7ZWFfZ2V0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtaXNzaW5nIGVycm9yIGNoZWNrIGZvciBgaW5zZXJ0X21ldGFwYWdlKClgLCB3aGljaCBjYW4gZmFpbCBhbmQgcmV0dXJuIGAtRU5PTUVNYCBpZiBga3phbGxvY19vYmooKWAgZmFpbHMgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBhIGBtZXRhX2FuY2hvcmAgc3RydWN0dXJlLiBXaXRob3V0IHRoaXMgY2hlY2ssIHRoZSBjb2RlIHdvdWxkIGNvbnRpbnVlIGV4ZWN1dGluZyBldmVuIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxlZCwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBvdGhlciBtZW1vcnktcmVsYXRlZCBidWdzIHdoZW4gYGZvbGlvLVx1MDAzZXByaXZhdGVgIGlzIGV4cGVjdGVkIHRvIGJlIGluaXRpYWxpemVkLiBUaGlzIGlzIGEgc3RhbmRhcmQgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSBhbmQgZXJyb3IgaGFuZGxpbmcgYnVnLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIFN0YW5kYXJkIEtBU0FOICh3aGljaCBkZXRlY3RzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIHVzZS1hZnRlci1mcmVlKSBhbmQgYmFzaWMga2VybmVsIGNyYXNoIGRldGVjdGlvbiAoZm9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZSBjb25zZXF1ZW5jZXMgb2YgdGhpcyBidWcuIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUgYmVjYXVzZSB0aGUgbWVtb3J5IGFsbG9jYXRlZCBieSBga3phbGxvY19vYmooKWAgaXMgYWxyZWFkeSB6ZXJvLWluaXRpYWxpemVkLCBhbmQgdGhlIGJ1ZyBkb2VzIG5vdCBpbnZvbHZlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFkZGluZyBieXRlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYG1ldGFwYWdlX3JlYWRfZm9saW9gIGluIHRoZSBKRlMgZmlsZXN5c3RlbSB0byBwcm9wZXJseSBoYW5kbGUgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgZnJvbSBgaW5zZXJ0X21ldGFwYWdlYC4gVGhpcyBlcnJvciBwYXRoIGlzIHJlYWNoYWJsZSBvbiBhcmNoaXRlY3R1cmVzIHdoZXJlIFBBR0VfU0laRSBcdTAwM2UgNDA5NiAoZS5nLiwgYXJtNjQsIHBwYzY0KSBhbmQgZml4ZXMgYSBwb3RlbnRpYWwgYnVnIHdoZXJlIHRoZSBlcnJvciB3YXMgaWdub3JlZC4gSXQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIEpGUyBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDowMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQ1YWExZmMzMTk4MzZjOWJiNWRiZDc5YmEzNjUxZTFmMDk2MTMzODJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxOTo1OTo1OCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX21ldGFwYWdlLmMgYi9mcy9qZnMvamZzX21ldGFwYWdlLmNcbmluZGV4IDQxZmUxMmU2NDFjZWUuLmZmYmIxODZlODUwYzYgMTAwNjQ0XG4tLS0gYS9mcy9qZnMvamZzX21ldGFwYWdlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuY1xuQEAgLTU3Myw2ICYjNDM7NTczLDcgQEAgc3RhdGljIGludCBtZXRhcGFnZV9yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGludCB4bGVuO1xuIFx0dW5zaWduZWQgaW50IGxlbjtcbiBcdGludCBvZmZzZXQ7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4gXG4gXHRCVUdfT04oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSk7XG4gXHRwYWdlX3N0YXJ0ID0gZm9saW9fcG9zKGZvbGlvKSBcdTAwM2VcdTAwM2UgaW5vZGUtXHUwMDNlaV9ibGtiaXRzO1xuQEAgLTU4Myw4ICYjNDM7NTg0LDExIEBAIHN0YXRpYyBpbnQgbWV0YXBhZ2VfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRcdHBibG9jayA9IG1ldGFwYWdlX2dldF9ibG9ja3MoaW5vZGUsIHBhZ2Vfc3RhcnQgJiM0MzsgYmxvY2tfb2Zmc2V0LFxuIFx0XHRcdFx0XHQgICAgIFx1MDAyNnhsZW4pO1xuIFx0XHRpZiAocGJsb2NrKSB7XG4tXHRcdFx0aWYgKCFmb2xpby1cdTAwM2Vwcml2YXRlKVxuLVx0XHRcdFx0aW5zZXJ0X21ldGFwYWdlKGZvbGlvLCBOVUxMKTtcbiYjNDM7XHRcdFx0aWYgKCFmb2xpby1cdTAwM2Vwcml2YXRlKSB7XG4mIzQzO1x0XHRcdFx0cmV0ID0gaW5zZXJ0X21ldGFwYWdlKGZvbGlvLCBOVUxMKTtcbiYjNDM7XHRcdFx0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdH1cbiBcdFx0XHRpbmNfaW8oZm9saW8pO1xuIFx0XHRcdGlmIChiaW8pXG4gXHRcdFx0XHRzdWJtaXRfYmlvKGJpbyk7XG5AQCAtNjA3LDcgJiM0Mzs2MTEsNyBAQCBzdGF0aWMgaW50IG1ldGFwYWdlX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0ZWxzZVxuIFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuIFxuLVx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGJvb2wgbWV0YXBhZ2VfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnBfbWFzaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDowMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SkZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7amZzX2ZpbGxfc3VwZXImIzM0OywKICAgICYjMzQ7X19nZXRfbWV0YXBhZ2UmIzM0OywKICAgICYjMzQ7ZGlSZWFkJiMzNDssCiAgICAmIzM0O2RpV3JpdGUmIzM0OywKICAgICYjMzQ7ZGJNb3VudCYjMzQ7LAogICAgJiMzNDtlYV9nZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYG1ldGFwYWdlX3JlYWRfZm9saW9gIGluIHRoZSBKRlMgZmlsZXN5c3RlbSB0byBwcm9wZXJseSBoYW5kbGUgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgZnJvbSBgaW5zZXJ0X21ldGFwYWdlYC4gVGhpcyBlcnJvciBwYXRoIGlzIHJlYWNoYWJsZSBvbiBhcmNoaXRlY3R1cmVzIHdoZXJlIFBBR0VfU0laRSBcdTAwM2UgNDA5NiAoZS5nLiwgYXJtNjQsIHBwYzY0KSBhbmQgZml4ZXMgYSBwb3RlbnRpYWwgYnVnIHdoZXJlIHRoZSBlcnJvciB3YXMgaWdub3JlZC4gSXQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIEpGUyBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQ1YWExZmMzMTk4MzZjOWJiNWRiZDc5YmEzNjUxZTFmMDk2MTMzODIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxMiAxOTo1OTo1OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuYyBiL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuYwppbmRleCA0MWZlMTJlNjQxY2VlLi5mZmJiMTg2ZTg1MGM2IDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX21ldGFwYWdlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvamZzL2pmc19tZXRhcGFnZS5jCkBAIC01NzMsNiAmIzQzOzU3Myw3IEBAIHN0YXRpYyBpbnQgbWV0YXBhZ2VfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJaW50IHhsZW47CiAJdW5zaWduZWQgaW50IGxlbjsKIAlpbnQgb2Zmc2V0OwomIzQzOwlpbnQgcmV0ID0gMDsKIAogCUJVR19PTighZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pKTsKIAlwYWdlX3N0YXJ0ID0gZm9saW9fcG9zKGZvbGlvKSAmZ3Q7Jmd0OyBpbm9kZS0mZ3Q7aV9ibGtiaXRzOwpAQCAtNTgzLDggJiM0Mzs1ODQsMTEgQEAgc3RhdGljIGludCBtZXRhcGFnZV9yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGZvbGlvICpmb2xpbykKIAkJcGJsb2NrID0gbWV0YXBhZ2VfZ2V0X2Jsb2Nrcyhpbm9kZSwgcGFnZV9zdGFydCAmIzQzOyBibG9ja19vZmZzZXQsCiAJCQkJCSAgICAgJmFtcDt4bGVuKTsKIAkJaWYgKHBibG9jaykgewotCQkJaWYgKCFmb2xpby0mZ3Q7cHJpdmF0ZSkKLQkJCQlpbnNlcnRfbWV0YXBhZ2UoZm9saW8sIE5VTEwpOwomIzQzOwkJCWlmICghZm9saW8tJmd0O3ByaXZhdGUpIHsKJiM0MzsJCQkJcmV0ID0gaW5zZXJ0X21ldGFwYWdlKGZvbGlvLCBOVUxMKTsKJiM0MzsJCQkJaWYgKHJldCkKJiM0MzsJCQkJCWJyZWFrOwomIzQzOwkJCX0KIAkJCWluY19pbyhmb2xpbyk7CiAJCQlpZiAoYmlvKQogCQkJCXN1Ym1pdF9iaW8oYmlvKTsKQEAgLTYwNyw3ICYjNDM7NjExLDcgQEAgc3RhdGljIGludCBtZXRhcGFnZV9yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGZvbGlvICpmb2xpbykKIAllbHNlCiAJCWZvbGlvX3VubG9jayhmb2xpbyk7CiAKLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGJvb2wgbWV0YXBhZ2VfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnBfbWFzaykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIzMgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBKRlMgTWV0YXBhZ2UgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBKRlMgZmlsZSBzeXN0ZW0sIHNwZWNpZmljYWxseSBpbiBgZnMvamZzL2pmc19tZXRhcGFnZS5jYC4gVGhleSYjMzk7dmUgbW9kaWZpZWQgdGhlIGBtZXRhcGFnZV9yZWFkX2ZvbGlvYCBmdW5jdGlvbiwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0IHNlZW1zIGxpa2UgdGhleSYjMzk7cmUgemVyb2luZyBpbiBvbiBlcnJvciBoYW5kbGluZyByZWxhdGVkIHRvIGhvdyBtZXRhZGF0YSBwYWdlcyBhcmUgYnJvdWdodCBpbnRvIG1lbW9yeS4KCkZyb20gd2hhdCBJIGNhbiB0ZWxsLCB0aGUga2V5IGNoYW5nZSBpbnZvbHZlcyBjaGVja2luZyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBpbnNlcnRfbWV0YXBhZ2UoZm9saW8sIE5VTEwpYCB3aXRoaW4gdGhhdCBgbWV0YXBhZ2VfcmVhZF9mb2xpb2AgZnVuY3Rpb24uIElmIGBpbnNlcnRfbWV0YXBhZ2VgIHRocm93cyBhbiBlcnJvciwgdGhlIHBhdGNoIGNvcnJlY3RseSBicmVha3Mgb3V0IG9mIHRoZSBsb29wIGFuZCByZXR1cm5zIHRoYXQgZXJyb3IuIFRoYXTigJlzIGdvb2QgcHJhY3RpY2UgdG8gbWFrZSBzdXJlIHlvdSByZXR1cm4gdGhlIGVycm9yIGNvZGUuCgpOb3csIEkgbmVlZCB0byBkaWcgaW50byBgbWV0YXBhZ2VfcmVhZF9mb2xpb2AgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBgaW5zZXJ0X21ldGFwYWdlYCB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGhlcmUuIEkgd2FudCB0byBzZWUgd2hhdCBzY2VuYXJpb3MgbWlnaHQgdHJpZ2dlciBhbiBlcnJvciBmcm9tIGBpbnNlcnRfbWV0YXBhZ2VgIGFuZCBpZiB0aGUgaGFuZGxpbmcgaW4gdGhpcyBwYXRjaCBpcyBzdWZmaWNpZW50LiBJcyB0aGVyZSBhbnkgY2hhbmNlIG9mIHJlc291cmNlIGxlYWtzIG9yIG1pc3NlZCBlcnJvciBjb25kaXRpb25zIHRoYXQgY291bGQgYmUgaW1wcm92ZWQ/IEkgYWxzbyB3YW50IHRvIGNoZWNrIHRoZSByZXN0IG9mIHRoZSBjb2RlIGZvciBhbnkgcmVsYXRlZCBlcnJvciBoYW5kbGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnNlcnRfbWV0YXBhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9qZnMvamZzX21ldGFwYWdlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvamZzL2pmc19tZXRhcGFnZS5jPTg0PXN0YXRpYyBpbmxpbmUgc3RydWN0IG1ldGFwYWdlICpmb2xpb190b19tcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2Zmc2V0KVxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy05Mi1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzo5MzpzdGF0aWMgaW5saW5lIGludCBpbnNlcnRfbWV0YXBhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1ldGFwYWdlICptcClcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy05NC17XG4tLVxuZnMvamZzL2pmc19tZXRhcGFnZS5jPTE1Nj1zdGF0aWMgaW50IF9fbWV0YXBhZ2VfbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtMTc4LVx0XHRcdGNvbnRpbnVlO1xuZnMvamZzL2pmc19tZXRhcGFnZS5jOjE3OTpcdFx0aWYgKHVubGlrZWx5KGluc2VydF9tZXRhcGFnZShkc3QsIG1wKSkpIHtcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy0xODAtXHRcdFx0LyogSWYgZXJyb3IsIHJvbGwtYmFjayBwcmV2aW9zbHkgaW5zZXJ0ZWQgcGFnZXMgKi9cbi0tXG5mcy9qZnMvamZzX21ldGFwYWdlLmM9MjA4PXN0YXRpYyBpbmxpbmUgc3RydWN0IG1ldGFwYWdlICpmb2xpb190b19tcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2Zmc2V0KVxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy0yMTItXG5mcy9qZnMvamZzX21ldGFwYWdlLmM6MjEzOnN0YXRpYyBpbmxpbmUgaW50IGluc2VydF9tZXRhcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWV0YXBhZ2UgKm1wKVxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTIxNC17XG4tLVxuZnMvamZzL2pmc19tZXRhcGFnZS5jPTIzMj1zdGF0aWMgaW50IF9fbWV0YXBhZ2VfbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtMjQ3LVxuZnMvamZzL2pmc19tZXRhcGFnZS5jOjI0ODpcdGlmICh1bmxpa2VseShpbnNlcnRfbWV0YXBhZ2UoZHN0LCBtcCkpKVxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTI0OS1cdFx0cmV0dXJuIC1FQUdBSU47XG4tLVxuZnMvamZzL2pmc19tZXRhcGFnZS5jPTU2NT1zdGF0aWMgaW50IG1ldGFwYWdlX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy01ODctXHRcdFx0aWYgKCFmb2xpby1cdTAwM2Vwcml2YXRlKSB7XG5mcy9qZnMvamZzX21ldGFwYWdlLmM6NTg4Olx0XHRcdFx0cmV0ID0gaW5zZXJ0X21ldGFwYWdlKGZvbGlvLCBOVUxMKTtcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy01ODktXHRcdFx0XHRpZiAocmV0KVxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYz02ODg9c3RydWN0IG1ldGFwYWdlICpfX2dldF9tZXRhcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBsb25nIGxibG9jayxcbi0tXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtNzc2LVx0XHRtcC1cdTAwM2VpbmRleCA9IGxibG9jaztcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzo3Nzc6XHRcdGlmICh1bmxpa2VseShpbnNlcnRfbWV0YXBhZ2UoZm9saW8sIG1wKSkpIHtcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy03NzgtXHRcdFx0ZnJlZV9tZXRhcGFnZShtcCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM5MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIEpGUyBGaWxlc3lzdGVtOiBBIFRhcmdldCBBcHBlYXJzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG1ldGFwYWdlX3JlYWRfZm9saW9gIHdpdGhpbiBgZnMvamZzL2pmc19tZXRhcGFnZS5jYC4gUmlnaHQsIHRoYXQmIzM5O3MgSkZTIOKAkyBhIGZpbGUgc3lzdGVtLCBzcGVjaWZpY2FsbHkuIE15IGV4cGVydCBpbnR1aXRpb24gaXMgaW1tZWRpYXRlbHkgcGlxdWVkOyBhbnkgbG93LWxldmVsIGZpbGVzeXN0ZW0gY29kZSBsaWtlIHRoaXMgaXMgcHJhY3RpY2FsbHkgYmVnZ2luZyBmb3IgYSB0aG9yb3VnaCBmdXp6aW5nIGNhbXBhaWduLiBUaGUgcG90ZW50aWFsIGZvciBtZW1vcnkgY29ycnVwdGlvbiBvciBvdGhlciB2dWxuZXJhYmlsaXRpZXMgaGVyZSBpcyBzaWduaWZpY2FudC4KCk5vdywgYmVmb3JlIEkgZGl2ZSBpbiB0b28gZGVlcCwgbGV0JiMzOTtzIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIEpGUyBmaWxlc3lzdGVtIGlzIGFjdHVhbGx5IGVuYWJsZWQgYW5kIHRoYXQgYW55IGRlcGVuZGVuY2llcyBhcmUgYWNjb3VudGVkIGZvciBiZWZvcmUgSSBnbyBzZXR0aW5nIHVwIG15IGZ1enppbmcgZW52aXJvbm1lbnQuIE5vIHBvaW50IHNwZW5kaW5nIGEgYnVuY2ggb2YgdGltZSBvbiBzb21ldGhpbmcgdGhhdCYjMzk7cyBub3QgZXZlbiBidWlsdCBpbnRvIHRoZSBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEpGU19GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2pmcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2pmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9qZnMvS2NvbmZpZzoyOmNvbmZpZyBKRlNfRlNcbmZzL2pmcy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtKRlMgZmlsZXN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcyNwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIGBtZXRhcGFnZV9yZWFkX2ZvbGlvYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0aGUgY29uZmlnIGlzIGRlZmluaXRlbHkgc2V0IHRvIGBKRlNfRlNgLiBSaWdodCwgZ290IGl0LiBOb3csIG15IGZvY3VzIGlzIG9uIHRoaXMgYG1ldGFwYWdlX3JlYWRfZm9saW9gIGZ1bmN0aW9uLiBIb2xkIG9uLi4uIGlzbiYjMzk7dCB0aGF0IGEgc3RhdGljIGZ1bmN0aW9uPyBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCB1c3VhbGx5IG1lYW5zIGl0JiMzOTtzIGxpbWl0ZWQgaW4gc2NvcGUuIExldCBtZSBxdWlja2x5IGNoZWNrIGlmIGl0JiMzOTtzIGFzc2lnbmVkIHRvIGFueSBzdHJ1Y3Q7IHRoYXQmIzM5O2xsIGdpdmUgbWUgYSBiZXR0ZXIgaGFuZGxlIG9uIGl0cyBjb250ZXh0IGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgY2FsbGVkIHdpdGhpbiB0aGUgc3lzdGVtLiBHb3R0YSBmaWd1cmUgb3V0IGl0cyBhc3NvY2lhdGlvbnMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWV0YXBhZ2VfcmVhZF9mb2xpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2pmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvamZzL2pmc19tZXRhcGFnZS5jPTU1MD1zdGF0aWMgaW50IG1ldGFwYWdlX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTU2NC1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzo1NjU6c3RhdGljIGludCBtZXRhcGFnZV9yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGZvbGlvICpmb2xpbylcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy01NjYte1xuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYz02Nzk9Y29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBqZnNfbWV0YXBhZ2VfYW9wcyA9IHtcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzo2ODA6XHQucmVhZF9mb2xpb1x0PSBtZXRhcGFnZV9yZWFkX2ZvbGlvLFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTY4MS1cdC53cml0ZXBhZ2VzXHQ9IG1ldGFwYWdlX3dyaXRlcGFnZXMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE2OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIGBqZnNfbWV0YXBhZ2VfYW9wcy5yZWFkX2ZvbGlvYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGpmc19tZXRhcGFnZV9hb3BzLnJlYWRfZm9saW9gLiBUaGUgc3lzdGVtIGhhcyBhc3NpZ25lZCB0aGlzIGZ1bmN0aW9uIHRvIG1lLCBhbmQgbXkgaW5pdGlhbCBxdWVzdGlvbiBpcywgd2hlcmUgZG9lcyBpdCBsaXZlIGluIHRoZSBicm9hZGVyIHBpY3R1cmU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjYWxsIGdyYXBoLiBJcyB0aGVyZSBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCBkaXJlY3RseSBjYWxscyBgamZzX21ldGFwYWdlX2FvcHMucmVhZF9mb2xpb2AsIG9yIHBlcmhhcHMgaW5kaXJlY3RseSAqdXNlcyogaXQgd2l0aGluIGl0cyBleGVjdXRpb24gZmxvdz8gSSBuZWVkIHRvIHRyYWNlIHRoaXMgZnVuY3Rpb24mIzM5O3MgZGVwZW5kZW5jaWVzLgoKTmV4dCwgSSBuZWVkIHRvIGxvb2sgZm9yIHdoZXJlIGBqZnNfbWV0YXBhZ2VfYW9wc2AgaXRzZWxmIGlzIGRlY2xhcmVkLCBhbmQgd2hlcmUgaXQgaXMgaW5zdGFudGlhdGVkIGFuZCB1c2VkLiBJJiMzOTtsbCBiZXQgaXQmIzM5O3Mgc29tZXdoZXJlIGRlZXAgd2l0aGluIHRoZSBKRlMgZmlsZSBzeXN0ZW0gaW1wbGVtZW50YXRpb24uIFRoZSBmaWxlIGBmcy9qZnMvamZzX21vdW50LmNgIG9yIHNvbWV0aGluZyBzaW1pbGFyIGltbWVkaWF0ZWx5IGNvbWVzIHRvIG1pbmQgYXMgYSBsaWtlbHkgY2FuZGlkYXRlIOKAkyB0aGF0JiMzOTtzIG9mdGVuIHdoZXJlIHRoZSBjb3JlIG1vdW50IG9wdGlvbnMgYW5kIHN0cnVjdHVyZXMgZm9yIGEgZmlsZXN5c3RlbSBhcmUgZGVmaW5lZC4gSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlcmUsIGFuZCB0aGVuIGV4cGFuZCBteSBzZWFyY2ggYXMgbmVjZXNzYXJ5LiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHdvcmsgYmVnaW5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtqZnNfbWV0YXBhZ2VfYW9wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2pmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvamZzL2pmc19pbWFwLmM9NDE4PXN0cnVjdCBpbm9kZSAqZGlSZWFkU3BlY2lhbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbm9fdCBpbnVtLCBpbnQgc2Vjb25kYXJ5KVxuLS1cbmZzL2pmcy9qZnNfaW1hcC5jLTQ2OC1cbmZzL2pmcy9qZnNfaW1hcC5jOjQ2OTpcdGlwLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VhX29wcyA9IFx1MDAyNmpmc19tZXRhcGFnZV9hb3BzO1xuZnMvamZzL2pmc19pbWFwLmMtNDcwLVx0bWFwcGluZ19zZXRfZ2ZwX21hc2soaXAtXHUwMDNlaV9tYXBwaW5nLCBHRlBfTk9GUyk7XG4tLVxuZnMvamZzL2pmc19tZXRhcGFnZS5jPTY2OT1zdGF0aWMgdm9pZCBtZXRhcGFnZV9pbnZhbGlkYXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsXG4tLVxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTY3OC1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzo2Nzk6Y29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBqZnNfbWV0YXBhZ2VfYW9wcyA9IHtcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy02ODAtXHQucmVhZF9mb2xpb1x0PSBtZXRhcGFnZV9yZWFkX2ZvbGlvLFxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuaD0xMjI9c3RhdGljIGlubGluZSB2b2lkIG1ldGFwYWdlX2hvbWVvayhzdHJ1Y3QgbWV0YXBhZ2UgKm1wKVxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuaC0xMjgtXG5mcy9qZnMvamZzX21ldGFwYWdlLmg6MTI5OmV4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGpmc19tZXRhcGFnZV9hb3BzO1xuZnMvamZzL2pmc19tZXRhcGFnZS5oLTEzMC1cbi0tXG5mcy9qZnMvc3VwZXIuYz00NDE9c3RhdGljIGludCBqZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvamZzL3N1cGVyLmMtNTE3LVx0aW5vZGUtXHUwMDNlaV9zaXplID0gYmRldl9ucl9ieXRlcyhzYi1cdTAwM2VzX2JkZXYpO1xuZnMvamZzL3N1cGVyLmM6NTE4Olx0aW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWFfb3BzID0gXHUwMDI2amZzX21ldGFwYWdlX2FvcHM7XG5mcy9qZnMvc3VwZXIuYy01MTktXHRpbm9kZV9mYWtlX2hhc2goaW5vZGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDM4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIEpGUyBCbG9jayBEZXZpY2UgTWFwcGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoZSBKRlMgZmlsZXN5c3RlbSBoYW5kbGVzIGl0cyBibG9jayBkZXZpY2UgbWFwcGluZy4gSXQgc2VlbXMgYGpmc19tZXRhcGFnZV9hb3BzYCBpcyB0aGUga2V5LiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gVGhhdCYjMzk7cyB0aGUgc3RydWN0dXJlIHRoYXQmIzM5O3MgZ29pbmcgdG8gbWFuYWdlIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBmaWxlIHN5c3RlbSYjMzk7cyBtZXRhZGF0YSBhbmQgdGhlIHVuZGVybHlpbmcgYmxvY2sgZGV2aWNlLiBBbmQsIHRoZSBgcmVhZF9mb2xpb2Agb3BlcmF0aW9uIGlzIHRoZSBvbmUgdGhlIFZGUyBjYWxscyBvbiB0aGF0IGFvcHMgc3RydWN0dXJlIHdoZW4gdGhlIHN5c3RlbSBuZWVkcyB0byByZWFkIGZyb20gdGhlIGJsb2NrIGRldmljZSBtYXBwaW5nLCBvciBmb3IgcmVhZGluZyBzcGVjaWFsIGlub2Rlcy4gVGhhdCYjMzk7cyBhIGNyaXRpY2FsIHBpZWNlLgoKTm93LCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgSkZTLiBUaGluZ3MgbGlrZSBgamZzX21vdW50YCwgYGpmc19maWxsX3N1cGVyYCwgYGpmc19pZ2V0YCwgYGpmc19sb29rdXBgLCBhbmQgYGpmc19yZWFkZGlyYCwgYXJlIGFsbCBnb29kIGNhbmRpZGF0ZXMgdG8gZm9jdXMgb24gYW5kIGdldCBhIHN0cm9uZyB1bmRlcnN0YW5kaW5nLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRob3NlIGFuZCBzZWUgaG93IHRoZXkgd29yayB0b2dldGhlciB0byBtYWtlIHRoZSB3aG9sZSB0aGluZyB0aWNrLiBMZXQmIzM5O3Mgc2VlIGlmIEkgY2FuIGZpbmQgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2pmc19maWxsX3N1cGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvamZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9qZnMvc3VwZXIuYz0zNjE9c3RhdGljIGludCBqZnNfcmVjb25maWd1cmUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL2pmcy9zdXBlci5jLTQ0MC1cbmZzL2pmcy9zdXBlci5jOjQ0MTpzdGF0aWMgaW50IGpmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmZzL2pmcy9zdXBlci5jLTQ0Mi17XG4tLVxuZnMvamZzL3N1cGVyLmM9NjM0PXN0YXRpYyBpbnQgamZzX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmZzL2pmcy9zdXBlci5jLTYzNS17XG5mcy9qZnMvc3VwZXIuYzo2MzY6XHRyZXR1cm4gZ2V0X3RyZWVfYmRldihmYywgamZzX2ZpbGxfc3VwZXIpO1xuZnMvamZzL3N1cGVyLmMtNjM3LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYxMgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDb25zaWRlcmluZyBQb3RlbnRpYWwgRW50cnkgUG9pbnRzKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBmdW5jdGlvbnMgcG90ZW50aWFsbHkgaW52b2x2ZWQgaW4gc29tZSBrZXkgYXNwZWN0IG9mIHRoZSBmaWxlIHN5c3RlbS4gYGpmc19maWxsX3N1cGVyYCBpcyBkZWZpbml0ZWx5IGEgc3Ryb25nIGNvbnRlbmRlciwgYSBjbGFzc2ljIHN0YXJ0aW5nIHBvaW50IGZvciB0aGUgZmlsZSBzeXN0ZW0mIzM5O3MgaW5pdGlhbGl6YXRpb24uIEJ1dCwgbGV0JiMzOTtzIG5vdCBqdW1wIHRvIGNvbmNsdXNpb25zLgoKSSYjMzk7bSBhbHNvIHBvbmRlcmluZyBgX19nZXRfbWV0YXBhZ2VgIGFuZCBgcmVhZF9tZXRhcGFnZWAuIFRoZXkgc2VlbSByZWxhdGVkIHRvIGhvdyBtZXRhZGF0YSwgc3BlY2lmaWNhbGx5IG1ldGFwYWdlcywgYXJlIGhhbmRsZWQuIERlcGVuZGluZyBvbiB3aGF0IHdlJiMzOTtyZSBpbnZlc3RpZ2F0aW5nLCB0aG9zZSBjb3VsZCBiZSBjcnVjaWFsLiBJdCYjMzk7cyB0b28gZWFybHkgdG8gY2hvb3NlIGRlZmluaXRpdmVseSwgYnV0IEkmIzM5O2xsIG1ha2UgYSBub3RlIG9mIGJvdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fZ2V0X21ldGFwYWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvamZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9qZnMvamZzX21ldGFwYWdlLmM9Njc5PWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgamZzX21ldGFwYWdlX2FvcHMgPSB7XG4tLVxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTY4Ny1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzo2ODg6c3RydWN0IG1ldGFwYWdlICpfX2dldF9tZXRhcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBsb25nIGxibG9jayxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy02ODktXHRcdFx0XHR1bnNpZ25lZCBpbnQgc2l6ZSwgaW50IGFic29sdXRlLFxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy02OTktXG5mcy9qZnMvamZzX21ldGFwYWdlLmM6NzAwOlx0amZzX2luZm8oXCYjMzQ7X19nZXRfbWV0YXBhZ2U6IGlubyA9ICVsbHUsIGxibG9jayA9IDB4JWx4LCBhYnM9JWRcJiMzNDssXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtNzAxLVx0XHQgaW5vZGUtXHUwMDNlaV9pbm8sIGxibG9jaywgYWJzb2x1dGUpO1xuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy03ODktXHRmb2xpb191bmxvY2soZm9saW8pO1xuZnMvamZzL2pmc19tZXRhcGFnZS5jOjc5MDpcdGpmc19pbmZvKFwmIzM0O19fZ2V0X21ldGFwYWdlOiByZXR1cm5pbmcgPSAweCVwIGRhdGEgPSAweCVwXCYjMzQ7LCBtcCwgbXAtXHUwMDNlZGF0YSk7XG5mcy9qZnMvamZzX21ldGFwYWdlLmMtNzkxLVx0cmV0dXJuIG1wO1xuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuaD00OT1leHRlcm4gdm9pZCBtZXRhcGFnZV9leGl0KHZvaWQpO1xuZnMvamZzL2pmc19tZXRhcGFnZS5oOjUwOmV4dGVybiBzdHJ1Y3QgbWV0YXBhZ2UgKl9fZ2V0X21ldGFwYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9qZnMvamZzX21ldGFwYWdlLmgtNTEtXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgbGJsb2NrLCB1bnNpZ25lZCBpbnQgc2l6ZSxcbi0tXG5mcy9qZnMvamZzX21ldGFwYWdlLmgtNTQtI2RlZmluZSByZWFkX21ldGFwYWdlKGlub2RlLCBsYmxvY2ssIHNpemUsIGFic29sdXRlKVxcXG5mcy9qZnMvamZzX21ldGFwYWdlLmg6NTU6XHQgX19nZXRfbWV0YXBhZ2UoaW5vZGUsIGxibG9jaywgc2l6ZSwgYWJzb2x1dGUsIGZhbHNlKVxuZnMvamZzL2pmc19tZXRhcGFnZS5oLTU2LVxuZnMvamZzL2pmc19tZXRhcGFnZS5oLTU3LSNkZWZpbmUgZ2V0X21ldGFwYWdlKGlub2RlLCBsYmxvY2ssIHNpemUsIGFic29sdXRlKVxcXG5mcy9qZnMvamZzX21ldGFwYWdlLmg6NTg6XHQgX19nZXRfbWV0YXBhZ2UoaW5vZGUsIGxibG9jaywgc2l6ZSwgYWJzb2x1dGUsIHRydWUpXG5mcy9qZnMvamZzX21ldGFwYWdlLmgtNTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0NDQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzcywgd2l0aCBhIGZvY3VzIGZvciBhbiBleHBlcnQgbGlrZSB5b3Vyc2VsZjoKCioqSWRlbnRpZnlpbmcgS2V5IEtlcm5lbCBTeW1ib2xzIGZvciBBbmFseXNpcyoqCgpSaWdodCwgbGV0JiMzOTtzIHNlZS4gYF9fZ2V0X21ldGFwYWdlYCBpcyBleHBvcnRlZCwgbWVhbmluZyBpdCYjMzk7cyBhIGNyaXRpY2FsIGVudHJ5IHBvaW50IG9yIGZ1bmN0aW9uIHBvdGVudGlhbGx5IHVzZWQgYnkgb3RoZXIgbW9kdWxlcywgYW5kIGl0JiMzOTtzIG5vbi1zdGF0aWMsIHNvIGl0JiMzOTtzIGdsb2JhbGx5IHZpc2libGUgd2l0aGluIHRoZSByZWxldmFudCBuYW1lc3BhY2UuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYSBwcmV0dHkgZ29vZCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGRlZXBlci4gSXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0IGFzIGEgbGlrZWx5IGZvY3VzIHN5bWJvbCBmb3IgZGVlcGVyIGFuYWx5c2lzLgoKQW5kIGBqZnNfZmlsbF9zdXBlcmAgaXMgYW5vdGhlciBnb29kIG9uZS4gQmFzZWQgb24gaXRzIG5hbWUsIGl0JiMzOTtzIG9idmlvdXNseSByZWxhdGVkIHRvIHRoZSBmaWxlc3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGxvb2sgaW50byB0aGF0LgoKTm93LCBsZXQgbWUgc2VlIGlmIEkgY2FuIGZpbmQgc29tZSBvdGhlciBwb3RlbnRpYWxseSB2YWx1YWJsZSBjYW5kaWRhdGVzIGZvciBkZWVwZXIgYW5hbHlzaXMuIFRoZXJlJiMzOTtzIHByb2JhYmx5IG1vcmUuLi4gVGltZSB0byBzdGFydCBsb29raW5nIGFyb3VuZCBmb3IgcmVsYXRlZCBzeW1ib2xzLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlYWRfbWV0YXBhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9qZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2pmcy9qZnNfYnRyZWUuaD0xNz1zdHJ1Y3QgYnRwYWdlIHtcbi0tXG5mcy9qZnMvamZzX2J0cmVlLmgtNjMtXHR7XFxcbmZzL2pmcy9qZnNfYnRyZWUuaDo2NDpcdFx0TVAgPSByZWFkX21ldGFwYWdlKChJUCksIEJOLCBTSVpFLCAxKTtcXFxuZnMvamZzL2pmc19idHJlZS5oLTY1LVx0XHRpZiAoTVApIHtcXFxuLS1cbmZzL2pmcy9qZnNfZG1hcC5jPTI0MD1pbnQgZGJNb3VudChzdHJ1Y3QgaW5vZGUgKmlwYm1hcClcbi0tXG5mcy9qZnMvamZzX2RtYXAuYy0yNTUtXHQvKiByZWFkIHRoZSBvbi1kaXNrIGJtYXAgZGVzY3JpcHRvci4gKi9cbmZzL2pmcy9qZnNfZG1hcC5jOjI1NjpcdG1wID0gcmVhZF9tZXRhcGFnZShpcGJtYXAsXG5mcy9qZnMvamZzX2RtYXAuYy0yNTctXHRcdFx0ICAgQk1BUEJMS05PIFx1MDAzY1x1MDAzYyBKRlNfU0JJKGlwYm1hcC1cdTAwM2VpX3NiKS1cdTAwM2VsMm5icGVycGFnZSxcbi0tXG5mcy9qZnMvamZzX2RtYXAuYz0zNjM9aW50IGRiU3luYyhzdHJ1Y3QgaW5vZGUgKmlwYm1hcClcbi0tXG5mcy9qZnMvamZzX2RtYXAuYy0zNzMtXHQvKiBnZXQgdGhlIGJ1ZmZlciBmb3IgdGhlIG9uLWRpc2sgYm1hcCBkZXNjcmlwdG9yLiAqL1xuZnMvamZzL2pmc19kbWFwLmM6Mzc0Olx0bXAgPSByZWFkX21ldGFwYWdlKGlwYm1hcCxcbmZzL2pmcy9qZnNfZG1hcC5jLTM3NS1cdFx0XHQgICBCTUFQQkxLTk8gXHUwMDNjXHUwMDNjIEpGU19TQkkoaXBibWFwLVx1MDAzZWlfc2IpLVx1MDAzZWwybmJwZXJwYWdlLFxuLS1cbmZzL2pmcy9qZnNfZG1hcC5jLTM3Ny1cdGlmIChtcCA9PSBOVUxMKSB7XG5mcy9qZnMvamZzX2RtYXAuYzozNzg6XHRcdGpmc19lcnIoXCYjMzQ7ZGJTeW5jOiByZWFkX21ldGFwYWdlIGZhaWxlZCFcJiMzNDspO1xuZnMvamZzL2pmc19kbWFwLmMtMzc5LVx0XHRyZXR1cm4gLUVJTztcbi0tXG5mcy9qZnMvamZzX2RtYXAuYz00MzE9aW50IGRiRnJlZShzdHJ1Y3QgaW5vZGUgKmlwLCBzNjQgYmxrbm8sIHM2NCBuYmxvY2tzKVxuLS1cbmZzL2pmcy9qZnNfZG1hcC5jLTQ3MS1cdFx0bGJsa25vID0gQkxLVE9ETUFQKGJsa25vLCBibXAtXHUwMDNlZGJfbDJuYnBlcnBhZ2UpO1xuZnMvamZzL2pmc19kbWFwLmM6NDcyOlx0XHRtcCA9IHJlYWRfbWV0YXBhZ2UoaXBibWFwLCBsYmxrbm8sIFBTSVpFLCAwKTtcbmZzL2pmcy9qZnNfZG1hcC5jLTQ3My1cdFx0aWYgKG1wID09IE5VTEwpIHtcbi0tXG5mcy9qZnMvamZzX2RtYXAuYz01MjU9ZGJVcGRhdGVQTWFwKHN0cnVjdCBpbm9kZSAqaXBibWFwLFxuLS1cbmZzL2pmcy9qZnNfZG1hcC5jLTU2NS1cbmZzL2pmcy9qZnNfZG1hcC5jOjU2NjpcdFx0XHRtcCA9IHJlYWRfbWV0YXBhZ2UoYm1wLVx1MDAzZWRiX2lwYm1hcCwgbGJsa25vLCBQU0laRSxcbmZzL2pmcy9qZnNfZG1hcC5jLTU2Ny1cdFx0XHRcdFx0ICAgMCk7XG4tLVxuZnMvamZzL2pmc19kbWFwLmM9ODAxPWludCBkYkFsbG9jKHN0cnVjdCBpbm9kZSAqaXAsIHM2NCBoaW50LCBzNjQgbmJsb2NrcywgczY0ICogcmVzdWx0cylcbi0tXG5mcy9qZnMvamZzX2RtYXAuYy04ODItXHRcdGxibGtubyA9IEJMS1RPRE1BUChibGtubywgYm1wLVx1MDAzZWRiX2wybmJwZXJwYWdlKTtcbmZzL2pmcy9qZnNfZG1hcC5jOjg4MzpcdFx0bXAgPSByZWFkX21ldGFwYWdlKGlwYm1hcCwgbGJsa25vLCBQU0laRSwgMCk7XG5mcy9qZnMvamZzX2RtYXAuYy04ODQtXHRcdGlmIChtcCA9PSBOVUxMKVxuLS1cbmZzL2pmcy9qZnNfZG1hcC5jPTEwNTk9c3RhdGljIGludCBkYkV4dGVuZChzdHJ1Y3QgaW5vZGUgKmlwLCBzNjQgYmxrbm8sIHM2NCBuYmxvY2tzLCBzNjQgYWRkbmJsb2Nrcylcbi0tXG5mcy9qZnMvamZzX2RtYXAuYy0xMTEyLVx0bGJsa25vID0gQkxLVE9ETUFQKGV4dGJsa25vLCBibXAtXHUwMDNlZGJfbDJuYnBlcnBhZ2UpO1xuZnMvamZzL2pmc19kbWFwLmM6MTExMzpcdG1wID0gcmVhZF9tZXRhcGFnZShpcGJtYXAsIGxibGtubywgUFNJWkUsIDApO1xuZnMvamZzL2pmc19kbWFwLmMtMTExNC1cdGlmIChtcCA9PSBOVUxMKSB7XG4tLVxuZnMvamZzL2pmc19kbWFwLmM9MTM5OT1kYkFsbG9jQUcoc3RydWN0IGJtYXAgKiBibXAsIGludCBhZ25vLCBzNjQgbmJsb2NrcywgaW50IGwybmIsIHM2NCAqIHJlc3VsdHMpXG4tLVxuZnMvamZzL2pmc19kbWFwLmMtMTQ1NS1cdGxibGtubyA9IEJMS1RPQ1RMKGJsa25vLCBibXAtXHUwMDNlZGJfbDJuYnBlcnBhZ2UsIGJtcC1cdTAwM2VkYl9hZ2xldmVsKTtcbmZzL2pmcy9qZnNfZG1hcC5jOjE0NTY6XHRtcCA9IHJlYWRfbWV0YXBhZ2UoYm1wLVx1MDAzZWRiX2lwYm1hcCwgbGJsa25vLCBQU0laRSwgMCk7XG5mcy9qZnMvamZzX2RtYXAuYy0xNDU3LVx0aWYgKG1wID09IE5VTEwpXG4tLVxuZnMvamZzL2pmc19kbWFwLmM9MTc2OD1zdGF0aWMgaW50IGRiRmluZEN0bChzdHJ1Y3QgYm1hcCAqIGJtcCwgaW50IGwybmIsIGludCBsZXZlbCwgczY0ICogYmxrbm8pXG4tLVxuZnMvamZzL2pmc19kbWFwLmMtMTc4NS1cdFx0bGJsa25vID0gQkxLVE9DVEwoYiwgYm1wLVx1MDAzZWRiX2wybmJwZXJwYWdlLCBsZXYpO1xuZnMvamZzL2pmc19kbWFwLmM6MTc4NjpcdFx0bXAgPSByZWFkX21ldGFwYWdlKGJtcC1cdTAwM2VkYl9pcGJtYXAsIGxibGtubywgUFNJWkUsIDApO1xuZnMvamZzL2pmc19kbWFwLmMtMTc4Ny1cdFx0aWYgKG1wID09IE5VTEwpXG4tLVxuZnMvamZzL2pmc19kbWFwLmM9MTg4Nz1kYkFsbG9jQ3RsKHN0cnVjdCBibWFwICogYm1wLCBzNjQgbmJsb2NrcywgaW50IGwybmIsIHM2NCBibGtubywgczY0ICogcmVzdWx0cylcbi0tXG5mcy9qZnMvamZzX2RtYXAuYy0xODk5LVx0XHRsYmxrbm8gPSBCTEtUT0RNQVAoYmxrbm8sIGJtcC1cdTAwM2VkYl9sMm5icGVycGFnZSk7XG5mcy9qZnMvamZzX2RtYXAuYzoxOTAwOlx0XHRtcCA9IHJlYWRfbWV0YXBhZ2UoYm1wLVx1MDAzZWRiX2lwYm1hcCwgbGJsa25vLCBQU0laRSwgMCk7XG5mcy9qZnMvamZzX2RtYXAuYy0xOTAxLVx0XHRpZiAobXAgPT0gTlVMTClcbi0tXG5mcy9qZnMvamZzX2RtYXAuYy0xOTMxLVx0XHRsYmxrbm8gPSBCTEtUT0RNQVAoYiwgYm1wLVx1MDAzZWRiX2wybmJwZXJwYWdlKTtcbmZzL2pmcy9qZnNfZG1hcC5jOjE5MzI6XHRcdG1wID0gcmVhZF9tZXRhcGFnZShibXAtXHUwMDNlZGJfaXBibWFwLCBsYmxrbm8sIFBTSVpFLCAwKTtcbmZzL2pmcy9qZnNfZG1hcC5jLTE5MzMtXHRcdGlmIChtcCA9PSBOVUxMKSB7XG4tLVxuZnMvamZzL2pmc19kbWFwLmMtMTk4NC1cdFx0bGJsa25vID0gQkxLVE9ETUFQKGIsIGJtcC1cdTAwM2VkYl9sMm5icGVycGFnZSk7XG5mcy9qZnMvamZzX2RtYXAuYzoxOTg1Olx0XHRtcCA9IHJlYWRfbWV0YXBhZ2UoYm1wLVx1MDAzZWRiX2lwYm1hcCwgbGJsa25vLCBQU0laRSwgMCk7XG5mcy9qZnMvamZzX2RtYXAuYy0xOTg2LVx0XHRpZiAobXAgPT0gTlVMTCkge1xuLS1cbmZzL2pmcy9qZnNfZG1hcC5jPTI1NTc9ZGJBZGpDdGwoc3RydWN0IGJtYXAgKiBibXAsIHM2NCBibGtubywgaW50IG5ld3ZhbCwgaW50IGFsbG9jLCBpbnQgbGV2ZWwpXG4tLVxuZnMvamZzL2pmc19kbWFwLmMtMjU2OS1cdGxibGtubyA9IEJMS1RPQ1RMKGJsa25vLCBibXAtXHUwMDNlZGJfbDJuYnBlcnBhZ2UsIGxldmVsKTtcbmZzL2pmcy9qZnNfZG1hcC5jOjI1NzA6XHRtcCA9IHJlYWRfbWV0YXBhZ2UoYm1wLVx1MDAzZWRiX2lwYm1hcCwgbGJsa25vLCBQU0laRSwgMCk7XG5mcy9qZnMvamZzX2RtYXAuYy0yNTcxLVx0aWYgKG1wID09IE5VTEwpXG4tLVxuZnMvamZzL2pmc19kbWFwLmM9MzI3OD1pbnQgZGJBbGxvY0JvdHRvbVVwKHN0cnVjdCBpbm9kZSAqaXAsIHM2NCBibGtubywgczY0IG5ibG9ja3MpXG4tLVxuZnMvamZzL2pmc19kbWFwLmMtMzMwMy1cdFx0bGJsa25vID0gQkxLVE9ETUFQKGJsa25vLCBibXAtXHUwMDNlZGJfbDJuYnBlcnBhZ2UpO1xuZnMvamZzL2pmc19kbWFwLmM6MzMwNDpcdFx0bXAgPSByZWFkX21ldGFwYWdlKGlwYm1hcCwgbGJsa25vLCBQU0laRSwgMCk7XG5mcy9qZnMvamZzX2RtYXAuYy0zMzA1LVx0XHRpZiAobXAgPT0gTlVMTCkge1xuLS1cbmZzL2pmcy9qZnNfZG1hcC5jPTM0NTQ9aW50IGRiRXh0ZW5kRlMoc3RydWN0IGlub2RlICppcGJtYXAsIHM2NCBibGtubyxcdHM2NCBuYmxvY2tzKVxuLS1cbmZzL2pmcy9qZnNfZG1hcC5jLTM1MzctXHRwID0gQk1BUEJMS05PICYjNDM7IG5icGVycGFnZTtcdC8qIEwyIHBhZ2UgKi9cbmZzL2pmcy9qZnNfZG1hcC5jOjM1Mzg6XHRsMm1wID0gcmVhZF9tZXRhcGFnZShpcGJtYXAsIHAsIFBTSVpFLCAwKTtcbmZzL2pmcy9qZnNfZG1hcC5jLTM1MzktXHRpZiAoIWwybXApIHtcbi0tXG5mcy9qZnMvamZzX2RtYXAuYy0zNTYxLVx0XHRcdC8qIHJlYWQgaW4gTDEgcGFnZTogKGJsa25vIFx1MDAyNiAoTUFYTDFTSVpFIC0gMSkpICovXG5mcy9qZnMvamZzX2RtYXAuYzozNTYyOlx0XHRcdGwxbXAgPSByZWFkX21ldGFwYWdlKGlwYm1hcCwgcCwgUFNJWkUsIDApO1xuZnMvamZzL2pmc19kbWFwLmMtMzU2My1cdFx0XHRpZiAobDFtcCA9PSBOVUxMKVxuLS1cbmZzL2pmcy9qZnNfZG1hcC5jLTM2MDEtXG5mcy9qZnMvamZzX2RtYXAuYzozNjAyOlx0XHRcdFx0bDBtcCA9IHJlYWRfbWV0YXBhZ2UoaXBibWFwLCBwLCBQU0laRSwgMCk7XG5mcy9qZnMvamZzX2RtYXAuYy0zNjAzLVx0XHRcdFx0aWYgKGwwbXAgPT0gTlVMTClcbi0tXG5mcy9qZnMvamZzX2RtYXAuYy0zNjQ1LVx0XHRcdFx0XHQvKiByZWFkIGluIGRtYXAgcGFnZTogKi9cbmZzL2pmcy9qZnNfZG1hcC5jOjM2NDY6XHRcdFx0XHRcdG1wID0gcmVhZF9tZXRhcGFnZShpcGJtYXAsIHAsXG5mcy9qZnMvamZzX2RtYXAuYy0zNjQ3LVx0XHRcdFx0XHRcdFx0ICAgUFNJWkUsIDApO1xuLS1cbmZzL2pmcy9qZnNfZG1hcC5jLTM2NTItXHRcdFx0XHRcdC8qIGFzc2lnbi9pbml0IGRtYXAgcGFnZSAqL1xuZnMvamZzL2pmc19kbWFwLmM6MzY1MzpcdFx0XHRcdFx0bXAgPSByZWFkX21ldGFwYWdlKGlwYm1hcCwgcCxcbmZzL2pmcy9qZnNfZG1hcC5jLTM2NTQtXHRcdFx0XHRcdFx0XHQgICBQU0laRSwgMCk7XG4tLVxuZnMvamZzL2pmc19kdHJlZS5jPTE5Mz1zdGF0aWMgc3RydWN0IG1ldGFwYWdlICpyZWFkX2luZGV4X3BhZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgczY0IGJsa25vKVxuLS1cbmZzL2pmcy9qZnNfZHRyZWUuYy0yMDMtXG5mcy9qZnMvamZzX2R0cmVlLmM6MjA0Olx0cmV0dXJuIHJlYWRfbWV0YXBhZ2UoaW5vZGUsIHhhZGRyLCBQU0laRSwgMSk7XG5mcy9qZnMvamZzX2R0cmVlLmMtMjA1LX1cbi0tXG5mcy9qZnMvamZzX2R0cmVlLmM9MzE5PXN0YXRpYyB1MzIgYWRkX2luZGV4KHRpZF90IHRpZCwgc3RydWN0IGlub2RlICppcCwgczY0IGJuLCBpbnQgc2xvdClcbi0tXG5mcy9qZnMvamZzX2R0cmVlLmMtNDUxLVx0aWYgKCFtcCkge1xuZnMvamZzL2pmc19kdHJlZS5jOjQ1MjpcdFx0amZzX2VycihcJiMzNDthZGRfaW5kZXg6IGdldC9yZWFkX21ldGFwYWdlIGZhaWxlZCFcJiMzNDspO1xuZnMvamZzL2pmc19kdHJlZS5jLTQ1My1cdFx0Z290byBjbGVhbl91cDtcbi0tXG5mcy9qZnMvamZzX2ltYXAuYz05ND1pbnQgZGlNb3VudChzdHJ1Y3QgaW5vZGUgKmlwaW1hcClcbi0tXG5mcy9qZnMvamZzX2ltYXAuYy0xMTAtXG5mcy9qZnMvamZzX2ltYXAuYzoxMTE6XHRtcCA9IHJlYWRfbWV0YXBhZ2UoaXBpbWFwLFxuZnMvamZzL2pmc19pbWFwLmMtMTEyLVx0XHRcdCAgIElNQVBCTEtOTyBcdTAwM2NcdTAwM2MgSkZTX1NCSShpcGltYXAtXHUwMDNlaV9zYiktXHUwMDNlbDJuYnBlcnBhZ2UsXG4tLVxuZnMvamZzL2pmc19pbWFwLmM9MjkwPWludCBkaVJlYWQoc3RydWN0IGlub2RlICppcClcbi0tXG5mcy9qZnMvamZzX2ltYXAuYy0zNjYtXHQvKiByZWFkIHRoZSBwYWdlIG9mIGRpc2sgaW5vZGUgKi9cbmZzL2pmcy9qZnNfaW1hcC5jOjM2NzpcdG1wID0gcmVhZF9tZXRhcGFnZShpcGltYXAsIHBhZ2VubyBcdTAwM2NcdTAwM2Mgc2JpLVx1MDAzZWwybmJwZXJwYWdlLCBQU0laRSwgMSk7XG5mcy9qZnMvamZzX2ltYXAuYy0zNjgtXHRpZiAoIW1wKSB7XG5mcy9qZnMvamZzX2ltYXAuYzozNjk6XHRcdGpmc19lcnIoXCYjMzQ7ZGlSZWFkOiByZWFkX21ldGFwYWdlIGZhaWxlZFwmIzM0Oyk7XG5mcy9qZnMvamZzX2ltYXAuYy0zNzAtXHRcdHJldHVybiAtRUlPO1xuLS1cbmZzL2pmcy9qZnNfaW1hcC5jPTQxOD1zdHJ1Y3QgaW5vZGUgKmRpUmVhZFNwZWNpYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW5vX3QgaW51bSwgaW50IHNlY29uZGFyeSlcbi0tXG5mcy9qZnMvamZzX2ltYXAuYy00NDYtXHQvKiByZWFkIHRoZSBwYWdlIG9mIGZpeGVkIGRpc2sgaW5vZGUgKEFJVCkgaW4gcmF3IG1vZGUgKi9cbmZzL2pmcy9qZnNfaW1hcC5jOjQ0NzpcdG1wID0gcmVhZF9tZXRhcGFnZShpcCwgYWRkcmVzcyBcdTAwM2NcdTAwM2Mgc2JpLVx1MDAzZWwybmJwZXJwYWdlLCBQU0laRSwgMSk7XG5mcy9qZnMvamZzX2ltYXAuYy00NDgtXHRpZiAobXAgPT0gTlVMTCkge1xuLS1cbmZzL2pmcy9qZnNfaW1hcC5jPTUwMD12b2lkIGRpV3JpdGVTcGVjaWFsKHN0cnVjdCBpbm9kZSAqaXAsIGludCBzZWNvbmRhcnkpXG4tLVxuZnMvamZzL2pmc19pbWFwLmMtNTE3LVx0LyogcmVhZCB0aGUgcGFnZSBvZiBmaXhlZCBkaXNrIGlub2RlIChBSVQpIGluIHJhdyBtb2RlICovXG5mcy9qZnMvamZzX2ltYXAuYzo1MTg6XHRtcCA9IHJlYWRfbWV0YXBhZ2UoaXAsIGFkZHJlc3MgXHUwMDNjXHUwMDNjIHNiaS1cdTAwM2VsMm5icGVycGFnZSwgUFNJWkUsIDEpO1xuZnMvamZzL2pmc19pbWFwLmMtNTE5LVx0aWYgKG1wID09IE5VTEwpIHtcbi0tXG5mcy9qZnMvamZzX2ltYXAuYz01ODE9aW50IGRpV3JpdGUodGlkX3QgdGlkLCBzdHJ1Y3QgaW5vZGUgKmlwKVxuLS1cbmZzL2pmcy9qZnNfaW1hcC5jLTYzOC0gICAgICByZXRyeTpcbmZzL2pmcy9qZnNfaW1hcC5jOjYzOTpcdG1wID0gcmVhZF9tZXRhcGFnZShpcGltYXAsIHBhZ2VubyBcdTAwM2NcdTAwM2Mgc2JpLVx1MDAzZWwybmJwZXJwYWdlLCBQU0laRSwgMSk7XG5mcy9qZnMvamZzX2ltYXAuYy02NDAtXHRpZiAoIW1wKVxuLS1cbmZzL2pmcy9qZnNfaW1hcC5jPTI2NjM9c3RhdGljIGludCBkaUlBR1JlYWQoc3RydWN0IGlub21hcCAqIGltYXAsIGludCBpYWdubywgc3RydWN0IG1ldGFwYWdlICoqIG1wcClcbi0tXG5mcy9qZnMvamZzX2ltYXAuYy0yNjcxLVx0LyogcmVhZCB0aGUgaWFnLiAqL1xuZnMvamZzL2pmc19pbWFwLmM6MjY3MjpcdCptcHAgPSByZWFkX21ldGFwYWdlKGlwaW1hcCwgYmxrbm8sIFBTSVpFLCAwKTtcbmZzL2pmcy9qZnNfaW1hcC5jLTI2NzMtXHRpZiAoKm1wcCA9PSBOVUxMKSB7XG4tLVxuZnMvamZzL2pmc19tZXRhcGFnZS5oPTUwPWV4dGVybiBzdHJ1Y3QgbWV0YXBhZ2UgKl9fZ2V0X21ldGFwYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvamZzL2pmc19tZXRhcGFnZS5oLTUzLVxuZnMvamZzL2pmc19tZXRhcGFnZS5oOjU0OiNkZWZpbmUgcmVhZF9tZXRhcGFnZShpbm9kZSwgbGJsb2NrLCBzaXplLCBhYnNvbHV0ZSlcXFxuZnMvamZzL2pmc19tZXRhcGFnZS5oLTU1LVx0IF9fZ2V0X21ldGFwYWdlKGlub2RlLCBsYmxvY2ssIHNpemUsIGFic29sdXRlLCBmYWxzZSlcbi0tXG5mcy9qZnMveGF0dHIuYz0zNTE9c3RhdGljIGludCBlYV9yZWFkKHN0cnVjdCBpbm9kZSAqaXAsIHN0cnVjdCBqZnNfZWFfbGlzdCAqZWFsaXN0KVxuLS1cbmZzL2pmcy94YXR0ci5jLTM5NS1cbmZzL2pmcy94YXR0ci5jOjM5NjpcdFx0aWYgKCEobXAgPSByZWFkX21ldGFwYWdlKGlwLCBibGtubyAmIzQzOyBpLCBieXRlc190b19yZWFkLCAxKSkpXG5mcy9qZnMveGF0dHIuYy0zOTctXHRcdFx0cmV0dXJuIC1FSU87XG4tLVxuZnMvamZzL3hhdHRyLmM9NDI2PXN0YXRpYyBpbnQgZWFfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBlYV9idWZmZXIgKmVhX2J1ZiwgaW50IG1pbl9zaXplKVxuLS1cbmZzL2pmcy94YXR0ci5jLTU0OC1cdGVhX2J1Zi1cdTAwM2VmbGFnID0gRUFfRVhURU5UO1xuZnMvamZzL3hhdHRyLmM6NTQ5Olx0ZWFfYnVmLVx1MDAzZW1wID0gcmVhZF9tZXRhcGFnZShpbm9kZSwgYWRkcmVzc0RYRChcdTAwMjZqaS1cdTAwM2VlYSksXG5mcy9qZnMveGF0dHIuYy01NTAtXHRcdFx0XHQgICBsZW5ndGhEWEQoXHUwMDI2amktXHUwMDNlZWEpIFx1MDAzY1x1MDAzYyBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg4NAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDcyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEpGUyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gZmxhZ2dlZCBhIGJ1bmNoIG9mIEpGUyBmdW5jdGlvbnMsIGFuZCBJJiMzOTt2ZSBuYXJyb3dlZCBpdCBkb3duIHRvIGEgbW9yZSBmb2N1c2VkIHNldDogYGpmc19maWxsX3N1cGVyYCwgYF9fZ2V0X21ldGFwYWdlYCwgYGRpUmVhZGAsIGBkaVdyaXRlYCwgYGRiTW91bnRgLCBgZGJTeW5jYCwgYGRiRnJlZWAsIGBkYkFsbG9jYCwgYGVhX2dldGAsIGFuZCBgZWFfcmVhZGAuIEdpdmVuIHRoZSBjb250ZXh0IG9mIGEgcGF0Y2gsIGBfX2dldF9tZXRhcGFnZWAgYW5kIGBqZnNfZmlsbF9zdXBlcmAganVtcCBvdXQgYXMgdGhlIG1vc3QgcmVsZXZhbnQgZW50cnkgcG9pbnRzIGJlY2F1c2UgdGhleSBhcmUgY2xvc2VseSBhc3NvY2lhdGVkIHdpdGggZmlsZSBzeXN0ZW0gb3BlcmF0aW9ucywgYW5kIGluaXRpYWxpemF0aW9uLCByZXNwZWN0aXZlbHkuIFdlJiMzOTtyZSBsb29raW5nIGF0IGNvcmUgZnVuY3Rpb25hbGl0eSBjaGFuZ2VzLgoKVGhlIGNyaXRpY2FsIHBpZWNlIGhlcmUgaXMgdGhlIHBhdGNoJiMzOTtzIGxvY2F0aW9uLCBgbWV0YXBhZ2VfcmVhZF9mb2xpb2AuIFRoZSBWRlMgY2FsbHMgdGhpcyB3aGVuIGRlYWxpbmcgd2l0aCBKRlMgYmxvY2sgZGV2aWNlIG1hcHBpbmdzLCBzcGVjaWZpY2FsbHkgZHVyaW5nIHBhZ2UgcmVhZHMgdmlhIGByZWFkX21hcHBpbmdfZm9saW9gLiBgX19nZXRfbWV0YXBhZ2VgIGlzIHRoZSBrZXkgZnVuY3Rpb24gdGhhdCBjYWxscyBgcmVhZF9tYXBwaW5nX2ZvbGlvYCB3aGljaCwgaW4gdHVybiwgY2FsbHMgYG1ldGFwYWdlX3JlYWRfZm9saW9gLCBlZmZlY3RpdmVseSBtYWtpbmcgaXQgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHRoZSByZWxldmFudCBmdW5jdGlvbmFsaXR5LiBUaGlzIG1ha2VzIHNlbnNlOiB0aGUgYmxvY2sgZGV2aWNlIG1hcHBpbmcgaXMgZ29pbmcgdG8gcmVhZCBmaWxlc3lzdGVtIG1ldGFkYXRhIHBhZ2VzLgoKSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYG1ldGFwYWdlX3JlYWRfZm9saW9gIGlzIHJlYWNoYWJsZS4gSXQmIzM5O3MgYXNzaWduZWQgdG8gYGpmc19tZXRhcGFnZV9hb3BzLnJlYWRfZm9saW9gLCB3aGljaCBpcyB1c2VkIGZvciBib3RoIGJsb2NrIGRldmljZSBtYXBwaW5ncyAoaW5pdGlhbGl6ZWQgaW4gYGpmc19maWxsX3N1cGVyYCkgYW5kIHNwZWNpYWwgaW5vZGVzIChgZGlSZWFkU3BlY2lhbGApLiBUaGlzIGlzIHdoYXQgSSBleHBlY3QgYmFzZWQgb24gSkZTJiMzOTtzIGFyY2hpdGVjdHVyZS4gTWV0YWRhdGEgcmVhZHMgYXJlIGdvaW5nIHRocm91Z2ggdGhpcy4KClRoZSBwYXRjaCYjMzk7cyBjaGFuZ2UgaXMgYWJvdXQgY2hlY2tpbmcgdGhlIHJldHVybiB2YWx1ZSBvZiBgaW5zZXJ0X21ldGFwYWdlYC4gVGhpcyBpcyBzaWduaWZpY2FudCEgRmFpbHVyZSBpbiBgaW5zZXJ0X21ldGFwYWdlYCAod2hpY2ggY2FuIHJldHVybiAtRUJVU1kgb3IgLUVOT01FTSkgd2FzIHByZXZpb3VzbHkgYmVpbmcgaWdub3JlZCwgcG90ZW50aWFsbHkgY2F1c2luZyBzaWxlbnQgZGF0YSBjb3JydXB0aW9uIG9yIG90aGVyIGlzc3Vlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY29ycmVjdG5lc3MgZml4LCBhbmQgdGhlcmVmb3JlLCBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgYW5kIGZ1cnRoZXIgc2NydXRpbnkuCgpGb2N1c2luZyBpbiwgYF9fZ2V0X21ldGFwYWdlYCBpcyB0aGUgbW9zdCBkaXJlY3QgZW50cnkgcG9pbnQuIEl0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZSBtZXRhZGF0YSBwYWdlIHJldHJpZXZhbCBwcm9jZXNzLiBgamZzX2ZpbGxfc3VwZXJgIHdpbGwgYmUgaW1wb3J0YW50IGR1cmluZyBtb3VudCwgYW5kIGBkaVJlYWRgIGFuZCBgZWFfZ2V0YCB3aWxsIGJlIHVzZWZ1bCBpbiBpbm9kZSBhbmQgZXh0ZW5kZWQgYXR0cmlidXRlIHJlYWRpbmcuCgpOb3csIGxldCYjMzk7cyBkaWcgaW50byBgaW5zZXJ0X21ldGFwYWdlYCBpdHNlbGYuIEl0IHJldHVybnMgYC1FQlVTWWAgaWYgdGhlIG1ldGFwYWdlIGlzIGFscmVhZHkgaW4gdGhlIGhhc2ggdGFibGUgYW5kIGAtRU5PTUVNYCBpZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlscy4gSXQmIzM5O3MgYSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uLCB3aGljaCBtZWFucyB0aGUgY29tcGlsZXIgbWlnaHQgb3B0aW1pemUgaXQgYXdheS4gU3RpbGwsIGNoZWNraW5nIHRoZSByZXR1cm4gdmFsdWUgaXMgY3J1Y2lhbCBiZWNhdXNlIGl0IGVuc3VyZXMgcHJvcGVyIGVycm9yIGhhbmRsaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgaW5saW5lIGludCBpbnNlcnRfbWV0YXBhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9qZnMvamZzX21ldGFwYWdlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvamZzL2pmc19tZXRhcGFnZS5jPTg0PXN0YXRpYyBpbmxpbmUgc3RydWN0IG1ldGFwYWdlICpmb2xpb190b19tcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2Zmc2V0KVxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy05Mi1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzo5MzpzdGF0aWMgaW5saW5lIGludCBpbnNlcnRfbWV0YXBhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1ldGFwYWdlICptcClcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy05NC17XG4tLVxuZnMvamZzL2pmc19tZXRhcGFnZS5jPTIwOD1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZXRhcGFnZSAqZm9saW9fdG9fbXAoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9mZnNldClcbi0tXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtMjEyLVxuZnMvamZzL2pmc19tZXRhcGFnZS5jOjIxMzpzdGF0aWMgaW5saW5lIGludCBpbnNlcnRfbWV0YXBhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1ldGFwYWdlICptcClcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy0yMTQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ1OQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgYGluc2VydF9tZXRhcGFnZWAgSW1wbGVtZW50YXRpb25zKioKCkFscmlnaHQsIHNvIHRoZSBjb2RlJiMzOTtzIHJhaXNpbmcgYSByZWQgZmxhZyBhYm91dCBgaW5zZXJ0X21ldGFwYWdlYC4gSXQgbG9va3MgbGlrZSB0aGVyZSBhcmUgKnR3byogcG90ZW50aWFsIGRlZmluaXRpb25zIGZsb2F0aW5nIGFyb3VuZCwgYW5kIHdoaWNoIG9uZSBnZXRzIHVzZWQgZGVwZW5kcyBvbiBzb21lIGtpbmQgb2YgY29uZmlndXJhdGlvbiBzZXR0aW5nLiBUaGF0JiMzOTtzIGFsd2F5cyBhIHJlY2lwZSBmb3Igc3VidGxlIGJ1Z3MgaWYgbm90IGhhbmRsZWQgY2FyZWZ1bGx5LgoKTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhlIHNvdXJjZS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgc3VzcGVjdCBmaWxlIGlzIGBmcy9qZnMvamZzX21ldGFwYWdlLmNgLCBhbmQgYmFzZWQgb24gdGhlIGNvbnRleHQsIEkmIzM5O20gZ3Vlc3NpbmcgdGhlIGtleSBhcmVhcyB3aWxsIGJlIGFyb3VuZCBsaW5lIDkzIGFuZCB0aGVuIGFnYWluIGFyb3VuZCBsaW5lIDIxMy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aG9zZSBhcmVhcyBzcGVjaWZpY2FsbHkgdG8gc2VlIGV4YWN0bHkgaG93IHRoZXNlIHBvdGVudGlhbGx5IGNvbmZsaWN0aW5nIGRlZmluaXRpb25zIGFyZSBiZWluZyBoYW5kbGVkIGFuZCB3aGF0IGNvbmRpdGlvbnMgdHJpZ2dlciBlYWNoIG9uZS4gSG9wZWZ1bGx5IGl0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZCBhbmQgd2VsbC1jb21tZW50ZWQsIHNvIEkgZG9uJiMzOTt0IGhhdmUgdG8gdHJhY2UgdGhyb3VnaCBhIGJ1bmNoIG9mIHByZXByb2Nlc3NvciBtYWNyb3MhIFRoaXMgc2l0dWF0aW9uIHJlcXVpcmVzIHByZWNpc2lvbiB0byBlbnN1cmUgdGhlIGNvZGUgaXMgZG9pbmcgd2hhdCBpcyBpbnRlbmRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9qZnMvamZzX21ldGFwYWdlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA4MDpcdFx0YmxrX3N0YXR1c190IHN0YXR1cztcbiAgODE6XHRcdHN0cnVjdCBtZXRhcGFnZSAqbXBbTVBTX1BFUl9QQUdFXTtcbiAgODI6XHR9O1xuICA4MzpcdFxuICA4NDpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG1ldGFwYWdlICpmb2xpb190b19tcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2Zmc2V0KVxuICA4NTpcdHtcbiAgODY6XHRcdHN0cnVjdCBtZXRhX2FuY2hvciAqYW5jaG9yID0gZm9saW8tXHUwMDNlcHJpdmF0ZTtcbiAgODc6XHRcbiAgODg6XHRcdGlmICghYW5jaG9yKVxuICA4OTpcdFx0XHRyZXR1cm4gTlVMTDtcbiAgOTA6XHRcdHJldHVybiBhbmNob3ItXHUwMDNlbXBbb2Zmc2V0IFx1MDAzZVx1MDAzZSBMMlBTSVpFXTtcbiAgOTE6XHR9XG4gIDkyOlx0XG4gIDkzOlx0c3RhdGljIGlubGluZSBpbnQgaW5zZXJ0X21ldGFwYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZXRhcGFnZSAqbXApXG4gIDk0Olx0e1xuICA5NTpcdFx0c3RydWN0IG1ldGFfYW5jaG9yICphO1xuICA5NjpcdFx0aW50IGluZGV4O1xuICA5NzpcdFx0aW50IGwybXBfYmxvY2tzO1x0LyogbG9nMiBibG9ja3MgcGVyIG1ldGFwYWdlICovXG4gIDk4Olx0XG4gIDk5Olx0XHRhID0gZm9saW8tXHUwMDNlcHJpdmF0ZTtcbiAxMDA6XHRcdGlmICghYSkge1xuIDEwMTpcdFx0XHRhID0ga3phbGxvY19vYmooc3RydWN0IG1ldGFfYW5jaG9yLCBHRlBfTk9GUyk7XG4gMTAyOlx0XHRcdGlmICghYSlcbiAxMDM6XHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAxMDQ6XHRcdFx0Zm9saW9fYXR0YWNoX3ByaXZhdGUoZm9saW8sIGEpO1xuIDEwNTpcdFx0XHRrbWFwKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UpO1xuIDEwNjpcdFx0fVxuIDEwNzpcdFxuIDEwODpcdFx0aWYgKG1wKSB7XG4gMTA5Olx0XHRcdGwybXBfYmxvY2tzID0gTDJQU0laRSAtIGZvbGlvLVx1MDAzZW1hcHBpbmctXHUwMDNlaG9zdC1cdTAwM2VpX2Jsa2JpdHM7XG4gMTEwOlx0XHRcdGluZGV4ID0gKG1wLVx1MDAzZWluZGV4IFx1MDAzZVx1MDAzZSBsMm1wX2Jsb2NrcykgXHUwMDI2IChNUFNfUEVSX1BBR0UgLSAxKTtcbiAxMTE6XHRcdFx0YS1cdTAwM2VtcF9jb3VudCYjNDM7JiM0Mzs7XG4gMTEyOlx0XHRcdGEtXHUwMDNlbXBbaW5kZXhdID0gbXA7XG4gMTEzOlx0XHR9XG4gMTE0Olx0XG4gMTE1Olx0XHRyZXR1cm4gMDtcbiAxMTY6XHR9XG4gMTE3Olx0XG4gMTE4Olx0c3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9tZXRhcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWV0YXBhZ2UgKm1wKVxuIDExOTpcdHtcbiAxMjA6XHRcdHN0cnVjdCBtZXRhX2FuY2hvciAqYSA9IGZvbGlvLVx1MDAzZXByaXZhdGU7XG4gMTIxOlx0XHRpbnQgbDJtcF9ibG9ja3MgPSBMMlBTSVpFIC0gZm9saW8tXHUwMDNlbWFwcGluZy1cdTAwM2Vob3N0LVx1MDAzZWlfYmxrYml0cztcbiAxMjI6XHRcdGludCBpbmRleDtcbiAxMjM6XHRcbiAxMjQ6XHRcdGluZGV4ID0gKG1wLVx1MDAzZWluZGV4IFx1MDAzZVx1MDAzZSBsMm1wX2Jsb2NrcykgXHUwMDI2IChNUFNfUEVSX1BBR0UgLSAxKTtcbiAxMjU6XHRcbiAxMjY6XHRcdEJVR19PTihhLVx1MDAzZW1wW2luZGV4XSAhPSBtcCk7XG4gMTI3Olx0XG4gMTI4Olx0XHRhLVx1MDAzZW1wW2luZGV4XSA9IE5VTEw7XG4gMTI5Olx0XHRpZiAoLS1hLVx1MDAzZW1wX2NvdW50ID09IDApIHtcbiAxMzA6XHRcdFx0a2ZyZWUoYSk7XG4gMTMxOlx0XHRcdGZvbGlvX2RldGFjaF9wcml2YXRlKGZvbGlvKTtcbiAxMzI6XHRcdFx0a3VubWFwKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UpO1xuIDEzMzpcdFx0fVxuIDEzNDpcdH1cbiAxMzU6XHRcbiAxMzY6XHRzdGF0aWMgaW5saW5lIHZvaWQgaW5jX2lvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gMTM3Olx0e1xuIDEzODpcdFx0c3RydWN0IG1ldGFfYW5jaG9yICphbmNob3IgPSBmb2xpby1cdTAwM2Vwcml2YXRlO1xuIDEzOTpcdFxuIDE0MDpcdFx0YXRvbWljX2luYyhcdTAwMjZhbmNob3ItXHUwMDNlaW9fY291bnQpO1xuIDE0MTpcdH1cbiAxNDI6XHRcbiAxNDM6XHRzdGF0aWMgaW5saW5lIHZvaWQgZGVjX2lvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJsa19zdGF0dXNfdCBzdGF0dXMsXG4gMTQ0Olx0XHRcdHZvaWQgKCpoYW5kbGVyKShzdHJ1Y3QgZm9saW8gKiwgYmxrX3N0YXR1c190KSlcbiAxNDU6XHR7XG4gMTQ2Olx0XHRzdHJ1Y3QgbWV0YV9hbmNob3IgKmFuY2hvciA9IGZvbGlvLVx1MDAzZXByaXZhdGU7XG4gMTQ3Olx0XG4gMTQ4Olx0XHRpZiAoYW5jaG9yLVx1MDAzZXN0YXR1cyA9PSBCTEtfU1RTX09LKVxuIDE0OTpcdFx0XHRhbmNob3ItXHUwMDNlc3RhdHVzID0gc3RhdHVzO1xuIDE1MDpcdFxuIDE1MTpcdFx0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXHUwMDI2YW5jaG9yLVx1MDAzZWlvX2NvdW50KSlcbiAxNTI6XHRcdFx0aGFuZGxlcihmb2xpbywgYW5jaG9yLVx1MDAzZXN0YXR1cyk7XG4gMTUzOlx0fVxuIDE1NDpcdFxuIDE1NTpcdCNpZmRlZiBDT05GSUdfTUlHUkFUSU9OXG4gMTU2Olx0c3RhdGljIGludCBfX21ldGFwYWdlX21pZ3JhdGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gMTU3Olx0XHRcdFx0XHQgICAgc3RydWN0IGZvbGlvICpkc3QsIHN0cnVjdCBmb2xpbyAqc3JjLFxuIDE1ODpcdFx0XHRcdFx0ICAgIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUpXG4gMTU5Olx0e1xuIDE2MDpcdFx0c3RydWN0IG1ldGFfYW5jaG9yICpzcmNfYW5jaG9yID0gc3JjLVx1MDAzZXByaXZhdGU7XG4gMTYxOlx0XHRzdHJ1Y3QgbWV0YXBhZ2UgKm1wc1tNUFNfUEVSX1BBR0VdID0gezB9O1xuIDE2MjpcdFx0c3RydWN0IG1ldGFwYWdlICptcDtcbiAxNjM6XHRcdGludCBpLCByYztcbiAxNjQ6XHRcbiAxNjU6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1QU19QRVJfUEFHRTsgaSYjNDM7JiM0MzspIHtcbiAxNjY6XHRcdFx0bXAgPSBzcmNfYW5jaG9yLVx1MDAzZW1wW2ldO1xuIDE2NzpcdFx0XHRpZiAobXAgXHUwMDI2XHUwMDI2IG1ldGFwYWdlX2xvY2tlZChtcCkpXG4gMTY4Olx0XHRcdFx0cmV0dXJuIC1FQUdBSU47XG4gMTY5Olx0XHR9XG4gMTcwOlx0XG4gMTcxOlx0XHRyYyA9IGZpbGVtYXBfbWlncmF0ZV9mb2xpbyhtYXBwaW5nLCBkc3QsIHNyYywgbW9kZSk7XG4gMTcyOlx0XHRpZiAocmMpXG4gMTczOlx0XHRcdHJldHVybiByYztcbiAxNzQ6XHRcbiAxNzU6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1QU19QRVJfUEFHRTsgaSYjNDM7JiM0MzspIHtcbiAxNzY6XHRcdFx0bXAgPSBzcmNfYW5jaG9yLVx1MDAzZW1wW2ldO1xuIDE3NzpcdFx0XHRpZiAoIW1wKVxuIDE3ODpcdFx0XHRcdGNvbnRpbnVlO1xuIDE3OTpcdFx0XHRpZiAodW5saWtlbHkoaW5zZXJ0X21ldGFwYWdlKGRzdCwgbXApKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDE4MAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIE1ldGFwYWdlIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBpbnNlcnRfbWV0YXBhZ2VgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSBpdCYjMzk7cyBhIGNyaXRpY2FsIHBpZWNlLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGF0IGl0IGNhbiByZXR1cm4gYC1FTk9NRU1gLCB3aGljaCBpcyBhbHdheXMgYSByZWQgZmxhZyB3aGVuIGRlYWxpbmcgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiBpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGZhaWx1cmUgcGF0aHMgaGVyZS4KCkhtbSwgSSBzZWUgYSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBibG9jayDigJMgc29tZXRoaW5nIHJlbGF0ZWQgdG8gYENPTkZJR19NSUdSQVRJT05gLCBJIGJlbGlldmUsIG9yIGlzIGl0IGRpcmVjdGx5IG9uIGBDT05GSUdfTUlHUkFUSU9OYD8gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGF0Li4uIFllYWgsIGl0IGlzIGluZGVlZCBgI2lmZGVmIENPTkZJR19NSUdSQVRJT05gLgoKSG9sZCBvbiwgSSBhbHNvIG5lZWQgdG8gY29uc2lkZXIgdGhlIG90aGVyIGluc3RhbmNlIG9mIGBpbnNlcnRfbWV0YXBhZ2VgIGF0IGxpbmUgMjEzIGluIHRoaXMgZmlsZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIGNvbnNpZGVyaW5nIGFsbCB0aGUgdXNlIGNhc2VzIGZvciB0aGUgZnVuY3Rpb24sIGFuZCB3aGV0aGVyIHRoaXMgZGlmZmVyZW50IGNvbnRleHQgY2hhbmdlcyB0aGUgaW1wYWN0IG9yIG5hdHVyZSBvZiBhIHBvdGVudGlhbCBgLUVOT01FTWAgcmV0dXJuLiBUaW1lIHRvIGRpZyBpbiBhbmQgY29tcGFyZSB0aGUgY2FsbCBzaXRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9qZnMvamZzX21ldGFwYWdlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE5MDpcdFx0LyogVXBkYXRlIHRoZSBtZXRhcGFnZSBhbmQgcmVtb3ZlIGl0IGZyb20gc3JjICovXG4gMTkxOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNUFNfUEVSX1BBR0U7IGkmIzQzOyYjNDM7KSB7XG4gMTkyOlx0XHRcdG1wID0gbXBzW2ldO1xuIDE5MzpcdFx0XHRpZiAobXApIHtcbiAxOTQ6XHRcdFx0XHRpbnQgcGFnZV9vZmZzZXQgPSBtcC1cdTAwM2VkYXRhIC0gZm9saW9fYWRkcmVzcyhzcmMpO1xuIDE5NTpcdFxuIDE5NjpcdFx0XHRcdG1wLVx1MDAzZWRhdGEgPSBmb2xpb19hZGRyZXNzKGRzdCkgJiM0MzsgcGFnZV9vZmZzZXQ7XG4gMTk3Olx0XHRcdFx0bXAtXHUwMDNlZm9saW8gPSBkc3Q7XG4gMTk4Olx0XHRcdFx0cmVtb3ZlX21ldGFwYWdlKHNyYywgbXApO1xuIDE5OTpcdFx0XHR9XG4gMjAwOlx0XHR9XG4gMjAxOlx0XG4gMjAyOlx0XHRyZXR1cm4gMDtcbiAyMDM6XHR9XG4gMjA0Olx0I2VuZGlmXHQvKiBDT05GSUdfTUlHUkFUSU9OICovXG4gMjA1Olx0XG4gMjA2Olx0I2Vsc2VcbiAyMDc6XHRcbiAyMDg6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBtZXRhcGFnZSAqZm9saW9fdG9fbXAoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9mZnNldClcbiAyMDk6XHR7XG4gMjEwOlx0XHRyZXR1cm4gZm9saW8tXHUwMDNlcHJpdmF0ZTtcbiAyMTE6XHR9XG4gMjEyOlx0XG4gMjEzOlx0c3RhdGljIGlubGluZSBpbnQgaW5zZXJ0X21ldGFwYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZXRhcGFnZSAqbXApXG4gMjE0Olx0e1xuIDIxNTpcdFx0aWYgKG1wKSB7XG4gMjE2Olx0XHRcdGZvbGlvX2F0dGFjaF9wcml2YXRlKGZvbGlvLCBtcCk7XG4gMjE3Olx0XHRcdGttYXAoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSk7XG4gMjE4Olx0XHR9XG4gMjE5Olx0XHRyZXR1cm4gMDtcbiAyMjA6XHR9XG4gMjIxOlx0XG4gMjIyOlx0c3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9tZXRhcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWV0YXBhZ2UgKm1wKVxuIDIyMzpcdHtcbiAyMjQ6XHRcdGZvbGlvX2RldGFjaF9wcml2YXRlKGZvbGlvKTtcbiAyMjU6XHRcdGt1bm1hcChcdTAwMjZmb2xpby1cdTAwM2VwYWdlKTtcbiAyMjY6XHR9XG4gMjI3Olx0XG4gMjI4Olx0I2RlZmluZSBpbmNfaW8oZm9saW8pIGRvIHt9IHdoaWxlKDApXG4gMjI5Olx0I2RlZmluZSBkZWNfaW8oZm9saW8sIHN0YXR1cywgaGFuZGxlcikgaGFuZGxlcihmb2xpbywgc3RhdHVzKVxuIDIzMDpcdFxuIDIzMTpcdCNpZmRlZiBDT05GSUdfTUlHUkFUSU9OXG4gMjMyOlx0c3RhdGljIGludCBfX21ldGFwYWdlX21pZ3JhdGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gMjMzOlx0XHRcdFx0XHQgICAgc3RydWN0IGZvbGlvICpkc3QsIHN0cnVjdCBmb2xpbyAqc3JjLFxuIDIzNDpcdFx0XHRcdFx0ICAgIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUpXG4gMjM1Olx0e1xuIDIzNjpcdFx0c3RydWN0IG1ldGFwYWdlICptcDtcbiAyMzc6XHRcdGludCBwYWdlX29mZnNldDtcbiAyMzg6XHRcdGludCByYztcbiAyMzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxODQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgSkZTIFBhdGNoIGZvciBNZW1vcnkgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgI2Vsc2VgIGJsb2NrIGFuZCBpdCYjMzk7cyBhbGwgYWJvdXQgdGhlIGNhc2Ugd2hlcmUgYCNpZiBQQUdFX1NJWkUgJmd0OyBQU0laRWAuIFJpZ2h0LCBhbmQgYFBTSVpFYCBpcyA0MDk2LCB0aGUgc3RhbmRhcmQgcGFnZSBzaXplIGluIEpGUy4gVGhpcyBtZWFucyB0aGF0IGlmIHRoZSBzeXN0ZW0mIzM5O3MgcGFnZSBzaXplIChgUEFHRV9TSVpFYCkgaXMgbGFyZ2VyIHRoYW4gNDA5NiDigJMgbGlrZSB0aG9zZSA2NEsgcGFnZXMgb24gQVJNNjQgb3IgUG93ZXJQQyDigJMgYGluc2VydF9tZXRhcGFnZWAgKmNhbiogcmV0dXJuIGAtRU5PTUVNYC4gVGhhdCYjMzk7cyB0aGUga2V5LiBJZiBgUEFHRV9TSVpFYCAqZXF1YWxzKiBgUFNJWkVgLCBpdCAqYWx3YXlzKiByZXR1cm5zIDAuIFNvLCB0aGlzIHBhdGNoIHNwZWNpZmljYWxseSBhZGRyZXNzZXMgdGhlIHBvdGVudGlhbCBgLUVOT01FTWAgc2l0dWF0aW9uIHdoZW4gYFBBR0VfU0laRWAgaXMsIGluIGZhY3QsIGxhcmdlci4KCldhaXQgYSBzZWNvbmQsIG9uIHg4Nl82NCwgYFBBR0VfU0laRWAgKmlzKiA0MDk2LCBzbyB3ZSYjMzk7cmUgYWx3YXlzIHJldHVybmluZyAwIGJ5IGRlZmF1bHQuIFNvIHRoaXMgY2hhbmdlIHdvdWxkbiYjMzk7dCBoYXZlIGFueSBpbXBhY3QuIEJ1dCBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRob3NlIHN5c3RlbXMgd2l0aCBsYXJnZXIgcGFnZSBzaXplcywgdGhlbiBgLUVOT01FTWAgY2FuIGhhcHBlbi4KCkhtbSwgbm93IEkmIzM5O20gd29uZGVyaW5nIGlmIHN5emJvdCBpcyBldmVuIGNvbmZpZ3VyZWQgdG8gdXNlIDY0SyBwYWdlcz8gU29tZXRpbWVzLCB5ZXMuIEkgaGF2ZSBzZWVuIGl0IHVzZSB0aGVtLiBUaGlzIGlzIHByb2JhYmx5IGEgZ2VuZXJhbCBmaXguCgpSZWdhcmRsZXNzLCB0aGUgcGF0Y2ggdG91Y2hlcyBgbWV0YXBhZ2VfcmVhZF9mb2xpb2AsIHdoaWNoIGlzIGEgZnVuZGFtZW50YWwgSkZTIGZ1bmN0aW9uLiBUaGF0IG1ha2VzIHRoaXMgcGF0Y2ggcmVhbGx5IGludGVyZXN0aW5nLiBBbnl0aGluZyBhZmZlY3RpbmcgYG1ldGFwYWdlX3JlYWRfZm9saW9gIGlzIGNyaXRpY2FsLCBlc3BlY2lhbGx5IHdoZW4gYWRkcmVzc2luZyBtZW1vcnkgYWxsb2NhdGlvbiBpc3N1ZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyB0ZXN0ZWQuIEkmIzM5O20gZ29pbmcgdG8gZG91YmxlIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBQU0laRWAgZm9yIGNvbmZpcm1hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIFBTSVpFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvamZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODI5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQgYW5kIGFkb3B0aW5nIGEgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlOgoKKipIdW50aW5nIGZvciBgUFNJWkVgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gVGltZSB0byBodW50IGRvd24gdGhhdCBgUFNJWkVgIHZhcmlhYmxlLiBVc3VhbGx5LCB3aGVuIEkgZW5jb3VudGVyIHNvbWV0aGluZyBsaWtlIHRoaXMsIG15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIGNhdGFsb2dpbmcgdGhlIHBvc3NpYmlsaXRpZXMuIElzIGl0IGEgc3RhbmRhcmQgcGFyYW1ldGVyIHdpdGhpbiB0aGlzIGxpYnJhcnkgb3IgZnJhbWV3b3JrPyBJcyBpdCBhIGN1c3RvbSBtYWNybyBkZWZpbmVkIHNvbWV3aGVyZSBvYnNjdXJlLCBidXJpZWQgaW4gYSBoZWFkZXIgZmlsZT8gQ291bGQgaXQgYmUgc29tZXRoaW5nIHJlbGF0ZWQgdG8gbWVtb3J5IGFsbG9jYXRpb24sIG9yIHBlcmhhcHMgZXZlbiBhIGNvbmZpZ3VyYXRpb24gc2V0dGluZyB0aGF0JiMzOTtzIGR5bmFtaWNhbGx5IGRldGVybWluZWQ/CgpGaXJzdCwgSSYjMzk7ZCBwcm9iYWJseSBzdGFydCB3aXRoIGEgZ2xvYmFsIHNlYXJjaCB3aXRoaW4gdGhlIGNvZGViYXNlLiBJIG5lZWQgdG8gZ2V0IGEgc2Vuc2Ugb2YgaXRzIHByZXZhbGVuY2UgYW5kIGNvbnRleHQuIEEgcXVpY2sgZ3JlcCwgb3Igd2hhdGV2ZXIgc2VhcmNoIHRvb2wgSSYjMzk7bSB1c2luZyBhdCB0aGUgbW9tZW50LCB3aWxsIHBhaW50IGEgcGljdHVyZTogaG93IGZyZXF1ZW50bHkgaXMgaXQgdXNlZD8gSW4gd2hhdCBraW5kcyBvZiBtb2R1bGVzIG9yIGZ1bmN0aW9ucz8gQXJlIHRoZXJlIGNvbW1lbnRzLCBvciBvdGhlciBzdXJyb3VuZGluZyBjb2RlLCB0aGF0IHByb3ZpZGUgaW1tZWRpYXRlIGNsdWVzIGFib3V0IGl0cyBtZWFuaW5nIG9yIHB1cnBvc2U/CgpJZiB0aGUgZ2xvYmFsIHNlYXJjaCBkb2VzbiYjMzk7dCBpbW1lZGlhdGVseSByZXZlYWwgaXRzIG9yaWdpbiwgb3IgaWYgdGhlIGluaXRpYWwgcmVzdWx0cyBhcmUgYW1iaWd1b3VzLCBJJiMzOTtsbCBzdGFydCBkaWdnaW5nIGludG8gdGhlIG1vcmUgb2J2aW91cyBjYW5kaWRhdGVzLiBUaGUgZG9jdW1lbnRhdGlvbiBpcyB0aGUgYmVzdCBzdGFydGluZyBwb2ludCwgSSBrbm93IGl0JiMzOTtzIGEgYml0IG9mIGEgY2xpY2jDqSwgYnV0IGl0IGlzIG9mdGVuIHRoZSBiZXN0IHJlc291cmNlIGZvciBpbmZvcm1hdGlvbiBhYm91dCBhIHZhcmlhYmxlLiBJcyB0aGVyZSBhIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gZmlsZT8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGhlYWRlciBmaWxlcyBJIHNob3VsZCBsb29rIGF0PyBQZXJoYXBzIHRoZXJlJiMzOTtzIGFuIGludGVybmFsIHByb2plY3Qgd2lraSBvciBrbm93bGVkZ2UgYmFzZSB0aGF0IGNvdmVycyB0aGUgY29udmVudGlvbnMgdXNlZCBpbiB0aGlzIGNvZGViYXNlLgoKVWx0aW1hdGVseSwgZmluZGluZyBgUFNJWkVgIGlzIGFsbCBhYm91dCBtZXRob2RpY2FsIGV4cGxvcmF0aW9uIGFuZCBwYXR0ZXJuIHJlY29nbml0aW9uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcywgZm9sbG93aW5nIGJyZWFkY3J1bWJzLCBhbmQgY2FyZWZ1bGx5IGV4YW1pbmluZyB0aGUgc3Vycm91bmRpbmcgY29kZSB1bnRpbCBJJiMzOTt2ZSBzdWNjZXNzZnVsbHkgdHJhY2VkIGl0cyBkZWZpbml0aW9uIGFuZCBmdWxseSB1bmRlcnN0YW5kIGl0cyByb2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlZmluZSBQU0laRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2pmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI0NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBgUFNJWkVgIGluIHRoZSBKRlMgTWV0YXBhZ2UgSGVhZGVyKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBQU0laRWAuICBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIEpGUyBmaWxlc3lzdGVtLCBzcGVjaWZpY2FsbHkgYXMgaXQgcmVsYXRlcyB0byBtZXRhcGFnZXMuICBTbywgdGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZ29pbmcgdG8gZG8gaXMgbG9jYXRlIGl0cyBkZWZpbml0aW9uLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBoZWFkZXIgZmlsZSBmb3IgSkZTIG1ldGFwYWdlIHN0cnVjdHVyZXMg4oCTIGBmcy9qZnMvamZzX21ldGFwYWdlLmhgLiAgTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgcmV2ZWFscy4gIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgaXRzIGRlZmluaXRpb24gdGhlcmUsIGxpa2VseSBhcyBhIG1hY3JvIG9yIHBvc3NpYmx5IGEgY29uc3RhbnQsIGFuZCBob3BlZnVsbHkgc29tZSBjb250ZXh0IGFyb3VuZCBpdHMgdXNlLiBJ4oCZbSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBwYWdlIHNpemVzLCBob3cgaXQgbWlnaHQgcmVsYXRlIHRvIGJsb2NrIHNpemVzLCBhbmQgaG93IHRoZSBmaWxlc3lzdGVtIHN0cnVjdHVyZXMgbGV2ZXJhZ2UgdGhpcyBgUFNJWkVgIHZhbHVlLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHVzZSBvZiB0aGlzIGRlZmluaXRpb24gaW4gdGVybXMgb2YgdGhlIHVuZGVybHlpbmcgYmxvY2sgZGV2aWNlLCBhbmQgaG93IGl0IG1heSBiZSB1c2VkIGR1cmluZyByZWFkcyBhbmQgd3JpdGVzIG9mIGZpbGUgc3lzdGVtIG1ldGFkYXRhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BTSVpFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvamZzL2pmc19tZXRhcGFnZS5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1NTYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgSkZTIEZpbGVzeXN0ZW0gQ29kZWJhc2UqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpbmQgd2hlcmUgdGhlIGBQU0laRWAgbWFjcm8gaXMgZGVmaW5lZCBhbmQgdXNlZCB3aXRoaW4gdGhlIEpGUyBmaWxlc3lzdGVtLiBUaGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgaW5pdGlhbCBpbmNsaW5hdGlvbiBpcyB0byBsb29rIGRpcmVjdGx5IGluIHRoZSBgZnMvamZzL2AgZGlyZWN0b3J5LCBhcyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIGZpbGVzeXN0ZW0gY29kZSByZXNpZGVzLiBJdCYjMzk7cyBhIGZhaXJseSBzdGFuZGFyZCBhcHByb2FjaDsgbG9jYXRlIHRoZSByZWxldmFudCBpbmNsdWRlIGZpbGVzIGZpcnN0LCB0aGVuIHRyYWNrIGRvd24gd2hlcmUgdGhlIG1hY3JvIGlzIHVzZWQuIEkmIzM5O2xsIHN0YXJ0IHdpdGggYSBzdHJhaWdodGZvcndhcmQgZ3JlcCBmb3IgJiMzNDtQU0laRSYjMzQ7IGFuZCBzZWUgd2hlcmUgdGhhdCBsZWFkcy4gSG9wZWZ1bGx5LCBpdCYjMzk7cyBhIHNpbXBsZSwgbG9jYWxpemVkIGRlZmluaXRpb24uIElmIG5vdCwgSSYjMzk7bGwgbmVlZCB0byBicm9hZGVuIG15IHNlYXJjaCB0byBpbmNsdWRlIGFsbCBoZWFkZXIgZmlsZXMgd2l0aGluIHRoZSBKRlMgdHJlZSwgYW5kIHBvdGVudGlhbGx5IGV2ZW4gc3lzdGVtLXdpZGUgaGVhZGVycyBpZiB0aGUgbWFjcm8gYXBwZWFycyB0byBiZSBtb3JlIGdlbmVyaWMuIEZyb20gdGhlcmUsIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgaXRzIHVzYWdlOiBpcyBpdCByZWxhdGVkIHRvIGJsb2NrIHNpemVzLCBhbGxvY2F0aW9uIHVuaXRzLCBzZWN0b3Igc2l6ZXMsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgY29udGV4dCBvZiBpdHMgdXNlIHdpbGwgYmUgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIEpGUyBhcmNoaXRlY3R1cmUuIEkgYW50aWNpcGF0ZSBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIga2VybmVsIHN1YnN5c3RlbXMgaWYgaXQgcmVsYXRlcyB0byBibG9jayBJL08gb3IgdGhlIHZpcnR1YWwgZmlsZXN5c3RlbSAoVkZTKSBsYXllci4gSSYjMzk7bGwgbmVlZCB0byBrZWVwIGEgbWVudGFsIG5vdGUgb2YgdGhvc2UgcmVsYXRpb25zaGlwcyBhcyBJIGdvIHRocm91Z2ggdGhlIHJlbGV2YW50IGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BTSVpFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvamZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNjY3IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5mcy9qZnMvamZzX2RtYXAuYz0yNDA9aW50IGRiTW91bnQoc3RydWN0IGlub2RlICppcGJtYXApXG4tLVxuZnMvamZzL2pmc19kbWFwLmMtMjU3LVx0XHRcdCAgIEJNQVBCTEtOTyBcdTAwM2NcdTAwM2MgSkZTX1NCSShpcGJtYXAtXHUwMDNlaV9zYiktXHUwMDNlbDJuYnBlcnBhZ2UsXG5mcy9qZnMvamZzX2RtYXAuYzoyNTg6XHRcdFx0ICAgUFNJWkUsIDApO1xuZnMvamZzL2pmc19kbWFwLmMtMjU5LVx0aWYgKG1wID09IE5VTEwpIHtcbi0tXG5mcy9qZnMvamZzX2RtYXAuYy0yNzgtXG5mcy9qZnMvamZzX2RtYXAuYzoyNzk6XHRpZiAoKGJtcC1cdTAwM2VkYl9sMm5icGVycGFnZSBcdTAwM2UgTDJQU0laRSAtIEwyTUlOQkxPQ0tTSVpFKSB8fFxuZnMvamZzL2pmc19kbWFwLmMtMjgwLVx0ICAgIChibXAtXHUwMDNlZGJfbDJuYnBlcnBhZ2UgXHUwMDNjIDApIHx8XG4tLVxuZnMvamZzL2pmc19kbWFwLmM9MzYzPWludCBkYlN5bmMoc3RydWN0IGlub2RlICppcGJtYXApXG4tLVxuZnMvamZzL2pmc19kbWFwLmMtMzc1LVx0XHRcdCAgIEJNQVBCTEtOTyBcdTAwM2NcdTAwM2MgSkZTX1NCSShpcGJtYXAtXHUwMDNlaV9zYiktXHUwMDNlbDJuYnBlcnBhZ2UsXG5mcy9qZnMvamZzX2RtYXAuYzozNzY6XHRcdFx0ICAgUFNJWkUsIDApO1xuZnMvamZzL2pmc19kbWFwLmMtMzc3LVx0aWYgKG1wID09IE5VTEwpIHtcbi0tXG5mcy9qZnMvamZzX2RtYXAuYz00MzE9aW50IGRiRnJlZShzdHJ1Y3QgaW5vZGUgKmlwLCBzNjQgYmxrbm8sIHM2NCBuYmxvY2tzKVxuLS1cbmZzL2pmcy9qZnNfZG1hcC5jLTQ3MS1cdFx0bGJsa25vID0gQkxLVE9ETUFQKGJsa25vLCBibXAtXHUwMDNlZGJfbDJuYnBlcnBhZ2UpO1xuZnMvamZzL2pmc19kbWFwLmM6NDcyOlx0XHRtcCA9IHJlYWRfbWV0YXBhZ2UoaXBibWFwLCBsYmxrbm8sIFBTSVpFLCAwKTtcbmZzL2pmcy9qZnNfZG1hcC5jLTQ3My1cdFx0aWYgKG1wID09IE5VTEwpIHtcbi0tXG5mcy9qZnMvamZzX2RtYXAuYz01MjU9ZGJVcGRhdGVQTWFwKHN0cnVjdCBpbm9kZSAqaXBibWFwLFxuLS1cbmZzL2pmcy9qZnNfZG1hcC5jLTU2NS1cbmZzL2pmcy9qZnNfZG1hcC5jOjU2NjpcdFx0XHRtcCA9IHJlYWRfbWV0YXBhZ2UoYm1wLVx1MDAzZWRiX2lwYm1hcCwgbGJsa25vLCBQU0laRSxcbmZzL2pmcy9qZnNfZG1hcC5jLTU2Ny1cdFx0XHRcdFx0ICAgMCk7XG4tLVxuZnMvamZzL2pmc19kbWFwLmM9ODAxPWludCBkYkFsbG9jKHN0cnVjdCBpbm9kZSAqaXAsIHM2NCBoaW50LCBzNjQgbmJsb2NrcywgczY0ICogcmVzdWx0cylcbi0tXG5mcy9qZnMvamZzX2RtYXAuYy04ODItXHRcdGxibGtubyA9IEJMS1RPRE1BUChibGtubywgYm1wLVx1MDAzZWRiX2wybmJwZXJwYWdlKTtcbmZzL2pmcy9qZnNfZG1hcC5jOjg4MzpcdFx0bXAgPSByZWFkX21ldGFwYWdlKGlwYm1hcCwgbGJsa25vLCBQU0laRSwgMCk7XG5mcy9qZnMvamZzX2RtYXAuYy04ODQtXHRcdGlmIChtcCA9PSBOVUxMKVxuLS1cbmZzL2pmcy9qZnNfZG1hcC5jPTEwNTk9c3RhdGljIGludCBkYkV4dGVuZChzdHJ1Y3QgaW5vZGUgKmlwLCBzNjQgYmxrbm8sIHM2NCBuYmxvY2tzLCBzNjQgYWRkbmJsb2Nrcylcbi0tXG5mcy9qZnMvamZzX2RtYXAuYy0xMTEyLVx0bGJsa25vID0gQkxLVE9ETUFQKGV4dGJsa25vLCBibXAtXHUwMDNlZGJfbDJuYnBlcnBhZ2UpO1xuZnMvamZzL2pmc19kbWFwLmM6MTExMzpcdG1wID0gcmVhZF9tZXRhcGFnZShpcGJtYXAsIGxibGtubywgUFNJWkUsIDApO1xuZnMvamZzL2pmc19kbWFwLmMtMTExNC1cdGlmIChtcCA9PSBOVUxMKSB7XG4tLVxuZnMvamZzL2pmc19kbWFwLmM9MTM5OT1kYkFsbG9jQUcoc3RydWN0IGJtYXAgKiBibXAsIGludCBhZ25vLCBzNjQgbmJsb2NrcywgaW50IGwybmIsIHM2NCAqIHJlc3VsdHMpXG4tLVxuZnMvamZzL2pmc19kbWFwLmMtMTQ1NS1cdGxibGtubyA9IEJMS1RPQ1RMKGJsa25vLCBibXAtXHUwMDNlZGJfbDJuYnBlcnBhZ2UsIGJtcC1cdTAwM2VkYl9hZ2xldmVsKTtcbmZzL2pmcy9qZnNfZG1hcC5jOjE0NTY6XHRtcCA9IHJlYWRfbWV0YXBhZ2UoYm1wLVx1MDAzZWRiX2lwYm1hcCwgbGJsa25vLCBQU0laRSwgMCk7XG5mcy9qZnMvamZzX2RtYXAuYy0xNDU3LVx0aWYgKG1wID09IE5VTEwpXG4tLVxuZnMvamZzL2pmc19kbWFwLmM9MTc2OD1zdGF0aWMgaW50IGRiRmluZEN0bChzdHJ1Y3QgYm1hcCAqIGJtcCwgaW50IGwybmIsIGludCBsZXZlbCwgczY0ICogYmxrbm8pXG4tLVxuZnMvamZzL2pmc19kbWFwLmMtMTc4NS1cdFx0bGJsa25vID0gQkxLVE9DVEwoYiwgYm1wLVx1MDAzZWRiX2wybmJwZXJwYWdlLCBsZXYpO1xuZnMvamZzL2pmc19kbWFwLmM6MTc4NjpcdFx0bXAgPSByZWFkX21ldGFwYWdlKGJtcC1cdTAwM2VkYl9pcGJtYXAsIGxibGtubywgUFNJWkUsIDApO1xuZnMvamZzL2pmc19kbWFwLmMtMTc4Ny1cdFx0aWYgKG1wID09IE5VTEwpXG4tLVxuZnMvamZzL2pmc19kbWFwLmM9MTg4Nz1kYkFsbG9jQ3RsKHN0cnVjdCBibWFwICogYm1wLCBzNjQgbmJsb2NrcywgaW50IGwybmIsIHM2NCBibGtubywgczY0ICogcmVzdWx0cylcbi0tXG5mcy9qZnMvamZzX2RtYXAuYy0xODk5LVx0XHRsYmxrbm8gPSBCTEtUT0RNQVAoYmxrbm8sIGJtcC1cdTAwM2VkYl9sMm5icGVycGFnZSk7XG5mcy9qZnMvamZzX2RtYXAuYzoxOTAwOlx0XHRtcCA9IHJlYWRfbWV0YXBhZ2UoYm1wLVx1MDAzZWRiX2lwYm1hcCwgbGJsa25vLCBQU0laRSwgMCk7XG5mcy9qZnMvamZzX2RtYXAuYy0xOTAxLVx0XHRpZiAobXAgPT0gTlVMTClcbi0tXG5mcy9qZnMvamZzX2RtYXAuYy0xOTMxLVx0XHRsYmxrbm8gPSBCTEtUT0RNQVAoYiwgYm1wLVx1MDAzZWRiX2wybmJwZXJwYWdlKTtcbmZzL2pmcy9qZnNfZG1hcC5jOjE5MzI6XHRcdG1wID0gcmVhZF9tZXRhcGFnZShibXAtXHUwMDNlZGJfaXBibWFwLCBsYmxrbm8sIFBTSVpFLCAwKTtcbmZzL2pmcy9qZnNfZG1hcC5jLTE5MzMtXHRcdGlmIChtcCA9PSBOVUxMKSB7XG4tLVxuZnMvamZzL2pmc19kbWFwLmMtMTk4NC1cdFx0bGJsa25vID0gQkxLVE9ETUFQKGIsIGJtcC1cdTAwM2VkYl9sMm5icGVycGFnZSk7XG5mcy9qZnMvamZzX2RtYXAuYzoxOTg1Olx0XHRtcCA9IHJlYWRfbWV0YXBhZ2UoYm1wLVx1MDAzZWRiX2lwYm1hcCwgbGJsa25vLCBQU0laRSwgMCk7XG5mcy9qZnMvamZzX2RtYXAuYy0xOTg2LVx0XHRpZiAobXAgPT0gTlVMTCkge1xuLS1cbmZzL2pmcy9qZnNfZG1hcC5jPTI1NTc9ZGJBZGpDdGwoc3RydWN0IGJtYXAgKiBibXAsIHM2NCBibGtubywgaW50IG5ld3ZhbCwgaW50IGFsbG9jLCBpbnQgbGV2ZWwpXG4tLVxuZnMvamZzL2pmc19kbWFwLmMtMjU2OS1cdGxibGtubyA9IEJMS1RPQ1RMKGJsa25vLCBibXAtXHUwMDNlZGJfbDJuYnBlcnBhZ2UsIGxldmVsKTtcbmZzL2pmcy9qZnNfZG1hcC5jOjI1NzA6XHRtcCA9IHJlYWRfbWV0YXBhZ2UoYm1wLVx1MDAzZWRiX2lwYm1hcCwgbGJsa25vLCBQU0laRSwgMCk7XG5mcy9qZnMvamZzX2RtYXAuYy0yNTcxLVx0aWYgKG1wID09IE5VTEwpXG4tLVxuZnMvamZzL2pmc19kbWFwLmM9MzI3OD1pbnQgZGJBbGxvY0JvdHRvbVVwKHN0cnVjdCBpbm9kZSAqaXAsIHM2NCBibGtubywgczY0IG5ibG9ja3MpXG4tLVxuZnMvamZzL2pmc19kbWFwLmMtMzMwMy1cdFx0bGJsa25vID0gQkxLVE9ETUFQKGJsa25vLCBibXAtXHUwMDNlZGJfbDJuYnBlcnBhZ2UpO1xuZnMvamZzL2pmc19kbWFwLmM6MzMwNDpcdFx0bXAgPSByZWFkX21ldGFwYWdlKGlwYm1hcCwgbGJsa25vLCBQU0laRSwgMCk7XG5mcy9qZnMvamZzX2RtYXAuYy0zMzA1LVx0XHRpZiAobXAgPT0gTlVMTCkge1xuLS1cbmZzL2pmcy9qZnNfZG1hcC5jPTM0NTQ9aW50IGRiRXh0ZW5kRlMoc3RydWN0IGlub2RlICppcGJtYXAsIHM2NCBibGtubyxcdHM2NCBuYmxvY2tzKVxuLS1cbmZzL2pmcy9qZnNfZG1hcC5jLTM1MzctXHRwID0gQk1BUEJMS05PICYjNDM7IG5icGVycGFnZTtcdC8qIEwyIHBhZ2UgKi9cbmZzL2pmcy9qZnNfZG1hcC5jOjM1Mzg6XHRsMm1wID0gcmVhZF9tZXRhcGFnZShpcGJtYXAsIHAsIFBTSVpFLCAwKTtcbmZzL2pmcy9qZnNfZG1hcC5jLTM1MzktXHRpZiAoIWwybXApIHtcbi0tXG5mcy9qZnMvamZzX2RtYXAuYy0zNTYxLVx0XHRcdC8qIHJlYWQgaW4gTDEgcGFnZTogKGJsa25vIFx1MDAyNiAoTUFYTDFTSVpFIC0gMSkpICovXG5mcy9qZnMvamZzX2RtYXAuYzozNTYyOlx0XHRcdGwxbXAgPSByZWFkX21ldGFwYWdlKGlwYm1hcCwgcCwgUFNJWkUsIDApO1xuZnMvamZzL2pmc19kbWFwLmMtMzU2My1cdFx0XHRpZiAobDFtcCA9PSBOVUxMKVxuLS1cbmZzL2pmcy9qZnNfZG1hcC5jLTM1NzctXHRcdFx0LyogYXNzaWduL2luaXQgTDEgcGFnZSAqL1xuZnMvamZzL2pmc19kbWFwLmM6MzU3ODpcdFx0XHRsMW1wID0gZ2V0X21ldGFwYWdlKGlwYm1hcCwgcCwgUFNJWkUsIDApO1xuZnMvamZzL2pmc19kbWFwLmMtMzU3OS1cdFx0XHRpZiAobDFtcCA9PSBOVUxMKVxuLS1cbmZzL2pmcy9qZnNfZG1hcC5jLTM2MDEtXG5mcy9qZnMvamZzX2RtYXAuYzozNjAyOlx0XHRcdFx0bDBtcCA9IHJlYWRfbWV0YXBhZ2UoaXBibWFwLCBwLCBQU0laRSwgMCk7XG5mcy9qZnMvamZzX2RtYXAuYy0zNjAzLVx0XHRcdFx0aWYgKGwwbXAgPT0gTlVMTClcbi0tXG5mcy9qZnMvamZzX2RtYXAuYy0zNjE5LVx0XHRcdFx0LyogYXNzaWduL2luaXQgTDAgcGFnZSAqL1xuZnMvamZzL2pmc19kbWFwLmM6MzYyMDpcdFx0XHRcdGwwbXAgPSBnZXRfbWV0YXBhZ2UoaXBibWFwLCBwLCBQU0laRSwgMCk7XG5mcy9qZnMvamZzX2RtYXAuYy0zNjIxLVx0XHRcdFx0aWYgKGwwbXAgPT0gTlVMTClcbi0tXG5mcy9qZnMvamZzX2RtYXAuYy0zNjQ2LVx0XHRcdFx0XHRtcCA9IHJlYWRfbWV0YXBhZ2UoaXBibWFwLCBwLFxuZnMvamZzL2pmc19kbWFwLmM6MzY0NzpcdFx0XHRcdFx0XHRcdCAgIFBTSVpFLCAwKTtcbmZzL2pmcy9qZnNfZG1hcC5jLTM2NDgtXHRcdFx0XHRcdGlmIChtcCA9PSBOVUxMKVxuLS1cbmZzL2pmcy9qZnNfZG1hcC5jLTM2NTMtXHRcdFx0XHRcdG1wID0gcmVhZF9tZXRhcGFnZShpcGJtYXAsIHAsXG5mcy9qZnMvamZzX2RtYXAuYzozNjU0Olx0XHRcdFx0XHRcdFx0ICAgUFNJWkUsIDApO1xuZnMvamZzL2pmc19kbWFwLmMtMzY1NS1cdFx0XHRcdFx0aWYgKG1wID09IE5VTEwpXG4tLVxuZnMvamZzL2pmc19kbWFwLmgtNDQtXG5mcy9qZnMvamZzX2RtYXAuaDo0NTojZGVmaW5lXHRNQVhNQVBTSVpFXHRNQVhMMlNJWkVcdC8qIG1heGltdW0gYWdncmVnYXRlIG1hcCBzaXplICovXG5mcy9qZnMvamZzX2RtYXAuaC00Ni1cbi0tXG5mcy9qZnMvamZzX2R0cmVlLmM9MTkzPXN0YXRpYyBzdHJ1Y3QgbWV0YXBhZ2UgKnJlYWRfaW5kZXhfcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzNjQgYmxrbm8pXG4tLVxuZnMvamZzL2pmc19kdHJlZS5jLTIwMy1cbmZzL2pmcy9qZnNfZHRyZWUuYzoyMDQ6XHRyZXR1cm4gcmVhZF9tZXRhcGFnZShpbm9kZSwgeGFkZHIsIFBTSVpFLCAxKTtcbmZzL2pmcy9qZnNfZHRyZWUuYy0yMDUtfVxuLS1cbmZzL2pmcy9qZnNfZHRyZWUuYz0yMTI9c3RhdGljIHN0cnVjdCBtZXRhcGFnZSAqZ2V0X2luZGV4X3BhZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgczY0IGJsa25vKVxuLS1cbmZzL2pmcy9qZnNfZHRyZWUuYy0yMjItXG5mcy9qZnMvamZzX2R0cmVlLmM6MjIzOlx0cmV0dXJuIGdldF9tZXRhcGFnZShpbm9kZSwgeGFkZHIsIFBTSVpFLCAxKTtcbmZzL2pmcy9qZnNfZHRyZWUuYy0yMjQtfVxuLS1cbmZzL2pmcy9qZnNfZHRyZWUuYz0yMzQ9c3RhdGljIHN0cnVjdCBkaXJfdGFibGVfc2xvdCAqZmluZF9pbmRleChzdHJ1Y3QgaW5vZGUgKmlwLCB1MzIgaW5kZXgsXG4tLVxuZnMvamZzL2pmc19kdHJlZS5jLTI2NC1cdFx0b2Zmc2V0ID0gKGluZGV4IC0gMikgKiBzaXplb2Yoc3RydWN0IGRpcl90YWJsZV9zbG90KTtcbmZzL2pmcy9qZnNfZHRyZWUuYzoyNjU6XHRcdHBhZ2Vfb2Zmc2V0ID0gb2Zmc2V0IFx1MDAyNiAoUFNJWkUgLSAxKTtcbmZzL2pmcy9qZnNfZHRyZWUuYzoyNjY6XHRcdGJsa25vID0gKChvZmZzZXQgJiM0MzsgMSkgXHUwMDNlXHUwMDNlIEwyUFNJWkUpIFx1MDAzY1x1MDAzY1xuZnMvamZzL2pmc19kdHJlZS5jLTI2Ny1cdFx0ICAgIEpGU19TQkkoaXAtXHUwMDNlaV9zYiktXHUwMDNlbDJuYnBlcnBhZ2U7XG4tLVxuZnMvamZzL2pmc19kdHJlZS5jPTMxOT1zdGF0aWMgdTMyIGFkZF9pbmRleCh0aWRfdCB0aWQsIHN0cnVjdCBpbm9kZSAqaXAsIHM2NCBibiwgaW50IHNsb3QpXG4tLVxuZnMvamZzL2pmc19kdHJlZS5jLTM5OS1cdFx0fVxuZnMvamZzL2pmc19kdHJlZS5jOjQwMDpcdFx0aXAtXHUwMDNlaV9zaXplID0gUFNJWkU7XG5mcy9qZnMvamZzX2R0cmVlLmMtNDAxLVxuLS1cbmZzL2pmcy9qZnNfZHRyZWUuYy00MzAtXHRvZmZzZXQgPSAoaW5kZXggLSAyKSAqIHNpemVvZihzdHJ1Y3QgZGlyX3RhYmxlX3Nsb3QpO1xuZnMvamZzL2pmc19kdHJlZS5jOjQzMTpcdHBhZ2Vfb2Zmc2V0ID0gb2Zmc2V0IFx1MDAyNiAoUFNJWkUgLSAxKTtcbmZzL2pmcy9qZnNfZHRyZWUuYzo0MzI6XHRibGtubyA9ICgob2Zmc2V0ICYjNDM7IDEpIFx1MDAzZVx1MDAzZSBMMlBTSVpFKSBcdTAwM2NcdTAwM2Mgc2JpLVx1MDAzZWwybmJwZXJwYWdlO1xuZnMvamZzL2pmc19kdHJlZS5jLTQzMy1cdGlmIChwYWdlX29mZnNldCA9PSAwKSB7XG4tLVxuZnMvamZzL2pmc19kdHJlZS5jLTQ0MS1cdFx0fVxuZnMvamZzL2pmc19kdHJlZS5jOjQ0MjpcdFx0aXAtXHUwMDNlaV9zaXplICYjNDM7PSBQU0laRTtcbmZzL2pmcy9qZnNfZHRyZWUuYy00NDMtXG5mcy9qZnMvamZzX2R0cmVlLmMtNDQ0LVx0XHRpZiAoKG1wID0gZ2V0X2luZGV4X3BhZ2UoaXAsIGJsa25vKSkpXG5mcy9qZnMvamZzX2R0cmVlLmM6NDQ1Olx0XHRcdG1lbXNldChtcC1cdTAwM2VkYXRhLCAwLCBQU0laRSk7XHQvKiBKdXN0IGxvb2tzIGJldHRlciAqL1xuZnMvamZzL2pmc19kdHJlZS5jLTQ0Ni1cdFx0ZWxzZVxuLS1cbmZzL2pmcy9qZnNfZHRyZWUuYz05MjM9c3RhdGljIGludCBkdFNwbGl0VXAodGlkX3QgdGlkLFxuLS1cbmZzL2pmcy9qZnNfZHRyZWUuYy0xMDEzLVx0eHNpemUgPSB4bGVuIFx1MDAzY1x1MDAzYyBzYmktXHUwMDNlbDJic2l6ZTtcbmZzL2pmcy9qZnNfZHRyZWUuYzoxMDE0Olx0aWYgKHhzaXplIFx1MDAzYyBQU0laRSkge1xuZnMvamZzL2pmc19kdHJlZS5jLTEwMTUtXHRcdHhhZGRyID0gYWRkcmVzc1BYRChweGQpO1xuLS1cbmZzL2pmcy9qZnNfZHRyZWUuYy0xMDk2LVx0aWYgKCFET19JTkRFWChpcCkpXG5mcy9qZnMvamZzX2R0cmVlLmM6MTA5NzpcdFx0aXAtXHUwMDNlaV9zaXplICYjNDM7PSBQU0laRTtcbmZzL2pmcy9qZnNfZHRyZWUuYy0xMDk4LVxuLS1cbmZzL2pmcy9qZnNfZHRyZWUuYy0xMTMwLVx0XHQvKiBnZXQgdGhlIHBhcmVudCBwYWdlIFx1MDAzY3NwXHUwMDNlICovXG5mcy9qZnMvamZzX2R0cmVlLmM6MTEzMTpcdFx0RFRfR0VUUEFHRShpcCwgcGFyZW50LVx1MDAzZWJuLCBzbXAsIFBTSVpFLCBzcCwgcmMpO1xuZnMvamZzL2pmc19kdHJlZS5jLTExMzItXHRcdGlmIChyYykge1xuLS1cbmZzL2pmcy9qZnNfZHRyZWUuYz0xMzIzPXN0YXRpYyBpbnQgZHRTcGxpdFBhZ2UodGlkX3QgdGlkLCBzdHJ1Y3QgaW5vZGUgKmlwLCBzdHJ1Y3QgZHRzcGxpdCAqIHNwbGl0LFxuLS1cbmZzL2pmcy9qZnNfZHRyZWUuYy0xMzU5LVx0cmJuID0gYWRkcmVzc1BYRChweGQpO1xuZnMvamZzL2pmc19kdHJlZS5jOjEzNjA6XHRybXAgPSBnZXRfbWV0YXBhZ2UoaXAsIHJibiwgUFNJWkUsIDEpO1xuZnMvamZzL2pmc19kdHJlZS5jLTEzNjEtXHRpZiAocm1wID09IE5VTEwpXG4tLVxuZnMvamZzL2pmc19kdHJlZS5jLTE0MTYtXG5mcy9qZnMvamZzX2R0cmVlLmM6MTQxNzpcdG4gPSBQU0laRSBcdTAwM2VcdTAwM2UgTDJEVFNMT1RTSVpFO1xuZnMvamZzL2pmc19kdHJlZS5jLTE0MTgtXHRycC1cdTAwM2VoZWFkZXIubWF4c2xvdCA9IG47XG4tLVxuZnMvamZzL2pmc19kdHJlZS5jLTE0NjctXHRpZiAobmV4dGJuICE9IDApIHtcbmZzL2pmcy9qZnNfZHRyZWUuYzoxNDY4Olx0XHREVF9HRVRQQUdFKGlwLCBuZXh0Ym4sIG1wLCBQU0laRSwgcCwgcmMpO1xuZnMvamZzL2pmc19kdHJlZS5jLTE0NjktXHRcdGlmIChyYykge1xuLS1cbmZzL2pmcy9qZnNfZHRyZWUuYy0xNDk3LVx0c2tpcCA9IHNwbGl0LVx1MDAzZWluZGV4O1xuZnMvamZzL2pmc19kdHJlZS5jOjE0OTg6XHRoYWxmID0gKFBTSVpFIFx1MDAzZVx1MDAzZSBMMkRUU0xPVFNJWkUpIFx1MDAzZVx1MDAzZSAxO1x0Lyogc3dhZyAqL1xuZnMvamZzL2pmc19kdHJlZS5jLTE0OTktXHRsZWZ0ID0gMDtcbi0tXG5mcy9qZnMvamZzX2R0cmVlLmM9MTYzNT1zdGF0aWMgaW50IGR0RXh0ZW5kUGFnZSh0aWRfdCB0aWQsXG4tLVxuZnMvamZzL2pmc19kdHJlZS5jLTE2NjUtXHRwYXJlbnQgPSBCVF9QT1AoYnRzdGFjayk7XG5mcy9qZnMvamZzX2R0cmVlLmM6MTY2NjpcdERUX0dFVFBBR0UoaXAsIHBhcmVudC1cdTAwM2VibiwgcG1wLCBQU0laRSwgcHAsIHJjKTtcbmZzL2pmcy9qZnNfZHRyZWUuYy0xNjY3LVx0aWYgKHJjKVxuLS1cbmZzL2pmcy9qZnNfZHRyZWUuYz0yMDc1PWludCBkdERlbGV0ZSh0aWRfdCB0aWQsXG4tLVxuZnMvamZzL2pmc19kdHJlZS5jLTIxMjMtXHRcdFx0XHREVF9HRVRQQUdFKGlwLCBsZTY0X3RvX2NwdShwLVx1MDAzZWhlYWRlci5uZXh0KSxcbmZzL2pmcy9qZnNfZHRyZWUuYzoyMTI0Olx0XHRcdFx0XHQgICBubXAsIFBTSVpFLCBucCwgcmMpO1xuZnMvamZzL2pmc19kdHJlZS5jLTIxMjUtXHRcdFx0XHRpZiAocmMpXG4tLVxuZnMvamZzL2pmc19kdHJlZS5jPTIyMzA9c3RhdGljIGludCBkdERlbGV0ZVVwKHRpZF90IHRpZCwgc3RydWN0IGlub2RlICppcCxcbi0tXG5mcy9qZnMvamZzX2R0cmVlLmMtMjMwMC1cdFx0LyogcGluIHRoZSBwYXJlbnQgcGFnZSBcdTAwM2NzcFx1MDAzZSAqL1xuZnMvamZzL2pmc19kdHJlZS5jOjIzMDE6XHRcdERUX0dFVFBBR0UoaXAsIHBhcmVudC1cdTAwM2VibiwgbXAsIFBTSVpFLCBwLCByYyk7XG5mcy9qZnMvamZzX2R0cmVlLmMtMjMwMi1cdFx0aWYgKHJjKVxuLS1cbmZzL2pmcy9qZnNfZHRyZWUuYy0yNDI1LVx0aWYgKCFET19JTkRFWChpcCkpXG5mcy9qZnMvamZzX2R0cmVlLmM6MjQyNjpcdFx0aXAtXHUwMDNlaV9zaXplIC09IFBTSVpFO1xuZnMvamZzL2pmc19kdHJlZS5jLTI0MjctXG4tLVxuZnMvamZzL2pmc19kdHJlZS5jPTI0NDI9c3RhdGljIGludCBkdFJlbGluayh0aWRfdCB0aWQsIHN0cnVjdCBpbm9kZSAqaXAsIGR0cGFnZV90ICogcClcbi0tXG5mcy9qZnMvamZzX2R0cmVlLmMtMjQ1NS1cdGlmIChuZXh0Ym4gIT0gMCkge1xuZnMvamZzL2pmc19kdHJlZS5jOjI0NTY6XHRcdERUX0dFVFBBR0UoaXAsIG5leHRibiwgbXAsIFBTSVpFLCBwLCByYyk7XG5mcy9qZnMvamZzX2R0cmVlLmMtMjQ1Ny1cdFx0aWYgKHJjKVxuLS1cbmZzL2pmcy9qZnNfZHRyZWUuYy0yNDg0LVx0aWYgKHByZXZibiAhPSAwKSB7XG5mcy9qZnMvamZzX2R0cmVlLmM6MjQ4NTpcdFx0RFRfR0VUUEFHRShpcCwgcHJldmJuLCBtcCwgUFNJWkUsIHAsIHJjKTtcbmZzL2pmcy9qZnNfZHRyZWUuYy0yNDg2LVx0XHRpZiAocmMpXG4tLVxuZnMvamZzL2pmc19kdHJlZS5jPTI2MTM9c3RhdGljIGludCBhZGRfbWlzc2luZ19pbmRpY2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHM2NCBibilcbi0tXG5mcy9qZnMvamZzX2R0cmVlLmMtMjYyOC1cbmZzL2pmcy9qZnNfZHRyZWUuYzoyNjI5Olx0RFRfR0VUUEFHRShpbm9kZSwgYm4sIG1wLCBQU0laRSwgcCwgcmMpO1xuZnMvamZzL2pmc19kdHJlZS5jLTI2MzAtXG4tLVxuZnMvamZzL2pmc19kdHJlZS5jPTI3MTE9aW50IGpmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcbi0tXG5mcy9qZnMvamZzX2R0cmVlLmMtMjc5My1cdFx0XHRpbmRleCA9IGRpcnRhYl9zbG90LnNsb3Q7XG5mcy9qZnMvamZzX2R0cmVlLmM6Mjc5NDpcdFx0XHREVF9HRVRQQUdFKGlwLCBibiwgbXAsIFBTSVpFLCBwLCByYyk7XG5mcy9qZnMvamZzX2R0cmVlLmMtMjc5NS1cdFx0XHRpZiAocmMpIHtcbi0tXG5mcy9qZnMvamZzX2R0cmVlLmMtMzAzNy1cbmZzL2pmcy9qZnNfZHRyZWUuYzozMDM4Olx0XHREVF9HRVRQQUdFKGlwLCBibiwgbXAsIFBTSVpFLCBwLCByYyk7XG5mcy9qZnMvamZzX2R0cmVlLmMtMzAzOS1cdFx0aWYgKHJjKSB7XG4tLVxuZnMvamZzL2pmc19kdHJlZS5jPTMxMzY9c3RhdGljIGludCBkdFJlYWROZXh0KHN0cnVjdCBpbm9kZSAqaXAsIGxvZmZfdCAqIG9mZnNldCxcbi0tXG5mcy9qZnMvamZzX2R0cmVlLmMtMzIxOS1cdGJuID0gcGFyZW50LVx1MDAzZWJuO1xuZnMvamZzL2pmc19kdHJlZS5jOjMyMjA6XHREVF9HRVRQQUdFKGlwLCBibiwgbXAsIFBTSVpFLCBwLCByYyk7XG5mcy9qZnMvamZzX2R0cmVlLmMtMzIyMS1cdGlmIChyYylcbi0tXG5mcy9qZnMvamZzX2R0cmVlLmMtMzI0MC1cdFx0LyogZ2V0IG5leHQgcGFyZW50IHBhZ2UgKi9cbmZzL2pmcy9qZnNfZHRyZWUuYzozMjQxOlx0XHREVF9HRVRQQUdFKGlwLCBibiwgbXAsIFBTSVpFLCBwLCByYyk7XG5mcy9qZnMvamZzX2R0cmVlLmMtMzI0Mi1cdFx0aWYgKHJjKVxuLS1cbmZzL2pmcy9qZnNfZHRyZWUuYy0zMjYwLSAgICAgIGM6XG5mcy9qZnMvamZzX2R0cmVlLmM6MzI2MTpcdERUX0dFVFBBR0UoaXAsIGJuLCBtcCwgUFNJWkUsIHAsIHJjKTtcbmZzL2pmcy9qZnNfZHRyZWUuYy0zMjYyLVx0aWYgKHJjKVxuLS1cbmZzL2pmcy9qZnNfZHRyZWUuYy0zMjgxLVx0XHQvKiBnZXQgbmV4dCBsZWFmIHBhZ2UgKi9cbmZzL2pmcy9qZnNfZHRyZWUuYzozMjgyOlx0XHREVF9HRVRQQUdFKGlwLCBibiwgbXAsIFBTSVpFLCBwLCByYyk7XG5mcy9qZnMvamZzX2R0cmVlLmMtMzI4My1cdFx0aWYgKHJjKVxuLS1cbmZzL2pmcy9qZnNfZHRyZWUuYz00Mzg0PWJvb2wgY2hlY2tfZHRwYWdlKGR0cGFnZV90ICpwKVxuLS1cbmZzL2pmcy9qZnNfZHRyZWUuYy00Mzg2LVx0REVDTEFSRV9CSVRNQVAoYml0bWFwLCBEVFBBR0VNQVhTTE9UKSA9IHswfTtcbmZzL2pmcy9qZnNfZHRyZWUuYzo0Mzg3Olx0Y29uc3QgaW50IHN0YmxzaXplID0gKChQU0laRSBcdTAwM2VcdTAwM2UgTDJEVFNMT1RTSVpFKSAmIzQzOyAzMSkgXHUwMDNlXHUwMDNlIEwyRFRTTE9UU0laRTtcbmZzL2pmcy9qZnNfZHRyZWUuYy00Mzg4LVx0aW50IGk7XG4tLVxuZnMvamZzL2pmc19maWxzeXMuaC04MS0vKiBwYWdlIHNpemUgKi9cbmZzL2pmcy9qZnNfZmlsc3lzLmg6ODI6I2lmZGVmIFBTSVpFXG5mcy9qZnMvamZzX2ZpbHN5cy5oOjgzOiN1bmRlZiBQU0laRVxuZnMvamZzL2pmc19maWxzeXMuaC04NC0jZW5kaWZcbmZzL2pmcy9qZnNfZmlsc3lzLmg6ODU6I2RlZmluZVx0UFNJWkVcdFx0NDA5Nlx0LyogcGFnZSBzaXplIChpbiBieXRlKSAqL1xuZnMvamZzL2pmc19maWxzeXMuaDo4NjojZGVmaW5lXHRMMlBTSVpFXHRcdDEyXHQvKiBsb2cyKFBTSVpFKSAqL1xuZnMvamZzL2pmc19maWxzeXMuaC04Ny0jZGVmaW5lXHRQT0ZGU0VUXHRcdDQwOTVcdC8qIG9mZnNldCB3aXRoaW4gcGFnZSAqL1xuLS1cbmZzL2pmcy9qZnNfZmlsc3lzLmgtODktLyogYnVmZmVyIHBhZ2Ugc2l6ZSAqL1xuZnMvamZzL2pmc19maWxzeXMuaDo5MDojZGVmaW5lIEJQU0laRVx0UFNJWkVcbmZzL2pmcy9qZnNfZmlsc3lzLmgtOTEtXG4tLVxuZnMvamZzL2pmc19maWxzeXMuaC05NC0gKlxuZnMvamZzL2pmc19maWxzeXMuaDo5NTogKiBQU0laRSBcdTAwM2U9IGZpbGUgc3lzdGVtIGJsb2NrIHNpemUgXHUwMDNlPSBQQlNJWkUgXHUwMDNlPSBESVNJWkVcbmZzL2pmcy9qZnNfZmlsc3lzLmgtOTYtICovXG4tLVxuZnMvamZzL2pmc19maWxzeXMuaC0xNDQtLyogc2l6ZSBpbiBieXRlIC1cdTAwM2UgbGFzdCBwYWdlIG51bWJlciAqL1xuZnMvamZzL2pmc19maWxzeXMuaDoxNDU6I2RlZmluZVx0U0laRTJQTihzaXplKVx0KCAoKHM2NCkoKHNpemUpIC0gMSkpIFx1MDAzZVx1MDAzZSAoTDJQU0laRSkgKVxuZnMvamZzL2pmc19maWxzeXMuaC0xNDYtLyogc2l6ZSBpbiBieXRlIC1cdTAwM2UgbGFzdCBmaWxlIHN5c3RlbSBibG9jayBudW1iZXIgKi9cbi0tXG5mcy9qZnMvamZzX2ZpbHN5cy5oLTE2Ny0gKi9cbmZzL2pmcy9qZnNfZmlsc3lzLmg6MTY4OiNkZWZpbmUgU0laRV9PRl9TVVBFUlx0UFNJWkVcbmZzL2pmcy9qZnNfZmlsc3lzLmgtMTY5LVxuLS1cbmZzL2pmcy9qZnNfZmlsc3lzLmgtMTcyLSAqL1xuZnMvamZzL2pmc19maWxzeXMuaDoxNzM6I2RlZmluZSBTSVpFX09GX0FHX1RBQkxFXHRQU0laRVxuZnMvamZzL2pmc19maWxzeXMuaC0xNzQtXG4tLVxuZnMvamZzL2pmc19maWxzeXMuaC0xNzgtICovXG5mcy9qZnMvamZzX2ZpbHN5cy5oOjE3OTojZGVmaW5lIFNJWkVfT0ZfTUFQX1BBR0VcdFBTSVpFXG5mcy9qZnMvamZzX2ZpbHN5cy5oLTE4MC1cbi0tXG5mcy9qZnMvamZzX2ZpbHN5cy5oLTI1Ni0jZGVmaW5lIEpGU19OQU1FX01BWFx0MjU1XG5mcy9qZnMvamZzX2ZpbHN5cy5oOjI1NzojZGVmaW5lIEpGU19QQVRIX01BWFx0QlBTSVpFXG5mcy9qZnMvamZzX2ZpbHN5cy5oLTI1OC1cbi0tXG5mcy9qZnMvamZzX2ltYXAuYz05ND1pbnQgZGlNb3VudChzdHJ1Y3QgaW5vZGUgKmlwaW1hcClcbi0tXG5mcy9qZnMvamZzX2ltYXAuYy0xMTItXHRcdFx0ICAgSU1BUEJMS05PIFx1MDAzY1x1MDAzYyBKRlNfU0JJKGlwaW1hcC1cdTAwM2VpX3NiKS1cdTAwM2VsMm5icGVycGFnZSxcbmZzL2pmcy9qZnNfaW1hcC5jOjExMzpcdFx0XHQgICBQU0laRSwgMCk7XG5mcy9qZnMvamZzX2ltYXAuYy0xMTQtXHRpZiAobXAgPT0gTlVMTCkge1xuLS1cbmZzL2pmcy9qZnNfaW1hcC5jPTIwNT1pbnQgZGlTeW5jKHN0cnVjdCBpbm9kZSAqaXBpbWFwKVxuLS1cbmZzL2pmcy9qZnNfaW1hcC5jLTIxNy1cdFx0XHQgIElNQVBCTEtOTyBcdTAwM2NcdTAwM2MgSkZTX1NCSShpcGltYXAtXHUwMDNlaV9zYiktXHUwMDNlbDJuYnBlcnBhZ2UsXG5mcy9qZnMvamZzX2ltYXAuYzoyMTg6XHRcdFx0ICBQU0laRSwgMCk7XG5mcy9qZnMvamZzX2ltYXAuYy0yMTktXHRpZiAobXAgPT0gTlVMTCkge1xuLS1cbmZzL2pmcy9qZnNfaW1hcC5jPTI5MD1pbnQgZGlSZWFkKHN0cnVjdCBpbm9kZSAqaXApXG4tLVxuZnMvamZzL2pmc19pbWFwLmMtMzY2LVx0LyogcmVhZCB0aGUgcGFnZSBvZiBkaXNrIGlub2RlICovXG5mcy9qZnMvamZzX2ltYXAuYzozNjc6XHRtcCA9IHJlYWRfbWV0YXBhZ2UoaXBpbWFwLCBwYWdlbm8gXHUwMDNjXHUwMDNjIHNiaS1cdTAwM2VsMm5icGVycGFnZSwgUFNJWkUsIDEpO1xuZnMvamZzL2pmc19pbWFwLmMtMzY4LVx0aWYgKCFtcCkge1xuLS1cbmZzL2pmcy9qZnNfaW1hcC5jPTQxOD1zdHJ1Y3QgaW5vZGUgKmRpUmVhZFNwZWNpYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW5vX3QgaW51bSwgaW50IHNlY29uZGFyeSlcbi0tXG5mcy9qZnMvamZzX2ltYXAuYy00MzUtXHR9IGVsc2Uge1xuZnMvamZzL2pmc19pbWFwLmM6NDM2Olx0XHRhZGRyZXNzID0gQUlUQkxfT0ZGIFx1MDAzZVx1MDAzZSBMMlBTSVpFO1xuZnMvamZzL2pmc19pbWFwLmMtNDM3LVx0XHRKRlNfSVAoaXApLVx1MDAzZWlwaW1hcCA9IHNiaS1cdTAwM2VpcGFpbWFwO1xuLS1cbmZzL2pmcy9qZnNfaW1hcC5jLTQ0Ni1cdC8qIHJlYWQgdGhlIHBhZ2Ugb2YgZml4ZWQgZGlzayBpbm9kZSAoQUlUKSBpbiByYXcgbW9kZSAqL1xuZnMvamZzL2pmc19pbWFwLmM6NDQ3Olx0bXAgPSByZWFkX21ldGFwYWdlKGlwLCBhZGRyZXNzIFx1MDAzY1x1MDAzYyBzYmktXHUwMDNlbDJuYnBlcnBhZ2UsIFBTSVpFLCAxKTtcbmZzL2pmcy9qZnNfaW1hcC5jLTQ0OC1cdGlmIChtcCA9PSBOVUxMKSB7XG4tLVxuZnMvamZzL2pmc19pbWFwLmM9NTAwPXZvaWQgZGlXcml0ZVNwZWNpYWwoc3RydWN0IGlub2RlICppcCwgaW50IHNlY29uZGFyeSlcbi0tXG5mcy9qZnMvamZzX2ltYXAuYy01MTAtXHRlbHNlXG5mcy9qZnMvamZzX2ltYXAuYzo1MTE6XHRcdGFkZHJlc3MgPSBBSVRCTF9PRkYgXHUwMDNlXHUwMDNlIEwyUFNJWkU7XG5mcy9qZnMvamZzX2ltYXAuYy01MTItXG4tLVxuZnMvamZzL2pmc19pbWFwLmMtNTE3LVx0LyogcmVhZCB0aGUgcGFnZSBvZiBmaXhlZCBkaXNrIGlub2RlIChBSVQpIGluIHJhdyBtb2RlICovXG5mcy9qZnMvamZzX2ltYXAuYzo1MTg6XHRtcCA9IHJlYWRfbWV0YXBhZ2UoaXAsIGFkZHJlc3MgXHUwMDNjXHUwMDNjIHNiaS1cdTAwM2VsMm5icGVycGFnZSwgUFNJWkUsIDEpO1xuZnMvamZzL2pmc19pbWFwLmMtNTE5LVx0aWYgKG1wID09IE5VTEwpIHtcbi0tXG5mcy9qZnMvamZzX2ltYXAuYz01ODE9aW50IGRpV3JpdGUodGlkX3QgdGlkLCBzdHJ1Y3QgaW5vZGUgKmlwKVxuLS1cbmZzL2pmcy9qZnNfaW1hcC5jLTYzOC0gICAgICByZXRyeTpcbmZzL2pmcy9qZnNfaW1hcC5jOjYzOTpcdG1wID0gcmVhZF9tZXRhcGFnZShpcGltYXAsIHBhZ2VubyBcdTAwM2NcdTAwM2Mgc2JpLVx1MDAzZWwybmJwZXJwYWdlLCBQU0laRSwgMSk7XG5mcy9qZnMvamZzX2ltYXAuYy02NDAtXHRpZiAoIW1wKVxuLS1cbmZzL2pmcy9qZnNfaW1hcC5jPTIxNTU9c3RhdGljIGludCBkaU5ld0V4dChzdHJ1Y3QgaW5vbWFwICogaW1hcCwgc3RydWN0IGlhZyAqIGlhZ3AsIGludCBleHRubylcbi0tXG5mcy9qZnMvamZzX2ltYXAuYy0yMjc0LVx0XHQgKi9cbmZzL2pmcy9qZnNfaW1hcC5jOjIyNzU6XHRcdGRtcCA9IGdldF9tZXRhcGFnZShpcGltYXAsIGJsa25vICYjNDM7IGksIFBTSVpFLCAxKTtcbmZzL2pmcy9qZnNfaW1hcC5jLTIyNzYtXHRcdGlmIChkbXAgPT0gTlVMTCkge1xuLS1cbmZzL2pmcy9qZnNfaW1hcC5jPTI0NDA9ZGlOZXdJQUcoc3RydWN0IGlub21hcCAqIGltYXAsIGludCAqaWFnbm9wLCBpbnQgYWdubywgc3RydWN0IG1ldGFwYWdlICoqIG1wcClcbi0tXG5mcy9qZnMvamZzX2ltYXAuYy0yNDc4LVxuZnMvamZzL2pmc19pbWFwLmM6MjQ3OTpcdFx0aWYgKGlwaW1hcC1cdTAwM2VpX3NpemUgXHUwMDNlXHUwMDNlIEwyUFNJWkUgIT0gaW1hcC1cdTAwM2VpbV9uZXh0aWFnICYjNDM7IDEpIHtcbmZzL2pmcy9qZnNfaW1hcC5jLTI0ODAtXHRcdFx0SVdSSVRFX1VOTE9DSyhpcGltYXApO1xuLS1cbmZzL2pmcy9qZnNfaW1hcC5jLTI1NDAtXHRcdC8qIHVwZGF0ZSB0aGUgaW5vZGUgbWFwJiMzOTtzIGlub2RlIHRvIHJlZmxlY3QgdGhlIGV4dGVuc2lvbiAqL1xuZnMvamZzL2pmc19pbWFwLmM6MjU0MTpcdFx0aXBpbWFwLVx1MDAzZWlfc2l6ZSAmIzQzOz0gUFNJWkU7XG5mcy9qZnMvamZzX2ltYXAuYzoyNTQyOlx0XHRpbm9kZV9hZGRfYnl0ZXMoaXBpbWFwLCBQU0laRSk7XG5mcy9qZnMvamZzX2ltYXAuYy0yNTQzLVxuZnMvamZzL2pmc19pbWFwLmMtMjU0NC1cdFx0LyogYXNzaWduIGEgYnVmZmVyIGZvciB0aGUgcGFnZSAqL1xuZnMvamZzL2pmc19pbWFwLmM6MjU0NTpcdFx0bXAgPSBnZXRfbWV0YXBhZ2UoaXBpbWFwLCBibGtubywgUFNJWkUsIDApO1xuZnMvamZzL2pmc19pbWFwLmMtMjU0Ni1cdFx0aWYgKCFtcCkge1xuLS1cbmZzL2pmcy9qZnNfaW1hcC5jLTI1NTAtXHRcdFx0ICovXG5mcy9qZnMvamZzX2ltYXAuYzoyNTUxOlx0XHRcdHh0VHJ1bmNhdGUodGlkLCBpcGltYXAsIGlwaW1hcC1cdTAwM2VpX3NpemUgLSBQU0laRSxcbmZzL2pmcy9qZnNfaW1hcC5jLTI1NTItXHRcdFx0XHQgICBDT01NSVRfUFdNQVApO1xuLS1cbmZzL2pmcy9qZnNfaW1hcC5jPTI2NjM9c3RhdGljIGludCBkaUlBR1JlYWQoc3RydWN0IGlub21hcCAqIGltYXAsIGludCBpYWdubywgc3RydWN0IG1ldGFwYWdlICoqIG1wcClcbi0tXG5mcy9qZnMvamZzX2ltYXAuYy0yNjcxLVx0LyogcmVhZCB0aGUgaWFnLiAqL1xuZnMvamZzL2pmc19pbWFwLmM6MjY3MjpcdCptcHAgPSByZWFkX21ldGFwYWdlKGlwaW1hcCwgYmxrbm8sIFBTSVpFLCAwKTtcbmZzL2pmcy9qZnNfaW1hcC5jLTI2NzMtXHRpZiAoKm1wcCA9PSBOVUxMKSB7XG4tLVxuZnMvamZzL2pmc19pbWFwLmM9Mjk4Mj1zdGF0aWMgdm9pZCBkdXBsaWNhdGVJWHRyZWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgczY0IGJsa25vLFxuLS1cbmZzL2pmcy9qZnNfaW1hcC5jLTMwMTYtXHQvKiB1cGRhdGUgdGhlIGlub2RlIG1hcCYjMzk7cyBpbm9kZSB0byByZWZsZWN0IHRoZSBleHRlbnNpb24gKi9cbmZzL2pmcy9qZnNfaW1hcC5jOjMwMTc6XHRpcC1cdTAwM2VpX3NpemUgJiM0Mzs9IFBTSVpFO1xuZnMvamZzL2pmc19pbWFwLmM6MzAxODpcdGlub2RlX2FkZF9ieXRlcyhpcCwgUFNJWkUpO1xuZnMvamZzL2pmc19pbWFwLmMtMzAxOS1cdHR4Q29tbWl0KHRpZCwgMSwgXHUwMDI2aXAsIENPTU1JVF9GT1JDRSk7XG4tLVxuZnMvamZzL2pmc19pbWFwLmgtMjItXG5mcy9qZnMvamZzX2ltYXAuaDoyMzojZGVmaW5lIEFNQVBTSVpFXHQ1MTJcdC8qIGJ5dGVzIGluIHRoZSBJQUcgYWxsb2NhdGlvbiBtYXBzICovXG5mcy9qZnMvamZzX2ltYXAuaDoyNDojZGVmaW5lIFNNQVBTSVpFXHQxNlx0LyogYnl0ZXMgaW4gdGhlIElBRyBzdW1tYXJ5IG1hcHMgKi9cbmZzL2pmcy9qZnNfaW1hcC5oLTI1LVxuLS1cbmZzL2pmcy9qZnNfbG9nbWdyLmM9NzQ9c3RhdGljIERFRklORV9TUElOTE9DSyhsb2dfcmVkcml2ZV9sb2NrKTtcbi0tXG5mcy9qZnMvamZzX2xvZ21nci5jLTkwLSAqL1xuZnMvamZzL2pmc19sb2dtZ3IuYzo5MTojZGVmaW5lXHRMT0dTWU5DX0RFTFRBKGxvZ3NpemUpXHRcdG1pbigobG9nc2l6ZSkvOCwgMTI4KkxPR1BTSVpFKVxuZnMvamZzL2pmc19sb2dtZ3IuYy05Mi0jZGVmaW5lXHRMT0dTWU5DX0JBUlJJRVIobG9nc2l6ZSlcdCgobG9nc2l6ZSkvNClcbmZzL2pmcy9qZnNfbG9nbWdyLmMtOTMtLypcbmZzL2pmcy9qZnNfbG9nbWdyLmM6OTQ6I2RlZmluZVx0TE9HU1lOQ19ERUxUQShsb2dzaXplKVx0XHRtaW4oKGxvZ3NpemUpLzQsIDI1NipMT0dQU0laRSlcbmZzL2pmcy9qZnNfbG9nbWdyLmMtOTUtI2RlZmluZVx0TE9HU1lOQ19CQVJSSUVSKGxvZ3NpemUpXHQoKGxvZ3NpemUpLzIpXG4tLVxuZnMvamZzL2pmc19sb2dtZ3IuYz0zNDI9bG1Xcml0ZVJlY29yZChzdHJ1Y3QgamZzX2xvZyAqIGxvZywgc3RydWN0IHRibG9jayAqIHRibGssIHN0cnVjdCBscmQgKiBscmQsXG4tLVxuZnMvamZzL2pmc19sb2dtZ3IuYy00MDMtXHRcdC8qIGlzIHBhZ2UgZnVsbCA/ICovXG5mcy9qZnMvamZzX2xvZ21nci5jOjQwNDpcdFx0aWYgKGRzdG9mZnNldCBcdTAwM2U9IExPR1BTSVpFIC0gTE9HUFRMUlNJWkUpIHtcbmZzL2pmcy9qZnNfbG9nbWdyLmMtNDA1LVx0XHRcdC8qIHBhZ2UgYmVjb21lIGZ1bGw6IG1vdmUgb24gdG8gbmV4dCBwYWdlICovXG4tLVxuZnMvamZzL2pmc19sb2dtZ3IuYy00MTktXHRcdHdoaWxlIChzcmNsZW4gXHUwMDNlIDApIHtcbmZzL2pmcy9qZnNfbG9nbWdyLmM6NDIwOlx0XHRcdGZyZWVzcGFjZSA9IChMT0dQU0laRSAtIExPR1BUTFJTSVpFKSAtIGRzdG9mZnNldDtcbmZzL2pmcy9qZnNfbG9nbWdyLmMtNDIxLVx0XHRcdG5ieXRlcyA9IG1pbihmcmVlc3BhY2UsIHNyY2xlbik7XG4tLVxuZnMvamZzL2pmc19sb2dtZ3IuYy00MjYtXHRcdFx0LyogaXMgcGFnZSBub3QgZnVsbCA/ICovXG5mcy9qZnMvamZzX2xvZ21nci5jOjQyNzpcdFx0XHRpZiAoZHN0b2Zmc2V0IFx1MDAzYyBMT0dQU0laRSAtIExPR1BUTFJTSVpFKVxuZnMvamZzL2pmc19sb2dtZ3IuYy00MjgtXHRcdFx0XHRicmVhaztcbi0tXG5mcy9qZnMvamZzX2xvZ21nci5jLTQ2Ny1cdHdoaWxlIChzcmNsZW4gXHUwMDNlIDApIHtcbmZzL2pmcy9qZnNfbG9nbWdyLmM6NDY4Olx0XHRmcmVlc3BhY2UgPSAoTE9HUFNJWkUgLSBMT0dQVExSU0laRSkgLSBkc3RvZmZzZXQ7XG5mcy9qZnMvamZzX2xvZ21nci5jLTQ2OS1cdFx0bmJ5dGVzID0gbWluKGZyZWVzcGFjZSwgc3JjbGVuKTtcbi0tXG5mcy9qZnMvamZzX2xvZ21nci5jLTQ4Ni1cdFx0YnAtXHUwMDNlbF9lb3IgPSBkc3RvZmZzZXQ7XG5mcy9qZnMvamZzX2xvZ21nci5jOjQ4NzpcdFx0bHNuID0gKGxvZy1cdTAwM2VwYWdlIFx1MDAzY1x1MDAzYyBMMkxPR1BTSVpFKSAmIzQzOyBkc3RvZmZzZXQ7XG5mcy9qZnMvamZzX2xvZ21nci5jLTQ4OC1cbi0tXG5mcy9qZnMvamZzX2xvZ21nci5jLTUyMS1cdFx0LyogcGFnZSBub3QgZnVsbCA/ICovXG5mcy9qZnMvamZzX2xvZ21nci5jOjUyMjpcdFx0aWYgKGRzdG9mZnNldCBcdTAwM2MgTE9HUFNJWkUgLSBMT0dQVExSU0laRSlcbmZzL2pmcy9qZnNfbG9nbWdyLmMtNTIzLVx0XHRcdHJldHVybiBsc247XG4tLVxuZnMvamZzL2pmc19sb2dtZ3IuYz05MTk9c3RhdGljIGludCBsbUxvZ1N5bmMoc3RydWN0IGpmc19sb2cgKiBsb2csIGludCBoYXJkX3N5bmMpXG4tLVxuZnMvamZzL2pmc19sb2dtZ3IuYy05ODEtXHRtb3JlID0gbWluKGZyZWUgLyAyLCBkZWx0YSk7XG5mcy9qZnMvamZzX2xvZ21nci5jOjk4MjpcdGlmIChtb3JlIFx1MDAzYyAyICogTE9HUFNJWkUpIHtcbmZzL2pmcy9qZnNfbG9nbWdyLmMtOTgzLVx0XHRqZnNfd2FybihcJiMzNDtcXG4gLi4uIExvZyBXcmFwIC4uLiBMb2cgV3JhcCAuLi4gTG9nIFdyYXAgLi4uXFxuXCYjMzQ7KTtcbi0tXG5mcy9qZnMvamZzX2xvZ21nci5jPTExNTI9c3RhdGljIGludCBvcGVuX2lubGluZV9sb2coc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9qZnMvamZzX2xvZ21nci5jLTExNjUtXHRsb2ctXHUwMDNlc2l6ZSA9IGxlbmd0aFBYRChcdTAwMjZKRlNfU0JJKHNiKS1cdTAwM2Vsb2dweGQpIFx1MDAzZVx1MDAzZVxuZnMvamZzL2pmc19sb2dtZ3IuYzoxMTY2Olx0ICAgIChMMkxPR1BTSVpFIC0gc2ItXHUwMDNlc19ibG9ja3NpemVfYml0cyk7XG5mcy9qZnMvamZzX2xvZ21nci5jLTExNjctXHRsb2ctXHUwMDNlbDJic2l6ZSA9IHNiLVx1MDAzZXNfYmxvY2tzaXplX2JpdHM7XG5mcy9qZnMvamZzX2xvZ21nci5jOjExNjg6XHRBU1NFUlQoTDJMT0dQU0laRSBcdTAwM2U9IHNiLVx1MDAzZXNfYmxvY2tzaXplX2JpdHMpO1xuZnMvamZzL2pmc19sb2dtZ3IuYy0xMTY5LVxuLS1cbmZzL2pmcy9qZnNfbG9nbWdyLmM9MTIzNz1pbnQgbG1Mb2dJbml0KHN0cnVjdCBqZnNfbG9nICogbG9nKVxuLS1cbmZzL2pmcy9qZnNfbG9nbWdyLmMtMTI3MC1cdGlmICghdGVzdF9iaXQobG9nX0lOTElORUxPRywgXHUwMDI2bG9nLVx1MDAzZWZsYWcpKVxuZnMvamZzL2pmc19sb2dtZ3IuYzoxMjcxOlx0XHRsb2ctXHUwMDNlbDJic2l6ZSA9IEwyTE9HUFNJWkU7XG5mcy9qZnMvamZzX2xvZ21nci5jLTEyNzItXG4tLVxuZnMvamZzL2pmc19sb2dtZ3IuYy0xMzI0LVxuZnMvamZzL2pmc19sb2dtZ3IuYzoxMzI1Olx0XHRsb2ctXHUwMDNlcGFnZSA9IGxlMzJfdG9fY3B1KGxvZ3N1cGVyLVx1MDAzZWVuZCkgLyBMT0dQU0laRTtcbmZzL2pmcy9qZnNfbG9nbWdyLmM6MTMyNjpcdFx0bG9nLVx1MDAzZWVvciA9IGxlMzJfdG9fY3B1KGxvZ3N1cGVyLVx1MDAzZWVuZCkgLSAoTE9HUFNJWkUgKiBsb2ctXHUwMDNlcGFnZSk7XG5mcy9qZnMvamZzX2xvZ21nci5jLTEzMjctXG4tLVxuZnMvamZzL2pmc19sb2dtZ3IuYy0xMzQ1LVx0XHQvKiBpZiBjdXJyZW50IHBhZ2UgaXMgZnVsbCwgbW92ZSBvbiB0byBuZXh0IHBhZ2UgKi9cbmZzL2pmcy9qZnNfbG9nbWdyLmM6MTM0NjpcdFx0aWYgKGxvZy1cdTAwM2Vlb3IgXHUwMDNlPSBMT0dQU0laRSAtIExPR1BUTFJTSVpFKVxuZnMvamZzL2pmc19sb2dtZ3IuYy0xMzQ3LVx0XHRcdGxtTmV4dFBhZ2UobG9nKTtcbi0tXG5mcy9qZnMvamZzX2xvZ21nci5jLTEzODQtXHQvKiBpbml0aWFsaXplIGxvZ3N5bmMgcGFyYW1ldGVycyAqL1xuZnMvamZzL2pmc19sb2dtZ3IuYzoxMzg1Olx0bG9nLVx1MDAzZWxvZ3NpemUgPSAobG9nLVx1MDAzZXNpemUgLSAyKSBcdTAwM2NcdTAwM2MgTDJMT0dQU0laRTtcbmZzL2pmcy9qZnNfbG9nbWdyLmMtMTM4Ni1cdGxvZy1cdTAwM2Vsc24gPSBsc247XG4tLVxuZnMvamZzL2pmc19sb2dtZ3IuYz0xNzg0PXN0YXRpYyBpbnQgbGJtTG9nSW5pdChzdHJ1Y3QgamZzX2xvZyAqIGxvZylcbi0tXG5mcy9qZnMvamZzX2xvZ21nci5jLTE4MTctXHRcdGJ1ZmZlciA9IHBhZ2VfYWRkcmVzcyhwYWdlKTtcbmZzL2pmcy9qZnNfbG9nbWdyLmM6MTgxODpcdFx0Zm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgXHUwMDNjIFBBR0VfU0laRTsgb2Zmc2V0ICYjNDM7PSBMT0dQU0laRSkge1xuZnMvamZzL2pmc19sb2dtZ3IuYy0xODE5LVx0XHRcdGxidWYgPSBrbWFsbG9jX29iaihzdHJ1Y3QgbGJ1Zik7XG4tLVxuZnMvamZzL2pmc19sb2dtZ3IuYz0xODczPXN0YXRpYyBzdHJ1Y3QgbGJ1ZiAqbGJtQWxsb2NhdGUoc3RydWN0IGpmc19sb2cgKiBsb2csIGludCBwbilcbi0tXG5mcy9qZnMvamZzX2xvZ21nci5jLTE4OTEtXHRicC1cdTAwM2VsX3BuID0gcG47XG5mcy9qZnMvamZzX2xvZ21nci5jOjE4OTI6XHRicC1cdTAwM2VsX2Jsa25vID0gbG9nLVx1MDAzZWJhc2UgJiM0MzsgKHBuIFx1MDAzY1x1MDAzYyAoTDJMT0dQU0laRSAtIGxvZy1cdTAwM2VsMmJzaXplKSk7XG5mcy9qZnMvamZzX2xvZ21nci5jLTE4OTMtXHRicC1cdTAwM2VsX2Nlb3IgPSAwO1xuLS1cbmZzL2pmcy9qZnNfbG9nbWdyLmM9MTk1OT1zdGF0aWMgaW50IGxibVJlYWQoc3RydWN0IGpmc19sb2cgKiBsb2csIGludCBwbiwgc3RydWN0IGxidWYgKiogYnBwKVxuLS1cbmZzL2pmcy9qZnNfbG9nbWdyLmMtMTk3My1cdGJpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3RvciA9IGJwLVx1MDAzZWxfYmxrbm8gXHUwMDNjXHUwMDNjIChsb2ctXHUwMDNlbDJic2l6ZSAtIDkpO1xuZnMvamZzL2pmc19sb2dtZ3IuYzoxOTc0Olx0X19iaW9fYWRkX3BhZ2UoYmlvLCBicC1cdTAwM2VsX3BhZ2UsIExPR1BTSVpFLCBicC1cdTAwM2VsX29mZnNldCk7XG5mcy9qZnMvamZzX2xvZ21nci5jOjE5NzU6XHRCVUdfT04oYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSAhPSBMT0dQU0laRSk7XG5mcy9qZnMvamZzX2xvZ21nci5jLTE5NzYtXG4tLVxuZnMvamZzL2pmc19sb2dtZ3IuYz0yMDA4PXN0YXRpYyB2b2lkIGxibVdyaXRlKHN0cnVjdCBqZnNfbG9nICogbG9nLCBzdHJ1Y3QgbGJ1ZiAqIGJwLCBpbnQgZmxhZyxcbi0tXG5mcy9qZnMvamZzX2xvZ21nci5jLTIwMTctXHRicC1cdTAwM2VsX2Jsa25vID1cbmZzL2pmcy9qZnNfbG9nbWdyLmM6MjAxODpcdCAgICBsb2ctXHUwMDNlYmFzZSAmIzQzOyAoYnAtXHUwMDNlbF9wbiBcdTAwM2NcdTAwM2MgKEwyTE9HUFNJWkUgLSBsb2ctXHUwMDNlbDJic2l6ZSkpO1xuZnMvamZzL2pmc19sb2dtZ3IuYy0yMDE5LVxuLS1cbmZzL2pmcy9qZnNfbG9nbWdyLmM9MjA3Nj1zdGF0aWMgdm9pZCBsYm1EaXJlY3RXcml0ZShzdHJ1Y3QgamZzX2xvZyAqIGxvZywgc3RydWN0IGxidWYgKiBicCwgaW50IGZsYWcpXG4tLVxuZnMvamZzL2pmc19sb2dtZ3IuYy0yMDg3LVx0YnAtXHUwMDNlbF9ibGtubyA9XG5mcy9qZnMvamZzX2xvZ21nci5jOjIwODg6XHQgICAgbG9nLVx1MDAzZWJhc2UgJiM0MzsgKGJwLVx1MDAzZWxfcG4gXHUwMDNjXHUwMDNjIChMMkxPR1BTSVpFIC0gbG9nLVx1MDAzZWwyYnNpemUpKTtcbmZzL2pmcy9qZnNfbG9nbWdyLmMtMjA4OS1cbi0tXG5mcy9qZnMvamZzX2xvZ21nci5jPTIxMDY9c3RhdGljIHZvaWQgbGJtU3RhcnRJTyhzdHJ1Y3QgbGJ1ZiAqIGJwKVxuLS1cbmZzL2pmcy9qZnNfbG9nbWdyLmMtMjExOS1cdGJpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3RvciA9IGJwLVx1MDAzZWxfYmxrbm8gXHUwMDNjXHUwMDNjIChsb2ctXHUwMDNlbDJic2l6ZSAtIDkpO1xuZnMvamZzL2pmc19sb2dtZ3IuYzoyMTIwOlx0X19iaW9fYWRkX3BhZ2UoYmlvLCBicC1cdTAwM2VsX3BhZ2UsIExPR1BTSVpFLCBicC1cdTAwM2VsX29mZnNldCk7XG5mcy9qZnMvamZzX2xvZ21nci5jOjIxMjE6XHRCVUdfT04oYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSAhPSBMT0dQU0laRSk7XG5mcy9qZnMvamZzX2xvZ21nci5jLTIxMjItXG4tLVxuZnMvamZzL2pmc19sb2dtZ3IuYz0yMTY3PXN0YXRpYyB2b2lkIGxibUlPRG9uZShzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuZnMvamZzL2pmc19sb2dtZ3IuYy0yMjE3LVx0bG9nID0gYnAtXHUwMDNlbF9sb2c7XG5mcy9qZnMvamZzX2xvZ21nci5jOjIyMTg6XHRsb2ctXHUwMDNlY2xzbiA9IChicC1cdTAwM2VsX3BuIFx1MDAzY1x1MDAzYyBMMkxPR1BTSVpFKSAmIzQzOyBicC1cdTAwM2VsX2Nlb3I7XG5mcy9qZnMvamZzX2xvZ21nci5jLTIyMTktXG4tLVxuZnMvamZzL2pmc19sb2dtZ3IuYz0yMzQ5PWludCBsbUxvZ0Zvcm1hdChzdHJ1Y3QgamZzX2xvZyAqbG9nLCBzNjQgbG9nQWRkcmVzcywgaW50IGxvZ1NpemUpXG4tLVxuZnMvamZzL2pmc19sb2dtZ3IuYy0yMzkwLVx0bG9nc3VwZXItXHUwMDNlbDJic2l6ZSA9IGNwdV90b19sZTMyKHNiaS1cdTAwM2VsMmJzaXplKTtcbmZzL2pmcy9qZnNfbG9nbWdyLmM6MjM5MTpcdGxvZ3N1cGVyLVx1MDAzZWVuZCA9IGNwdV90b19sZTMyKDIgKiBMT0dQU0laRSAmIzQzOyBMT0dQSERSU0laRSAmIzQzOyBMT0dSRFNJWkUpO1xuZnMvamZzL2pmc19sb2dtZ3IuYy0yMzkyLVxuLS1cbmZzL2pmcy9qZnNfbG9nbWdyLmgtMTgtLyogbG9nIHBhZ2Ugc2l6ZSAqL1xuZnMvamZzL2pmc19sb2dtZ3IuaDoxOTojZGVmaW5lXHRMT0dQU0laRVx0NDA5NlxuZnMvamZzL2pmc19sb2dtZ3IuaDoyMDojZGVmaW5lXHRMMkxPR1BTSVpFXHQxMlxuZnMvamZzL2pmc19sb2dtZ3IuaC0yMS1cbi0tXG5mcy9qZnMvamZzX2xvZ21nci5oPTUzPXN0cnVjdCBsb2dzdXBlciB7XG4tLVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NDQyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEpGUyBNZXRhcGFnZSBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBKRlMgY29kZSBhbmQgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCBoYW5kbGVzIG1ldGFwYWdlcywgcGFydGljdWxhcmx5IGluIHJlbGF0aW9uIHRvIHRoZSBwYWdlIHNpemUuIFJpZ2h0LCBgUFNJWkVgIGlzIGRlZmluZWQgYXMgNDA5NiBpbiBgZnMvamZzL2pmc19maWxzeXMuaGAuIFRoYXQmIzM5O3MgYSBjb25zdGFudC4gSSBrbm93IGBQQUdFX1NJWkVgIG9uIHg4Nl82NCBpcyBhbHNvIDQwOTYuIFRodXMsIG9uIHg4Nl82NCBgUEFHRV9TSVpFID09IFBTSVpFYC4gVGhpcyBtZWFucyB0aGUgYCNpZiBQQUdFX1NJWkUgJmd0OyBQU0laRWAgaXMgZmFsc2UsIGFuZCB0aGVyZWZvcmUgdGhlIGAjZWxzZWAgYnJhbmNoIGNvbnRhaW5pbmcgdGhlIGBpbnNlcnRfbWV0YXBhZ2VgIGZ1bmN0aW9uIHdpbGwgYmUgdXNlZC4KCk5vdywgdGhhdCBgaW5zZXJ0X21ldGFwYWdlYCBmdW5jdGlvbiwgYXMgZGVmaW5lZCBpbiB0aGF0IGAjZWxzZWAgYmxvY2ssIGFsd2F5cyByZXR1cm5zIDAuIFNvLCB0aGUgYGlmIChyZXQpYCBjb25kaXRpb24gdGhhdCBmb2xsb3dzIHdvdWxkIG5ldmVyIGJlIHRydWUgb24geDg2XzY0LiBCdXQgSSYjMzk7dmUgc2VlbiBzeXpib3QgcmVwb3J0cyBmcm9tIHg4Nl82NCwgYXJtNjQsIGFuZCByaXNjdiwgc28gdGhpcyBzZWVtcyB0byBiZSBtb3JlIGNvbXBsZXguCgpBaCwgb24gYXJtNjQsIGl0JiMzOTtzIHBvc3NpYmxlIGZvciBgUEFHRV9TSVpFYCB0byBiZSA2NEssIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiBgUFNJWkVgLiBTbywgaWYgYFBBR0VfU0laRWAgaXMgNjRLLCB0aGUgYCNpZmAgY29uZGl0aW9uIGlzIHRydWUuIFRoYXQgbWVhbnMgdGhlICpvdGhlciogZGVmaW5pdGlvbiBvZiBgaW5zZXJ0X21ldGFwYWdlYCBpcyB1c2VkIOKAkyB0aGUgb25lIHRoYXQgKmNhbiogcmV0dXJuIGAtRU5PTUVNYC4gVGhhdCBtYWtlcyBzZW5zZS4gVGhlIGBtZXRhcGFnZV9yZWFkX2ZvbGlvYCBmdW5jdGlvbiBzZWVtcyB0byBiZSByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgdGhlIGVycm9yIHdoZW4gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMuCgpIYW5nIG9uIGEgc2VjLi4uaXMgdGhhdCB0aGUgb25seSBjb25kaXRpb24/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgUEFHRV9TSVpFICZndDsgUFNJWkVgIGlzIHRoZSBhY3R1YWwgZ292ZXJuaW5nIGZhY3Rvci4gSSBuZWVkIHRvIGxvb2sgaW4gYGZzL2pmcy9qZnNfbWV0YXBhZ2UuY2AgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQQUdFX1NJWkUgXHUwMDNlIFBTSVpFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvamZzL2pmc19tZXRhcGFnZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkyNjQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqUHJpb3JpdGl6aW5nIENvbmRpdGlvbmFsIExvZ2ljIGluIE1ldGFwYWdlIEluc2VydGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGFib3V0IHRvIGNhbGwgYGluc2VydF9tZXRhcGFnZWAsIGJ1dCBiZWZvcmUgSSBkbywgSSByZWFsbHkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgI2lmYCBjb25kaXRpb24uIEl0JiMzOTtzIHRoZSBnYXRla2VlcGVyLCByaWdodD8gV2UgY2FuJiMzOTt0IGp1c3QgYmxpbmRseSBpbnNlcnQgdGhlIG1ldGFwYWdlIGlmIGl0JiMzOTtzIG5vdCB3YXJyYW50ZWQuIFRoYXQgY29uZGl0aW9uIGxpa2VseSBlbmNhcHN1bGF0ZXMgc29tZSBjcnVjaWFsIGxvZ2ljLCBwZXJoYXBzIHJlbGF0ZWQgdG8gdGhlIGNvbnRleHQsIHN0YXRlLCBvciBldmVuIGRhdGEgdmFsaWRpdHkuIElnbm9yaW5nIGl0IGNvdWxkIGxlYWQgdG8gYWxsIHNvcnRzIG9mIGlzc3VlcyDigJMgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24sIGluY29ycmVjdCBkYXRhIHN0cnVjdHVyZXMsIG9yIGV2ZW4gb3V0cmlnaHQgZXJyb3JzLiBXZSYjMzk7dmUgc2VlbiB0aGlzIGhhcHBlbiBiZWZvcmUuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCBjb25kaXRpb24gaXMgKnRydWUqIGFuZCB0aGF0IGl0IHN0aWxsIGhvbGRzIHZhbGlkIHVuZGVyIHRoZSBwcmV2YWlsaW5nIGNvbmRpdGlvbnMuIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJlLWV2YWx1YXRlIHRoYXQgYCNpZmAgc3RhdGVtZW50IGp1c3QgdG8gYmUgc3VyZS4gSSYjMzk7bGwgZXZlbiBjb25zaWRlciBhIGZldyBlZGdlIGNhc2VzIGluIG15IGhlYWQgYXMgYSBzYW5pdHkgY2hlY2suIE5vIHNlbnNlIHRha2luZyBzaG9ydGN1dHMgaGVyZS4gVGhpcyBjcml0aWNhbCBiaXQgb2YgY29uZGl0aW9uYWwgbG9naWMgZGV0ZXJtaW5lcyB0aGUgZW50aXJlIGluc2VydGlvbiBwYXRoLiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjaWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9qZnMvamZzX21ldGFwYWdlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvamZzL2pmc19tZXRhcGFnZS5jLTI1LVxuZnMvamZzL2pmc19tZXRhcGFnZS5jOjI2OiNpZmRlZiBDT05GSUdfSkZTX1NUQVRJU1RJQ1NcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy0yNy1zdGF0aWMgc3RydWN0IHtcbi0tXG5mcy9qZnMvamZzX21ldGFwYWdlLmM9NzE9c3RhdGljIG1lbXBvb2xfdCAqbWV0YXBhZ2VfbWVtcG9vbDtcbi0tXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtNzQtXG5mcy9qZnMvamZzX21ldGFwYWdlLmM6NzU6I2lmIE1QU19QRVJfUEFHRSBcdTAwM2UgMVxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTc2LVxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYz0xNDM9c3RhdGljIGlubGluZSB2b2lkIGRlY19pbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBibGtfc3RhdHVzX3Qgc3RhdHVzLFxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy0xNTQtXG5mcy9qZnMvamZzX21ldGFwYWdlLmM6MTU1OiNpZmRlZiBDT05GSUdfTUlHUkFUSU9OXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtMTU2LXN0YXRpYyBpbnQgX19tZXRhcGFnZV9taWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYz0yMjI9c3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9tZXRhcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWV0YXBhZ2UgKm1wKVxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy0yMzAtXG5mcy9qZnMvamZzX21ldGFwYWdlLmM6MjMxOiNpZmRlZiBDT05GSUdfTUlHUkFUSU9OXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtMjMyLXN0YXRpYyBpbnQgX19tZXRhcGFnZV9taWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYz02MTc9c3RhdGljIGJvb2wgbWV0YXBhZ2VfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnBfbWFzaylcbi0tXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtNjQ1LVxuZnMvamZzL2pmc19tZXRhcGFnZS5jOjY0NjojaWZkZWYgQ09ORklHX01JR1JBVElPTlxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTY0Ny0vKlxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYz05MDM9dm9pZCBfX2ludmFsaWRhdGVfbWV0YXBhZ2VzKHN0cnVjdCBpbm9kZSAqaXAsIHM2NCBhZGRyLCBpbnQgbGVuKVxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy05NDItXG5mcy9qZnMvamZzX21ldGFwYWdlLmM6OTQzOiNpZmRlZiBDT05GSUdfSkZTX1NUQVRJU1RJQ1NcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy05NDQtaW50IGpmc19tcHN0YXRfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAyMDQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIGFuZCBhIFBvdGVudGlhbCBQYWdlLUxldmVsIE9wdGltaXphdGlvbioqCgpBaCwgYSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmUhIGAjaWYgTVBTX1BFUl9QQUdFICZndDsgMWAuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIGZvciBtZW1vcnkgcGFnZSBtYW5hZ2VtZW50LiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7T2theSwgbGV0JiMzOTtzIHVucGFjayB0aGlzIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiYjMzQ7IE15IGltbWVkaWF0ZSB0YXNrIGlzIHRvIGRldGVybWluZSB0aGUgY3VycmVudCB2YWx1ZSBvZiBgTVBTX1BFUl9QQUdFYC4gSXMgdGhpcyB2YXJpYWJsZSBkZWZpbmVkPyBXaGF0IHZhbHVlIGlzIGl0IHNldCB0bz8gV2hhdCBpcyB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJsb2NrPyBJcyBpdCByZWxhdGVkIHRvIGEgc3BlY2lmaWMgaGFyZHdhcmUgY29uZmlndXJhdGlvbiwgYSBwYXJ0aWN1bGFyIG1lbW9yeSBhbGxvY2F0b3Igc3RyYXRlZ3ksIG9yIHBlcmhhcHMgYSB0cmFkZS1vZmYgYmV0d2VlbiBtZW1vcnkgdXRpbGl6YXRpb24gYW5kIGNhY2hlIGVmZmljaWVuY3k/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBjb25kaXRpb25hbCBpcyBnYXRpbmcuIElzIGBNUFNfUEVSX1BBR0VgIHJlcHJlc2VudGF0aXZlIG9mIE11bHRpIFByb2Nlc3NpbmcgcGVyIFBhZ2U/IFRoaXMgdmFsdWUgY291bGQgcHJvdmlkZSBkaWZmZXJlbnQgcGVyZm9ybWFuY2UgZGVwZW5kaW5nIG9uIHN5c3RlbSBwYXJhbWV0ZXJzLiBHZXR0aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIGZsYWcgZmlyc3QgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBmb2xsb3dpbmcgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TVBTX1BFUl9QQUdFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvamZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9qZnMvamZzX21ldGFwYWdlLmM9NzE9c3RhdGljIG1lbXBvb2xfdCAqbWV0YXBhZ2VfbWVtcG9vbDtcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy03Mi1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzo3MzojZGVmaW5lIE1QU19QRVJfUEFHRSAoUEFHRV9TSVpFIFx1MDAzZVx1MDAzZSBMMlBTSVpFKVxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTc0LVxuZnMvamZzL2pmc19tZXRhcGFnZS5jOjc1OiNpZiBNUFNfUEVSX1BBR0UgXHUwMDNlIDFcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy03Ni1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYz03Nz1zdHJ1Y3QgbWV0YV9hbmNob3Ige1xuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy04MC1cdGJsa19zdGF0dXNfdCBzdGF0dXM7XG5mcy9qZnMvamZzX21ldGFwYWdlLmM6ODE6XHRzdHJ1Y3QgbWV0YXBhZ2UgKm1wW01QU19QRVJfUEFHRV07XG5mcy9qZnMvamZzX21ldGFwYWdlLmMtODItfTtcbi0tXG5mcy9qZnMvamZzX21ldGFwYWdlLmM9OTM9c3RhdGljIGlubGluZSBpbnQgaW5zZXJ0X21ldGFwYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZXRhcGFnZSAqbXApXG4tLVxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTEwOS1cdFx0bDJtcF9ibG9ja3MgPSBMMlBTSVpFIC0gZm9saW8tXHUwMDNlbWFwcGluZy1cdTAwM2Vob3N0LVx1MDAzZWlfYmxrYml0cztcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzoxMTA6XHRcdGluZGV4ID0gKG1wLVx1MDAzZWluZGV4IFx1MDAzZVx1MDAzZSBsMm1wX2Jsb2NrcykgXHUwMDI2IChNUFNfUEVSX1BBR0UgLSAxKTtcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy0xMTEtXHRcdGEtXHUwMDNlbXBfY291bnQmIzQzOyYjNDM7O1xuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYz0xMTg9c3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9tZXRhcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWV0YXBhZ2UgKm1wKVxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy0xMjMtXG5mcy9qZnMvamZzX21ldGFwYWdlLmM6MTI0Olx0aW5kZXggPSAobXAtXHUwMDNlaW5kZXggXHUwMDNlXHUwMDNlIGwybXBfYmxvY2tzKSBcdTAwMjYgKE1QU19QRVJfUEFHRSAtIDEpO1xuZnMvamZzL2pmc19tZXRhcGFnZS5jLTEyNS1cbi0tXG5mcy9qZnMvamZzX21ldGFwYWdlLmM9MTU2PXN0YXRpYyBpbnQgX19tZXRhcGFnZV9taWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy0xNjAtXHRzdHJ1Y3QgbWV0YV9hbmNob3IgKnNyY19hbmNob3IgPSBzcmMtXHUwMDNlcHJpdmF0ZTtcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzoxNjE6XHRzdHJ1Y3QgbWV0YXBhZ2UgKm1wc1tNUFNfUEVSX1BBR0VdID0gezB9O1xuZnMvamZzL2pmc19tZXRhcGFnZS5jLTE2Mi1cdHN0cnVjdCBtZXRhcGFnZSAqbXA7XG4tLVxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTE2NC1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzoxNjU6XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNUFNfUEVSX1BBR0U7IGkmIzQzOyYjNDM7KSB7XG5mcy9qZnMvamZzX21ldGFwYWdlLmMtMTY2LVx0XHRtcCA9IHNyY19hbmNob3ItXHUwMDNlbXBbaV07XG4tLVxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTE3NC1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzoxNzU6XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNUFNfUEVSX1BBR0U7IGkmIzQzOyYjNDM7KSB7XG5mcy9qZnMvamZzX21ldGFwYWdlLmMtMTc2LVx0XHRtcCA9IHNyY19hbmNob3ItXHUwMDNlbXBbaV07XG4tLVxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTE5MC1cdC8qIFVwZGF0ZSB0aGUgbWV0YXBhZ2UgYW5kIHJlbW92ZSBpdCBmcm9tIHNyYyAqL1xuZnMvamZzL2pmc19tZXRhcGFnZS5jOjE5MTpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1QU19QRVJfUEFHRTsgaSYjNDM7JiM0MzspIHtcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy0xOTItXHRcdG1wID0gbXBzW2ldO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTQxOQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDY1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgSkZTIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGF0IGBNUFNfUEVSX1BBR0VgIGlzIGRldGVybWluZWQgYnkgYFBBR0VfU0laRWAgYW5kIGBMMlBTSVpFYCwgd2hpY2ggaXMgYSBjb25zdGFudCAxMiwgcmVwcmVzZW50aW5nIDQwOTYgYnl0ZXMgKDJeMTIpLiBTbywgb24geDg2XzY0LCBgUEFHRV9TSVpFYCBpcyBhbHNvIDQwOTYsIG1lYW5pbmcgYE1QU19QRVJfUEFHRWAgaXMgMS4gVGhpcyBtZWFucyB0aGUgYCNpZiBNUFNfUEVSX1BBR0UgJmd0OyAxYCBjb25kaXRpb24gaXMgZmFsc2Ugb24geDg2XzY0LgoKQ29uc2VxdWVudGx5LCBgaW5zZXJ0X21ldGFwYWdlYCBhbHdheXMgcmV0dXJucyAwIG9uIHg4Nl82NCBiZWNhdXNlIHRoZSBjb2RlIGJsb2NrIGluc2lkZSB0aGUgYGlmYCBzdGF0ZW1lbnQgaXMgbmV2ZXIgZXhlY3V0ZWQuIFRoaXMgaW5pdGlhbGx5IG1hZGUgbWUgdGhpbmsgdGhlIHBhdGNoIGhhZCBubyBmdW5jdGlvbmFsIGltcGFjdCBvbiB4ODZfNjQuCgpIb3dldmVyLCBJIGltbWVkaWF0ZWx5IHRob3VnaHQsIGhhbmcgb24sIHRoaXMgKmRvZXMqIGFmZmVjdCBhcmNoaXRlY3R1cmVzIGxpa2UgYXJtNjQsIGFuZCBwb3RlbnRpYWxseSBwcGM2NCwgd2hlcmUgYFBBR0VfU0laRWAgY2FuIGJlIHNpZ25pZmljYW50bHkgbGFyZ2VyLCBmb3IgZXhhbXBsZSA2NEsuIFRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMsIGlzIHRoaXMgd29ydGggZnV6emluZz8gU3l6Ym90IGRvZXMgcnVuIG9uIGFybTY0IGFuZCByaXNjdjY0LgoKQnV0LCBkb2VzIGl0PyBNeSBtZW1vcnkgdGVsbHMgbWUgaXQgaGFzIGFybTY0IGluc3RhbmNlcyBhbmQgdGhlcmVmb3JlIGl0ICppcyogd29ydGggZnV6emluZy4gQnV0IGV2ZW4gaWYgaXQgd2FzIGp1c3QgYXJtNjQsIGl0JiMzOTtzIHN0aWxsIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGtlcm5lbC4KCk5vdywgbGV0IG1lIGdvIGRlZXBlci4gSXMgdGhlcmUgYW55IHdheSBgaW5zZXJ0X21ldGFwYWdlYCBjYW4gZmFpbCBvbiB4ODZfNjQ/IE5vLCBpdCBsb29rcyBsaWtlIGl0IGp1c3QgYXR0YWNoZXMgYSBgbWV0YXBhZ2VgIHRvIGEgYGZvbGlvYCBhbmQgbWFwcyBpdC4KCmBgYGMKc3RhdGljIGlubGluZSBpbnQgaW5zZXJ0X21ldGFwYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZXRhcGFnZSAqbXApCnsKCWlmIChtcCkgewoJCWZvbGlvX2F0dGFjaF9wcml2YXRlKGZvbGlvLCBtcCk7CgkJa21hcCgmYW1wO2ZvbGlvLSZndDtwYWdlKTsKCX0KCXJldHVybiAwOwp9CmBgYAoKV2FpdCwgYGZvbGlvX2F0dGFjaF9wcml2YXRlYCBkb2VzbiYjMzk7dCByZXR1cm4gYW55dGhpbmcuIFRoZXJlZm9yZSwgaXQgbmV2ZXIgZmFpbHMgb24geDg2XzY0LgoKT24gdGhlIG90aGVyIGhhbmQsIGFybTY0IHdpdGggNjRLIHBhZ2VzIGNoYW5nZXMgdGhlIGdhbWUuIEhlcmUsIGBNUFNfUEVSX1BBR0VgIGlzIDE2LiBgaW5zZXJ0X21ldGFwYWdlYCB0aGVuIGFsbG9jYXRlcyBhIGBzdHJ1Y3QgbWV0YV9hbmNob3JgIHVzaW5nIGBremFsbG9jX29iamAsIHdoaWNoIGNhbiByZXR1cm4gYC1FTk9NRU1gLiBUaGUgcGF0Y2ggY29ycmVjdGx5IGhhbmRsZXMgdGhpcyBgLUVOT01FTWAgY2FzZSwgYnJlYWtpbmcgb3V0IG9mIHRoZSBsb29wIGFuZCByZXR1cm5pbmcgdGhlIGVycm9yLiBDcnVjaWFsbHksIGJlZm9yZSB0aGUgcGF0Y2gsIHRoaXMgZXJyb3Igd2FzIGlnbm9yZWQsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3Igb3RoZXIgc3VidGxlIGJ1Z3MgbGF0ZXIgb24uIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGJ1ZyBmaXguCgpOZXh0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBJdCBhcHBlYXJzIEpGU19GUyBpcyB0aGUgb25seSBvbmUgcmVxdWlyZWQuIEkgc2hvdWxkIGZvY3VzIG9uIHRoZSBzeW1ib2xzIGBqZnNfZmlsbF9zdXBlcmAsIGBfX2dldF9tZXRhcGFnZWAsIGBkaVJlYWRgLCBgZGlXcml0ZWAsIGBkYk1vdW50YCwgYW5kIGBlYV9nZXRgLgoKRmluYWxseSwgaXMgYG1ldGFwYWdlX3JlYWRfZm9saW9gIHJlYWNoYWJsZSBvbiB4ODZfNjQ/IFllcywgaXQgaXMuIEJ1dCwgdGhlIGVycm9yIHBhdGggaXMgb25seSByZWFjaGFibGUgb24gYXJjaGl0ZWN0dXJlcyB3aXRoIGBQQUdFX1NJWkUgJmd0OyA0MDk2YC4gU3RpbGwsIHRoZSBwcmVzZW5jZSBvZiBhcm02NCBpbiBzeXpib3QgdGVzdGluZyBtYWtlcyBmdXp6aW5nIHdvcnRod2hpbGUuIEJlc2lkZXMgdGhhdCwgdGhlIHBhdGNoIGZpeGVzIGNvcmUgSkZTIGxvZ2ljLgoKV2FpdCwgc2hvdWxkIEkgY2hlY2sgaWYgYGluc2VydF9tZXRhcGFnZWAgaXMgY2FsbGVkIGFueXdoZXJlIGVsc2U/IEkgd2lsbCBsb29rIGZvciBvdGhlciBjYWxsIHNpdGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnNlcnRfbWV0YXBhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9qZnMvamZzX21ldGFwYWdlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvamZzL2pmc19tZXRhcGFnZS5jPTg0PXN0YXRpYyBpbmxpbmUgc3RydWN0IG1ldGFwYWdlICpmb2xpb190b19tcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2Zmc2V0KVxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy05Mi1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzo5MzpzdGF0aWMgaW5saW5lIGludCBpbnNlcnRfbWV0YXBhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1ldGFwYWdlICptcClcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy05NC17XG4tLVxuZnMvamZzL2pmc19tZXRhcGFnZS5jPTE1Nj1zdGF0aWMgaW50IF9fbWV0YXBhZ2VfbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtMTc4LVx0XHRcdGNvbnRpbnVlO1xuZnMvamZzL2pmc19tZXRhcGFnZS5jOjE3OTpcdFx0aWYgKHVubGlrZWx5KGluc2VydF9tZXRhcGFnZShkc3QsIG1wKSkpIHtcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy0xODAtXHRcdFx0LyogSWYgZXJyb3IsIHJvbGwtYmFjayBwcmV2aW9zbHkgaW5zZXJ0ZWQgcGFnZXMgKi9cbi0tXG5mcy9qZnMvamZzX21ldGFwYWdlLmM9MjA4PXN0YXRpYyBpbmxpbmUgc3RydWN0IG1ldGFwYWdlICpmb2xpb190b19tcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2Zmc2V0KVxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy0yMTItXG5mcy9qZnMvamZzX21ldGFwYWdlLmM6MjEzOnN0YXRpYyBpbmxpbmUgaW50IGluc2VydF9tZXRhcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWV0YXBhZ2UgKm1wKVxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTIxNC17XG4tLVxuZnMvamZzL2pmc19tZXRhcGFnZS5jPTIzMj1zdGF0aWMgaW50IF9fbWV0YXBhZ2VfbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtMjQ3LVxuZnMvamZzL2pmc19tZXRhcGFnZS5jOjI0ODpcdGlmICh1bmxpa2VseShpbnNlcnRfbWV0YXBhZ2UoZHN0LCBtcCkpKVxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTI0OS1cdFx0cmV0dXJuIC1FQUdBSU47XG4tLVxuZnMvamZzL2pmc19tZXRhcGFnZS5jPTU2NT1zdGF0aWMgaW50IG1ldGFwYWdlX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy01ODctXHRcdFx0aWYgKCFmb2xpby1cdTAwM2Vwcml2YXRlKSB7XG5mcy9qZnMvamZzX21ldGFwYWdlLmM6NTg4Olx0XHRcdFx0cmV0ID0gaW5zZXJ0X21ldGFwYWdlKGZvbGlvLCBOVUxMKTtcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy01ODktXHRcdFx0XHRpZiAocmV0KVxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYz02ODg9c3RydWN0IG1ldGFwYWdlICpfX2dldF9tZXRhcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBsb25nIGxibG9jayxcbi0tXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtNzc2LVx0XHRtcC1cdTAwM2VpbmRleCA9IGxibG9jaztcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzo3Nzc6XHRcdGlmICh1bmxpa2VseShpbnNlcnRfbWV0YXBhZ2UoZm9saW8sIG1wKSkpIHtcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy03NzgtXHRcdFx0ZnJlZV9tZXRhcGFnZShtcCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNjEzCgkJCQkJCQlvdXRwdXQ6IDE1OQoJCQkJCQkJdGhvdWdodHM6IDE1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGaXhpbmcgYSBNZXRhcGFnZSBFcnJvciBhbmQgQ2hlY2tpbmcgQ29uZmlndXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgYW4gZXJyb3IgaGFuZGxpbmcgaXNzdWUgd2l0aGluIHRoZSBtZXRhcGFnZSBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBlcnJvciBpcyB0cmlnZ2VyZWQgd2l0aGluIHRoZSBgX19nZXRfbWV0YXBhZ2VgIGFuZCBgX19tZXRhcGFnZV9taWdyYXRlX2ZvbGlvYCBmdW5jdGlvbnMuIEkgc2VlIHRoYXQgYF9fZ2V0X21ldGFwYWdlYCBhbHJlYWR5IGhhcyBhIGdvb2QgZXJyb3IgaGFuZGxpbmcgbWVjaGFuaXNtIGluIHBsYWNlIHVzaW5nIHRoaXMgYGluc2VydF9tZXRhcGFnZWAgY2FsbCBhbmQgdGhlIHN1YnNlcXVlbnQgY2xlYW51cCB1c2luZyBgZnJlZV9tZXRhcGFnZWAsIHdoaWNoIGlzIGdvb2QgdG8gc2VlLgoKVGhlIGlzc3VlIGxpZXMgaW4gYG1ldGFwYWdlX3JlYWRfZm9saW9gLCB0aG91Z2guIFRoZSBjb2RlIHdhc24mIzM5O3QgcHJvcGVybHkgY2hlY2tpbmcgdGhlIHJlc3VsdCBvZiBwb3RlbnRpYWxseSBmYWlsaW5nIG9wZXJhdGlvbnMgdGhlcmUsIGFuZCB0aGUgcGF0Y2ggZml4ZXMgdGhpcy4gVGhhdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBidXQgaW1wb3J0YW50IGNvcnJlY3Rpb24uCgpOb3csIGxldCYjMzk7cyBqdXN0IGRvIGEgcXVpY2sgc2NhbiB0byBtYWtlIHN1cmUgdGhpcyBmaXggZG9lc24mIzM5O3QgaW50ZXJhY3Qgd2l0aCBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgaW4gYSBwb3RlbnRpYWxseSB1bmV4cGVjdGVkIHdheS4gSSYjMzk7bGwgY2hlY2sgdG8gc2VlIGlmIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyBtaWdodCBiZSBhdCBwbGF5IGhlcmUuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19KRlNfRlNgIGlzIHRoZSBwcmltYXJ5IG9uZSB0aGF0IGNvbWVzIHRvIG1pbmQsIGFuZCBJIGNhbiYjMzk7dCBzcG90IGFueSBvdGhlcnMgYXQgYSBxdWljayBnbGFuY2UsIHNvIEkgdGhpbmsgd2UmIzM5O3JlIHNhZmUuCgpBbHJpZ2h0LCBJJiMzOTttIHNhdGlzZmllZCB0aGF0IHRoaXMgaXMgYSB2YWxpZCBhbmQgdGFyZ2V0ZWQgZml4LiBUaW1lIHRvIHNldCB0aGUgcmVzdWx0cyBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0pGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2pmc19maWxsX3N1cGVyJiMzNDssCiAgICAmIzM0O19fZ2V0X21ldGFwYWdlJiMzNDssCiAgICAmIzM0O2RpUmVhZCYjMzQ7LAogICAgJiMzNDtkaVdyaXRlJiMzNDssCiAgICAmIzM0O2RiTW91bnQmIzM0OywKICAgICYjMzQ7ZWFfZ2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBtZXRhcGFnZV9yZWFkX2ZvbGlvYCBpbiB0aGUgSkZTIGZpbGVzeXN0ZW0gdG8gcHJvcGVybHkgaGFuZGxlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIGZyb20gYGluc2VydF9tZXRhcGFnZWAuIFRoaXMgZXJyb3IgcGF0aCBpcyByZWFjaGFibGUgb24gYXJjaGl0ZWN0dXJlcyB3aGVyZSBQQUdFX1NJWkUgXHUwMDNlIDQwOTYgKGUuZy4sIGFybTY0LCBwcGM2NCkgYW5kIGZpeGVzIGEgcG90ZW50aWFsIGJ1ZyB3aGVyZSB0aGUgZXJyb3Igd2FzIGlnbm9yZWQuIEl0IGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBKRlMgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0pGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2pmc19maWxsX3N1cGVyJiMzNDssCiAgICAmIzM0O19fZ2V0X21ldGFwYWdlJiMzNDssCiAgICAmIzM0O2RpUmVhZCYjMzQ7LAogICAgJiMzNDtkaVdyaXRlJiMzNDssCiAgICAmIzM0O2RiTW91bnQmIzM0OywKICAgICYjMzQ7ZWFfZ2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBtZXRhcGFnZV9yZWFkX2ZvbGlvYCBpbiB0aGUgSkZTIGZpbGVzeXN0ZW0gdG8gcHJvcGVybHkgaGFuZGxlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIGZyb20gYGluc2VydF9tZXRhcGFnZWAuIFRoaXMgZXJyb3IgcGF0aCBpcyByZWFjaGFibGUgb24gYXJjaGl0ZWN0dXJlcyB3aGVyZSBQQUdFX1NJWkUgXHUwMDNlIDQwOTYgKGUuZy4sIGFybTY0LCBwcGM2NCkgYW5kIGZpeGVzIGEgcG90ZW50aWFsIGJ1ZyB3aGVyZSB0aGUgZXJyb3Igd2FzIGlnbm9yZWQuIEl0IGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBKRlMgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjAxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6MDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtaXNzaW5nIGVycm9yIGNoZWNrIGZvciBgaW5zZXJ0X21ldGFwYWdlKClgLCB3aGljaCBjYW4gZmFpbCBhbmQgcmV0dXJuIGAtRU5PTUVNYCBpZiBga3phbGxvY19vYmooKWAgZmFpbHMgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBhIGBtZXRhX2FuY2hvcmAgc3RydWN0dXJlLiBXaXRob3V0IHRoaXMgY2hlY2ssIHRoZSBjb2RlIHdvdWxkIGNvbnRpbnVlIGV4ZWN1dGluZyBldmVuIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxlZCwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBvdGhlciBtZW1vcnktcmVsYXRlZCBidWdzIHdoZW4gYGZvbGlvLVx1MDAzZXByaXZhdGVgIGlzIGV4cGVjdGVkIHRvIGJlIGluaXRpYWxpemVkLiBUaGlzIGlzIGEgc3RhbmRhcmQgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSBhbmQgZXJyb3IgaGFuZGxpbmcgYnVnLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIFN0YW5kYXJkIEtBU0FOICh3aGljaCBkZXRlY3RzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIHVzZS1hZnRlci1mcmVlKSBhbmQgYmFzaWMga2VybmVsIGNyYXNoIGRldGVjdGlvbiAoZm9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZSBjb25zZXF1ZW5jZXMgb2YgdGhpcyBidWcuIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUgYmVjYXVzZSB0aGUgbWVtb3J5IGFsbG9jYXRlZCBieSBga3phbGxvY19vYmooKWAgaXMgYWxyZWFkeSB6ZXJvLWluaXRpYWxpemVkLCBhbmQgdGhlIGJ1ZyBkb2VzIG5vdCBpbnZvbHZlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFkZGluZyBieXRlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDVhYTFmYzMxOTgzNmM5YmI1ZGJkNzliYTM2NTFlMWYwOTYxMzM4MgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDE5OjU5OjU4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19tZXRhcGFnZS5jIGIvZnMvamZzL2pmc19tZXRhcGFnZS5jCmluZGV4IDQxZmUxMmU2NDFjZWUuLmZmYmIxODZlODUwYzYgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9qZnMvamZzX21ldGFwYWdlLmMKQEAgLTU3Myw2ICYjNDM7NTczLDcgQEAgc3RhdGljIGludCBtZXRhcGFnZV9yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGZvbGlvICpmb2xpbykKIAlpbnQgeGxlbjsKIAl1bnNpZ25lZCBpbnQgbGVuOwogCWludCBvZmZzZXQ7CiYjNDM7CWludCByZXQgPSAwOwogCiAJQlVHX09OKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbykpOwogCXBhZ2Vfc3RhcnQgPSBmb2xpb19wb3MoZm9saW8pICZndDsmZ3Q7IGlub2RlLSZndDtpX2Jsa2JpdHM7CkBAIC01ODMsOCAmIzQzOzU4NCwxMSBAQCBzdGF0aWMgaW50IG1ldGFwYWdlX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCQlwYmxvY2sgPSBtZXRhcGFnZV9nZXRfYmxvY2tzKGlub2RlLCBwYWdlX3N0YXJ0ICYjNDM7IGJsb2NrX29mZnNldCwKIAkJCQkJICAgICAmYW1wO3hsZW4pOwogCQlpZiAocGJsb2NrKSB7Ci0JCQlpZiAoIWZvbGlvLSZndDtwcml2YXRlKQotCQkJCWluc2VydF9tZXRhcGFnZShmb2xpbywgTlVMTCk7CiYjNDM7CQkJaWYgKCFmb2xpby0mZ3Q7cHJpdmF0ZSkgewomIzQzOwkJCQlyZXQgPSBpbnNlcnRfbWV0YXBhZ2UoZm9saW8sIE5VTEwpOwomIzQzOwkJCQlpZiAocmV0KQomIzQzOwkJCQkJYnJlYWs7CiYjNDM7CQkJfQogCQkJaW5jX2lvKGZvbGlvKTsKIAkJCWlmIChiaW8pCiAJCQkJc3VibWl0X2JpbyhiaW8pOwpAQCAtNjA3LDcgJiM0Mzs2MTEsNyBAQCBzdGF0aWMgaW50IG1ldGFwYWdlX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCWVsc2UKIAkJZm9saW9fdW5sb2NrKGZvbGlvKTsKIAotCXJldHVybiAwOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgYm9vbCBtZXRhcGFnZV9yZWxlYXNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcF9tYXNrKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIyOQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSkZTIE1ldGFwYWdlIFJlYWQgRnVuY3Rpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB6ZXJvaW5nIGluIG9uIGBtZXRhcGFnZV9yZWFkX2ZvbGlvYCB3aXRoaW4gYGZzL2pmcy9qZnNfbWV0YXBhZ2UuY2AuIEkgc2VlIGl0JiMzOTtzIHNwZWNpZmljYWxseSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIGZhaWx1cmUgcG9pbnQgd2hlbiBkZWFsaW5nIHdpdGggbWV0YXBhZ2VzLiBUaGUgY2hhbmdlIGlzIHN0cmFpZ2h0Zm9yd2FyZDogYSBjcnVjaWFsIHJldHVybiB2YWx1ZSBjaGVjayBoYXMgYmVlbiBhZGRlZCBhZnRlciB0aGUgY2FsbCB0byBgaW5zZXJ0X21ldGFwYWdlKGZvbGlvLCBOVUxMKWAuCgpUaGUgY29yZSBvZiBpdCBpcyB0aGlzOiBpZiBgaW5zZXJ0X21ldGFwYWdlYCBoaXRzIGEgc25hZyBhbmQgKmZhaWxzKiBkdXJpbmcgaXRzIG9wZXJhdGlvbiwgdGhlIHBhdGNoZWQgY29kZSBub3cgY29ycmVjdGx5IGJyZWFrcyBvdXQgb2YgdGhlIGxvb3AgYW5kIHByb3BhZ2F0ZXMgdGhlIGVycm9yIGNvZGUgYmFjayB1cCB0aGUgY2FsbCBzdGFjay4gVGhpcyBwcmV2ZW50cyBjb250aW51ZWQgcHJvY2Vzc2luZyB3aGVuIGEgbWV0YXBhZ2UgaW5zZXJ0aW9uIGdvZXMgc2lkZXdheXMuIFdpdGhvdXQgdGhpcyBjaGVjaywgd2UmIzM5O2QgcG90ZW50aWFsbHkgYmUgY29udGludWluZyBkb3duIGEgcGF0aCB3aGVyZSBkYXRhIGludGVncml0eSBtaWdodCBiZSBjb21wcm9taXNlZCwgd2hpY2ggY291bGQgbGVhZCB0byBmaWxlIHN5c3RlbSBjb3JydXB0aW9uIG9yIG90aGVyIHVuZm9yZXNlZW4gaXNzdWVzLgoKVG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLCBJIG5lZWQgdG8gem9vbSBpbiBhbmQgZXhhbWluZSB0aGUgY29udGV4dCB3aXRoaW4gYG1ldGFwYWdlX3JlYWRfZm9saW9gLiBXaGF0JiMzOTtzIHRoZSBmbG93PyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBsb29wIHRoYXQgaXMgYmVpbmcgYnJva2VuPyBXaGF0IGVycm9yIGNvbmRpdGlvbnMgY291bGQgbGVhZCB0byBgaW5zZXJ0X21ldGFwYWdlYCBmYWlsaW5nIGluIHRoZSBmaXJzdCBwbGFjZT8gQW5kIEkmIzM5O2xsIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IHRoaXMgYWRkZWQgZXJyb3IgaGFuZGxpbmcgbWlnaHQgYWZmZWN0IHBlcmZvcm1hbmNlLCB0aG91Z2ggaW4gdGhpcyBjYXNlLCBJJiMzOTtkIGV4cGVjdCB0aGUgcGVyZm9ybWFuY2UgaW1wYWN0IHRvIGJlIG1pbmltYWwgY29tcGFyZWQgdG8gdGhlIGdhaW4gaW4gcm9idXN0bmVzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9qZnMvamZzX21ldGFwYWdlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU3MDpcdFx0aW50IGJsb2Nrc19wZXJfcGFnZSA9IGlfYmxvY2tzX3Blcl9mb2xpbyhpbm9kZSwgZm9saW8pO1xuIDU3MTpcdFx0c2VjdG9yX3QgcGFnZV9zdGFydDtcdC8qIGFkZHJlc3Mgb2YgcGFnZSBpbiBmcyBibG9ja3MgKi9cbiA1NzI6XHRcdHNlY3Rvcl90IHBibG9jaztcbiA1NzM6XHRcdGludCB4bGVuO1xuIDU3NDpcdFx0dW5zaWduZWQgaW50IGxlbjtcbiA1NzU6XHRcdGludCBvZmZzZXQ7XG4gNTc2Olx0XHRpbnQgcmV0ID0gMDtcbiA1Nzc6XHRcbiA1Nzg6XHRcdEJVR19PTighZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pKTtcbiA1Nzk6XHRcdHBhZ2Vfc3RhcnQgPSBmb2xpb19wb3MoZm9saW8pIFx1MDAzZVx1MDAzZSBpbm9kZS1cdTAwM2VpX2Jsa2JpdHM7XG4gNTgwOlx0XG4gNTgxOlx0XHRibG9ja19vZmZzZXQgPSAwO1xuIDU4MjpcdFx0d2hpbGUgKGJsb2NrX29mZnNldCBcdTAwM2MgYmxvY2tzX3Blcl9wYWdlKSB7XG4gNTgzOlx0XHRcdHhsZW4gPSBibG9ja3NfcGVyX3BhZ2UgLSBibG9ja19vZmZzZXQ7XG4gNTg0Olx0XHRcdHBibG9jayA9IG1ldGFwYWdlX2dldF9ibG9ja3MoaW5vZGUsIHBhZ2Vfc3RhcnQgJiM0MzsgYmxvY2tfb2Zmc2V0LFxuIDU4NTpcdFx0XHRcdFx0XHQgICAgIFx1MDAyNnhsZW4pO1xuIDU4NjpcdFx0XHRpZiAocGJsb2NrKSB7XG4gNTg3Olx0XHRcdFx0aWYgKCFmb2xpby1cdTAwM2Vwcml2YXRlKSB7XG4gNTg4Olx0XHRcdFx0XHRyZXQgPSBpbnNlcnRfbWV0YXBhZ2UoZm9saW8sIE5VTEwpO1xuIDU4OTpcdFx0XHRcdFx0aWYgKHJldClcbiA1OTA6XHRcdFx0XHRcdFx0YnJlYWs7XG4gNTkxOlx0XHRcdFx0fVxuIDU5MjpcdFx0XHRcdGluY19pbyhmb2xpbyk7XG4gNTkzOlx0XHRcdFx0aWYgKGJpbylcbiA1OTQ6XHRcdFx0XHRcdHN1Ym1pdF9iaW8oYmlvKTtcbiA1OTU6XHRcbiA1OTY6XHRcdFx0XHRiaW8gPSBiaW9fYWxsb2MoaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2JkZXYsIDEsIFJFUV9PUF9SRUFELFxuIDU5NzpcdFx0XHRcdFx0XHRHRlBfTk9GUyk7XG4gNTk4Olx0XHRcdFx0YmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yID1cbiA1OTk6XHRcdFx0XHRcdHBibG9jayBcdTAwM2NcdTAwM2MgKGlub2RlLVx1MDAzZWlfYmxrYml0cyAtIDkpO1xuIDYwMDpcdFx0XHRcdGJpby1cdTAwM2ViaV9lbmRfaW8gPSBtZXRhcGFnZV9yZWFkX2VuZF9pbztcbiA2MDE6XHRcdFx0XHRiaW8tXHUwMDNlYmlfcHJpdmF0ZSA9IGZvbGlvO1xuIDYwMjpcdFx0XHRcdGxlbiA9IHhsZW4gXHUwMDNjXHUwMDNjIGlub2RlLVx1MDAzZWlfYmxrYml0cztcbiA2MDM6XHRcdFx0XHRvZmZzZXQgPSBibG9ja19vZmZzZXQgXHUwMDNjXHUwMDNjIGlub2RlLVx1MDAzZWlfYmxrYml0cztcbiA2MDQ6XHRcdFx0XHRiaW9fYWRkX2ZvbGlvX25vZmFpbChiaW8sIGZvbGlvLCBsZW4sIG9mZnNldCk7XG4gNjA1Olx0XHRcdFx0YmxvY2tfb2Zmc2V0ICYjNDM7PSB4bGVuO1xuIDYwNjpcdFx0XHR9IGVsc2VcbiA2MDc6XHRcdFx0XHRibG9ja19vZmZzZXQmIzQzOyYjNDM7O1xuIDYwODpcdFx0fVxuIDYwOTpcdFx0aWYgKGJpbylcbiA2MTA6XHRcdFx0c3VibWl0X2JpbyhiaW8pO1xuIDYxMTpcdFx0ZWxzZVxuIDYxMjpcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuIDYxMzpcdFxuIDYxNDpcdFx0cmV0dXJuIHJldDtcbiA2MTU6XHR9XG4gNjE2Olx0XG4gNjE3Olx0c3RhdGljIGJvb2wgbWV0YXBhZ2VfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnBfbWFzaylcbiA2MTg6XHR7XG4gNjE5Olx0XHRzdHJ1Y3QgbWV0YXBhZ2UgKm1wO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzkxCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIGBpbnNlcnRfbWV0YXBhZ2VgIFJldHVybiBWYWx1ZSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCBob3cgd2UgaGFuZGxlIHRoZSByZXR1cm4gdmFsdWUgZnJvbSBgaW5zZXJ0X21ldGFwYWdlYC4gU2VlbXMgbGlrZSBhIHNpbXBsZSB0aGluZywgYnV0IHBvdGVudGlhbGx5IGNyaXRpY2FsLiBJZiBgaW5zZXJ0X21ldGFwYWdlYCBmYWlscyDigJMgbWF5YmUgZHVlIHRvIGEgbWVtb3J5IGFsbG9jYXRpb24gaXNzdWUsIG9yIHNvbWUgb3RoZXIgdW5leHBlY3RlZCBwcm9ibGVtIOKAkyBpdCYjMzk7cyBzdXBwb3NlZCB0byByZXR1cm4gYW4gZXJyb3IgY29kZSwgcmlnaHQ/IEdvb2QuIFRoaXMgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIGEgZGVmZW5zaXZlIHByb2dyYW1taW5nIG1lYXN1cmUuIFdlIG5lZWQgdG8gY2hlY2sgdGhlIHJldHVybiB2YWx1ZSBiZWNhdXNlIGlmIHdlICpkb24mIzM5O3QqLCBhbmQgdGhlIGZ1bmN0aW9uIGZhaWxlZCBzaWxlbnRseSwgd2UgY291bGQgYmUgbG9va2luZyBhdCBhIG1lbW9yeSBsZWFrLCBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSwgb3Igc29tZXRoaW5nIGV2ZW4gd29yc2UgZG93biB0aGUgbGluZS4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgc2NlbmFyaW8sIGFuZCB0aGUgc29ydCBvZiBidWcgd2UgKmFic29sdXRlbHkqIHdhbnQgdG8gYXZvaWQuCgpIb2xkIG9uLCBJIHNlZSBgaW5zZXJ0X21ldGFwYWdlYCByZXR1cm5zIGFuIGBpbnRgLCBub3QgYSBwb2ludGVyIG9yIGEgbW9yZSBjb21wbGV4IHN0cnVjdHVyZSwgc28gbGV0IG1lIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBpbnNlcnRfbWV0YXBhZ2VgIHRvIGNoZWNrIHdoYXQgdHlwZSBvZiBlcnJvciBjb2RlcyBpdCByZXR1cm5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2pmcy9qZnNfbWV0YXBhZ2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTUwOlx0XG4gMTUxOlx0XHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcdTAwMjZhbmNob3ItXHUwMDNlaW9fY291bnQpKVxuIDE1MjpcdFx0XHRoYW5kbGVyKGZvbGlvLCBhbmNob3ItXHUwMDNlc3RhdHVzKTtcbiAxNTM6XHR9XG4gMTU0Olx0XG4gMTU1Olx0I2lmZGVmIENPTkZJR19NSUdSQVRJT05cbiAxNTY6XHRzdGF0aWMgaW50IF9fbWV0YXBhZ2VfbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiAxNTc6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmRzdCwgc3RydWN0IGZvbGlvICpzcmMsXG4gMTU4Olx0XHRcdFx0XHQgICAgZW51bSBtaWdyYXRlX21vZGUgbW9kZSlcbiAxNTk6XHR7XG4gMTYwOlx0XHRzdHJ1Y3QgbWV0YV9hbmNob3IgKnNyY19hbmNob3IgPSBzcmMtXHUwMDNlcHJpdmF0ZTtcbiAxNjE6XHRcdHN0cnVjdCBtZXRhcGFnZSAqbXBzW01QU19QRVJfUEFHRV0gPSB7MH07XG4gMTYyOlx0XHRzdHJ1Y3QgbWV0YXBhZ2UgKm1wO1xuIDE2MzpcdFx0aW50IGksIHJjO1xuIDE2NDpcdFxuIDE2NTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTVBTX1BFUl9QQUdFOyBpJiM0MzsmIzQzOykge1xuIDE2NjpcdFx0XHRtcCA9IHNyY19hbmNob3ItXHUwMDNlbXBbaV07XG4gMTY3Olx0XHRcdGlmIChtcCBcdTAwMjZcdTAwMjYgbWV0YXBhZ2VfbG9ja2VkKG1wKSlcbiAxNjg6XHRcdFx0XHRyZXR1cm4gLUVBR0FJTjtcbiAxNjk6XHRcdH1cbiAxNzA6XHRcbiAxNzE6XHRcdHJjID0gZmlsZW1hcF9taWdyYXRlX2ZvbGlvKG1hcHBpbmcsIGRzdCwgc3JjLCBtb2RlKTtcbiAxNzI6XHRcdGlmIChyYylcbiAxNzM6XHRcdFx0cmV0dXJuIHJjO1xuIDE3NDpcdFxuIDE3NTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTVBTX1BFUl9QQUdFOyBpJiM0MzsmIzQzOykge1xuIDE3NjpcdFx0XHRtcCA9IHNyY19hbmNob3ItXHUwMDNlbXBbaV07XG4gMTc3Olx0XHRcdGlmICghbXApXG4gMTc4Olx0XHRcdFx0Y29udGludWU7XG4gMTc5Olx0XHRcdGlmICh1bmxpa2VseShpbnNlcnRfbWV0YXBhZ2UoZHN0LCBtcCkpKSB7XG4gMTgwOlx0XHRcdFx0LyogSWYgZXJyb3IsIHJvbGwtYmFjayBwcmV2aW9zbHkgaW5zZXJ0ZWQgcGFnZXMgKi9cbiAxODE6XHRcdFx0XHRmb3IgKGludCBqID0gMCA7IGogXHUwMDNjIGk7IGomIzQzOyYjNDM7KSB7XG4gMTgyOlx0XHRcdFx0XHRpZiAobXBzW2pdKVxuIDE4MzpcdFx0XHRcdFx0XHRyZW1vdmVfbWV0YXBhZ2UoZHN0LCBtcHNbal0pO1xuIDE4NDpcdFx0XHRcdH1cbiAxODU6XHRcdFx0XHRyZXR1cm4gLUVBR0FJTjtcbiAxODY6XHRcdFx0fVxuIDE4NzpcdFx0XHRtcHNbaV0gPSBtcDtcbiAxODg6XHRcdH1cbiAxODk6XHRcbiAxOTA6XHRcdC8qIFVwZGF0ZSB0aGUgbWV0YXBhZ2UgYW5kIHJlbW92ZSBpdCBmcm9tIHNyYyAqL1xuIDE5MTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTVBTX1BFUl9QQUdFOyBpJiM0MzsmIzQzOykge1xuIDE5MjpcdFx0XHRtcCA9IG1wc1tpXTtcbiAxOTM6XHRcdFx0aWYgKG1wKSB7XG4gMTk0Olx0XHRcdFx0aW50IHBhZ2Vfb2Zmc2V0ID0gbXAtXHUwMDNlZGF0YSAtIGZvbGlvX2FkZHJlc3Moc3JjKTtcbiAxOTU6XHRcbiAxOTY6XHRcdFx0XHRtcC1cdTAwM2VkYXRhID0gZm9saW9fYWRkcmVzcyhkc3QpICYjNDM7IHBhZ2Vfb2Zmc2V0O1xuIDE5NzpcdFx0XHRcdG1wLVx1MDAzZWZvbGlvID0gZHN0O1xuIDE5ODpcdFx0XHRcdHJlbW92ZV9tZXRhcGFnZShzcmMsIG1wKTtcbiAxOTk6XHRcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDk1CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkxvY2F0aW5nIHRoZSBNZXRhcGFnZSoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBsYXNlci1mb2N1c2VkOiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGxvY2F0aW9uIG9mIHRoZSBgaW5zZXJ0X21ldGFwYWdlYCBmdW5jdGlvbiBvciBmaWxlLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgY2FzdWFsIHNlYXJjaDsgSSYjMzk7bSBhc3N1bWluZyB0aGVyZSYjMzk7cyBhIHNwZWNpZmljLCB3ZWxsLWRlZmluZWQgcmVhc29uIEkmIzM5O20gdGFyZ2V0aW5nIHRoaXMgcGFydGljdWxhciBlbGVtZW50LiBNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggdGhlIGxpa2VseSBzY2VuYXJpb3MgYmFzZWQgb24gbXkgZmllbGQuIEkmIzM5O20gY29uc2lkZXJpbmc6CgoqICAgKipQcm9qZWN0IENvbnRleHQ6KiogV2hhdCYjMzk7cyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmU/IElzIHRoaXMgYSBsZWdhY3kgc3lzdGVtLCBhIG1vZHVsYXIgZGVzaWduLCBvciBzb21ldGhpbmcgbW9yZSBtb2Rlcm4/IFRoaXMgaGVscHMgbmFycm93IGRvd24gdGhlIHByb2JhYmxlIGxvY2F0aW9ucyB3aXRoaW4gdGhlIHByb2plY3Qgc3RydWN0dXJlLgoqICAgKipDb2RpbmcgQ29udmVudGlvbnM6KiogV2hhdCBhcmUgdGhlIGVzdGFibGlzaGVkIG5hbWluZyBwYXR0ZXJucyBhbmQgZmlsZSBvcmdhbml6YXRpb24gcGFyYWRpZ21zPyBBcmUgd2UgZGVhbGluZyB3aXRoIG5hbWVzcGFjZXMsIGNsYXNzZXMsIG9yIGEgbW9yZSBwcm9jZWR1cmFsIGFwcHJvYWNoPyBUaGlzIGtub3dsZWRnZSBkaWN0YXRlcyB3aGVyZSBJJiMzOTtsbCBsb29rIGZpcnN0LgoqICAgKipSZWxhdGVkIENvbXBvbmVudHM6KiogV2hhdCBvdGhlciBtb2R1bGVzIG9yIGZ1bmN0aW9ucyB3b3VsZCByZWFzb25hYmx5IGludGVyYWN0IHdpdGggYGluc2VydF9tZXRhcGFnZWA/IFRyYWNpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGNhbiBwcm92aWRlIGEgZGlyZWN0IHBhdGguIEFyZSB0aGVyZSBhbnkga25vd24gZW50cnkgcG9pbnRzIG9yIEFQSSBjYWxscyB0aGF0IG1ha2UgdXNlIG9mIGl0PwoqICAgKipTZWFyY2ggU3RyYXRlZ2llczoqKiBEZXBlbmRpbmcgb24gdGhlIHNjYWxlIGFuZCBjb21wbGV4aXR5LCBJJiMzOTtsbCBkZXBsb3kgdGhlIGFwcHJvcHJpYXRlIHNlYXJjaCB0b29scyAtIGdyZXAsIGBmaW5kYCwgSURFLWludGVncmF0ZWQgc2VhcmNoLCBvciBldmVuIGNyb3NzLXJlZmVyZW5jaW5nIHRvb2xzLiBUaGUgYXBwcm9hY2ggd2lsbCB2YXJ5IGJhc2VkIG9uIHdoZXRoZXIgSSBoYXZlIGFjY2VzcyB0byB0aGUgZnVsbCBzb3VyY2UgY29kZSBhbmQgYW55IHZlcnNpb24gY29udHJvbCBzeXN0ZW1zLgoqICAgKipFeHBlY3RlZCBmdW5jdGlvbmFsaXR5OioqIFdoYXQgaXMgbWVhbnQgdG8gaGFwcGVuIGhlcmU/IE15IGV4cGVydC1sZXZlbCB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb25hbGl0eSBhbGxvd3MgbWUgdG8gbmFycm93IGRvd24gd2hhdCBJIGFtIGxvb2tpbmcgZm9yIGJ5IGFzc2Vzc2luZyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IgYW5kIGxvZ2ljIGl0IHdpbGwgYmUgaW52b2x2ZWQgd2l0aC4KCk15IGdvYWwgaGVyZSBpcyBlZmZpY2llbnQgdHJpYWdlLiBJIHdhbnQgdG8gcmFwaWRseSBlbGltaW5hdGUgZGVhZCBlbmRzIGFuZCBmb2N1cyBteSBlZmZvcnQgb24gdGhlIG1vc3QgcHJvbWlzaW5nIGNhbmRpZGF0ZXMsIGFuZCBhbHNvIEkgd2FudCB0byBxdWlja2x5IGV2YWx1YXRlIGFueSByZWxhdGVkIHZhcmlhYmxlcywgZnVuY3Rpb25zIGFuZCBmaWxlcyB3aGljaCBtaWdodCBwb2ludCB0b3dhcmQgdGhlIGRlc2lyZWQgYW5zd2VyLiBJJiMzOTttIHJlYWR5IHRvIGRpdmUgaW50byB0aGUgY29kZWJhc2UsIGJ1dCBJJiMzOTttIGFwcHJvYWNoaW5nIHRoaXMgd2l0aCBhIHN0cmF0ZWdpYywgaW5mb3JtZWQgcGxhbi4gVGhlIGZpcnN0IHN0ZXAsIGhvd2V2ZXIsIGlzIHRvICpmaW5kKiBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtec3RhdGljIGludCBpbnNlcnRfbWV0YXBhZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTkyCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDb25zaWRlcmluZyB0aGUgTmF0dXJlIG9mIHRoZSBFbGVtZW50KioKCkhtbSwgSSYjMzk7bSB0cnlpbmcgdG8gcGluIGRvd24gdGhlIGJlaGF2aW9yIG9mIHRoaXMgcGFydGljdWxhciB0aGluZy4gSSYjMzk7bSB3b25kZXJpbmcgaWYgaXRzIHN0YXRlIGlzIHRydWx5IGZpeGVkLCBvciBpZiB0aGVyZSYjMzk7cyBzb21lIGR5bmFtaWMgYXNwZWN0IHRvIGl0IHRoYXQgSSYjMzk7bSBvdmVybG9va2luZy4gVGhlIGluaXRpYWwgaW1wcmVzc2lvbiB3YXMgdGhhdCBpdCB3YXMgc3RhdGljLCBidXQgbm93IEkgbmVlZCB0byBxdWVzdGlvbiB0aGF0IGFzc3VtcHRpb24uIFBlcmhhcHMgdGhlIGFwcGFyZW50ICYjMzQ7c3RhdGljLW5lc3MmIzM0OyBpcyBhbiBpbGx1c2lvbiwgb3IgbWF5YmUgaXQmIzM5O3MgY29uZmlndXJlZCBpbiBhIHdheSB0aGF04oCZcyB2ZXJ5IGNsb3NlbHkgdGllZCB0byBpdHMgaW1tZWRpYXRlIGNvbnRleHQsIGVmZmVjdGl2ZWx5IG1ha2luZyBpdCAqc2VlbSogc3RhdGljIGV2ZW4gaWYgaXQgaXNuJiMzOTt0LiBJJiMzOTttIGxlYW5pbmcgdG93YXJkIHRoaW5raW5nIGl0JiMzOTtzIG5vdCB0cnVseSBzdGF0aWMuIFRoZSBxdWVzdGlvbiBpcywgaWYgaXQmIzM5O3Mgbm90IHN0YXRpYywgd2hlcmUgaXMgdGhlIGR5bmFtaXNtIGNvbWluZyBmcm9tPyBBbmQgaG93IGlzIGl0IGJlaW5nIGludHJvZHVjZWQ/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBpbnNlcnRfbWV0YXBhZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvamZzL2pmc19tZXRhcGFnZS5jPTg0PXN0YXRpYyBpbmxpbmUgc3RydWN0IG1ldGFwYWdlICpmb2xpb190b19tcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2Zmc2V0KVxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy05Mi1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzo5MzpzdGF0aWMgaW5saW5lIGludCBpbnNlcnRfbWV0YXBhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1ldGFwYWdlICptcClcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy05NC17XG4tLVxuZnMvamZzL2pmc19tZXRhcGFnZS5jPTIwOD1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZXRhcGFnZSAqZm9saW9fdG9fbXAoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9mZnNldClcbi0tXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtMjEyLVxuZnMvamZzL2pmc19tZXRhcGFnZS5jOjIxMzpzdGF0aWMgaW5saW5lIGludCBpbnNlcnRfbWV0YXBhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1ldGFwYWdlICptcClcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy0yMTQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDQ4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgSkZTIE1ldGFwYWdlIENvZGUqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gYGZzL2pmcy9qZnNfbWV0YXBhZ2UuY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgYGluc2VydF9tZXRhcGFnZWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBKRlMgaGFuZGxlcyB0aGUgaW5zZXJ0aW9uIG9mIG1ldGFkYXRhIHBhZ2VzLiBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZD8gV2hhdCBsb2NraW5nIG1lY2hhbmlzbXMgYXJlIGVtcGxveWVkIHRvIGVuc3VyZSBjb25zaXN0ZW5jeSBhbmQgcHJldmVudCBjb3JydXB0aW9uIGR1cmluZyBjb25jdXJyZW50IGFjY2Vzcz8KCkkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGJsb2NrIGRldmljZS4gSXMgaXQgYSBkaXJlY3QgSS9PIHBhdGgsIG9yIGRvZXMgaXQgdXRpbGl6ZSB0aGUgcGFnZSBjYWNoZT8gSG93IGFyZSB0aGUgZGlydHkgcGFnZXMgZmx1c2hlZCB0byBkaXNrLCBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zPyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGluZWZmaWNpZW5jaWVzIGluIHRoZSBhbGdvcml0aG0sIGtlZXBpbmcgaW4gbWluZCB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9uIGhlYXZ5IHdvcmtsb2Fkcy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB3cml0ZSBhbXBsaWZpY2F0aW9uIGFyZSBhbHNvIG9uIG15IHJhZGFyLgoKRnVydGhlcm1vcmUsIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nLiBIb3cgcm9idXN0IGlzIHRoZSBjb2RlIGFnYWluc3QgdmFyaW91cyBmYWlsdXJlcywgc3VjaCBhcyBkaXNrIGVycm9ycywgbWVtb3J5IGFsbG9jYXRpb24gcHJvYmxlbXMsIG9yIGluY29uc2lzdGVuY2llcyBpbiB0aGUgSkZTIG1ldGFkYXRhIGl0c2VsZj8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGFyZWFzIGZvciBpbXByb3ZlbWVudCBpbiB0ZXJtcyBvZiBlcnJvciByZXBvcnRpbmcgb3IgcmVjb3Zlcnk/IEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaXMgc3VwcG9zZWQgdG8gYmVoYXZlLgoKRmluYWxseSwgSSYjMzk7bGwgYmUgY29tcGFyaW5nIHRoaXMgY29kZSB0byBzaW1pbGFyIG1lY2hhbmlzbXMgaW4gb3RoZXIgZmlsZXN5c3RlbXMgSSYjMzk7dmUgc3R1ZGllZC4gV2hhdCBhcmUgdGhlIHRyYWRlLW9mZnMgdGhhdCBKRlMgaGFzIG1hZGUgaW4gaXRzIGltcGxlbWVudGF0aW9uPyBBcmUgdGhlcmUgYW55IGNsZXZlciBvcHRpbWl6YXRpb25zIG9yIG5vdmVsIGFwcHJvYWNoZXMgdGhhdCBJIGNhbiBsZWFybiBmcm9tPyBUaGlzIHdpbGwgcHJvdmlkZSBtZSB3aXRoIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IGBpbnNlcnRfbWV0YXBhZ2VgIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIHRoZSBKRlMgZmlsZXN5c3RlbSBhbmQgaG93IGl0IGNhbiBiZSBpbXByb3ZlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9qZnMvamZzX21ldGFwYWdlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDgwOlx0XHRibGtfc3RhdHVzX3Qgc3RhdHVzO1xuICA4MTpcdFx0c3RydWN0IG1ldGFwYWdlICptcFtNUFNfUEVSX1BBR0VdO1xuICA4MjpcdH07XG4gIDgzOlx0XG4gIDg0Olx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbWV0YXBhZ2UgKmZvbGlvX3RvX21wKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvZmZzZXQpXG4gIDg1Olx0e1xuICA4NjpcdFx0c3RydWN0IG1ldGFfYW5jaG9yICphbmNob3IgPSBmb2xpby1cdTAwM2Vwcml2YXRlO1xuICA4NzpcdFxuICA4ODpcdFx0aWYgKCFhbmNob3IpXG4gIDg5Olx0XHRcdHJldHVybiBOVUxMO1xuICA5MDpcdFx0cmV0dXJuIGFuY2hvci1cdTAwM2VtcFtvZmZzZXQgXHUwMDNlXHUwMDNlIEwyUFNJWkVdO1xuICA5MTpcdH1cbiAgOTI6XHRcbiAgOTM6XHRzdGF0aWMgaW5saW5lIGludCBpbnNlcnRfbWV0YXBhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1ldGFwYWdlICptcClcbiAgOTQ6XHR7XG4gIDk1Olx0XHRzdHJ1Y3QgbWV0YV9hbmNob3IgKmE7XG4gIDk2Olx0XHRpbnQgaW5kZXg7XG4gIDk3Olx0XHRpbnQgbDJtcF9ibG9ja3M7XHQvKiBsb2cyIGJsb2NrcyBwZXIgbWV0YXBhZ2UgKi9cbiAgOTg6XHRcbiAgOTk6XHRcdGEgPSBmb2xpby1cdTAwM2Vwcml2YXRlO1xuIDEwMDpcdFx0aWYgKCFhKSB7XG4gMTAxOlx0XHRcdGEgPSBremFsbG9jX29iaihzdHJ1Y3QgbWV0YV9hbmNob3IsIEdGUF9OT0ZTKTtcbiAxMDI6XHRcdFx0aWYgKCFhKVxuIDEwMzpcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDEwNDpcdFx0XHRmb2xpb19hdHRhY2hfcHJpdmF0ZShmb2xpbywgYSk7XG4gMTA1Olx0XHRcdGttYXAoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSk7XG4gMTA2Olx0XHR9XG4gMTA3Olx0XG4gMTA4Olx0XHRpZiAobXApIHtcbiAxMDk6XHRcdFx0bDJtcF9ibG9ja3MgPSBMMlBTSVpFIC0gZm9saW8tXHUwMDNlbWFwcGluZy1cdTAwM2Vob3N0LVx1MDAzZWlfYmxrYml0cztcbiAxMTA6XHRcdFx0aW5kZXggPSAobXAtXHUwMDNlaW5kZXggXHUwMDNlXHUwMDNlIGwybXBfYmxvY2tzKSBcdTAwMjYgKE1QU19QRVJfUEFHRSAtIDEpO1xuIDExMTpcdFx0XHRhLVx1MDAzZW1wX2NvdW50JiM0MzsmIzQzOztcbiAxMTI6XHRcdFx0YS1cdTAwM2VtcFtpbmRleF0gPSBtcDtcbiAxMTM6XHRcdH1cbiAxMTQ6XHRcbiAxMTU6XHRcdHJldHVybiAwO1xuIDExNjpcdH1cbiAxMTc6XHRcbiAxMTg6XHRzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlX21ldGFwYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZXRhcGFnZSAqbXApXG4gMTE5Olx0e1xuIDEyMDpcdFx0c3RydWN0IG1ldGFfYW5jaG9yICphID0gZm9saW8tXHUwMDNlcHJpdmF0ZTtcbiAxMjE6XHRcdGludCBsMm1wX2Jsb2NrcyA9IEwyUFNJWkUgLSBmb2xpby1cdTAwM2VtYXBwaW5nLVx1MDAzZWhvc3QtXHUwMDNlaV9ibGtiaXRzO1xuIDEyMjpcdFx0aW50IGluZGV4O1xuIDEyMzpcdFxuIDEyNDpcdFx0aW5kZXggPSAobXAtXHUwMDNlaW5kZXggXHUwMDNlXHUwMDNlIGwybXBfYmxvY2tzKSBcdTAwMjYgKE1QU19QRVJfUEFHRSAtIDEpO1xuIDEyNTpcdFxuIDEyNjpcdFx0QlVHX09OKGEtXHUwMDNlbXBbaW5kZXhdICE9IG1wKTtcbiAxMjc6XHRcbiAxMjg6XHRcdGEtXHUwMDNlbXBbaW5kZXhdID0gTlVMTDtcbiAxMjk6XHRcdGlmICgtLWEtXHUwMDNlbXBfY291bnQgPT0gMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTczCgkJCQkJCQlvdXRwdXQ6IDIyNQoJCQkJCQkJdGhvdWdodHM6IDY5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbW9yeSBBbGxvY2F0aW9uIEVycm9yIGFuZCBLTVNBTiBBcHBsaWNhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBzZWUgaXQmIzM5O3MgYWJvdXQgYSBtaXNzaW5nIGVycm9yIGNoZWNrIGFmdGVyIGEgbWVtb3J5IGFsbG9jYXRpb24uIFRoZSBgaW5zZXJ0X21ldGFwYWdlYCBmdW5jdGlvbiwgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgaXMgYWxsb2NhdGluZyBhIGBzdHJ1Y3QgbWV0YV9hbmNob3JgLiBUaGUgY3JpdGljYWwgYml0IGlzLCBpZiBga3phbGxvY19vYmpgIGZhaWxzLCBpdCByZXR1cm5zIGAtRU5PTUVNYC4gVGhlIG9yaWdpbmFsIGNvZGUsIGhvd2V2ZXIsIGp1c3QgYmxpdGhlbHkgKmNhbGxlZCogYGluc2VydF9tZXRhcGFnZWAgd2l0aG91dCBjaGVja2luZyB0aGUgcmV0dXJuIHZhbHVlLiBTbywgaWYgdGhlIGFsbG9jYXRpb24gYm9tYmVkLCBgZm9saW8tJmd0O3ByaXZhdGVgIHdvdWxkIHN0YXkgYE5VTExgLCBidXQgdGhlIHByb2dyYW0gd291bGQganVzdCBrZWVwIGNodWdnaW5nIGFsb25nLgoKVGhhdCYjMzk7cyBhIGNsYXNzaWMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHNpdHVhdGlvbiB3YWl0aW5nIHRvIGhhcHBlbiwgb3IgcG90ZW50aWFsbHksIGEgYmlvIGdldHMgc3VibWl0dGVkIHdpdGhvdXQgaXRzIHByaXZhdGUgZGF0YSBzZXQgdXAgcmlnaHQsIGxlYWRpbmcgdG8gZ2FyYmFnZSBkYXRhIG9yIG90aGVyIHVuZGVmaW5lZCBiZWhhdmlvci4gVGhlIHBhdGNoIGFkZHJlc3NlcyB0aGlzIGJ5IGFjdHVhbGx5ICpjaGVja2luZyogdGhlIHJldHVybiB2YWx1ZSBvZiBgaW5zZXJ0X21ldGFwYWdlYCBhbmQgYnJlYWtpbmcgb3V0IG9mIHRoZSBsb29wIGlmIGl0JiMzOTtzIGFuIGVycm9yLgoKVGhlIGltcG9ydGFudCBwb2ludCBpcyB0aGF0IHRoaXMgaXMgKmp1c3QqIGEgc3RhbmRhcmQgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSBhbmQgYSBtaXNzaW5nIGVycm9yIGNoZWNrLiBga3phbGxvY19vYmpgICp6ZXJvZXMqIHRoZSBtZW1vcnkgaXQgYWxsb2NhdGVzLiBUaGVyZSYjMzk7cyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIGhlcmUuIElmIGBremFsbG9jX29iamAgZmFpbHMsIHdlJiMzOTtyZSBub3QgZGVhbGluZyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQsIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBwb2ludGVyIGJlaW5nIGBOVUxMYCB3aGVuIHRoZSBjb2RlICp0aGlua3MqIGl0JiMzOTtzIHZhbGlkLgoKTGV0IG1lIG1ha2Ugc3VyZS4uLklmIGBpbnNlcnRfbWV0YXBhZ2VgIGZhaWxzLCBgcmV0YCBiZWNvbWVzIGAtRU5PTUVNYCwgYW5kIHRoZSBsb29wIGJhaWxzIG91dC4gUHJldmlvdXNseSwgaXQgd291bGQgaGF2ZSBqdXN0IGtlcHQgZ29pbmchIFRoZSBvcmlnaW5hbCBjb2RlIHdvdWxkIGhhdmUgcmV0dXJuZWQgMCwgYWxsb3dpbmcgdGhlIGZvbGlvIHRvIGJlIHJlYWQgZXZlbiB0aG91Z2ggaXQmIzM5O3Mgbm90IHNldCB1cC4gVGhpcyBjb25maXJtcyBteSBpbml0aWFsIHRob3VnaHQ6IGp1c3QgYSBtaXNzaW5nIGVycm9yIGNoZWNrLgoKVGhlcmVmb3JlLCBLTVNBTiBpc24mIzM5O3QgcmVsZXZhbnQgaGVyZS4gS01TQU4gaXMgZm9yIGNhdGNoaW5nIHJlYWRzIG9mICp1bmluaXRpYWxpemVkKiBtZW1vcnksIG5vdCBtZW1vcnkgdGhhdCB3YXMgbmV2ZXIgYWxsb2NhdGVkIGNvcnJlY3RseSBpbiB0aGUgZmlyc3QgcGxhY2UsIG9yIG1lbW9yeSB0aGF0IHdhcyBhbGxvY2F0ZWQgYnV0IHRoZW4gbm90IGFzc2lnbmVkIHRvIHByb3Blcmx5LiBLQVNBTiBhbmQgc3RhbmRhcmQgY2hlY2tzIGZvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIHdpbGwgYmUgcGVyZmVjdGx5IHN1ZmZpY2llbnQgdG8gZGV0ZWN0IHRoaXMgYnVnLCBzaW5jZSBpdCYjMzk7cyBhbiBhY2Nlc3MgdG8gYSB6ZXJvLWZpbGxlZCBgZm9saW8tJmd0O3ByaXZhdGVgIG9yIGEgZGVyZWZlcmVuY2Ugb2YgYSBgTlVMTGAgcG9pbnRlci4KCkhlcmUmIzM5O3MgdGhlIHJlYXNvbmluZyB0byBkb2N1bWVudDogVGhlIHBhdGNoIGNvcnJlY3RseSBhZGRyZXNzZXMgYSBtaXNzaW5nIGVycm9yIGNoZWNrLiBgaW5zZXJ0X21ldGFwYWdlYCBjb3VsZCBmYWlsIGR1cmluZyB0aGUgYWxsb2NhdGlvbiBvZiBhIGBtZXRhX2FuY2hvcmAgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgd2hpY2ggcmV0dXJucyBgLUVOT01FTWAgb24gZmFpbHVyZS4gV2l0aG91dCB0aGUgcGF0Y2gsIHRoZSBjb2RlIHdvdWxkIGNvbnRpbnVlIHRvIHVzZSB0aGUgbWVtb3J5IGFzIGlmIGl0IGhhZCBiZWVuIHN1Y2Nlc3NmdWxseSBhbGxvY2F0ZWQsIHdoaWNoIG1heSBjYXVzZSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIG90aGVyIG1lbW9yeS1yZWxhdGVkIGlzc3VlcyB3aGVuIGFjY2Vzc2luZyBgZm9saW8tJmd0O3ByaXZhdGVgLiBIb3dldmVyLCB0aGUgbWVtb3J5IGlzIGluaXRpYWxpemVkIHZpYSBga3phbGxvY19vYmpgLCBzbyBpdCYjMzk7cyBub3QgYSByZWFkIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCBtZW1vcnkgZXJyb3IgZGV0ZWN0aW9uIGlzIHN1ZmZpY2llbnQsIGFuZCB0aGUgaXNzdWUgaXMgbm90IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLiBOZWVkc0tNU0FOIHNob3VsZCBiZSBmYWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtaXNzaW5nIGVycm9yIGNoZWNrIGZvciBgaW5zZXJ0X21ldGFwYWdlKClgLCB3aGljaCBjYW4gZmFpbCBhbmQgcmV0dXJuIGAtRU5PTUVNYCBpZiBga3phbGxvY19vYmooKWAgZmFpbHMgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBhIGBtZXRhX2FuY2hvcmAgc3RydWN0dXJlLiBXaXRob3V0IHRoaXMgY2hlY2ssIHRoZSBjb2RlIHdvdWxkIGNvbnRpbnVlIGV4ZWN1dGluZyBldmVuIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxlZCwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBvdGhlciBtZW1vcnktcmVsYXRlZCBidWdzIHdoZW4gYGZvbGlvLVx1MDAzZXByaXZhdGVgIGlzIGV4cGVjdGVkIHRvIGJlIGluaXRpYWxpemVkLiBUaGlzIGlzIGEgc3RhbmRhcmQgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSBhbmQgZXJyb3IgaGFuZGxpbmcgYnVnLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIFN0YW5kYXJkIEtBU0FOICh3aGljaCBkZXRlY3RzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIHVzZS1hZnRlci1mcmVlKSBhbmQgYmFzaWMga2VybmVsIGNyYXNoIGRldGVjdGlvbiAoZm9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZSBjb25zZXF1ZW5jZXMgb2YgdGhpcyBidWcuIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUgYmVjYXVzZSB0aGUgbWVtb3J5IGFsbG9jYXRlZCBieSBga3phbGxvY19vYmooKWAgaXMgYWxyZWFkeSB6ZXJvLWluaXRpYWxpemVkLCBhbmQgdGhlIGJ1ZyBkb2VzIG5vdCBpbnZvbHZlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFkZGluZyBieXRlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWlzc2luZyBlcnJvciBjaGVjayBmb3IgYGluc2VydF9tZXRhcGFnZSgpYCwgd2hpY2ggY2FuIGZhaWwgYW5kIHJldHVybiBgLUVOT01FTWAgaWYgYGt6YWxsb2Nfb2JqKClgIGZhaWxzIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgYSBgbWV0YV9hbmNob3JgIHN0cnVjdHVyZS4gV2l0aG91dCB0aGlzIGNoZWNrLCB0aGUgY29kZSB3b3VsZCBjb250aW51ZSBleGVjdXRpbmcgZXZlbiBpZiB0aGUgYWxsb2NhdGlvbiBmYWlsZWQsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3Igb3RoZXIgbWVtb3J5LXJlbGF0ZWQgYnVncyB3aGVuIGBmb2xpby1cdTAwM2Vwcml2YXRlYCBpcyBleHBlY3RlZCB0byBiZSBpbml0aWFsaXplZC4gVGhpcyBpcyBhIHN0YW5kYXJkIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUgYW5kIGVycm9yIGhhbmRsaW5nIGJ1Zy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBTdGFuZGFyZCBLQVNBTiAod2hpY2ggZGV0ZWN0cyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCB1c2UtYWZ0ZXItZnJlZSkgYW5kIGJhc2ljIGtlcm5lbCBjcmFzaCBkZXRlY3Rpb24gKGZvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSBhcmUgc3VmZmljaWVudCB0byBjYXRjaCB0aGUgY29uc2VxdWVuY2VzIG9mIHRoaXMgYnVnLiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlIGJlY2F1c2UgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgYGt6YWxsb2Nfb2JqKClgIGlzIGFscmVhZHkgemVyby1pbml0aWFsaXplZCwgYW5kIHRoZSBidWcgZG9lcyBub3QgaW52b2x2ZSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZGRpbmcgYnl0ZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjAwOjAwLjcyNDY5MDYzNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjgyNDUwMDgxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJKRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJqZnNfZmlsbF9zdXBlclwiLFxuICAgIFwiX19nZXRfbWV0YXBhZ2VcIixcbiAgICBcImRpUmVhZFwiLFxuICAgIFwiZGlXcml0ZVwiLFxuICAgIFwiZGJNb3VudFwiLFxuICAgIFwiZWFfZ2V0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1pc3NpbmcgZXJyb3IgY2hlY2sgZm9yIGBpbnNlcnRfbWV0YXBhZ2UoKWAsIHdoaWNoIGNhbiBmYWlsIGFuZCByZXR1cm4gYC1FTk9NRU1gIGlmIGBremFsbG9jX29iaigpYCBmYWlscyB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGEgYG1ldGFfYW5jaG9yYCBzdHJ1Y3R1cmUuIFdpdGhvdXQgdGhpcyBjaGVjaywgdGhlIGNvZGUgd291bGQgY29udGludWUgZXhlY3V0aW5nIGV2ZW4gaWYgdGhlIGFsbG9jYXRpb24gZmFpbGVkLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIG90aGVyIG1lbW9yeS1yZWxhdGVkIGJ1Z3Mgd2hlbiBgZm9saW8tXFx1MDAzZXByaXZhdGVgIGlzIGV4cGVjdGVkIHRvIGJlIGluaXRpYWxpemVkLiBUaGlzIGlzIGEgc3RhbmRhcmQgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSBhbmQgZXJyb3IgaGFuZGxpbmcgYnVnLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIFN0YW5kYXJkIEtBU0FOICh3aGljaCBkZXRlY3RzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIHVzZS1hZnRlci1mcmVlKSBhbmQgYmFzaWMga2VybmVsIGNyYXNoIGRldGVjdGlvbiAoZm9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZSBjb25zZXF1ZW5jZXMgb2YgdGhpcyBidWcuIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUgYmVjYXVzZSB0aGUgbWVtb3J5IGFsbG9jYXRlZCBieSBga3phbGxvY19vYmooKWAgaXMgYWxyZWFkeSB6ZXJvLWluaXRpYWxpemVkLCBhbmQgdGhlIGJ1ZyBkb2VzIG5vdCBpbnZvbHZlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFkZGluZyBieXRlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbWV0YXBhZ2VfcmVhZF9mb2xpb2AgaW4gdGhlIEpGUyBmaWxlc3lzdGVtIHRvIHByb3Blcmx5IGhhbmRsZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyBmcm9tIGBpbnNlcnRfbWV0YXBhZ2VgLiBUaGlzIGVycm9yIHBhdGggaXMgcmVhY2hhYmxlIG9uIGFyY2hpdGVjdHVyZXMgd2hlcmUgUEFHRV9TSVpFIFxcdTAwM2UgNDA5NiAoZS5nLiwgYXJtNjQsIHBwYzY0KSBhbmQgZml4ZXMgYSBwb3RlbnRpYWwgYnVnIHdoZXJlIHRoZSBlcnJvciB3YXMgaWdub3JlZC4gSXQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIEpGUyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6MDA6MDAuNzI0Njk3NTk2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQzNjYxMzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDVhYTFmYzMxOTgzNmM5YmI1ZGJkNzliYTM2NTFlMWYwOTYxMzM4MlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxOTo1OTo1OCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX21ldGFwYWdlLmMgYi9mcy9qZnMvamZzX21ldGFwYWdlLmNcXG5pbmRleCA0MWZlMTJlNjQxY2VlLi5mZmJiMTg2ZTg1MGM2IDEwMDY0NFxcbi0tLSBhL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuY1xcbisrKyBiL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuY1xcbkBAIC01NzMsNiArNTczLDcgQEAgc3RhdGljIGludCBtZXRhcGFnZV9yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0aW50IHhsZW47XFxuIFxcdHVuc2lnbmVkIGludCBsZW47XFxuIFxcdGludCBvZmZzZXQ7XFxuK1xcdGludCByZXQgPSAwO1xcbiBcXG4gXFx0QlVHX09OKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbykpO1xcbiBcXHRwYWdlX3N0YXJ0ID0gZm9saW9fcG9zKGZvbGlvKSBcXHUwMDNlXFx1MDAzZSBpbm9kZS1cXHUwMDNlaV9ibGtiaXRzO1xcbkBAIC01ODMsOCArNTg0LDExIEBAIHN0YXRpYyBpbnQgbWV0YXBhZ2VfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdFxcdHBibG9jayA9IG1ldGFwYWdlX2dldF9ibG9ja3MoaW5vZGUsIHBhZ2Vfc3RhcnQgKyBibG9ja19vZmZzZXQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnhsZW4pO1xcbiBcXHRcXHRpZiAocGJsb2NrKSB7XFxuLVxcdFxcdFxcdGlmICghZm9saW8tXFx1MDAzZXByaXZhdGUpXFxuLVxcdFxcdFxcdFxcdGluc2VydF9tZXRhcGFnZShmb2xpbywgTlVMTCk7XFxuK1xcdFxcdFxcdGlmICghZm9saW8tXFx1MDAzZXByaXZhdGUpIHtcXG4rXFx0XFx0XFx0XFx0cmV0ID0gaW5zZXJ0X21ldGFwYWdlKGZvbGlvLCBOVUxMKTtcXG4rXFx0XFx0XFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0XFx0aW5jX2lvKGZvbGlvKTtcXG4gXFx0XFx0XFx0aWYgKGJpbylcXG4gXFx0XFx0XFx0XFx0c3VibWl0X2JpbyhiaW8pO1xcbkBAIC02MDcsNyArNjExLDcgQEAgc3RhdGljIGludCBtZXRhcGFnZV9yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0ZWxzZVxcbiBcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbiBcXG4tXFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIG1ldGFwYWdlX3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwX21hc2spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjAwOjAyLjA2OTIwNzIxMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEwNDk1NzkzNzAwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJKRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJqZnNfZmlsbF9zdXBlclwiLFxuICAgIFwiX19nZXRfbWV0YXBhZ2VcIixcbiAgICBcImRpUmVhZFwiLFxuICAgIFwiZGlXcml0ZVwiLFxuICAgIFwiZGJNb3VudFwiLFxuICAgIFwiZWFfZ2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYG1ldGFwYWdlX3JlYWRfZm9saW9gIGluIHRoZSBKRlMgZmlsZXN5c3RlbSB0byBwcm9wZXJseSBoYW5kbGUgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgZnJvbSBgaW5zZXJ0X21ldGFwYWdlYC4gVGhpcyBlcnJvciBwYXRoIGlzIHJlYWNoYWJsZSBvbiBhcmNoaXRlY3R1cmVzIHdoZXJlIFBBR0VfU0laRSBcXHUwMDNlIDQwOTYgKGUuZy4sIGFybTY0LCBwcGM2NCkgYW5kIGZpeGVzIGEgcG90ZW50aWFsIGJ1ZyB3aGVyZSB0aGUgZXJyb3Igd2FzIGlnbm9yZWQuIEl0IGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBKRlMgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQ1YWExZmMzMTk4MzZjOWJiNWRiZDc5YmEzNjUxZTFmMDk2MTMzODJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxOTo1OTo1OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuYyBiL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuY1xuaW5kZXggNDFmZTEyZTY0MWNlZS4uZmZiYjE4NmU4NTBjNiAxMDA2NDRcbi0tLSBhL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuY1xuKysrIGIvZnMvamZzL2pmc19tZXRhcGFnZS5jXG5AQCAtNTczLDYgKzU3Myw3IEBAIHN0YXRpYyBpbnQgbWV0YXBhZ2VfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRpbnQgeGxlbjtcbiBcdHVuc2lnbmVkIGludCBsZW47XG4gXHRpbnQgb2Zmc2V0O1xuK1x0aW50IHJldCA9IDA7XG4gXG4gXHRCVUdfT04oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSk7XG4gXHRwYWdlX3N0YXJ0ID0gZm9saW9fcG9zKGZvbGlvKSBcdTAwM2VcdTAwM2UgaW5vZGUtXHUwMDNlaV9ibGtiaXRzO1xuQEAgLTU4Myw4ICs1ODQsMTEgQEAgc3RhdGljIGludCBtZXRhcGFnZV9yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFx0cGJsb2NrID0gbWV0YXBhZ2VfZ2V0X2Jsb2Nrcyhpbm9kZSwgcGFnZV9zdGFydCArIGJsb2NrX29mZnNldCxcbiBcdFx0XHRcdFx0ICAgICBcdTAwMjZ4bGVuKTtcbiBcdFx0aWYgKHBibG9jaykge1xuLVx0XHRcdGlmICghZm9saW8tXHUwMDNlcHJpdmF0ZSlcbi1cdFx0XHRcdGluc2VydF9tZXRhcGFnZShmb2xpbywgTlVMTCk7XG4rXHRcdFx0aWYgKCFmb2xpby1cdTAwM2Vwcml2YXRlKSB7XG4rXHRcdFx0XHRyZXQgPSBpbnNlcnRfbWV0YXBhZ2UoZm9saW8sIE5VTEwpO1xuK1x0XHRcdFx0aWYgKHJldClcbitcdFx0XHRcdFx0YnJlYWs7XG4rXHRcdFx0fVxuIFx0XHRcdGluY19pbyhmb2xpbyk7XG4gXHRcdFx0aWYgKGJpbylcbiBcdFx0XHRcdHN1Ym1pdF9iaW8oYmlvKTtcbkBAIC02MDcsNyArNjExLDcgQEAgc3RhdGljIGludCBtZXRhcGFnZV9yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGVsc2VcbiBcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGJvb2wgbWV0YXBhZ2VfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnBfbWFzaylcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjAwOjAyLjA2OTIwODU0MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNzA1MzczOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgSkZTIE1ldGFwYWdlIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIEpGUyBmaWxlIHN5c3RlbSwgc3BlY2lmaWNhbGx5IGluIGBmcy9qZnMvamZzX21ldGFwYWdlLmNgLiBUaGV5J3ZlIG1vZGlmaWVkIHRoZSBgbWV0YXBhZ2VfcmVhZF9mb2xpb2AgZnVuY3Rpb24sIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJdCBzZWVtcyBsaWtlIHRoZXkncmUgemVyb2luZyBpbiBvbiBlcnJvciBoYW5kbGluZyByZWxhdGVkIHRvIGhvdyBtZXRhZGF0YSBwYWdlcyBhcmUgYnJvdWdodCBpbnRvIG1lbW9yeS5cblxuRnJvbSB3aGF0IEkgY2FuIHRlbGwsIHRoZSBrZXkgY2hhbmdlIGludm9sdmVzIGNoZWNraW5nIHRoZSByZXR1cm4gdmFsdWUgb2YgYGluc2VydF9tZXRhcGFnZShmb2xpbywgTlVMTClgIHdpdGhpbiB0aGF0IGBtZXRhcGFnZV9yZWFkX2ZvbGlvYCBmdW5jdGlvbi4gSWYgYGluc2VydF9tZXRhcGFnZWAgdGhyb3dzIGFuIGVycm9yLCB0aGUgcGF0Y2ggY29ycmVjdGx5IGJyZWFrcyBvdXQgb2YgdGhlIGxvb3AgYW5kIHJldHVybnMgdGhhdCBlcnJvci4gVGhhdOKAmXMgZ29vZCBwcmFjdGljZSB0byBtYWtlIHN1cmUgeW91IHJldHVybiB0aGUgZXJyb3IgY29kZS5cblxuTm93LCBJIG5lZWQgdG8gZGlnIGludG8gYG1ldGFwYWdlX3JlYWRfZm9saW9gIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgYGluc2VydF9tZXRhcGFnZWAgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBoZXJlLiBJIHdhbnQgdG8gc2VlIHdoYXQgc2NlbmFyaW9zIG1pZ2h0IHRyaWdnZXIgYW4gZXJyb3IgZnJvbSBgaW5zZXJ0X21ldGFwYWdlYCBhbmQgaWYgdGhlIGhhbmRsaW5nIGluIHRoaXMgcGF0Y2ggaXMgc3VmZmljaWVudC4gSXMgdGhlcmUgYW55IGNoYW5jZSBvZiByZXNvdXJjZSBsZWFrcyBvciBtaXNzZWQgZXJyb3IgY29uZGl0aW9ucyB0aGF0IGNvdWxkIGJlIGltcHJvdmVkPyBJIGFsc28gd2FudCB0byBjaGVjayB0aGUgcmVzdCBvZiB0aGUgY29kZSBmb3IgYW55IHJlbGF0ZWQgZXJyb3IgaGFuZGxpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMzIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDowMDowNi4yMzk3NDkwN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjE4NDEzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnNlcnRfbWV0YXBhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvamZzL2pmc19tZXRhcGFnZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2pmcy9qZnNfbWV0YXBhZ2UuYz04ND1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZXRhcGFnZSAqZm9saW9fdG9fbXAoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9mZnNldClcXG4tLVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy05Mi1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmM6OTM6c3RhdGljIGlubGluZSBpbnQgaW5zZXJ0X21ldGFwYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZXRhcGFnZSAqbXApXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTk0LXtcXG4tLVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYz0xNTY9c3RhdGljIGludCBfX21ldGFwYWdlX21pZ3JhdGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtMTc4LVxcdFxcdFxcdGNvbnRpbnVlO1xcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzoxNzk6XFx0XFx0aWYgKHVubGlrZWx5KGluc2VydF9tZXRhcGFnZShkc3QsIG1wKSkpIHtcXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtMTgwLVxcdFxcdFxcdC8qIElmIGVycm9yLCByb2xsLWJhY2sgcHJldmlvc2x5IGluc2VydGVkIHBhZ2VzICovXFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmM9MjA4PXN0YXRpYyBpbmxpbmUgc3RydWN0IG1ldGFwYWdlICpmb2xpb190b19tcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2Zmc2V0KVxcbi0tXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTIxMi1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmM6MjEzOnN0YXRpYyBpbmxpbmUgaW50IGluc2VydF9tZXRhcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWV0YXBhZ2UgKm1wKVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy0yMTQte1xcbi0tXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jPTIzMj1zdGF0aWMgaW50IF9fbWV0YXBhZ2VfbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy0yNDctXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jOjI0ODpcXHRpZiAodW5saWtlbHkoaW5zZXJ0X21ldGFwYWdlKGRzdCwgbXApKSlcXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtMjQ5LVxcdFxcdHJldHVybiAtRUFHQUlOO1xcbi0tXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jPTU2NT1zdGF0aWMgaW50IG1ldGFwYWdlX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTU4Ny1cXHRcXHRcXHRpZiAoIWZvbGlvLVxcdTAwM2Vwcml2YXRlKSB7XFxuZnMvamZzL2pmc19tZXRhcGFnZS5jOjU4ODpcXHRcXHRcXHRcXHRyZXQgPSBpbnNlcnRfbWV0YXBhZ2UoZm9saW8sIE5VTEwpO1xcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy01ODktXFx0XFx0XFx0XFx0aWYgKHJldClcXG4tLVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYz02ODg9c3RydWN0IG1ldGFwYWdlICpfX2dldF9tZXRhcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBsb25nIGxibG9jayxcXG4tLVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy03NzYtXFx0XFx0bXAtXFx1MDAzZWluZGV4ID0gbGJsb2NrO1xcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzo3Nzc6XFx0XFx0aWYgKHVubGlrZWx5KGluc2VydF9tZXRhcGFnZShmb2xpbywgbXApKSkge1xcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy03NzgtXFx0XFx0XFx0ZnJlZV9tZXRhcGFnZShtcCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjAwOjA2LjI5NTkzOThaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODEwNzk3ODUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIEpGUyBGaWxlc3lzdGVtOiBBIFRhcmdldCBBcHBlYXJzKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbWV0YXBhZ2VfcmVhZF9mb2xpb2Agd2l0aGluIGBmcy9qZnMvamZzX21ldGFwYWdlLmNgLiBSaWdodCwgdGhhdCdzIEpGUyDigJMgYSBmaWxlIHN5c3RlbSwgc3BlY2lmaWNhbGx5LiBNeSBleHBlcnQgaW50dWl0aW9uIGlzIGltbWVkaWF0ZWx5IHBpcXVlZDsgYW55IGxvdy1sZXZlbCBmaWxlc3lzdGVtIGNvZGUgbGlrZSB0aGlzIGlzIHByYWN0aWNhbGx5IGJlZ2dpbmcgZm9yIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbi4gVGhlIHBvdGVudGlhbCBmb3IgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3RoZXIgdnVsbmVyYWJpbGl0aWVzIGhlcmUgaXMgc2lnbmlmaWNhbnQuXG5cbk5vdywgYmVmb3JlIEkgZGl2ZSBpbiB0b28gZGVlcCwgbGV0J3MganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZy4gSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgSkZTIGZpbGVzeXN0ZW0gaXMgYWN0dWFsbHkgZW5hYmxlZCBhbmQgdGhhdCBhbnkgZGVwZW5kZW5jaWVzIGFyZSBhY2NvdW50ZWQgZm9yIGJlZm9yZSBJIGdvIHNldHRpbmcgdXAgbXkgZnV6emluZyBlbnZpcm9ubWVudC4gTm8gcG9pbnQgc3BlbmRpbmcgYSBidW5jaCBvZiB0aW1lIG9uIHNvbWV0aGluZyB0aGF0J3Mgbm90IGV2ZW4gYnVpbHQgaW50byB0aGUga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzkyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6MDA6MTAuMTA2NzQwNzIyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMjM4NDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBKRlNfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvamZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvamZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9qZnMvS2NvbmZpZzoyOmNvbmZpZyBKRlNfRlNcXG5mcy9qZnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJKRlMgZmlsZXN5c3RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDowMDoxMC4xNjY5ODUxOTFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODY0NTQwMjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpdmluZyBpbnRvIGBtZXRhcGFnZV9yZWFkX2ZvbGlvYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdGhlIGNvbmZpZyBpcyBkZWZpbml0ZWx5IHNldCB0byBgSkZTX0ZTYC4gUmlnaHQsIGdvdCBpdC4gTm93LCBteSBmb2N1cyBpcyBvbiB0aGlzIGBtZXRhcGFnZV9yZWFkX2ZvbGlvYCBmdW5jdGlvbi4gSG9sZCBvbi4uLiBpc24ndCB0aGF0IGEgc3RhdGljIGZ1bmN0aW9uPyBUaGF0J3MgaW50ZXJlc3RpbmcsIHVzdWFsbHkgbWVhbnMgaXQncyBsaW1pdGVkIGluIHNjb3BlLiBMZXQgbWUgcXVpY2tseSBjaGVjayBpZiBpdCdzIGFzc2lnbmVkIHRvIGFueSBzdHJ1Y3Q7IHRoYXQnbGwgZ2l2ZSBtZSBhIGJldHRlciBoYW5kbGUgb24gaXRzIGNvbnRleHQgYW5kIGhvdyBpdCdzIGJlaW5nIGNhbGxlZCB3aXRoaW4gdGhlIHN5c3RlbS4gR290dGEgZmlndXJlIG91dCBpdHMgYXNzb2NpYXRpb25zIVxuXG5cbiIsIklucHV0VG9rZW5zIjozNzI3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6MDA6MTMuMDMxNTI4OTUyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMDAzNTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1ldGFwYWdlX3JlYWRfZm9saW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvamZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9qZnMvamZzX21ldGFwYWdlLmM9NTUwPXN0YXRpYyBpbnQgbWV0YXBhZ2Vfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy01NjQtXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jOjU2NTpzdGF0aWMgaW50IG1ldGFwYWdlX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy01NjYte1xcbi0tXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jPTY3OT1jb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGpmc19tZXRhcGFnZV9hb3BzID0ge1xcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzo2ODA6XFx0LnJlYWRfZm9saW9cXHQ9IG1ldGFwYWdlX3JlYWRfZm9saW8sXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTY4MS1cXHQud3JpdGVwYWdlc1xcdD0gbWV0YXBhZ2Vfd3JpdGVwYWdlcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6MDA6MTMuMDk0NTM5NzUyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAyMzA2NDYwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBgamZzX21ldGFwYWdlX2FvcHMucmVhZF9mb2xpb2AgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgamZzX21ldGFwYWdlX2FvcHMucmVhZF9mb2xpb2AuIFRoZSBzeXN0ZW0gaGFzIGFzc2lnbmVkIHRoaXMgZnVuY3Rpb24gdG8gbWUsIGFuZCBteSBpbml0aWFsIHF1ZXN0aW9uIGlzLCB3aGVyZSBkb2VzIGl0IGxpdmUgaW4gdGhlIGJyb2FkZXIgcGljdHVyZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNhbGwgZ3JhcGguIElzIHRoZXJlIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiB0aGF0IGRpcmVjdGx5IGNhbGxzIGBqZnNfbWV0YXBhZ2VfYW9wcy5yZWFkX2ZvbGlvYCwgb3IgcGVyaGFwcyBpbmRpcmVjdGx5ICp1c2VzKiBpdCB3aXRoaW4gaXRzIGV4ZWN1dGlvbiBmbG93PyBJIG5lZWQgdG8gdHJhY2UgdGhpcyBmdW5jdGlvbidzIGRlcGVuZGVuY2llcy5cblxuTmV4dCwgSSBuZWVkIHRvIGxvb2sgZm9yIHdoZXJlIGBqZnNfbWV0YXBhZ2VfYW9wc2AgaXRzZWxmIGlzIGRlY2xhcmVkLCBhbmQgd2hlcmUgaXQgaXMgaW5zdGFudGlhdGVkIGFuZCB1c2VkLiBJJ2xsIGJldCBpdCdzIHNvbWV3aGVyZSBkZWVwIHdpdGhpbiB0aGUgSkZTIGZpbGUgc3lzdGVtIGltcGxlbWVudGF0aW9uLiBUaGUgZmlsZSBgZnMvamZzL2pmc19tb3VudC5jYCBvciBzb21ldGhpbmcgc2ltaWxhciBpbW1lZGlhdGVseSBjb21lcyB0byBtaW5kIGFzIGEgbGlrZWx5IGNhbmRpZGF0ZSDigJMgdGhhdCdzIG9mdGVuIHdoZXJlIHRoZSBjb3JlIG1vdW50IG9wdGlvbnMgYW5kIHN0cnVjdHVyZXMgZm9yIGEgZmlsZXN5c3RlbSBhcmUgZGVmaW5lZC4gSSdsbCBzdGFydCBieSBjaGVja2luZyB0aGVyZSwgYW5kIHRoZW4gZXhwYW5kIG15IHNlYXJjaCBhcyBuZWNlc3NhcnkuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNjksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDowMDoxNy4xMTc2MDc0NzFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MjgzMjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImpmc19tZXRhcGFnZV9hb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2pmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvamZzL2pmc19pbWFwLmM9NDE4PXN0cnVjdCBpbm9kZSAqZGlSZWFkU3BlY2lhbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbm9fdCBpbnVtLCBpbnQgc2Vjb25kYXJ5KVxcbi0tXFxuZnMvamZzL2pmc19pbWFwLmMtNDY4LVxcbmZzL2pmcy9qZnNfaW1hcC5jOjQ2OTpcXHRpcC1cXHUwMDNlaV9tYXBwaW5nLVxcdTAwM2VhX29wcyA9IFxcdTAwMjZqZnNfbWV0YXBhZ2VfYW9wcztcXG5mcy9qZnMvamZzX2ltYXAuYy00NzAtXFx0bWFwcGluZ19zZXRfZ2ZwX21hc2soaXAtXFx1MDAzZWlfbWFwcGluZywgR0ZQX05PRlMpO1xcbi0tXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jPTY2OT1zdGF0aWMgdm9pZCBtZXRhcGFnZV9pbnZhbGlkYXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsXFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtNjc4LVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzo2Nzk6Y29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBqZnNfbWV0YXBhZ2VfYW9wcyA9IHtcXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtNjgwLVxcdC5yZWFkX2ZvbGlvXFx0PSBtZXRhcGFnZV9yZWFkX2ZvbGlvLFxcbi0tXFxuZnMvamZzL2pmc19tZXRhcGFnZS5oPTEyMj1zdGF0aWMgaW5saW5lIHZvaWQgbWV0YXBhZ2VfaG9tZW9rKHN0cnVjdCBtZXRhcGFnZSAqbXApXFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmgtMTI4LVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuaDoxMjk6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgamZzX21ldGFwYWdlX2FvcHM7XFxuZnMvamZzL2pmc19tZXRhcGFnZS5oLTEzMC1cXG4tLVxcbmZzL2pmcy9zdXBlci5jPTQ0MT1zdGF0aWMgaW50IGpmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL2pmcy9zdXBlci5jLTUxNy1cXHRpbm9kZS1cXHUwMDNlaV9zaXplID0gYmRldl9ucl9ieXRlcyhzYi1cXHUwMDNlc19iZGV2KTtcXG5mcy9qZnMvc3VwZXIuYzo1MTg6XFx0aW5vZGUtXFx1MDAzZWlfbWFwcGluZy1cXHUwMDNlYV9vcHMgPSBcXHUwMDI2amZzX21ldGFwYWdlX2FvcHM7XFxuZnMvamZzL3N1cGVyLmMtNTE5LVxcdGlub2RlX2Zha2VfaGFzaChpbm9kZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjAwOjE3LjE3MjkwMDg3MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDU2MTc4NDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpdmluZyBpbnRvIEpGUyBCbG9jayBEZXZpY2UgTWFwcGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGUgSkZTIGZpbGVzeXN0ZW0gaGFuZGxlcyBpdHMgYmxvY2sgZGV2aWNlIG1hcHBpbmcuIEl0IHNlZW1zIGBqZnNfbWV0YXBhZ2VfYW9wc2AgaXMgdGhlIGtleS4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuIFRoYXQncyB0aGUgc3RydWN0dXJlIHRoYXQncyBnb2luZyB0byBtYW5hZ2UgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGZpbGUgc3lzdGVtJ3MgbWV0YWRhdGEgYW5kIHRoZSB1bmRlcmx5aW5nIGJsb2NrIGRldmljZS4gQW5kLCB0aGUgYHJlYWRfZm9saW9gIG9wZXJhdGlvbiBpcyB0aGUgb25lIHRoZSBWRlMgY2FsbHMgb24gdGhhdCBhb3BzIHN0cnVjdHVyZSB3aGVuIHRoZSBzeXN0ZW0gbmVlZHMgdG8gcmVhZCBmcm9tIHRoZSBibG9jayBkZXZpY2UgbWFwcGluZywgb3IgZm9yIHJlYWRpbmcgc3BlY2lhbCBpbm9kZXMuIFRoYXQncyBhIGNyaXRpY2FsIHBpZWNlLlxuXG5Ob3csIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBrZXkgZW50cnkgcG9pbnRzIGZvciBKRlMuIFRoaW5ncyBsaWtlIGBqZnNfbW91bnRgLCBgamZzX2ZpbGxfc3VwZXJgLCBgamZzX2lnZXRgLCBgamZzX2xvb2t1cGAsIGFuZCBgamZzX3JlYWRkaXJgLCBhcmUgYWxsIGdvb2QgY2FuZGlkYXRlcyB0byBmb2N1cyBvbiBhbmQgZ2V0IGEgc3Ryb25nIHVuZGVyc3RhbmRpbmcuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aG9zZSBhbmQgc2VlIGhvdyB0aGV5IHdvcmsgdG9nZXRoZXIgdG8gbWFrZSB0aGUgd2hvbGUgdGhpbmcgdGljay4gTGV0J3Mgc2VlIGlmIEkgY2FuIGZpbmQgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwMzgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6MDA6MjEuMjI5MDgyODFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTExMDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImpmc19maWxsX3N1cGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2pmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvamZzL3N1cGVyLmM9MzYxPXN0YXRpYyBpbnQgamZzX3JlY29uZmlndXJlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL2pmcy9zdXBlci5jLTQ0MC1cXG5mcy9qZnMvc3VwZXIuYzo0NDE6c3RhdGljIGludCBqZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuZnMvamZzL3N1cGVyLmMtNDQyLXtcXG4tLVxcbmZzL2pmcy9zdXBlci5jPTYzND1zdGF0aWMgaW50IGpmc19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuZnMvamZzL3N1cGVyLmMtNjM1LXtcXG5mcy9qZnMvc3VwZXIuYzo2MzY6XFx0cmV0dXJuIGdldF90cmVlX2JkZXYoZmMsIGpmc19maWxsX3N1cGVyKTtcXG5mcy9qZnMvc3VwZXIuYy02MzctfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDowMDoyMS4yNzQwMDAxOTlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEwODMwMjcwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ29uc2lkZXJpbmcgUG90ZW50aWFsIEVudHJ5IFBvaW50cyoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IGZ1bmN0aW9ucyBwb3RlbnRpYWxseSBpbnZvbHZlZCBpbiBzb21lIGtleSBhc3BlY3Qgb2YgdGhlIGZpbGUgc3lzdGVtLiBgamZzX2ZpbGxfc3VwZXJgIGlzIGRlZmluaXRlbHkgYSBzdHJvbmcgY29udGVuZGVyLCBhIGNsYXNzaWMgc3RhcnRpbmcgcG9pbnQgZm9yIHRoZSBmaWxlIHN5c3RlbSdzIGluaXRpYWxpemF0aW9uLiBCdXQsIGxldCdzIG5vdCBqdW1wIHRvIGNvbmNsdXNpb25zLlxuXG5JJ20gYWxzbyBwb25kZXJpbmcgYF9fZ2V0X21ldGFwYWdlYCBhbmQgYHJlYWRfbWV0YXBhZ2VgLiBUaGV5IHNlZW0gcmVsYXRlZCB0byBob3cgbWV0YWRhdGEsIHNwZWNpZmljYWxseSBtZXRhcGFnZXMsIGFyZSBoYW5kbGVkLiBEZXBlbmRpbmcgb24gd2hhdCB3ZSdyZSBpbnZlc3RpZ2F0aW5nLCB0aG9zZSBjb3VsZCBiZSBjcnVjaWFsLiBJdCdzIHRvbyBlYXJseSB0byBjaG9vc2UgZGVmaW5pdGl2ZWx5LCBidXQgSSdsbCBtYWtlIGEgbm90ZSBvZiBib3RoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjEyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6MDA6MjQuMzgyMzA1MDM4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODk4OTgxMjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19nZXRfbWV0YXBhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvamZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9qZnMvamZzX21ldGFwYWdlLmM9Njc5PWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgamZzX21ldGFwYWdlX2FvcHMgPSB7XFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtNjg3LVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzo2ODg6c3RydWN0IG1ldGFwYWdlICpfX2dldF9tZXRhcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBsb25nIGxibG9jayxcXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtNjg5LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBzaXplLCBpbnQgYWJzb2x1dGUsXFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtNjk5LVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzo3MDA6XFx0amZzX2luZm8oXFxcIl9fZ2V0X21ldGFwYWdlOiBpbm8gPSAlbGx1LCBsYmxvY2sgPSAweCVseCwgYWJzPSVkXFxcIixcXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtNzAxLVxcdFxcdCBpbm9kZS1cXHUwMDNlaV9pbm8sIGxibG9jaywgYWJzb2x1dGUpO1xcbi0tXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTc4OS1cXHRmb2xpb191bmxvY2soZm9saW8pO1xcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzo3OTA6XFx0amZzX2luZm8oXFxcIl9fZ2V0X21ldGFwYWdlOiByZXR1cm5pbmcgPSAweCVwIGRhdGEgPSAweCVwXFxcIiwgbXAsIG1wLVxcdTAwM2VkYXRhKTtcXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtNzkxLVxcdHJldHVybiBtcDtcXG4tLVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuaD00OT1leHRlcm4gdm9pZCBtZXRhcGFnZV9leGl0KHZvaWQpO1xcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuaDo1MDpleHRlcm4gc3RydWN0IG1ldGFwYWdlICpfX2dldF9tZXRhcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuaC01MS1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgbGJsb2NrLCB1bnNpZ25lZCBpbnQgc2l6ZSxcXG4tLVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuaC01NC0jZGVmaW5lIHJlYWRfbWV0YXBhZ2UoaW5vZGUsIGxibG9jaywgc2l6ZSwgYWJzb2x1dGUpXFxcXFxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuaDo1NTpcXHQgX19nZXRfbWV0YXBhZ2UoaW5vZGUsIGxibG9jaywgc2l6ZSwgYWJzb2x1dGUsIGZhbHNlKVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuaC01Ni1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmgtNTctI2RlZmluZSBnZXRfbWV0YXBhZ2UoaW5vZGUsIGxibG9jaywgc2l6ZSwgYWJzb2x1dGUpXFxcXFxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuaDo1ODpcXHQgX19nZXRfbWV0YXBhZ2UoaW5vZGUsIGxibG9jaywgc2l6ZSwgYWJzb2x1dGUsIHRydWUpXFxuZnMvamZzL2pmc19tZXRhcGFnZS5oLTU5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDowMDoyNC43NzIyMDc2NzRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA1ODM4MTEwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCB3aXRoIGEgZm9jdXMgZm9yIGFuIGV4cGVydCBsaWtlIHlvdXJzZWxmOlxuXG4qKklkZW50aWZ5aW5nIEtleSBLZXJuZWwgU3ltYm9scyBmb3IgQW5hbHlzaXMqKlxuXG5SaWdodCwgbGV0J3Mgc2VlLiBgX19nZXRfbWV0YXBhZ2VgIGlzIGV4cG9ydGVkLCBtZWFuaW5nIGl0J3MgYSBjcml0aWNhbCBlbnRyeSBwb2ludCBvciBmdW5jdGlvbiBwb3RlbnRpYWxseSB1c2VkIGJ5IG90aGVyIG1vZHVsZXMsIGFuZCBpdCdzIG5vbi1zdGF0aWMsIHNvIGl0J3MgZ2xvYmFsbHkgdmlzaWJsZSB3aXRoaW4gdGhlIHJlbGV2YW50IG5hbWVzcGFjZS4gSXQgbG9va3MgbGlrZSBpdCdzIGEgcHJldHR5IGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBkZWVwZXIuIEl0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdCBhcyBhIGxpa2VseSBmb2N1cyBzeW1ib2wgZm9yIGRlZXBlciBhbmFseXNpcy5cblxuQW5kIGBqZnNfZmlsbF9zdXBlcmAgaXMgYW5vdGhlciBnb29kIG9uZS4gQmFzZWQgb24gaXRzIG5hbWUsIGl0J3Mgb2J2aW91c2x5IHJlbGF0ZWQgdG8gdGhlIGZpbGVzeXN0ZW0uIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBsb29rIGludG8gdGhhdC5cblxuTm93LCBsZXQgbWUgc2VlIGlmIEkgY2FuIGZpbmQgc29tZSBvdGhlciBwb3RlbnRpYWxseSB2YWx1YWJsZSBjYW5kaWRhdGVzIGZvciBkZWVwZXIgYW5hbHlzaXMuIFRoZXJlJ3MgcHJvYmFibHkgbW9yZS4uLiBUaW1lIHRvIHN0YXJ0IGxvb2tpbmcgYXJvdW5kIGZvciByZWxhdGVkIHN5bWJvbHMuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ0NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjAwOjI4LjgzMDU5MjA0M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA4ODIyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVhZF9tZXRhcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9qZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2pmcy9qZnNfYnRyZWUuaD0xNz1zdHJ1Y3QgYnRwYWdlIHtcXG4tLVxcbmZzL2pmcy9qZnNfYnRyZWUuaC02My1cXHR7XFxcXFxcbmZzL2pmcy9qZnNfYnRyZWUuaDo2NDpcXHRcXHRNUCA9IHJlYWRfbWV0YXBhZ2UoKElQKSwgQk4sIFNJWkUsIDEpO1xcXFxcXG5mcy9qZnMvamZzX2J0cmVlLmgtNjUtXFx0XFx0aWYgKE1QKSB7XFxcXFxcbi0tXFxuZnMvamZzL2pmc19kbWFwLmM9MjQwPWludCBkYk1vdW50KHN0cnVjdCBpbm9kZSAqaXBibWFwKVxcbi0tXFxuZnMvamZzL2pmc19kbWFwLmMtMjU1LVxcdC8qIHJlYWQgdGhlIG9uLWRpc2sgYm1hcCBkZXNjcmlwdG9yLiAqL1xcbmZzL2pmcy9qZnNfZG1hcC5jOjI1NjpcXHRtcCA9IHJlYWRfbWV0YXBhZ2UoaXBibWFwLFxcbmZzL2pmcy9qZnNfZG1hcC5jLTI1Ny1cXHRcXHRcXHQgICBCTUFQQkxLTk8gXFx1MDAzY1xcdTAwM2MgSkZTX1NCSShpcGJtYXAtXFx1MDAzZWlfc2IpLVxcdTAwM2VsMm5icGVycGFnZSxcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jPTM2Mz1pbnQgZGJTeW5jKHN0cnVjdCBpbm9kZSAqaXBibWFwKVxcbi0tXFxuZnMvamZzL2pmc19kbWFwLmMtMzczLVxcdC8qIGdldCB0aGUgYnVmZmVyIGZvciB0aGUgb24tZGlzayBibWFwIGRlc2NyaXB0b3IuICovXFxuZnMvamZzL2pmc19kbWFwLmM6Mzc0OlxcdG1wID0gcmVhZF9tZXRhcGFnZShpcGJtYXAsXFxuZnMvamZzL2pmc19kbWFwLmMtMzc1LVxcdFxcdFxcdCAgIEJNQVBCTEtOTyBcXHUwMDNjXFx1MDAzYyBKRlNfU0JJKGlwYm1hcC1cXHUwMDNlaV9zYiktXFx1MDAzZWwybmJwZXJwYWdlLFxcbi0tXFxuZnMvamZzL2pmc19kbWFwLmMtMzc3LVxcdGlmIChtcCA9PSBOVUxMKSB7XFxuZnMvamZzL2pmc19kbWFwLmM6Mzc4OlxcdFxcdGpmc19lcnIoXFxcImRiU3luYzogcmVhZF9tZXRhcGFnZSBmYWlsZWQhXFxcIik7XFxuZnMvamZzL2pmc19kbWFwLmMtMzc5LVxcdFxcdHJldHVybiAtRUlPO1xcbi0tXFxuZnMvamZzL2pmc19kbWFwLmM9NDMxPWludCBkYkZyZWUoc3RydWN0IGlub2RlICppcCwgczY0IGJsa25vLCBzNjQgbmJsb2NrcylcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jLTQ3MS1cXHRcXHRsYmxrbm8gPSBCTEtUT0RNQVAoYmxrbm8sIGJtcC1cXHUwMDNlZGJfbDJuYnBlcnBhZ2UpO1xcbmZzL2pmcy9qZnNfZG1hcC5jOjQ3MjpcXHRcXHRtcCA9IHJlYWRfbWV0YXBhZ2UoaXBibWFwLCBsYmxrbm8sIFBTSVpFLCAwKTtcXG5mcy9qZnMvamZzX2RtYXAuYy00NzMtXFx0XFx0aWYgKG1wID09IE5VTEwpIHtcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jPTUyNT1kYlVwZGF0ZVBNYXAoc3RydWN0IGlub2RlICppcGJtYXAsXFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYy01NjUtXFxuZnMvamZzL2pmc19kbWFwLmM6NTY2OlxcdFxcdFxcdG1wID0gcmVhZF9tZXRhcGFnZShibXAtXFx1MDAzZWRiX2lwYm1hcCwgbGJsa25vLCBQU0laRSxcXG5mcy9qZnMvamZzX2RtYXAuYy01NjctXFx0XFx0XFx0XFx0XFx0ICAgMCk7XFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYz04MDE9aW50IGRiQWxsb2Moc3RydWN0IGlub2RlICppcCwgczY0IGhpbnQsIHM2NCBuYmxvY2tzLCBzNjQgKiByZXN1bHRzKVxcbi0tXFxuZnMvamZzL2pmc19kbWFwLmMtODgyLVxcdFxcdGxibGtubyA9IEJMS1RPRE1BUChibGtubywgYm1wLVxcdTAwM2VkYl9sMm5icGVycGFnZSk7XFxuZnMvamZzL2pmc19kbWFwLmM6ODgzOlxcdFxcdG1wID0gcmVhZF9tZXRhcGFnZShpcGJtYXAsIGxibGtubywgUFNJWkUsIDApO1xcbmZzL2pmcy9qZnNfZG1hcC5jLTg4NC1cXHRcXHRpZiAobXAgPT0gTlVMTClcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jPTEwNTk9c3RhdGljIGludCBkYkV4dGVuZChzdHJ1Y3QgaW5vZGUgKmlwLCBzNjQgYmxrbm8sIHM2NCBuYmxvY2tzLCBzNjQgYWRkbmJsb2NrcylcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jLTExMTItXFx0bGJsa25vID0gQkxLVE9ETUFQKGV4dGJsa25vLCBibXAtXFx1MDAzZWRiX2wybmJwZXJwYWdlKTtcXG5mcy9qZnMvamZzX2RtYXAuYzoxMTEzOlxcdG1wID0gcmVhZF9tZXRhcGFnZShpcGJtYXAsIGxibGtubywgUFNJWkUsIDApO1xcbmZzL2pmcy9qZnNfZG1hcC5jLTExMTQtXFx0aWYgKG1wID09IE5VTEwpIHtcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jPTEzOTk9ZGJBbGxvY0FHKHN0cnVjdCBibWFwICogYm1wLCBpbnQgYWdubywgczY0IG5ibG9ja3MsIGludCBsMm5iLCBzNjQgKiByZXN1bHRzKVxcbi0tXFxuZnMvamZzL2pmc19kbWFwLmMtMTQ1NS1cXHRsYmxrbm8gPSBCTEtUT0NUTChibGtubywgYm1wLVxcdTAwM2VkYl9sMm5icGVycGFnZSwgYm1wLVxcdTAwM2VkYl9hZ2xldmVsKTtcXG5mcy9qZnMvamZzX2RtYXAuYzoxNDU2OlxcdG1wID0gcmVhZF9tZXRhcGFnZShibXAtXFx1MDAzZWRiX2lwYm1hcCwgbGJsa25vLCBQU0laRSwgMCk7XFxuZnMvamZzL2pmc19kbWFwLmMtMTQ1Ny1cXHRpZiAobXAgPT0gTlVMTClcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jPTE3Njg9c3RhdGljIGludCBkYkZpbmRDdGwoc3RydWN0IGJtYXAgKiBibXAsIGludCBsMm5iLCBpbnQgbGV2ZWwsIHM2NCAqIGJsa25vKVxcbi0tXFxuZnMvamZzL2pmc19kbWFwLmMtMTc4NS1cXHRcXHRsYmxrbm8gPSBCTEtUT0NUTChiLCBibXAtXFx1MDAzZWRiX2wybmJwZXJwYWdlLCBsZXYpO1xcbmZzL2pmcy9qZnNfZG1hcC5jOjE3ODY6XFx0XFx0bXAgPSByZWFkX21ldGFwYWdlKGJtcC1cXHUwMDNlZGJfaXBibWFwLCBsYmxrbm8sIFBTSVpFLCAwKTtcXG5mcy9qZnMvamZzX2RtYXAuYy0xNzg3LVxcdFxcdGlmIChtcCA9PSBOVUxMKVxcbi0tXFxuZnMvamZzL2pmc19kbWFwLmM9MTg4Nz1kYkFsbG9jQ3RsKHN0cnVjdCBibWFwICogYm1wLCBzNjQgbmJsb2NrcywgaW50IGwybmIsIHM2NCBibGtubywgczY0ICogcmVzdWx0cylcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jLTE4OTktXFx0XFx0bGJsa25vID0gQkxLVE9ETUFQKGJsa25vLCBibXAtXFx1MDAzZWRiX2wybmJwZXJwYWdlKTtcXG5mcy9qZnMvamZzX2RtYXAuYzoxOTAwOlxcdFxcdG1wID0gcmVhZF9tZXRhcGFnZShibXAtXFx1MDAzZWRiX2lwYm1hcCwgbGJsa25vLCBQU0laRSwgMCk7XFxuZnMvamZzL2pmc19kbWFwLmMtMTkwMS1cXHRcXHRpZiAobXAgPT0gTlVMTClcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jLTE5MzEtXFx0XFx0bGJsa25vID0gQkxLVE9ETUFQKGIsIGJtcC1cXHUwMDNlZGJfbDJuYnBlcnBhZ2UpO1xcbmZzL2pmcy9qZnNfZG1hcC5jOjE5MzI6XFx0XFx0bXAgPSByZWFkX21ldGFwYWdlKGJtcC1cXHUwMDNlZGJfaXBibWFwLCBsYmxrbm8sIFBTSVpFLCAwKTtcXG5mcy9qZnMvamZzX2RtYXAuYy0xOTMzLVxcdFxcdGlmIChtcCA9PSBOVUxMKSB7XFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYy0xOTg0LVxcdFxcdGxibGtubyA9IEJMS1RPRE1BUChiLCBibXAtXFx1MDAzZWRiX2wybmJwZXJwYWdlKTtcXG5mcy9qZnMvamZzX2RtYXAuYzoxOTg1OlxcdFxcdG1wID0gcmVhZF9tZXRhcGFnZShibXAtXFx1MDAzZWRiX2lwYm1hcCwgbGJsa25vLCBQU0laRSwgMCk7XFxuZnMvamZzL2pmc19kbWFwLmMtMTk4Ni1cXHRcXHRpZiAobXAgPT0gTlVMTCkge1xcbi0tXFxuZnMvamZzL2pmc19kbWFwLmM9MjU1Nz1kYkFkakN0bChzdHJ1Y3QgYm1hcCAqIGJtcCwgczY0IGJsa25vLCBpbnQgbmV3dmFsLCBpbnQgYWxsb2MsIGludCBsZXZlbClcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jLTI1NjktXFx0bGJsa25vID0gQkxLVE9DVEwoYmxrbm8sIGJtcC1cXHUwMDNlZGJfbDJuYnBlcnBhZ2UsIGxldmVsKTtcXG5mcy9qZnMvamZzX2RtYXAuYzoyNTcwOlxcdG1wID0gcmVhZF9tZXRhcGFnZShibXAtXFx1MDAzZWRiX2lwYm1hcCwgbGJsa25vLCBQU0laRSwgMCk7XFxuZnMvamZzL2pmc19kbWFwLmMtMjU3MS1cXHRpZiAobXAgPT0gTlVMTClcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jPTMyNzg9aW50IGRiQWxsb2NCb3R0b21VcChzdHJ1Y3QgaW5vZGUgKmlwLCBzNjQgYmxrbm8sIHM2NCBuYmxvY2tzKVxcbi0tXFxuZnMvamZzL2pmc19kbWFwLmMtMzMwMy1cXHRcXHRsYmxrbm8gPSBCTEtUT0RNQVAoYmxrbm8sIGJtcC1cXHUwMDNlZGJfbDJuYnBlcnBhZ2UpO1xcbmZzL2pmcy9qZnNfZG1hcC5jOjMzMDQ6XFx0XFx0bXAgPSByZWFkX21ldGFwYWdlKGlwYm1hcCwgbGJsa25vLCBQU0laRSwgMCk7XFxuZnMvamZzL2pmc19kbWFwLmMtMzMwNS1cXHRcXHRpZiAobXAgPT0gTlVMTCkge1xcbi0tXFxuZnMvamZzL2pmc19kbWFwLmM9MzQ1ND1pbnQgZGJFeHRlbmRGUyhzdHJ1Y3QgaW5vZGUgKmlwYm1hcCwgczY0IGJsa25vLFxcdHM2NCBuYmxvY2tzKVxcbi0tXFxuZnMvamZzL2pmc19kbWFwLmMtMzUzNy1cXHRwID0gQk1BUEJMS05PICsgbmJwZXJwYWdlO1xcdC8qIEwyIHBhZ2UgKi9cXG5mcy9qZnMvamZzX2RtYXAuYzozNTM4OlxcdGwybXAgPSByZWFkX21ldGFwYWdlKGlwYm1hcCwgcCwgUFNJWkUsIDApO1xcbmZzL2pmcy9qZnNfZG1hcC5jLTM1MzktXFx0aWYgKCFsMm1wKSB7XFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYy0zNTYxLVxcdFxcdFxcdC8qIHJlYWQgaW4gTDEgcGFnZTogKGJsa25vIFxcdTAwMjYgKE1BWEwxU0laRSAtIDEpKSAqL1xcbmZzL2pmcy9qZnNfZG1hcC5jOjM1NjI6XFx0XFx0XFx0bDFtcCA9IHJlYWRfbWV0YXBhZ2UoaXBibWFwLCBwLCBQU0laRSwgMCk7XFxuZnMvamZzL2pmc19kbWFwLmMtMzU2My1cXHRcXHRcXHRpZiAobDFtcCA9PSBOVUxMKVxcbi0tXFxuZnMvamZzL2pmc19kbWFwLmMtMzYwMS1cXG5mcy9qZnMvamZzX2RtYXAuYzozNjAyOlxcdFxcdFxcdFxcdGwwbXAgPSByZWFkX21ldGFwYWdlKGlwYm1hcCwgcCwgUFNJWkUsIDApO1xcbmZzL2pmcy9qZnNfZG1hcC5jLTM2MDMtXFx0XFx0XFx0XFx0aWYgKGwwbXAgPT0gTlVMTClcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jLTM2NDUtXFx0XFx0XFx0XFx0XFx0LyogcmVhZCBpbiBkbWFwIHBhZ2U6ICovXFxuZnMvamZzL2pmc19kbWFwLmM6MzY0NjpcXHRcXHRcXHRcXHRcXHRtcCA9IHJlYWRfbWV0YXBhZ2UoaXBibWFwLCBwLFxcbmZzL2pmcy9qZnNfZG1hcC5jLTM2NDctXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgUFNJWkUsIDApO1xcbi0tXFxuZnMvamZzL2pmc19kbWFwLmMtMzY1Mi1cXHRcXHRcXHRcXHRcXHQvKiBhc3NpZ24vaW5pdCBkbWFwIHBhZ2UgKi9cXG5mcy9qZnMvamZzX2RtYXAuYzozNjUzOlxcdFxcdFxcdFxcdFxcdG1wID0gcmVhZF9tZXRhcGFnZShpcGJtYXAsIHAsXFxuZnMvamZzL2pmc19kbWFwLmMtMzY1NC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBQU0laRSwgMCk7XFxuLS1cXG5mcy9qZnMvamZzX2R0cmVlLmM9MTkzPXN0YXRpYyBzdHJ1Y3QgbWV0YXBhZ2UgKnJlYWRfaW5kZXhfcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzNjQgYmxrbm8pXFxuLS1cXG5mcy9qZnMvamZzX2R0cmVlLmMtMjAzLVxcbmZzL2pmcy9qZnNfZHRyZWUuYzoyMDQ6XFx0cmV0dXJuIHJlYWRfbWV0YXBhZ2UoaW5vZGUsIHhhZGRyLCBQU0laRSwgMSk7XFxuZnMvamZzL2pmc19kdHJlZS5jLTIwNS19XFxuLS1cXG5mcy9qZnMvamZzX2R0cmVlLmM9MzE5PXN0YXRpYyB1MzIgYWRkX2luZGV4KHRpZF90IHRpZCwgc3RydWN0IGlub2RlICppcCwgczY0IGJuLCBpbnQgc2xvdClcXG4tLVxcbmZzL2pmcy9qZnNfZHRyZWUuYy00NTEtXFx0aWYgKCFtcCkge1xcbmZzL2pmcy9qZnNfZHRyZWUuYzo0NTI6XFx0XFx0amZzX2VycihcXFwiYWRkX2luZGV4OiBnZXQvcmVhZF9tZXRhcGFnZSBmYWlsZWQhXFxcIik7XFxuZnMvamZzL2pmc19kdHJlZS5jLTQ1My1cXHRcXHRnb3RvIGNsZWFuX3VwO1xcbi0tXFxuZnMvamZzL2pmc19pbWFwLmM9OTQ9aW50IGRpTW91bnQoc3RydWN0IGlub2RlICppcGltYXApXFxuLS1cXG5mcy9qZnMvamZzX2ltYXAuYy0xMTAtXFxuZnMvamZzL2pmc19pbWFwLmM6MTExOlxcdG1wID0gcmVhZF9tZXRhcGFnZShpcGltYXAsXFxuZnMvamZzL2pmc19pbWFwLmMtMTEyLVxcdFxcdFxcdCAgIElNQVBCTEtOTyBcXHUwMDNjXFx1MDAzYyBKRlNfU0JJKGlwaW1hcC1cXHUwMDNlaV9zYiktXFx1MDAzZWwybmJwZXJwYWdlLFxcbi0tXFxuZnMvamZzL2pmc19pbWFwLmM9MjkwPWludCBkaVJlYWQoc3RydWN0IGlub2RlICppcClcXG4tLVxcbmZzL2pmcy9qZnNfaW1hcC5jLTM2Ni1cXHQvKiByZWFkIHRoZSBwYWdlIG9mIGRpc2sgaW5vZGUgKi9cXG5mcy9qZnMvamZzX2ltYXAuYzozNjc6XFx0bXAgPSByZWFkX21ldGFwYWdlKGlwaW1hcCwgcGFnZW5vIFxcdTAwM2NcXHUwMDNjIHNiaS1cXHUwMDNlbDJuYnBlcnBhZ2UsIFBTSVpFLCAxKTtcXG5mcy9qZnMvamZzX2ltYXAuYy0zNjgtXFx0aWYgKCFtcCkge1xcbmZzL2pmcy9qZnNfaW1hcC5jOjM2OTpcXHRcXHRqZnNfZXJyKFxcXCJkaVJlYWQ6IHJlYWRfbWV0YXBhZ2UgZmFpbGVkXFxcIik7XFxuZnMvamZzL2pmc19pbWFwLmMtMzcwLVxcdFxcdHJldHVybiAtRUlPO1xcbi0tXFxuZnMvamZzL2pmc19pbWFwLmM9NDE4PXN0cnVjdCBpbm9kZSAqZGlSZWFkU3BlY2lhbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbm9fdCBpbnVtLCBpbnQgc2Vjb25kYXJ5KVxcbi0tXFxuZnMvamZzL2pmc19pbWFwLmMtNDQ2LVxcdC8qIHJlYWQgdGhlIHBhZ2Ugb2YgZml4ZWQgZGlzayBpbm9kZSAoQUlUKSBpbiByYXcgbW9kZSAqL1xcbmZzL2pmcy9qZnNfaW1hcC5jOjQ0NzpcXHRtcCA9IHJlYWRfbWV0YXBhZ2UoaXAsIGFkZHJlc3MgXFx1MDAzY1xcdTAwM2Mgc2JpLVxcdTAwM2VsMm5icGVycGFnZSwgUFNJWkUsIDEpO1xcbmZzL2pmcy9qZnNfaW1hcC5jLTQ0OC1cXHRpZiAobXAgPT0gTlVMTCkge1xcbi0tXFxuZnMvamZzL2pmc19pbWFwLmM9NTAwPXZvaWQgZGlXcml0ZVNwZWNpYWwoc3RydWN0IGlub2RlICppcCwgaW50IHNlY29uZGFyeSlcXG4tLVxcbmZzL2pmcy9qZnNfaW1hcC5jLTUxNy1cXHQvKiByZWFkIHRoZSBwYWdlIG9mIGZpeGVkIGRpc2sgaW5vZGUgKEFJVCkgaW4gcmF3IG1vZGUgKi9cXG5mcy9qZnMvamZzX2ltYXAuYzo1MTg6XFx0bXAgPSByZWFkX21ldGFwYWdlKGlwLCBhZGRyZXNzIFxcdTAwM2NcXHUwMDNjIHNiaS1cXHUwMDNlbDJuYnBlcnBhZ2UsIFBTSVpFLCAxKTtcXG5mcy9qZnMvamZzX2ltYXAuYy01MTktXFx0aWYgKG1wID09IE5VTEwpIHtcXG4tLVxcbmZzL2pmcy9qZnNfaW1hcC5jPTU4MT1pbnQgZGlXcml0ZSh0aWRfdCB0aWQsIHN0cnVjdCBpbm9kZSAqaXApXFxuLS1cXG5mcy9qZnMvamZzX2ltYXAuYy02MzgtICAgICAgcmV0cnk6XFxuZnMvamZzL2pmc19pbWFwLmM6NjM5OlxcdG1wID0gcmVhZF9tZXRhcGFnZShpcGltYXAsIHBhZ2VubyBcXHUwMDNjXFx1MDAzYyBzYmktXFx1MDAzZWwybmJwZXJwYWdlLCBQU0laRSwgMSk7XFxuZnMvamZzL2pmc19pbWFwLmMtNjQwLVxcdGlmICghbXApXFxuLS1cXG5mcy9qZnMvamZzX2ltYXAuYz0yNjYzPXN0YXRpYyBpbnQgZGlJQUdSZWFkKHN0cnVjdCBpbm9tYXAgKiBpbWFwLCBpbnQgaWFnbm8sIHN0cnVjdCBtZXRhcGFnZSAqKiBtcHApXFxuLS1cXG5mcy9qZnMvamZzX2ltYXAuYy0yNjcxLVxcdC8qIHJlYWQgdGhlIGlhZy4gKi9cXG5mcy9qZnMvamZzX2ltYXAuYzoyNjcyOlxcdCptcHAgPSByZWFkX21ldGFwYWdlKGlwaW1hcCwgYmxrbm8sIFBTSVpFLCAwKTtcXG5mcy9qZnMvamZzX2ltYXAuYy0yNjczLVxcdGlmICgqbXBwID09IE5VTEwpIHtcXG4tLVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuaD01MD1leHRlcm4gc3RydWN0IG1ldGFwYWdlICpfX2dldF9tZXRhcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvamZzL2pmc19tZXRhcGFnZS5oLTUzLVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuaDo1NDojZGVmaW5lIHJlYWRfbWV0YXBhZ2UoaW5vZGUsIGxibG9jaywgc2l6ZSwgYWJzb2x1dGUpXFxcXFxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuaC01NS1cXHQgX19nZXRfbWV0YXBhZ2UoaW5vZGUsIGxibG9jaywgc2l6ZSwgYWJzb2x1dGUsIGZhbHNlKVxcbi0tXFxuZnMvamZzL3hhdHRyLmM9MzUxPXN0YXRpYyBpbnQgZWFfcmVhZChzdHJ1Y3QgaW5vZGUgKmlwLCBzdHJ1Y3QgamZzX2VhX2xpc3QgKmVhbGlzdClcXG4tLVxcbmZzL2pmcy94YXR0ci5jLTM5NS1cXG5mcy9qZnMveGF0dHIuYzozOTY6XFx0XFx0aWYgKCEobXAgPSByZWFkX21ldGFwYWdlKGlwLCBibGtubyArIGksIGJ5dGVzX3RvX3JlYWQsIDEpKSlcXG5mcy9qZnMveGF0dHIuYy0zOTctXFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuLS1cXG5mcy9qZnMveGF0dHIuYz00MjY9c3RhdGljIGludCBlYV9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGVhX2J1ZmZlciAqZWFfYnVmLCBpbnQgbWluX3NpemUpXFxuLS1cXG5mcy9qZnMveGF0dHIuYy01NDgtXFx0ZWFfYnVmLVxcdTAwM2VmbGFnID0gRUFfRVhURU5UO1xcbmZzL2pmcy94YXR0ci5jOjU0OTpcXHRlYV9idWYtXFx1MDAzZW1wID0gcmVhZF9tZXRhcGFnZShpbm9kZSwgYWRkcmVzc0RYRChcXHUwMDI2amktXFx1MDAzZWVhKSxcXG5mcy9qZnMveGF0dHIuYy01NTAtXFx0XFx0XFx0XFx0ICAgbGVuZ3RoRFhEKFxcdTAwMjZqaS1cXHUwMDNlZWEpIFxcdTAwM2NcXHUwMDNjIHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDowMDoyOC44ODE0Nzg3MjNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA4OTQ2MjQ4MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBKRlMgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgc2NhbiBmbGFnZ2VkIGEgYnVuY2ggb2YgSkZTIGZ1bmN0aW9ucywgYW5kIEkndmUgbmFycm93ZWQgaXQgZG93biB0byBhIG1vcmUgZm9jdXNlZCBzZXQ6IGBqZnNfZmlsbF9zdXBlcmAsIGBfX2dldF9tZXRhcGFnZWAsIGBkaVJlYWRgLCBgZGlXcml0ZWAsIGBkYk1vdW50YCwgYGRiU3luY2AsIGBkYkZyZWVgLCBgZGJBbGxvY2AsIGBlYV9nZXRgLCBhbmQgYGVhX3JlYWRgLiBHaXZlbiB0aGUgY29udGV4dCBvZiBhIHBhdGNoLCBgX19nZXRfbWV0YXBhZ2VgIGFuZCBgamZzX2ZpbGxfc3VwZXJgIGp1bXAgb3V0IGFzIHRoZSBtb3N0IHJlbGV2YW50IGVudHJ5IHBvaW50cyBiZWNhdXNlIHRoZXkgYXJlIGNsb3NlbHkgYXNzb2NpYXRlZCB3aXRoIGZpbGUgc3lzdGVtIG9wZXJhdGlvbnMsIGFuZCBpbml0aWFsaXphdGlvbiwgcmVzcGVjdGl2ZWx5LiBXZSdyZSBsb29raW5nIGF0IGNvcmUgZnVuY3Rpb25hbGl0eSBjaGFuZ2VzLlxuXG5UaGUgY3JpdGljYWwgcGllY2UgaGVyZSBpcyB0aGUgcGF0Y2gncyBsb2NhdGlvbiwgYG1ldGFwYWdlX3JlYWRfZm9saW9gLiBUaGUgVkZTIGNhbGxzIHRoaXMgd2hlbiBkZWFsaW5nIHdpdGggSkZTIGJsb2NrIGRldmljZSBtYXBwaW5ncywgc3BlY2lmaWNhbGx5IGR1cmluZyBwYWdlIHJlYWRzIHZpYSBgcmVhZF9tYXBwaW5nX2ZvbGlvYC4gYF9fZ2V0X21ldGFwYWdlYCBpcyB0aGUga2V5IGZ1bmN0aW9uIHRoYXQgY2FsbHMgYHJlYWRfbWFwcGluZ19mb2xpb2Agd2hpY2gsIGluIHR1cm4sIGNhbGxzIGBtZXRhcGFnZV9yZWFkX2ZvbGlvYCwgZWZmZWN0aXZlbHkgbWFraW5nIGl0IHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgcmVsZXZhbnQgZnVuY3Rpb25hbGl0eS4gVGhpcyBtYWtlcyBzZW5zZTogdGhlIGJsb2NrIGRldmljZSBtYXBwaW5nIGlzIGdvaW5nIHRvIHJlYWQgZmlsZXN5c3RlbSBtZXRhZGF0YSBwYWdlcy5cblxuSSd2ZSBjb25maXJtZWQgdGhhdCBgbWV0YXBhZ2VfcmVhZF9mb2xpb2AgaXMgcmVhY2hhYmxlLiBJdCdzIGFzc2lnbmVkIHRvIGBqZnNfbWV0YXBhZ2VfYW9wcy5yZWFkX2ZvbGlvYCwgd2hpY2ggaXMgdXNlZCBmb3IgYm90aCBibG9jayBkZXZpY2UgbWFwcGluZ3MgKGluaXRpYWxpemVkIGluIGBqZnNfZmlsbF9zdXBlcmApIGFuZCBzcGVjaWFsIGlub2RlcyAoYGRpUmVhZFNwZWNpYWxgKS4gVGhpcyBpcyB3aGF0IEkgZXhwZWN0IGJhc2VkIG9uIEpGUydzIGFyY2hpdGVjdHVyZS4gTWV0YWRhdGEgcmVhZHMgYXJlIGdvaW5nIHRocm91Z2ggdGhpcy5cblxuVGhlIHBhdGNoJ3MgY2hhbmdlIGlzIGFib3V0IGNoZWNraW5nIHRoZSByZXR1cm4gdmFsdWUgb2YgYGluc2VydF9tZXRhcGFnZWAuIFRoaXMgaXMgc2lnbmlmaWNhbnQhIEZhaWx1cmUgaW4gYGluc2VydF9tZXRhcGFnZWAgKHdoaWNoIGNhbiByZXR1cm4gLUVCVVNZIG9yIC1FTk9NRU0pIHdhcyBwcmV2aW91c2x5IGJlaW5nIGlnbm9yZWQsIHBvdGVudGlhbGx5IGNhdXNpbmcgc2lsZW50IGRhdGEgY29ycnVwdGlvbiBvciBvdGhlciBpc3N1ZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNvcnJlY3RuZXNzIGZpeCwgYW5kIHRoZXJlZm9yZSwgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIGFuZCBmdXJ0aGVyIHNjcnV0aW55LlxuXG5Gb2N1c2luZyBpbiwgYF9fZ2V0X21ldGFwYWdlYCBpcyB0aGUgbW9zdCBkaXJlY3QgZW50cnkgcG9pbnQuIEl0J3MgdGhlIGNvcmUgb2YgdGhlIG1ldGFkYXRhIHBhZ2UgcmV0cmlldmFsIHByb2Nlc3MuIGBqZnNfZmlsbF9zdXBlcmAgd2lsbCBiZSBpbXBvcnRhbnQgZHVyaW5nIG1vdW50LCBhbmQgYGRpUmVhZGAgYW5kIGBlYV9nZXRgIHdpbGwgYmUgdXNlZnVsIGluIGlub2RlIGFuZCBleHRlbmRlZCBhdHRyaWJ1dGUgcmVhZGluZy5cblxuTm93LCBsZXQncyBkaWcgaW50byBgaW5zZXJ0X21ldGFwYWdlYCBpdHNlbGYuIEl0IHJldHVybnMgYC1FQlVTWWAgaWYgdGhlIG1ldGFwYWdlIGlzIGFscmVhZHkgaW4gdGhlIGhhc2ggdGFibGUgYW5kIGAtRU5PTUVNYCBpZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlscy4gSXQncyBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24sIHdoaWNoIG1lYW5zIHRoZSBjb21waWxlciBtaWdodCBvcHRpbWl6ZSBpdCBhd2F5LiBTdGlsbCwgY2hlY2tpbmcgdGhlIHJldHVybiB2YWx1ZSBpcyBjcnVjaWFsIGJlY2F1c2UgaXQgZW5zdXJlcyBwcm9wZXIgZXJyb3IgaGFuZGxpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODg0LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjAwOjM5Ljc3NjEwNjUyM1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5NTM0OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhdGljIGlubGluZSBpbnQgaW5zZXJ0X21ldGFwYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2pmcy9qZnNfbWV0YXBhZ2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9qZnMvamZzX21ldGFwYWdlLmM9ODQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgbWV0YXBhZ2UgKmZvbGlvX3RvX21wKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvZmZzZXQpXFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtOTItXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jOjkzOnN0YXRpYyBpbmxpbmUgaW50IGluc2VydF9tZXRhcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWV0YXBhZ2UgKm1wKVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy05NC17XFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmM9MjA4PXN0YXRpYyBpbmxpbmUgc3RydWN0IG1ldGFwYWdlICpmb2xpb190b19tcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2Zmc2V0KVxcbi0tXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTIxMi1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmM6MjEzOnN0YXRpYyBpbmxpbmUgaW50IGluc2VydF9tZXRhcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWV0YXBhZ2UgKm1wKVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy0yMTQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDowMDozOS44MjUwNzAzNDJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMxMDkxMDQwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBgaW5zZXJ0X21ldGFwYWdlYCBJbXBsZW1lbnRhdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29kZSdzIHJhaXNpbmcgYSByZWQgZmxhZyBhYm91dCBgaW5zZXJ0X21ldGFwYWdlYC4gSXQgbG9va3MgbGlrZSB0aGVyZSBhcmUgKnR3byogcG90ZW50aWFsIGRlZmluaXRpb25zIGZsb2F0aW5nIGFyb3VuZCwgYW5kIHdoaWNoIG9uZSBnZXRzIHVzZWQgZGVwZW5kcyBvbiBzb21lIGtpbmQgb2YgY29uZmlndXJhdGlvbiBzZXR0aW5nLiBUaGF0J3MgYWx3YXlzIGEgcmVjaXBlIGZvciBzdWJ0bGUgYnVncyBpZiBub3QgaGFuZGxlZCBjYXJlZnVsbHkuXG5cbk15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSBzb3VyY2UuIExldCdzIHNlZS4uLiB0aGUgc3VzcGVjdCBmaWxlIGlzIGBmcy9qZnMvamZzX21ldGFwYWdlLmNgLCBhbmQgYmFzZWQgb24gdGhlIGNvbnRleHQsIEknbSBndWVzc2luZyB0aGUga2V5IGFyZWFzIHdpbGwgYmUgYXJvdW5kIGxpbmUgOTMgYW5kIHRoZW4gYWdhaW4gYXJvdW5kIGxpbmUgMjEzLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhvc2UgYXJlYXMgc3BlY2lmaWNhbGx5IHRvIHNlZSBleGFjdGx5IGhvdyB0aGVzZSBwb3RlbnRpYWxseSBjb25mbGljdGluZyBkZWZpbml0aW9ucyBhcmUgYmVpbmcgaGFuZGxlZCBhbmQgd2hhdCBjb25kaXRpb25zIHRyaWdnZXIgZWFjaCBvbmUuIEhvcGVmdWxseSBpdCdzIHN0cmFpZ2h0Zm9yd2FyZCBhbmQgd2VsbC1jb21tZW50ZWQsIHNvIEkgZG9uJ3QgaGF2ZSB0byB0cmFjZSB0aHJvdWdoIGEgYnVuY2ggb2YgcHJlcHJvY2Vzc29yIG1hY3JvcyEgVGhpcyBzaXR1YXRpb24gcmVxdWlyZXMgcHJlY2lzaW9uIHRvIGVuc3VyZSB0aGUgY29kZSBpcyBkb2luZyB3aGF0IGlzIGludGVuZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQ1OSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjAwOjQ0LjEzNTk4MzI5OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTM4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvamZzL2pmc19tZXRhcGFnZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MDpcXHRcXHRibGtfc3RhdHVzX3Qgc3RhdHVzO1xcbiAgODE6XFx0XFx0c3RydWN0IG1ldGFwYWdlICptcFtNUFNfUEVSX1BBR0VdO1xcbiAgODI6XFx0fTtcXG4gIDgzOlxcdFxcbiAgODQ6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbWV0YXBhZ2UgKmZvbGlvX3RvX21wKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvZmZzZXQpXFxuICA4NTpcXHR7XFxuICA4NjpcXHRcXHRzdHJ1Y3QgbWV0YV9hbmNob3IgKmFuY2hvciA9IGZvbGlvLVxcdTAwM2Vwcml2YXRlO1xcbiAgODc6XFx0XFxuICA4ODpcXHRcXHRpZiAoIWFuY2hvcilcXG4gIDg5OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAgOTA6XFx0XFx0cmV0dXJuIGFuY2hvci1cXHUwMDNlbXBbb2Zmc2V0IFxcdTAwM2VcXHUwMDNlIEwyUFNJWkVdO1xcbiAgOTE6XFx0fVxcbiAgOTI6XFx0XFxuICA5MzpcXHRzdGF0aWMgaW5saW5lIGludCBpbnNlcnRfbWV0YXBhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1ldGFwYWdlICptcClcXG4gIDk0OlxcdHtcXG4gIDk1OlxcdFxcdHN0cnVjdCBtZXRhX2FuY2hvciAqYTtcXG4gIDk2OlxcdFxcdGludCBpbmRleDtcXG4gIDk3OlxcdFxcdGludCBsMm1wX2Jsb2NrcztcXHQvKiBsb2cyIGJsb2NrcyBwZXIgbWV0YXBhZ2UgKi9cXG4gIDk4OlxcdFxcbiAgOTk6XFx0XFx0YSA9IGZvbGlvLVxcdTAwM2Vwcml2YXRlO1xcbiAxMDA6XFx0XFx0aWYgKCFhKSB7XFxuIDEwMTpcXHRcXHRcXHRhID0ga3phbGxvY19vYmooc3RydWN0IG1ldGFfYW5jaG9yLCBHRlBfTk9GUyk7XFxuIDEwMjpcXHRcXHRcXHRpZiAoIWEpXFxuIDEwMzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMTA0OlxcdFxcdFxcdGZvbGlvX2F0dGFjaF9wcml2YXRlKGZvbGlvLCBhKTtcXG4gMTA1OlxcdFxcdFxcdGttYXAoXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlKTtcXG4gMTA2OlxcdFxcdH1cXG4gMTA3OlxcdFxcbiAxMDg6XFx0XFx0aWYgKG1wKSB7XFxuIDEwOTpcXHRcXHRcXHRsMm1wX2Jsb2NrcyA9IEwyUFNJWkUgLSBmb2xpby1cXHUwMDNlbWFwcGluZy1cXHUwMDNlaG9zdC1cXHUwMDNlaV9ibGtiaXRzO1xcbiAxMTA6XFx0XFx0XFx0aW5kZXggPSAobXAtXFx1MDAzZWluZGV4IFxcdTAwM2VcXHUwMDNlIGwybXBfYmxvY2tzKSBcXHUwMDI2IChNUFNfUEVSX1BBR0UgLSAxKTtcXG4gMTExOlxcdFxcdFxcdGEtXFx1MDAzZW1wX2NvdW50Kys7XFxuIDExMjpcXHRcXHRcXHRhLVxcdTAwM2VtcFtpbmRleF0gPSBtcDtcXG4gMTEzOlxcdFxcdH1cXG4gMTE0OlxcdFxcbiAxMTU6XFx0XFx0cmV0dXJuIDA7XFxuIDExNjpcXHR9XFxuIDExNzpcXHRcXG4gMTE4OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVfbWV0YXBhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1ldGFwYWdlICptcClcXG4gMTE5OlxcdHtcXG4gMTIwOlxcdFxcdHN0cnVjdCBtZXRhX2FuY2hvciAqYSA9IGZvbGlvLVxcdTAwM2Vwcml2YXRlO1xcbiAxMjE6XFx0XFx0aW50IGwybXBfYmxvY2tzID0gTDJQU0laRSAtIGZvbGlvLVxcdTAwM2VtYXBwaW5nLVxcdTAwM2Vob3N0LVxcdTAwM2VpX2Jsa2JpdHM7XFxuIDEyMjpcXHRcXHRpbnQgaW5kZXg7XFxuIDEyMzpcXHRcXG4gMTI0OlxcdFxcdGluZGV4ID0gKG1wLVxcdTAwM2VpbmRleCBcXHUwMDNlXFx1MDAzZSBsMm1wX2Jsb2NrcykgXFx1MDAyNiAoTVBTX1BFUl9QQUdFIC0gMSk7XFxuIDEyNTpcXHRcXG4gMTI2OlxcdFxcdEJVR19PTihhLVxcdTAwM2VtcFtpbmRleF0gIT0gbXApO1xcbiAxMjc6XFx0XFxuIDEyODpcXHRcXHRhLVxcdTAwM2VtcFtpbmRleF0gPSBOVUxMO1xcbiAxMjk6XFx0XFx0aWYgKC0tYS1cXHUwMDNlbXBfY291bnQgPT0gMCkge1xcbiAxMzA6XFx0XFx0XFx0a2ZyZWUoYSk7XFxuIDEzMTpcXHRcXHRcXHRmb2xpb19kZXRhY2hfcHJpdmF0ZShmb2xpbyk7XFxuIDEzMjpcXHRcXHRcXHRrdW5tYXAoXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlKTtcXG4gMTMzOlxcdFxcdH1cXG4gMTM0OlxcdH1cXG4gMTM1OlxcdFxcbiAxMzY6XFx0c3RhdGljIGlubGluZSB2b2lkIGluY19pbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiAxMzc6XFx0e1xcbiAxMzg6XFx0XFx0c3RydWN0IG1ldGFfYW5jaG9yICphbmNob3IgPSBmb2xpby1cXHUwMDNlcHJpdmF0ZTtcXG4gMTM5OlxcdFxcbiAxNDA6XFx0XFx0YXRvbWljX2luYyhcXHUwMDI2YW5jaG9yLVxcdTAwM2Vpb19jb3VudCk7XFxuIDE0MTpcXHR9XFxuIDE0MjpcXHRcXG4gMTQzOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBkZWNfaW8oc3RydWN0IGZvbGlvICpmb2xpbywgYmxrX3N0YXR1c190IHN0YXR1cyxcXG4gMTQ0OlxcdFxcdFxcdHZvaWQgKCpoYW5kbGVyKShzdHJ1Y3QgZm9saW8gKiwgYmxrX3N0YXR1c190KSlcXG4gMTQ1OlxcdHtcXG4gMTQ2OlxcdFxcdHN0cnVjdCBtZXRhX2FuY2hvciAqYW5jaG9yID0gZm9saW8tXFx1MDAzZXByaXZhdGU7XFxuIDE0NzpcXHRcXG4gMTQ4OlxcdFxcdGlmIChhbmNob3ItXFx1MDAzZXN0YXR1cyA9PSBCTEtfU1RTX09LKVxcbiAxNDk6XFx0XFx0XFx0YW5jaG9yLVxcdTAwM2VzdGF0dXMgPSBzdGF0dXM7XFxuIDE1MDpcXHRcXG4gMTUxOlxcdFxcdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFxcdTAwMjZhbmNob3ItXFx1MDAzZWlvX2NvdW50KSlcXG4gMTUyOlxcdFxcdFxcdGhhbmRsZXIoZm9saW8sIGFuY2hvci1cXHUwMDNlc3RhdHVzKTtcXG4gMTUzOlxcdH1cXG4gMTU0OlxcdFxcbiAxNTU6XFx0I2lmZGVmIENPTkZJR19NSUdSQVRJT05cXG4gMTU2OlxcdHN0YXRpYyBpbnQgX19tZXRhcGFnZV9taWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiAxNTc6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBmb2xpbyAqZHN0LCBzdHJ1Y3QgZm9saW8gKnNyYyxcXG4gMTU4OlxcdFxcdFxcdFxcdFxcdCAgICBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlKVxcbiAxNTk6XFx0e1xcbiAxNjA6XFx0XFx0c3RydWN0IG1ldGFfYW5jaG9yICpzcmNfYW5jaG9yID0gc3JjLVxcdTAwM2Vwcml2YXRlO1xcbiAxNjE6XFx0XFx0c3RydWN0IG1ldGFwYWdlICptcHNbTVBTX1BFUl9QQUdFXSA9IHswfTtcXG4gMTYyOlxcdFxcdHN0cnVjdCBtZXRhcGFnZSAqbXA7XFxuIDE2MzpcXHRcXHRpbnQgaSwgcmM7XFxuIDE2NDpcXHRcXG4gMTY1OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBNUFNfUEVSX1BBR0U7IGkrKykge1xcbiAxNjY6XFx0XFx0XFx0bXAgPSBzcmNfYW5jaG9yLVxcdTAwM2VtcFtpXTtcXG4gMTY3OlxcdFxcdFxcdGlmIChtcCBcXHUwMDI2XFx1MDAyNiBtZXRhcGFnZV9sb2NrZWQobXApKVxcbiAxNjg6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuIDE2OTpcXHRcXHR9XFxuIDE3MDpcXHRcXG4gMTcxOlxcdFxcdHJjID0gZmlsZW1hcF9taWdyYXRlX2ZvbGlvKG1hcHBpbmcsIGRzdCwgc3JjLCBtb2RlKTtcXG4gMTcyOlxcdFxcdGlmIChyYylcXG4gMTczOlxcdFxcdFxcdHJldHVybiByYztcXG4gMTc0OlxcdFxcbiAxNzU6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1QU19QRVJfUEFHRTsgaSsrKSB7XFxuIDE3NjpcXHRcXHRcXHRtcCA9IHNyY19hbmNob3ItXFx1MDAzZW1wW2ldO1xcbiAxNzc6XFx0XFx0XFx0aWYgKCFtcClcXG4gMTc4OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAxNzk6XFx0XFx0XFx0aWYgKHVubGlrZWx5KGluc2VydF9tZXRhcGFnZShkc3QsIG1wKSkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6MDA6NDQuMTM2MDk4ODU5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2NjgxMDM1ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIE1ldGFwYWdlIExvZ2ljKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgaW5zZXJ0X21ldGFwYWdlYCBmdW5jdGlvbiwgYW5kIGl0IHNlZW1zIGxpa2UgaXQncyBhIGNyaXRpY2FsIHBpZWNlLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGF0IGl0IGNhbiByZXR1cm4gYC1FTk9NRU1gLCB3aGljaCBpcyBhbHdheXMgYSByZWQgZmxhZyB3aGVuIGRlYWxpbmcgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiBpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGZhaWx1cmUgcGF0aHMgaGVyZS5cblxuSG1tLCBJIHNlZSBhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJsb2NrIOKAkyBzb21ldGhpbmcgcmVsYXRlZCB0byBgQ09ORklHX01JR1JBVElPTmAsIEkgYmVsaWV2ZSwgb3IgaXMgaXQgZGlyZWN0bHkgb24gYENPTkZJR19NSUdSQVRJT05gPyBMZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQuLi4gWWVhaCwgaXQgaXMgaW5kZWVkIGAjaWZkZWYgQ09ORklHX01JR1JBVElPTmAuXG5cbkhvbGQgb24sIEkgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIHRoZSBvdGhlciBpbnN0YW5jZSBvZiBgaW5zZXJ0X21ldGFwYWdlYCBhdCBsaW5lIDIxMyBpbiB0aGlzIGZpbGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIGNvbnNpZGVyaW5nIGFsbCB0aGUgdXNlIGNhc2VzIGZvciB0aGUgZnVuY3Rpb24sIGFuZCB3aGV0aGVyIHRoaXMgZGlmZmVyZW50IGNvbnRleHQgY2hhbmdlcyB0aGUgaW1wYWN0IG9yIG5hdHVyZSBvZiBhIHBvdGVudGlhbCBgLUVOT01FTWAgcmV0dXJuLiBUaW1lIHRvIGRpZyBpbiBhbmQgY29tcGFyZSB0aGUgY2FsbCBzaXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxODAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjAwOjQ5LjgwNDIwNDc0MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9qZnMvamZzX21ldGFwYWdlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTkwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTkwOlxcdFxcdC8qIFVwZGF0ZSB0aGUgbWV0YXBhZ2UgYW5kIHJlbW92ZSBpdCBmcm9tIHNyYyAqL1xcbiAxOTE6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1QU19QRVJfUEFHRTsgaSsrKSB7XFxuIDE5MjpcXHRcXHRcXHRtcCA9IG1wc1tpXTtcXG4gMTkzOlxcdFxcdFxcdGlmIChtcCkge1xcbiAxOTQ6XFx0XFx0XFx0XFx0aW50IHBhZ2Vfb2Zmc2V0ID0gbXAtXFx1MDAzZWRhdGEgLSBmb2xpb19hZGRyZXNzKHNyYyk7XFxuIDE5NTpcXHRcXG4gMTk2OlxcdFxcdFxcdFxcdG1wLVxcdTAwM2VkYXRhID0gZm9saW9fYWRkcmVzcyhkc3QpICsgcGFnZV9vZmZzZXQ7XFxuIDE5NzpcXHRcXHRcXHRcXHRtcC1cXHUwMDNlZm9saW8gPSBkc3Q7XFxuIDE5ODpcXHRcXHRcXHRcXHRyZW1vdmVfbWV0YXBhZ2Uoc3JjLCBtcCk7XFxuIDE5OTpcXHRcXHRcXHR9XFxuIDIwMDpcXHRcXHR9XFxuIDIwMTpcXHRcXG4gMjAyOlxcdFxcdHJldHVybiAwO1xcbiAyMDM6XFx0fVxcbiAyMDQ6XFx0I2VuZGlmXFx0LyogQ09ORklHX01JR1JBVElPTiAqL1xcbiAyMDU6XFx0XFxuIDIwNjpcXHQjZWxzZVxcbiAyMDc6XFx0XFxuIDIwODpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBtZXRhcGFnZSAqZm9saW9fdG9fbXAoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9mZnNldClcXG4gMjA5OlxcdHtcXG4gMjEwOlxcdFxcdHJldHVybiBmb2xpby1cXHUwMDNlcHJpdmF0ZTtcXG4gMjExOlxcdH1cXG4gMjEyOlxcdFxcbiAyMTM6XFx0c3RhdGljIGlubGluZSBpbnQgaW5zZXJ0X21ldGFwYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZXRhcGFnZSAqbXApXFxuIDIxNDpcXHR7XFxuIDIxNTpcXHRcXHRpZiAobXApIHtcXG4gMjE2OlxcdFxcdFxcdGZvbGlvX2F0dGFjaF9wcml2YXRlKGZvbGlvLCBtcCk7XFxuIDIxNzpcXHRcXHRcXHRrbWFwKFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSk7XFxuIDIxODpcXHRcXHR9XFxuIDIxOTpcXHRcXHRyZXR1cm4gMDtcXG4gMjIwOlxcdH1cXG4gMjIxOlxcdFxcbiAyMjI6XFx0c3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9tZXRhcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWV0YXBhZ2UgKm1wKVxcbiAyMjM6XFx0e1xcbiAyMjQ6XFx0XFx0Zm9saW9fZGV0YWNoX3ByaXZhdGUoZm9saW8pO1xcbiAyMjU6XFx0XFx0a3VubWFwKFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSk7XFxuIDIyNjpcXHR9XFxuIDIyNzpcXHRcXG4gMjI4OlxcdCNkZWZpbmUgaW5jX2lvKGZvbGlvKSBkbyB7fSB3aGlsZSgwKVxcbiAyMjk6XFx0I2RlZmluZSBkZWNfaW8oZm9saW8sIHN0YXR1cywgaGFuZGxlcikgaGFuZGxlcihmb2xpbywgc3RhdHVzKVxcbiAyMzA6XFx0XFxuIDIzMTpcXHQjaWZkZWYgQ09ORklHX01JR1JBVElPTlxcbiAyMzI6XFx0c3RhdGljIGludCBfX21ldGFwYWdlX21pZ3JhdGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuIDIzMzpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGZvbGlvICpkc3QsIHN0cnVjdCBmb2xpbyAqc3JjLFxcbiAyMzQ6XFx0XFx0XFx0XFx0XFx0ICAgIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUpXFxuIDIzNTpcXHR7XFxuIDIzNjpcXHRcXHRzdHJ1Y3QgbWV0YXBhZ2UgKm1wO1xcbiAyMzc6XFx0XFx0aW50IHBhZ2Vfb2Zmc2V0O1xcbiAyMzg6XFx0XFx0aW50IHJjO1xcbiAyMzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjAwOjQ5LjgwNDI4OTMyMloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODE1OTIwNzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEpGUyBQYXRjaCBmb3IgTWVtb3J5IEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGAjZWxzZWAgYmxvY2sgYW5kIGl0J3MgYWxsIGFib3V0IHRoZSBjYXNlIHdoZXJlIGAjaWYgUEFHRV9TSVpFIFx1MDAzZSBQU0laRWAuIFJpZ2h0LCBhbmQgYFBTSVpFYCBpcyA0MDk2LCB0aGUgc3RhbmRhcmQgcGFnZSBzaXplIGluIEpGUy4gVGhpcyBtZWFucyB0aGF0IGlmIHRoZSBzeXN0ZW0ncyBwYWdlIHNpemUgKGBQQUdFX1NJWkVgKSBpcyBsYXJnZXIgdGhhbiA0MDk2IOKAkyBsaWtlIHRob3NlIDY0SyBwYWdlcyBvbiBBUk02NCBvciBQb3dlclBDIOKAkyBgaW5zZXJ0X21ldGFwYWdlYCAqY2FuKiByZXR1cm4gYC1FTk9NRU1gLiBUaGF0J3MgdGhlIGtleS4gSWYgYFBBR0VfU0laRWAgKmVxdWFscyogYFBTSVpFYCwgaXQgKmFsd2F5cyogcmV0dXJucyAwLiBTbywgdGhpcyBwYXRjaCBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIHRoZSBwb3RlbnRpYWwgYC1FTk9NRU1gIHNpdHVhdGlvbiB3aGVuIGBQQUdFX1NJWkVgIGlzLCBpbiBmYWN0LCBsYXJnZXIuXG5cbldhaXQgYSBzZWNvbmQsIG9uIHg4Nl82NCwgYFBBR0VfU0laRWAgKmlzKiA0MDk2LCBzbyB3ZSdyZSBhbHdheXMgcmV0dXJuaW5nIDAgYnkgZGVmYXVsdC4gU28gdGhpcyBjaGFuZ2Ugd291bGRuJ3QgaGF2ZSBhbnkgaW1wYWN0LiBCdXQgaWYgd2UncmUgZGVhbGluZyB3aXRoIHRob3NlIHN5c3RlbXMgd2l0aCBsYXJnZXIgcGFnZSBzaXplcywgdGhlbiBgLUVOT01FTWAgY2FuIGhhcHBlbi5cblxuSG1tLCBub3cgSSdtIHdvbmRlcmluZyBpZiBzeXpib3QgaXMgZXZlbiBjb25maWd1cmVkIHRvIHVzZSA2NEsgcGFnZXM/IFNvbWV0aW1lcywgeWVzLiBJIGhhdmUgc2VlbiBpdCB1c2UgdGhlbS4gVGhpcyBpcyBwcm9iYWJseSBhIGdlbmVyYWwgZml4LlxuXG5SZWdhcmRsZXNzLCB0aGUgcGF0Y2ggdG91Y2hlcyBgbWV0YXBhZ2VfcmVhZF9mb2xpb2AsIHdoaWNoIGlzIGEgZnVuZGFtZW50YWwgSkZTIGZ1bmN0aW9uLiBUaGF0IG1ha2VzIHRoaXMgcGF0Y2ggcmVhbGx5IGludGVyZXN0aW5nLiBBbnl0aGluZyBhZmZlY3RpbmcgYG1ldGFwYWdlX3JlYWRfZm9saW9gIGlzIGNyaXRpY2FsLCBlc3BlY2lhbGx5IHdoZW4gYWRkcmVzc2luZyBtZW1vcnkgYWxsb2NhdGlvbiBpc3N1ZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyB0ZXN0ZWQuIEknbSBnb2luZyB0byBkb3VibGUgY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYFBTSVpFYCBmb3IgY29uZmlybWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTE4NCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjAwOjU2LjYyMDIxMzQxM1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyNDAxMTc5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIFBTSVpFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2pmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjAwOjU2LjcyMjYyMDE3MloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzU3NjY0NTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQgYW5kIGFkb3B0aW5nIGEgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlOlxuXG4qKkh1bnRpbmcgZm9yIGBQU0laRWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gVGltZSB0byBodW50IGRvd24gdGhhdCBgUFNJWkVgIHZhcmlhYmxlLiBVc3VhbGx5LCB3aGVuIEkgZW5jb3VudGVyIHNvbWV0aGluZyBsaWtlIHRoaXMsIG15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIGNhdGFsb2dpbmcgdGhlIHBvc3NpYmlsaXRpZXMuIElzIGl0IGEgc3RhbmRhcmQgcGFyYW1ldGVyIHdpdGhpbiB0aGlzIGxpYnJhcnkgb3IgZnJhbWV3b3JrPyBJcyBpdCBhIGN1c3RvbSBtYWNybyBkZWZpbmVkIHNvbWV3aGVyZSBvYnNjdXJlLCBidXJpZWQgaW4gYSBoZWFkZXIgZmlsZT8gQ291bGQgaXQgYmUgc29tZXRoaW5nIHJlbGF0ZWQgdG8gbWVtb3J5IGFsbG9jYXRpb24sIG9yIHBlcmhhcHMgZXZlbiBhIGNvbmZpZ3VyYXRpb24gc2V0dGluZyB0aGF0J3MgZHluYW1pY2FsbHkgZGV0ZXJtaW5lZD9cblxuRmlyc3QsIEknZCBwcm9iYWJseSBzdGFydCB3aXRoIGEgZ2xvYmFsIHNlYXJjaCB3aXRoaW4gdGhlIGNvZGViYXNlLiBJIG5lZWQgdG8gZ2V0IGEgc2Vuc2Ugb2YgaXRzIHByZXZhbGVuY2UgYW5kIGNvbnRleHQuIEEgcXVpY2sgZ3JlcCwgb3Igd2hhdGV2ZXIgc2VhcmNoIHRvb2wgSSdtIHVzaW5nIGF0IHRoZSBtb21lbnQsIHdpbGwgcGFpbnQgYSBwaWN0dXJlOiBob3cgZnJlcXVlbnRseSBpcyBpdCB1c2VkPyBJbiB3aGF0IGtpbmRzIG9mIG1vZHVsZXMgb3IgZnVuY3Rpb25zPyBBcmUgdGhlcmUgY29tbWVudHMsIG9yIG90aGVyIHN1cnJvdW5kaW5nIGNvZGUsIHRoYXQgcHJvdmlkZSBpbW1lZGlhdGUgY2x1ZXMgYWJvdXQgaXRzIG1lYW5pbmcgb3IgcHVycG9zZT9cblxuSWYgdGhlIGdsb2JhbCBzZWFyY2ggZG9lc24ndCBpbW1lZGlhdGVseSByZXZlYWwgaXRzIG9yaWdpbiwgb3IgaWYgdGhlIGluaXRpYWwgcmVzdWx0cyBhcmUgYW1iaWd1b3VzLCBJJ2xsIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgbW9yZSBvYnZpb3VzIGNhbmRpZGF0ZXMuIFRoZSBkb2N1bWVudGF0aW9uIGlzIHRoZSBiZXN0IHN0YXJ0aW5nIHBvaW50LCBJIGtub3cgaXQncyBhIGJpdCBvZiBhIGNsaWNow6ksIGJ1dCBpdCBpcyBvZnRlbiB0aGUgYmVzdCByZXNvdXJjZSBmb3IgaW5mb3JtYXRpb24gYWJvdXQgYSB2YXJpYWJsZS4gSXMgdGhlcmUgYSByZWxldmFudCBjb25maWd1cmF0aW9uIGZpbGU/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBoZWFkZXIgZmlsZXMgSSBzaG91bGQgbG9vayBhdD8gUGVyaGFwcyB0aGVyZSdzIGFuIGludGVybmFsIHByb2plY3Qgd2lraSBvciBrbm93bGVkZ2UgYmFzZSB0aGF0IGNvdmVycyB0aGUgY29udmVudGlvbnMgdXNlZCBpbiB0aGlzIGNvZGViYXNlLlxuXG5VbHRpbWF0ZWx5LCBmaW5kaW5nIGBQU0laRWAgaXMgYWxsIGFib3V0IG1ldGhvZGljYWwgZXhwbG9yYXRpb24gYW5kIHBhdHRlcm4gcmVjb2duaXRpb24uIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMsIGZvbGxvd2luZyBicmVhZGNydW1icywgYW5kIGNhcmVmdWxseSBleGFtaW5pbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdW50aWwgSSd2ZSBzdWNjZXNzZnVsbHkgdHJhY2VkIGl0cyBkZWZpbml0aW9uIGFuZCBmdWxseSB1bmRlcnN0YW5kIGl0cyByb2xlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTgyOSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6MDE6MDEuNDgwMjg4Mzk0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzQxMTQzOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmaW5lIFBTSVpFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2pmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjAxOjAxLjU1MzcwODkyM1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDE4Njk5OTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBgUFNJWkVgIGluIHRoZSBKRlMgTWV0YXBhZ2UgSGVhZGVyKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYFBTSVpFYC4gIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgSkZTIGZpbGVzeXN0ZW0sIHNwZWNpZmljYWxseSBhcyBpdCByZWxhdGVzIHRvIG1ldGFwYWdlcy4gIFNvLCB0aGUgZmlyc3QgdGhpbmcgSSdtIGdvaW5nIHRvIGRvIGlzIGxvY2F0ZSBpdHMgZGVmaW5pdGlvbi4gVGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyB0aGUgaGVhZGVyIGZpbGUgZm9yIEpGUyBtZXRhcGFnZSBzdHJ1Y3R1cmVzIOKAkyBgZnMvamZzL2pmc19tZXRhcGFnZS5oYC4gIExldCdzIHNlZSB3aGF0IHRoYXQgcmV2ZWFscy4gIEknbSBleHBlY3RpbmcgdG8gZmluZCBpdHMgZGVmaW5pdGlvbiB0aGVyZSwgbGlrZWx5IGFzIGEgbWFjcm8gb3IgcG9zc2libHkgYSBjb25zdGFudCwgYW5kIGhvcGVmdWxseSBzb21lIGNvbnRleHQgYXJvdW5kIGl0cyB1c2UuIEnigJltIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIHBhZ2Ugc2l6ZXMsIGhvdyBpdCBtaWdodCByZWxhdGUgdG8gYmxvY2sgc2l6ZXMsIGFuZCBob3cgdGhlIGZpbGVzeXN0ZW0gc3RydWN0dXJlcyBsZXZlcmFnZSB0aGlzIGBQU0laRWAgdmFsdWUuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSB1c2Ugb2YgdGhpcyBkZWZpbml0aW9uIGluIHRlcm1zIG9mIHRoZSB1bmRlcmx5aW5nIGJsb2NrIGRldmljZSwgYW5kIGhvdyBpdCBtYXkgYmUgdXNlZCBkdXJpbmcgcmVhZHMgYW5kIHdyaXRlcyBvZiBmaWxlIHN5c3RlbSBtZXRhZGF0YS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyNDQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDowMTowNi41NzI0MTIyMTNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMjk1NjI5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJQU0laRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9qZnMvamZzX21ldGFwYWdlLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjAxOjA2LjYzMjcxODkzMloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODU0OTEwMDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgSkZTIEZpbGVzeXN0ZW0gQ29kZWJhc2UqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB3aGVyZSB0aGUgYFBTSVpFYCBtYWNybyBpcyBkZWZpbmVkIGFuZCB1c2VkIHdpdGhpbiB0aGUgSkZTIGZpbGVzeXN0ZW0uIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIE15IGluaXRpYWwgaW5jbGluYXRpb24gaXMgdG8gbG9vayBkaXJlY3RseSBpbiB0aGUgYGZzL2pmcy9gIGRpcmVjdG9yeSwgYXMgdGhhdCdzIHdoZXJlIHRoZSBjb3JlIGZpbGVzeXN0ZW0gY29kZSByZXNpZGVzLiBJdCdzIGEgZmFpcmx5IHN0YW5kYXJkIGFwcHJvYWNoOyBsb2NhdGUgdGhlIHJlbGV2YW50IGluY2x1ZGUgZmlsZXMgZmlyc3QsIHRoZW4gdHJhY2sgZG93biB3aGVyZSB0aGUgbWFjcm8gaXMgdXNlZC4gSSdsbCBzdGFydCB3aXRoIGEgc3RyYWlnaHRmb3J3YXJkIGdyZXAgZm9yIFwiUFNJWkVcIiBhbmQgc2VlIHdoZXJlIHRoYXQgbGVhZHMuIEhvcGVmdWxseSwgaXQncyBhIHNpbXBsZSwgbG9jYWxpemVkIGRlZmluaXRpb24uIElmIG5vdCwgSSdsbCBuZWVkIHRvIGJyb2FkZW4gbXkgc2VhcmNoIHRvIGluY2x1ZGUgYWxsIGhlYWRlciBmaWxlcyB3aXRoaW4gdGhlIEpGUyB0cmVlLCBhbmQgcG90ZW50aWFsbHkgZXZlbiBzeXN0ZW0td2lkZSBoZWFkZXJzIGlmIHRoZSBtYWNybyBhcHBlYXJzIHRvIGJlIG1vcmUgZ2VuZXJpYy4gRnJvbSB0aGVyZSwgSSdsbCBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZTogaXMgaXQgcmVsYXRlZCB0byBibG9jayBzaXplcywgYWxsb2NhdGlvbiB1bml0cywgc2VjdG9yIHNpemVzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGNvbnRleHQgb2YgaXRzIHVzZSB3aWxsIGJlIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBKRlMgYXJjaGl0ZWN0dXJlLiBJIGFudGljaXBhdGUgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zIGlmIGl0IHJlbGF0ZXMgdG8gYmxvY2sgSS9PIG9yIHRoZSB2aXJ0dWFsIGZpbGVzeXN0ZW0gKFZGUykgbGF5ZXIuIEknbGwgbmVlZCB0byBrZWVwIGEgbWVudGFsIG5vdGUgb2YgdGhvc2UgcmVsYXRpb25zaGlwcyBhcyBJIGdvIHRocm91Z2ggdGhlIHJlbGV2YW50IGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTU2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6MDE6MTEuNDg3NjMyMTQ0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDA0NzA1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJQU0laRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9qZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNjY3IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5mcy9qZnMvamZzX2RtYXAuYz0yNDA9aW50IGRiTW91bnQoc3RydWN0IGlub2RlICppcGJtYXApXFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYy0yNTctXFx0XFx0XFx0ICAgQk1BUEJMS05PIFxcdTAwM2NcXHUwMDNjIEpGU19TQkkoaXBibWFwLVxcdTAwM2VpX3NiKS1cXHUwMDNlbDJuYnBlcnBhZ2UsXFxuZnMvamZzL2pmc19kbWFwLmM6MjU4OlxcdFxcdFxcdCAgIFBTSVpFLCAwKTtcXG5mcy9qZnMvamZzX2RtYXAuYy0yNTktXFx0aWYgKG1wID09IE5VTEwpIHtcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jLTI3OC1cXG5mcy9qZnMvamZzX2RtYXAuYzoyNzk6XFx0aWYgKChibXAtXFx1MDAzZWRiX2wybmJwZXJwYWdlIFxcdTAwM2UgTDJQU0laRSAtIEwyTUlOQkxPQ0tTSVpFKSB8fFxcbmZzL2pmcy9qZnNfZG1hcC5jLTI4MC1cXHQgICAgKGJtcC1cXHUwMDNlZGJfbDJuYnBlcnBhZ2UgXFx1MDAzYyAwKSB8fFxcbi0tXFxuZnMvamZzL2pmc19kbWFwLmM9MzYzPWludCBkYlN5bmMoc3RydWN0IGlub2RlICppcGJtYXApXFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYy0zNzUtXFx0XFx0XFx0ICAgQk1BUEJMS05PIFxcdTAwM2NcXHUwMDNjIEpGU19TQkkoaXBibWFwLVxcdTAwM2VpX3NiKS1cXHUwMDNlbDJuYnBlcnBhZ2UsXFxuZnMvamZzL2pmc19kbWFwLmM6Mzc2OlxcdFxcdFxcdCAgIFBTSVpFLCAwKTtcXG5mcy9qZnMvamZzX2RtYXAuYy0zNzctXFx0aWYgKG1wID09IE5VTEwpIHtcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jPTQzMT1pbnQgZGJGcmVlKHN0cnVjdCBpbm9kZSAqaXAsIHM2NCBibGtubywgczY0IG5ibG9ja3MpXFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYy00NzEtXFx0XFx0bGJsa25vID0gQkxLVE9ETUFQKGJsa25vLCBibXAtXFx1MDAzZWRiX2wybmJwZXJwYWdlKTtcXG5mcy9qZnMvamZzX2RtYXAuYzo0NzI6XFx0XFx0bXAgPSByZWFkX21ldGFwYWdlKGlwYm1hcCwgbGJsa25vLCBQU0laRSwgMCk7XFxuZnMvamZzL2pmc19kbWFwLmMtNDczLVxcdFxcdGlmIChtcCA9PSBOVUxMKSB7XFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYz01MjU9ZGJVcGRhdGVQTWFwKHN0cnVjdCBpbm9kZSAqaXBibWFwLFxcbi0tXFxuZnMvamZzL2pmc19kbWFwLmMtNTY1LVxcbmZzL2pmcy9qZnNfZG1hcC5jOjU2NjpcXHRcXHRcXHRtcCA9IHJlYWRfbWV0YXBhZ2UoYm1wLVxcdTAwM2VkYl9pcGJtYXAsIGxibGtubywgUFNJWkUsXFxuZnMvamZzL2pmc19kbWFwLmMtNTY3LVxcdFxcdFxcdFxcdFxcdCAgIDApO1xcbi0tXFxuZnMvamZzL2pmc19kbWFwLmM9ODAxPWludCBkYkFsbG9jKHN0cnVjdCBpbm9kZSAqaXAsIHM2NCBoaW50LCBzNjQgbmJsb2NrcywgczY0ICogcmVzdWx0cylcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jLTg4Mi1cXHRcXHRsYmxrbm8gPSBCTEtUT0RNQVAoYmxrbm8sIGJtcC1cXHUwMDNlZGJfbDJuYnBlcnBhZ2UpO1xcbmZzL2pmcy9qZnNfZG1hcC5jOjg4MzpcXHRcXHRtcCA9IHJlYWRfbWV0YXBhZ2UoaXBibWFwLCBsYmxrbm8sIFBTSVpFLCAwKTtcXG5mcy9qZnMvamZzX2RtYXAuYy04ODQtXFx0XFx0aWYgKG1wID09IE5VTEwpXFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYz0xMDU5PXN0YXRpYyBpbnQgZGJFeHRlbmQoc3RydWN0IGlub2RlICppcCwgczY0IGJsa25vLCBzNjQgbmJsb2NrcywgczY0IGFkZG5ibG9ja3MpXFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYy0xMTEyLVxcdGxibGtubyA9IEJMS1RPRE1BUChleHRibGtubywgYm1wLVxcdTAwM2VkYl9sMm5icGVycGFnZSk7XFxuZnMvamZzL2pmc19kbWFwLmM6MTExMzpcXHRtcCA9IHJlYWRfbWV0YXBhZ2UoaXBibWFwLCBsYmxrbm8sIFBTSVpFLCAwKTtcXG5mcy9qZnMvamZzX2RtYXAuYy0xMTE0LVxcdGlmIChtcCA9PSBOVUxMKSB7XFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYz0xMzk5PWRiQWxsb2NBRyhzdHJ1Y3QgYm1hcCAqIGJtcCwgaW50IGFnbm8sIHM2NCBuYmxvY2tzLCBpbnQgbDJuYiwgczY0ICogcmVzdWx0cylcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jLTE0NTUtXFx0bGJsa25vID0gQkxLVE9DVEwoYmxrbm8sIGJtcC1cXHUwMDNlZGJfbDJuYnBlcnBhZ2UsIGJtcC1cXHUwMDNlZGJfYWdsZXZlbCk7XFxuZnMvamZzL2pmc19kbWFwLmM6MTQ1NjpcXHRtcCA9IHJlYWRfbWV0YXBhZ2UoYm1wLVxcdTAwM2VkYl9pcGJtYXAsIGxibGtubywgUFNJWkUsIDApO1xcbmZzL2pmcy9qZnNfZG1hcC5jLTE0NTctXFx0aWYgKG1wID09IE5VTEwpXFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYz0xNzY4PXN0YXRpYyBpbnQgZGJGaW5kQ3RsKHN0cnVjdCBibWFwICogYm1wLCBpbnQgbDJuYiwgaW50IGxldmVsLCBzNjQgKiBibGtubylcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jLTE3ODUtXFx0XFx0bGJsa25vID0gQkxLVE9DVEwoYiwgYm1wLVxcdTAwM2VkYl9sMm5icGVycGFnZSwgbGV2KTtcXG5mcy9qZnMvamZzX2RtYXAuYzoxNzg2OlxcdFxcdG1wID0gcmVhZF9tZXRhcGFnZShibXAtXFx1MDAzZWRiX2lwYm1hcCwgbGJsa25vLCBQU0laRSwgMCk7XFxuZnMvamZzL2pmc19kbWFwLmMtMTc4Ny1cXHRcXHRpZiAobXAgPT0gTlVMTClcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jPTE4ODc9ZGJBbGxvY0N0bChzdHJ1Y3QgYm1hcCAqIGJtcCwgczY0IG5ibG9ja3MsIGludCBsMm5iLCBzNjQgYmxrbm8sIHM2NCAqIHJlc3VsdHMpXFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYy0xODk5LVxcdFxcdGxibGtubyA9IEJMS1RPRE1BUChibGtubywgYm1wLVxcdTAwM2VkYl9sMm5icGVycGFnZSk7XFxuZnMvamZzL2pmc19kbWFwLmM6MTkwMDpcXHRcXHRtcCA9IHJlYWRfbWV0YXBhZ2UoYm1wLVxcdTAwM2VkYl9pcGJtYXAsIGxibGtubywgUFNJWkUsIDApO1xcbmZzL2pmcy9qZnNfZG1hcC5jLTE5MDEtXFx0XFx0aWYgKG1wID09IE5VTEwpXFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYy0xOTMxLVxcdFxcdGxibGtubyA9IEJMS1RPRE1BUChiLCBibXAtXFx1MDAzZWRiX2wybmJwZXJwYWdlKTtcXG5mcy9qZnMvamZzX2RtYXAuYzoxOTMyOlxcdFxcdG1wID0gcmVhZF9tZXRhcGFnZShibXAtXFx1MDAzZWRiX2lwYm1hcCwgbGJsa25vLCBQU0laRSwgMCk7XFxuZnMvamZzL2pmc19kbWFwLmMtMTkzMy1cXHRcXHRpZiAobXAgPT0gTlVMTCkge1xcbi0tXFxuZnMvamZzL2pmc19kbWFwLmMtMTk4NC1cXHRcXHRsYmxrbm8gPSBCTEtUT0RNQVAoYiwgYm1wLVxcdTAwM2VkYl9sMm5icGVycGFnZSk7XFxuZnMvamZzL2pmc19kbWFwLmM6MTk4NTpcXHRcXHRtcCA9IHJlYWRfbWV0YXBhZ2UoYm1wLVxcdTAwM2VkYl9pcGJtYXAsIGxibGtubywgUFNJWkUsIDApO1xcbmZzL2pmcy9qZnNfZG1hcC5jLTE5ODYtXFx0XFx0aWYgKG1wID09IE5VTEwpIHtcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jPTI1NTc9ZGJBZGpDdGwoc3RydWN0IGJtYXAgKiBibXAsIHM2NCBibGtubywgaW50IG5ld3ZhbCwgaW50IGFsbG9jLCBpbnQgbGV2ZWwpXFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYy0yNTY5LVxcdGxibGtubyA9IEJMS1RPQ1RMKGJsa25vLCBibXAtXFx1MDAzZWRiX2wybmJwZXJwYWdlLCBsZXZlbCk7XFxuZnMvamZzL2pmc19kbWFwLmM6MjU3MDpcXHRtcCA9IHJlYWRfbWV0YXBhZ2UoYm1wLVxcdTAwM2VkYl9pcGJtYXAsIGxibGtubywgUFNJWkUsIDApO1xcbmZzL2pmcy9qZnNfZG1hcC5jLTI1NzEtXFx0aWYgKG1wID09IE5VTEwpXFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYz0zMjc4PWludCBkYkFsbG9jQm90dG9tVXAoc3RydWN0IGlub2RlICppcCwgczY0IGJsa25vLCBzNjQgbmJsb2NrcylcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jLTMzMDMtXFx0XFx0bGJsa25vID0gQkxLVE9ETUFQKGJsa25vLCBibXAtXFx1MDAzZWRiX2wybmJwZXJwYWdlKTtcXG5mcy9qZnMvamZzX2RtYXAuYzozMzA0OlxcdFxcdG1wID0gcmVhZF9tZXRhcGFnZShpcGJtYXAsIGxibGtubywgUFNJWkUsIDApO1xcbmZzL2pmcy9qZnNfZG1hcC5jLTMzMDUtXFx0XFx0aWYgKG1wID09IE5VTEwpIHtcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jPTM0NTQ9aW50IGRiRXh0ZW5kRlMoc3RydWN0IGlub2RlICppcGJtYXAsIHM2NCBibGtubyxcXHRzNjQgbmJsb2NrcylcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jLTM1MzctXFx0cCA9IEJNQVBCTEtOTyArIG5icGVycGFnZTtcXHQvKiBMMiBwYWdlICovXFxuZnMvamZzL2pmc19kbWFwLmM6MzUzODpcXHRsMm1wID0gcmVhZF9tZXRhcGFnZShpcGJtYXAsIHAsIFBTSVpFLCAwKTtcXG5mcy9qZnMvamZzX2RtYXAuYy0zNTM5LVxcdGlmICghbDJtcCkge1xcbi0tXFxuZnMvamZzL2pmc19kbWFwLmMtMzU2MS1cXHRcXHRcXHQvKiByZWFkIGluIEwxIHBhZ2U6IChibGtubyBcXHUwMDI2IChNQVhMMVNJWkUgLSAxKSkgKi9cXG5mcy9qZnMvamZzX2RtYXAuYzozNTYyOlxcdFxcdFxcdGwxbXAgPSByZWFkX21ldGFwYWdlKGlwYm1hcCwgcCwgUFNJWkUsIDApO1xcbmZzL2pmcy9qZnNfZG1hcC5jLTM1NjMtXFx0XFx0XFx0aWYgKGwxbXAgPT0gTlVMTClcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jLTM1NzctXFx0XFx0XFx0LyogYXNzaWduL2luaXQgTDEgcGFnZSAqL1xcbmZzL2pmcy9qZnNfZG1hcC5jOjM1Nzg6XFx0XFx0XFx0bDFtcCA9IGdldF9tZXRhcGFnZShpcGJtYXAsIHAsIFBTSVpFLCAwKTtcXG5mcy9qZnMvamZzX2RtYXAuYy0zNTc5LVxcdFxcdFxcdGlmIChsMW1wID09IE5VTEwpXFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYy0zNjAxLVxcbmZzL2pmcy9qZnNfZG1hcC5jOjM2MDI6XFx0XFx0XFx0XFx0bDBtcCA9IHJlYWRfbWV0YXBhZ2UoaXBibWFwLCBwLCBQU0laRSwgMCk7XFxuZnMvamZzL2pmc19kbWFwLmMtMzYwMy1cXHRcXHRcXHRcXHRpZiAobDBtcCA9PSBOVUxMKVxcbi0tXFxuZnMvamZzL2pmc19kbWFwLmMtMzYxOS1cXHRcXHRcXHRcXHQvKiBhc3NpZ24vaW5pdCBMMCBwYWdlICovXFxuZnMvamZzL2pmc19kbWFwLmM6MzYyMDpcXHRcXHRcXHRcXHRsMG1wID0gZ2V0X21ldGFwYWdlKGlwYm1hcCwgcCwgUFNJWkUsIDApO1xcbmZzL2pmcy9qZnNfZG1hcC5jLTM2MjEtXFx0XFx0XFx0XFx0aWYgKGwwbXAgPT0gTlVMTClcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jLTM2NDYtXFx0XFx0XFx0XFx0XFx0bXAgPSByZWFkX21ldGFwYWdlKGlwYm1hcCwgcCxcXG5mcy9qZnMvamZzX2RtYXAuYzozNjQ3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIFBTSVpFLCAwKTtcXG5mcy9qZnMvamZzX2RtYXAuYy0zNjQ4LVxcdFxcdFxcdFxcdFxcdGlmIChtcCA9PSBOVUxMKVxcbi0tXFxuZnMvamZzL2pmc19kbWFwLmMtMzY1My1cXHRcXHRcXHRcXHRcXHRtcCA9IHJlYWRfbWV0YXBhZ2UoaXBibWFwLCBwLFxcbmZzL2pmcy9qZnNfZG1hcC5jOjM2NTQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgUFNJWkUsIDApO1xcbmZzL2pmcy9qZnNfZG1hcC5jLTM2NTUtXFx0XFx0XFx0XFx0XFx0aWYgKG1wID09IE5VTEwpXFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuaC00NC1cXG5mcy9qZnMvamZzX2RtYXAuaDo0NTojZGVmaW5lXFx0TUFYTUFQU0laRVxcdE1BWEwyU0laRVxcdC8qIG1heGltdW0gYWdncmVnYXRlIG1hcCBzaXplICovXFxuZnMvamZzL2pmc19kbWFwLmgtNDYtXFxuLS1cXG5mcy9qZnMvamZzX2R0cmVlLmM9MTkzPXN0YXRpYyBzdHJ1Y3QgbWV0YXBhZ2UgKnJlYWRfaW5kZXhfcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzNjQgYmxrbm8pXFxuLS1cXG5mcy9qZnMvamZzX2R0cmVlLmMtMjAzLVxcbmZzL2pmcy9qZnNfZHRyZWUuYzoyMDQ6XFx0cmV0dXJuIHJlYWRfbWV0YXBhZ2UoaW5vZGUsIHhhZGRyLCBQU0laRSwgMSk7XFxuZnMvamZzL2pmc19kdHJlZS5jLTIwNS19XFxuLS1cXG5mcy9qZnMvamZzX2R0cmVlLmM9MjEyPXN0YXRpYyBzdHJ1Y3QgbWV0YXBhZ2UgKmdldF9pbmRleF9wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHM2NCBibGtubylcXG4tLVxcbmZzL2pmcy9qZnNfZHRyZWUuYy0yMjItXFxuZnMvamZzL2pmc19kdHJlZS5jOjIyMzpcXHRyZXR1cm4gZ2V0X21ldGFwYWdlKGlub2RlLCB4YWRkciwgUFNJWkUsIDEpO1xcbmZzL2pmcy9qZnNfZHRyZWUuYy0yMjQtfVxcbi0tXFxuZnMvamZzL2pmc19kdHJlZS5jPTIzND1zdGF0aWMgc3RydWN0IGRpcl90YWJsZV9zbG90ICpmaW5kX2luZGV4KHN0cnVjdCBpbm9kZSAqaXAsIHUzMiBpbmRleCxcXG4tLVxcbmZzL2pmcy9qZnNfZHRyZWUuYy0yNjQtXFx0XFx0b2Zmc2V0ID0gKGluZGV4IC0gMikgKiBzaXplb2Yoc3RydWN0IGRpcl90YWJsZV9zbG90KTtcXG5mcy9qZnMvamZzX2R0cmVlLmM6MjY1OlxcdFxcdHBhZ2Vfb2Zmc2V0ID0gb2Zmc2V0IFxcdTAwMjYgKFBTSVpFIC0gMSk7XFxuZnMvamZzL2pmc19kdHJlZS5jOjI2NjpcXHRcXHRibGtubyA9ICgob2Zmc2V0ICsgMSkgXFx1MDAzZVxcdTAwM2UgTDJQU0laRSkgXFx1MDAzY1xcdTAwM2NcXG5mcy9qZnMvamZzX2R0cmVlLmMtMjY3LVxcdFxcdCAgICBKRlNfU0JJKGlwLVxcdTAwM2VpX3NiKS1cXHUwMDNlbDJuYnBlcnBhZ2U7XFxuLS1cXG5mcy9qZnMvamZzX2R0cmVlLmM9MzE5PXN0YXRpYyB1MzIgYWRkX2luZGV4KHRpZF90IHRpZCwgc3RydWN0IGlub2RlICppcCwgczY0IGJuLCBpbnQgc2xvdClcXG4tLVxcbmZzL2pmcy9qZnNfZHRyZWUuYy0zOTktXFx0XFx0fVxcbmZzL2pmcy9qZnNfZHRyZWUuYzo0MDA6XFx0XFx0aXAtXFx1MDAzZWlfc2l6ZSA9IFBTSVpFO1xcbmZzL2pmcy9qZnNfZHRyZWUuYy00MDEtXFxuLS1cXG5mcy9qZnMvamZzX2R0cmVlLmMtNDMwLVxcdG9mZnNldCA9IChpbmRleCAtIDIpICogc2l6ZW9mKHN0cnVjdCBkaXJfdGFibGVfc2xvdCk7XFxuZnMvamZzL2pmc19kdHJlZS5jOjQzMTpcXHRwYWdlX29mZnNldCA9IG9mZnNldCBcXHUwMDI2IChQU0laRSAtIDEpO1xcbmZzL2pmcy9qZnNfZHRyZWUuYzo0MzI6XFx0Ymxrbm8gPSAoKG9mZnNldCArIDEpIFxcdTAwM2VcXHUwMDNlIEwyUFNJWkUpIFxcdTAwM2NcXHUwMDNjIHNiaS1cXHUwMDNlbDJuYnBlcnBhZ2U7XFxuZnMvamZzL2pmc19kdHJlZS5jLTQzMy1cXHRpZiAocGFnZV9vZmZzZXQgPT0gMCkge1xcbi0tXFxuZnMvamZzL2pmc19kdHJlZS5jLTQ0MS1cXHRcXHR9XFxuZnMvamZzL2pmc19kdHJlZS5jOjQ0MjpcXHRcXHRpcC1cXHUwMDNlaV9zaXplICs9IFBTSVpFO1xcbmZzL2pmcy9qZnNfZHRyZWUuYy00NDMtXFxuZnMvamZzL2pmc19kdHJlZS5jLTQ0NC1cXHRcXHRpZiAoKG1wID0gZ2V0X2luZGV4X3BhZ2UoaXAsIGJsa25vKSkpXFxuZnMvamZzL2pmc19kdHJlZS5jOjQ0NTpcXHRcXHRcXHRtZW1zZXQobXAtXFx1MDAzZWRhdGEsIDAsIFBTSVpFKTtcXHQvKiBKdXN0IGxvb2tzIGJldHRlciAqL1xcbmZzL2pmcy9qZnNfZHRyZWUuYy00NDYtXFx0XFx0ZWxzZVxcbi0tXFxuZnMvamZzL2pmc19kdHJlZS5jPTkyMz1zdGF0aWMgaW50IGR0U3BsaXRVcCh0aWRfdCB0aWQsXFxuLS1cXG5mcy9qZnMvamZzX2R0cmVlLmMtMTAxMy1cXHR4c2l6ZSA9IHhsZW4gXFx1MDAzY1xcdTAwM2Mgc2JpLVxcdTAwM2VsMmJzaXplO1xcbmZzL2pmcy9qZnNfZHRyZWUuYzoxMDE0OlxcdGlmICh4c2l6ZSBcXHUwMDNjIFBTSVpFKSB7XFxuZnMvamZzL2pmc19kdHJlZS5jLTEwMTUtXFx0XFx0eGFkZHIgPSBhZGRyZXNzUFhEKHB4ZCk7XFxuLS1cXG5mcy9qZnMvamZzX2R0cmVlLmMtMTA5Ni1cXHRpZiAoIURPX0lOREVYKGlwKSlcXG5mcy9qZnMvamZzX2R0cmVlLmM6MTA5NzpcXHRcXHRpcC1cXHUwMDNlaV9zaXplICs9IFBTSVpFO1xcbmZzL2pmcy9qZnNfZHRyZWUuYy0xMDk4LVxcbi0tXFxuZnMvamZzL2pmc19kdHJlZS5jLTExMzAtXFx0XFx0LyogZ2V0IHRoZSBwYXJlbnQgcGFnZSBcXHUwMDNjc3BcXHUwMDNlICovXFxuZnMvamZzL2pmc19kdHJlZS5jOjExMzE6XFx0XFx0RFRfR0VUUEFHRShpcCwgcGFyZW50LVxcdTAwM2Vibiwgc21wLCBQU0laRSwgc3AsIHJjKTtcXG5mcy9qZnMvamZzX2R0cmVlLmMtMTEzMi1cXHRcXHRpZiAocmMpIHtcXG4tLVxcbmZzL2pmcy9qZnNfZHRyZWUuYz0xMzIzPXN0YXRpYyBpbnQgZHRTcGxpdFBhZ2UodGlkX3QgdGlkLCBzdHJ1Y3QgaW5vZGUgKmlwLCBzdHJ1Y3QgZHRzcGxpdCAqIHNwbGl0LFxcbi0tXFxuZnMvamZzL2pmc19kdHJlZS5jLTEzNTktXFx0cmJuID0gYWRkcmVzc1BYRChweGQpO1xcbmZzL2pmcy9qZnNfZHRyZWUuYzoxMzYwOlxcdHJtcCA9IGdldF9tZXRhcGFnZShpcCwgcmJuLCBQU0laRSwgMSk7XFxuZnMvamZzL2pmc19kdHJlZS5jLTEzNjEtXFx0aWYgKHJtcCA9PSBOVUxMKVxcbi0tXFxuZnMvamZzL2pmc19kdHJlZS5jLTE0MTYtXFxuZnMvamZzL2pmc19kdHJlZS5jOjE0MTc6XFx0biA9IFBTSVpFIFxcdTAwM2VcXHUwMDNlIEwyRFRTTE9UU0laRTtcXG5mcy9qZnMvamZzX2R0cmVlLmMtMTQxOC1cXHRycC1cXHUwMDNlaGVhZGVyLm1heHNsb3QgPSBuO1xcbi0tXFxuZnMvamZzL2pmc19kdHJlZS5jLTE0NjctXFx0aWYgKG5leHRibiAhPSAwKSB7XFxuZnMvamZzL2pmc19kdHJlZS5jOjE0Njg6XFx0XFx0RFRfR0VUUEFHRShpcCwgbmV4dGJuLCBtcCwgUFNJWkUsIHAsIHJjKTtcXG5mcy9qZnMvamZzX2R0cmVlLmMtMTQ2OS1cXHRcXHRpZiAocmMpIHtcXG4tLVxcbmZzL2pmcy9qZnNfZHRyZWUuYy0xNDk3LVxcdHNraXAgPSBzcGxpdC1cXHUwMDNlaW5kZXg7XFxuZnMvamZzL2pmc19kdHJlZS5jOjE0OTg6XFx0aGFsZiA9IChQU0laRSBcXHUwMDNlXFx1MDAzZSBMMkRUU0xPVFNJWkUpIFxcdTAwM2VcXHUwMDNlIDE7XFx0Lyogc3dhZyAqL1xcbmZzL2pmcy9qZnNfZHRyZWUuYy0xNDk5LVxcdGxlZnQgPSAwO1xcbi0tXFxuZnMvamZzL2pmc19kdHJlZS5jPTE2MzU9c3RhdGljIGludCBkdEV4dGVuZFBhZ2UodGlkX3QgdGlkLFxcbi0tXFxuZnMvamZzL2pmc19kdHJlZS5jLTE2NjUtXFx0cGFyZW50ID0gQlRfUE9QKGJ0c3RhY2spO1xcbmZzL2pmcy9qZnNfZHRyZWUuYzoxNjY2OlxcdERUX0dFVFBBR0UoaXAsIHBhcmVudC1cXHUwMDNlYm4sIHBtcCwgUFNJWkUsIHBwLCByYyk7XFxuZnMvamZzL2pmc19kdHJlZS5jLTE2NjctXFx0aWYgKHJjKVxcbi0tXFxuZnMvamZzL2pmc19kdHJlZS5jPTIwNzU9aW50IGR0RGVsZXRlKHRpZF90IHRpZCxcXG4tLVxcbmZzL2pmcy9qZnNfZHRyZWUuYy0yMTIzLVxcdFxcdFxcdFxcdERUX0dFVFBBR0UoaXAsIGxlNjRfdG9fY3B1KHAtXFx1MDAzZWhlYWRlci5uZXh0KSxcXG5mcy9qZnMvamZzX2R0cmVlLmM6MjEyNDpcXHRcXHRcXHRcXHRcXHQgICBubXAsIFBTSVpFLCBucCwgcmMpO1xcbmZzL2pmcy9qZnNfZHRyZWUuYy0yMTI1LVxcdFxcdFxcdFxcdGlmIChyYylcXG4tLVxcbmZzL2pmcy9qZnNfZHRyZWUuYz0yMjMwPXN0YXRpYyBpbnQgZHREZWxldGVVcCh0aWRfdCB0aWQsIHN0cnVjdCBpbm9kZSAqaXAsXFxuLS1cXG5mcy9qZnMvamZzX2R0cmVlLmMtMjMwMC1cXHRcXHQvKiBwaW4gdGhlIHBhcmVudCBwYWdlIFxcdTAwM2NzcFxcdTAwM2UgKi9cXG5mcy9qZnMvamZzX2R0cmVlLmM6MjMwMTpcXHRcXHREVF9HRVRQQUdFKGlwLCBwYXJlbnQtXFx1MDAzZWJuLCBtcCwgUFNJWkUsIHAsIHJjKTtcXG5mcy9qZnMvamZzX2R0cmVlLmMtMjMwMi1cXHRcXHRpZiAocmMpXFxuLS1cXG5mcy9qZnMvamZzX2R0cmVlLmMtMjQyNS1cXHRpZiAoIURPX0lOREVYKGlwKSlcXG5mcy9qZnMvamZzX2R0cmVlLmM6MjQyNjpcXHRcXHRpcC1cXHUwMDNlaV9zaXplIC09IFBTSVpFO1xcbmZzL2pmcy9qZnNfZHRyZWUuYy0yNDI3LVxcbi0tXFxuZnMvamZzL2pmc19kdHJlZS5jPTI0NDI9c3RhdGljIGludCBkdFJlbGluayh0aWRfdCB0aWQsIHN0cnVjdCBpbm9kZSAqaXAsIGR0cGFnZV90ICogcClcXG4tLVxcbmZzL2pmcy9qZnNfZHRyZWUuYy0yNDU1LVxcdGlmIChuZXh0Ym4gIT0gMCkge1xcbmZzL2pmcy9qZnNfZHRyZWUuYzoyNDU2OlxcdFxcdERUX0dFVFBBR0UoaXAsIG5leHRibiwgbXAsIFBTSVpFLCBwLCByYyk7XFxuZnMvamZzL2pmc19kdHJlZS5jLTI0NTctXFx0XFx0aWYgKHJjKVxcbi0tXFxuZnMvamZzL2pmc19kdHJlZS5jLTI0ODQtXFx0aWYgKHByZXZibiAhPSAwKSB7XFxuZnMvamZzL2pmc19kdHJlZS5jOjI0ODU6XFx0XFx0RFRfR0VUUEFHRShpcCwgcHJldmJuLCBtcCwgUFNJWkUsIHAsIHJjKTtcXG5mcy9qZnMvamZzX2R0cmVlLmMtMjQ4Ni1cXHRcXHRpZiAocmMpXFxuLS1cXG5mcy9qZnMvamZzX2R0cmVlLmM9MjYxMz1zdGF0aWMgaW50IGFkZF9taXNzaW5nX2luZGljZXMoc3RydWN0IGlub2RlICppbm9kZSwgczY0IGJuKVxcbi0tXFxuZnMvamZzL2pmc19kdHJlZS5jLTI2MjgtXFxuZnMvamZzL2pmc19kdHJlZS5jOjI2Mjk6XFx0RFRfR0VUUEFHRShpbm9kZSwgYm4sIG1wLCBQU0laRSwgcCwgcmMpO1xcbmZzL2pmcy9qZnNfZHRyZWUuYy0yNjMwLVxcbi0tXFxuZnMvamZzL2pmc19kdHJlZS5jPTI3MTE9aW50IGpmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcXG4tLVxcbmZzL2pmcy9qZnNfZHRyZWUuYy0yNzkzLVxcdFxcdFxcdGluZGV4ID0gZGlydGFiX3Nsb3Quc2xvdDtcXG5mcy9qZnMvamZzX2R0cmVlLmM6Mjc5NDpcXHRcXHRcXHREVF9HRVRQQUdFKGlwLCBibiwgbXAsIFBTSVpFLCBwLCByYyk7XFxuZnMvamZzL2pmc19kdHJlZS5jLTI3OTUtXFx0XFx0XFx0aWYgKHJjKSB7XFxuLS1cXG5mcy9qZnMvamZzX2R0cmVlLmMtMzAzNy1cXG5mcy9qZnMvamZzX2R0cmVlLmM6MzAzODpcXHRcXHREVF9HRVRQQUdFKGlwLCBibiwgbXAsIFBTSVpFLCBwLCByYyk7XFxuZnMvamZzL2pmc19kdHJlZS5jLTMwMzktXFx0XFx0aWYgKHJjKSB7XFxuLS1cXG5mcy9qZnMvamZzX2R0cmVlLmM9MzEzNj1zdGF0aWMgaW50IGR0UmVhZE5leHQoc3RydWN0IGlub2RlICppcCwgbG9mZl90ICogb2Zmc2V0LFxcbi0tXFxuZnMvamZzL2pmc19kdHJlZS5jLTMyMTktXFx0Ym4gPSBwYXJlbnQtXFx1MDAzZWJuO1xcbmZzL2pmcy9qZnNfZHRyZWUuYzozMjIwOlxcdERUX0dFVFBBR0UoaXAsIGJuLCBtcCwgUFNJWkUsIHAsIHJjKTtcXG5mcy9qZnMvamZzX2R0cmVlLmMtMzIyMS1cXHRpZiAocmMpXFxuLS1cXG5mcy9qZnMvamZzX2R0cmVlLmMtMzI0MC1cXHRcXHQvKiBnZXQgbmV4dCBwYXJlbnQgcGFnZSAqL1xcbmZzL2pmcy9qZnNfZHRyZWUuYzozMjQxOlxcdFxcdERUX0dFVFBBR0UoaXAsIGJuLCBtcCwgUFNJWkUsIHAsIHJjKTtcXG5mcy9qZnMvamZzX2R0cmVlLmMtMzI0Mi1cXHRcXHRpZiAocmMpXFxuLS1cXG5mcy9qZnMvamZzX2R0cmVlLmMtMzI2MC0gICAgICBjOlxcbmZzL2pmcy9qZnNfZHRyZWUuYzozMjYxOlxcdERUX0dFVFBBR0UoaXAsIGJuLCBtcCwgUFNJWkUsIHAsIHJjKTtcXG5mcy9qZnMvamZzX2R0cmVlLmMtMzI2Mi1cXHRpZiAocmMpXFxuLS1cXG5mcy9qZnMvamZzX2R0cmVlLmMtMzI4MS1cXHRcXHQvKiBnZXQgbmV4dCBsZWFmIHBhZ2UgKi9cXG5mcy9qZnMvamZzX2R0cmVlLmM6MzI4MjpcXHRcXHREVF9HRVRQQUdFKGlwLCBibiwgbXAsIFBTSVpFLCBwLCByYyk7XFxuZnMvamZzL2pmc19kdHJlZS5jLTMyODMtXFx0XFx0aWYgKHJjKVxcbi0tXFxuZnMvamZzL2pmc19kdHJlZS5jPTQzODQ9Ym9vbCBjaGVja19kdHBhZ2UoZHRwYWdlX3QgKnApXFxuLS1cXG5mcy9qZnMvamZzX2R0cmVlLmMtNDM4Ni1cXHRERUNMQVJFX0JJVE1BUChiaXRtYXAsIERUUEFHRU1BWFNMT1QpID0gezB9O1xcbmZzL2pmcy9qZnNfZHRyZWUuYzo0Mzg3OlxcdGNvbnN0IGludCBzdGJsc2l6ZSA9ICgoUFNJWkUgXFx1MDAzZVxcdTAwM2UgTDJEVFNMT1RTSVpFKSArIDMxKSBcXHUwMDNlXFx1MDAzZSBMMkRUU0xPVFNJWkU7XFxuZnMvamZzL2pmc19kdHJlZS5jLTQzODgtXFx0aW50IGk7XFxuLS1cXG5mcy9qZnMvamZzX2ZpbHN5cy5oLTgxLS8qIHBhZ2Ugc2l6ZSAqL1xcbmZzL2pmcy9qZnNfZmlsc3lzLmg6ODI6I2lmZGVmIFBTSVpFXFxuZnMvamZzL2pmc19maWxzeXMuaDo4MzojdW5kZWYgUFNJWkVcXG5mcy9qZnMvamZzX2ZpbHN5cy5oLTg0LSNlbmRpZlxcbmZzL2pmcy9qZnNfZmlsc3lzLmg6ODU6I2RlZmluZVxcdFBTSVpFXFx0XFx0NDA5NlxcdC8qIHBhZ2Ugc2l6ZSAoaW4gYnl0ZSkgKi9cXG5mcy9qZnMvamZzX2ZpbHN5cy5oOjg2OiNkZWZpbmVcXHRMMlBTSVpFXFx0XFx0MTJcXHQvKiBsb2cyKFBTSVpFKSAqL1xcbmZzL2pmcy9qZnNfZmlsc3lzLmgtODctI2RlZmluZVxcdFBPRkZTRVRcXHRcXHQ0MDk1XFx0Lyogb2Zmc2V0IHdpdGhpbiBwYWdlICovXFxuLS1cXG5mcy9qZnMvamZzX2ZpbHN5cy5oLTg5LS8qIGJ1ZmZlciBwYWdlIHNpemUgKi9cXG5mcy9qZnMvamZzX2ZpbHN5cy5oOjkwOiNkZWZpbmUgQlBTSVpFXFx0UFNJWkVcXG5mcy9qZnMvamZzX2ZpbHN5cy5oLTkxLVxcbi0tXFxuZnMvamZzL2pmc19maWxzeXMuaC05NC0gKlxcbmZzL2pmcy9qZnNfZmlsc3lzLmg6OTU6ICogUFNJWkUgXFx1MDAzZT0gZmlsZSBzeXN0ZW0gYmxvY2sgc2l6ZSBcXHUwMDNlPSBQQlNJWkUgXFx1MDAzZT0gRElTSVpFXFxuZnMvamZzL2pmc19maWxzeXMuaC05Ni0gKi9cXG4tLVxcbmZzL2pmcy9qZnNfZmlsc3lzLmgtMTQ0LS8qIHNpemUgaW4gYnl0ZSAtXFx1MDAzZSBsYXN0IHBhZ2UgbnVtYmVyICovXFxuZnMvamZzL2pmc19maWxzeXMuaDoxNDU6I2RlZmluZVxcdFNJWkUyUE4oc2l6ZSlcXHQoICgoczY0KSgoc2l6ZSkgLSAxKSkgXFx1MDAzZVxcdTAwM2UgKEwyUFNJWkUpIClcXG5mcy9qZnMvamZzX2ZpbHN5cy5oLTE0Ni0vKiBzaXplIGluIGJ5dGUgLVxcdTAwM2UgbGFzdCBmaWxlIHN5c3RlbSBibG9jayBudW1iZXIgKi9cXG4tLVxcbmZzL2pmcy9qZnNfZmlsc3lzLmgtMTY3LSAqL1xcbmZzL2pmcy9qZnNfZmlsc3lzLmg6MTY4OiNkZWZpbmUgU0laRV9PRl9TVVBFUlxcdFBTSVpFXFxuZnMvamZzL2pmc19maWxzeXMuaC0xNjktXFxuLS1cXG5mcy9qZnMvamZzX2ZpbHN5cy5oLTE3Mi0gKi9cXG5mcy9qZnMvamZzX2ZpbHN5cy5oOjE3MzojZGVmaW5lIFNJWkVfT0ZfQUdfVEFCTEVcXHRQU0laRVxcbmZzL2pmcy9qZnNfZmlsc3lzLmgtMTc0LVxcbi0tXFxuZnMvamZzL2pmc19maWxzeXMuaC0xNzgtICovXFxuZnMvamZzL2pmc19maWxzeXMuaDoxNzk6I2RlZmluZSBTSVpFX09GX01BUF9QQUdFXFx0UFNJWkVcXG5mcy9qZnMvamZzX2ZpbHN5cy5oLTE4MC1cXG4tLVxcbmZzL2pmcy9qZnNfZmlsc3lzLmgtMjU2LSNkZWZpbmUgSkZTX05BTUVfTUFYXFx0MjU1XFxuZnMvamZzL2pmc19maWxzeXMuaDoyNTc6I2RlZmluZSBKRlNfUEFUSF9NQVhcXHRCUFNJWkVcXG5mcy9qZnMvamZzX2ZpbHN5cy5oLTI1OC1cXG4tLVxcbmZzL2pmcy9qZnNfaW1hcC5jPTk0PWludCBkaU1vdW50KHN0cnVjdCBpbm9kZSAqaXBpbWFwKVxcbi0tXFxuZnMvamZzL2pmc19pbWFwLmMtMTEyLVxcdFxcdFxcdCAgIElNQVBCTEtOTyBcXHUwMDNjXFx1MDAzYyBKRlNfU0JJKGlwaW1hcC1cXHUwMDNlaV9zYiktXFx1MDAzZWwybmJwZXJwYWdlLFxcbmZzL2pmcy9qZnNfaW1hcC5jOjExMzpcXHRcXHRcXHQgICBQU0laRSwgMCk7XFxuZnMvamZzL2pmc19pbWFwLmMtMTE0LVxcdGlmIChtcCA9PSBOVUxMKSB7XFxuLS1cXG5mcy9qZnMvamZzX2ltYXAuYz0yMDU9aW50IGRpU3luYyhzdHJ1Y3QgaW5vZGUgKmlwaW1hcClcXG4tLVxcbmZzL2pmcy9qZnNfaW1hcC5jLTIxNy1cXHRcXHRcXHQgIElNQVBCTEtOTyBcXHUwMDNjXFx1MDAzYyBKRlNfU0JJKGlwaW1hcC1cXHUwMDNlaV9zYiktXFx1MDAzZWwybmJwZXJwYWdlLFxcbmZzL2pmcy9qZnNfaW1hcC5jOjIxODpcXHRcXHRcXHQgIFBTSVpFLCAwKTtcXG5mcy9qZnMvamZzX2ltYXAuYy0yMTktXFx0aWYgKG1wID09IE5VTEwpIHtcXG4tLVxcbmZzL2pmcy9qZnNfaW1hcC5jPTI5MD1pbnQgZGlSZWFkKHN0cnVjdCBpbm9kZSAqaXApXFxuLS1cXG5mcy9qZnMvamZzX2ltYXAuYy0zNjYtXFx0LyogcmVhZCB0aGUgcGFnZSBvZiBkaXNrIGlub2RlICovXFxuZnMvamZzL2pmc19pbWFwLmM6MzY3OlxcdG1wID0gcmVhZF9tZXRhcGFnZShpcGltYXAsIHBhZ2VubyBcXHUwMDNjXFx1MDAzYyBzYmktXFx1MDAzZWwybmJwZXJwYWdlLCBQU0laRSwgMSk7XFxuZnMvamZzL2pmc19pbWFwLmMtMzY4LVxcdGlmICghbXApIHtcXG4tLVxcbmZzL2pmcy9qZnNfaW1hcC5jPTQxOD1zdHJ1Y3QgaW5vZGUgKmRpUmVhZFNwZWNpYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW5vX3QgaW51bSwgaW50IHNlY29uZGFyeSlcXG4tLVxcbmZzL2pmcy9qZnNfaW1hcC5jLTQzNS1cXHR9IGVsc2Uge1xcbmZzL2pmcy9qZnNfaW1hcC5jOjQzNjpcXHRcXHRhZGRyZXNzID0gQUlUQkxfT0ZGIFxcdTAwM2VcXHUwMDNlIEwyUFNJWkU7XFxuZnMvamZzL2pmc19pbWFwLmMtNDM3LVxcdFxcdEpGU19JUChpcCktXFx1MDAzZWlwaW1hcCA9IHNiaS1cXHUwMDNlaXBhaW1hcDtcXG4tLVxcbmZzL2pmcy9qZnNfaW1hcC5jLTQ0Ni1cXHQvKiByZWFkIHRoZSBwYWdlIG9mIGZpeGVkIGRpc2sgaW5vZGUgKEFJVCkgaW4gcmF3IG1vZGUgKi9cXG5mcy9qZnMvamZzX2ltYXAuYzo0NDc6XFx0bXAgPSByZWFkX21ldGFwYWdlKGlwLCBhZGRyZXNzIFxcdTAwM2NcXHUwMDNjIHNiaS1cXHUwMDNlbDJuYnBlcnBhZ2UsIFBTSVpFLCAxKTtcXG5mcy9qZnMvamZzX2ltYXAuYy00NDgtXFx0aWYgKG1wID09IE5VTEwpIHtcXG4tLVxcbmZzL2pmcy9qZnNfaW1hcC5jPTUwMD12b2lkIGRpV3JpdGVTcGVjaWFsKHN0cnVjdCBpbm9kZSAqaXAsIGludCBzZWNvbmRhcnkpXFxuLS1cXG5mcy9qZnMvamZzX2ltYXAuYy01MTAtXFx0ZWxzZVxcbmZzL2pmcy9qZnNfaW1hcC5jOjUxMTpcXHRcXHRhZGRyZXNzID0gQUlUQkxfT0ZGIFxcdTAwM2VcXHUwMDNlIEwyUFNJWkU7XFxuZnMvamZzL2pmc19pbWFwLmMtNTEyLVxcbi0tXFxuZnMvamZzL2pmc19pbWFwLmMtNTE3LVxcdC8qIHJlYWQgdGhlIHBhZ2Ugb2YgZml4ZWQgZGlzayBpbm9kZSAoQUlUKSBpbiByYXcgbW9kZSAqL1xcbmZzL2pmcy9qZnNfaW1hcC5jOjUxODpcXHRtcCA9IHJlYWRfbWV0YXBhZ2UoaXAsIGFkZHJlc3MgXFx1MDAzY1xcdTAwM2Mgc2JpLVxcdTAwM2VsMm5icGVycGFnZSwgUFNJWkUsIDEpO1xcbmZzL2pmcy9qZnNfaW1hcC5jLTUxOS1cXHRpZiAobXAgPT0gTlVMTCkge1xcbi0tXFxuZnMvamZzL2pmc19pbWFwLmM9NTgxPWludCBkaVdyaXRlKHRpZF90IHRpZCwgc3RydWN0IGlub2RlICppcClcXG4tLVxcbmZzL2pmcy9qZnNfaW1hcC5jLTYzOC0gICAgICByZXRyeTpcXG5mcy9qZnMvamZzX2ltYXAuYzo2Mzk6XFx0bXAgPSByZWFkX21ldGFwYWdlKGlwaW1hcCwgcGFnZW5vIFxcdTAwM2NcXHUwMDNjIHNiaS1cXHUwMDNlbDJuYnBlcnBhZ2UsIFBTSVpFLCAxKTtcXG5mcy9qZnMvamZzX2ltYXAuYy02NDAtXFx0aWYgKCFtcClcXG4tLVxcbmZzL2pmcy9qZnNfaW1hcC5jPTIxNTU9c3RhdGljIGludCBkaU5ld0V4dChzdHJ1Y3QgaW5vbWFwICogaW1hcCwgc3RydWN0IGlhZyAqIGlhZ3AsIGludCBleHRubylcXG4tLVxcbmZzL2pmcy9qZnNfaW1hcC5jLTIyNzQtXFx0XFx0ICovXFxuZnMvamZzL2pmc19pbWFwLmM6MjI3NTpcXHRcXHRkbXAgPSBnZXRfbWV0YXBhZ2UoaXBpbWFwLCBibGtubyArIGksIFBTSVpFLCAxKTtcXG5mcy9qZnMvamZzX2ltYXAuYy0yMjc2LVxcdFxcdGlmIChkbXAgPT0gTlVMTCkge1xcbi0tXFxuZnMvamZzL2pmc19pbWFwLmM9MjQ0MD1kaU5ld0lBRyhzdHJ1Y3QgaW5vbWFwICogaW1hcCwgaW50ICppYWdub3AsIGludCBhZ25vLCBzdHJ1Y3QgbWV0YXBhZ2UgKiogbXBwKVxcbi0tXFxuZnMvamZzL2pmc19pbWFwLmMtMjQ3OC1cXG5mcy9qZnMvamZzX2ltYXAuYzoyNDc5OlxcdFxcdGlmIChpcGltYXAtXFx1MDAzZWlfc2l6ZSBcXHUwMDNlXFx1MDAzZSBMMlBTSVpFICE9IGltYXAtXFx1MDAzZWltX25leHRpYWcgKyAxKSB7XFxuZnMvamZzL2pmc19pbWFwLmMtMjQ4MC1cXHRcXHRcXHRJV1JJVEVfVU5MT0NLKGlwaW1hcCk7XFxuLS1cXG5mcy9qZnMvamZzX2ltYXAuYy0yNTQwLVxcdFxcdC8qIHVwZGF0ZSB0aGUgaW5vZGUgbWFwJ3MgaW5vZGUgdG8gcmVmbGVjdCB0aGUgZXh0ZW5zaW9uICovXFxuZnMvamZzL2pmc19pbWFwLmM6MjU0MTpcXHRcXHRpcGltYXAtXFx1MDAzZWlfc2l6ZSArPSBQU0laRTtcXG5mcy9qZnMvamZzX2ltYXAuYzoyNTQyOlxcdFxcdGlub2RlX2FkZF9ieXRlcyhpcGltYXAsIFBTSVpFKTtcXG5mcy9qZnMvamZzX2ltYXAuYy0yNTQzLVxcbmZzL2pmcy9qZnNfaW1hcC5jLTI1NDQtXFx0XFx0LyogYXNzaWduIGEgYnVmZmVyIGZvciB0aGUgcGFnZSAqL1xcbmZzL2pmcy9qZnNfaW1hcC5jOjI1NDU6XFx0XFx0bXAgPSBnZXRfbWV0YXBhZ2UoaXBpbWFwLCBibGtubywgUFNJWkUsIDApO1xcbmZzL2pmcy9qZnNfaW1hcC5jLTI1NDYtXFx0XFx0aWYgKCFtcCkge1xcbi0tXFxuZnMvamZzL2pmc19pbWFwLmMtMjU1MC1cXHRcXHRcXHQgKi9cXG5mcy9qZnMvamZzX2ltYXAuYzoyNTUxOlxcdFxcdFxcdHh0VHJ1bmNhdGUodGlkLCBpcGltYXAsIGlwaW1hcC1cXHUwMDNlaV9zaXplIC0gUFNJWkUsXFxuZnMvamZzL2pmc19pbWFwLmMtMjU1Mi1cXHRcXHRcXHRcXHQgICBDT01NSVRfUFdNQVApO1xcbi0tXFxuZnMvamZzL2pmc19pbWFwLmM9MjY2Mz1zdGF0aWMgaW50IGRpSUFHUmVhZChzdHJ1Y3QgaW5vbWFwICogaW1hcCwgaW50IGlhZ25vLCBzdHJ1Y3QgbWV0YXBhZ2UgKiogbXBwKVxcbi0tXFxuZnMvamZzL2pmc19pbWFwLmMtMjY3MS1cXHQvKiByZWFkIHRoZSBpYWcuICovXFxuZnMvamZzL2pmc19pbWFwLmM6MjY3MjpcXHQqbXBwID0gcmVhZF9tZXRhcGFnZShpcGltYXAsIGJsa25vLCBQU0laRSwgMCk7XFxuZnMvamZzL2pmc19pbWFwLmMtMjY3My1cXHRpZiAoKm1wcCA9PSBOVUxMKSB7XFxuLS1cXG5mcy9qZnMvamZzX2ltYXAuYz0yOTgyPXN0YXRpYyB2b2lkIGR1cGxpY2F0ZUlYdHJlZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzNjQgYmxrbm8sXFxuLS1cXG5mcy9qZnMvamZzX2ltYXAuYy0zMDE2LVxcdC8qIHVwZGF0ZSB0aGUgaW5vZGUgbWFwJ3MgaW5vZGUgdG8gcmVmbGVjdCB0aGUgZXh0ZW5zaW9uICovXFxuZnMvamZzL2pmc19pbWFwLmM6MzAxNzpcXHRpcC1cXHUwMDNlaV9zaXplICs9IFBTSVpFO1xcbmZzL2pmcy9qZnNfaW1hcC5jOjMwMTg6XFx0aW5vZGVfYWRkX2J5dGVzKGlwLCBQU0laRSk7XFxuZnMvamZzL2pmc19pbWFwLmMtMzAxOS1cXHR0eENvbW1pdCh0aWQsIDEsIFxcdTAwMjZpcCwgQ09NTUlUX0ZPUkNFKTtcXG4tLVxcbmZzL2pmcy9qZnNfaW1hcC5oLTIyLVxcbmZzL2pmcy9qZnNfaW1hcC5oOjIzOiNkZWZpbmUgQU1BUFNJWkVcXHQ1MTJcXHQvKiBieXRlcyBpbiB0aGUgSUFHIGFsbG9jYXRpb24gbWFwcyAqL1xcbmZzL2pmcy9qZnNfaW1hcC5oOjI0OiNkZWZpbmUgU01BUFNJWkVcXHQxNlxcdC8qIGJ5dGVzIGluIHRoZSBJQUcgc3VtbWFyeSBtYXBzICovXFxuZnMvamZzL2pmc19pbWFwLmgtMjUtXFxuLS1cXG5mcy9qZnMvamZzX2xvZ21nci5jPTc0PXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobG9nX3JlZHJpdmVfbG9jayk7XFxuLS1cXG5mcy9qZnMvamZzX2xvZ21nci5jLTkwLSAqL1xcbmZzL2pmcy9qZnNfbG9nbWdyLmM6OTE6I2RlZmluZVxcdExPR1NZTkNfREVMVEEobG9nc2l6ZSlcXHRcXHRtaW4oKGxvZ3NpemUpLzgsIDEyOCpMT0dQU0laRSlcXG5mcy9qZnMvamZzX2xvZ21nci5jLTkyLSNkZWZpbmVcXHRMT0dTWU5DX0JBUlJJRVIobG9nc2l6ZSlcXHQoKGxvZ3NpemUpLzQpXFxuZnMvamZzL2pmc19sb2dtZ3IuYy05My0vKlxcbmZzL2pmcy9qZnNfbG9nbWdyLmM6OTQ6I2RlZmluZVxcdExPR1NZTkNfREVMVEEobG9nc2l6ZSlcXHRcXHRtaW4oKGxvZ3NpemUpLzQsIDI1NipMT0dQU0laRSlcXG5mcy9qZnMvamZzX2xvZ21nci5jLTk1LSNkZWZpbmVcXHRMT0dTWU5DX0JBUlJJRVIobG9nc2l6ZSlcXHQoKGxvZ3NpemUpLzIpXFxuLS1cXG5mcy9qZnMvamZzX2xvZ21nci5jPTM0Mj1sbVdyaXRlUmVjb3JkKHN0cnVjdCBqZnNfbG9nICogbG9nLCBzdHJ1Y3QgdGJsb2NrICogdGJsaywgc3RydWN0IGxyZCAqIGxyZCxcXG4tLVxcbmZzL2pmcy9qZnNfbG9nbWdyLmMtNDAzLVxcdFxcdC8qIGlzIHBhZ2UgZnVsbCA/ICovXFxuZnMvamZzL2pmc19sb2dtZ3IuYzo0MDQ6XFx0XFx0aWYgKGRzdG9mZnNldCBcXHUwMDNlPSBMT0dQU0laRSAtIExPR1BUTFJTSVpFKSB7XFxuZnMvamZzL2pmc19sb2dtZ3IuYy00MDUtXFx0XFx0XFx0LyogcGFnZSBiZWNvbWUgZnVsbDogbW92ZSBvbiB0byBuZXh0IHBhZ2UgKi9cXG4tLVxcbmZzL2pmcy9qZnNfbG9nbWdyLmMtNDE5LVxcdFxcdHdoaWxlIChzcmNsZW4gXFx1MDAzZSAwKSB7XFxuZnMvamZzL2pmc19sb2dtZ3IuYzo0MjA6XFx0XFx0XFx0ZnJlZXNwYWNlID0gKExPR1BTSVpFIC0gTE9HUFRMUlNJWkUpIC0gZHN0b2Zmc2V0O1xcbmZzL2pmcy9qZnNfbG9nbWdyLmMtNDIxLVxcdFxcdFxcdG5ieXRlcyA9IG1pbihmcmVlc3BhY2UsIHNyY2xlbik7XFxuLS1cXG5mcy9qZnMvamZzX2xvZ21nci5jLTQyNi1cXHRcXHRcXHQvKiBpcyBwYWdlIG5vdCBmdWxsID8gKi9cXG5mcy9qZnMvamZzX2xvZ21nci5jOjQyNzpcXHRcXHRcXHRpZiAoZHN0b2Zmc2V0IFxcdTAwM2MgTE9HUFNJWkUgLSBMT0dQVExSU0laRSlcXG5mcy9qZnMvamZzX2xvZ21nci5jLTQyOC1cXHRcXHRcXHRcXHRicmVhaztcXG4tLVxcbmZzL2pmcy9qZnNfbG9nbWdyLmMtNDY3LVxcdHdoaWxlIChzcmNsZW4gXFx1MDAzZSAwKSB7XFxuZnMvamZzL2pmc19sb2dtZ3IuYzo0Njg6XFx0XFx0ZnJlZXNwYWNlID0gKExPR1BTSVpFIC0gTE9HUFRMUlNJWkUpIC0gZHN0b2Zmc2V0O1xcbmZzL2pmcy9qZnNfbG9nbWdyLmMtNDY5LVxcdFxcdG5ieXRlcyA9IG1pbihmcmVlc3BhY2UsIHNyY2xlbik7XFxuLS1cXG5mcy9qZnMvamZzX2xvZ21nci5jLTQ4Ni1cXHRcXHRicC1cXHUwMDNlbF9lb3IgPSBkc3RvZmZzZXQ7XFxuZnMvamZzL2pmc19sb2dtZ3IuYzo0ODc6XFx0XFx0bHNuID0gKGxvZy1cXHUwMDNlcGFnZSBcXHUwMDNjXFx1MDAzYyBMMkxPR1BTSVpFKSArIGRzdG9mZnNldDtcXG5mcy9qZnMvamZzX2xvZ21nci5jLTQ4OC1cXG4tLVxcbmZzL2pmcy9qZnNfbG9nbWdyLmMtNTIxLVxcdFxcdC8qIHBhZ2Ugbm90IGZ1bGwgPyAqL1xcbmZzL2pmcy9qZnNfbG9nbWdyLmM6NTIyOlxcdFxcdGlmIChkc3RvZmZzZXQgXFx1MDAzYyBMT0dQU0laRSAtIExPR1BUTFJTSVpFKVxcbmZzL2pmcy9qZnNfbG9nbWdyLmMtNTIzLVxcdFxcdFxcdHJldHVybiBsc247XFxuLS1cXG5mcy9qZnMvamZzX2xvZ21nci5jPTkxOT1zdGF0aWMgaW50IGxtTG9nU3luYyhzdHJ1Y3QgamZzX2xvZyAqIGxvZywgaW50IGhhcmRfc3luYylcXG4tLVxcbmZzL2pmcy9qZnNfbG9nbWdyLmMtOTgxLVxcdG1vcmUgPSBtaW4oZnJlZSAvIDIsIGRlbHRhKTtcXG5mcy9qZnMvamZzX2xvZ21nci5jOjk4MjpcXHRpZiAobW9yZSBcXHUwMDNjIDIgKiBMT0dQU0laRSkge1xcbmZzL2pmcy9qZnNfbG9nbWdyLmMtOTgzLVxcdFxcdGpmc193YXJuKFxcXCJcXFxcbiAuLi4gTG9nIFdyYXAgLi4uIExvZyBXcmFwIC4uLiBMb2cgV3JhcCAuLi5cXFxcblxcXCIpO1xcbi0tXFxuZnMvamZzL2pmc19sb2dtZ3IuYz0xMTUyPXN0YXRpYyBpbnQgb3Blbl9pbmxpbmVfbG9nKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9qZnMvamZzX2xvZ21nci5jLTExNjUtXFx0bG9nLVxcdTAwM2VzaXplID0gbGVuZ3RoUFhEKFxcdTAwMjZKRlNfU0JJKHNiKS1cXHUwMDNlbG9ncHhkKSBcXHUwMDNlXFx1MDAzZVxcbmZzL2pmcy9qZnNfbG9nbWdyLmM6MTE2NjpcXHQgICAgKEwyTE9HUFNJWkUgLSBzYi1cXHUwMDNlc19ibG9ja3NpemVfYml0cyk7XFxuZnMvamZzL2pmc19sb2dtZ3IuYy0xMTY3LVxcdGxvZy1cXHUwMDNlbDJic2l6ZSA9IHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzO1xcbmZzL2pmcy9qZnNfbG9nbWdyLmM6MTE2ODpcXHRBU1NFUlQoTDJMT0dQU0laRSBcXHUwMDNlPSBzYi1cXHUwMDNlc19ibG9ja3NpemVfYml0cyk7XFxuZnMvamZzL2pmc19sb2dtZ3IuYy0xMTY5LVxcbi0tXFxuZnMvamZzL2pmc19sb2dtZ3IuYz0xMjM3PWludCBsbUxvZ0luaXQoc3RydWN0IGpmc19sb2cgKiBsb2cpXFxuLS1cXG5mcy9qZnMvamZzX2xvZ21nci5jLTEyNzAtXFx0aWYgKCF0ZXN0X2JpdChsb2dfSU5MSU5FTE9HLCBcXHUwMDI2bG9nLVxcdTAwM2VmbGFnKSlcXG5mcy9qZnMvamZzX2xvZ21nci5jOjEyNzE6XFx0XFx0bG9nLVxcdTAwM2VsMmJzaXplID0gTDJMT0dQU0laRTtcXG5mcy9qZnMvamZzX2xvZ21nci5jLTEyNzItXFxuLS1cXG5mcy9qZnMvamZzX2xvZ21nci5jLTEzMjQtXFxuZnMvamZzL2pmc19sb2dtZ3IuYzoxMzI1OlxcdFxcdGxvZy1cXHUwMDNlcGFnZSA9IGxlMzJfdG9fY3B1KGxvZ3N1cGVyLVxcdTAwM2VlbmQpIC8gTE9HUFNJWkU7XFxuZnMvamZzL2pmc19sb2dtZ3IuYzoxMzI2OlxcdFxcdGxvZy1cXHUwMDNlZW9yID0gbGUzMl90b19jcHUobG9nc3VwZXItXFx1MDAzZWVuZCkgLSAoTE9HUFNJWkUgKiBsb2ctXFx1MDAzZXBhZ2UpO1xcbmZzL2pmcy9qZnNfbG9nbWdyLmMtMTMyNy1cXG4tLVxcbmZzL2pmcy9qZnNfbG9nbWdyLmMtMTM0NS1cXHRcXHQvKiBpZiBjdXJyZW50IHBhZ2UgaXMgZnVsbCwgbW92ZSBvbiB0byBuZXh0IHBhZ2UgKi9cXG5mcy9qZnMvamZzX2xvZ21nci5jOjEzNDY6XFx0XFx0aWYgKGxvZy1cXHUwMDNlZW9yIFxcdTAwM2U9IExPR1BTSVpFIC0gTE9HUFRMUlNJWkUpXFxuZnMvamZzL2pmc19sb2dtZ3IuYy0xMzQ3LVxcdFxcdFxcdGxtTmV4dFBhZ2UobG9nKTtcXG4tLVxcbmZzL2pmcy9qZnNfbG9nbWdyLmMtMTM4NC1cXHQvKiBpbml0aWFsaXplIGxvZ3N5bmMgcGFyYW1ldGVycyAqL1xcbmZzL2pmcy9qZnNfbG9nbWdyLmM6MTM4NTpcXHRsb2ctXFx1MDAzZWxvZ3NpemUgPSAobG9nLVxcdTAwM2VzaXplIC0gMikgXFx1MDAzY1xcdTAwM2MgTDJMT0dQU0laRTtcXG5mcy9qZnMvamZzX2xvZ21nci5jLTEzODYtXFx0bG9nLVxcdTAwM2Vsc24gPSBsc247XFxuLS1cXG5mcy9qZnMvamZzX2xvZ21nci5jPTE3ODQ9c3RhdGljIGludCBsYm1Mb2dJbml0KHN0cnVjdCBqZnNfbG9nICogbG9nKVxcbi0tXFxuZnMvamZzL2pmc19sb2dtZ3IuYy0xODE3LVxcdFxcdGJ1ZmZlciA9IHBhZ2VfYWRkcmVzcyhwYWdlKTtcXG5mcy9qZnMvamZzX2xvZ21nci5jOjE4MTg6XFx0XFx0Zm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgXFx1MDAzYyBQQUdFX1NJWkU7IG9mZnNldCArPSBMT0dQU0laRSkge1xcbmZzL2pmcy9qZnNfbG9nbWdyLmMtMTgxOS1cXHRcXHRcXHRsYnVmID0ga21hbGxvY19vYmooc3RydWN0IGxidWYpO1xcbi0tXFxuZnMvamZzL2pmc19sb2dtZ3IuYz0xODczPXN0YXRpYyBzdHJ1Y3QgbGJ1ZiAqbGJtQWxsb2NhdGUoc3RydWN0IGpmc19sb2cgKiBsb2csIGludCBwbilcXG4tLVxcbmZzL2pmcy9qZnNfbG9nbWdyLmMtMTg5MS1cXHRicC1cXHUwMDNlbF9wbiA9IHBuO1xcbmZzL2pmcy9qZnNfbG9nbWdyLmM6MTg5MjpcXHRicC1cXHUwMDNlbF9ibGtubyA9IGxvZy1cXHUwMDNlYmFzZSArIChwbiBcXHUwMDNjXFx1MDAzYyAoTDJMT0dQU0laRSAtIGxvZy1cXHUwMDNlbDJic2l6ZSkpO1xcbmZzL2pmcy9qZnNfbG9nbWdyLmMtMTg5My1cXHRicC1cXHUwMDNlbF9jZW9yID0gMDtcXG4tLVxcbmZzL2pmcy9qZnNfbG9nbWdyLmM9MTk1OT1zdGF0aWMgaW50IGxibVJlYWQoc3RydWN0IGpmc19sb2cgKiBsb2csIGludCBwbiwgc3RydWN0IGxidWYgKiogYnBwKVxcbi0tXFxuZnMvamZzL2pmc19sb2dtZ3IuYy0xOTczLVxcdGJpby1cXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgPSBicC1cXHUwMDNlbF9ibGtubyBcXHUwMDNjXFx1MDAzYyAobG9nLVxcdTAwM2VsMmJzaXplIC0gOSk7XFxuZnMvamZzL2pmc19sb2dtZ3IuYzoxOTc0OlxcdF9fYmlvX2FkZF9wYWdlKGJpbywgYnAtXFx1MDAzZWxfcGFnZSwgTE9HUFNJWkUsIGJwLVxcdTAwM2VsX29mZnNldCk7XFxuZnMvamZzL2pmc19sb2dtZ3IuYzoxOTc1OlxcdEJVR19PTihiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSAhPSBMT0dQU0laRSk7XFxuZnMvamZzL2pmc19sb2dtZ3IuYy0xOTc2LVxcbi0tXFxuZnMvamZzL2pmc19sb2dtZ3IuYz0yMDA4PXN0YXRpYyB2b2lkIGxibVdyaXRlKHN0cnVjdCBqZnNfbG9nICogbG9nLCBzdHJ1Y3QgbGJ1ZiAqIGJwLCBpbnQgZmxhZyxcXG4tLVxcbmZzL2pmcy9qZnNfbG9nbWdyLmMtMjAxNy1cXHRicC1cXHUwMDNlbF9ibGtubyA9XFxuZnMvamZzL2pmc19sb2dtZ3IuYzoyMDE4OlxcdCAgICBsb2ctXFx1MDAzZWJhc2UgKyAoYnAtXFx1MDAzZWxfcG4gXFx1MDAzY1xcdTAwM2MgKEwyTE9HUFNJWkUgLSBsb2ctXFx1MDAzZWwyYnNpemUpKTtcXG5mcy9qZnMvamZzX2xvZ21nci5jLTIwMTktXFxuLS1cXG5mcy9qZnMvamZzX2xvZ21nci5jPTIwNzY9c3RhdGljIHZvaWQgbGJtRGlyZWN0V3JpdGUoc3RydWN0IGpmc19sb2cgKiBsb2csIHN0cnVjdCBsYnVmICogYnAsIGludCBmbGFnKVxcbi0tXFxuZnMvamZzL2pmc19sb2dtZ3IuYy0yMDg3LVxcdGJwLVxcdTAwM2VsX2Jsa25vID1cXG5mcy9qZnMvamZzX2xvZ21nci5jOjIwODg6XFx0ICAgIGxvZy1cXHUwMDNlYmFzZSArIChicC1cXHUwMDNlbF9wbiBcXHUwMDNjXFx1MDAzYyAoTDJMT0dQU0laRSAtIGxvZy1cXHUwMDNlbDJic2l6ZSkpO1xcbmZzL2pmcy9qZnNfbG9nbWdyLmMtMjA4OS1cXG4tLVxcbmZzL2pmcy9qZnNfbG9nbWdyLmM9MjEwNj1zdGF0aWMgdm9pZCBsYm1TdGFydElPKHN0cnVjdCBsYnVmICogYnApXFxuLS1cXG5mcy9qZnMvamZzX2xvZ21nci5jLTIxMTktXFx0YmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NlY3RvciA9IGJwLVxcdTAwM2VsX2Jsa25vIFxcdTAwM2NcXHUwMDNjIChsb2ctXFx1MDAzZWwyYnNpemUgLSA5KTtcXG5mcy9qZnMvamZzX2xvZ21nci5jOjIxMjA6XFx0X19iaW9fYWRkX3BhZ2UoYmlvLCBicC1cXHUwMDNlbF9wYWdlLCBMT0dQU0laRSwgYnAtXFx1MDAzZWxfb2Zmc2V0KTtcXG5mcy9qZnMvamZzX2xvZ21nci5jOjIxMjE6XFx0QlVHX09OKGJpby1cXHUwMDNlYmlfaXRlci5iaV9zaXplICE9IExPR1BTSVpFKTtcXG5mcy9qZnMvamZzX2xvZ21nci5jLTIxMjItXFxuLS1cXG5mcy9qZnMvamZzX2xvZ21nci5jPTIxNjc9c3RhdGljIHZvaWQgbGJtSU9Eb25lKHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmZzL2pmcy9qZnNfbG9nbWdyLmMtMjIxNy1cXHRsb2cgPSBicC1cXHUwMDNlbF9sb2c7XFxuZnMvamZzL2pmc19sb2dtZ3IuYzoyMjE4OlxcdGxvZy1cXHUwMDNlY2xzbiA9IChicC1cXHUwMDNlbF9wbiBcXHUwMDNjXFx1MDAzYyBMMkxPR1BTSVpFKSArIGJwLVxcdTAwM2VsX2Nlb3I7XFxuZnMvamZzL2pmc19sb2dtZ3IuYy0yMjE5LVxcbi0tXFxuZnMvamZzL2pmc19sb2dtZ3IuYz0yMzQ5PWludCBsbUxvZ0Zvcm1hdChzdHJ1Y3QgamZzX2xvZyAqbG9nLCBzNjQgbG9nQWRkcmVzcywgaW50IGxvZ1NpemUpXFxuLS1cXG5mcy9qZnMvamZzX2xvZ21nci5jLTIzOTAtXFx0bG9nc3VwZXItXFx1MDAzZWwyYnNpemUgPSBjcHVfdG9fbGUzMihzYmktXFx1MDAzZWwyYnNpemUpO1xcbmZzL2pmcy9qZnNfbG9nbWdyLmM6MjM5MTpcXHRsb2dzdXBlci1cXHUwMDNlZW5kID0gY3B1X3RvX2xlMzIoMiAqIExPR1BTSVpFICsgTE9HUEhEUlNJWkUgKyBMT0dSRFNJWkUpO1xcbmZzL2pmcy9qZnNfbG9nbWdyLmMtMjM5Mi1cXG4tLVxcbmZzL2pmcy9qZnNfbG9nbWdyLmgtMTgtLyogbG9nIHBhZ2Ugc2l6ZSAqL1xcbmZzL2pmcy9qZnNfbG9nbWdyLmg6MTk6I2RlZmluZVxcdExPR1BTSVpFXFx0NDA5NlxcbmZzL2pmcy9qZnNfbG9nbWdyLmg6MjA6I2RlZmluZVxcdEwyTE9HUFNJWkVcXHQxMlxcbmZzL2pmcy9qZnNfbG9nbWdyLmgtMjEtXFxuLS1cXG5mcy9qZnMvamZzX2xvZ21nci5oPTUzPXN0cnVjdCBsb2dzdXBlciB7XFxuLS1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6MDE6MTEuNTUxNjg5NjkzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3ODQ4MzE3NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgSkZTIE1ldGFwYWdlIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBKRlMgY29kZSBhbmQgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCBoYW5kbGVzIG1ldGFwYWdlcywgcGFydGljdWxhcmx5IGluIHJlbGF0aW9uIHRvIHRoZSBwYWdlIHNpemUuIFJpZ2h0LCBgUFNJWkVgIGlzIGRlZmluZWQgYXMgNDA5NiBpbiBgZnMvamZzL2pmc19maWxzeXMuaGAuIFRoYXQncyBhIGNvbnN0YW50LiBJIGtub3cgYFBBR0VfU0laRWAgb24geDg2XzY0IGlzIGFsc28gNDA5Ni4gVGh1cywgb24geDg2XzY0IGBQQUdFX1NJWkUgPT0gUFNJWkVgLiBUaGlzIG1lYW5zIHRoZSBgI2lmIFBBR0VfU0laRSBcdTAwM2UgUFNJWkVgIGlzIGZhbHNlLCBhbmQgdGhlcmVmb3JlIHRoZSBgI2Vsc2VgIGJyYW5jaCBjb250YWluaW5nIHRoZSBgaW5zZXJ0X21ldGFwYWdlYCBmdW5jdGlvbiB3aWxsIGJlIHVzZWQuXG5cbk5vdywgdGhhdCBgaW5zZXJ0X21ldGFwYWdlYCBmdW5jdGlvbiwgYXMgZGVmaW5lZCBpbiB0aGF0IGAjZWxzZWAgYmxvY2ssIGFsd2F5cyByZXR1cm5zIDAuIFNvLCB0aGUgYGlmIChyZXQpYCBjb25kaXRpb24gdGhhdCBmb2xsb3dzIHdvdWxkIG5ldmVyIGJlIHRydWUgb24geDg2XzY0LiBCdXQgSSd2ZSBzZWVuIHN5emJvdCByZXBvcnRzIGZyb20geDg2XzY0LCBhcm02NCwgYW5kIHJpc2N2LCBzbyB0aGlzIHNlZW1zIHRvIGJlIG1vcmUgY29tcGxleC5cblxuQWgsIG9uIGFybTY0LCBpdCdzIHBvc3NpYmxlIGZvciBgUEFHRV9TSVpFYCB0byBiZSA2NEssIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiBgUFNJWkVgLiBTbywgaWYgYFBBR0VfU0laRWAgaXMgNjRLLCB0aGUgYCNpZmAgY29uZGl0aW9uIGlzIHRydWUuIFRoYXQgbWVhbnMgdGhlICpvdGhlciogZGVmaW5pdGlvbiBvZiBgaW5zZXJ0X21ldGFwYWdlYCBpcyB1c2VkIOKAkyB0aGUgb25lIHRoYXQgKmNhbiogcmV0dXJuIGAtRU5PTUVNYC4gVGhhdCBtYWtlcyBzZW5zZS4gVGhlIGBtZXRhcGFnZV9yZWFkX2ZvbGlvYCBmdW5jdGlvbiBzZWVtcyB0byBiZSByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgdGhlIGVycm9yIHdoZW4gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMuXG5cbkhhbmcgb24gYSBzZWMuLi5pcyB0aGF0IHRoZSBvbmx5IGNvbmRpdGlvbj8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBQQUdFX1NJWkUgXHUwMDNlIFBTSVpFYCBpcyB0aGUgYWN0dWFsIGdvdmVybmluZyBmYWN0b3IuIEkgbmVlZCB0byBsb29rIGluIGBmcy9qZnMvamZzX21ldGFwYWdlLmNgIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NDQyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjAxOjE5LjMzNjUyNTE2NVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ2NDA4NDksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlBBR0VfU0laRSBcXHUwMDNlIFBTSVpFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2pmcy9qZnNfbWV0YXBhZ2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6MDE6MTkuMzkxMTc1NDQ0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MzA2ODgxMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKlByaW9yaXRpemluZyBDb25kaXRpb25hbCBMb2dpYyBpbiBNZXRhcGFnZSBJbnNlcnRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gYWJvdXQgdG8gY2FsbCBgaW5zZXJ0X21ldGFwYWdlYCwgYnV0IGJlZm9yZSBJIGRvLCBJIHJlYWxseSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGAjaWZgIGNvbmRpdGlvbi4gSXQncyB0aGUgZ2F0ZWtlZXBlciwgcmlnaHQ/IFdlIGNhbid0IGp1c3QgYmxpbmRseSBpbnNlcnQgdGhlIG1ldGFwYWdlIGlmIGl0J3Mgbm90IHdhcnJhbnRlZC4gVGhhdCBjb25kaXRpb24gbGlrZWx5IGVuY2Fwc3VsYXRlcyBzb21lIGNydWNpYWwgbG9naWMsIHBlcmhhcHMgcmVsYXRlZCB0byB0aGUgY29udGV4dCwgc3RhdGUsIG9yIGV2ZW4gZGF0YSB2YWxpZGl0eS4gSWdub3JpbmcgaXQgY291bGQgbGVhZCB0byBhbGwgc29ydHMgb2YgaXNzdWVzIOKAkyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiwgaW5jb3JyZWN0IGRhdGEgc3RydWN0dXJlcywgb3IgZXZlbiBvdXRyaWdodCBlcnJvcnMuIFdlJ3ZlIHNlZW4gdGhpcyBoYXBwZW4gYmVmb3JlLiBMZXQncyBtYWtlIHN1cmUgdGhhdCBjb25kaXRpb24gaXMgKnRydWUqIGFuZCB0aGF0IGl0IHN0aWxsIGhvbGRzIHZhbGlkIHVuZGVyIHRoZSBwcmV2YWlsaW5nIGNvbmRpdGlvbnMuIEknbSBnb2luZyB0byBjYXJlZnVsbHkgcmUtZXZhbHVhdGUgdGhhdCBgI2lmYCBzdGF0ZW1lbnQganVzdCB0byBiZSBzdXJlLiBJJ2xsIGV2ZW4gY29uc2lkZXIgYSBmZXcgZWRnZSBjYXNlcyBpbiBteSBoZWFkIGFzIGEgc2FuaXR5IGNoZWNrLiBObyBzZW5zZSB0YWtpbmcgc2hvcnRjdXRzIGhlcmUuIFRoaXMgY3JpdGljYWwgYml0IG9mIGNvbmRpdGlvbmFsIGxvZ2ljIGRldGVybWluZXMgdGhlIGVudGlyZSBpbnNlcnRpb24gcGF0aC4gQmV0dGVyIHNhZmUgdGhhbiBzb3JyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkyNjQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDowMToyMy45MjE4NjU4OTlaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzOTM3NDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNpZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9qZnMvamZzX21ldGFwYWdlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvamZzL2pmc19tZXRhcGFnZS5jLTI1LVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzoyNjojaWZkZWYgQ09ORklHX0pGU19TVEFUSVNUSUNTXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTI3LXN0YXRpYyBzdHJ1Y3Qge1xcbi0tXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jPTcxPXN0YXRpYyBtZW1wb29sX3QgKm1ldGFwYWdlX21lbXBvb2w7XFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtNzQtXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jOjc1OiNpZiBNUFNfUEVSX1BBR0UgXFx1MDAzZSAxXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTc2LVxcbi0tXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jPTE0Mz1zdGF0aWMgaW5saW5lIHZvaWQgZGVjX2lvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJsa19zdGF0dXNfdCBzdGF0dXMsXFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtMTU0LVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzoxNTU6I2lmZGVmIENPTkZJR19NSUdSQVRJT05cXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtMTU2LXN0YXRpYyBpbnQgX19tZXRhcGFnZV9taWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jPTIyMj1zdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlX21ldGFwYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZXRhcGFnZSAqbXApXFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtMjMwLVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzoyMzE6I2lmZGVmIENPTkZJR19NSUdSQVRJT05cXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtMjMyLXN0YXRpYyBpbnQgX19tZXRhcGFnZV9taWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jPTYxNz1zdGF0aWMgYm9vbCBtZXRhcGFnZV9yZWxlYXNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTY0NS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmM6NjQ2OiNpZmRlZiBDT05GSUdfTUlHUkFUSU9OXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTY0Ny0vKlxcbi0tXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jPTkwMz12b2lkIF9faW52YWxpZGF0ZV9tZXRhcGFnZXMoc3RydWN0IGlub2RlICppcCwgczY0IGFkZHIsIGludCBsZW4pXFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtOTQyLVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzo5NDM6I2lmZGVmIENPTkZJR19KRlNfU1RBVElTVElDU1xcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy05NDQtaW50IGpmc19tcHN0YXRfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6MDE6MjMuOTg1ODA3MjM4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NjI5NDY1NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gYW5kIGEgUG90ZW50aWFsIFBhZ2UtTGV2ZWwgT3B0aW1pemF0aW9uKipcblxuQWgsIGEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlISBgI2lmIE1QU19QRVJfUEFHRSBcdTAwM2UgMWAuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIGZvciBtZW1vcnkgcGFnZSBtYW5hZ2VtZW50LiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiT2theSwgbGV0J3MgdW5wYWNrIHRoaXMgYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuXCIgTXkgaW1tZWRpYXRlIHRhc2sgaXMgdG8gZGV0ZXJtaW5lIHRoZSBjdXJyZW50IHZhbHVlIG9mIGBNUFNfUEVSX1BBR0VgLiBJcyB0aGlzIHZhcmlhYmxlIGRlZmluZWQ/IFdoYXQgdmFsdWUgaXMgaXQgc2V0IHRvPyBXaGF0IGlzIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmxvY2s/IElzIGl0IHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBoYXJkd2FyZSBjb25maWd1cmF0aW9uLCBhIHBhcnRpY3VsYXIgbWVtb3J5IGFsbG9jYXRvciBzdHJhdGVneSwgb3IgcGVyaGFwcyBhIHRyYWRlLW9mZiBiZXR3ZWVuIG1lbW9yeSB1dGlsaXphdGlvbiBhbmQgY2FjaGUgZWZmaWNpZW5jeT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGNvbmRpdGlvbmFsIGlzIGdhdGluZy4gSXMgYE1QU19QRVJfUEFHRWAgcmVwcmVzZW50YXRpdmUgb2YgTXVsdGkgUHJvY2Vzc2luZyBwZXIgUGFnZT8gVGhpcyB2YWx1ZSBjb3VsZCBwcm92aWRlIGRpZmZlcmVudCBwZXJmb3JtYW5jZSBkZXBlbmRpbmcgb24gc3lzdGVtIHBhcmFtZXRlcnMuIEdldHRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgZmxhZyBmaXJzdCBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZvbGxvd2luZyBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDIwNCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjAxOjI3Ljk0ODc1NzMxOVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3NDE4MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTVBTX1BFUl9QQUdFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2pmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvamZzL2pmc19tZXRhcGFnZS5jPTcxPXN0YXRpYyBtZW1wb29sX3QgKm1ldGFwYWdlX21lbXBvb2w7XFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTcyLVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzo3MzojZGVmaW5lIE1QU19QRVJfUEFHRSAoUEFHRV9TSVpFIFxcdTAwM2VcXHUwMDNlIEwyUFNJWkUpXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTc0LVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzo3NTojaWYgTVBTX1BFUl9QQUdFIFxcdTAwM2UgMVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy03Ni1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmM9Nzc9c3RydWN0IG1ldGFfYW5jaG9yIHtcXG4tLVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy04MC1cXHRibGtfc3RhdHVzX3Qgc3RhdHVzO1xcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzo4MTpcXHRzdHJ1Y3QgbWV0YXBhZ2UgKm1wW01QU19QRVJfUEFHRV07XFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTgyLX07XFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmM9OTM9c3RhdGljIGlubGluZSBpbnQgaW5zZXJ0X21ldGFwYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZXRhcGFnZSAqbXApXFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtMTA5LVxcdFxcdGwybXBfYmxvY2tzID0gTDJQU0laRSAtIGZvbGlvLVxcdTAwM2VtYXBwaW5nLVxcdTAwM2Vob3N0LVxcdTAwM2VpX2Jsa2JpdHM7XFxuZnMvamZzL2pmc19tZXRhcGFnZS5jOjExMDpcXHRcXHRpbmRleCA9IChtcC1cXHUwMDNlaW5kZXggXFx1MDAzZVxcdTAwM2UgbDJtcF9ibG9ja3MpIFxcdTAwMjYgKE1QU19QRVJfUEFHRSAtIDEpO1xcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy0xMTEtXFx0XFx0YS1cXHUwMDNlbXBfY291bnQrKztcXG4tLVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYz0xMTg9c3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9tZXRhcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWV0YXBhZ2UgKm1wKVxcbi0tXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTEyMy1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmM6MTI0OlxcdGluZGV4ID0gKG1wLVxcdTAwM2VpbmRleCBcXHUwMDNlXFx1MDAzZSBsMm1wX2Jsb2NrcykgXFx1MDAyNiAoTVBTX1BFUl9QQUdFIC0gMSk7XFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTEyNS1cXG4tLVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYz0xNTY9c3RhdGljIGludCBfX21ldGFwYWdlX21pZ3JhdGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtMTYwLVxcdHN0cnVjdCBtZXRhX2FuY2hvciAqc3JjX2FuY2hvciA9IHNyYy1cXHUwMDNlcHJpdmF0ZTtcXG5mcy9qZnMvamZzX21ldGFwYWdlLmM6MTYxOlxcdHN0cnVjdCBtZXRhcGFnZSAqbXBzW01QU19QRVJfUEFHRV0gPSB7MH07XFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTE2Mi1cXHRzdHJ1Y3QgbWV0YXBhZ2UgKm1wO1xcbi0tXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTE2NC1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmM6MTY1OlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBNUFNfUEVSX1BBR0U7IGkrKykge1xcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy0xNjYtXFx0XFx0bXAgPSBzcmNfYW5jaG9yLVxcdTAwM2VtcFtpXTtcXG4tLVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy0xNzQtXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jOjE3NTpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTVBTX1BFUl9QQUdFOyBpKyspIHtcXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtMTc2LVxcdFxcdG1wID0gc3JjX2FuY2hvci1cXHUwMDNlbXBbaV07XFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtMTkwLVxcdC8qIFVwZGF0ZSB0aGUgbWV0YXBhZ2UgYW5kIHJlbW92ZSBpdCBmcm9tIHNyYyAqL1xcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzoxOTE6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1QU19QRVJfUEFHRTsgaSsrKSB7XFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTE5Mi1cXHRcXHRtcCA9IG1wc1tpXTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6MDE6MjcuOTk2NTA0NzI4WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwOTQ2MjkwMDExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBKRlMgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGF0IGBNUFNfUEVSX1BBR0VgIGlzIGRldGVybWluZWQgYnkgYFBBR0VfU0laRWAgYW5kIGBMMlBTSVpFYCwgd2hpY2ggaXMgYSBjb25zdGFudCAxMiwgcmVwcmVzZW50aW5nIDQwOTYgYnl0ZXMgKDJeMTIpLiBTbywgb24geDg2XzY0LCBgUEFHRV9TSVpFYCBpcyBhbHNvIDQwOTYsIG1lYW5pbmcgYE1QU19QRVJfUEFHRWAgaXMgMS4gVGhpcyBtZWFucyB0aGUgYCNpZiBNUFNfUEVSX1BBR0UgXHUwMDNlIDFgIGNvbmRpdGlvbiBpcyBmYWxzZSBvbiB4ODZfNjQuXG5cbkNvbnNlcXVlbnRseSwgYGluc2VydF9tZXRhcGFnZWAgYWx3YXlzIHJldHVybnMgMCBvbiB4ODZfNjQgYmVjYXVzZSB0aGUgY29kZSBibG9jayBpbnNpZGUgdGhlIGBpZmAgc3RhdGVtZW50IGlzIG5ldmVyIGV4ZWN1dGVkLiBUaGlzIGluaXRpYWxseSBtYWRlIG1lIHRoaW5rIHRoZSBwYXRjaCBoYWQgbm8gZnVuY3Rpb25hbCBpbXBhY3Qgb24geDg2XzY0LlxuXG5Ib3dldmVyLCBJIGltbWVkaWF0ZWx5IHRob3VnaHQsIGhhbmcgb24sIHRoaXMgKmRvZXMqIGFmZmVjdCBhcmNoaXRlY3R1cmVzIGxpa2UgYXJtNjQsIGFuZCBwb3RlbnRpYWxseSBwcGM2NCwgd2hlcmUgYFBBR0VfU0laRWAgY2FuIGJlIHNpZ25pZmljYW50bHkgbGFyZ2VyLCBmb3IgZXhhbXBsZSA2NEsuIFRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMsIGlzIHRoaXMgd29ydGggZnV6emluZz8gU3l6Ym90IGRvZXMgcnVuIG9uIGFybTY0IGFuZCByaXNjdjY0LlxuXG5CdXQsIGRvZXMgaXQ/IE15IG1lbW9yeSB0ZWxscyBtZSBpdCBoYXMgYXJtNjQgaW5zdGFuY2VzIGFuZCB0aGVyZWZvcmUgaXQgKmlzKiB3b3J0aCBmdXp6aW5nLiBCdXQgZXZlbiBpZiBpdCB3YXMganVzdCBhcm02NCwgaXQncyBzdGlsbCBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBrZXJuZWwuXG5cbk5vdywgbGV0IG1lIGdvIGRlZXBlci4gSXMgdGhlcmUgYW55IHdheSBgaW5zZXJ0X21ldGFwYWdlYCBjYW4gZmFpbCBvbiB4ODZfNjQ/IE5vLCBpdCBsb29rcyBsaWtlIGl0IGp1c3QgYXR0YWNoZXMgYSBgbWV0YXBhZ2VgIHRvIGEgYGZvbGlvYCBhbmQgbWFwcyBpdC5cblxuYGBgY1xuc3RhdGljIGlubGluZSBpbnQgaW5zZXJ0X21ldGFwYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZXRhcGFnZSAqbXApXG57XG5cdGlmIChtcCkge1xuXHRcdGZvbGlvX2F0dGFjaF9wcml2YXRlKGZvbGlvLCBtcCk7XG5cdFx0a21hcChcdTAwMjZmb2xpby1cdTAwM2VwYWdlKTtcblx0fVxuXHRyZXR1cm4gMDtcbn1cbmBgYFxuXG5XYWl0LCBgZm9saW9fYXR0YWNoX3ByaXZhdGVgIGRvZXNuJ3QgcmV0dXJuIGFueXRoaW5nLiBUaGVyZWZvcmUsIGl0IG5ldmVyIGZhaWxzIG9uIHg4Nl82NC5cblxuT24gdGhlIG90aGVyIGhhbmQsIGFybTY0IHdpdGggNjRLIHBhZ2VzIGNoYW5nZXMgdGhlIGdhbWUuIEhlcmUsIGBNUFNfUEVSX1BBR0VgIGlzIDE2LiBgaW5zZXJ0X21ldGFwYWdlYCB0aGVuIGFsbG9jYXRlcyBhIGBzdHJ1Y3QgbWV0YV9hbmNob3JgIHVzaW5nIGBremFsbG9jX29iamAsIHdoaWNoIGNhbiByZXR1cm4gYC1FTk9NRU1gLiBUaGUgcGF0Y2ggY29ycmVjdGx5IGhhbmRsZXMgdGhpcyBgLUVOT01FTWAgY2FzZSwgYnJlYWtpbmcgb3V0IG9mIHRoZSBsb29wIGFuZCByZXR1cm5pbmcgdGhlIGVycm9yLiBDcnVjaWFsbHksIGJlZm9yZSB0aGUgcGF0Y2gsIHRoaXMgZXJyb3Igd2FzIGlnbm9yZWQsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3Igb3RoZXIgc3VidGxlIGJ1Z3MgbGF0ZXIgb24uIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGJ1ZyBmaXguXG5cbk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEl0IGFwcGVhcnMgSkZTX0ZTIGlzIHRoZSBvbmx5IG9uZSByZXF1aXJlZC4gSSBzaG91bGQgZm9jdXMgb24gdGhlIHN5bWJvbHMgYGpmc19maWxsX3N1cGVyYCwgYF9fZ2V0X21ldGFwYWdlYCwgYGRpUmVhZGAsIGBkaVdyaXRlYCwgYGRiTW91bnRgLCBhbmQgYGVhX2dldGAuXG5cbkZpbmFsbHksIGlzIGBtZXRhcGFnZV9yZWFkX2ZvbGlvYCByZWFjaGFibGUgb24geDg2XzY0PyBZZXMsIGl0IGlzLiBCdXQsIHRoZSBlcnJvciBwYXRoIGlzIG9ubHkgcmVhY2hhYmxlIG9uIGFyY2hpdGVjdHVyZXMgd2l0aCBgUEFHRV9TSVpFIFx1MDAzZSA0MDk2YC4gU3RpbGwsIHRoZSBwcmVzZW5jZSBvZiBhcm02NCBpbiBzeXpib3QgdGVzdGluZyBtYWtlcyBmdXp6aW5nIHdvcnRod2hpbGUuIEJlc2lkZXMgdGhhdCwgdGhlIHBhdGNoIGZpeGVzIGNvcmUgSkZTIGxvZ2ljLlxuXG5XYWl0LCBzaG91bGQgSSBjaGVjayBpZiBgaW5zZXJ0X21ldGFwYWdlYCBpcyBjYWxsZWQgYW55d2hlcmUgZWxzZT8gSSB3aWxsIGxvb2sgZm9yIG90aGVyIGNhbGwgc2l0ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNDE5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjAxOjM4Ljk0Mjc5NzEwOVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5NTgxOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5zZXJ0X21ldGFwYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2pmcy9qZnNfbWV0YXBhZ2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9qZnMvamZzX21ldGFwYWdlLmM9ODQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgbWV0YXBhZ2UgKmZvbGlvX3RvX21wKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvZmZzZXQpXFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtOTItXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jOjkzOnN0YXRpYyBpbmxpbmUgaW50IGluc2VydF9tZXRhcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWV0YXBhZ2UgKm1wKVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy05NC17XFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmM9MTU2PXN0YXRpYyBpbnQgX19tZXRhcGFnZV9taWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTE3OC1cXHRcXHRcXHRjb250aW51ZTtcXG5mcy9qZnMvamZzX21ldGFwYWdlLmM6MTc5OlxcdFxcdGlmICh1bmxpa2VseShpbnNlcnRfbWV0YXBhZ2UoZHN0LCBtcCkpKSB7XFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTE4MC1cXHRcXHRcXHQvKiBJZiBlcnJvciwgcm9sbC1iYWNrIHByZXZpb3NseSBpbnNlcnRlZCBwYWdlcyAqL1xcbi0tXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jPTIwOD1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZXRhcGFnZSAqZm9saW9fdG9fbXAoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9mZnNldClcXG4tLVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy0yMTItXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jOjIxMzpzdGF0aWMgaW5saW5lIGludCBpbnNlcnRfbWV0YXBhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1ldGFwYWdlICptcClcXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtMjE0LXtcXG4tLVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYz0yMzI9c3RhdGljIGludCBfX21ldGFwYWdlX21pZ3JhdGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtMjQ3LVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzoyNDg6XFx0aWYgKHVubGlrZWx5KGluc2VydF9tZXRhcGFnZShkc3QsIG1wKSkpXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTI0OS1cXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4tLVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYz01NjU9c3RhdGljIGludCBtZXRhcGFnZV9yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy01ODctXFx0XFx0XFx0aWYgKCFmb2xpby1cXHUwMDNlcHJpdmF0ZSkge1xcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzo1ODg6XFx0XFx0XFx0XFx0cmV0ID0gaW5zZXJ0X21ldGFwYWdlKGZvbGlvLCBOVUxMKTtcXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtNTg5LVxcdFxcdFxcdFxcdGlmIChyZXQpXFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmM9Njg4PXN0cnVjdCBtZXRhcGFnZSAqX19nZXRfbWV0YXBhZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgbG9uZyBsYmxvY2ssXFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtNzc2LVxcdFxcdG1wLVxcdTAwM2VpbmRleCA9IGxibG9jaztcXG5mcy9qZnMvamZzX21ldGFwYWdlLmM6Nzc3OlxcdFxcdGlmICh1bmxpa2VseShpbnNlcnRfbWV0YXBhZ2UoZm9saW8sIG1wKSkpIHtcXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtNzc4LVxcdFxcdFxcdGZyZWVfbWV0YXBhZ2UobXApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDowMTozOC45ODg3NjMzNzhaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzk1MDE2NzgzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGaXhpbmcgYSBNZXRhcGFnZSBFcnJvciBhbmQgQ2hlY2tpbmcgQ29uZmlndXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGFuIGVycm9yIGhhbmRsaW5nIGlzc3VlIHdpdGhpbiB0aGUgbWV0YXBhZ2UgY29kZS4gU3BlY2lmaWNhbGx5LCB0aGUgZXJyb3IgaXMgdHJpZ2dlcmVkIHdpdGhpbiB0aGUgYF9fZ2V0X21ldGFwYWdlYCBhbmQgYF9fbWV0YXBhZ2VfbWlncmF0ZV9mb2xpb2AgZnVuY3Rpb25zLiBJIHNlZSB0aGF0IGBfX2dldF9tZXRhcGFnZWAgYWxyZWFkeSBoYXMgYSBnb29kIGVycm9yIGhhbmRsaW5nIG1lY2hhbmlzbSBpbiBwbGFjZSB1c2luZyB0aGlzIGBpbnNlcnRfbWV0YXBhZ2VgIGNhbGwgYW5kIHRoZSBzdWJzZXF1ZW50IGNsZWFudXAgdXNpbmcgYGZyZWVfbWV0YXBhZ2VgLCB3aGljaCBpcyBnb29kIHRvIHNlZS5cblxuVGhlIGlzc3VlIGxpZXMgaW4gYG1ldGFwYWdlX3JlYWRfZm9saW9gLCB0aG91Z2guIFRoZSBjb2RlIHdhc24ndCBwcm9wZXJseSBjaGVja2luZyB0aGUgcmVzdWx0IG9mIHBvdGVudGlhbGx5IGZhaWxpbmcgb3BlcmF0aW9ucyB0aGVyZSwgYW5kIHRoZSBwYXRjaCBmaXhlcyB0aGlzLiBUaGF0J3MgYSBzdHJhaWdodGZvcndhcmQgYnV0IGltcG9ydGFudCBjb3JyZWN0aW9uLlxuXG5Ob3csIGxldCdzIGp1c3QgZG8gYSBxdWljayBzY2FuIHRvIG1ha2Ugc3VyZSB0aGlzIGZpeCBkb2Vzbid0IGludGVyYWN0IHdpdGggYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIGluIGEgcG90ZW50aWFsbHkgdW5leHBlY3RlZCB3YXkuIEknbGwgY2hlY2sgdG8gc2VlIGlmIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyBtaWdodCBiZSBhdCBwbGF5IGhlcmUuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19KRlNfRlNgIGlzIHRoZSBwcmltYXJ5IG9uZSB0aGF0IGNvbWVzIHRvIG1pbmQsIGFuZCBJIGNhbid0IHNwb3QgYW55IG90aGVycyBhdCBhIHF1aWNrIGdsYW5jZSwgc28gSSB0aGluayB3ZSdyZSBzYWZlLlxuXG5BbHJpZ2h0LCBJJ20gc2F0aXNmaWVkIHRoYXQgdGhpcyBpcyBhIHZhbGlkIGFuZCB0YXJnZXRlZCBmaXguIFRpbWUgdG8gc2V0IHRoZSByZXN1bHRzIGFuZCBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzYxMywiT3V0cHV0VG9rZW5zIjoxNTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6MDE6NDYuOTM4OTM0NzU4WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODgyMDYyNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkpGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImpmc19maWxsX3N1cGVyXCIsXG4gICAgXCJfX2dldF9tZXRhcGFnZVwiLFxuICAgIFwiZGlSZWFkXCIsXG4gICAgXCJkaVdyaXRlXCIsXG4gICAgXCJkYk1vdW50XCIsXG4gICAgXCJlYV9nZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbWV0YXBhZ2VfcmVhZF9mb2xpb2AgaW4gdGhlIEpGUyBmaWxlc3lzdGVtIHRvIHByb3Blcmx5IGhhbmRsZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyBmcm9tIGBpbnNlcnRfbWV0YXBhZ2VgLiBUaGlzIGVycm9yIHBhdGggaXMgcmVhY2hhYmxlIG9uIGFyY2hpdGVjdHVyZXMgd2hlcmUgUEFHRV9TSVpFIFxcdTAwM2UgNDA5NiAoZS5nLiwgYXJtNjQsIHBwYzY0KSBhbmQgZml4ZXMgYSBwb3RlbnRpYWwgYnVnIHdoZXJlIHRoZSBlcnJvciB3YXMgaWdub3JlZC4gSXQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIEpGUyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJKRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJqZnNfZmlsbF9zdXBlclwiLFxuICAgIFwiX19nZXRfbWV0YXBhZ2VcIixcbiAgICBcImRpUmVhZFwiLFxuICAgIFwiZGlXcml0ZVwiLFxuICAgIFwiZGJNb3VudFwiLFxuICAgIFwiZWFfZ2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYG1ldGFwYWdlX3JlYWRfZm9saW9gIGluIHRoZSBKRlMgZmlsZXN5c3RlbSB0byBwcm9wZXJseSBoYW5kbGUgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgZnJvbSBgaW5zZXJ0X21ldGFwYWdlYC4gVGhpcyBlcnJvciBwYXRoIGlzIHJlYWNoYWJsZSBvbiBhcmNoaXRlY3R1cmVzIHdoZXJlIFBBR0VfU0laRSBcXHUwMDNlIDQwOTYgKGUuZy4sIGFybTY0LCBwcGM2NCkgYW5kIGZpeGVzIGEgcG90ZW50aWFsIGJ1ZyB3aGVyZSB0aGUgZXJyb3Igd2FzIGlnbm9yZWQuIEl0IGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBKRlMgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjAxOjQ3LjAyNzE0OTI3N1oiLCJTZXEiOjQxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA1MjIwMzAzNjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDowMTo0Ny4wMjc3MzgyOTdaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTA1MjE0MzUzNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWlzc2luZyBlcnJvciBjaGVjayBmb3IgYGluc2VydF9tZXRhcGFnZSgpYCwgd2hpY2ggY2FuIGZhaWwgYW5kIHJldHVybiBgLUVOT01FTWAgaWYgYGt6YWxsb2Nfb2JqKClgIGZhaWxzIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgYSBgbWV0YV9hbmNob3JgIHN0cnVjdHVyZS4gV2l0aG91dCB0aGlzIGNoZWNrLCB0aGUgY29kZSB3b3VsZCBjb250aW51ZSBleGVjdXRpbmcgZXZlbiBpZiB0aGUgYWxsb2NhdGlvbiBmYWlsZWQsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3Igb3RoZXIgbWVtb3J5LXJlbGF0ZWQgYnVncyB3aGVuIGBmb2xpby1cXHUwMDNlcHJpdmF0ZWAgaXMgZXhwZWN0ZWQgdG8gYmUgaW5pdGlhbGl6ZWQuIFRoaXMgaXMgYSBzdGFuZGFyZCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIGFuZCBlcnJvciBoYW5kbGluZyBidWcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gU3RhbmRhcmQgS0FTQU4gKHdoaWNoIGRldGVjdHMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgdXNlLWFmdGVyLWZyZWUpIGFuZCBiYXNpYyBrZXJuZWwgY3Jhc2ggZGV0ZWN0aW9uIChmb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcykgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhlIGNvbnNlcXVlbmNlcyBvZiB0aGlzIGJ1Zy4gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZSBiZWNhdXNlIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IGBremFsbG9jX29iaigpYCBpcyBhbHJlYWR5IHplcm8taW5pdGlhbGl6ZWQsIGFuZCB0aGUgYnVnIGRvZXMgbm90IGludm9sdmUgcmVhZGluZyB1bmluaXRpYWxpemVkIHN0YWNrLCBoZWFwLCBvciBwYWRkaW5nIGJ5dGVzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQ1YWExZmMzMTk4MzZjOWJiNWRiZDc5YmEzNjUxZTFmMDk2MTMzODJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxOTo1OTo1OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuYyBiL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuY1xuaW5kZXggNDFmZTEyZTY0MWNlZS4uZmZiYjE4NmU4NTBjNiAxMDA2NDRcbi0tLSBhL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuY1xuKysrIGIvZnMvamZzL2pmc19tZXRhcGFnZS5jXG5AQCAtNTczLDYgKzU3Myw3IEBAIHN0YXRpYyBpbnQgbWV0YXBhZ2VfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRpbnQgeGxlbjtcbiBcdHVuc2lnbmVkIGludCBsZW47XG4gXHRpbnQgb2Zmc2V0O1xuK1x0aW50IHJldCA9IDA7XG4gXG4gXHRCVUdfT04oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSk7XG4gXHRwYWdlX3N0YXJ0ID0gZm9saW9fcG9zKGZvbGlvKSBcdTAwM2VcdTAwM2UgaW5vZGUtXHUwMDNlaV9ibGtiaXRzO1xuQEAgLTU4Myw4ICs1ODQsMTEgQEAgc3RhdGljIGludCBtZXRhcGFnZV9yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFx0cGJsb2NrID0gbWV0YXBhZ2VfZ2V0X2Jsb2Nrcyhpbm9kZSwgcGFnZV9zdGFydCArIGJsb2NrX29mZnNldCxcbiBcdFx0XHRcdFx0ICAgICBcdTAwMjZ4bGVuKTtcbiBcdFx0aWYgKHBibG9jaykge1xuLVx0XHRcdGlmICghZm9saW8tXHUwMDNlcHJpdmF0ZSlcbi1cdFx0XHRcdGluc2VydF9tZXRhcGFnZShmb2xpbywgTlVMTCk7XG4rXHRcdFx0aWYgKCFmb2xpby1cdTAwM2Vwcml2YXRlKSB7XG4rXHRcdFx0XHRyZXQgPSBpbnNlcnRfbWV0YXBhZ2UoZm9saW8sIE5VTEwpO1xuK1x0XHRcdFx0aWYgKHJldClcbitcdFx0XHRcdFx0YnJlYWs7XG4rXHRcdFx0fVxuIFx0XHRcdGluY19pbyhmb2xpbyk7XG4gXHRcdFx0aWYgKGJpbylcbiBcdFx0XHRcdHN1Ym1pdF9iaW8oYmlvKTtcbkBAIC02MDcsNyArNjExLDcgQEAgc3RhdGljIGludCBtZXRhcGFnZV9yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGVsc2VcbiBcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGJvb2wgbWV0YXBhZ2VfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnBfbWFzaylcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjAxOjQ3LjAyNzczOTA0N1oiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTEyMDkzOTA4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEpGUyBNZXRhcGFnZSBSZWFkIEZ1bmN0aW9uKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB6ZXJvaW5nIGluIG9uIGBtZXRhcGFnZV9yZWFkX2ZvbGlvYCB3aXRoaW4gYGZzL2pmcy9qZnNfbWV0YXBhZ2UuY2AuIEkgc2VlIGl0J3Mgc3BlY2lmaWNhbGx5IGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgZmFpbHVyZSBwb2ludCB3aGVuIGRlYWxpbmcgd2l0aCBtZXRhcGFnZXMuIFRoZSBjaGFuZ2UgaXMgc3RyYWlnaHRmb3J3YXJkOiBhIGNydWNpYWwgcmV0dXJuIHZhbHVlIGNoZWNrIGhhcyBiZWVuIGFkZGVkIGFmdGVyIHRoZSBjYWxsIHRvIGBpbnNlcnRfbWV0YXBhZ2UoZm9saW8sIE5VTEwpYC5cblxuVGhlIGNvcmUgb2YgaXQgaXMgdGhpczogaWYgYGluc2VydF9tZXRhcGFnZWAgaGl0cyBhIHNuYWcgYW5kICpmYWlscyogZHVyaW5nIGl0cyBvcGVyYXRpb24sIHRoZSBwYXRjaGVkIGNvZGUgbm93IGNvcnJlY3RseSBicmVha3Mgb3V0IG9mIHRoZSBsb29wIGFuZCBwcm9wYWdhdGVzIHRoZSBlcnJvciBjb2RlIGJhY2sgdXAgdGhlIGNhbGwgc3RhY2suIFRoaXMgcHJldmVudHMgY29udGludWVkIHByb2Nlc3Npbmcgd2hlbiBhIG1ldGFwYWdlIGluc2VydGlvbiBnb2VzIHNpZGV3YXlzLiBXaXRob3V0IHRoaXMgY2hlY2ssIHdlJ2QgcG90ZW50aWFsbHkgYmUgY29udGludWluZyBkb3duIGEgcGF0aCB3aGVyZSBkYXRhIGludGVncml0eSBtaWdodCBiZSBjb21wcm9taXNlZCwgd2hpY2ggY291bGQgbGVhZCB0byBmaWxlIHN5c3RlbSBjb3JydXB0aW9uIG9yIG90aGVyIHVuZm9yZXNlZW4gaXNzdWVzLlxuXG5UbyBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byB6b29tIGluIGFuZCBleGFtaW5lIHRoZSBjb250ZXh0IHdpdGhpbiBgbWV0YXBhZ2VfcmVhZF9mb2xpb2AuIFdoYXQncyB0aGUgZmxvdz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgbG9vcCB0aGF0IGlzIGJlaW5nIGJyb2tlbj8gV2hhdCBlcnJvciBjb25kaXRpb25zIGNvdWxkIGxlYWQgdG8gYGluc2VydF9tZXRhcGFnZWAgZmFpbGluZyBpbiB0aGUgZmlyc3QgcGxhY2U/IEFuZCBJJ2xsIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IHRoaXMgYWRkZWQgZXJyb3IgaGFuZGxpbmcgbWlnaHQgYWZmZWN0IHBlcmZvcm1hbmNlLCB0aG91Z2ggaW4gdGhpcyBjYXNlLCBJJ2QgZXhwZWN0IHRoZSBwZXJmb3JtYW5jZSBpbXBhY3QgdG8gYmUgbWluaW1hbCBjb21wYXJlZCB0byB0aGUgZ2FpbiBpbiByb2J1c3RuZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjI5LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDowMTo1OC4xNDg2ODMwNjVaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI4OTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2pmcy9qZnNfbWV0YXBhZ2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NzA6XFx0XFx0aW50IGJsb2Nrc19wZXJfcGFnZSA9IGlfYmxvY2tzX3Blcl9mb2xpbyhpbm9kZSwgZm9saW8pO1xcbiA1NzE6XFx0XFx0c2VjdG9yX3QgcGFnZV9zdGFydDtcXHQvKiBhZGRyZXNzIG9mIHBhZ2UgaW4gZnMgYmxvY2tzICovXFxuIDU3MjpcXHRcXHRzZWN0b3JfdCBwYmxvY2s7XFxuIDU3MzpcXHRcXHRpbnQgeGxlbjtcXG4gNTc0OlxcdFxcdHVuc2lnbmVkIGludCBsZW47XFxuIDU3NTpcXHRcXHRpbnQgb2Zmc2V0O1xcbiA1NzY6XFx0XFx0aW50IHJldCA9IDA7XFxuIDU3NzpcXHRcXG4gNTc4OlxcdFxcdEJVR19PTighZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pKTtcXG4gNTc5OlxcdFxcdHBhZ2Vfc3RhcnQgPSBmb2xpb19wb3MoZm9saW8pIFxcdTAwM2VcXHUwMDNlIGlub2RlLVxcdTAwM2VpX2Jsa2JpdHM7XFxuIDU4MDpcXHRcXG4gNTgxOlxcdFxcdGJsb2NrX29mZnNldCA9IDA7XFxuIDU4MjpcXHRcXHR3aGlsZSAoYmxvY2tfb2Zmc2V0IFxcdTAwM2MgYmxvY2tzX3Blcl9wYWdlKSB7XFxuIDU4MzpcXHRcXHRcXHR4bGVuID0gYmxvY2tzX3Blcl9wYWdlIC0gYmxvY2tfb2Zmc2V0O1xcbiA1ODQ6XFx0XFx0XFx0cGJsb2NrID0gbWV0YXBhZ2VfZ2V0X2Jsb2Nrcyhpbm9kZSwgcGFnZV9zdGFydCArIGJsb2NrX29mZnNldCxcXG4gNTg1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnhsZW4pO1xcbiA1ODY6XFx0XFx0XFx0aWYgKHBibG9jaykge1xcbiA1ODc6XFx0XFx0XFx0XFx0aWYgKCFmb2xpby1cXHUwMDNlcHJpdmF0ZSkge1xcbiA1ODg6XFx0XFx0XFx0XFx0XFx0cmV0ID0gaW5zZXJ0X21ldGFwYWdlKGZvbGlvLCBOVUxMKTtcXG4gNTg5OlxcdFxcdFxcdFxcdFxcdGlmIChyZXQpXFxuIDU5MDpcXHRcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gNTkxOlxcdFxcdFxcdFxcdH1cXG4gNTkyOlxcdFxcdFxcdFxcdGluY19pbyhmb2xpbyk7XFxuIDU5MzpcXHRcXHRcXHRcXHRpZiAoYmlvKVxcbiA1OTQ6XFx0XFx0XFx0XFx0XFx0c3VibWl0X2JpbyhiaW8pO1xcbiA1OTU6XFx0XFxuIDU5NjpcXHRcXHRcXHRcXHRiaW8gPSBiaW9fYWxsb2MoaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmRldiwgMSwgUkVRX09QX1JFQUQsXFxuIDU5NzpcXHRcXHRcXHRcXHRcXHRcXHRHRlBfTk9GUyk7XFxuIDU5ODpcXHRcXHRcXHRcXHRiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yID1cXG4gNTk5OlxcdFxcdFxcdFxcdFxcdHBibG9jayBcXHUwMDNjXFx1MDAzYyAoaW5vZGUtXFx1MDAzZWlfYmxrYml0cyAtIDkpO1xcbiA2MDA6XFx0XFx0XFx0XFx0YmlvLVxcdTAwM2ViaV9lbmRfaW8gPSBtZXRhcGFnZV9yZWFkX2VuZF9pbztcXG4gNjAxOlxcdFxcdFxcdFxcdGJpby1cXHUwMDNlYmlfcHJpdmF0ZSA9IGZvbGlvO1xcbiA2MDI6XFx0XFx0XFx0XFx0bGVuID0geGxlbiBcXHUwMDNjXFx1MDAzYyBpbm9kZS1cXHUwMDNlaV9ibGtiaXRzO1xcbiA2MDM6XFx0XFx0XFx0XFx0b2Zmc2V0ID0gYmxvY2tfb2Zmc2V0IFxcdTAwM2NcXHUwMDNjIGlub2RlLVxcdTAwM2VpX2Jsa2JpdHM7XFxuIDYwNDpcXHRcXHRcXHRcXHRiaW9fYWRkX2ZvbGlvX25vZmFpbChiaW8sIGZvbGlvLCBsZW4sIG9mZnNldCk7XFxuIDYwNTpcXHRcXHRcXHRcXHRibG9ja19vZmZzZXQgKz0geGxlbjtcXG4gNjA2OlxcdFxcdFxcdH0gZWxzZVxcbiA2MDc6XFx0XFx0XFx0XFx0YmxvY2tfb2Zmc2V0Kys7XFxuIDYwODpcXHRcXHR9XFxuIDYwOTpcXHRcXHRpZiAoYmlvKVxcbiA2MTA6XFx0XFx0XFx0c3VibWl0X2JpbyhiaW8pO1xcbiA2MTE6XFx0XFx0ZWxzZVxcbiA2MTI6XFx0XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4gNjEzOlxcdFxcbiA2MTQ6XFx0XFx0cmV0dXJuIHJldDtcXG4gNjE1OlxcdH1cXG4gNjE2OlxcdFxcbiA2MTc6XFx0c3RhdGljIGJvb2wgbWV0YXBhZ2VfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnBfbWFzaylcXG4gNjE4OlxcdHtcXG4gNjE5OlxcdFxcdHN0cnVjdCBtZXRhcGFnZSAqbXA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjAxOjU4LjE0ODgxMzk5NloiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTQ1NzY4MDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIGBpbnNlcnRfbWV0YXBhZ2VgIFJldHVybiBWYWx1ZSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IGhvdyB3ZSBoYW5kbGUgdGhlIHJldHVybiB2YWx1ZSBmcm9tIGBpbnNlcnRfbWV0YXBhZ2VgLiBTZWVtcyBsaWtlIGEgc2ltcGxlIHRoaW5nLCBidXQgcG90ZW50aWFsbHkgY3JpdGljYWwuIElmIGBpbnNlcnRfbWV0YXBhZ2VgIGZhaWxzIOKAkyBtYXliZSBkdWUgdG8gYSBtZW1vcnkgYWxsb2NhdGlvbiBpc3N1ZSwgb3Igc29tZSBvdGhlciB1bmV4cGVjdGVkIHByb2JsZW0g4oCTIGl0J3Mgc3VwcG9zZWQgdG8gcmV0dXJuIGFuIGVycm9yIGNvZGUsIHJpZ2h0PyBHb29kLiBUaGlzIG1ha2VzIHNlbnNlOyBpdCdzIGEgZGVmZW5zaXZlIHByb2dyYW1taW5nIG1lYXN1cmUuIFdlIG5lZWQgdG8gY2hlY2sgdGhlIHJldHVybiB2YWx1ZSBiZWNhdXNlIGlmIHdlICpkb24ndCosIGFuZCB0aGUgZnVuY3Rpb24gZmFpbGVkIHNpbGVudGx5LCB3ZSBjb3VsZCBiZSBsb29raW5nIGF0IGEgbWVtb3J5IGxlYWssIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlLCBvciBzb21ldGhpbmcgZXZlbiB3b3JzZSBkb3duIHRoZSBsaW5lLiBUaGF0J3MgYSBjbGFzc2ljIHNjZW5hcmlvLCBhbmQgdGhlIHNvcnQgb2YgYnVnIHdlICphYnNvbHV0ZWx5KiB3YW50IHRvIGF2b2lkLlxuXG5Ib2xkIG9uLCBJIHNlZSBgaW5zZXJ0X21ldGFwYWdlYCByZXR1cm5zIGFuIGBpbnRgLCBub3QgYSBwb2ludGVyIG9yIGEgbW9yZSBjb21wbGV4IHN0cnVjdHVyZSwgc28gbGV0IG1lIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBpbnNlcnRfbWV0YXBhZ2VgIHRvIGNoZWNrIHdoYXQgdHlwZSBvZiBlcnJvciBjb2RlcyBpdCByZXR1cm5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzkxLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6MDI6MDMuNjk0NTg1NTY5WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2pmcy9qZnNfbWV0YXBhZ2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNTA6XFx0XFxuIDE1MTpcXHRcXHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcXHUwMDI2YW5jaG9yLVxcdTAwM2Vpb19jb3VudCkpXFxuIDE1MjpcXHRcXHRcXHRoYW5kbGVyKGZvbGlvLCBhbmNob3ItXFx1MDAzZXN0YXR1cyk7XFxuIDE1MzpcXHR9XFxuIDE1NDpcXHRcXG4gMTU1OlxcdCNpZmRlZiBDT05GSUdfTUlHUkFUSU9OXFxuIDE1NjpcXHRzdGF0aWMgaW50IF9fbWV0YXBhZ2VfbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4gMTU3OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZm9saW8gKmRzdCwgc3RydWN0IGZvbGlvICpzcmMsXFxuIDE1ODpcXHRcXHRcXHRcXHRcXHQgICAgZW51bSBtaWdyYXRlX21vZGUgbW9kZSlcXG4gMTU5OlxcdHtcXG4gMTYwOlxcdFxcdHN0cnVjdCBtZXRhX2FuY2hvciAqc3JjX2FuY2hvciA9IHNyYy1cXHUwMDNlcHJpdmF0ZTtcXG4gMTYxOlxcdFxcdHN0cnVjdCBtZXRhcGFnZSAqbXBzW01QU19QRVJfUEFHRV0gPSB7MH07XFxuIDE2MjpcXHRcXHRzdHJ1Y3QgbWV0YXBhZ2UgKm1wO1xcbiAxNjM6XFx0XFx0aW50IGksIHJjO1xcbiAxNjQ6XFx0XFxuIDE2NTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTVBTX1BFUl9QQUdFOyBpKyspIHtcXG4gMTY2OlxcdFxcdFxcdG1wID0gc3JjX2FuY2hvci1cXHUwMDNlbXBbaV07XFxuIDE2NzpcXHRcXHRcXHRpZiAobXAgXFx1MDAyNlxcdTAwMjYgbWV0YXBhZ2VfbG9ja2VkKG1wKSlcXG4gMTY4OlxcdFxcdFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbiAxNjk6XFx0XFx0fVxcbiAxNzA6XFx0XFxuIDE3MTpcXHRcXHRyYyA9IGZpbGVtYXBfbWlncmF0ZV9mb2xpbyhtYXBwaW5nLCBkc3QsIHNyYywgbW9kZSk7XFxuIDE3MjpcXHRcXHRpZiAocmMpXFxuIDE3MzpcXHRcXHRcXHRyZXR1cm4gcmM7XFxuIDE3NDpcXHRcXG4gMTc1OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBNUFNfUEVSX1BBR0U7IGkrKykge1xcbiAxNzY6XFx0XFx0XFx0bXAgPSBzcmNfYW5jaG9yLVxcdTAwM2VtcFtpXTtcXG4gMTc3OlxcdFxcdFxcdGlmICghbXApXFxuIDE3ODpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gMTc5OlxcdFxcdFxcdGlmICh1bmxpa2VseShpbnNlcnRfbWV0YXBhZ2UoZHN0LCBtcCkpKSB7XFxuIDE4MDpcXHRcXHRcXHRcXHQvKiBJZiBlcnJvciwgcm9sbC1iYWNrIHByZXZpb3NseSBpbnNlcnRlZCBwYWdlcyAqL1xcbiAxODE6XFx0XFx0XFx0XFx0Zm9yIChpbnQgaiA9IDAgOyBqIFxcdTAwM2MgaTsgaisrKSB7XFxuIDE4MjpcXHRcXHRcXHRcXHRcXHRpZiAobXBzW2pdKVxcbiAxODM6XFx0XFx0XFx0XFx0XFx0XFx0cmVtb3ZlX21ldGFwYWdlKGRzdCwgbXBzW2pdKTtcXG4gMTg0OlxcdFxcdFxcdFxcdH1cXG4gMTg1OlxcdFxcdFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbiAxODY6XFx0XFx0XFx0fVxcbiAxODc6XFx0XFx0XFx0bXBzW2ldID0gbXA7XFxuIDE4ODpcXHRcXHR9XFxuIDE4OTpcXHRcXG4gMTkwOlxcdFxcdC8qIFVwZGF0ZSB0aGUgbWV0YXBhZ2UgYW5kIHJlbW92ZSBpdCBmcm9tIHNyYyAqL1xcbiAxOTE6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1QU19QRVJfUEFHRTsgaSsrKSB7XFxuIDE5MjpcXHRcXHRcXHRtcCA9IG1wc1tpXTtcXG4gMTkzOlxcdFxcdFxcdGlmIChtcCkge1xcbiAxOTQ6XFx0XFx0XFx0XFx0aW50IHBhZ2Vfb2Zmc2V0ID0gbXAtXFx1MDAzZWRhdGEgLSBmb2xpb19hZGRyZXNzKHNyYyk7XFxuIDE5NTpcXHRcXG4gMTk2OlxcdFxcdFxcdFxcdG1wLVxcdTAwM2VkYXRhID0gZm9saW9fYWRkcmVzcyhkc3QpICsgcGFnZV9vZmZzZXQ7XFxuIDE5NzpcXHRcXHRcXHRcXHRtcC1cXHUwMDNlZm9saW8gPSBkc3Q7XFxuIDE5ODpcXHRcXHRcXHRcXHRyZW1vdmVfbWV0YXBhZ2Uoc3JjLCBtcCk7XFxuIDE5OTpcXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjAyOjAzLjY5NDY4NDkwOVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjUwODk0NjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTG9jYXRpbmcgdGhlIE1ldGFwYWdlKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBsYXNlci1mb2N1c2VkOiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGxvY2F0aW9uIG9mIHRoZSBgaW5zZXJ0X21ldGFwYWdlYCBmdW5jdGlvbiBvciBmaWxlLiBUaGlzIGlzbid0IGp1c3QgYSBjYXN1YWwgc2VhcmNoOyBJJ20gYXNzdW1pbmcgdGhlcmUncyBhIHNwZWNpZmljLCB3ZWxsLWRlZmluZWQgcmVhc29uIEknbSB0YXJnZXRpbmcgdGhpcyBwYXJ0aWN1bGFyIGVsZW1lbnQuIE15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIHJ1bm5pbmcgdGhyb3VnaCB0aGUgbGlrZWx5IHNjZW5hcmlvcyBiYXNlZCBvbiBteSBmaWVsZC4gSSdtIGNvbnNpZGVyaW5nOlxuXG4qICAgKipQcm9qZWN0IENvbnRleHQ6KiogV2hhdCdzIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZT8gSXMgdGhpcyBhIGxlZ2FjeSBzeXN0ZW0sIGEgbW9kdWxhciBkZXNpZ24sIG9yIHNvbWV0aGluZyBtb3JlIG1vZGVybj8gVGhpcyBoZWxwcyBuYXJyb3cgZG93biB0aGUgcHJvYmFibGUgbG9jYXRpb25zIHdpdGhpbiB0aGUgcHJvamVjdCBzdHJ1Y3R1cmUuXG4qICAgKipDb2RpbmcgQ29udmVudGlvbnM6KiogV2hhdCBhcmUgdGhlIGVzdGFibGlzaGVkIG5hbWluZyBwYXR0ZXJucyBhbmQgZmlsZSBvcmdhbml6YXRpb24gcGFyYWRpZ21zPyBBcmUgd2UgZGVhbGluZyB3aXRoIG5hbWVzcGFjZXMsIGNsYXNzZXMsIG9yIGEgbW9yZSBwcm9jZWR1cmFsIGFwcHJvYWNoPyBUaGlzIGtub3dsZWRnZSBkaWN0YXRlcyB3aGVyZSBJJ2xsIGxvb2sgZmlyc3QuXG4qICAgKipSZWxhdGVkIENvbXBvbmVudHM6KiogV2hhdCBvdGhlciBtb2R1bGVzIG9yIGZ1bmN0aW9ucyB3b3VsZCByZWFzb25hYmx5IGludGVyYWN0IHdpdGggYGluc2VydF9tZXRhcGFnZWA/IFRyYWNpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGNhbiBwcm92aWRlIGEgZGlyZWN0IHBhdGguIEFyZSB0aGVyZSBhbnkga25vd24gZW50cnkgcG9pbnRzIG9yIEFQSSBjYWxscyB0aGF0IG1ha2UgdXNlIG9mIGl0P1xuKiAgICoqU2VhcmNoIFN0cmF0ZWdpZXM6KiogRGVwZW5kaW5nIG9uIHRoZSBzY2FsZSBhbmQgY29tcGxleGl0eSwgSSdsbCBkZXBsb3kgdGhlIGFwcHJvcHJpYXRlIHNlYXJjaCB0b29scyAtIGdyZXAsIGBmaW5kYCwgSURFLWludGVncmF0ZWQgc2VhcmNoLCBvciBldmVuIGNyb3NzLXJlZmVyZW5jaW5nIHRvb2xzLiBUaGUgYXBwcm9hY2ggd2lsbCB2YXJ5IGJhc2VkIG9uIHdoZXRoZXIgSSBoYXZlIGFjY2VzcyB0byB0aGUgZnVsbCBzb3VyY2UgY29kZSBhbmQgYW55IHZlcnNpb24gY29udHJvbCBzeXN0ZW1zLlxuKiAgICoqRXhwZWN0ZWQgZnVuY3Rpb25hbGl0eToqKiBXaGF0IGlzIG1lYW50IHRvIGhhcHBlbiBoZXJlPyBNeSBleHBlcnQtbGV2ZWwgdW5kZXJzdGFuZGluZyBvZiB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkgYWxsb3dzIG1lIHRvIG5hcnJvdyBkb3duIHdoYXQgSSBhbSBsb29raW5nIGZvciBieSBhc3Nlc3NpbmcgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIGFuZCBsb2dpYyBpdCB3aWxsIGJlIGludm9sdmVkIHdpdGguXG5cbk15IGdvYWwgaGVyZSBpcyBlZmZpY2llbnQgdHJpYWdlLiBJIHdhbnQgdG8gcmFwaWRseSBlbGltaW5hdGUgZGVhZCBlbmRzIGFuZCBmb2N1cyBteSBlZmZvcnQgb24gdGhlIG1vc3QgcHJvbWlzaW5nIGNhbmRpZGF0ZXMsIGFuZCBhbHNvIEkgd2FudCB0byBxdWlja2x5IGV2YWx1YXRlIGFueSByZWxhdGVkIHZhcmlhYmxlcywgZnVuY3Rpb25zIGFuZCBmaWxlcyB3aGljaCBtaWdodCBwb2ludCB0b3dhcmQgdGhlIGRlc2lyZWQgYW5zd2VyLiBJJ20gcmVhZHkgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlYmFzZSwgYnV0IEknbSBhcHByb2FjaGluZyB0aGlzIHdpdGggYSBzdHJhdGVnaWMsIGluZm9ybWVkIHBsYW4uIFRoZSBmaXJzdCBzdGVwLCBob3dldmVyLCBpcyB0byAqZmluZCogaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0OTUsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjAyOjA3Ljk0NTU4NDAyN1oiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcyMjMyNzUzMywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnN0YXRpYyBpbnQgaW5zZXJ0X21ldGFwYWdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDowMjoxMC42Njc5MjY0MVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4OTM4ODk0Mjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNvbnNpZGVyaW5nIHRoZSBOYXR1cmUgb2YgdGhlIEVsZW1lbnQqKlxuXG5IbW0sIEknbSB0cnlpbmcgdG8gcGluIGRvd24gdGhlIGJlaGF2aW9yIG9mIHRoaXMgcGFydGljdWxhciB0aGluZy4gSSdtIHdvbmRlcmluZyBpZiBpdHMgc3RhdGUgaXMgdHJ1bHkgZml4ZWQsIG9yIGlmIHRoZXJlJ3Mgc29tZSBkeW5hbWljIGFzcGVjdCB0byBpdCB0aGF0IEknbSBvdmVybG9va2luZy4gVGhlIGluaXRpYWwgaW1wcmVzc2lvbiB3YXMgdGhhdCBpdCB3YXMgc3RhdGljLCBidXQgbm93IEkgbmVlZCB0byBxdWVzdGlvbiB0aGF0IGFzc3VtcHRpb24uIFBlcmhhcHMgdGhlIGFwcGFyZW50IFwic3RhdGljLW5lc3NcIiBpcyBhbiBpbGx1c2lvbiwgb3IgbWF5YmUgaXQncyBjb25maWd1cmVkIGluIGEgd2F5IHRoYXTigJlzIHZlcnkgY2xvc2VseSB0aWVkIHRvIGl0cyBpbW1lZGlhdGUgY29udGV4dCwgZWZmZWN0aXZlbHkgbWFraW5nIGl0ICpzZWVtKiBzdGF0aWMgZXZlbiBpZiBpdCBpc24ndC4gSSdtIGxlYW5pbmcgdG93YXJkIHRoaW5raW5nIGl0J3Mgbm90IHRydWx5IHN0YXRpYy4gVGhlIHF1ZXN0aW9uIGlzLCBpZiBpdCdzIG5vdCBzdGF0aWMsIHdoZXJlIGlzIHRoZSBkeW5hbWlzbSBjb21pbmcgZnJvbT8gQW5kIGhvdyBpcyBpdCBiZWluZyBpbnRyb2R1Y2VkP1xuXG5cbiIsIklucHV0VG9rZW5zIjo0OTkyLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6MDI6MTkuNjA2ODU3NDZaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NjIzNTQyMjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IGluc2VydF9tZXRhcGFnZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9qZnMvamZzX21ldGFwYWdlLmM9ODQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgbWV0YXBhZ2UgKmZvbGlvX3RvX21wKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvZmZzZXQpXFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtOTItXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jOjkzOnN0YXRpYyBpbmxpbmUgaW50IGluc2VydF9tZXRhcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWV0YXBhZ2UgKm1wKVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy05NC17XFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmM9MjA4PXN0YXRpYyBpbmxpbmUgc3RydWN0IG1ldGFwYWdlICpmb2xpb190b19tcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2Zmc2V0KVxcbi0tXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTIxMi1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmM6MjEzOnN0YXRpYyBpbmxpbmUgaW50IGluc2VydF9tZXRhcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWV0YXBhZ2UgKm1wKVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy0yMTQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDowMjoyMS41NjkyMzk2MloiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjM2OTE1OTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBKRlMgTWV0YXBhZ2UgQ29kZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQncyBzdGFydCBieSBkaWdnaW5nIGludG8gYGZzL2pmcy9qZnNfbWV0YXBhZ2UuY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgYGluc2VydF9tZXRhcGFnZWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBKRlMgaGFuZGxlcyB0aGUgaW5zZXJ0aW9uIG9mIG1ldGFkYXRhIHBhZ2VzLiBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZD8gV2hhdCBsb2NraW5nIG1lY2hhbmlzbXMgYXJlIGVtcGxveWVkIHRvIGVuc3VyZSBjb25zaXN0ZW5jeSBhbmQgcHJldmVudCBjb3JydXB0aW9uIGR1cmluZyBjb25jdXJyZW50IGFjY2Vzcz9cblxuSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBibG9jayBkZXZpY2UuIElzIGl0IGEgZGlyZWN0IEkvTyBwYXRoLCBvciBkb2VzIGl0IHV0aWxpemUgdGhlIHBhZ2UgY2FjaGU/IEhvdyBhcmUgdGhlIGRpcnR5IHBhZ2VzIGZsdXNoZWQgdG8gZGlzaywgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucz8gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGluZWZmaWNpZW5jaWVzIGluIHRoZSBhbGdvcml0aG0sIGtlZXBpbmcgaW4gbWluZCB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9uIGhlYXZ5IHdvcmtsb2Fkcy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB3cml0ZSBhbXBsaWZpY2F0aW9uIGFyZSBhbHNvIG9uIG15IHJhZGFyLlxuXG5GdXJ0aGVybW9yZSwgSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZy4gSG93IHJvYnVzdCBpcyB0aGUgY29kZSBhZ2FpbnN0IHZhcmlvdXMgZmFpbHVyZXMsIHN1Y2ggYXMgZGlzayBlcnJvcnMsIG1lbW9yeSBhbGxvY2F0aW9uIHByb2JsZW1zLCBvciBpbmNvbnNpc3RlbmNpZXMgaW4gdGhlIEpGUyBtZXRhZGF0YSBpdHNlbGY/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBhcmVhcyBmb3IgaW1wcm92ZW1lbnQgaW4gdGVybXMgb2YgZXJyb3IgcmVwb3J0aW5nIG9yIHJlY292ZXJ5PyBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHN1cHBvc2VkIHRvIGJlaGF2ZS5cblxuRmluYWxseSwgSSdsbCBiZSBjb21wYXJpbmcgdGhpcyBjb2RlIHRvIHNpbWlsYXIgbWVjaGFuaXNtcyBpbiBvdGhlciBmaWxlc3lzdGVtcyBJJ3ZlIHN0dWRpZWQuIFdoYXQgYXJlIHRoZSB0cmFkZS1vZmZzIHRoYXQgSkZTIGhhcyBtYWRlIGluIGl0cyBpbXBsZW1lbnRhdGlvbj8gQXJlIHRoZXJlIGFueSBjbGV2ZXIgb3B0aW1pemF0aW9ucyBvciBub3ZlbCBhcHByb2FjaGVzIHRoYXQgSSBjYW4gbGVhcm4gZnJvbT8gVGhpcyB3aWxsIHByb3ZpZGUgbWUgd2l0aCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgaW5zZXJ0X21ldGFwYWdlYCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiB0aGUgSkZTIGZpbGVzeXN0ZW0gYW5kIGhvdyBpdCBjYW4gYmUgaW1wcm92ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NDgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDowMjoyNS44MDYxNTg2MzdaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxMjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2pmcy9qZnNfbWV0YXBhZ2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MDpcXHRcXHRibGtfc3RhdHVzX3Qgc3RhdHVzO1xcbiAgODE6XFx0XFx0c3RydWN0IG1ldGFwYWdlICptcFtNUFNfUEVSX1BBR0VdO1xcbiAgODI6XFx0fTtcXG4gIDgzOlxcdFxcbiAgODQ6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbWV0YXBhZ2UgKmZvbGlvX3RvX21wKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvZmZzZXQpXFxuICA4NTpcXHR7XFxuICA4NjpcXHRcXHRzdHJ1Y3QgbWV0YV9hbmNob3IgKmFuY2hvciA9IGZvbGlvLVxcdTAwM2Vwcml2YXRlO1xcbiAgODc6XFx0XFxuICA4ODpcXHRcXHRpZiAoIWFuY2hvcilcXG4gIDg5OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAgOTA6XFx0XFx0cmV0dXJuIGFuY2hvci1cXHUwMDNlbXBbb2Zmc2V0IFxcdTAwM2VcXHUwMDNlIEwyUFNJWkVdO1xcbiAgOTE6XFx0fVxcbiAgOTI6XFx0XFxuICA5MzpcXHRzdGF0aWMgaW5saW5lIGludCBpbnNlcnRfbWV0YXBhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1ldGFwYWdlICptcClcXG4gIDk0OlxcdHtcXG4gIDk1OlxcdFxcdHN0cnVjdCBtZXRhX2FuY2hvciAqYTtcXG4gIDk2OlxcdFxcdGludCBpbmRleDtcXG4gIDk3OlxcdFxcdGludCBsMm1wX2Jsb2NrcztcXHQvKiBsb2cyIGJsb2NrcyBwZXIgbWV0YXBhZ2UgKi9cXG4gIDk4OlxcdFxcbiAgOTk6XFx0XFx0YSA9IGZvbGlvLVxcdTAwM2Vwcml2YXRlO1xcbiAxMDA6XFx0XFx0aWYgKCFhKSB7XFxuIDEwMTpcXHRcXHRcXHRhID0ga3phbGxvY19vYmooc3RydWN0IG1ldGFfYW5jaG9yLCBHRlBfTk9GUyk7XFxuIDEwMjpcXHRcXHRcXHRpZiAoIWEpXFxuIDEwMzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMTA0OlxcdFxcdFxcdGZvbGlvX2F0dGFjaF9wcml2YXRlKGZvbGlvLCBhKTtcXG4gMTA1OlxcdFxcdFxcdGttYXAoXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlKTtcXG4gMTA2OlxcdFxcdH1cXG4gMTA3OlxcdFxcbiAxMDg6XFx0XFx0aWYgKG1wKSB7XFxuIDEwOTpcXHRcXHRcXHRsMm1wX2Jsb2NrcyA9IEwyUFNJWkUgLSBmb2xpby1cXHUwMDNlbWFwcGluZy1cXHUwMDNlaG9zdC1cXHUwMDNlaV9ibGtiaXRzO1xcbiAxMTA6XFx0XFx0XFx0aW5kZXggPSAobXAtXFx1MDAzZWluZGV4IFxcdTAwM2VcXHUwMDNlIGwybXBfYmxvY2tzKSBcXHUwMDI2IChNUFNfUEVSX1BBR0UgLSAxKTtcXG4gMTExOlxcdFxcdFxcdGEtXFx1MDAzZW1wX2NvdW50Kys7XFxuIDExMjpcXHRcXHRcXHRhLVxcdTAwM2VtcFtpbmRleF0gPSBtcDtcXG4gMTEzOlxcdFxcdH1cXG4gMTE0OlxcdFxcbiAxMTU6XFx0XFx0cmV0dXJuIDA7XFxuIDExNjpcXHR9XFxuIDExNzpcXHRcXG4gMTE4OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVfbWV0YXBhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1ldGFwYWdlICptcClcXG4gMTE5OlxcdHtcXG4gMTIwOlxcdFxcdHN0cnVjdCBtZXRhX2FuY2hvciAqYSA9IGZvbGlvLVxcdTAwM2Vwcml2YXRlO1xcbiAxMjE6XFx0XFx0aW50IGwybXBfYmxvY2tzID0gTDJQU0laRSAtIGZvbGlvLVxcdTAwM2VtYXBwaW5nLVxcdTAwM2Vob3N0LVxcdTAwM2VpX2Jsa2JpdHM7XFxuIDEyMjpcXHRcXHRpbnQgaW5kZXg7XFxuIDEyMzpcXHRcXG4gMTI0OlxcdFxcdGluZGV4ID0gKG1wLVxcdTAwM2VpbmRleCBcXHUwMDNlXFx1MDAzZSBsMm1wX2Jsb2NrcykgXFx1MDAyNiAoTVBTX1BFUl9QQUdFIC0gMSk7XFxuIDEyNTpcXHRcXG4gMTI2OlxcdFxcdEJVR19PTihhLVxcdTAwM2VtcFtpbmRleF0gIT0gbXApO1xcbiAxMjc6XFx0XFxuIDEyODpcXHRcXHRhLVxcdTAwM2VtcFtpbmRleF0gPSBOVUxMO1xcbiAxMjk6XFx0XFx0aWYgKC0tYS1cXHUwMDNlbXBfY291bnQgPT0gMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDowMjoyNS44MDYyODE5NTdaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE3NDI4NjUxNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgQWxsb2NhdGlvbiBFcnJvciBhbmQgS01TQU4gQXBwbGljYWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNlZSBpdCdzIGFib3V0IGEgbWlzc2luZyBlcnJvciBjaGVjayBhZnRlciBhIG1lbW9yeSBhbGxvY2F0aW9uLiBUaGUgYGluc2VydF9tZXRhcGFnZWAgZnVuY3Rpb24sIHVzaW5nIGBremFsbG9jX29iamAsIGlzIGFsbG9jYXRpbmcgYSBgc3RydWN0IG1ldGFfYW5jaG9yYC4gVGhlIGNyaXRpY2FsIGJpdCBpcywgaWYgYGt6YWxsb2Nfb2JqYCBmYWlscywgaXQgcmV0dXJucyBgLUVOT01FTWAuIFRoZSBvcmlnaW5hbCBjb2RlLCBob3dldmVyLCBqdXN0IGJsaXRoZWx5ICpjYWxsZWQqIGBpbnNlcnRfbWV0YXBhZ2VgIHdpdGhvdXQgY2hlY2tpbmcgdGhlIHJldHVybiB2YWx1ZS4gU28sIGlmIHRoZSBhbGxvY2F0aW9uIGJvbWJlZCwgYGZvbGlvLVx1MDAzZXByaXZhdGVgIHdvdWxkIHN0YXkgYE5VTExgLCBidXQgdGhlIHByb2dyYW0gd291bGQganVzdCBrZWVwIGNodWdnaW5nIGFsb25nLlxuXG5UaGF0J3MgYSBjbGFzc2ljIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBzaXR1YXRpb24gd2FpdGluZyB0byBoYXBwZW4sIG9yIHBvdGVudGlhbGx5LCBhIGJpbyBnZXRzIHN1Ym1pdHRlZCB3aXRob3V0IGl0cyBwcml2YXRlIGRhdGEgc2V0IHVwIHJpZ2h0LCBsZWFkaW5nIHRvIGdhcmJhZ2UgZGF0YSBvciBvdGhlciB1bmRlZmluZWQgYmVoYXZpb3IuIFRoZSBwYXRjaCBhZGRyZXNzZXMgdGhpcyBieSBhY3R1YWxseSAqY2hlY2tpbmcqIHRoZSByZXR1cm4gdmFsdWUgb2YgYGluc2VydF9tZXRhcGFnZWAgYW5kIGJyZWFraW5nIG91dCBvZiB0aGUgbG9vcCBpZiBpdCdzIGFuIGVycm9yLlxuXG5UaGUgaW1wb3J0YW50IHBvaW50IGlzIHRoYXQgdGhpcyBpcyAqanVzdCogYSBzdGFuZGFyZCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIGFuZCBhIG1pc3NpbmcgZXJyb3IgY2hlY2suIGBremFsbG9jX29iamAgKnplcm9lcyogdGhlIG1lbW9yeSBpdCBhbGxvY2F0ZXMuIFRoZXJlJ3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBoZXJlLiBJZiBga3phbGxvY19vYmpgIGZhaWxzLCB3ZSdyZSBub3QgZGVhbGluZyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQsIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHBvaW50ZXIgYmVpbmcgYE5VTExgIHdoZW4gdGhlIGNvZGUgKnRoaW5rcyogaXQncyB2YWxpZC5cblxuTGV0IG1lIG1ha2Ugc3VyZS4uLklmIGBpbnNlcnRfbWV0YXBhZ2VgIGZhaWxzLCBgcmV0YCBiZWNvbWVzIGAtRU5PTUVNYCwgYW5kIHRoZSBsb29wIGJhaWxzIG91dC4gUHJldmlvdXNseSwgaXQgd291bGQgaGF2ZSBqdXN0IGtlcHQgZ29pbmchIFRoZSBvcmlnaW5hbCBjb2RlIHdvdWxkIGhhdmUgcmV0dXJuZWQgMCwgYWxsb3dpbmcgdGhlIGZvbGlvIHRvIGJlIHJlYWQgZXZlbiB0aG91Z2ggaXQncyBub3Qgc2V0IHVwLiBUaGlzIGNvbmZpcm1zIG15IGluaXRpYWwgdGhvdWdodDoganVzdCBhIG1pc3NpbmcgZXJyb3IgY2hlY2suXG5cblRoZXJlZm9yZSwgS01TQU4gaXNuJ3QgcmVsZXZhbnQgaGVyZS4gS01TQU4gaXMgZm9yIGNhdGNoaW5nIHJlYWRzIG9mICp1bmluaXRpYWxpemVkKiBtZW1vcnksIG5vdCBtZW1vcnkgdGhhdCB3YXMgbmV2ZXIgYWxsb2NhdGVkIGNvcnJlY3RseSBpbiB0aGUgZmlyc3QgcGxhY2UsIG9yIG1lbW9yeSB0aGF0IHdhcyBhbGxvY2F0ZWQgYnV0IHRoZW4gbm90IGFzc2lnbmVkIHRvIHByb3Blcmx5LiBLQVNBTiBhbmQgc3RhbmRhcmQgY2hlY2tzIGZvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIHdpbGwgYmUgcGVyZmVjdGx5IHN1ZmZpY2llbnQgdG8gZGV0ZWN0IHRoaXMgYnVnLCBzaW5jZSBpdCdzIGFuIGFjY2VzcyB0byBhIHplcm8tZmlsbGVkIGBmb2xpby1cdTAwM2Vwcml2YXRlYCBvciBhIGRlcmVmZXJlbmNlIG9mIGEgYE5VTExgIHBvaW50ZXIuXG5cbkhlcmUncyB0aGUgcmVhc29uaW5nIHRvIGRvY3VtZW50OiBUaGUgcGF0Y2ggY29ycmVjdGx5IGFkZHJlc3NlcyBhIG1pc3NpbmcgZXJyb3IgY2hlY2suIGBpbnNlcnRfbWV0YXBhZ2VgIGNvdWxkIGZhaWwgZHVyaW5nIHRoZSBhbGxvY2F0aW9uIG9mIGEgYG1ldGFfYW5jaG9yYCB1c2luZyBga3phbGxvY19vYmpgLCB3aGljaCByZXR1cm5zIGAtRU5PTUVNYCBvbiBmYWlsdXJlLiBXaXRob3V0IHRoZSBwYXRjaCwgdGhlIGNvZGUgd291bGQgY29udGludWUgdG8gdXNlIHRoZSBtZW1vcnkgYXMgaWYgaXQgaGFkIGJlZW4gc3VjY2Vzc2Z1bGx5IGFsbG9jYXRlZCwgd2hpY2ggbWF5IGNhdXNlIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3Igb3RoZXIgbWVtb3J5LXJlbGF0ZWQgaXNzdWVzIHdoZW4gYWNjZXNzaW5nIGBmb2xpby1cdTAwM2Vwcml2YXRlYC4gSG93ZXZlciwgdGhlIG1lbW9yeSBpcyBpbml0aWFsaXplZCB2aWEgYGt6YWxsb2Nfb2JqYCwgc28gaXQncyBub3QgYSByZWFkIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCBtZW1vcnkgZXJyb3IgZGV0ZWN0aW9uIGlzIHN1ZmZpY2llbnQsIGFuZCB0aGUgaXNzdWUgaXMgbm90IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLiBOZWVkc0tNU0FOIHNob3VsZCBiZSBmYWxzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU3MywiT3V0cHV0VG9rZW5zIjoyMjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDowMjozNy41NDkxNTA2NzlaIiwiU2VxIjo1NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWlzc2luZyBlcnJvciBjaGVjayBmb3IgYGluc2VydF9tZXRhcGFnZSgpYCwgd2hpY2ggY2FuIGZhaWwgYW5kIHJldHVybiBgLUVOT01FTWAgaWYgYGt6YWxsb2Nfb2JqKClgIGZhaWxzIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgYSBgbWV0YV9hbmNob3JgIHN0cnVjdHVyZS4gV2l0aG91dCB0aGlzIGNoZWNrLCB0aGUgY29kZSB3b3VsZCBjb250aW51ZSBleGVjdXRpbmcgZXZlbiBpZiB0aGUgYWxsb2NhdGlvbiBmYWlsZWQsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3Igb3RoZXIgbWVtb3J5LXJlbGF0ZWQgYnVncyB3aGVuIGBmb2xpby1cXHUwMDNlcHJpdmF0ZWAgaXMgZXhwZWN0ZWQgdG8gYmUgaW5pdGlhbGl6ZWQuIFRoaXMgaXMgYSBzdGFuZGFyZCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIGFuZCBlcnJvciBoYW5kbGluZyBidWcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gU3RhbmRhcmQgS0FTQU4gKHdoaWNoIGRldGVjdHMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgdXNlLWFmdGVyLWZyZWUpIGFuZCBiYXNpYyBrZXJuZWwgY3Jhc2ggZGV0ZWN0aW9uIChmb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcykgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhlIGNvbnNlcXVlbmNlcyBvZiB0aGlzIGJ1Zy4gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZSBiZWNhdXNlIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IGBremFsbG9jX29iaigpYCBpcyBhbHJlYWR5IHplcm8taW5pdGlhbGl6ZWQsIGFuZCB0aGUgYnVnIGRvZXMgbm90IGludm9sdmUgcmVhZGluZyB1bmluaXRpYWxpemVkIHN0YWNrLCBoZWFwLCBvciBwYWRkaW5nIGJ5dGVzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWlzc2luZyBlcnJvciBjaGVjayBmb3IgYGluc2VydF9tZXRhcGFnZSgpYCwgd2hpY2ggY2FuIGZhaWwgYW5kIHJldHVybiBgLUVOT01FTWAgaWYgYGt6YWxsb2Nfb2JqKClgIGZhaWxzIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgYSBgbWV0YV9hbmNob3JgIHN0cnVjdHVyZS4gV2l0aG91dCB0aGlzIGNoZWNrLCB0aGUgY29kZSB3b3VsZCBjb250aW51ZSBleGVjdXRpbmcgZXZlbiBpZiB0aGUgYWxsb2NhdGlvbiBmYWlsZWQsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3Igb3RoZXIgbWVtb3J5LXJlbGF0ZWQgYnVncyB3aGVuIGBmb2xpby1cXHUwMDNlcHJpdmF0ZWAgaXMgZXhwZWN0ZWQgdG8gYmUgaW5pdGlhbGl6ZWQuIFRoaXMgaXMgYSBzdGFuZGFyZCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIGFuZCBlcnJvciBoYW5kbGluZyBidWcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gU3RhbmRhcmQgS0FTQU4gKHdoaWNoIGRldGVjdHMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgdXNlLWFmdGVyLWZyZWUpIGFuZCBiYXNpYyBrZXJuZWwgY3Jhc2ggZGV0ZWN0aW9uIChmb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcykgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhlIGNvbnNlcXVlbmNlcyBvZiB0aGlzIGJ1Zy4gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZSBiZWNhdXNlIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IGBremFsbG9jX29iaigpYCBpcyBhbHJlYWR5IHplcm8taW5pdGlhbGl6ZWQsIGFuZCB0aGUgYnVnIGRvZXMgbm90IGludm9sdmUgcmVhZGluZyB1bmluaXRpYWxpemVkIHN0YWNrLCBoZWFwLCBvciBwYWRkaW5nIGJ5dGVzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowv6bll[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-12 19:02:45 +0000 UTC FinishedAt: 2026-08-12 20:02:39 +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": "c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "JFS_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": "c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "JFS_FS" ], "series_id": "be566569-3f6e-4871-8d25-b7f975b5c6ab" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "jfs_fill_super", "__get_metapage", "diRead", "diWrite", "dbMount", "ea_get" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0pGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2pmc19maWxsX3N1cGVyJiMzNDssCiAgICAmIzM0O19fZ2V0X21ldGFwYWdlJiMzNDssCiAgICAmIzM0O2RpUmVhZCYjMzQ7LAogICAgJiMzNDtkaVdyaXRlJiMzNDssCiAgICAmIzM0O2RiTW91bnQmIzM0OywKICAgICYjMzQ7ZWFfZ2V0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtaXNzaW5nIGVycm9yIGNoZWNrIGZvciBgaW5zZXJ0X21ldGFwYWdlKClgLCB3aGljaCBjYW4gZmFpbCBhbmQgcmV0dXJuIGAtRU5PTUVNYCBpZiBga3phbGxvY19vYmooKWAgZmFpbHMgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBhIGBtZXRhX2FuY2hvcmAgc3RydWN0dXJlLiBXaXRob3V0IHRoaXMgY2hlY2ssIHRoZSBjb2RlIHdvdWxkIGNvbnRpbnVlIGV4ZWN1dGluZyBldmVuIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxlZCwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBvdGhlciBtZW1vcnktcmVsYXRlZCBidWdzIHdoZW4gYGZvbGlvLVx1MDAzZXByaXZhdGVgIGlzIGV4cGVjdGVkIHRvIGJlIGluaXRpYWxpemVkLiBUaGlzIGlzIGEgc3RhbmRhcmQgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSBhbmQgZXJyb3IgaGFuZGxpbmcgYnVnLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIFN0YW5kYXJkIEtBU0FOICh3aGljaCBkZXRlY3RzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIHVzZS1hZnRlci1mcmVlKSBhbmQgYmFzaWMga2VybmVsIGNyYXNoIGRldGVjdGlvbiAoZm9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZSBjb25zZXF1ZW5jZXMgb2YgdGhpcyBidWcuIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUgYmVjYXVzZSB0aGUgbWVtb3J5IGFsbG9jYXRlZCBieSBga3phbGxvY19vYmooKWAgaXMgYWxyZWFkeSB6ZXJvLWluaXRpYWxpemVkLCBhbmQgdGhlIGJ1ZyBkb2VzIG5vdCBpbnZvbHZlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFkZGluZyBieXRlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYG1ldGFwYWdlX3JlYWRfZm9saW9gIGluIHRoZSBKRlMgZmlsZXN5c3RlbSB0byBwcm9wZXJseSBoYW5kbGUgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgZnJvbSBgaW5zZXJ0X21ldGFwYWdlYC4gVGhpcyBlcnJvciBwYXRoIGlzIHJlYWNoYWJsZSBvbiBhcmNoaXRlY3R1cmVzIHdoZXJlIFBBR0VfU0laRSBcdTAwM2UgNDA5NiAoZS5nLiwgYXJtNjQsIHBwYzY0KSBhbmQgZml4ZXMgYSBwb3RlbnRpYWwgYnVnIHdoZXJlIHRoZSBlcnJvciB3YXMgaWdub3JlZC4gSXQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIEpGUyBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDowMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQ1YWExZmMzMTk4MzZjOWJiNWRiZDc5YmEzNjUxZTFmMDk2MTMzODJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxOTo1OTo1OCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX21ldGFwYWdlLmMgYi9mcy9qZnMvamZzX21ldGFwYWdlLmNcbmluZGV4IDQxZmUxMmU2NDFjZWUuLmZmYmIxODZlODUwYzYgMTAwNjQ0XG4tLS0gYS9mcy9qZnMvamZzX21ldGFwYWdlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuY1xuQEAgLTU3Myw2ICYjNDM7NTczLDcgQEAgc3RhdGljIGludCBtZXRhcGFnZV9yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGludCB4bGVuO1xuIFx0dW5zaWduZWQgaW50IGxlbjtcbiBcdGludCBvZmZzZXQ7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4gXG4gXHRCVUdfT04oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSk7XG4gXHRwYWdlX3N0YXJ0ID0gZm9saW9fcG9zKGZvbGlvKSBcdTAwM2VcdTAwM2UgaW5vZGUtXHUwMDNlaV9ibGtiaXRzO1xuQEAgLTU4Myw4ICYjNDM7NTg0LDExIEBAIHN0YXRpYyBpbnQgbWV0YXBhZ2VfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRcdHBibG9jayA9IG1ldGFwYWdlX2dldF9ibG9ja3MoaW5vZGUsIHBhZ2Vfc3RhcnQgJiM0MzsgYmxvY2tfb2Zmc2V0LFxuIFx0XHRcdFx0XHQgICAgIFx1MDAyNnhsZW4pO1xuIFx0XHRpZiAocGJsb2NrKSB7XG4tXHRcdFx0aWYgKCFmb2xpby1cdTAwM2Vwcml2YXRlKVxuLVx0XHRcdFx0aW5zZXJ0X21ldGFwYWdlKGZvbGlvLCBOVUxMKTtcbiYjNDM7XHRcdFx0aWYgKCFmb2xpby1cdTAwM2Vwcml2YXRlKSB7XG4mIzQzO1x0XHRcdFx0cmV0ID0gaW5zZXJ0X21ldGFwYWdlKGZvbGlvLCBOVUxMKTtcbiYjNDM7XHRcdFx0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdH1cbiBcdFx0XHRpbmNfaW8oZm9saW8pO1xuIFx0XHRcdGlmIChiaW8pXG4gXHRcdFx0XHRzdWJtaXRfYmlvKGJpbyk7XG5AQCAtNjA3LDcgJiM0Mzs2MTEsNyBAQCBzdGF0aWMgaW50IG1ldGFwYWdlX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0ZWxzZVxuIFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuIFxuLVx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGJvb2wgbWV0YXBhZ2VfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnBfbWFzaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDowMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SkZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7amZzX2ZpbGxfc3VwZXImIzM0OywKICAgICYjMzQ7X19nZXRfbWV0YXBhZ2UmIzM0OywKICAgICYjMzQ7ZGlSZWFkJiMzNDssCiAgICAmIzM0O2RpV3JpdGUmIzM0OywKICAgICYjMzQ7ZGJNb3VudCYjMzQ7LAogICAgJiMzNDtlYV9nZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYG1ldGFwYWdlX3JlYWRfZm9saW9gIGluIHRoZSBKRlMgZmlsZXN5c3RlbSB0byBwcm9wZXJseSBoYW5kbGUgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgZnJvbSBgaW5zZXJ0X21ldGFwYWdlYC4gVGhpcyBlcnJvciBwYXRoIGlzIHJlYWNoYWJsZSBvbiBhcmNoaXRlY3R1cmVzIHdoZXJlIFBBR0VfU0laRSBcdTAwM2UgNDA5NiAoZS5nLiwgYXJtNjQsIHBwYzY0KSBhbmQgZml4ZXMgYSBwb3RlbnRpYWwgYnVnIHdoZXJlIHRoZSBlcnJvciB3YXMgaWdub3JlZC4gSXQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIEpGUyBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQ1YWExZmMzMTk4MzZjOWJiNWRiZDc5YmEzNjUxZTFmMDk2MTMzODIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxMiAxOTo1OTo1OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuYyBiL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuYwppbmRleCA0MWZlMTJlNjQxY2VlLi5mZmJiMTg2ZTg1MGM2IDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX21ldGFwYWdlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvamZzL2pmc19tZXRhcGFnZS5jCkBAIC01NzMsNiAmIzQzOzU3Myw3IEBAIHN0YXRpYyBpbnQgbWV0YXBhZ2VfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJaW50IHhsZW47CiAJdW5zaWduZWQgaW50IGxlbjsKIAlpbnQgb2Zmc2V0OwomIzQzOwlpbnQgcmV0ID0gMDsKIAogCUJVR19PTighZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pKTsKIAlwYWdlX3N0YXJ0ID0gZm9saW9fcG9zKGZvbGlvKSAmZ3Q7Jmd0OyBpbm9kZS0mZ3Q7aV9ibGtiaXRzOwpAQCAtNTgzLDggJiM0Mzs1ODQsMTEgQEAgc3RhdGljIGludCBtZXRhcGFnZV9yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGZvbGlvICpmb2xpbykKIAkJcGJsb2NrID0gbWV0YXBhZ2VfZ2V0X2Jsb2Nrcyhpbm9kZSwgcGFnZV9zdGFydCAmIzQzOyBibG9ja19vZmZzZXQsCiAJCQkJCSAgICAgJmFtcDt4bGVuKTsKIAkJaWYgKHBibG9jaykgewotCQkJaWYgKCFmb2xpby0mZ3Q7cHJpdmF0ZSkKLQkJCQlpbnNlcnRfbWV0YXBhZ2UoZm9saW8sIE5VTEwpOwomIzQzOwkJCWlmICghZm9saW8tJmd0O3ByaXZhdGUpIHsKJiM0MzsJCQkJcmV0ID0gaW5zZXJ0X21ldGFwYWdlKGZvbGlvLCBOVUxMKTsKJiM0MzsJCQkJaWYgKHJldCkKJiM0MzsJCQkJCWJyZWFrOwomIzQzOwkJCX0KIAkJCWluY19pbyhmb2xpbyk7CiAJCQlpZiAoYmlvKQogCQkJCXN1Ym1pdF9iaW8oYmlvKTsKQEAgLTYwNyw3ICYjNDM7NjExLDcgQEAgc3RhdGljIGludCBtZXRhcGFnZV9yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGZvbGlvICpmb2xpbykKIAllbHNlCiAJCWZvbGlvX3VubG9jayhmb2xpbyk7CiAKLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGJvb2wgbWV0YXBhZ2VfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnBfbWFzaykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIzMgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBKRlMgTWV0YXBhZ2UgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBKRlMgZmlsZSBzeXN0ZW0sIHNwZWNpZmljYWxseSBpbiBgZnMvamZzL2pmc19tZXRhcGFnZS5jYC4gVGhleSYjMzk7dmUgbW9kaWZpZWQgdGhlIGBtZXRhcGFnZV9yZWFkX2ZvbGlvYCBmdW5jdGlvbiwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0IHNlZW1zIGxpa2UgdGhleSYjMzk7cmUgemVyb2luZyBpbiBvbiBlcnJvciBoYW5kbGluZyByZWxhdGVkIHRvIGhvdyBtZXRhZGF0YSBwYWdlcyBhcmUgYnJvdWdodCBpbnRvIG1lbW9yeS4KCkZyb20gd2hhdCBJIGNhbiB0ZWxsLCB0aGUga2V5IGNoYW5nZSBpbnZvbHZlcyBjaGVja2luZyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBpbnNlcnRfbWV0YXBhZ2UoZm9saW8sIE5VTEwpYCB3aXRoaW4gdGhhdCBgbWV0YXBhZ2VfcmVhZF9mb2xpb2AgZnVuY3Rpb24uIElmIGBpbnNlcnRfbWV0YXBhZ2VgIHRocm93cyBhbiBlcnJvciwgdGhlIHBhdGNoIGNvcnJlY3RseSBicmVha3Mgb3V0IG9mIHRoZSBsb29wIGFuZCByZXR1cm5zIHRoYXQgZXJyb3IuIFRoYXTigJlzIGdvb2QgcHJhY3RpY2UgdG8gbWFrZSBzdXJlIHlvdSByZXR1cm4gdGhlIGVycm9yIGNvZGUuCgpOb3csIEkgbmVlZCB0byBkaWcgaW50byBgbWV0YXBhZ2VfcmVhZF9mb2xpb2AgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBgaW5zZXJ0X21ldGFwYWdlYCB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGhlcmUuIEkgd2FudCB0byBzZWUgd2hhdCBzY2VuYXJpb3MgbWlnaHQgdHJpZ2dlciBhbiBlcnJvciBmcm9tIGBpbnNlcnRfbWV0YXBhZ2VgIGFuZCBpZiB0aGUgaGFuZGxpbmcgaW4gdGhpcyBwYXRjaCBpcyBzdWZmaWNpZW50LiBJcyB0aGVyZSBhbnkgY2hhbmNlIG9mIHJlc291cmNlIGxlYWtzIG9yIG1pc3NlZCBlcnJvciBjb25kaXRpb25zIHRoYXQgY291bGQgYmUgaW1wcm92ZWQ/IEkgYWxzbyB3YW50IHRvIGNoZWNrIHRoZSByZXN0IG9mIHRoZSBjb2RlIGZvciBhbnkgcmVsYXRlZCBlcnJvciBoYW5kbGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnNlcnRfbWV0YXBhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9qZnMvamZzX21ldGFwYWdlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvamZzL2pmc19tZXRhcGFnZS5jPTg0PXN0YXRpYyBpbmxpbmUgc3RydWN0IG1ldGFwYWdlICpmb2xpb190b19tcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2Zmc2V0KVxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy05Mi1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzo5MzpzdGF0aWMgaW5saW5lIGludCBpbnNlcnRfbWV0YXBhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1ldGFwYWdlICptcClcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy05NC17XG4tLVxuZnMvamZzL2pmc19tZXRhcGFnZS5jPTE1Nj1zdGF0aWMgaW50IF9fbWV0YXBhZ2VfbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtMTc4LVx0XHRcdGNvbnRpbnVlO1xuZnMvamZzL2pmc19tZXRhcGFnZS5jOjE3OTpcdFx0aWYgKHVubGlrZWx5KGluc2VydF9tZXRhcGFnZShkc3QsIG1wKSkpIHtcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy0xODAtXHRcdFx0LyogSWYgZXJyb3IsIHJvbGwtYmFjayBwcmV2aW9zbHkgaW5zZXJ0ZWQgcGFnZXMgKi9cbi0tXG5mcy9qZnMvamZzX21ldGFwYWdlLmM9MjA4PXN0YXRpYyBpbmxpbmUgc3RydWN0IG1ldGFwYWdlICpmb2xpb190b19tcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2Zmc2V0KVxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy0yMTItXG5mcy9qZnMvamZzX21ldGFwYWdlLmM6MjEzOnN0YXRpYyBpbmxpbmUgaW50IGluc2VydF9tZXRhcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWV0YXBhZ2UgKm1wKVxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTIxNC17XG4tLVxuZnMvamZzL2pmc19tZXRhcGFnZS5jPTIzMj1zdGF0aWMgaW50IF9fbWV0YXBhZ2VfbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtMjQ3LVxuZnMvamZzL2pmc19tZXRhcGFnZS5jOjI0ODpcdGlmICh1bmxpa2VseShpbnNlcnRfbWV0YXBhZ2UoZHN0LCBtcCkpKVxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTI0OS1cdFx0cmV0dXJuIC1FQUdBSU47XG4tLVxuZnMvamZzL2pmc19tZXRhcGFnZS5jPTU2NT1zdGF0aWMgaW50IG1ldGFwYWdlX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy01ODctXHRcdFx0aWYgKCFmb2xpby1cdTAwM2Vwcml2YXRlKSB7XG5mcy9qZnMvamZzX21ldGFwYWdlLmM6NTg4Olx0XHRcdFx0cmV0ID0gaW5zZXJ0X21ldGFwYWdlKGZvbGlvLCBOVUxMKTtcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy01ODktXHRcdFx0XHRpZiAocmV0KVxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYz02ODg9c3RydWN0IG1ldGFwYWdlICpfX2dldF9tZXRhcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBsb25nIGxibG9jayxcbi0tXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtNzc2LVx0XHRtcC1cdTAwM2VpbmRleCA9IGxibG9jaztcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzo3Nzc6XHRcdGlmICh1bmxpa2VseShpbnNlcnRfbWV0YXBhZ2UoZm9saW8sIG1wKSkpIHtcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy03NzgtXHRcdFx0ZnJlZV9tZXRhcGFnZShtcCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM5MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIEpGUyBGaWxlc3lzdGVtOiBBIFRhcmdldCBBcHBlYXJzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG1ldGFwYWdlX3JlYWRfZm9saW9gIHdpdGhpbiBgZnMvamZzL2pmc19tZXRhcGFnZS5jYC4gUmlnaHQsIHRoYXQmIzM5O3MgSkZTIOKAkyBhIGZpbGUgc3lzdGVtLCBzcGVjaWZpY2FsbHkuIE15IGV4cGVydCBpbnR1aXRpb24gaXMgaW1tZWRpYXRlbHkgcGlxdWVkOyBhbnkgbG93LWxldmVsIGZpbGVzeXN0ZW0gY29kZSBsaWtlIHRoaXMgaXMgcHJhY3RpY2FsbHkgYmVnZ2luZyBmb3IgYSB0aG9yb3VnaCBmdXp6aW5nIGNhbXBhaWduLiBUaGUgcG90ZW50aWFsIGZvciBtZW1vcnkgY29ycnVwdGlvbiBvciBvdGhlciB2dWxuZXJhYmlsaXRpZXMgaGVyZSBpcyBzaWduaWZpY2FudC4KCk5vdywgYmVmb3JlIEkgZGl2ZSBpbiB0b28gZGVlcCwgbGV0JiMzOTtzIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcuIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlIEpGUyBmaWxlc3lzdGVtIGlzIGFjdHVhbGx5IGVuYWJsZWQgYW5kIHRoYXQgYW55IGRlcGVuZGVuY2llcyBhcmUgYWNjb3VudGVkIGZvciBiZWZvcmUgSSBnbyBzZXR0aW5nIHVwIG15IGZ1enppbmcgZW52aXJvbm1lbnQuIE5vIHBvaW50IHNwZW5kaW5nIGEgYnVuY2ggb2YgdGltZSBvbiBzb21ldGhpbmcgdGhhdCYjMzk7cyBub3QgZXZlbiBidWlsdCBpbnRvIHRoZSBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEpGU19GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2pmcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2pmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9qZnMvS2NvbmZpZzoyOmNvbmZpZyBKRlNfRlNcbmZzL2pmcy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtKRlMgZmlsZXN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcyNwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIGBtZXRhcGFnZV9yZWFkX2ZvbGlvYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0aGUgY29uZmlnIGlzIGRlZmluaXRlbHkgc2V0IHRvIGBKRlNfRlNgLiBSaWdodCwgZ290IGl0LiBOb3csIG15IGZvY3VzIGlzIG9uIHRoaXMgYG1ldGFwYWdlX3JlYWRfZm9saW9gIGZ1bmN0aW9uLiBIb2xkIG9uLi4uIGlzbiYjMzk7dCB0aGF0IGEgc3RhdGljIGZ1bmN0aW9uPyBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCB1c3VhbGx5IG1lYW5zIGl0JiMzOTtzIGxpbWl0ZWQgaW4gc2NvcGUuIExldCBtZSBxdWlja2x5IGNoZWNrIGlmIGl0JiMzOTtzIGFzc2lnbmVkIHRvIGFueSBzdHJ1Y3Q7IHRoYXQmIzM5O2xsIGdpdmUgbWUgYSBiZXR0ZXIgaGFuZGxlIG9uIGl0cyBjb250ZXh0IGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgY2FsbGVkIHdpdGhpbiB0aGUgc3lzdGVtLiBHb3R0YSBmaWd1cmUgb3V0IGl0cyBhc3NvY2lhdGlvbnMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWV0YXBhZ2VfcmVhZF9mb2xpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2pmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvamZzL2pmc19tZXRhcGFnZS5jPTU1MD1zdGF0aWMgaW50IG1ldGFwYWdlX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTU2NC1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzo1NjU6c3RhdGljIGludCBtZXRhcGFnZV9yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGZvbGlvICpmb2xpbylcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy01NjYte1xuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYz02Nzk9Y29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBqZnNfbWV0YXBhZ2VfYW9wcyA9IHtcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzo2ODA6XHQucmVhZF9mb2xpb1x0PSBtZXRhcGFnZV9yZWFkX2ZvbGlvLFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTY4MS1cdC53cml0ZXBhZ2VzXHQ9IG1ldGFwYWdlX3dyaXRlcGFnZXMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE2OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIGBqZnNfbWV0YXBhZ2VfYW9wcy5yZWFkX2ZvbGlvYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGpmc19tZXRhcGFnZV9hb3BzLnJlYWRfZm9saW9gLiBUaGUgc3lzdGVtIGhhcyBhc3NpZ25lZCB0aGlzIGZ1bmN0aW9uIHRvIG1lLCBhbmQgbXkgaW5pdGlhbCBxdWVzdGlvbiBpcywgd2hlcmUgZG9lcyBpdCBsaXZlIGluIHRoZSBicm9hZGVyIHBpY3R1cmU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjYWxsIGdyYXBoLiBJcyB0aGVyZSBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCBkaXJlY3RseSBjYWxscyBgamZzX21ldGFwYWdlX2FvcHMucmVhZF9mb2xpb2AsIG9yIHBlcmhhcHMgaW5kaXJlY3RseSAqdXNlcyogaXQgd2l0aGluIGl0cyBleGVjdXRpb24gZmxvdz8gSSBuZWVkIHRvIHRyYWNlIHRoaXMgZnVuY3Rpb24mIzM5O3MgZGVwZW5kZW5jaWVzLgoKTmV4dCwgSSBuZWVkIHRvIGxvb2sgZm9yIHdoZXJlIGBqZnNfbWV0YXBhZ2VfYW9wc2AgaXRzZWxmIGlzIGRlY2xhcmVkLCBhbmQgd2hlcmUgaXQgaXMgaW5zdGFudGlhdGVkIGFuZCB1c2VkLiBJJiMzOTtsbCBiZXQgaXQmIzM5O3Mgc29tZXdoZXJlIGRlZXAgd2l0aGluIHRoZSBKRlMgZmlsZSBzeXN0ZW0gaW1wbGVtZW50YXRpb24uIFRoZSBmaWxlIGBmcy9qZnMvamZzX21vdW50LmNgIG9yIHNvbWV0aGluZyBzaW1pbGFyIGltbWVkaWF0ZWx5IGNvbWVzIHRvIG1pbmQgYXMgYSBsaWtlbHkgY2FuZGlkYXRlIOKAkyB0aGF0JiMzOTtzIG9mdGVuIHdoZXJlIHRoZSBjb3JlIG1vdW50IG9wdGlvbnMgYW5kIHN0cnVjdHVyZXMgZm9yIGEgZmlsZXN5c3RlbSBhcmUgZGVmaW5lZC4gSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlcmUsIGFuZCB0aGVuIGV4cGFuZCBteSBzZWFyY2ggYXMgbmVjZXNzYXJ5LiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHdvcmsgYmVnaW5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtqZnNfbWV0YXBhZ2VfYW9wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2pmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvamZzL2pmc19pbWFwLmM9NDE4PXN0cnVjdCBpbm9kZSAqZGlSZWFkU3BlY2lhbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbm9fdCBpbnVtLCBpbnQgc2Vjb25kYXJ5KVxuLS1cbmZzL2pmcy9qZnNfaW1hcC5jLTQ2OC1cbmZzL2pmcy9qZnNfaW1hcC5jOjQ2OTpcdGlwLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VhX29wcyA9IFx1MDAyNmpmc19tZXRhcGFnZV9hb3BzO1xuZnMvamZzL2pmc19pbWFwLmMtNDcwLVx0bWFwcGluZ19zZXRfZ2ZwX21hc2soaXAtXHUwMDNlaV9tYXBwaW5nLCBHRlBfTk9GUyk7XG4tLVxuZnMvamZzL2pmc19tZXRhcGFnZS5jPTY2OT1zdGF0aWMgdm9pZCBtZXRhcGFnZV9pbnZhbGlkYXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsXG4tLVxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTY3OC1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzo2Nzk6Y29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBqZnNfbWV0YXBhZ2VfYW9wcyA9IHtcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy02ODAtXHQucmVhZF9mb2xpb1x0PSBtZXRhcGFnZV9yZWFkX2ZvbGlvLFxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuaD0xMjI9c3RhdGljIGlubGluZSB2b2lkIG1ldGFwYWdlX2hvbWVvayhzdHJ1Y3QgbWV0YXBhZ2UgKm1wKVxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuaC0xMjgtXG5mcy9qZnMvamZzX21ldGFwYWdlLmg6MTI5OmV4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGpmc19tZXRhcGFnZV9hb3BzO1xuZnMvamZzL2pmc19tZXRhcGFnZS5oLTEzMC1cbi0tXG5mcy9qZnMvc3VwZXIuYz00NDE9c3RhdGljIGludCBqZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvamZzL3N1cGVyLmMtNTE3LVx0aW5vZGUtXHUwMDNlaV9zaXplID0gYmRldl9ucl9ieXRlcyhzYi1cdTAwM2VzX2JkZXYpO1xuZnMvamZzL3N1cGVyLmM6NTE4Olx0aW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWFfb3BzID0gXHUwMDI2amZzX21ldGFwYWdlX2FvcHM7XG5mcy9qZnMvc3VwZXIuYy01MTktXHRpbm9kZV9mYWtlX2hhc2goaW5vZGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDM4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIEpGUyBCbG9jayBEZXZpY2UgTWFwcGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoZSBKRlMgZmlsZXN5c3RlbSBoYW5kbGVzIGl0cyBibG9jayBkZXZpY2UgbWFwcGluZy4gSXQgc2VlbXMgYGpmc19tZXRhcGFnZV9hb3BzYCBpcyB0aGUga2V5LiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gVGhhdCYjMzk7cyB0aGUgc3RydWN0dXJlIHRoYXQmIzM5O3MgZ29pbmcgdG8gbWFuYWdlIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBmaWxlIHN5c3RlbSYjMzk7cyBtZXRhZGF0YSBhbmQgdGhlIHVuZGVybHlpbmcgYmxvY2sgZGV2aWNlLiBBbmQsIHRoZSBgcmVhZF9mb2xpb2Agb3BlcmF0aW9uIGlzIHRoZSBvbmUgdGhlIFZGUyBjYWxscyBvbiB0aGF0IGFvcHMgc3RydWN0dXJlIHdoZW4gdGhlIHN5c3RlbSBuZWVkcyB0byByZWFkIGZyb20gdGhlIGJsb2NrIGRldmljZSBtYXBwaW5nLCBvciBmb3IgcmVhZGluZyBzcGVjaWFsIGlub2Rlcy4gVGhhdCYjMzk7cyBhIGNyaXRpY2FsIHBpZWNlLgoKTm93LCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgSkZTLiBUaGluZ3MgbGlrZSBgamZzX21vdW50YCwgYGpmc19maWxsX3N1cGVyYCwgYGpmc19pZ2V0YCwgYGpmc19sb29rdXBgLCBhbmQgYGpmc19yZWFkZGlyYCwgYXJlIGFsbCBnb29kIGNhbmRpZGF0ZXMgdG8gZm9jdXMgb24gYW5kIGdldCBhIHN0cm9uZyB1bmRlcnN0YW5kaW5nLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRob3NlIGFuZCBzZWUgaG93IHRoZXkgd29yayB0b2dldGhlciB0byBtYWtlIHRoZSB3aG9sZSB0aGluZyB0aWNrLiBMZXQmIzM5O3Mgc2VlIGlmIEkgY2FuIGZpbmQgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2pmc19maWxsX3N1cGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvamZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9qZnMvc3VwZXIuYz0zNjE9c3RhdGljIGludCBqZnNfcmVjb25maWd1cmUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuLS1cbmZzL2pmcy9zdXBlci5jLTQ0MC1cbmZzL2pmcy9zdXBlci5jOjQ0MTpzdGF0aWMgaW50IGpmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmZzL2pmcy9zdXBlci5jLTQ0Mi17XG4tLVxuZnMvamZzL3N1cGVyLmM9NjM0PXN0YXRpYyBpbnQgamZzX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmZzL2pmcy9zdXBlci5jLTYzNS17XG5mcy9qZnMvc3VwZXIuYzo2MzY6XHRyZXR1cm4gZ2V0X3RyZWVfYmRldihmYywgamZzX2ZpbGxfc3VwZXIpO1xuZnMvamZzL3N1cGVyLmMtNjM3LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYxMgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDb25zaWRlcmluZyBQb3RlbnRpYWwgRW50cnkgUG9pbnRzKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBmdW5jdGlvbnMgcG90ZW50aWFsbHkgaW52b2x2ZWQgaW4gc29tZSBrZXkgYXNwZWN0IG9mIHRoZSBmaWxlIHN5c3RlbS4gYGpmc19maWxsX3N1cGVyYCBpcyBkZWZpbml0ZWx5IGEgc3Ryb25nIGNvbnRlbmRlciwgYSBjbGFzc2ljIHN0YXJ0aW5nIHBvaW50IGZvciB0aGUgZmlsZSBzeXN0ZW0mIzM5O3MgaW5pdGlhbGl6YXRpb24uIEJ1dCwgbGV0JiMzOTtzIG5vdCBqdW1wIHRvIGNvbmNsdXNpb25zLgoKSSYjMzk7bSBhbHNvIHBvbmRlcmluZyBgX19nZXRfbWV0YXBhZ2VgIGFuZCBgcmVhZF9tZXRhcGFnZWAuIFRoZXkgc2VlbSByZWxhdGVkIHRvIGhvdyBtZXRhZGF0YSwgc3BlY2lmaWNhbGx5IG1ldGFwYWdlcywgYXJlIGhhbmRsZWQuIERlcGVuZGluZyBvbiB3aGF0IHdlJiMzOTtyZSBpbnZlc3RpZ2F0aW5nLCB0aG9zZSBjb3VsZCBiZSBjcnVjaWFsLiBJdCYjMzk7cyB0b28gZWFybHkgdG8gY2hvb3NlIGRlZmluaXRpdmVseSwgYnV0IEkmIzM5O2xsIG1ha2UgYSBub3RlIG9mIGJvdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fZ2V0X21ldGFwYWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvamZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9qZnMvamZzX21ldGFwYWdlLmM9Njc5PWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgamZzX21ldGFwYWdlX2FvcHMgPSB7XG4tLVxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTY4Ny1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzo2ODg6c3RydWN0IG1ldGFwYWdlICpfX2dldF9tZXRhcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBsb25nIGxibG9jayxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy02ODktXHRcdFx0XHR1bnNpZ25lZCBpbnQgc2l6ZSwgaW50IGFic29sdXRlLFxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy02OTktXG5mcy9qZnMvamZzX21ldGFwYWdlLmM6NzAwOlx0amZzX2luZm8oXCYjMzQ7X19nZXRfbWV0YXBhZ2U6IGlubyA9ICVsbHUsIGxibG9jayA9IDB4JWx4LCBhYnM9JWRcJiMzNDssXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtNzAxLVx0XHQgaW5vZGUtXHUwMDNlaV9pbm8sIGxibG9jaywgYWJzb2x1dGUpO1xuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy03ODktXHRmb2xpb191bmxvY2soZm9saW8pO1xuZnMvamZzL2pmc19tZXRhcGFnZS5jOjc5MDpcdGpmc19pbmZvKFwmIzM0O19fZ2V0X21ldGFwYWdlOiByZXR1cm5pbmcgPSAweCVwIGRhdGEgPSAweCVwXCYjMzQ7LCBtcCwgbXAtXHUwMDNlZGF0YSk7XG5mcy9qZnMvamZzX21ldGFwYWdlLmMtNzkxLVx0cmV0dXJuIG1wO1xuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuaD00OT1leHRlcm4gdm9pZCBtZXRhcGFnZV9leGl0KHZvaWQpO1xuZnMvamZzL2pmc19tZXRhcGFnZS5oOjUwOmV4dGVybiBzdHJ1Y3QgbWV0YXBhZ2UgKl9fZ2V0X21ldGFwYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9qZnMvamZzX21ldGFwYWdlLmgtNTEtXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgbGJsb2NrLCB1bnNpZ25lZCBpbnQgc2l6ZSxcbi0tXG5mcy9qZnMvamZzX21ldGFwYWdlLmgtNTQtI2RlZmluZSByZWFkX21ldGFwYWdlKGlub2RlLCBsYmxvY2ssIHNpemUsIGFic29sdXRlKVxcXG5mcy9qZnMvamZzX21ldGFwYWdlLmg6NTU6XHQgX19nZXRfbWV0YXBhZ2UoaW5vZGUsIGxibG9jaywgc2l6ZSwgYWJzb2x1dGUsIGZhbHNlKVxuZnMvamZzL2pmc19tZXRhcGFnZS5oLTU2LVxuZnMvamZzL2pmc19tZXRhcGFnZS5oLTU3LSNkZWZpbmUgZ2V0X21ldGFwYWdlKGlub2RlLCBsYmxvY2ssIHNpemUsIGFic29sdXRlKVxcXG5mcy9qZnMvamZzX21ldGFwYWdlLmg6NTg6XHQgX19nZXRfbWV0YXBhZ2UoaW5vZGUsIGxibG9jaywgc2l6ZSwgYWJzb2x1dGUsIHRydWUpXG5mcy9qZnMvamZzX21ldGFwYWdlLmgtNTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0NDQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzcywgd2l0aCBhIGZvY3VzIGZvciBhbiBleHBlcnQgbGlrZSB5b3Vyc2VsZjoKCioqSWRlbnRpZnlpbmcgS2V5IEtlcm5lbCBTeW1ib2xzIGZvciBBbmFseXNpcyoqCgpSaWdodCwgbGV0JiMzOTtzIHNlZS4gYF9fZ2V0X21ldGFwYWdlYCBpcyBleHBvcnRlZCwgbWVhbmluZyBpdCYjMzk7cyBhIGNyaXRpY2FsIGVudHJ5IHBvaW50IG9yIGZ1bmN0aW9uIHBvdGVudGlhbGx5IHVzZWQgYnkgb3RoZXIgbW9kdWxlcywgYW5kIGl0JiMzOTtzIG5vbi1zdGF0aWMsIHNvIGl0JiMzOTtzIGdsb2JhbGx5IHZpc2libGUgd2l0aGluIHRoZSByZWxldmFudCBuYW1lc3BhY2UuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYSBwcmV0dHkgZ29vZCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGRlZXBlci4gSXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0IGFzIGEgbGlrZWx5IGZvY3VzIHN5bWJvbCBmb3IgZGVlcGVyIGFuYWx5c2lzLgoKQW5kIGBqZnNfZmlsbF9zdXBlcmAgaXMgYW5vdGhlciBnb29kIG9uZS4gQmFzZWQgb24gaXRzIG5hbWUsIGl0JiMzOTtzIG9idmlvdXNseSByZWxhdGVkIHRvIHRoZSBmaWxlc3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGxvb2sgaW50byB0aGF0LgoKTm93LCBsZXQgbWUgc2VlIGlmIEkgY2FuIGZpbmQgc29tZSBvdGhlciBwb3RlbnRpYWxseSB2YWx1YWJsZSBjYW5kaWRhdGVzIGZvciBkZWVwZXIgYW5hbHlzaXMuIFRoZXJlJiMzOTtzIHByb2JhYmx5IG1vcmUuLi4gVGltZSB0byBzdGFydCBsb29raW5nIGFyb3VuZCBmb3IgcmVsYXRlZCBzeW1ib2xzLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlYWRfbWV0YXBhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9qZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2pmcy9qZnNfYnRyZWUuaD0xNz1zdHJ1Y3QgYnRwYWdlIHtcbi0tXG5mcy9qZnMvamZzX2J0cmVlLmgtNjMtXHR7XFxcbmZzL2pmcy9qZnNfYnRyZWUuaDo2NDpcdFx0TVAgPSByZWFkX21ldGFwYWdlKChJUCksIEJOLCBTSVpFLCAxKTtcXFxuZnMvamZzL2pmc19idHJlZS5oLTY1LVx0XHRpZiAoTVApIHtcXFxuLS1cbmZzL2pmcy9qZnNfZG1hcC5jPTI0MD1pbnQgZGJNb3VudChzdHJ1Y3QgaW5vZGUgKmlwYm1hcClcbi0tXG5mcy9qZnMvamZzX2RtYXAuYy0yNTUtXHQvKiByZWFkIHRoZSBvbi1kaXNrIGJtYXAgZGVzY3JpcHRvci4gKi9cbmZzL2pmcy9qZnNfZG1hcC5jOjI1NjpcdG1wID0gcmVhZF9tZXRhcGFnZShpcGJtYXAsXG5mcy9qZnMvamZzX2RtYXAuYy0yNTctXHRcdFx0ICAgQk1BUEJMS05PIFx1MDAzY1x1MDAzYyBKRlNfU0JJKGlwYm1hcC1cdTAwM2VpX3NiKS1cdTAwM2VsMm5icGVycGFnZSxcbi0tXG5mcy9qZnMvamZzX2RtYXAuYz0zNjM9aW50IGRiU3luYyhzdHJ1Y3QgaW5vZGUgKmlwYm1hcClcbi0tXG5mcy9qZnMvamZzX2RtYXAuYy0zNzMtXHQvKiBnZXQgdGhlIGJ1ZmZlciBmb3IgdGhlIG9uLWRpc2sgYm1hcCBkZXNjcmlwdG9yLiAqL1xuZnMvamZzL2pmc19kbWFwLmM6Mzc0Olx0bXAgPSByZWFkX21ldGFwYWdlKGlwYm1hcCxcbmZzL2pmcy9qZnNfZG1hcC5jLTM3NS1cdFx0XHQgICBCTUFQQkxLTk8gXHUwMDNjXHUwMDNjIEpGU19TQkkoaXBibWFwLVx1MDAzZWlfc2IpLVx1MDAzZWwybmJwZXJwYWdlLFxuLS1cbmZzL2pmcy9qZnNfZG1hcC5jLTM3Ny1cdGlmIChtcCA9PSBOVUxMKSB7XG5mcy9qZnMvamZzX2RtYXAuYzozNzg6XHRcdGpmc19lcnIoXCYjMzQ7ZGJTeW5jOiByZWFkX21ldGFwYWdlIGZhaWxlZCFcJiMzNDspO1xuZnMvamZzL2pmc19kbWFwLmMtMzc5LVx0XHRyZXR1cm4gLUVJTztcbi0tXG5mcy9qZnMvamZzX2RtYXAuYz00MzE9aW50IGRiRnJlZShzdHJ1Y3QgaW5vZGUgKmlwLCBzNjQgYmxrbm8sIHM2NCBuYmxvY2tzKVxuLS1cbmZzL2pmcy9qZnNfZG1hcC5jLTQ3MS1cdFx0bGJsa25vID0gQkxLVE9ETUFQKGJsa25vLCBibXAtXHUwMDNlZGJfbDJuYnBlcnBhZ2UpO1xuZnMvamZzL2pmc19kbWFwLmM6NDcyOlx0XHRtcCA9IHJlYWRfbWV0YXBhZ2UoaXBibWFwLCBsYmxrbm8sIFBTSVpFLCAwKTtcbmZzL2pmcy9qZnNfZG1hcC5jLTQ3My1cdFx0aWYgKG1wID09IE5VTEwpIHtcbi0tXG5mcy9qZnMvamZzX2RtYXAuYz01MjU9ZGJVcGRhdGVQTWFwKHN0cnVjdCBpbm9kZSAqaXBibWFwLFxuLS1cbmZzL2pmcy9qZnNfZG1hcC5jLTU2NS1cbmZzL2pmcy9qZnNfZG1hcC5jOjU2NjpcdFx0XHRtcCA9IHJlYWRfbWV0YXBhZ2UoYm1wLVx1MDAzZWRiX2lwYm1hcCwgbGJsa25vLCBQU0laRSxcbmZzL2pmcy9qZnNfZG1hcC5jLTU2Ny1cdFx0XHRcdFx0ICAgMCk7XG4tLVxuZnMvamZzL2pmc19kbWFwLmM9ODAxPWludCBkYkFsbG9jKHN0cnVjdCBpbm9kZSAqaXAsIHM2NCBoaW50LCBzNjQgbmJsb2NrcywgczY0ICogcmVzdWx0cylcbi0tXG5mcy9qZnMvamZzX2RtYXAuYy04ODItXHRcdGxibGtubyA9IEJMS1RPRE1BUChibGtubywgYm1wLVx1MDAzZWRiX2wybmJwZXJwYWdlKTtcbmZzL2pmcy9qZnNfZG1hcC5jOjg4MzpcdFx0bXAgPSByZWFkX21ldGFwYWdlKGlwYm1hcCwgbGJsa25vLCBQU0laRSwgMCk7XG5mcy9qZnMvamZzX2RtYXAuYy04ODQtXHRcdGlmIChtcCA9PSBOVUxMKVxuLS1cbmZzL2pmcy9qZnNfZG1hcC5jPTEwNTk9c3RhdGljIGludCBkYkV4dGVuZChzdHJ1Y3QgaW5vZGUgKmlwLCBzNjQgYmxrbm8sIHM2NCBuYmxvY2tzLCBzNjQgYWRkbmJsb2Nrcylcbi0tXG5mcy9qZnMvamZzX2RtYXAuYy0xMTEyLVx0bGJsa25vID0gQkxLVE9ETUFQKGV4dGJsa25vLCBibXAtXHUwMDNlZGJfbDJuYnBlcnBhZ2UpO1xuZnMvamZzL2pmc19kbWFwLmM6MTExMzpcdG1wID0gcmVhZF9tZXRhcGFnZShpcGJtYXAsIGxibGtubywgUFNJWkUsIDApO1xuZnMvamZzL2pmc19kbWFwLmMtMTExNC1cdGlmIChtcCA9PSBOVUxMKSB7XG4tLVxuZnMvamZzL2pmc19kbWFwLmM9MTM5OT1kYkFsbG9jQUcoc3RydWN0IGJtYXAgKiBibXAsIGludCBhZ25vLCBzNjQgbmJsb2NrcywgaW50IGwybmIsIHM2NCAqIHJlc3VsdHMpXG4tLVxuZnMvamZzL2pmc19kbWFwLmMtMTQ1NS1cdGxibGtubyA9IEJMS1RPQ1RMKGJsa25vLCBibXAtXHUwMDNlZGJfbDJuYnBlcnBhZ2UsIGJtcC1cdTAwM2VkYl9hZ2xldmVsKTtcbmZzL2pmcy9qZnNfZG1hcC5jOjE0NTY6XHRtcCA9IHJlYWRfbWV0YXBhZ2UoYm1wLVx1MDAzZWRiX2lwYm1hcCwgbGJsa25vLCBQU0laRSwgMCk7XG5mcy9qZnMvamZzX2RtYXAuYy0xNDU3LVx0aWYgKG1wID09IE5VTEwpXG4tLVxuZnMvamZzL2pmc19kbWFwLmM9MTc2OD1zdGF0aWMgaW50IGRiRmluZEN0bChzdHJ1Y3QgYm1hcCAqIGJtcCwgaW50IGwybmIsIGludCBsZXZlbCwgczY0ICogYmxrbm8pXG4tLVxuZnMvamZzL2pmc19kbWFwLmMtMTc4NS1cdFx0bGJsa25vID0gQkxLVE9DVEwoYiwgYm1wLVx1MDAzZWRiX2wybmJwZXJwYWdlLCBsZXYpO1xuZnMvamZzL2pmc19kbWFwLmM6MTc4NjpcdFx0bXAgPSByZWFkX21ldGFwYWdlKGJtcC1cdTAwM2VkYl9pcGJtYXAsIGxibGtubywgUFNJWkUsIDApO1xuZnMvamZzL2pmc19kbWFwLmMtMTc4Ny1cdFx0aWYgKG1wID09IE5VTEwpXG4tLVxuZnMvamZzL2pmc19kbWFwLmM9MTg4Nz1kYkFsbG9jQ3RsKHN0cnVjdCBibWFwICogYm1wLCBzNjQgbmJsb2NrcywgaW50IGwybmIsIHM2NCBibGtubywgczY0ICogcmVzdWx0cylcbi0tXG5mcy9qZnMvamZzX2RtYXAuYy0xODk5LVx0XHRsYmxrbm8gPSBCTEtUT0RNQVAoYmxrbm8sIGJtcC1cdTAwM2VkYl9sMm5icGVycGFnZSk7XG5mcy9qZnMvamZzX2RtYXAuYzoxOTAwOlx0XHRtcCA9IHJlYWRfbWV0YXBhZ2UoYm1wLVx1MDAzZWRiX2lwYm1hcCwgbGJsa25vLCBQU0laRSwgMCk7XG5mcy9qZnMvamZzX2RtYXAuYy0xOTAxLVx0XHRpZiAobXAgPT0gTlVMTClcbi0tXG5mcy9qZnMvamZzX2RtYXAuYy0xOTMxLVx0XHRsYmxrbm8gPSBCTEtUT0RNQVAoYiwgYm1wLVx1MDAzZWRiX2wybmJwZXJwYWdlKTtcbmZzL2pmcy9qZnNfZG1hcC5jOjE5MzI6XHRcdG1wID0gcmVhZF9tZXRhcGFnZShibXAtXHUwMDNlZGJfaXBibWFwLCBsYmxrbm8sIFBTSVpFLCAwKTtcbmZzL2pmcy9qZnNfZG1hcC5jLTE5MzMtXHRcdGlmIChtcCA9PSBOVUxMKSB7XG4tLVxuZnMvamZzL2pmc19kbWFwLmMtMTk4NC1cdFx0bGJsa25vID0gQkxLVE9ETUFQKGIsIGJtcC1cdTAwM2VkYl9sMm5icGVycGFnZSk7XG5mcy9qZnMvamZzX2RtYXAuYzoxOTg1Olx0XHRtcCA9IHJlYWRfbWV0YXBhZ2UoYm1wLVx1MDAzZWRiX2lwYm1hcCwgbGJsa25vLCBQU0laRSwgMCk7XG5mcy9qZnMvamZzX2RtYXAuYy0xOTg2LVx0XHRpZiAobXAgPT0gTlVMTCkge1xuLS1cbmZzL2pmcy9qZnNfZG1hcC5jPTI1NTc9ZGJBZGpDdGwoc3RydWN0IGJtYXAgKiBibXAsIHM2NCBibGtubywgaW50IG5ld3ZhbCwgaW50IGFsbG9jLCBpbnQgbGV2ZWwpXG4tLVxuZnMvamZzL2pmc19kbWFwLmMtMjU2OS1cdGxibGtubyA9IEJMS1RPQ1RMKGJsa25vLCBibXAtXHUwMDNlZGJfbDJuYnBlcnBhZ2UsIGxldmVsKTtcbmZzL2pmcy9qZnNfZG1hcC5jOjI1NzA6XHRtcCA9IHJlYWRfbWV0YXBhZ2UoYm1wLVx1MDAzZWRiX2lwYm1hcCwgbGJsa25vLCBQU0laRSwgMCk7XG5mcy9qZnMvamZzX2RtYXAuYy0yNTcxLVx0aWYgKG1wID09IE5VTEwpXG4tLVxuZnMvamZzL2pmc19kbWFwLmM9MzI3OD1pbnQgZGJBbGxvY0JvdHRvbVVwKHN0cnVjdCBpbm9kZSAqaXAsIHM2NCBibGtubywgczY0IG5ibG9ja3MpXG4tLVxuZnMvamZzL2pmc19kbWFwLmMtMzMwMy1cdFx0bGJsa25vID0gQkxLVE9ETUFQKGJsa25vLCBibXAtXHUwMDNlZGJfbDJuYnBlcnBhZ2UpO1xuZnMvamZzL2pmc19kbWFwLmM6MzMwNDpcdFx0bXAgPSByZWFkX21ldGFwYWdlKGlwYm1hcCwgbGJsa25vLCBQU0laRSwgMCk7XG5mcy9qZnMvamZzX2RtYXAuYy0zMzA1LVx0XHRpZiAobXAgPT0gTlVMTCkge1xuLS1cbmZzL2pmcy9qZnNfZG1hcC5jPTM0NTQ9aW50IGRiRXh0ZW5kRlMoc3RydWN0IGlub2RlICppcGJtYXAsIHM2NCBibGtubyxcdHM2NCBuYmxvY2tzKVxuLS1cbmZzL2pmcy9qZnNfZG1hcC5jLTM1MzctXHRwID0gQk1BUEJMS05PICYjNDM7IG5icGVycGFnZTtcdC8qIEwyIHBhZ2UgKi9cbmZzL2pmcy9qZnNfZG1hcC5jOjM1Mzg6XHRsMm1wID0gcmVhZF9tZXRhcGFnZShpcGJtYXAsIHAsIFBTSVpFLCAwKTtcbmZzL2pmcy9qZnNfZG1hcC5jLTM1MzktXHRpZiAoIWwybXApIHtcbi0tXG5mcy9qZnMvamZzX2RtYXAuYy0zNTYxLVx0XHRcdC8qIHJlYWQgaW4gTDEgcGFnZTogKGJsa25vIFx1MDAyNiAoTUFYTDFTSVpFIC0gMSkpICovXG5mcy9qZnMvamZzX2RtYXAuYzozNTYyOlx0XHRcdGwxbXAgPSByZWFkX21ldGFwYWdlKGlwYm1hcCwgcCwgUFNJWkUsIDApO1xuZnMvamZzL2pmc19kbWFwLmMtMzU2My1cdFx0XHRpZiAobDFtcCA9PSBOVUxMKVxuLS1cbmZzL2pmcy9qZnNfZG1hcC5jLTM2MDEtXG5mcy9qZnMvamZzX2RtYXAuYzozNjAyOlx0XHRcdFx0bDBtcCA9IHJlYWRfbWV0YXBhZ2UoaXBibWFwLCBwLCBQU0laRSwgMCk7XG5mcy9qZnMvamZzX2RtYXAuYy0zNjAzLVx0XHRcdFx0aWYgKGwwbXAgPT0gTlVMTClcbi0tXG5mcy9qZnMvamZzX2RtYXAuYy0zNjQ1LVx0XHRcdFx0XHQvKiByZWFkIGluIGRtYXAgcGFnZTogKi9cbmZzL2pmcy9qZnNfZG1hcC5jOjM2NDY6XHRcdFx0XHRcdG1wID0gcmVhZF9tZXRhcGFnZShpcGJtYXAsIHAsXG5mcy9qZnMvamZzX2RtYXAuYy0zNjQ3LVx0XHRcdFx0XHRcdFx0ICAgUFNJWkUsIDApO1xuLS1cbmZzL2pmcy9qZnNfZG1hcC5jLTM2NTItXHRcdFx0XHRcdC8qIGFzc2lnbi9pbml0IGRtYXAgcGFnZSAqL1xuZnMvamZzL2pmc19kbWFwLmM6MzY1MzpcdFx0XHRcdFx0bXAgPSByZWFkX21ldGFwYWdlKGlwYm1hcCwgcCxcbmZzL2pmcy9qZnNfZG1hcC5jLTM2NTQtXHRcdFx0XHRcdFx0XHQgICBQU0laRSwgMCk7XG4tLVxuZnMvamZzL2pmc19kdHJlZS5jPTE5Mz1zdGF0aWMgc3RydWN0IG1ldGFwYWdlICpyZWFkX2luZGV4X3BhZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgczY0IGJsa25vKVxuLS1cbmZzL2pmcy9qZnNfZHRyZWUuYy0yMDMtXG5mcy9qZnMvamZzX2R0cmVlLmM6MjA0Olx0cmV0dXJuIHJlYWRfbWV0YXBhZ2UoaW5vZGUsIHhhZGRyLCBQU0laRSwgMSk7XG5mcy9qZnMvamZzX2R0cmVlLmMtMjA1LX1cbi0tXG5mcy9qZnMvamZzX2R0cmVlLmM9MzE5PXN0YXRpYyB1MzIgYWRkX2luZGV4KHRpZF90IHRpZCwgc3RydWN0IGlub2RlICppcCwgczY0IGJuLCBpbnQgc2xvdClcbi0tXG5mcy9qZnMvamZzX2R0cmVlLmMtNDUxLVx0aWYgKCFtcCkge1xuZnMvamZzL2pmc19kdHJlZS5jOjQ1MjpcdFx0amZzX2VycihcJiMzNDthZGRfaW5kZXg6IGdldC9yZWFkX21ldGFwYWdlIGZhaWxlZCFcJiMzNDspO1xuZnMvamZzL2pmc19kdHJlZS5jLTQ1My1cdFx0Z290byBjbGVhbl91cDtcbi0tXG5mcy9qZnMvamZzX2ltYXAuYz05ND1pbnQgZGlNb3VudChzdHJ1Y3QgaW5vZGUgKmlwaW1hcClcbi0tXG5mcy9qZnMvamZzX2ltYXAuYy0xMTAtXG5mcy9qZnMvamZzX2ltYXAuYzoxMTE6XHRtcCA9IHJlYWRfbWV0YXBhZ2UoaXBpbWFwLFxuZnMvamZzL2pmc19pbWFwLmMtMTEyLVx0XHRcdCAgIElNQVBCTEtOTyBcdTAwM2NcdTAwM2MgSkZTX1NCSShpcGltYXAtXHUwMDNlaV9zYiktXHUwMDNlbDJuYnBlcnBhZ2UsXG4tLVxuZnMvamZzL2pmc19pbWFwLmM9MjkwPWludCBkaVJlYWQoc3RydWN0IGlub2RlICppcClcbi0tXG5mcy9qZnMvamZzX2ltYXAuYy0zNjYtXHQvKiByZWFkIHRoZSBwYWdlIG9mIGRpc2sgaW5vZGUgKi9cbmZzL2pmcy9qZnNfaW1hcC5jOjM2NzpcdG1wID0gcmVhZF9tZXRhcGFnZShpcGltYXAsIHBhZ2VubyBcdTAwM2NcdTAwM2Mgc2JpLVx1MDAzZWwybmJwZXJwYWdlLCBQU0laRSwgMSk7XG5mcy9qZnMvamZzX2ltYXAuYy0zNjgtXHRpZiAoIW1wKSB7XG5mcy9qZnMvamZzX2ltYXAuYzozNjk6XHRcdGpmc19lcnIoXCYjMzQ7ZGlSZWFkOiByZWFkX21ldGFwYWdlIGZhaWxlZFwmIzM0Oyk7XG5mcy9qZnMvamZzX2ltYXAuYy0zNzAtXHRcdHJldHVybiAtRUlPO1xuLS1cbmZzL2pmcy9qZnNfaW1hcC5jPTQxOD1zdHJ1Y3QgaW5vZGUgKmRpUmVhZFNwZWNpYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW5vX3QgaW51bSwgaW50IHNlY29uZGFyeSlcbi0tXG5mcy9qZnMvamZzX2ltYXAuYy00NDYtXHQvKiByZWFkIHRoZSBwYWdlIG9mIGZpeGVkIGRpc2sgaW5vZGUgKEFJVCkgaW4gcmF3IG1vZGUgKi9cbmZzL2pmcy9qZnNfaW1hcC5jOjQ0NzpcdG1wID0gcmVhZF9tZXRhcGFnZShpcCwgYWRkcmVzcyBcdTAwM2NcdTAwM2Mgc2JpLVx1MDAzZWwybmJwZXJwYWdlLCBQU0laRSwgMSk7XG5mcy9qZnMvamZzX2ltYXAuYy00NDgtXHRpZiAobXAgPT0gTlVMTCkge1xuLS1cbmZzL2pmcy9qZnNfaW1hcC5jPTUwMD12b2lkIGRpV3JpdGVTcGVjaWFsKHN0cnVjdCBpbm9kZSAqaXAsIGludCBzZWNvbmRhcnkpXG4tLVxuZnMvamZzL2pmc19pbWFwLmMtNTE3LVx0LyogcmVhZCB0aGUgcGFnZSBvZiBmaXhlZCBkaXNrIGlub2RlIChBSVQpIGluIHJhdyBtb2RlICovXG5mcy9qZnMvamZzX2ltYXAuYzo1MTg6XHRtcCA9IHJlYWRfbWV0YXBhZ2UoaXAsIGFkZHJlc3MgXHUwMDNjXHUwMDNjIHNiaS1cdTAwM2VsMm5icGVycGFnZSwgUFNJWkUsIDEpO1xuZnMvamZzL2pmc19pbWFwLmMtNTE5LVx0aWYgKG1wID09IE5VTEwpIHtcbi0tXG5mcy9qZnMvamZzX2ltYXAuYz01ODE9aW50IGRpV3JpdGUodGlkX3QgdGlkLCBzdHJ1Y3QgaW5vZGUgKmlwKVxuLS1cbmZzL2pmcy9qZnNfaW1hcC5jLTYzOC0gICAgICByZXRyeTpcbmZzL2pmcy9qZnNfaW1hcC5jOjYzOTpcdG1wID0gcmVhZF9tZXRhcGFnZShpcGltYXAsIHBhZ2VubyBcdTAwM2NcdTAwM2Mgc2JpLVx1MDAzZWwybmJwZXJwYWdlLCBQU0laRSwgMSk7XG5mcy9qZnMvamZzX2ltYXAuYy02NDAtXHRpZiAoIW1wKVxuLS1cbmZzL2pmcy9qZnNfaW1hcC5jPTI2NjM9c3RhdGljIGludCBkaUlBR1JlYWQoc3RydWN0IGlub21hcCAqIGltYXAsIGludCBpYWdubywgc3RydWN0IG1ldGFwYWdlICoqIG1wcClcbi0tXG5mcy9qZnMvamZzX2ltYXAuYy0yNjcxLVx0LyogcmVhZCB0aGUgaWFnLiAqL1xuZnMvamZzL2pmc19pbWFwLmM6MjY3MjpcdCptcHAgPSByZWFkX21ldGFwYWdlKGlwaW1hcCwgYmxrbm8sIFBTSVpFLCAwKTtcbmZzL2pmcy9qZnNfaW1hcC5jLTI2NzMtXHRpZiAoKm1wcCA9PSBOVUxMKSB7XG4tLVxuZnMvamZzL2pmc19tZXRhcGFnZS5oPTUwPWV4dGVybiBzdHJ1Y3QgbWV0YXBhZ2UgKl9fZ2V0X21ldGFwYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvamZzL2pmc19tZXRhcGFnZS5oLTUzLVxuZnMvamZzL2pmc19tZXRhcGFnZS5oOjU0OiNkZWZpbmUgcmVhZF9tZXRhcGFnZShpbm9kZSwgbGJsb2NrLCBzaXplLCBhYnNvbHV0ZSlcXFxuZnMvamZzL2pmc19tZXRhcGFnZS5oLTU1LVx0IF9fZ2V0X21ldGFwYWdlKGlub2RlLCBsYmxvY2ssIHNpemUsIGFic29sdXRlLCBmYWxzZSlcbi0tXG5mcy9qZnMveGF0dHIuYz0zNTE9c3RhdGljIGludCBlYV9yZWFkKHN0cnVjdCBpbm9kZSAqaXAsIHN0cnVjdCBqZnNfZWFfbGlzdCAqZWFsaXN0KVxuLS1cbmZzL2pmcy94YXR0ci5jLTM5NS1cbmZzL2pmcy94YXR0ci5jOjM5NjpcdFx0aWYgKCEobXAgPSByZWFkX21ldGFwYWdlKGlwLCBibGtubyAmIzQzOyBpLCBieXRlc190b19yZWFkLCAxKSkpXG5mcy9qZnMveGF0dHIuYy0zOTctXHRcdFx0cmV0dXJuIC1FSU87XG4tLVxuZnMvamZzL3hhdHRyLmM9NDI2PXN0YXRpYyBpbnQgZWFfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBlYV9idWZmZXIgKmVhX2J1ZiwgaW50IG1pbl9zaXplKVxuLS1cbmZzL2pmcy94YXR0ci5jLTU0OC1cdGVhX2J1Zi1cdTAwM2VmbGFnID0gRUFfRVhURU5UO1xuZnMvamZzL3hhdHRyLmM6NTQ5Olx0ZWFfYnVmLVx1MDAzZW1wID0gcmVhZF9tZXRhcGFnZShpbm9kZSwgYWRkcmVzc0RYRChcdTAwMjZqaS1cdTAwM2VlYSksXG5mcy9qZnMveGF0dHIuYy01NTAtXHRcdFx0XHQgICBsZW5ndGhEWEQoXHUwMDI2amktXHUwMDNlZWEpIFx1MDAzY1x1MDAzYyBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg4NAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDcyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEpGUyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gZmxhZ2dlZCBhIGJ1bmNoIG9mIEpGUyBmdW5jdGlvbnMsIGFuZCBJJiMzOTt2ZSBuYXJyb3dlZCBpdCBkb3duIHRvIGEgbW9yZSBmb2N1c2VkIHNldDogYGpmc19maWxsX3N1cGVyYCwgYF9fZ2V0X21ldGFwYWdlYCwgYGRpUmVhZGAsIGBkaVdyaXRlYCwgYGRiTW91bnRgLCBgZGJTeW5jYCwgYGRiRnJlZWAsIGBkYkFsbG9jYCwgYGVhX2dldGAsIGFuZCBgZWFfcmVhZGAuIEdpdmVuIHRoZSBjb250ZXh0IG9mIGEgcGF0Y2gsIGBfX2dldF9tZXRhcGFnZWAgYW5kIGBqZnNfZmlsbF9zdXBlcmAganVtcCBvdXQgYXMgdGhlIG1vc3QgcmVsZXZhbnQgZW50cnkgcG9pbnRzIGJlY2F1c2UgdGhleSBhcmUgY2xvc2VseSBhc3NvY2lhdGVkIHdpdGggZmlsZSBzeXN0ZW0gb3BlcmF0aW9ucywgYW5kIGluaXRpYWxpemF0aW9uLCByZXNwZWN0aXZlbHkuIFdlJiMzOTtyZSBsb29raW5nIGF0IGNvcmUgZnVuY3Rpb25hbGl0eSBjaGFuZ2VzLgoKVGhlIGNyaXRpY2FsIHBpZWNlIGhlcmUgaXMgdGhlIHBhdGNoJiMzOTtzIGxvY2F0aW9uLCBgbWV0YXBhZ2VfcmVhZF9mb2xpb2AuIFRoZSBWRlMgY2FsbHMgdGhpcyB3aGVuIGRlYWxpbmcgd2l0aCBKRlMgYmxvY2sgZGV2aWNlIG1hcHBpbmdzLCBzcGVjaWZpY2FsbHkgZHVyaW5nIHBhZ2UgcmVhZHMgdmlhIGByZWFkX21hcHBpbmdfZm9saW9gLiBgX19nZXRfbWV0YXBhZ2VgIGlzIHRoZSBrZXkgZnVuY3Rpb24gdGhhdCBjYWxscyBgcmVhZF9tYXBwaW5nX2ZvbGlvYCB3aGljaCwgaW4gdHVybiwgY2FsbHMgYG1ldGFwYWdlX3JlYWRfZm9saW9gLCBlZmZlY3RpdmVseSBtYWtpbmcgaXQgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHRoZSByZWxldmFudCBmdW5jdGlvbmFsaXR5LiBUaGlzIG1ha2VzIHNlbnNlOiB0aGUgYmxvY2sgZGV2aWNlIG1hcHBpbmcgaXMgZ29pbmcgdG8gcmVhZCBmaWxlc3lzdGVtIG1ldGFkYXRhIHBhZ2VzLgoKSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYG1ldGFwYWdlX3JlYWRfZm9saW9gIGlzIHJlYWNoYWJsZS4gSXQmIzM5O3MgYXNzaWduZWQgdG8gYGpmc19tZXRhcGFnZV9hb3BzLnJlYWRfZm9saW9gLCB3aGljaCBpcyB1c2VkIGZvciBib3RoIGJsb2NrIGRldmljZSBtYXBwaW5ncyAoaW5pdGlhbGl6ZWQgaW4gYGpmc19maWxsX3N1cGVyYCkgYW5kIHNwZWNpYWwgaW5vZGVzIChgZGlSZWFkU3BlY2lhbGApLiBUaGlzIGlzIHdoYXQgSSBleHBlY3QgYmFzZWQgb24gSkZTJiMzOTtzIGFyY2hpdGVjdHVyZS4gTWV0YWRhdGEgcmVhZHMgYXJlIGdvaW5nIHRocm91Z2ggdGhpcy4KClRoZSBwYXRjaCYjMzk7cyBjaGFuZ2UgaXMgYWJvdXQgY2hlY2tpbmcgdGhlIHJldHVybiB2YWx1ZSBvZiBgaW5zZXJ0X21ldGFwYWdlYC4gVGhpcyBpcyBzaWduaWZpY2FudCEgRmFpbHVyZSBpbiBgaW5zZXJ0X21ldGFwYWdlYCAod2hpY2ggY2FuIHJldHVybiAtRUJVU1kgb3IgLUVOT01FTSkgd2FzIHByZXZpb3VzbHkgYmVpbmcgaWdub3JlZCwgcG90ZW50aWFsbHkgY2F1c2luZyBzaWxlbnQgZGF0YSBjb3JydXB0aW9uIG9yIG90aGVyIGlzc3Vlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY29ycmVjdG5lc3MgZml4LCBhbmQgdGhlcmVmb3JlLCBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgYW5kIGZ1cnRoZXIgc2NydXRpbnkuCgpGb2N1c2luZyBpbiwgYF9fZ2V0X21ldGFwYWdlYCBpcyB0aGUgbW9zdCBkaXJlY3QgZW50cnkgcG9pbnQuIEl0JiMzOTtzIHRoZSBjb3JlIG9mIHRoZSBtZXRhZGF0YSBwYWdlIHJldHJpZXZhbCBwcm9jZXNzLiBgamZzX2ZpbGxfc3VwZXJgIHdpbGwgYmUgaW1wb3J0YW50IGR1cmluZyBtb3VudCwgYW5kIGBkaVJlYWRgIGFuZCBgZWFfZ2V0YCB3aWxsIGJlIHVzZWZ1bCBpbiBpbm9kZSBhbmQgZXh0ZW5kZWQgYXR0cmlidXRlIHJlYWRpbmcuCgpOb3csIGxldCYjMzk7cyBkaWcgaW50byBgaW5zZXJ0X21ldGFwYWdlYCBpdHNlbGYuIEl0IHJldHVybnMgYC1FQlVTWWAgaWYgdGhlIG1ldGFwYWdlIGlzIGFscmVhZHkgaW4gdGhlIGhhc2ggdGFibGUgYW5kIGAtRU5PTUVNYCBpZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlscy4gSXQmIzM5O3MgYSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uLCB3aGljaCBtZWFucyB0aGUgY29tcGlsZXIgbWlnaHQgb3B0aW1pemUgaXQgYXdheS4gU3RpbGwsIGNoZWNraW5nIHRoZSByZXR1cm4gdmFsdWUgaXMgY3J1Y2lhbCBiZWNhdXNlIGl0IGVuc3VyZXMgcHJvcGVyIGVycm9yIGhhbmRsaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgaW5saW5lIGludCBpbnNlcnRfbWV0YXBhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9qZnMvamZzX21ldGFwYWdlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvamZzL2pmc19tZXRhcGFnZS5jPTg0PXN0YXRpYyBpbmxpbmUgc3RydWN0IG1ldGFwYWdlICpmb2xpb190b19tcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2Zmc2V0KVxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy05Mi1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzo5MzpzdGF0aWMgaW5saW5lIGludCBpbnNlcnRfbWV0YXBhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1ldGFwYWdlICptcClcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy05NC17XG4tLVxuZnMvamZzL2pmc19tZXRhcGFnZS5jPTIwOD1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZXRhcGFnZSAqZm9saW9fdG9fbXAoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9mZnNldClcbi0tXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtMjEyLVxuZnMvamZzL2pmc19tZXRhcGFnZS5jOjIxMzpzdGF0aWMgaW5saW5lIGludCBpbnNlcnRfbWV0YXBhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1ldGFwYWdlICptcClcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy0yMTQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ1OQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgYGluc2VydF9tZXRhcGFnZWAgSW1wbGVtZW50YXRpb25zKioKCkFscmlnaHQsIHNvIHRoZSBjb2RlJiMzOTtzIHJhaXNpbmcgYSByZWQgZmxhZyBhYm91dCBgaW5zZXJ0X21ldGFwYWdlYC4gSXQgbG9va3MgbGlrZSB0aGVyZSBhcmUgKnR3byogcG90ZW50aWFsIGRlZmluaXRpb25zIGZsb2F0aW5nIGFyb3VuZCwgYW5kIHdoaWNoIG9uZSBnZXRzIHVzZWQgZGVwZW5kcyBvbiBzb21lIGtpbmQgb2YgY29uZmlndXJhdGlvbiBzZXR0aW5nLiBUaGF0JiMzOTtzIGFsd2F5cyBhIHJlY2lwZSBmb3Igc3VidGxlIGJ1Z3MgaWYgbm90IGhhbmRsZWQgY2FyZWZ1bGx5LgoKTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhlIHNvdXJjZS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgc3VzcGVjdCBmaWxlIGlzIGBmcy9qZnMvamZzX21ldGFwYWdlLmNgLCBhbmQgYmFzZWQgb24gdGhlIGNvbnRleHQsIEkmIzM5O20gZ3Vlc3NpbmcgdGhlIGtleSBhcmVhcyB3aWxsIGJlIGFyb3VuZCBsaW5lIDkzIGFuZCB0aGVuIGFnYWluIGFyb3VuZCBsaW5lIDIxMy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aG9zZSBhcmVhcyBzcGVjaWZpY2FsbHkgdG8gc2VlIGV4YWN0bHkgaG93IHRoZXNlIHBvdGVudGlhbGx5IGNvbmZsaWN0aW5nIGRlZmluaXRpb25zIGFyZSBiZWluZyBoYW5kbGVkIGFuZCB3aGF0IGNvbmRpdGlvbnMgdHJpZ2dlciBlYWNoIG9uZS4gSG9wZWZ1bGx5IGl0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZCBhbmQgd2VsbC1jb21tZW50ZWQsIHNvIEkgZG9uJiMzOTt0IGhhdmUgdG8gdHJhY2UgdGhyb3VnaCBhIGJ1bmNoIG9mIHByZXByb2Nlc3NvciBtYWNyb3MhIFRoaXMgc2l0dWF0aW9uIHJlcXVpcmVzIHByZWNpc2lvbiB0byBlbnN1cmUgdGhlIGNvZGUgaXMgZG9pbmcgd2hhdCBpcyBpbnRlbmRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9qZnMvamZzX21ldGFwYWdlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA4MDpcdFx0YmxrX3N0YXR1c190IHN0YXR1cztcbiAgODE6XHRcdHN0cnVjdCBtZXRhcGFnZSAqbXBbTVBTX1BFUl9QQUdFXTtcbiAgODI6XHR9O1xuICA4MzpcdFxuICA4NDpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG1ldGFwYWdlICpmb2xpb190b19tcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2Zmc2V0KVxuICA4NTpcdHtcbiAgODY6XHRcdHN0cnVjdCBtZXRhX2FuY2hvciAqYW5jaG9yID0gZm9saW8tXHUwMDNlcHJpdmF0ZTtcbiAgODc6XHRcbiAgODg6XHRcdGlmICghYW5jaG9yKVxuICA4OTpcdFx0XHRyZXR1cm4gTlVMTDtcbiAgOTA6XHRcdHJldHVybiBhbmNob3ItXHUwMDNlbXBbb2Zmc2V0IFx1MDAzZVx1MDAzZSBMMlBTSVpFXTtcbiAgOTE6XHR9XG4gIDkyOlx0XG4gIDkzOlx0c3RhdGljIGlubGluZSBpbnQgaW5zZXJ0X21ldGFwYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZXRhcGFnZSAqbXApXG4gIDk0Olx0e1xuICA5NTpcdFx0c3RydWN0IG1ldGFfYW5jaG9yICphO1xuICA5NjpcdFx0aW50IGluZGV4O1xuICA5NzpcdFx0aW50IGwybXBfYmxvY2tzO1x0LyogbG9nMiBibG9ja3MgcGVyIG1ldGFwYWdlICovXG4gIDk4Olx0XG4gIDk5Olx0XHRhID0gZm9saW8tXHUwMDNlcHJpdmF0ZTtcbiAxMDA6XHRcdGlmICghYSkge1xuIDEwMTpcdFx0XHRhID0ga3phbGxvY19vYmooc3RydWN0IG1ldGFfYW5jaG9yLCBHRlBfTk9GUyk7XG4gMTAyOlx0XHRcdGlmICghYSlcbiAxMDM6XHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAxMDQ6XHRcdFx0Zm9saW9fYXR0YWNoX3ByaXZhdGUoZm9saW8sIGEpO1xuIDEwNTpcdFx0XHRrbWFwKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UpO1xuIDEwNjpcdFx0fVxuIDEwNzpcdFxuIDEwODpcdFx0aWYgKG1wKSB7XG4gMTA5Olx0XHRcdGwybXBfYmxvY2tzID0gTDJQU0laRSAtIGZvbGlvLVx1MDAzZW1hcHBpbmctXHUwMDNlaG9zdC1cdTAwM2VpX2Jsa2JpdHM7XG4gMTEwOlx0XHRcdGluZGV4ID0gKG1wLVx1MDAzZWluZGV4IFx1MDAzZVx1MDAzZSBsMm1wX2Jsb2NrcykgXHUwMDI2IChNUFNfUEVSX1BBR0UgLSAxKTtcbiAxMTE6XHRcdFx0YS1cdTAwM2VtcF9jb3VudCYjNDM7JiM0Mzs7XG4gMTEyOlx0XHRcdGEtXHUwMDNlbXBbaW5kZXhdID0gbXA7XG4gMTEzOlx0XHR9XG4gMTE0Olx0XG4gMTE1Olx0XHRyZXR1cm4gMDtcbiAxMTY6XHR9XG4gMTE3Olx0XG4gMTE4Olx0c3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9tZXRhcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWV0YXBhZ2UgKm1wKVxuIDExOTpcdHtcbiAxMjA6XHRcdHN0cnVjdCBtZXRhX2FuY2hvciAqYSA9IGZvbGlvLVx1MDAzZXByaXZhdGU7XG4gMTIxOlx0XHRpbnQgbDJtcF9ibG9ja3MgPSBMMlBTSVpFIC0gZm9saW8tXHUwMDNlbWFwcGluZy1cdTAwM2Vob3N0LVx1MDAzZWlfYmxrYml0cztcbiAxMjI6XHRcdGludCBpbmRleDtcbiAxMjM6XHRcbiAxMjQ6XHRcdGluZGV4ID0gKG1wLVx1MDAzZWluZGV4IFx1MDAzZVx1MDAzZSBsMm1wX2Jsb2NrcykgXHUwMDI2IChNUFNfUEVSX1BBR0UgLSAxKTtcbiAxMjU6XHRcbiAxMjY6XHRcdEJVR19PTihhLVx1MDAzZW1wW2luZGV4XSAhPSBtcCk7XG4gMTI3Olx0XG4gMTI4Olx0XHRhLVx1MDAzZW1wW2luZGV4XSA9IE5VTEw7XG4gMTI5Olx0XHRpZiAoLS1hLVx1MDAzZW1wX2NvdW50ID09IDApIHtcbiAxMzA6XHRcdFx0a2ZyZWUoYSk7XG4gMTMxOlx0XHRcdGZvbGlvX2RldGFjaF9wcml2YXRlKGZvbGlvKTtcbiAxMzI6XHRcdFx0a3VubWFwKFx1MDAyNmZvbGlvLVx1MDAzZXBhZ2UpO1xuIDEzMzpcdFx0fVxuIDEzNDpcdH1cbiAxMzU6XHRcbiAxMzY6XHRzdGF0aWMgaW5saW5lIHZvaWQgaW5jX2lvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gMTM3Olx0e1xuIDEzODpcdFx0c3RydWN0IG1ldGFfYW5jaG9yICphbmNob3IgPSBmb2xpby1cdTAwM2Vwcml2YXRlO1xuIDEzOTpcdFxuIDE0MDpcdFx0YXRvbWljX2luYyhcdTAwMjZhbmNob3ItXHUwMDNlaW9fY291bnQpO1xuIDE0MTpcdH1cbiAxNDI6XHRcbiAxNDM6XHRzdGF0aWMgaW5saW5lIHZvaWQgZGVjX2lvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJsa19zdGF0dXNfdCBzdGF0dXMsXG4gMTQ0Olx0XHRcdHZvaWQgKCpoYW5kbGVyKShzdHJ1Y3QgZm9saW8gKiwgYmxrX3N0YXR1c190KSlcbiAxNDU6XHR7XG4gMTQ2Olx0XHRzdHJ1Y3QgbWV0YV9hbmNob3IgKmFuY2hvciA9IGZvbGlvLVx1MDAzZXByaXZhdGU7XG4gMTQ3Olx0XG4gMTQ4Olx0XHRpZiAoYW5jaG9yLVx1MDAzZXN0YXR1cyA9PSBCTEtfU1RTX09LKVxuIDE0OTpcdFx0XHRhbmNob3ItXHUwMDNlc3RhdHVzID0gc3RhdHVzO1xuIDE1MDpcdFxuIDE1MTpcdFx0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXHUwMDI2YW5jaG9yLVx1MDAzZWlvX2NvdW50KSlcbiAxNTI6XHRcdFx0aGFuZGxlcihmb2xpbywgYW5jaG9yLVx1MDAzZXN0YXR1cyk7XG4gMTUzOlx0fVxuIDE1NDpcdFxuIDE1NTpcdCNpZmRlZiBDT05GSUdfTUlHUkFUSU9OXG4gMTU2Olx0c3RhdGljIGludCBfX21ldGFwYWdlX21pZ3JhdGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gMTU3Olx0XHRcdFx0XHQgICAgc3RydWN0IGZvbGlvICpkc3QsIHN0cnVjdCBmb2xpbyAqc3JjLFxuIDE1ODpcdFx0XHRcdFx0ICAgIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUpXG4gMTU5Olx0e1xuIDE2MDpcdFx0c3RydWN0IG1ldGFfYW5jaG9yICpzcmNfYW5jaG9yID0gc3JjLVx1MDAzZXByaXZhdGU7XG4gMTYxOlx0XHRzdHJ1Y3QgbWV0YXBhZ2UgKm1wc1tNUFNfUEVSX1BBR0VdID0gezB9O1xuIDE2MjpcdFx0c3RydWN0IG1ldGFwYWdlICptcDtcbiAxNjM6XHRcdGludCBpLCByYztcbiAxNjQ6XHRcbiAxNjU6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1QU19QRVJfUEFHRTsgaSYjNDM7JiM0MzspIHtcbiAxNjY6XHRcdFx0bXAgPSBzcmNfYW5jaG9yLVx1MDAzZW1wW2ldO1xuIDE2NzpcdFx0XHRpZiAobXAgXHUwMDI2XHUwMDI2IG1ldGFwYWdlX2xvY2tlZChtcCkpXG4gMTY4Olx0XHRcdFx0cmV0dXJuIC1FQUdBSU47XG4gMTY5Olx0XHR9XG4gMTcwOlx0XG4gMTcxOlx0XHRyYyA9IGZpbGVtYXBfbWlncmF0ZV9mb2xpbyhtYXBwaW5nLCBkc3QsIHNyYywgbW9kZSk7XG4gMTcyOlx0XHRpZiAocmMpXG4gMTczOlx0XHRcdHJldHVybiByYztcbiAxNzQ6XHRcbiAxNzU6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1QU19QRVJfUEFHRTsgaSYjNDM7JiM0MzspIHtcbiAxNzY6XHRcdFx0bXAgPSBzcmNfYW5jaG9yLVx1MDAzZW1wW2ldO1xuIDE3NzpcdFx0XHRpZiAoIW1wKVxuIDE3ODpcdFx0XHRcdGNvbnRpbnVlO1xuIDE3OTpcdFx0XHRpZiAodW5saWtlbHkoaW5zZXJ0X21ldGFwYWdlKGRzdCwgbXApKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDE4MAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIE1ldGFwYWdlIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBpbnNlcnRfbWV0YXBhZ2VgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSBpdCYjMzk7cyBhIGNyaXRpY2FsIHBpZWNlLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGF0IGl0IGNhbiByZXR1cm4gYC1FTk9NRU1gLCB3aGljaCBpcyBhbHdheXMgYSByZWQgZmxhZyB3aGVuIGRlYWxpbmcgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiBpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGZhaWx1cmUgcGF0aHMgaGVyZS4KCkhtbSwgSSBzZWUgYSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBibG9jayDigJMgc29tZXRoaW5nIHJlbGF0ZWQgdG8gYENPTkZJR19NSUdSQVRJT05gLCBJIGJlbGlldmUsIG9yIGlzIGl0IGRpcmVjdGx5IG9uIGBDT05GSUdfTUlHUkFUSU9OYD8gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGF0Li4uIFllYWgsIGl0IGlzIGluZGVlZCBgI2lmZGVmIENPTkZJR19NSUdSQVRJT05gLgoKSG9sZCBvbiwgSSBhbHNvIG5lZWQgdG8gY29uc2lkZXIgdGhlIG90aGVyIGluc3RhbmNlIG9mIGBpbnNlcnRfbWV0YXBhZ2VgIGF0IGxpbmUgMjEzIGluIHRoaXMgZmlsZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIGNvbnNpZGVyaW5nIGFsbCB0aGUgdXNlIGNhc2VzIGZvciB0aGUgZnVuY3Rpb24sIGFuZCB3aGV0aGVyIHRoaXMgZGlmZmVyZW50IGNvbnRleHQgY2hhbmdlcyB0aGUgaW1wYWN0IG9yIG5hdHVyZSBvZiBhIHBvdGVudGlhbCBgLUVOT01FTWAgcmV0dXJuLiBUaW1lIHRvIGRpZyBpbiBhbmQgY29tcGFyZSB0aGUgY2FsbCBzaXRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9qZnMvamZzX21ldGFwYWdlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE5MDpcdFx0LyogVXBkYXRlIHRoZSBtZXRhcGFnZSBhbmQgcmVtb3ZlIGl0IGZyb20gc3JjICovXG4gMTkxOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNUFNfUEVSX1BBR0U7IGkmIzQzOyYjNDM7KSB7XG4gMTkyOlx0XHRcdG1wID0gbXBzW2ldO1xuIDE5MzpcdFx0XHRpZiAobXApIHtcbiAxOTQ6XHRcdFx0XHRpbnQgcGFnZV9vZmZzZXQgPSBtcC1cdTAwM2VkYXRhIC0gZm9saW9fYWRkcmVzcyhzcmMpO1xuIDE5NTpcdFxuIDE5NjpcdFx0XHRcdG1wLVx1MDAzZWRhdGEgPSBmb2xpb19hZGRyZXNzKGRzdCkgJiM0MzsgcGFnZV9vZmZzZXQ7XG4gMTk3Olx0XHRcdFx0bXAtXHUwMDNlZm9saW8gPSBkc3Q7XG4gMTk4Olx0XHRcdFx0cmVtb3ZlX21ldGFwYWdlKHNyYywgbXApO1xuIDE5OTpcdFx0XHR9XG4gMjAwOlx0XHR9XG4gMjAxOlx0XG4gMjAyOlx0XHRyZXR1cm4gMDtcbiAyMDM6XHR9XG4gMjA0Olx0I2VuZGlmXHQvKiBDT05GSUdfTUlHUkFUSU9OICovXG4gMjA1Olx0XG4gMjA2Olx0I2Vsc2VcbiAyMDc6XHRcbiAyMDg6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBtZXRhcGFnZSAqZm9saW9fdG9fbXAoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9mZnNldClcbiAyMDk6XHR7XG4gMjEwOlx0XHRyZXR1cm4gZm9saW8tXHUwMDNlcHJpdmF0ZTtcbiAyMTE6XHR9XG4gMjEyOlx0XG4gMjEzOlx0c3RhdGljIGlubGluZSBpbnQgaW5zZXJ0X21ldGFwYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZXRhcGFnZSAqbXApXG4gMjE0Olx0e1xuIDIxNTpcdFx0aWYgKG1wKSB7XG4gMjE2Olx0XHRcdGZvbGlvX2F0dGFjaF9wcml2YXRlKGZvbGlvLCBtcCk7XG4gMjE3Olx0XHRcdGttYXAoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSk7XG4gMjE4Olx0XHR9XG4gMjE5Olx0XHRyZXR1cm4gMDtcbiAyMjA6XHR9XG4gMjIxOlx0XG4gMjIyOlx0c3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9tZXRhcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWV0YXBhZ2UgKm1wKVxuIDIyMzpcdHtcbiAyMjQ6XHRcdGZvbGlvX2RldGFjaF9wcml2YXRlKGZvbGlvKTtcbiAyMjU6XHRcdGt1bm1hcChcdTAwMjZmb2xpby1cdTAwM2VwYWdlKTtcbiAyMjY6XHR9XG4gMjI3Olx0XG4gMjI4Olx0I2RlZmluZSBpbmNfaW8oZm9saW8pIGRvIHt9IHdoaWxlKDApXG4gMjI5Olx0I2RlZmluZSBkZWNfaW8oZm9saW8sIHN0YXR1cywgaGFuZGxlcikgaGFuZGxlcihmb2xpbywgc3RhdHVzKVxuIDIzMDpcdFxuIDIzMTpcdCNpZmRlZiBDT05GSUdfTUlHUkFUSU9OXG4gMjMyOlx0c3RhdGljIGludCBfX21ldGFwYWdlX21pZ3JhdGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gMjMzOlx0XHRcdFx0XHQgICAgc3RydWN0IGZvbGlvICpkc3QsIHN0cnVjdCBmb2xpbyAqc3JjLFxuIDIzNDpcdFx0XHRcdFx0ICAgIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUpXG4gMjM1Olx0e1xuIDIzNjpcdFx0c3RydWN0IG1ldGFwYWdlICptcDtcbiAyMzc6XHRcdGludCBwYWdlX29mZnNldDtcbiAyMzg6XHRcdGludCByYztcbiAyMzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxODQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgSkZTIFBhdGNoIGZvciBNZW1vcnkgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgI2Vsc2VgIGJsb2NrIGFuZCBpdCYjMzk7cyBhbGwgYWJvdXQgdGhlIGNhc2Ugd2hlcmUgYCNpZiBQQUdFX1NJWkUgJmd0OyBQU0laRWAuIFJpZ2h0LCBhbmQgYFBTSVpFYCBpcyA0MDk2LCB0aGUgc3RhbmRhcmQgcGFnZSBzaXplIGluIEpGUy4gVGhpcyBtZWFucyB0aGF0IGlmIHRoZSBzeXN0ZW0mIzM5O3MgcGFnZSBzaXplIChgUEFHRV9TSVpFYCkgaXMgbGFyZ2VyIHRoYW4gNDA5NiDigJMgbGlrZSB0aG9zZSA2NEsgcGFnZXMgb24gQVJNNjQgb3IgUG93ZXJQQyDigJMgYGluc2VydF9tZXRhcGFnZWAgKmNhbiogcmV0dXJuIGAtRU5PTUVNYC4gVGhhdCYjMzk7cyB0aGUga2V5LiBJZiBgUEFHRV9TSVpFYCAqZXF1YWxzKiBgUFNJWkVgLCBpdCAqYWx3YXlzKiByZXR1cm5zIDAuIFNvLCB0aGlzIHBhdGNoIHNwZWNpZmljYWxseSBhZGRyZXNzZXMgdGhlIHBvdGVudGlhbCBgLUVOT01FTWAgc2l0dWF0aW9uIHdoZW4gYFBBR0VfU0laRWAgaXMsIGluIGZhY3QsIGxhcmdlci4KCldhaXQgYSBzZWNvbmQsIG9uIHg4Nl82NCwgYFBBR0VfU0laRWAgKmlzKiA0MDk2LCBzbyB3ZSYjMzk7cmUgYWx3YXlzIHJldHVybmluZyAwIGJ5IGRlZmF1bHQuIFNvIHRoaXMgY2hhbmdlIHdvdWxkbiYjMzk7dCBoYXZlIGFueSBpbXBhY3QuIEJ1dCBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRob3NlIHN5c3RlbXMgd2l0aCBsYXJnZXIgcGFnZSBzaXplcywgdGhlbiBgLUVOT01FTWAgY2FuIGhhcHBlbi4KCkhtbSwgbm93IEkmIzM5O20gd29uZGVyaW5nIGlmIHN5emJvdCBpcyBldmVuIGNvbmZpZ3VyZWQgdG8gdXNlIDY0SyBwYWdlcz8gU29tZXRpbWVzLCB5ZXMuIEkgaGF2ZSBzZWVuIGl0IHVzZSB0aGVtLiBUaGlzIGlzIHByb2JhYmx5IGEgZ2VuZXJhbCBmaXguCgpSZWdhcmRsZXNzLCB0aGUgcGF0Y2ggdG91Y2hlcyBgbWV0YXBhZ2VfcmVhZF9mb2xpb2AsIHdoaWNoIGlzIGEgZnVuZGFtZW50YWwgSkZTIGZ1bmN0aW9uLiBUaGF0IG1ha2VzIHRoaXMgcGF0Y2ggcmVhbGx5IGludGVyZXN0aW5nLiBBbnl0aGluZyBhZmZlY3RpbmcgYG1ldGFwYWdlX3JlYWRfZm9saW9gIGlzIGNyaXRpY2FsLCBlc3BlY2lhbGx5IHdoZW4gYWRkcmVzc2luZyBtZW1vcnkgYWxsb2NhdGlvbiBpc3N1ZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyB0ZXN0ZWQuIEkmIzM5O20gZ29pbmcgdG8gZG91YmxlIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBQU0laRWAgZm9yIGNvbmZpcm1hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIFBTSVpFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvamZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODI5CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQgYW5kIGFkb3B0aW5nIGEgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlOgoKKipIdW50aW5nIGZvciBgUFNJWkVgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gVGltZSB0byBodW50IGRvd24gdGhhdCBgUFNJWkVgIHZhcmlhYmxlLiBVc3VhbGx5LCB3aGVuIEkgZW5jb3VudGVyIHNvbWV0aGluZyBsaWtlIHRoaXMsIG15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIGNhdGFsb2dpbmcgdGhlIHBvc3NpYmlsaXRpZXMuIElzIGl0IGEgc3RhbmRhcmQgcGFyYW1ldGVyIHdpdGhpbiB0aGlzIGxpYnJhcnkgb3IgZnJhbWV3b3JrPyBJcyBpdCBhIGN1c3RvbSBtYWNybyBkZWZpbmVkIHNvbWV3aGVyZSBvYnNjdXJlLCBidXJpZWQgaW4gYSBoZWFkZXIgZmlsZT8gQ291bGQgaXQgYmUgc29tZXRoaW5nIHJlbGF0ZWQgdG8gbWVtb3J5IGFsbG9jYXRpb24sIG9yIHBlcmhhcHMgZXZlbiBhIGNvbmZpZ3VyYXRpb24gc2V0dGluZyB0aGF0JiMzOTtzIGR5bmFtaWNhbGx5IGRldGVybWluZWQ/CgpGaXJzdCwgSSYjMzk7ZCBwcm9iYWJseSBzdGFydCB3aXRoIGEgZ2xvYmFsIHNlYXJjaCB3aXRoaW4gdGhlIGNvZGViYXNlLiBJIG5lZWQgdG8gZ2V0IGEgc2Vuc2Ugb2YgaXRzIHByZXZhbGVuY2UgYW5kIGNvbnRleHQuIEEgcXVpY2sgZ3JlcCwgb3Igd2hhdGV2ZXIgc2VhcmNoIHRvb2wgSSYjMzk7bSB1c2luZyBhdCB0aGUgbW9tZW50LCB3aWxsIHBhaW50IGEgcGljdHVyZTogaG93IGZyZXF1ZW50bHkgaXMgaXQgdXNlZD8gSW4gd2hhdCBraW5kcyBvZiBtb2R1bGVzIG9yIGZ1bmN0aW9ucz8gQXJlIHRoZXJlIGNvbW1lbnRzLCBvciBvdGhlciBzdXJyb3VuZGluZyBjb2RlLCB0aGF0IHByb3ZpZGUgaW1tZWRpYXRlIGNsdWVzIGFib3V0IGl0cyBtZWFuaW5nIG9yIHB1cnBvc2U/CgpJZiB0aGUgZ2xvYmFsIHNlYXJjaCBkb2VzbiYjMzk7dCBpbW1lZGlhdGVseSByZXZlYWwgaXRzIG9yaWdpbiwgb3IgaWYgdGhlIGluaXRpYWwgcmVzdWx0cyBhcmUgYW1iaWd1b3VzLCBJJiMzOTtsbCBzdGFydCBkaWdnaW5nIGludG8gdGhlIG1vcmUgb2J2aW91cyBjYW5kaWRhdGVzLiBUaGUgZG9jdW1lbnRhdGlvbiBpcyB0aGUgYmVzdCBzdGFydGluZyBwb2ludCwgSSBrbm93IGl0JiMzOTtzIGEgYml0IG9mIGEgY2xpY2jDqSwgYnV0IGl0IGlzIG9mdGVuIHRoZSBiZXN0IHJlc291cmNlIGZvciBpbmZvcm1hdGlvbiBhYm91dCBhIHZhcmlhYmxlLiBJcyB0aGVyZSBhIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gZmlsZT8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGhlYWRlciBmaWxlcyBJIHNob3VsZCBsb29rIGF0PyBQZXJoYXBzIHRoZXJlJiMzOTtzIGFuIGludGVybmFsIHByb2plY3Qgd2lraSBvciBrbm93bGVkZ2UgYmFzZSB0aGF0IGNvdmVycyB0aGUgY29udmVudGlvbnMgdXNlZCBpbiB0aGlzIGNvZGViYXNlLgoKVWx0aW1hdGVseSwgZmluZGluZyBgUFNJWkVgIGlzIGFsbCBhYm91dCBtZXRob2RpY2FsIGV4cGxvcmF0aW9uIGFuZCBwYXR0ZXJuIHJlY29nbml0aW9uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcywgZm9sbG93aW5nIGJyZWFkY3J1bWJzLCBhbmQgY2FyZWZ1bGx5IGV4YW1pbmluZyB0aGUgc3Vycm91bmRpbmcgY29kZSB1bnRpbCBJJiMzOTt2ZSBzdWNjZXNzZnVsbHkgdHJhY2VkIGl0cyBkZWZpbml0aW9uIGFuZCBmdWxseSB1bmRlcnN0YW5kIGl0cyByb2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlZmluZSBQU0laRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2pmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI0NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBgUFNJWkVgIGluIHRoZSBKRlMgTWV0YXBhZ2UgSGVhZGVyKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBQU0laRWAuICBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIEpGUyBmaWxlc3lzdGVtLCBzcGVjaWZpY2FsbHkgYXMgaXQgcmVsYXRlcyB0byBtZXRhcGFnZXMuICBTbywgdGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZ29pbmcgdG8gZG8gaXMgbG9jYXRlIGl0cyBkZWZpbml0aW9uLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBoZWFkZXIgZmlsZSBmb3IgSkZTIG1ldGFwYWdlIHN0cnVjdHVyZXMg4oCTIGBmcy9qZnMvamZzX21ldGFwYWdlLmhgLiAgTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgcmV2ZWFscy4gIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgaXRzIGRlZmluaXRpb24gdGhlcmUsIGxpa2VseSBhcyBhIG1hY3JvIG9yIHBvc3NpYmx5IGEgY29uc3RhbnQsIGFuZCBob3BlZnVsbHkgc29tZSBjb250ZXh0IGFyb3VuZCBpdHMgdXNlLiBJ4oCZbSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBwYWdlIHNpemVzLCBob3cgaXQgbWlnaHQgcmVsYXRlIHRvIGJsb2NrIHNpemVzLCBhbmQgaG93IHRoZSBmaWxlc3lzdGVtIHN0cnVjdHVyZXMgbGV2ZXJhZ2UgdGhpcyBgUFNJWkVgIHZhbHVlLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHVzZSBvZiB0aGlzIGRlZmluaXRpb24gaW4gdGVybXMgb2YgdGhlIHVuZGVybHlpbmcgYmxvY2sgZGV2aWNlLCBhbmQgaG93IGl0IG1heSBiZSB1c2VkIGR1cmluZyByZWFkcyBhbmQgd3JpdGVzIG9mIGZpbGUgc3lzdGVtIG1ldGFkYXRhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BTSVpFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvamZzL2pmc19tZXRhcGFnZS5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1NTYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgSkZTIEZpbGVzeXN0ZW0gQ29kZWJhc2UqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpbmQgd2hlcmUgdGhlIGBQU0laRWAgbWFjcm8gaXMgZGVmaW5lZCBhbmQgdXNlZCB3aXRoaW4gdGhlIEpGUyBmaWxlc3lzdGVtLiBUaGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgaW5pdGlhbCBpbmNsaW5hdGlvbiBpcyB0byBsb29rIGRpcmVjdGx5IGluIHRoZSBgZnMvamZzL2AgZGlyZWN0b3J5LCBhcyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIGZpbGVzeXN0ZW0gY29kZSByZXNpZGVzLiBJdCYjMzk7cyBhIGZhaXJseSBzdGFuZGFyZCBhcHByb2FjaDsgbG9jYXRlIHRoZSByZWxldmFudCBpbmNsdWRlIGZpbGVzIGZpcnN0LCB0aGVuIHRyYWNrIGRvd24gd2hlcmUgdGhlIG1hY3JvIGlzIHVzZWQuIEkmIzM5O2xsIHN0YXJ0IHdpdGggYSBzdHJhaWdodGZvcndhcmQgZ3JlcCBmb3IgJiMzNDtQU0laRSYjMzQ7IGFuZCBzZWUgd2hlcmUgdGhhdCBsZWFkcy4gSG9wZWZ1bGx5LCBpdCYjMzk7cyBhIHNpbXBsZSwgbG9jYWxpemVkIGRlZmluaXRpb24uIElmIG5vdCwgSSYjMzk7bGwgbmVlZCB0byBicm9hZGVuIG15IHNlYXJjaCB0byBpbmNsdWRlIGFsbCBoZWFkZXIgZmlsZXMgd2l0aGluIHRoZSBKRlMgdHJlZSwgYW5kIHBvdGVudGlhbGx5IGV2ZW4gc3lzdGVtLXdpZGUgaGVhZGVycyBpZiB0aGUgbWFjcm8gYXBwZWFycyB0byBiZSBtb3JlIGdlbmVyaWMuIEZyb20gdGhlcmUsIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgaXRzIHVzYWdlOiBpcyBpdCByZWxhdGVkIHRvIGJsb2NrIHNpemVzLCBhbGxvY2F0aW9uIHVuaXRzLCBzZWN0b3Igc2l6ZXMsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgY29udGV4dCBvZiBpdHMgdXNlIHdpbGwgYmUgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIEpGUyBhcmNoaXRlY3R1cmUuIEkgYW50aWNpcGF0ZSBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIga2VybmVsIHN1YnN5c3RlbXMgaWYgaXQgcmVsYXRlcyB0byBibG9jayBJL08gb3IgdGhlIHZpcnR1YWwgZmlsZXN5c3RlbSAoVkZTKSBsYXllci4gSSYjMzk7bGwgbmVlZCB0byBrZWVwIGEgbWVudGFsIG5vdGUgb2YgdGhvc2UgcmVsYXRpb25zaGlwcyBhcyBJIGdvIHRocm91Z2ggdGhlIHJlbGV2YW50IGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BTSVpFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvamZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNjY3IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5mcy9qZnMvamZzX2RtYXAuYz0yNDA9aW50IGRiTW91bnQoc3RydWN0IGlub2RlICppcGJtYXApXG4tLVxuZnMvamZzL2pmc19kbWFwLmMtMjU3LVx0XHRcdCAgIEJNQVBCTEtOTyBcdTAwM2NcdTAwM2MgSkZTX1NCSShpcGJtYXAtXHUwMDNlaV9zYiktXHUwMDNlbDJuYnBlcnBhZ2UsXG5mcy9qZnMvamZzX2RtYXAuYzoyNTg6XHRcdFx0ICAgUFNJWkUsIDApO1xuZnMvamZzL2pmc19kbWFwLmMtMjU5LVx0aWYgKG1wID09IE5VTEwpIHtcbi0tXG5mcy9qZnMvamZzX2RtYXAuYy0yNzgtXG5mcy9qZnMvamZzX2RtYXAuYzoyNzk6XHRpZiAoKGJtcC1cdTAwM2VkYl9sMm5icGVycGFnZSBcdTAwM2UgTDJQU0laRSAtIEwyTUlOQkxPQ0tTSVpFKSB8fFxuZnMvamZzL2pmc19kbWFwLmMtMjgwLVx0ICAgIChibXAtXHUwMDNlZGJfbDJuYnBlcnBhZ2UgXHUwMDNjIDApIHx8XG4tLVxuZnMvamZzL2pmc19kbWFwLmM9MzYzPWludCBkYlN5bmMoc3RydWN0IGlub2RlICppcGJtYXApXG4tLVxuZnMvamZzL2pmc19kbWFwLmMtMzc1LVx0XHRcdCAgIEJNQVBCTEtOTyBcdTAwM2NcdTAwM2MgSkZTX1NCSShpcGJtYXAtXHUwMDNlaV9zYiktXHUwMDNlbDJuYnBlcnBhZ2UsXG5mcy9qZnMvamZzX2RtYXAuYzozNzY6XHRcdFx0ICAgUFNJWkUsIDApO1xuZnMvamZzL2pmc19kbWFwLmMtMzc3LVx0aWYgKG1wID09IE5VTEwpIHtcbi0tXG5mcy9qZnMvamZzX2RtYXAuYz00MzE9aW50IGRiRnJlZShzdHJ1Y3QgaW5vZGUgKmlwLCBzNjQgYmxrbm8sIHM2NCBuYmxvY2tzKVxuLS1cbmZzL2pmcy9qZnNfZG1hcC5jLTQ3MS1cdFx0bGJsa25vID0gQkxLVE9ETUFQKGJsa25vLCBibXAtXHUwMDNlZGJfbDJuYnBlcnBhZ2UpO1xuZnMvamZzL2pmc19kbWFwLmM6NDcyOlx0XHRtcCA9IHJlYWRfbWV0YXBhZ2UoaXBibWFwLCBsYmxrbm8sIFBTSVpFLCAwKTtcbmZzL2pmcy9qZnNfZG1hcC5jLTQ3My1cdFx0aWYgKG1wID09IE5VTEwpIHtcbi0tXG5mcy9qZnMvamZzX2RtYXAuYz01MjU9ZGJVcGRhdGVQTWFwKHN0cnVjdCBpbm9kZSAqaXBibWFwLFxuLS1cbmZzL2pmcy9qZnNfZG1hcC5jLTU2NS1cbmZzL2pmcy9qZnNfZG1hcC5jOjU2NjpcdFx0XHRtcCA9IHJlYWRfbWV0YXBhZ2UoYm1wLVx1MDAzZWRiX2lwYm1hcCwgbGJsa25vLCBQU0laRSxcbmZzL2pmcy9qZnNfZG1hcC5jLTU2Ny1cdFx0XHRcdFx0ICAgMCk7XG4tLVxuZnMvamZzL2pmc19kbWFwLmM9ODAxPWludCBkYkFsbG9jKHN0cnVjdCBpbm9kZSAqaXAsIHM2NCBoaW50LCBzNjQgbmJsb2NrcywgczY0ICogcmVzdWx0cylcbi0tXG5mcy9qZnMvamZzX2RtYXAuYy04ODItXHRcdGxibGtubyA9IEJMS1RPRE1BUChibGtubywgYm1wLVx1MDAzZWRiX2wybmJwZXJwYWdlKTtcbmZzL2pmcy9qZnNfZG1hcC5jOjg4MzpcdFx0bXAgPSByZWFkX21ldGFwYWdlKGlwYm1hcCwgbGJsa25vLCBQU0laRSwgMCk7XG5mcy9qZnMvamZzX2RtYXAuYy04ODQtXHRcdGlmIChtcCA9PSBOVUxMKVxuLS1cbmZzL2pmcy9qZnNfZG1hcC5jPTEwNTk9c3RhdGljIGludCBkYkV4dGVuZChzdHJ1Y3QgaW5vZGUgKmlwLCBzNjQgYmxrbm8sIHM2NCBuYmxvY2tzLCBzNjQgYWRkbmJsb2Nrcylcbi0tXG5mcy9qZnMvamZzX2RtYXAuYy0xMTEyLVx0bGJsa25vID0gQkxLVE9ETUFQKGV4dGJsa25vLCBibXAtXHUwMDNlZGJfbDJuYnBlcnBhZ2UpO1xuZnMvamZzL2pmc19kbWFwLmM6MTExMzpcdG1wID0gcmVhZF9tZXRhcGFnZShpcGJtYXAsIGxibGtubywgUFNJWkUsIDApO1xuZnMvamZzL2pmc19kbWFwLmMtMTExNC1cdGlmIChtcCA9PSBOVUxMKSB7XG4tLVxuZnMvamZzL2pmc19kbWFwLmM9MTM5OT1kYkFsbG9jQUcoc3RydWN0IGJtYXAgKiBibXAsIGludCBhZ25vLCBzNjQgbmJsb2NrcywgaW50IGwybmIsIHM2NCAqIHJlc3VsdHMpXG4tLVxuZnMvamZzL2pmc19kbWFwLmMtMTQ1NS1cdGxibGtubyA9IEJMS1RPQ1RMKGJsa25vLCBibXAtXHUwMDNlZGJfbDJuYnBlcnBhZ2UsIGJtcC1cdTAwM2VkYl9hZ2xldmVsKTtcbmZzL2pmcy9qZnNfZG1hcC5jOjE0NTY6XHRtcCA9IHJlYWRfbWV0YXBhZ2UoYm1wLVx1MDAzZWRiX2lwYm1hcCwgbGJsa25vLCBQU0laRSwgMCk7XG5mcy9qZnMvamZzX2RtYXAuYy0xNDU3LVx0aWYgKG1wID09IE5VTEwpXG4tLVxuZnMvamZzL2pmc19kbWFwLmM9MTc2OD1zdGF0aWMgaW50IGRiRmluZEN0bChzdHJ1Y3QgYm1hcCAqIGJtcCwgaW50IGwybmIsIGludCBsZXZlbCwgczY0ICogYmxrbm8pXG4tLVxuZnMvamZzL2pmc19kbWFwLmMtMTc4NS1cdFx0bGJsa25vID0gQkxLVE9DVEwoYiwgYm1wLVx1MDAzZWRiX2wybmJwZXJwYWdlLCBsZXYpO1xuZnMvamZzL2pmc19kbWFwLmM6MTc4NjpcdFx0bXAgPSByZWFkX21ldGFwYWdlKGJtcC1cdTAwM2VkYl9pcGJtYXAsIGxibGtubywgUFNJWkUsIDApO1xuZnMvamZzL2pmc19kbWFwLmMtMTc4Ny1cdFx0aWYgKG1wID09IE5VTEwpXG4tLVxuZnMvamZzL2pmc19kbWFwLmM9MTg4Nz1kYkFsbG9jQ3RsKHN0cnVjdCBibWFwICogYm1wLCBzNjQgbmJsb2NrcywgaW50IGwybmIsIHM2NCBibGtubywgczY0ICogcmVzdWx0cylcbi0tXG5mcy9qZnMvamZzX2RtYXAuYy0xODk5LVx0XHRsYmxrbm8gPSBCTEtUT0RNQVAoYmxrbm8sIGJtcC1cdTAwM2VkYl9sMm5icGVycGFnZSk7XG5mcy9qZnMvamZzX2RtYXAuYzoxOTAwOlx0XHRtcCA9IHJlYWRfbWV0YXBhZ2UoYm1wLVx1MDAzZWRiX2lwYm1hcCwgbGJsa25vLCBQU0laRSwgMCk7XG5mcy9qZnMvamZzX2RtYXAuYy0xOTAxLVx0XHRpZiAobXAgPT0gTlVMTClcbi0tXG5mcy9qZnMvamZzX2RtYXAuYy0xOTMxLVx0XHRsYmxrbm8gPSBCTEtUT0RNQVAoYiwgYm1wLVx1MDAzZWRiX2wybmJwZXJwYWdlKTtcbmZzL2pmcy9qZnNfZG1hcC5jOjE5MzI6XHRcdG1wID0gcmVhZF9tZXRhcGFnZShibXAtXHUwMDNlZGJfaXBibWFwLCBsYmxrbm8sIFBTSVpFLCAwKTtcbmZzL2pmcy9qZnNfZG1hcC5jLTE5MzMtXHRcdGlmIChtcCA9PSBOVUxMKSB7XG4tLVxuZnMvamZzL2pmc19kbWFwLmMtMTk4NC1cdFx0bGJsa25vID0gQkxLVE9ETUFQKGIsIGJtcC1cdTAwM2VkYl9sMm5icGVycGFnZSk7XG5mcy9qZnMvamZzX2RtYXAuYzoxOTg1Olx0XHRtcCA9IHJlYWRfbWV0YXBhZ2UoYm1wLVx1MDAzZWRiX2lwYm1hcCwgbGJsa25vLCBQU0laRSwgMCk7XG5mcy9qZnMvamZzX2RtYXAuYy0xOTg2LVx0XHRpZiAobXAgPT0gTlVMTCkge1xuLS1cbmZzL2pmcy9qZnNfZG1hcC5jPTI1NTc9ZGJBZGpDdGwoc3RydWN0IGJtYXAgKiBibXAsIHM2NCBibGtubywgaW50IG5ld3ZhbCwgaW50IGFsbG9jLCBpbnQgbGV2ZWwpXG4tLVxuZnMvamZzL2pmc19kbWFwLmMtMjU2OS1cdGxibGtubyA9IEJMS1RPQ1RMKGJsa25vLCBibXAtXHUwMDNlZGJfbDJuYnBlcnBhZ2UsIGxldmVsKTtcbmZzL2pmcy9qZnNfZG1hcC5jOjI1NzA6XHRtcCA9IHJlYWRfbWV0YXBhZ2UoYm1wLVx1MDAzZWRiX2lwYm1hcCwgbGJsa25vLCBQU0laRSwgMCk7XG5mcy9qZnMvamZzX2RtYXAuYy0yNTcxLVx0aWYgKG1wID09IE5VTEwpXG4tLVxuZnMvamZzL2pmc19kbWFwLmM9MzI3OD1pbnQgZGJBbGxvY0JvdHRvbVVwKHN0cnVjdCBpbm9kZSAqaXAsIHM2NCBibGtubywgczY0IG5ibG9ja3MpXG4tLVxuZnMvamZzL2pmc19kbWFwLmMtMzMwMy1cdFx0bGJsa25vID0gQkxLVE9ETUFQKGJsa25vLCBibXAtXHUwMDNlZGJfbDJuYnBlcnBhZ2UpO1xuZnMvamZzL2pmc19kbWFwLmM6MzMwNDpcdFx0bXAgPSByZWFkX21ldGFwYWdlKGlwYm1hcCwgbGJsa25vLCBQU0laRSwgMCk7XG5mcy9qZnMvamZzX2RtYXAuYy0zMzA1LVx0XHRpZiAobXAgPT0gTlVMTCkge1xuLS1cbmZzL2pmcy9qZnNfZG1hcC5jPTM0NTQ9aW50IGRiRXh0ZW5kRlMoc3RydWN0IGlub2RlICppcGJtYXAsIHM2NCBibGtubyxcdHM2NCBuYmxvY2tzKVxuLS1cbmZzL2pmcy9qZnNfZG1hcC5jLTM1MzctXHRwID0gQk1BUEJMS05PICYjNDM7IG5icGVycGFnZTtcdC8qIEwyIHBhZ2UgKi9cbmZzL2pmcy9qZnNfZG1hcC5jOjM1Mzg6XHRsMm1wID0gcmVhZF9tZXRhcGFnZShpcGJtYXAsIHAsIFBTSVpFLCAwKTtcbmZzL2pmcy9qZnNfZG1hcC5jLTM1MzktXHRpZiAoIWwybXApIHtcbi0tXG5mcy9qZnMvamZzX2RtYXAuYy0zNTYxLVx0XHRcdC8qIHJlYWQgaW4gTDEgcGFnZTogKGJsa25vIFx1MDAyNiAoTUFYTDFTSVpFIC0gMSkpICovXG5mcy9qZnMvamZzX2RtYXAuYzozNTYyOlx0XHRcdGwxbXAgPSByZWFkX21ldGFwYWdlKGlwYm1hcCwgcCwgUFNJWkUsIDApO1xuZnMvamZzL2pmc19kbWFwLmMtMzU2My1cdFx0XHRpZiAobDFtcCA9PSBOVUxMKVxuLS1cbmZzL2pmcy9qZnNfZG1hcC5jLTM1NzctXHRcdFx0LyogYXNzaWduL2luaXQgTDEgcGFnZSAqL1xuZnMvamZzL2pmc19kbWFwLmM6MzU3ODpcdFx0XHRsMW1wID0gZ2V0X21ldGFwYWdlKGlwYm1hcCwgcCwgUFNJWkUsIDApO1xuZnMvamZzL2pmc19kbWFwLmMtMzU3OS1cdFx0XHRpZiAobDFtcCA9PSBOVUxMKVxuLS1cbmZzL2pmcy9qZnNfZG1hcC5jLTM2MDEtXG5mcy9qZnMvamZzX2RtYXAuYzozNjAyOlx0XHRcdFx0bDBtcCA9IHJlYWRfbWV0YXBhZ2UoaXBibWFwLCBwLCBQU0laRSwgMCk7XG5mcy9qZnMvamZzX2RtYXAuYy0zNjAzLVx0XHRcdFx0aWYgKGwwbXAgPT0gTlVMTClcbi0tXG5mcy9qZnMvamZzX2RtYXAuYy0zNjE5LVx0XHRcdFx0LyogYXNzaWduL2luaXQgTDAgcGFnZSAqL1xuZnMvamZzL2pmc19kbWFwLmM6MzYyMDpcdFx0XHRcdGwwbXAgPSBnZXRfbWV0YXBhZ2UoaXBibWFwLCBwLCBQU0laRSwgMCk7XG5mcy9qZnMvamZzX2RtYXAuYy0zNjIxLVx0XHRcdFx0aWYgKGwwbXAgPT0gTlVMTClcbi0tXG5mcy9qZnMvamZzX2RtYXAuYy0zNjQ2LVx0XHRcdFx0XHRtcCA9IHJlYWRfbWV0YXBhZ2UoaXBibWFwLCBwLFxuZnMvamZzL2pmc19kbWFwLmM6MzY0NzpcdFx0XHRcdFx0XHRcdCAgIFBTSVpFLCAwKTtcbmZzL2pmcy9qZnNfZG1hcC5jLTM2NDgtXHRcdFx0XHRcdGlmIChtcCA9PSBOVUxMKVxuLS1cbmZzL2pmcy9qZnNfZG1hcC5jLTM2NTMtXHRcdFx0XHRcdG1wID0gcmVhZF9tZXRhcGFnZShpcGJtYXAsIHAsXG5mcy9qZnMvamZzX2RtYXAuYzozNjU0Olx0XHRcdFx0XHRcdFx0ICAgUFNJWkUsIDApO1xuZnMvamZzL2pmc19kbWFwLmMtMzY1NS1cdFx0XHRcdFx0aWYgKG1wID09IE5VTEwpXG4tLVxuZnMvamZzL2pmc19kbWFwLmgtNDQtXG5mcy9qZnMvamZzX2RtYXAuaDo0NTojZGVmaW5lXHRNQVhNQVBTSVpFXHRNQVhMMlNJWkVcdC8qIG1heGltdW0gYWdncmVnYXRlIG1hcCBzaXplICovXG5mcy9qZnMvamZzX2RtYXAuaC00Ni1cbi0tXG5mcy9qZnMvamZzX2R0cmVlLmM9MTkzPXN0YXRpYyBzdHJ1Y3QgbWV0YXBhZ2UgKnJlYWRfaW5kZXhfcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzNjQgYmxrbm8pXG4tLVxuZnMvamZzL2pmc19kdHJlZS5jLTIwMy1cbmZzL2pmcy9qZnNfZHRyZWUuYzoyMDQ6XHRyZXR1cm4gcmVhZF9tZXRhcGFnZShpbm9kZSwgeGFkZHIsIFBTSVpFLCAxKTtcbmZzL2pmcy9qZnNfZHRyZWUuYy0yMDUtfVxuLS1cbmZzL2pmcy9qZnNfZHRyZWUuYz0yMTI9c3RhdGljIHN0cnVjdCBtZXRhcGFnZSAqZ2V0X2luZGV4X3BhZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgczY0IGJsa25vKVxuLS1cbmZzL2pmcy9qZnNfZHRyZWUuYy0yMjItXG5mcy9qZnMvamZzX2R0cmVlLmM6MjIzOlx0cmV0dXJuIGdldF9tZXRhcGFnZShpbm9kZSwgeGFkZHIsIFBTSVpFLCAxKTtcbmZzL2pmcy9qZnNfZHRyZWUuYy0yMjQtfVxuLS1cbmZzL2pmcy9qZnNfZHRyZWUuYz0yMzQ9c3RhdGljIHN0cnVjdCBkaXJfdGFibGVfc2xvdCAqZmluZF9pbmRleChzdHJ1Y3QgaW5vZGUgKmlwLCB1MzIgaW5kZXgsXG4tLVxuZnMvamZzL2pmc19kdHJlZS5jLTI2NC1cdFx0b2Zmc2V0ID0gKGluZGV4IC0gMikgKiBzaXplb2Yoc3RydWN0IGRpcl90YWJsZV9zbG90KTtcbmZzL2pmcy9qZnNfZHRyZWUuYzoyNjU6XHRcdHBhZ2Vfb2Zmc2V0ID0gb2Zmc2V0IFx1MDAyNiAoUFNJWkUgLSAxKTtcbmZzL2pmcy9qZnNfZHRyZWUuYzoyNjY6XHRcdGJsa25vID0gKChvZmZzZXQgJiM0MzsgMSkgXHUwMDNlXHUwMDNlIEwyUFNJWkUpIFx1MDAzY1x1MDAzY1xuZnMvamZzL2pmc19kdHJlZS5jLTI2Ny1cdFx0ICAgIEpGU19TQkkoaXAtXHUwMDNlaV9zYiktXHUwMDNlbDJuYnBlcnBhZ2U7XG4tLVxuZnMvamZzL2pmc19kdHJlZS5jPTMxOT1zdGF0aWMgdTMyIGFkZF9pbmRleCh0aWRfdCB0aWQsIHN0cnVjdCBpbm9kZSAqaXAsIHM2NCBibiwgaW50IHNsb3QpXG4tLVxuZnMvamZzL2pmc19kdHJlZS5jLTM5OS1cdFx0fVxuZnMvamZzL2pmc19kdHJlZS5jOjQwMDpcdFx0aXAtXHUwMDNlaV9zaXplID0gUFNJWkU7XG5mcy9qZnMvamZzX2R0cmVlLmMtNDAxLVxuLS1cbmZzL2pmcy9qZnNfZHRyZWUuYy00MzAtXHRvZmZzZXQgPSAoaW5kZXggLSAyKSAqIHNpemVvZihzdHJ1Y3QgZGlyX3RhYmxlX3Nsb3QpO1xuZnMvamZzL2pmc19kdHJlZS5jOjQzMTpcdHBhZ2Vfb2Zmc2V0ID0gb2Zmc2V0IFx1MDAyNiAoUFNJWkUgLSAxKTtcbmZzL2pmcy9qZnNfZHRyZWUuYzo0MzI6XHRibGtubyA9ICgob2Zmc2V0ICYjNDM7IDEpIFx1MDAzZVx1MDAzZSBMMlBTSVpFKSBcdTAwM2NcdTAwM2Mgc2JpLVx1MDAzZWwybmJwZXJwYWdlO1xuZnMvamZzL2pmc19kdHJlZS5jLTQzMy1cdGlmIChwYWdlX29mZnNldCA9PSAwKSB7XG4tLVxuZnMvamZzL2pmc19kdHJlZS5jLTQ0MS1cdFx0fVxuZnMvamZzL2pmc19kdHJlZS5jOjQ0MjpcdFx0aXAtXHUwMDNlaV9zaXplICYjNDM7PSBQU0laRTtcbmZzL2pmcy9qZnNfZHRyZWUuYy00NDMtXG5mcy9qZnMvamZzX2R0cmVlLmMtNDQ0LVx0XHRpZiAoKG1wID0gZ2V0X2luZGV4X3BhZ2UoaXAsIGJsa25vKSkpXG5mcy9qZnMvamZzX2R0cmVlLmM6NDQ1Olx0XHRcdG1lbXNldChtcC1cdTAwM2VkYXRhLCAwLCBQU0laRSk7XHQvKiBKdXN0IGxvb2tzIGJldHRlciAqL1xuZnMvamZzL2pmc19kdHJlZS5jLTQ0Ni1cdFx0ZWxzZVxuLS1cbmZzL2pmcy9qZnNfZHRyZWUuYz05MjM9c3RhdGljIGludCBkdFNwbGl0VXAodGlkX3QgdGlkLFxuLS1cbmZzL2pmcy9qZnNfZHRyZWUuYy0xMDEzLVx0eHNpemUgPSB4bGVuIFx1MDAzY1x1MDAzYyBzYmktXHUwMDNlbDJic2l6ZTtcbmZzL2pmcy9qZnNfZHRyZWUuYzoxMDE0Olx0aWYgKHhzaXplIFx1MDAzYyBQU0laRSkge1xuZnMvamZzL2pmc19kdHJlZS5jLTEwMTUtXHRcdHhhZGRyID0gYWRkcmVzc1BYRChweGQpO1xuLS1cbmZzL2pmcy9qZnNfZHRyZWUuYy0xMDk2LVx0aWYgKCFET19JTkRFWChpcCkpXG5mcy9qZnMvamZzX2R0cmVlLmM6MTA5NzpcdFx0aXAtXHUwMDNlaV9zaXplICYjNDM7PSBQU0laRTtcbmZzL2pmcy9qZnNfZHRyZWUuYy0xMDk4LVxuLS1cbmZzL2pmcy9qZnNfZHRyZWUuYy0xMTMwLVx0XHQvKiBnZXQgdGhlIHBhcmVudCBwYWdlIFx1MDAzY3NwXHUwMDNlICovXG5mcy9qZnMvamZzX2R0cmVlLmM6MTEzMTpcdFx0RFRfR0VUUEFHRShpcCwgcGFyZW50LVx1MDAzZWJuLCBzbXAsIFBTSVpFLCBzcCwgcmMpO1xuZnMvamZzL2pmc19kdHJlZS5jLTExMzItXHRcdGlmIChyYykge1xuLS1cbmZzL2pmcy9qZnNfZHRyZWUuYz0xMzIzPXN0YXRpYyBpbnQgZHRTcGxpdFBhZ2UodGlkX3QgdGlkLCBzdHJ1Y3QgaW5vZGUgKmlwLCBzdHJ1Y3QgZHRzcGxpdCAqIHNwbGl0LFxuLS1cbmZzL2pmcy9qZnNfZHRyZWUuYy0xMzU5LVx0cmJuID0gYWRkcmVzc1BYRChweGQpO1xuZnMvamZzL2pmc19kdHJlZS5jOjEzNjA6XHRybXAgPSBnZXRfbWV0YXBhZ2UoaXAsIHJibiwgUFNJWkUsIDEpO1xuZnMvamZzL2pmc19kdHJlZS5jLTEzNjEtXHRpZiAocm1wID09IE5VTEwpXG4tLVxuZnMvamZzL2pmc19kdHJlZS5jLTE0MTYtXG5mcy9qZnMvamZzX2R0cmVlLmM6MTQxNzpcdG4gPSBQU0laRSBcdTAwM2VcdTAwM2UgTDJEVFNMT1RTSVpFO1xuZnMvamZzL2pmc19kdHJlZS5jLTE0MTgtXHRycC1cdTAwM2VoZWFkZXIubWF4c2xvdCA9IG47XG4tLVxuZnMvamZzL2pmc19kdHJlZS5jLTE0NjctXHRpZiAobmV4dGJuICE9IDApIHtcbmZzL2pmcy9qZnNfZHRyZWUuYzoxNDY4Olx0XHREVF9HRVRQQUdFKGlwLCBuZXh0Ym4sIG1wLCBQU0laRSwgcCwgcmMpO1xuZnMvamZzL2pmc19kdHJlZS5jLTE0NjktXHRcdGlmIChyYykge1xuLS1cbmZzL2pmcy9qZnNfZHRyZWUuYy0xNDk3LVx0c2tpcCA9IHNwbGl0LVx1MDAzZWluZGV4O1xuZnMvamZzL2pmc19kdHJlZS5jOjE0OTg6XHRoYWxmID0gKFBTSVpFIFx1MDAzZVx1MDAzZSBMMkRUU0xPVFNJWkUpIFx1MDAzZVx1MDAzZSAxO1x0Lyogc3dhZyAqL1xuZnMvamZzL2pmc19kdHJlZS5jLTE0OTktXHRsZWZ0ID0gMDtcbi0tXG5mcy9qZnMvamZzX2R0cmVlLmM9MTYzNT1zdGF0aWMgaW50IGR0RXh0ZW5kUGFnZSh0aWRfdCB0aWQsXG4tLVxuZnMvamZzL2pmc19kdHJlZS5jLTE2NjUtXHRwYXJlbnQgPSBCVF9QT1AoYnRzdGFjayk7XG5mcy9qZnMvamZzX2R0cmVlLmM6MTY2NjpcdERUX0dFVFBBR0UoaXAsIHBhcmVudC1cdTAwM2VibiwgcG1wLCBQU0laRSwgcHAsIHJjKTtcbmZzL2pmcy9qZnNfZHRyZWUuYy0xNjY3LVx0aWYgKHJjKVxuLS1cbmZzL2pmcy9qZnNfZHRyZWUuYz0yMDc1PWludCBkdERlbGV0ZSh0aWRfdCB0aWQsXG4tLVxuZnMvamZzL2pmc19kdHJlZS5jLTIxMjMtXHRcdFx0XHREVF9HRVRQQUdFKGlwLCBsZTY0X3RvX2NwdShwLVx1MDAzZWhlYWRlci5uZXh0KSxcbmZzL2pmcy9qZnNfZHRyZWUuYzoyMTI0Olx0XHRcdFx0XHQgICBubXAsIFBTSVpFLCBucCwgcmMpO1xuZnMvamZzL2pmc19kdHJlZS5jLTIxMjUtXHRcdFx0XHRpZiAocmMpXG4tLVxuZnMvamZzL2pmc19kdHJlZS5jPTIyMzA9c3RhdGljIGludCBkdERlbGV0ZVVwKHRpZF90IHRpZCwgc3RydWN0IGlub2RlICppcCxcbi0tXG5mcy9qZnMvamZzX2R0cmVlLmMtMjMwMC1cdFx0LyogcGluIHRoZSBwYXJlbnQgcGFnZSBcdTAwM2NzcFx1MDAzZSAqL1xuZnMvamZzL2pmc19kdHJlZS5jOjIzMDE6XHRcdERUX0dFVFBBR0UoaXAsIHBhcmVudC1cdTAwM2VibiwgbXAsIFBTSVpFLCBwLCByYyk7XG5mcy9qZnMvamZzX2R0cmVlLmMtMjMwMi1cdFx0aWYgKHJjKVxuLS1cbmZzL2pmcy9qZnNfZHRyZWUuYy0yNDI1LVx0aWYgKCFET19JTkRFWChpcCkpXG5mcy9qZnMvamZzX2R0cmVlLmM6MjQyNjpcdFx0aXAtXHUwMDNlaV9zaXplIC09IFBTSVpFO1xuZnMvamZzL2pmc19kdHJlZS5jLTI0MjctXG4tLVxuZnMvamZzL2pmc19kdHJlZS5jPTI0NDI9c3RhdGljIGludCBkdFJlbGluayh0aWRfdCB0aWQsIHN0cnVjdCBpbm9kZSAqaXAsIGR0cGFnZV90ICogcClcbi0tXG5mcy9qZnMvamZzX2R0cmVlLmMtMjQ1NS1cdGlmIChuZXh0Ym4gIT0gMCkge1xuZnMvamZzL2pmc19kdHJlZS5jOjI0NTY6XHRcdERUX0dFVFBBR0UoaXAsIG5leHRibiwgbXAsIFBTSVpFLCBwLCByYyk7XG5mcy9qZnMvamZzX2R0cmVlLmMtMjQ1Ny1cdFx0aWYgKHJjKVxuLS1cbmZzL2pmcy9qZnNfZHRyZWUuYy0yNDg0LVx0aWYgKHByZXZibiAhPSAwKSB7XG5mcy9qZnMvamZzX2R0cmVlLmM6MjQ4NTpcdFx0RFRfR0VUUEFHRShpcCwgcHJldmJuLCBtcCwgUFNJWkUsIHAsIHJjKTtcbmZzL2pmcy9qZnNfZHRyZWUuYy0yNDg2LVx0XHRpZiAocmMpXG4tLVxuZnMvamZzL2pmc19kdHJlZS5jPTI2MTM9c3RhdGljIGludCBhZGRfbWlzc2luZ19pbmRpY2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHM2NCBibilcbi0tXG5mcy9qZnMvamZzX2R0cmVlLmMtMjYyOC1cbmZzL2pmcy9qZnNfZHRyZWUuYzoyNjI5Olx0RFRfR0VUUEFHRShpbm9kZSwgYm4sIG1wLCBQU0laRSwgcCwgcmMpO1xuZnMvamZzL2pmc19kdHJlZS5jLTI2MzAtXG4tLVxuZnMvamZzL2pmc19kdHJlZS5jPTI3MTE9aW50IGpmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcbi0tXG5mcy9qZnMvamZzX2R0cmVlLmMtMjc5My1cdFx0XHRpbmRleCA9IGRpcnRhYl9zbG90LnNsb3Q7XG5mcy9qZnMvamZzX2R0cmVlLmM6Mjc5NDpcdFx0XHREVF9HRVRQQUdFKGlwLCBibiwgbXAsIFBTSVpFLCBwLCByYyk7XG5mcy9qZnMvamZzX2R0cmVlLmMtMjc5NS1cdFx0XHRpZiAocmMpIHtcbi0tXG5mcy9qZnMvamZzX2R0cmVlLmMtMzAzNy1cbmZzL2pmcy9qZnNfZHRyZWUuYzozMDM4Olx0XHREVF9HRVRQQUdFKGlwLCBibiwgbXAsIFBTSVpFLCBwLCByYyk7XG5mcy9qZnMvamZzX2R0cmVlLmMtMzAzOS1cdFx0aWYgKHJjKSB7XG4tLVxuZnMvamZzL2pmc19kdHJlZS5jPTMxMzY9c3RhdGljIGludCBkdFJlYWROZXh0KHN0cnVjdCBpbm9kZSAqaXAsIGxvZmZfdCAqIG9mZnNldCxcbi0tXG5mcy9qZnMvamZzX2R0cmVlLmMtMzIxOS1cdGJuID0gcGFyZW50LVx1MDAzZWJuO1xuZnMvamZzL2pmc19kdHJlZS5jOjMyMjA6XHREVF9HRVRQQUdFKGlwLCBibiwgbXAsIFBTSVpFLCBwLCByYyk7XG5mcy9qZnMvamZzX2R0cmVlLmMtMzIyMS1cdGlmIChyYylcbi0tXG5mcy9qZnMvamZzX2R0cmVlLmMtMzI0MC1cdFx0LyogZ2V0IG5leHQgcGFyZW50IHBhZ2UgKi9cbmZzL2pmcy9qZnNfZHRyZWUuYzozMjQxOlx0XHREVF9HRVRQQUdFKGlwLCBibiwgbXAsIFBTSVpFLCBwLCByYyk7XG5mcy9qZnMvamZzX2R0cmVlLmMtMzI0Mi1cdFx0aWYgKHJjKVxuLS1cbmZzL2pmcy9qZnNfZHRyZWUuYy0zMjYwLSAgICAgIGM6XG5mcy9qZnMvamZzX2R0cmVlLmM6MzI2MTpcdERUX0dFVFBBR0UoaXAsIGJuLCBtcCwgUFNJWkUsIHAsIHJjKTtcbmZzL2pmcy9qZnNfZHRyZWUuYy0zMjYyLVx0aWYgKHJjKVxuLS1cbmZzL2pmcy9qZnNfZHRyZWUuYy0zMjgxLVx0XHQvKiBnZXQgbmV4dCBsZWFmIHBhZ2UgKi9cbmZzL2pmcy9qZnNfZHRyZWUuYzozMjgyOlx0XHREVF9HRVRQQUdFKGlwLCBibiwgbXAsIFBTSVpFLCBwLCByYyk7XG5mcy9qZnMvamZzX2R0cmVlLmMtMzI4My1cdFx0aWYgKHJjKVxuLS1cbmZzL2pmcy9qZnNfZHRyZWUuYz00Mzg0PWJvb2wgY2hlY2tfZHRwYWdlKGR0cGFnZV90ICpwKVxuLS1cbmZzL2pmcy9qZnNfZHRyZWUuYy00Mzg2LVx0REVDTEFSRV9CSVRNQVAoYml0bWFwLCBEVFBBR0VNQVhTTE9UKSA9IHswfTtcbmZzL2pmcy9qZnNfZHRyZWUuYzo0Mzg3Olx0Y29uc3QgaW50IHN0YmxzaXplID0gKChQU0laRSBcdTAwM2VcdTAwM2UgTDJEVFNMT1RTSVpFKSAmIzQzOyAzMSkgXHUwMDNlXHUwMDNlIEwyRFRTTE9UU0laRTtcbmZzL2pmcy9qZnNfZHRyZWUuYy00Mzg4LVx0aW50IGk7XG4tLVxuZnMvamZzL2pmc19maWxzeXMuaC04MS0vKiBwYWdlIHNpemUgKi9cbmZzL2pmcy9qZnNfZmlsc3lzLmg6ODI6I2lmZGVmIFBTSVpFXG5mcy9qZnMvamZzX2ZpbHN5cy5oOjgzOiN1bmRlZiBQU0laRVxuZnMvamZzL2pmc19maWxzeXMuaC04NC0jZW5kaWZcbmZzL2pmcy9qZnNfZmlsc3lzLmg6ODU6I2RlZmluZVx0UFNJWkVcdFx0NDA5Nlx0LyogcGFnZSBzaXplIChpbiBieXRlKSAqL1xuZnMvamZzL2pmc19maWxzeXMuaDo4NjojZGVmaW5lXHRMMlBTSVpFXHRcdDEyXHQvKiBsb2cyKFBTSVpFKSAqL1xuZnMvamZzL2pmc19maWxzeXMuaC04Ny0jZGVmaW5lXHRQT0ZGU0VUXHRcdDQwOTVcdC8qIG9mZnNldCB3aXRoaW4gcGFnZSAqL1xuLS1cbmZzL2pmcy9qZnNfZmlsc3lzLmgtODktLyogYnVmZmVyIHBhZ2Ugc2l6ZSAqL1xuZnMvamZzL2pmc19maWxzeXMuaDo5MDojZGVmaW5lIEJQU0laRVx0UFNJWkVcbmZzL2pmcy9qZnNfZmlsc3lzLmgtOTEtXG4tLVxuZnMvamZzL2pmc19maWxzeXMuaC05NC0gKlxuZnMvamZzL2pmc19maWxzeXMuaDo5NTogKiBQU0laRSBcdTAwM2U9IGZpbGUgc3lzdGVtIGJsb2NrIHNpemUgXHUwMDNlPSBQQlNJWkUgXHUwMDNlPSBESVNJWkVcbmZzL2pmcy9qZnNfZmlsc3lzLmgtOTYtICovXG4tLVxuZnMvamZzL2pmc19maWxzeXMuaC0xNDQtLyogc2l6ZSBpbiBieXRlIC1cdTAwM2UgbGFzdCBwYWdlIG51bWJlciAqL1xuZnMvamZzL2pmc19maWxzeXMuaDoxNDU6I2RlZmluZVx0U0laRTJQTihzaXplKVx0KCAoKHM2NCkoKHNpemUpIC0gMSkpIFx1MDAzZVx1MDAzZSAoTDJQU0laRSkgKVxuZnMvamZzL2pmc19maWxzeXMuaC0xNDYtLyogc2l6ZSBpbiBieXRlIC1cdTAwM2UgbGFzdCBmaWxlIHN5c3RlbSBibG9jayBudW1iZXIgKi9cbi0tXG5mcy9qZnMvamZzX2ZpbHN5cy5oLTE2Ny0gKi9cbmZzL2pmcy9qZnNfZmlsc3lzLmg6MTY4OiNkZWZpbmUgU0laRV9PRl9TVVBFUlx0UFNJWkVcbmZzL2pmcy9qZnNfZmlsc3lzLmgtMTY5LVxuLS1cbmZzL2pmcy9qZnNfZmlsc3lzLmgtMTcyLSAqL1xuZnMvamZzL2pmc19maWxzeXMuaDoxNzM6I2RlZmluZSBTSVpFX09GX0FHX1RBQkxFXHRQU0laRVxuZnMvamZzL2pmc19maWxzeXMuaC0xNzQtXG4tLVxuZnMvamZzL2pmc19maWxzeXMuaC0xNzgtICovXG5mcy9qZnMvamZzX2ZpbHN5cy5oOjE3OTojZGVmaW5lIFNJWkVfT0ZfTUFQX1BBR0VcdFBTSVpFXG5mcy9qZnMvamZzX2ZpbHN5cy5oLTE4MC1cbi0tXG5mcy9qZnMvamZzX2ZpbHN5cy5oLTI1Ni0jZGVmaW5lIEpGU19OQU1FX01BWFx0MjU1XG5mcy9qZnMvamZzX2ZpbHN5cy5oOjI1NzojZGVmaW5lIEpGU19QQVRIX01BWFx0QlBTSVpFXG5mcy9qZnMvamZzX2ZpbHN5cy5oLTI1OC1cbi0tXG5mcy9qZnMvamZzX2ltYXAuYz05ND1pbnQgZGlNb3VudChzdHJ1Y3QgaW5vZGUgKmlwaW1hcClcbi0tXG5mcy9qZnMvamZzX2ltYXAuYy0xMTItXHRcdFx0ICAgSU1BUEJMS05PIFx1MDAzY1x1MDAzYyBKRlNfU0JJKGlwaW1hcC1cdTAwM2VpX3NiKS1cdTAwM2VsMm5icGVycGFnZSxcbmZzL2pmcy9qZnNfaW1hcC5jOjExMzpcdFx0XHQgICBQU0laRSwgMCk7XG5mcy9qZnMvamZzX2ltYXAuYy0xMTQtXHRpZiAobXAgPT0gTlVMTCkge1xuLS1cbmZzL2pmcy9qZnNfaW1hcC5jPTIwNT1pbnQgZGlTeW5jKHN0cnVjdCBpbm9kZSAqaXBpbWFwKVxuLS1cbmZzL2pmcy9qZnNfaW1hcC5jLTIxNy1cdFx0XHQgIElNQVBCTEtOTyBcdTAwM2NcdTAwM2MgSkZTX1NCSShpcGltYXAtXHUwMDNlaV9zYiktXHUwMDNlbDJuYnBlcnBhZ2UsXG5mcy9qZnMvamZzX2ltYXAuYzoyMTg6XHRcdFx0ICBQU0laRSwgMCk7XG5mcy9qZnMvamZzX2ltYXAuYy0yMTktXHRpZiAobXAgPT0gTlVMTCkge1xuLS1cbmZzL2pmcy9qZnNfaW1hcC5jPTI5MD1pbnQgZGlSZWFkKHN0cnVjdCBpbm9kZSAqaXApXG4tLVxuZnMvamZzL2pmc19pbWFwLmMtMzY2LVx0LyogcmVhZCB0aGUgcGFnZSBvZiBkaXNrIGlub2RlICovXG5mcy9qZnMvamZzX2ltYXAuYzozNjc6XHRtcCA9IHJlYWRfbWV0YXBhZ2UoaXBpbWFwLCBwYWdlbm8gXHUwMDNjXHUwMDNjIHNiaS1cdTAwM2VsMm5icGVycGFnZSwgUFNJWkUsIDEpO1xuZnMvamZzL2pmc19pbWFwLmMtMzY4LVx0aWYgKCFtcCkge1xuLS1cbmZzL2pmcy9qZnNfaW1hcC5jPTQxOD1zdHJ1Y3QgaW5vZGUgKmRpUmVhZFNwZWNpYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW5vX3QgaW51bSwgaW50IHNlY29uZGFyeSlcbi0tXG5mcy9qZnMvamZzX2ltYXAuYy00MzUtXHR9IGVsc2Uge1xuZnMvamZzL2pmc19pbWFwLmM6NDM2Olx0XHRhZGRyZXNzID0gQUlUQkxfT0ZGIFx1MDAzZVx1MDAzZSBMMlBTSVpFO1xuZnMvamZzL2pmc19pbWFwLmMtNDM3LVx0XHRKRlNfSVAoaXApLVx1MDAzZWlwaW1hcCA9IHNiaS1cdTAwM2VpcGFpbWFwO1xuLS1cbmZzL2pmcy9qZnNfaW1hcC5jLTQ0Ni1cdC8qIHJlYWQgdGhlIHBhZ2Ugb2YgZml4ZWQgZGlzayBpbm9kZSAoQUlUKSBpbiByYXcgbW9kZSAqL1xuZnMvamZzL2pmc19pbWFwLmM6NDQ3Olx0bXAgPSByZWFkX21ldGFwYWdlKGlwLCBhZGRyZXNzIFx1MDAzY1x1MDAzYyBzYmktXHUwMDNlbDJuYnBlcnBhZ2UsIFBTSVpFLCAxKTtcbmZzL2pmcy9qZnNfaW1hcC5jLTQ0OC1cdGlmIChtcCA9PSBOVUxMKSB7XG4tLVxuZnMvamZzL2pmc19pbWFwLmM9NTAwPXZvaWQgZGlXcml0ZVNwZWNpYWwoc3RydWN0IGlub2RlICppcCwgaW50IHNlY29uZGFyeSlcbi0tXG5mcy9qZnMvamZzX2ltYXAuYy01MTAtXHRlbHNlXG5mcy9qZnMvamZzX2ltYXAuYzo1MTE6XHRcdGFkZHJlc3MgPSBBSVRCTF9PRkYgXHUwMDNlXHUwMDNlIEwyUFNJWkU7XG5mcy9qZnMvamZzX2ltYXAuYy01MTItXG4tLVxuZnMvamZzL2pmc19pbWFwLmMtNTE3LVx0LyogcmVhZCB0aGUgcGFnZSBvZiBmaXhlZCBkaXNrIGlub2RlIChBSVQpIGluIHJhdyBtb2RlICovXG5mcy9qZnMvamZzX2ltYXAuYzo1MTg6XHRtcCA9IHJlYWRfbWV0YXBhZ2UoaXAsIGFkZHJlc3MgXHUwMDNjXHUwMDNjIHNiaS1cdTAwM2VsMm5icGVycGFnZSwgUFNJWkUsIDEpO1xuZnMvamZzL2pmc19pbWFwLmMtNTE5LVx0aWYgKG1wID09IE5VTEwpIHtcbi0tXG5mcy9qZnMvamZzX2ltYXAuYz01ODE9aW50IGRpV3JpdGUodGlkX3QgdGlkLCBzdHJ1Y3QgaW5vZGUgKmlwKVxuLS1cbmZzL2pmcy9qZnNfaW1hcC5jLTYzOC0gICAgICByZXRyeTpcbmZzL2pmcy9qZnNfaW1hcC5jOjYzOTpcdG1wID0gcmVhZF9tZXRhcGFnZShpcGltYXAsIHBhZ2VubyBcdTAwM2NcdTAwM2Mgc2JpLVx1MDAzZWwybmJwZXJwYWdlLCBQU0laRSwgMSk7XG5mcy9qZnMvamZzX2ltYXAuYy02NDAtXHRpZiAoIW1wKVxuLS1cbmZzL2pmcy9qZnNfaW1hcC5jPTIxNTU9c3RhdGljIGludCBkaU5ld0V4dChzdHJ1Y3QgaW5vbWFwICogaW1hcCwgc3RydWN0IGlhZyAqIGlhZ3AsIGludCBleHRubylcbi0tXG5mcy9qZnMvamZzX2ltYXAuYy0yMjc0LVx0XHQgKi9cbmZzL2pmcy9qZnNfaW1hcC5jOjIyNzU6XHRcdGRtcCA9IGdldF9tZXRhcGFnZShpcGltYXAsIGJsa25vICYjNDM7IGksIFBTSVpFLCAxKTtcbmZzL2pmcy9qZnNfaW1hcC5jLTIyNzYtXHRcdGlmIChkbXAgPT0gTlVMTCkge1xuLS1cbmZzL2pmcy9qZnNfaW1hcC5jPTI0NDA9ZGlOZXdJQUcoc3RydWN0IGlub21hcCAqIGltYXAsIGludCAqaWFnbm9wLCBpbnQgYWdubywgc3RydWN0IG1ldGFwYWdlICoqIG1wcClcbi0tXG5mcy9qZnMvamZzX2ltYXAuYy0yNDc4LVxuZnMvamZzL2pmc19pbWFwLmM6MjQ3OTpcdFx0aWYgKGlwaW1hcC1cdTAwM2VpX3NpemUgXHUwMDNlXHUwMDNlIEwyUFNJWkUgIT0gaW1hcC1cdTAwM2VpbV9uZXh0aWFnICYjNDM7IDEpIHtcbmZzL2pmcy9qZnNfaW1hcC5jLTI0ODAtXHRcdFx0SVdSSVRFX1VOTE9DSyhpcGltYXApO1xuLS1cbmZzL2pmcy9qZnNfaW1hcC5jLTI1NDAtXHRcdC8qIHVwZGF0ZSB0aGUgaW5vZGUgbWFwJiMzOTtzIGlub2RlIHRvIHJlZmxlY3QgdGhlIGV4dGVuc2lvbiAqL1xuZnMvamZzL2pmc19pbWFwLmM6MjU0MTpcdFx0aXBpbWFwLVx1MDAzZWlfc2l6ZSAmIzQzOz0gUFNJWkU7XG5mcy9qZnMvamZzX2ltYXAuYzoyNTQyOlx0XHRpbm9kZV9hZGRfYnl0ZXMoaXBpbWFwLCBQU0laRSk7XG5mcy9qZnMvamZzX2ltYXAuYy0yNTQzLVxuZnMvamZzL2pmc19pbWFwLmMtMjU0NC1cdFx0LyogYXNzaWduIGEgYnVmZmVyIGZvciB0aGUgcGFnZSAqL1xuZnMvamZzL2pmc19pbWFwLmM6MjU0NTpcdFx0bXAgPSBnZXRfbWV0YXBhZ2UoaXBpbWFwLCBibGtubywgUFNJWkUsIDApO1xuZnMvamZzL2pmc19pbWFwLmMtMjU0Ni1cdFx0aWYgKCFtcCkge1xuLS1cbmZzL2pmcy9qZnNfaW1hcC5jLTI1NTAtXHRcdFx0ICovXG5mcy9qZnMvamZzX2ltYXAuYzoyNTUxOlx0XHRcdHh0VHJ1bmNhdGUodGlkLCBpcGltYXAsIGlwaW1hcC1cdTAwM2VpX3NpemUgLSBQU0laRSxcbmZzL2pmcy9qZnNfaW1hcC5jLTI1NTItXHRcdFx0XHQgICBDT01NSVRfUFdNQVApO1xuLS1cbmZzL2pmcy9qZnNfaW1hcC5jPTI2NjM9c3RhdGljIGludCBkaUlBR1JlYWQoc3RydWN0IGlub21hcCAqIGltYXAsIGludCBpYWdubywgc3RydWN0IG1ldGFwYWdlICoqIG1wcClcbi0tXG5mcy9qZnMvamZzX2ltYXAuYy0yNjcxLVx0LyogcmVhZCB0aGUgaWFnLiAqL1xuZnMvamZzL2pmc19pbWFwLmM6MjY3MjpcdCptcHAgPSByZWFkX21ldGFwYWdlKGlwaW1hcCwgYmxrbm8sIFBTSVpFLCAwKTtcbmZzL2pmcy9qZnNfaW1hcC5jLTI2NzMtXHRpZiAoKm1wcCA9PSBOVUxMKSB7XG4tLVxuZnMvamZzL2pmc19pbWFwLmM9Mjk4Mj1zdGF0aWMgdm9pZCBkdXBsaWNhdGVJWHRyZWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgczY0IGJsa25vLFxuLS1cbmZzL2pmcy9qZnNfaW1hcC5jLTMwMTYtXHQvKiB1cGRhdGUgdGhlIGlub2RlIG1hcCYjMzk7cyBpbm9kZSB0byByZWZsZWN0IHRoZSBleHRlbnNpb24gKi9cbmZzL2pmcy9qZnNfaW1hcC5jOjMwMTc6XHRpcC1cdTAwM2VpX3NpemUgJiM0Mzs9IFBTSVpFO1xuZnMvamZzL2pmc19pbWFwLmM6MzAxODpcdGlub2RlX2FkZF9ieXRlcyhpcCwgUFNJWkUpO1xuZnMvamZzL2pmc19pbWFwLmMtMzAxOS1cdHR4Q29tbWl0KHRpZCwgMSwgXHUwMDI2aXAsIENPTU1JVF9GT1JDRSk7XG4tLVxuZnMvamZzL2pmc19pbWFwLmgtMjItXG5mcy9qZnMvamZzX2ltYXAuaDoyMzojZGVmaW5lIEFNQVBTSVpFXHQ1MTJcdC8qIGJ5dGVzIGluIHRoZSBJQUcgYWxsb2NhdGlvbiBtYXBzICovXG5mcy9qZnMvamZzX2ltYXAuaDoyNDojZGVmaW5lIFNNQVBTSVpFXHQxNlx0LyogYnl0ZXMgaW4gdGhlIElBRyBzdW1tYXJ5IG1hcHMgKi9cbmZzL2pmcy9qZnNfaW1hcC5oLTI1LVxuLS1cbmZzL2pmcy9qZnNfbG9nbWdyLmM9NzQ9c3RhdGljIERFRklORV9TUElOTE9DSyhsb2dfcmVkcml2ZV9sb2NrKTtcbi0tXG5mcy9qZnMvamZzX2xvZ21nci5jLTkwLSAqL1xuZnMvamZzL2pmc19sb2dtZ3IuYzo5MTojZGVmaW5lXHRMT0dTWU5DX0RFTFRBKGxvZ3NpemUpXHRcdG1pbigobG9nc2l6ZSkvOCwgMTI4KkxPR1BTSVpFKVxuZnMvamZzL2pmc19sb2dtZ3IuYy05Mi0jZGVmaW5lXHRMT0dTWU5DX0JBUlJJRVIobG9nc2l6ZSlcdCgobG9nc2l6ZSkvNClcbmZzL2pmcy9qZnNfbG9nbWdyLmMtOTMtLypcbmZzL2pmcy9qZnNfbG9nbWdyLmM6OTQ6I2RlZmluZVx0TE9HU1lOQ19ERUxUQShsb2dzaXplKVx0XHRtaW4oKGxvZ3NpemUpLzQsIDI1NipMT0dQU0laRSlcbmZzL2pmcy9qZnNfbG9nbWdyLmMtOTUtI2RlZmluZVx0TE9HU1lOQ19CQVJSSUVSKGxvZ3NpemUpXHQoKGxvZ3NpemUpLzIpXG4tLVxuZnMvamZzL2pmc19sb2dtZ3IuYz0zNDI9bG1Xcml0ZVJlY29yZChzdHJ1Y3QgamZzX2xvZyAqIGxvZywgc3RydWN0IHRibG9jayAqIHRibGssIHN0cnVjdCBscmQgKiBscmQsXG4tLVxuZnMvamZzL2pmc19sb2dtZ3IuYy00MDMtXHRcdC8qIGlzIHBhZ2UgZnVsbCA/ICovXG5mcy9qZnMvamZzX2xvZ21nci5jOjQwNDpcdFx0aWYgKGRzdG9mZnNldCBcdTAwM2U9IExPR1BTSVpFIC0gTE9HUFRMUlNJWkUpIHtcbmZzL2pmcy9qZnNfbG9nbWdyLmMtNDA1LVx0XHRcdC8qIHBhZ2UgYmVjb21lIGZ1bGw6IG1vdmUgb24gdG8gbmV4dCBwYWdlICovXG4tLVxuZnMvamZzL2pmc19sb2dtZ3IuYy00MTktXHRcdHdoaWxlIChzcmNsZW4gXHUwMDNlIDApIHtcbmZzL2pmcy9qZnNfbG9nbWdyLmM6NDIwOlx0XHRcdGZyZWVzcGFjZSA9IChMT0dQU0laRSAtIExPR1BUTFJTSVpFKSAtIGRzdG9mZnNldDtcbmZzL2pmcy9qZnNfbG9nbWdyLmMtNDIxLVx0XHRcdG5ieXRlcyA9IG1pbihmcmVlc3BhY2UsIHNyY2xlbik7XG4tLVxuZnMvamZzL2pmc19sb2dtZ3IuYy00MjYtXHRcdFx0LyogaXMgcGFnZSBub3QgZnVsbCA/ICovXG5mcy9qZnMvamZzX2xvZ21nci5jOjQyNzpcdFx0XHRpZiAoZHN0b2Zmc2V0IFx1MDAzYyBMT0dQU0laRSAtIExPR1BUTFJTSVpFKVxuZnMvamZzL2pmc19sb2dtZ3IuYy00MjgtXHRcdFx0XHRicmVhaztcbi0tXG5mcy9qZnMvamZzX2xvZ21nci5jLTQ2Ny1cdHdoaWxlIChzcmNsZW4gXHUwMDNlIDApIHtcbmZzL2pmcy9qZnNfbG9nbWdyLmM6NDY4Olx0XHRmcmVlc3BhY2UgPSAoTE9HUFNJWkUgLSBMT0dQVExSU0laRSkgLSBkc3RvZmZzZXQ7XG5mcy9qZnMvamZzX2xvZ21nci5jLTQ2OS1cdFx0bmJ5dGVzID0gbWluKGZyZWVzcGFjZSwgc3JjbGVuKTtcbi0tXG5mcy9qZnMvamZzX2xvZ21nci5jLTQ4Ni1cdFx0YnAtXHUwMDNlbF9lb3IgPSBkc3RvZmZzZXQ7XG5mcy9qZnMvamZzX2xvZ21nci5jOjQ4NzpcdFx0bHNuID0gKGxvZy1cdTAwM2VwYWdlIFx1MDAzY1x1MDAzYyBMMkxPR1BTSVpFKSAmIzQzOyBkc3RvZmZzZXQ7XG5mcy9qZnMvamZzX2xvZ21nci5jLTQ4OC1cbi0tXG5mcy9qZnMvamZzX2xvZ21nci5jLTUyMS1cdFx0LyogcGFnZSBub3QgZnVsbCA/ICovXG5mcy9qZnMvamZzX2xvZ21nci5jOjUyMjpcdFx0aWYgKGRzdG9mZnNldCBcdTAwM2MgTE9HUFNJWkUgLSBMT0dQVExSU0laRSlcbmZzL2pmcy9qZnNfbG9nbWdyLmMtNTIzLVx0XHRcdHJldHVybiBsc247XG4tLVxuZnMvamZzL2pmc19sb2dtZ3IuYz05MTk9c3RhdGljIGludCBsbUxvZ1N5bmMoc3RydWN0IGpmc19sb2cgKiBsb2csIGludCBoYXJkX3N5bmMpXG4tLVxuZnMvamZzL2pmc19sb2dtZ3IuYy05ODEtXHRtb3JlID0gbWluKGZyZWUgLyAyLCBkZWx0YSk7XG5mcy9qZnMvamZzX2xvZ21nci5jOjk4MjpcdGlmIChtb3JlIFx1MDAzYyAyICogTE9HUFNJWkUpIHtcbmZzL2pmcy9qZnNfbG9nbWdyLmMtOTgzLVx0XHRqZnNfd2FybihcJiMzNDtcXG4gLi4uIExvZyBXcmFwIC4uLiBMb2cgV3JhcCAuLi4gTG9nIFdyYXAgLi4uXFxuXCYjMzQ7KTtcbi0tXG5mcy9qZnMvamZzX2xvZ21nci5jPTExNTI9c3RhdGljIGludCBvcGVuX2lubGluZV9sb2coc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9qZnMvamZzX2xvZ21nci5jLTExNjUtXHRsb2ctXHUwMDNlc2l6ZSA9IGxlbmd0aFBYRChcdTAwMjZKRlNfU0JJKHNiKS1cdTAwM2Vsb2dweGQpIFx1MDAzZVx1MDAzZVxuZnMvamZzL2pmc19sb2dtZ3IuYzoxMTY2Olx0ICAgIChMMkxPR1BTSVpFIC0gc2ItXHUwMDNlc19ibG9ja3NpemVfYml0cyk7XG5mcy9qZnMvamZzX2xvZ21nci5jLTExNjctXHRsb2ctXHUwMDNlbDJic2l6ZSA9IHNiLVx1MDAzZXNfYmxvY2tzaXplX2JpdHM7XG5mcy9qZnMvamZzX2xvZ21nci5jOjExNjg6XHRBU1NFUlQoTDJMT0dQU0laRSBcdTAwM2U9IHNiLVx1MDAzZXNfYmxvY2tzaXplX2JpdHMpO1xuZnMvamZzL2pmc19sb2dtZ3IuYy0xMTY5LVxuLS1cbmZzL2pmcy9qZnNfbG9nbWdyLmM9MTIzNz1pbnQgbG1Mb2dJbml0KHN0cnVjdCBqZnNfbG9nICogbG9nKVxuLS1cbmZzL2pmcy9qZnNfbG9nbWdyLmMtMTI3MC1cdGlmICghdGVzdF9iaXQobG9nX0lOTElORUxPRywgXHUwMDI2bG9nLVx1MDAzZWZsYWcpKVxuZnMvamZzL2pmc19sb2dtZ3IuYzoxMjcxOlx0XHRsb2ctXHUwMDNlbDJic2l6ZSA9IEwyTE9HUFNJWkU7XG5mcy9qZnMvamZzX2xvZ21nci5jLTEyNzItXG4tLVxuZnMvamZzL2pmc19sb2dtZ3IuYy0xMzI0LVxuZnMvamZzL2pmc19sb2dtZ3IuYzoxMzI1Olx0XHRsb2ctXHUwMDNlcGFnZSA9IGxlMzJfdG9fY3B1KGxvZ3N1cGVyLVx1MDAzZWVuZCkgLyBMT0dQU0laRTtcbmZzL2pmcy9qZnNfbG9nbWdyLmM6MTMyNjpcdFx0bG9nLVx1MDAzZWVvciA9IGxlMzJfdG9fY3B1KGxvZ3N1cGVyLVx1MDAzZWVuZCkgLSAoTE9HUFNJWkUgKiBsb2ctXHUwMDNlcGFnZSk7XG5mcy9qZnMvamZzX2xvZ21nci5jLTEzMjctXG4tLVxuZnMvamZzL2pmc19sb2dtZ3IuYy0xMzQ1LVx0XHQvKiBpZiBjdXJyZW50IHBhZ2UgaXMgZnVsbCwgbW92ZSBvbiB0byBuZXh0IHBhZ2UgKi9cbmZzL2pmcy9qZnNfbG9nbWdyLmM6MTM0NjpcdFx0aWYgKGxvZy1cdTAwM2Vlb3IgXHUwMDNlPSBMT0dQU0laRSAtIExPR1BUTFJTSVpFKVxuZnMvamZzL2pmc19sb2dtZ3IuYy0xMzQ3LVx0XHRcdGxtTmV4dFBhZ2UobG9nKTtcbi0tXG5mcy9qZnMvamZzX2xvZ21nci5jLTEzODQtXHQvKiBpbml0aWFsaXplIGxvZ3N5bmMgcGFyYW1ldGVycyAqL1xuZnMvamZzL2pmc19sb2dtZ3IuYzoxMzg1Olx0bG9nLVx1MDAzZWxvZ3NpemUgPSAobG9nLVx1MDAzZXNpemUgLSAyKSBcdTAwM2NcdTAwM2MgTDJMT0dQU0laRTtcbmZzL2pmcy9qZnNfbG9nbWdyLmMtMTM4Ni1cdGxvZy1cdTAwM2Vsc24gPSBsc247XG4tLVxuZnMvamZzL2pmc19sb2dtZ3IuYz0xNzg0PXN0YXRpYyBpbnQgbGJtTG9nSW5pdChzdHJ1Y3QgamZzX2xvZyAqIGxvZylcbi0tXG5mcy9qZnMvamZzX2xvZ21nci5jLTE4MTctXHRcdGJ1ZmZlciA9IHBhZ2VfYWRkcmVzcyhwYWdlKTtcbmZzL2pmcy9qZnNfbG9nbWdyLmM6MTgxODpcdFx0Zm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgXHUwMDNjIFBBR0VfU0laRTsgb2Zmc2V0ICYjNDM7PSBMT0dQU0laRSkge1xuZnMvamZzL2pmc19sb2dtZ3IuYy0xODE5LVx0XHRcdGxidWYgPSBrbWFsbG9jX29iaihzdHJ1Y3QgbGJ1Zik7XG4tLVxuZnMvamZzL2pmc19sb2dtZ3IuYz0xODczPXN0YXRpYyBzdHJ1Y3QgbGJ1ZiAqbGJtQWxsb2NhdGUoc3RydWN0IGpmc19sb2cgKiBsb2csIGludCBwbilcbi0tXG5mcy9qZnMvamZzX2xvZ21nci5jLTE4OTEtXHRicC1cdTAwM2VsX3BuID0gcG47XG5mcy9qZnMvamZzX2xvZ21nci5jOjE4OTI6XHRicC1cdTAwM2VsX2Jsa25vID0gbG9nLVx1MDAzZWJhc2UgJiM0MzsgKHBuIFx1MDAzY1x1MDAzYyAoTDJMT0dQU0laRSAtIGxvZy1cdTAwM2VsMmJzaXplKSk7XG5mcy9qZnMvamZzX2xvZ21nci5jLTE4OTMtXHRicC1cdTAwM2VsX2Nlb3IgPSAwO1xuLS1cbmZzL2pmcy9qZnNfbG9nbWdyLmM9MTk1OT1zdGF0aWMgaW50IGxibVJlYWQoc3RydWN0IGpmc19sb2cgKiBsb2csIGludCBwbiwgc3RydWN0IGxidWYgKiogYnBwKVxuLS1cbmZzL2pmcy9qZnNfbG9nbWdyLmMtMTk3My1cdGJpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3RvciA9IGJwLVx1MDAzZWxfYmxrbm8gXHUwMDNjXHUwMDNjIChsb2ctXHUwMDNlbDJic2l6ZSAtIDkpO1xuZnMvamZzL2pmc19sb2dtZ3IuYzoxOTc0Olx0X19iaW9fYWRkX3BhZ2UoYmlvLCBicC1cdTAwM2VsX3BhZ2UsIExPR1BTSVpFLCBicC1cdTAwM2VsX29mZnNldCk7XG5mcy9qZnMvamZzX2xvZ21nci5jOjE5NzU6XHRCVUdfT04oYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSAhPSBMT0dQU0laRSk7XG5mcy9qZnMvamZzX2xvZ21nci5jLTE5NzYtXG4tLVxuZnMvamZzL2pmc19sb2dtZ3IuYz0yMDA4PXN0YXRpYyB2b2lkIGxibVdyaXRlKHN0cnVjdCBqZnNfbG9nICogbG9nLCBzdHJ1Y3QgbGJ1ZiAqIGJwLCBpbnQgZmxhZyxcbi0tXG5mcy9qZnMvamZzX2xvZ21nci5jLTIwMTctXHRicC1cdTAwM2VsX2Jsa25vID1cbmZzL2pmcy9qZnNfbG9nbWdyLmM6MjAxODpcdCAgICBsb2ctXHUwMDNlYmFzZSAmIzQzOyAoYnAtXHUwMDNlbF9wbiBcdTAwM2NcdTAwM2MgKEwyTE9HUFNJWkUgLSBsb2ctXHUwMDNlbDJic2l6ZSkpO1xuZnMvamZzL2pmc19sb2dtZ3IuYy0yMDE5LVxuLS1cbmZzL2pmcy9qZnNfbG9nbWdyLmM9MjA3Nj1zdGF0aWMgdm9pZCBsYm1EaXJlY3RXcml0ZShzdHJ1Y3QgamZzX2xvZyAqIGxvZywgc3RydWN0IGxidWYgKiBicCwgaW50IGZsYWcpXG4tLVxuZnMvamZzL2pmc19sb2dtZ3IuYy0yMDg3LVx0YnAtXHUwMDNlbF9ibGtubyA9XG5mcy9qZnMvamZzX2xvZ21nci5jOjIwODg6XHQgICAgbG9nLVx1MDAzZWJhc2UgJiM0MzsgKGJwLVx1MDAzZWxfcG4gXHUwMDNjXHUwMDNjIChMMkxPR1BTSVpFIC0gbG9nLVx1MDAzZWwyYnNpemUpKTtcbmZzL2pmcy9qZnNfbG9nbWdyLmMtMjA4OS1cbi0tXG5mcy9qZnMvamZzX2xvZ21nci5jPTIxMDY9c3RhdGljIHZvaWQgbGJtU3RhcnRJTyhzdHJ1Y3QgbGJ1ZiAqIGJwKVxuLS1cbmZzL2pmcy9qZnNfbG9nbWdyLmMtMjExOS1cdGJpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3RvciA9IGJwLVx1MDAzZWxfYmxrbm8gXHUwMDNjXHUwMDNjIChsb2ctXHUwMDNlbDJic2l6ZSAtIDkpO1xuZnMvamZzL2pmc19sb2dtZ3IuYzoyMTIwOlx0X19iaW9fYWRkX3BhZ2UoYmlvLCBicC1cdTAwM2VsX3BhZ2UsIExPR1BTSVpFLCBicC1cdTAwM2VsX29mZnNldCk7XG5mcy9qZnMvamZzX2xvZ21nci5jOjIxMjE6XHRCVUdfT04oYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSAhPSBMT0dQU0laRSk7XG5mcy9qZnMvamZzX2xvZ21nci5jLTIxMjItXG4tLVxuZnMvamZzL2pmc19sb2dtZ3IuYz0yMTY3PXN0YXRpYyB2b2lkIGxibUlPRG9uZShzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuZnMvamZzL2pmc19sb2dtZ3IuYy0yMjE3LVx0bG9nID0gYnAtXHUwMDNlbF9sb2c7XG5mcy9qZnMvamZzX2xvZ21nci5jOjIyMTg6XHRsb2ctXHUwMDNlY2xzbiA9IChicC1cdTAwM2VsX3BuIFx1MDAzY1x1MDAzYyBMMkxPR1BTSVpFKSAmIzQzOyBicC1cdTAwM2VsX2Nlb3I7XG5mcy9qZnMvamZzX2xvZ21nci5jLTIyMTktXG4tLVxuZnMvamZzL2pmc19sb2dtZ3IuYz0yMzQ5PWludCBsbUxvZ0Zvcm1hdChzdHJ1Y3QgamZzX2xvZyAqbG9nLCBzNjQgbG9nQWRkcmVzcywgaW50IGxvZ1NpemUpXG4tLVxuZnMvamZzL2pmc19sb2dtZ3IuYy0yMzkwLVx0bG9nc3VwZXItXHUwMDNlbDJic2l6ZSA9IGNwdV90b19sZTMyKHNiaS1cdTAwM2VsMmJzaXplKTtcbmZzL2pmcy9qZnNfbG9nbWdyLmM6MjM5MTpcdGxvZ3N1cGVyLVx1MDAzZWVuZCA9IGNwdV90b19sZTMyKDIgKiBMT0dQU0laRSAmIzQzOyBMT0dQSERSU0laRSAmIzQzOyBMT0dSRFNJWkUpO1xuZnMvamZzL2pmc19sb2dtZ3IuYy0yMzkyLVxuLS1cbmZzL2pmcy9qZnNfbG9nbWdyLmgtMTgtLyogbG9nIHBhZ2Ugc2l6ZSAqL1xuZnMvamZzL2pmc19sb2dtZ3IuaDoxOTojZGVmaW5lXHRMT0dQU0laRVx0NDA5NlxuZnMvamZzL2pmc19sb2dtZ3IuaDoyMDojZGVmaW5lXHRMMkxPR1BTSVpFXHQxMlxuZnMvamZzL2pmc19sb2dtZ3IuaC0yMS1cbi0tXG5mcy9qZnMvamZzX2xvZ21nci5oPTUzPXN0cnVjdCBsb2dzdXBlciB7XG4tLVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NDQyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEpGUyBNZXRhcGFnZSBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBKRlMgY29kZSBhbmQgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCBoYW5kbGVzIG1ldGFwYWdlcywgcGFydGljdWxhcmx5IGluIHJlbGF0aW9uIHRvIHRoZSBwYWdlIHNpemUuIFJpZ2h0LCBgUFNJWkVgIGlzIGRlZmluZWQgYXMgNDA5NiBpbiBgZnMvamZzL2pmc19maWxzeXMuaGAuIFRoYXQmIzM5O3MgYSBjb25zdGFudC4gSSBrbm93IGBQQUdFX1NJWkVgIG9uIHg4Nl82NCBpcyBhbHNvIDQwOTYuIFRodXMsIG9uIHg4Nl82NCBgUEFHRV9TSVpFID09IFBTSVpFYC4gVGhpcyBtZWFucyB0aGUgYCNpZiBQQUdFX1NJWkUgJmd0OyBQU0laRWAgaXMgZmFsc2UsIGFuZCB0aGVyZWZvcmUgdGhlIGAjZWxzZWAgYnJhbmNoIGNvbnRhaW5pbmcgdGhlIGBpbnNlcnRfbWV0YXBhZ2VgIGZ1bmN0aW9uIHdpbGwgYmUgdXNlZC4KCk5vdywgdGhhdCBgaW5zZXJ0X21ldGFwYWdlYCBmdW5jdGlvbiwgYXMgZGVmaW5lZCBpbiB0aGF0IGAjZWxzZWAgYmxvY2ssIGFsd2F5cyByZXR1cm5zIDAuIFNvLCB0aGUgYGlmIChyZXQpYCBjb25kaXRpb24gdGhhdCBmb2xsb3dzIHdvdWxkIG5ldmVyIGJlIHRydWUgb24geDg2XzY0LiBCdXQgSSYjMzk7dmUgc2VlbiBzeXpib3QgcmVwb3J0cyBmcm9tIHg4Nl82NCwgYXJtNjQsIGFuZCByaXNjdiwgc28gdGhpcyBzZWVtcyB0byBiZSBtb3JlIGNvbXBsZXguCgpBaCwgb24gYXJtNjQsIGl0JiMzOTtzIHBvc3NpYmxlIGZvciBgUEFHRV9TSVpFYCB0byBiZSA2NEssIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiBgUFNJWkVgLiBTbywgaWYgYFBBR0VfU0laRWAgaXMgNjRLLCB0aGUgYCNpZmAgY29uZGl0aW9uIGlzIHRydWUuIFRoYXQgbWVhbnMgdGhlICpvdGhlciogZGVmaW5pdGlvbiBvZiBgaW5zZXJ0X21ldGFwYWdlYCBpcyB1c2VkIOKAkyB0aGUgb25lIHRoYXQgKmNhbiogcmV0dXJuIGAtRU5PTUVNYC4gVGhhdCBtYWtlcyBzZW5zZS4gVGhlIGBtZXRhcGFnZV9yZWFkX2ZvbGlvYCBmdW5jdGlvbiBzZWVtcyB0byBiZSByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgdGhlIGVycm9yIHdoZW4gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMuCgpIYW5nIG9uIGEgc2VjLi4uaXMgdGhhdCB0aGUgb25seSBjb25kaXRpb24/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgUEFHRV9TSVpFICZndDsgUFNJWkVgIGlzIHRoZSBhY3R1YWwgZ292ZXJuaW5nIGZhY3Rvci4gSSBuZWVkIHRvIGxvb2sgaW4gYGZzL2pmcy9qZnNfbWV0YXBhZ2UuY2AgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQQUdFX1NJWkUgXHUwMDNlIFBTSVpFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvamZzL2pmc19tZXRhcGFnZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkyNjQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqUHJpb3JpdGl6aW5nIENvbmRpdGlvbmFsIExvZ2ljIGluIE1ldGFwYWdlIEluc2VydGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGFib3V0IHRvIGNhbGwgYGluc2VydF9tZXRhcGFnZWAsIGJ1dCBiZWZvcmUgSSBkbywgSSByZWFsbHkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgI2lmYCBjb25kaXRpb24uIEl0JiMzOTtzIHRoZSBnYXRla2VlcGVyLCByaWdodD8gV2UgY2FuJiMzOTt0IGp1c3QgYmxpbmRseSBpbnNlcnQgdGhlIG1ldGFwYWdlIGlmIGl0JiMzOTtzIG5vdCB3YXJyYW50ZWQuIFRoYXQgY29uZGl0aW9uIGxpa2VseSBlbmNhcHN1bGF0ZXMgc29tZSBjcnVjaWFsIGxvZ2ljLCBwZXJoYXBzIHJlbGF0ZWQgdG8gdGhlIGNvbnRleHQsIHN0YXRlLCBvciBldmVuIGRhdGEgdmFsaWRpdHkuIElnbm9yaW5nIGl0IGNvdWxkIGxlYWQgdG8gYWxsIHNvcnRzIG9mIGlzc3VlcyDigJMgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24sIGluY29ycmVjdCBkYXRhIHN0cnVjdHVyZXMsIG9yIGV2ZW4gb3V0cmlnaHQgZXJyb3JzLiBXZSYjMzk7dmUgc2VlbiB0aGlzIGhhcHBlbiBiZWZvcmUuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCBjb25kaXRpb24gaXMgKnRydWUqIGFuZCB0aGF0IGl0IHN0aWxsIGhvbGRzIHZhbGlkIHVuZGVyIHRoZSBwcmV2YWlsaW5nIGNvbmRpdGlvbnMuIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJlLWV2YWx1YXRlIHRoYXQgYCNpZmAgc3RhdGVtZW50IGp1c3QgdG8gYmUgc3VyZS4gSSYjMzk7bGwgZXZlbiBjb25zaWRlciBhIGZldyBlZGdlIGNhc2VzIGluIG15IGhlYWQgYXMgYSBzYW5pdHkgY2hlY2suIE5vIHNlbnNlIHRha2luZyBzaG9ydGN1dHMgaGVyZS4gVGhpcyBjcml0aWNhbCBiaXQgb2YgY29uZGl0aW9uYWwgbG9naWMgZGV0ZXJtaW5lcyB0aGUgZW50aXJlIGluc2VydGlvbiBwYXRoLiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjaWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9qZnMvamZzX21ldGFwYWdlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvamZzL2pmc19tZXRhcGFnZS5jLTI1LVxuZnMvamZzL2pmc19tZXRhcGFnZS5jOjI2OiNpZmRlZiBDT05GSUdfSkZTX1NUQVRJU1RJQ1NcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy0yNy1zdGF0aWMgc3RydWN0IHtcbi0tXG5mcy9qZnMvamZzX21ldGFwYWdlLmM9NzE9c3RhdGljIG1lbXBvb2xfdCAqbWV0YXBhZ2VfbWVtcG9vbDtcbi0tXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtNzQtXG5mcy9qZnMvamZzX21ldGFwYWdlLmM6NzU6I2lmIE1QU19QRVJfUEFHRSBcdTAwM2UgMVxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTc2LVxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYz0xNDM9c3RhdGljIGlubGluZSB2b2lkIGRlY19pbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBibGtfc3RhdHVzX3Qgc3RhdHVzLFxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy0xNTQtXG5mcy9qZnMvamZzX21ldGFwYWdlLmM6MTU1OiNpZmRlZiBDT05GSUdfTUlHUkFUSU9OXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtMTU2LXN0YXRpYyBpbnQgX19tZXRhcGFnZV9taWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYz0yMjI9c3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9tZXRhcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWV0YXBhZ2UgKm1wKVxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy0yMzAtXG5mcy9qZnMvamZzX21ldGFwYWdlLmM6MjMxOiNpZmRlZiBDT05GSUdfTUlHUkFUSU9OXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtMjMyLXN0YXRpYyBpbnQgX19tZXRhcGFnZV9taWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYz02MTc9c3RhdGljIGJvb2wgbWV0YXBhZ2VfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnBfbWFzaylcbi0tXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtNjQ1LVxuZnMvamZzL2pmc19tZXRhcGFnZS5jOjY0NjojaWZkZWYgQ09ORklHX01JR1JBVElPTlxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTY0Ny0vKlxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYz05MDM9dm9pZCBfX2ludmFsaWRhdGVfbWV0YXBhZ2VzKHN0cnVjdCBpbm9kZSAqaXAsIHM2NCBhZGRyLCBpbnQgbGVuKVxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy05NDItXG5mcy9qZnMvamZzX21ldGFwYWdlLmM6OTQzOiNpZmRlZiBDT05GSUdfSkZTX1NUQVRJU1RJQ1NcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy05NDQtaW50IGpmc19tcHN0YXRfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAyMDQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIGFuZCBhIFBvdGVudGlhbCBQYWdlLUxldmVsIE9wdGltaXphdGlvbioqCgpBaCwgYSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmUhIGAjaWYgTVBTX1BFUl9QQUdFICZndDsgMWAuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIGZvciBtZW1vcnkgcGFnZSBtYW5hZ2VtZW50LiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7T2theSwgbGV0JiMzOTtzIHVucGFjayB0aGlzIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiYjMzQ7IE15IGltbWVkaWF0ZSB0YXNrIGlzIHRvIGRldGVybWluZSB0aGUgY3VycmVudCB2YWx1ZSBvZiBgTVBTX1BFUl9QQUdFYC4gSXMgdGhpcyB2YXJpYWJsZSBkZWZpbmVkPyBXaGF0IHZhbHVlIGlzIGl0IHNldCB0bz8gV2hhdCBpcyB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJsb2NrPyBJcyBpdCByZWxhdGVkIHRvIGEgc3BlY2lmaWMgaGFyZHdhcmUgY29uZmlndXJhdGlvbiwgYSBwYXJ0aWN1bGFyIG1lbW9yeSBhbGxvY2F0b3Igc3RyYXRlZ3ksIG9yIHBlcmhhcHMgYSB0cmFkZS1vZmYgYmV0d2VlbiBtZW1vcnkgdXRpbGl6YXRpb24gYW5kIGNhY2hlIGVmZmljaWVuY3k/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBjb25kaXRpb25hbCBpcyBnYXRpbmcuIElzIGBNUFNfUEVSX1BBR0VgIHJlcHJlc2VudGF0aXZlIG9mIE11bHRpIFByb2Nlc3NpbmcgcGVyIFBhZ2U/IFRoaXMgdmFsdWUgY291bGQgcHJvdmlkZSBkaWZmZXJlbnQgcGVyZm9ybWFuY2UgZGVwZW5kaW5nIG9uIHN5c3RlbSBwYXJhbWV0ZXJzLiBHZXR0aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIGZsYWcgZmlyc3QgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBmb2xsb3dpbmcgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TVBTX1BFUl9QQUdFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvamZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9qZnMvamZzX21ldGFwYWdlLmM9NzE9c3RhdGljIG1lbXBvb2xfdCAqbWV0YXBhZ2VfbWVtcG9vbDtcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy03Mi1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzo3MzojZGVmaW5lIE1QU19QRVJfUEFHRSAoUEFHRV9TSVpFIFx1MDAzZVx1MDAzZSBMMlBTSVpFKVxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTc0LVxuZnMvamZzL2pmc19tZXRhcGFnZS5jOjc1OiNpZiBNUFNfUEVSX1BBR0UgXHUwMDNlIDFcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy03Ni1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYz03Nz1zdHJ1Y3QgbWV0YV9hbmNob3Ige1xuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy04MC1cdGJsa19zdGF0dXNfdCBzdGF0dXM7XG5mcy9qZnMvamZzX21ldGFwYWdlLmM6ODE6XHRzdHJ1Y3QgbWV0YXBhZ2UgKm1wW01QU19QRVJfUEFHRV07XG5mcy9qZnMvamZzX21ldGFwYWdlLmMtODItfTtcbi0tXG5mcy9qZnMvamZzX21ldGFwYWdlLmM9OTM9c3RhdGljIGlubGluZSBpbnQgaW5zZXJ0X21ldGFwYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZXRhcGFnZSAqbXApXG4tLVxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTEwOS1cdFx0bDJtcF9ibG9ja3MgPSBMMlBTSVpFIC0gZm9saW8tXHUwMDNlbWFwcGluZy1cdTAwM2Vob3N0LVx1MDAzZWlfYmxrYml0cztcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzoxMTA6XHRcdGluZGV4ID0gKG1wLVx1MDAzZWluZGV4IFx1MDAzZVx1MDAzZSBsMm1wX2Jsb2NrcykgXHUwMDI2IChNUFNfUEVSX1BBR0UgLSAxKTtcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy0xMTEtXHRcdGEtXHUwMDNlbXBfY291bnQmIzQzOyYjNDM7O1xuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYz0xMTg9c3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9tZXRhcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWV0YXBhZ2UgKm1wKVxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy0xMjMtXG5mcy9qZnMvamZzX21ldGFwYWdlLmM6MTI0Olx0aW5kZXggPSAobXAtXHUwMDNlaW5kZXggXHUwMDNlXHUwMDNlIGwybXBfYmxvY2tzKSBcdTAwMjYgKE1QU19QRVJfUEFHRSAtIDEpO1xuZnMvamZzL2pmc19tZXRhcGFnZS5jLTEyNS1cbi0tXG5mcy9qZnMvamZzX21ldGFwYWdlLmM9MTU2PXN0YXRpYyBpbnQgX19tZXRhcGFnZV9taWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy0xNjAtXHRzdHJ1Y3QgbWV0YV9hbmNob3IgKnNyY19hbmNob3IgPSBzcmMtXHUwMDNlcHJpdmF0ZTtcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzoxNjE6XHRzdHJ1Y3QgbWV0YXBhZ2UgKm1wc1tNUFNfUEVSX1BBR0VdID0gezB9O1xuZnMvamZzL2pmc19tZXRhcGFnZS5jLTE2Mi1cdHN0cnVjdCBtZXRhcGFnZSAqbXA7XG4tLVxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTE2NC1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzoxNjU6XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNUFNfUEVSX1BBR0U7IGkmIzQzOyYjNDM7KSB7XG5mcy9qZnMvamZzX21ldGFwYWdlLmMtMTY2LVx0XHRtcCA9IHNyY19hbmNob3ItXHUwMDNlbXBbaV07XG4tLVxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTE3NC1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzoxNzU6XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNUFNfUEVSX1BBR0U7IGkmIzQzOyYjNDM7KSB7XG5mcy9qZnMvamZzX21ldGFwYWdlLmMtMTc2LVx0XHRtcCA9IHNyY19hbmNob3ItXHUwMDNlbXBbaV07XG4tLVxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTE5MC1cdC8qIFVwZGF0ZSB0aGUgbWV0YXBhZ2UgYW5kIHJlbW92ZSBpdCBmcm9tIHNyYyAqL1xuZnMvamZzL2pmc19tZXRhcGFnZS5jOjE5MTpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1QU19QRVJfUEFHRTsgaSYjNDM7JiM0MzspIHtcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy0xOTItXHRcdG1wID0gbXBzW2ldO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTQxOQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDY1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgSkZTIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGF0IGBNUFNfUEVSX1BBR0VgIGlzIGRldGVybWluZWQgYnkgYFBBR0VfU0laRWAgYW5kIGBMMlBTSVpFYCwgd2hpY2ggaXMgYSBjb25zdGFudCAxMiwgcmVwcmVzZW50aW5nIDQwOTYgYnl0ZXMgKDJeMTIpLiBTbywgb24geDg2XzY0LCBgUEFHRV9TSVpFYCBpcyBhbHNvIDQwOTYsIG1lYW5pbmcgYE1QU19QRVJfUEFHRWAgaXMgMS4gVGhpcyBtZWFucyB0aGUgYCNpZiBNUFNfUEVSX1BBR0UgJmd0OyAxYCBjb25kaXRpb24gaXMgZmFsc2Ugb24geDg2XzY0LgoKQ29uc2VxdWVudGx5LCBgaW5zZXJ0X21ldGFwYWdlYCBhbHdheXMgcmV0dXJucyAwIG9uIHg4Nl82NCBiZWNhdXNlIHRoZSBjb2RlIGJsb2NrIGluc2lkZSB0aGUgYGlmYCBzdGF0ZW1lbnQgaXMgbmV2ZXIgZXhlY3V0ZWQuIFRoaXMgaW5pdGlhbGx5IG1hZGUgbWUgdGhpbmsgdGhlIHBhdGNoIGhhZCBubyBmdW5jdGlvbmFsIGltcGFjdCBvbiB4ODZfNjQuCgpIb3dldmVyLCBJIGltbWVkaWF0ZWx5IHRob3VnaHQsIGhhbmcgb24sIHRoaXMgKmRvZXMqIGFmZmVjdCBhcmNoaXRlY3R1cmVzIGxpa2UgYXJtNjQsIGFuZCBwb3RlbnRpYWxseSBwcGM2NCwgd2hlcmUgYFBBR0VfU0laRWAgY2FuIGJlIHNpZ25pZmljYW50bHkgbGFyZ2VyLCBmb3IgZXhhbXBsZSA2NEsuIFRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMsIGlzIHRoaXMgd29ydGggZnV6emluZz8gU3l6Ym90IGRvZXMgcnVuIG9uIGFybTY0IGFuZCByaXNjdjY0LgoKQnV0LCBkb2VzIGl0PyBNeSBtZW1vcnkgdGVsbHMgbWUgaXQgaGFzIGFybTY0IGluc3RhbmNlcyBhbmQgdGhlcmVmb3JlIGl0ICppcyogd29ydGggZnV6emluZy4gQnV0IGV2ZW4gaWYgaXQgd2FzIGp1c3QgYXJtNjQsIGl0JiMzOTtzIHN0aWxsIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGtlcm5lbC4KCk5vdywgbGV0IG1lIGdvIGRlZXBlci4gSXMgdGhlcmUgYW55IHdheSBgaW5zZXJ0X21ldGFwYWdlYCBjYW4gZmFpbCBvbiB4ODZfNjQ/IE5vLCBpdCBsb29rcyBsaWtlIGl0IGp1c3QgYXR0YWNoZXMgYSBgbWV0YXBhZ2VgIHRvIGEgYGZvbGlvYCBhbmQgbWFwcyBpdC4KCmBgYGMKc3RhdGljIGlubGluZSBpbnQgaW5zZXJ0X21ldGFwYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZXRhcGFnZSAqbXApCnsKCWlmIChtcCkgewoJCWZvbGlvX2F0dGFjaF9wcml2YXRlKGZvbGlvLCBtcCk7CgkJa21hcCgmYW1wO2ZvbGlvLSZndDtwYWdlKTsKCX0KCXJldHVybiAwOwp9CmBgYAoKV2FpdCwgYGZvbGlvX2F0dGFjaF9wcml2YXRlYCBkb2VzbiYjMzk7dCByZXR1cm4gYW55dGhpbmcuIFRoZXJlZm9yZSwgaXQgbmV2ZXIgZmFpbHMgb24geDg2XzY0LgoKT24gdGhlIG90aGVyIGhhbmQsIGFybTY0IHdpdGggNjRLIHBhZ2VzIGNoYW5nZXMgdGhlIGdhbWUuIEhlcmUsIGBNUFNfUEVSX1BBR0VgIGlzIDE2LiBgaW5zZXJ0X21ldGFwYWdlYCB0aGVuIGFsbG9jYXRlcyBhIGBzdHJ1Y3QgbWV0YV9hbmNob3JgIHVzaW5nIGBremFsbG9jX29iamAsIHdoaWNoIGNhbiByZXR1cm4gYC1FTk9NRU1gLiBUaGUgcGF0Y2ggY29ycmVjdGx5IGhhbmRsZXMgdGhpcyBgLUVOT01FTWAgY2FzZSwgYnJlYWtpbmcgb3V0IG9mIHRoZSBsb29wIGFuZCByZXR1cm5pbmcgdGhlIGVycm9yLiBDcnVjaWFsbHksIGJlZm9yZSB0aGUgcGF0Y2gsIHRoaXMgZXJyb3Igd2FzIGlnbm9yZWQsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3Igb3RoZXIgc3VidGxlIGJ1Z3MgbGF0ZXIgb24uIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGJ1ZyBmaXguCgpOZXh0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBJdCBhcHBlYXJzIEpGU19GUyBpcyB0aGUgb25seSBvbmUgcmVxdWlyZWQuIEkgc2hvdWxkIGZvY3VzIG9uIHRoZSBzeW1ib2xzIGBqZnNfZmlsbF9zdXBlcmAsIGBfX2dldF9tZXRhcGFnZWAsIGBkaVJlYWRgLCBgZGlXcml0ZWAsIGBkYk1vdW50YCwgYW5kIGBlYV9nZXRgLgoKRmluYWxseSwgaXMgYG1ldGFwYWdlX3JlYWRfZm9saW9gIHJlYWNoYWJsZSBvbiB4ODZfNjQ/IFllcywgaXQgaXMuIEJ1dCwgdGhlIGVycm9yIHBhdGggaXMgb25seSByZWFjaGFibGUgb24gYXJjaGl0ZWN0dXJlcyB3aXRoIGBQQUdFX1NJWkUgJmd0OyA0MDk2YC4gU3RpbGwsIHRoZSBwcmVzZW5jZSBvZiBhcm02NCBpbiBzeXpib3QgdGVzdGluZyBtYWtlcyBmdXp6aW5nIHdvcnRod2hpbGUuIEJlc2lkZXMgdGhhdCwgdGhlIHBhdGNoIGZpeGVzIGNvcmUgSkZTIGxvZ2ljLgoKV2FpdCwgc2hvdWxkIEkgY2hlY2sgaWYgYGluc2VydF9tZXRhcGFnZWAgaXMgY2FsbGVkIGFueXdoZXJlIGVsc2U/IEkgd2lsbCBsb29rIGZvciBvdGhlciBjYWxsIHNpdGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnNlcnRfbWV0YXBhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9qZnMvamZzX21ldGFwYWdlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvamZzL2pmc19tZXRhcGFnZS5jPTg0PXN0YXRpYyBpbmxpbmUgc3RydWN0IG1ldGFwYWdlICpmb2xpb190b19tcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2Zmc2V0KVxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy05Mi1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzo5MzpzdGF0aWMgaW5saW5lIGludCBpbnNlcnRfbWV0YXBhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1ldGFwYWdlICptcClcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy05NC17XG4tLVxuZnMvamZzL2pmc19tZXRhcGFnZS5jPTE1Nj1zdGF0aWMgaW50IF9fbWV0YXBhZ2VfbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtMTc4LVx0XHRcdGNvbnRpbnVlO1xuZnMvamZzL2pmc19tZXRhcGFnZS5jOjE3OTpcdFx0aWYgKHVubGlrZWx5KGluc2VydF9tZXRhcGFnZShkc3QsIG1wKSkpIHtcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy0xODAtXHRcdFx0LyogSWYgZXJyb3IsIHJvbGwtYmFjayBwcmV2aW9zbHkgaW5zZXJ0ZWQgcGFnZXMgKi9cbi0tXG5mcy9qZnMvamZzX21ldGFwYWdlLmM9MjA4PXN0YXRpYyBpbmxpbmUgc3RydWN0IG1ldGFwYWdlICpmb2xpb190b19tcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2Zmc2V0KVxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy0yMTItXG5mcy9qZnMvamZzX21ldGFwYWdlLmM6MjEzOnN0YXRpYyBpbmxpbmUgaW50IGluc2VydF9tZXRhcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWV0YXBhZ2UgKm1wKVxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTIxNC17XG4tLVxuZnMvamZzL2pmc19tZXRhcGFnZS5jPTIzMj1zdGF0aWMgaW50IF9fbWV0YXBhZ2VfbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtMjQ3LVxuZnMvamZzL2pmc19tZXRhcGFnZS5jOjI0ODpcdGlmICh1bmxpa2VseShpbnNlcnRfbWV0YXBhZ2UoZHN0LCBtcCkpKVxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTI0OS1cdFx0cmV0dXJuIC1FQUdBSU47XG4tLVxuZnMvamZzL2pmc19tZXRhcGFnZS5jPTU2NT1zdGF0aWMgaW50IG1ldGFwYWdlX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy01ODctXHRcdFx0aWYgKCFmb2xpby1cdTAwM2Vwcml2YXRlKSB7XG5mcy9qZnMvamZzX21ldGFwYWdlLmM6NTg4Olx0XHRcdFx0cmV0ID0gaW5zZXJ0X21ldGFwYWdlKGZvbGlvLCBOVUxMKTtcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy01ODktXHRcdFx0XHRpZiAocmV0KVxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYz02ODg9c3RydWN0IG1ldGFwYWdlICpfX2dldF9tZXRhcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBsb25nIGxibG9jayxcbi0tXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtNzc2LVx0XHRtcC1cdTAwM2VpbmRleCA9IGxibG9jaztcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzo3Nzc6XHRcdGlmICh1bmxpa2VseShpbnNlcnRfbWV0YXBhZ2UoZm9saW8sIG1wKSkpIHtcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy03NzgtXHRcdFx0ZnJlZV9tZXRhcGFnZShtcCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNjEzCgkJCQkJCQlvdXRwdXQ6IDE1OQoJCQkJCQkJdGhvdWdodHM6IDE1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGaXhpbmcgYSBNZXRhcGFnZSBFcnJvciBhbmQgQ2hlY2tpbmcgQ29uZmlndXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgYW4gZXJyb3IgaGFuZGxpbmcgaXNzdWUgd2l0aGluIHRoZSBtZXRhcGFnZSBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBlcnJvciBpcyB0cmlnZ2VyZWQgd2l0aGluIHRoZSBgX19nZXRfbWV0YXBhZ2VgIGFuZCBgX19tZXRhcGFnZV9taWdyYXRlX2ZvbGlvYCBmdW5jdGlvbnMuIEkgc2VlIHRoYXQgYF9fZ2V0X21ldGFwYWdlYCBhbHJlYWR5IGhhcyBhIGdvb2QgZXJyb3IgaGFuZGxpbmcgbWVjaGFuaXNtIGluIHBsYWNlIHVzaW5nIHRoaXMgYGluc2VydF9tZXRhcGFnZWAgY2FsbCBhbmQgdGhlIHN1YnNlcXVlbnQgY2xlYW51cCB1c2luZyBgZnJlZV9tZXRhcGFnZWAsIHdoaWNoIGlzIGdvb2QgdG8gc2VlLgoKVGhlIGlzc3VlIGxpZXMgaW4gYG1ldGFwYWdlX3JlYWRfZm9saW9gLCB0aG91Z2guIFRoZSBjb2RlIHdhc24mIzM5O3QgcHJvcGVybHkgY2hlY2tpbmcgdGhlIHJlc3VsdCBvZiBwb3RlbnRpYWxseSBmYWlsaW5nIG9wZXJhdGlvbnMgdGhlcmUsIGFuZCB0aGUgcGF0Y2ggZml4ZXMgdGhpcy4gVGhhdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBidXQgaW1wb3J0YW50IGNvcnJlY3Rpb24uCgpOb3csIGxldCYjMzk7cyBqdXN0IGRvIGEgcXVpY2sgc2NhbiB0byBtYWtlIHN1cmUgdGhpcyBmaXggZG9lc24mIzM5O3QgaW50ZXJhY3Qgd2l0aCBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgaW4gYSBwb3RlbnRpYWxseSB1bmV4cGVjdGVkIHdheS4gSSYjMzk7bGwgY2hlY2sgdG8gc2VlIGlmIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyBtaWdodCBiZSBhdCBwbGF5IGhlcmUuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19KRlNfRlNgIGlzIHRoZSBwcmltYXJ5IG9uZSB0aGF0IGNvbWVzIHRvIG1pbmQsIGFuZCBJIGNhbiYjMzk7dCBzcG90IGFueSBvdGhlcnMgYXQgYSBxdWljayBnbGFuY2UsIHNvIEkgdGhpbmsgd2UmIzM5O3JlIHNhZmUuCgpBbHJpZ2h0LCBJJiMzOTttIHNhdGlzZmllZCB0aGF0IHRoaXMgaXMgYSB2YWxpZCBhbmQgdGFyZ2V0ZWQgZml4LiBUaW1lIHRvIHNldCB0aGUgcmVzdWx0cyBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0pGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2pmc19maWxsX3N1cGVyJiMzNDssCiAgICAmIzM0O19fZ2V0X21ldGFwYWdlJiMzNDssCiAgICAmIzM0O2RpUmVhZCYjMzQ7LAogICAgJiMzNDtkaVdyaXRlJiMzNDssCiAgICAmIzM0O2RiTW91bnQmIzM0OywKICAgICYjMzQ7ZWFfZ2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBtZXRhcGFnZV9yZWFkX2ZvbGlvYCBpbiB0aGUgSkZTIGZpbGVzeXN0ZW0gdG8gcHJvcGVybHkgaGFuZGxlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIGZyb20gYGluc2VydF9tZXRhcGFnZWAuIFRoaXMgZXJyb3IgcGF0aCBpcyByZWFjaGFibGUgb24gYXJjaGl0ZWN0dXJlcyB3aGVyZSBQQUdFX1NJWkUgXHUwMDNlIDQwOTYgKGUuZy4sIGFybTY0LCBwcGM2NCkgYW5kIGZpeGVzIGEgcG90ZW50aWFsIGJ1ZyB3aGVyZSB0aGUgZXJyb3Igd2FzIGlnbm9yZWQuIEl0IGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBKRlMgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0pGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2pmc19maWxsX3N1cGVyJiMzNDssCiAgICAmIzM0O19fZ2V0X21ldGFwYWdlJiMzNDssCiAgICAmIzM0O2RpUmVhZCYjMzQ7LAogICAgJiMzNDtkaVdyaXRlJiMzNDssCiAgICAmIzM0O2RiTW91bnQmIzM0OywKICAgICYjMzQ7ZWFfZ2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBtZXRhcGFnZV9yZWFkX2ZvbGlvYCBpbiB0aGUgSkZTIGZpbGVzeXN0ZW0gdG8gcHJvcGVybHkgaGFuZGxlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIGZyb20gYGluc2VydF9tZXRhcGFnZWAuIFRoaXMgZXJyb3IgcGF0aCBpcyByZWFjaGFibGUgb24gYXJjaGl0ZWN0dXJlcyB3aGVyZSBQQUdFX1NJWkUgXHUwMDNlIDQwOTYgKGUuZy4sIGFybTY0LCBwcGM2NCkgYW5kIGZpeGVzIGEgcG90ZW50aWFsIGJ1ZyB3aGVyZSB0aGUgZXJyb3Igd2FzIGlnbm9yZWQuIEl0IGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBKRlMgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjAxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6MDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtaXNzaW5nIGVycm9yIGNoZWNrIGZvciBgaW5zZXJ0X21ldGFwYWdlKClgLCB3aGljaCBjYW4gZmFpbCBhbmQgcmV0dXJuIGAtRU5PTUVNYCBpZiBga3phbGxvY19vYmooKWAgZmFpbHMgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBhIGBtZXRhX2FuY2hvcmAgc3RydWN0dXJlLiBXaXRob3V0IHRoaXMgY2hlY2ssIHRoZSBjb2RlIHdvdWxkIGNvbnRpbnVlIGV4ZWN1dGluZyBldmVuIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxlZCwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBvdGhlciBtZW1vcnktcmVsYXRlZCBidWdzIHdoZW4gYGZvbGlvLVx1MDAzZXByaXZhdGVgIGlzIGV4cGVjdGVkIHRvIGJlIGluaXRpYWxpemVkLiBUaGlzIGlzIGEgc3RhbmRhcmQgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSBhbmQgZXJyb3IgaGFuZGxpbmcgYnVnLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIFN0YW5kYXJkIEtBU0FOICh3aGljaCBkZXRlY3RzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIHVzZS1hZnRlci1mcmVlKSBhbmQgYmFzaWMga2VybmVsIGNyYXNoIGRldGVjdGlvbiAoZm9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZSBjb25zZXF1ZW5jZXMgb2YgdGhpcyBidWcuIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUgYmVjYXVzZSB0aGUgbWVtb3J5IGFsbG9jYXRlZCBieSBga3phbGxvY19vYmooKWAgaXMgYWxyZWFkeSB6ZXJvLWluaXRpYWxpemVkLCBhbmQgdGhlIGJ1ZyBkb2VzIG5vdCBpbnZvbHZlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFkZGluZyBieXRlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDVhYTFmYzMxOTgzNmM5YmI1ZGJkNzliYTM2NTFlMWYwOTYxMzM4MgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDE5OjU5OjU4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19tZXRhcGFnZS5jIGIvZnMvamZzL2pmc19tZXRhcGFnZS5jCmluZGV4IDQxZmUxMmU2NDFjZWUuLmZmYmIxODZlODUwYzYgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9qZnMvamZzX21ldGFwYWdlLmMKQEAgLTU3Myw2ICYjNDM7NTczLDcgQEAgc3RhdGljIGludCBtZXRhcGFnZV9yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGZvbGlvICpmb2xpbykKIAlpbnQgeGxlbjsKIAl1bnNpZ25lZCBpbnQgbGVuOwogCWludCBvZmZzZXQ7CiYjNDM7CWludCByZXQgPSAwOwogCiAJQlVHX09OKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbykpOwogCXBhZ2Vfc3RhcnQgPSBmb2xpb19wb3MoZm9saW8pICZndDsmZ3Q7IGlub2RlLSZndDtpX2Jsa2JpdHM7CkBAIC01ODMsOCAmIzQzOzU4NCwxMSBAQCBzdGF0aWMgaW50IG1ldGFwYWdlX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCQlwYmxvY2sgPSBtZXRhcGFnZV9nZXRfYmxvY2tzKGlub2RlLCBwYWdlX3N0YXJ0ICYjNDM7IGJsb2NrX29mZnNldCwKIAkJCQkJICAgICAmYW1wO3hsZW4pOwogCQlpZiAocGJsb2NrKSB7Ci0JCQlpZiAoIWZvbGlvLSZndDtwcml2YXRlKQotCQkJCWluc2VydF9tZXRhcGFnZShmb2xpbywgTlVMTCk7CiYjNDM7CQkJaWYgKCFmb2xpby0mZ3Q7cHJpdmF0ZSkgewomIzQzOwkJCQlyZXQgPSBpbnNlcnRfbWV0YXBhZ2UoZm9saW8sIE5VTEwpOwomIzQzOwkJCQlpZiAocmV0KQomIzQzOwkJCQkJYnJlYWs7CiYjNDM7CQkJfQogCQkJaW5jX2lvKGZvbGlvKTsKIAkJCWlmIChiaW8pCiAJCQkJc3VibWl0X2JpbyhiaW8pOwpAQCAtNjA3LDcgJiM0Mzs2MTEsNyBAQCBzdGF0aWMgaW50IG1ldGFwYWdlX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCWVsc2UKIAkJZm9saW9fdW5sb2NrKGZvbGlvKTsKIAotCXJldHVybiAwOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgYm9vbCBtZXRhcGFnZV9yZWxlYXNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcF9tYXNrKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIyOQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSkZTIE1ldGFwYWdlIFJlYWQgRnVuY3Rpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB6ZXJvaW5nIGluIG9uIGBtZXRhcGFnZV9yZWFkX2ZvbGlvYCB3aXRoaW4gYGZzL2pmcy9qZnNfbWV0YXBhZ2UuY2AuIEkgc2VlIGl0JiMzOTtzIHNwZWNpZmljYWxseSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIGZhaWx1cmUgcG9pbnQgd2hlbiBkZWFsaW5nIHdpdGggbWV0YXBhZ2VzLiBUaGUgY2hhbmdlIGlzIHN0cmFpZ2h0Zm9yd2FyZDogYSBjcnVjaWFsIHJldHVybiB2YWx1ZSBjaGVjayBoYXMgYmVlbiBhZGRlZCBhZnRlciB0aGUgY2FsbCB0byBgaW5zZXJ0X21ldGFwYWdlKGZvbGlvLCBOVUxMKWAuCgpUaGUgY29yZSBvZiBpdCBpcyB0aGlzOiBpZiBgaW5zZXJ0X21ldGFwYWdlYCBoaXRzIGEgc25hZyBhbmQgKmZhaWxzKiBkdXJpbmcgaXRzIG9wZXJhdGlvbiwgdGhlIHBhdGNoZWQgY29kZSBub3cgY29ycmVjdGx5IGJyZWFrcyBvdXQgb2YgdGhlIGxvb3AgYW5kIHByb3BhZ2F0ZXMgdGhlIGVycm9yIGNvZGUgYmFjayB1cCB0aGUgY2FsbCBzdGFjay4gVGhpcyBwcmV2ZW50cyBjb250aW51ZWQgcHJvY2Vzc2luZyB3aGVuIGEgbWV0YXBhZ2UgaW5zZXJ0aW9uIGdvZXMgc2lkZXdheXMuIFdpdGhvdXQgdGhpcyBjaGVjaywgd2UmIzM5O2QgcG90ZW50aWFsbHkgYmUgY29udGludWluZyBkb3duIGEgcGF0aCB3aGVyZSBkYXRhIGludGVncml0eSBtaWdodCBiZSBjb21wcm9taXNlZCwgd2hpY2ggY291bGQgbGVhZCB0byBmaWxlIHN5c3RlbSBjb3JydXB0aW9uIG9yIG90aGVyIHVuZm9yZXNlZW4gaXNzdWVzLgoKVG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLCBJIG5lZWQgdG8gem9vbSBpbiBhbmQgZXhhbWluZSB0aGUgY29udGV4dCB3aXRoaW4gYG1ldGFwYWdlX3JlYWRfZm9saW9gLiBXaGF0JiMzOTtzIHRoZSBmbG93PyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBsb29wIHRoYXQgaXMgYmVpbmcgYnJva2VuPyBXaGF0IGVycm9yIGNvbmRpdGlvbnMgY291bGQgbGVhZCB0byBgaW5zZXJ0X21ldGFwYWdlYCBmYWlsaW5nIGluIHRoZSBmaXJzdCBwbGFjZT8gQW5kIEkmIzM5O2xsIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IHRoaXMgYWRkZWQgZXJyb3IgaGFuZGxpbmcgbWlnaHQgYWZmZWN0IHBlcmZvcm1hbmNlLCB0aG91Z2ggaW4gdGhpcyBjYXNlLCBJJiMzOTtkIGV4cGVjdCB0aGUgcGVyZm9ybWFuY2UgaW1wYWN0IHRvIGJlIG1pbmltYWwgY29tcGFyZWQgdG8gdGhlIGdhaW4gaW4gcm9idXN0bmVzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9qZnMvamZzX21ldGFwYWdlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU3MDpcdFx0aW50IGJsb2Nrc19wZXJfcGFnZSA9IGlfYmxvY2tzX3Blcl9mb2xpbyhpbm9kZSwgZm9saW8pO1xuIDU3MTpcdFx0c2VjdG9yX3QgcGFnZV9zdGFydDtcdC8qIGFkZHJlc3Mgb2YgcGFnZSBpbiBmcyBibG9ja3MgKi9cbiA1NzI6XHRcdHNlY3Rvcl90IHBibG9jaztcbiA1NzM6XHRcdGludCB4bGVuO1xuIDU3NDpcdFx0dW5zaWduZWQgaW50IGxlbjtcbiA1NzU6XHRcdGludCBvZmZzZXQ7XG4gNTc2Olx0XHRpbnQgcmV0ID0gMDtcbiA1Nzc6XHRcbiA1Nzg6XHRcdEJVR19PTighZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pKTtcbiA1Nzk6XHRcdHBhZ2Vfc3RhcnQgPSBmb2xpb19wb3MoZm9saW8pIFx1MDAzZVx1MDAzZSBpbm9kZS1cdTAwM2VpX2Jsa2JpdHM7XG4gNTgwOlx0XG4gNTgxOlx0XHRibG9ja19vZmZzZXQgPSAwO1xuIDU4MjpcdFx0d2hpbGUgKGJsb2NrX29mZnNldCBcdTAwM2MgYmxvY2tzX3Blcl9wYWdlKSB7XG4gNTgzOlx0XHRcdHhsZW4gPSBibG9ja3NfcGVyX3BhZ2UgLSBibG9ja19vZmZzZXQ7XG4gNTg0Olx0XHRcdHBibG9jayA9IG1ldGFwYWdlX2dldF9ibG9ja3MoaW5vZGUsIHBhZ2Vfc3RhcnQgJiM0MzsgYmxvY2tfb2Zmc2V0LFxuIDU4NTpcdFx0XHRcdFx0XHQgICAgIFx1MDAyNnhsZW4pO1xuIDU4NjpcdFx0XHRpZiAocGJsb2NrKSB7XG4gNTg3Olx0XHRcdFx0aWYgKCFmb2xpby1cdTAwM2Vwcml2YXRlKSB7XG4gNTg4Olx0XHRcdFx0XHRyZXQgPSBpbnNlcnRfbWV0YXBhZ2UoZm9saW8sIE5VTEwpO1xuIDU4OTpcdFx0XHRcdFx0aWYgKHJldClcbiA1OTA6XHRcdFx0XHRcdFx0YnJlYWs7XG4gNTkxOlx0XHRcdFx0fVxuIDU5MjpcdFx0XHRcdGluY19pbyhmb2xpbyk7XG4gNTkzOlx0XHRcdFx0aWYgKGJpbylcbiA1OTQ6XHRcdFx0XHRcdHN1Ym1pdF9iaW8oYmlvKTtcbiA1OTU6XHRcbiA1OTY6XHRcdFx0XHRiaW8gPSBiaW9fYWxsb2MoaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2JkZXYsIDEsIFJFUV9PUF9SRUFELFxuIDU5NzpcdFx0XHRcdFx0XHRHRlBfTk9GUyk7XG4gNTk4Olx0XHRcdFx0YmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yID1cbiA1OTk6XHRcdFx0XHRcdHBibG9jayBcdTAwM2NcdTAwM2MgKGlub2RlLVx1MDAzZWlfYmxrYml0cyAtIDkpO1xuIDYwMDpcdFx0XHRcdGJpby1cdTAwM2ViaV9lbmRfaW8gPSBtZXRhcGFnZV9yZWFkX2VuZF9pbztcbiA2MDE6XHRcdFx0XHRiaW8tXHUwMDNlYmlfcHJpdmF0ZSA9IGZvbGlvO1xuIDYwMjpcdFx0XHRcdGxlbiA9IHhsZW4gXHUwMDNjXHUwMDNjIGlub2RlLVx1MDAzZWlfYmxrYml0cztcbiA2MDM6XHRcdFx0XHRvZmZzZXQgPSBibG9ja19vZmZzZXQgXHUwMDNjXHUwMDNjIGlub2RlLVx1MDAzZWlfYmxrYml0cztcbiA2MDQ6XHRcdFx0XHRiaW9fYWRkX2ZvbGlvX25vZmFpbChiaW8sIGZvbGlvLCBsZW4sIG9mZnNldCk7XG4gNjA1Olx0XHRcdFx0YmxvY2tfb2Zmc2V0ICYjNDM7PSB4bGVuO1xuIDYwNjpcdFx0XHR9IGVsc2VcbiA2MDc6XHRcdFx0XHRibG9ja19vZmZzZXQmIzQzOyYjNDM7O1xuIDYwODpcdFx0fVxuIDYwOTpcdFx0aWYgKGJpbylcbiA2MTA6XHRcdFx0c3VibWl0X2JpbyhiaW8pO1xuIDYxMTpcdFx0ZWxzZVxuIDYxMjpcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuIDYxMzpcdFxuIDYxNDpcdFx0cmV0dXJuIHJldDtcbiA2MTU6XHR9XG4gNjE2Olx0XG4gNjE3Olx0c3RhdGljIGJvb2wgbWV0YXBhZ2VfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnBfbWFzaylcbiA2MTg6XHR7XG4gNjE5Olx0XHRzdHJ1Y3QgbWV0YXBhZ2UgKm1wO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzkxCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIGBpbnNlcnRfbWV0YXBhZ2VgIFJldHVybiBWYWx1ZSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCBob3cgd2UgaGFuZGxlIHRoZSByZXR1cm4gdmFsdWUgZnJvbSBgaW5zZXJ0X21ldGFwYWdlYC4gU2VlbXMgbGlrZSBhIHNpbXBsZSB0aGluZywgYnV0IHBvdGVudGlhbGx5IGNyaXRpY2FsLiBJZiBgaW5zZXJ0X21ldGFwYWdlYCBmYWlscyDigJMgbWF5YmUgZHVlIHRvIGEgbWVtb3J5IGFsbG9jYXRpb24gaXNzdWUsIG9yIHNvbWUgb3RoZXIgdW5leHBlY3RlZCBwcm9ibGVtIOKAkyBpdCYjMzk7cyBzdXBwb3NlZCB0byByZXR1cm4gYW4gZXJyb3IgY29kZSwgcmlnaHQ/IEdvb2QuIFRoaXMgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIGEgZGVmZW5zaXZlIHByb2dyYW1taW5nIG1lYXN1cmUuIFdlIG5lZWQgdG8gY2hlY2sgdGhlIHJldHVybiB2YWx1ZSBiZWNhdXNlIGlmIHdlICpkb24mIzM5O3QqLCBhbmQgdGhlIGZ1bmN0aW9uIGZhaWxlZCBzaWxlbnRseSwgd2UgY291bGQgYmUgbG9va2luZyBhdCBhIG1lbW9yeSBsZWFrLCBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSwgb3Igc29tZXRoaW5nIGV2ZW4gd29yc2UgZG93biB0aGUgbGluZS4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgc2NlbmFyaW8sIGFuZCB0aGUgc29ydCBvZiBidWcgd2UgKmFic29sdXRlbHkqIHdhbnQgdG8gYXZvaWQuCgpIb2xkIG9uLCBJIHNlZSBgaW5zZXJ0X21ldGFwYWdlYCByZXR1cm5zIGFuIGBpbnRgLCBub3QgYSBwb2ludGVyIG9yIGEgbW9yZSBjb21wbGV4IHN0cnVjdHVyZSwgc28gbGV0IG1lIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBpbnNlcnRfbWV0YXBhZ2VgIHRvIGNoZWNrIHdoYXQgdHlwZSBvZiBlcnJvciBjb2RlcyBpdCByZXR1cm5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2pmcy9qZnNfbWV0YXBhZ2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTUwOlx0XG4gMTUxOlx0XHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcdTAwMjZhbmNob3ItXHUwMDNlaW9fY291bnQpKVxuIDE1MjpcdFx0XHRoYW5kbGVyKGZvbGlvLCBhbmNob3ItXHUwMDNlc3RhdHVzKTtcbiAxNTM6XHR9XG4gMTU0Olx0XG4gMTU1Olx0I2lmZGVmIENPTkZJR19NSUdSQVRJT05cbiAxNTY6XHRzdGF0aWMgaW50IF9fbWV0YXBhZ2VfbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiAxNTc6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmRzdCwgc3RydWN0IGZvbGlvICpzcmMsXG4gMTU4Olx0XHRcdFx0XHQgICAgZW51bSBtaWdyYXRlX21vZGUgbW9kZSlcbiAxNTk6XHR7XG4gMTYwOlx0XHRzdHJ1Y3QgbWV0YV9hbmNob3IgKnNyY19hbmNob3IgPSBzcmMtXHUwMDNlcHJpdmF0ZTtcbiAxNjE6XHRcdHN0cnVjdCBtZXRhcGFnZSAqbXBzW01QU19QRVJfUEFHRV0gPSB7MH07XG4gMTYyOlx0XHRzdHJ1Y3QgbWV0YXBhZ2UgKm1wO1xuIDE2MzpcdFx0aW50IGksIHJjO1xuIDE2NDpcdFxuIDE2NTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTVBTX1BFUl9QQUdFOyBpJiM0MzsmIzQzOykge1xuIDE2NjpcdFx0XHRtcCA9IHNyY19hbmNob3ItXHUwMDNlbXBbaV07XG4gMTY3Olx0XHRcdGlmIChtcCBcdTAwMjZcdTAwMjYgbWV0YXBhZ2VfbG9ja2VkKG1wKSlcbiAxNjg6XHRcdFx0XHRyZXR1cm4gLUVBR0FJTjtcbiAxNjk6XHRcdH1cbiAxNzA6XHRcbiAxNzE6XHRcdHJjID0gZmlsZW1hcF9taWdyYXRlX2ZvbGlvKG1hcHBpbmcsIGRzdCwgc3JjLCBtb2RlKTtcbiAxNzI6XHRcdGlmIChyYylcbiAxNzM6XHRcdFx0cmV0dXJuIHJjO1xuIDE3NDpcdFxuIDE3NTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTVBTX1BFUl9QQUdFOyBpJiM0MzsmIzQzOykge1xuIDE3NjpcdFx0XHRtcCA9IHNyY19hbmNob3ItXHUwMDNlbXBbaV07XG4gMTc3Olx0XHRcdGlmICghbXApXG4gMTc4Olx0XHRcdFx0Y29udGludWU7XG4gMTc5Olx0XHRcdGlmICh1bmxpa2VseShpbnNlcnRfbWV0YXBhZ2UoZHN0LCBtcCkpKSB7XG4gMTgwOlx0XHRcdFx0LyogSWYgZXJyb3IsIHJvbGwtYmFjayBwcmV2aW9zbHkgaW5zZXJ0ZWQgcGFnZXMgKi9cbiAxODE6XHRcdFx0XHRmb3IgKGludCBqID0gMCA7IGogXHUwMDNjIGk7IGomIzQzOyYjNDM7KSB7XG4gMTgyOlx0XHRcdFx0XHRpZiAobXBzW2pdKVxuIDE4MzpcdFx0XHRcdFx0XHRyZW1vdmVfbWV0YXBhZ2UoZHN0LCBtcHNbal0pO1xuIDE4NDpcdFx0XHRcdH1cbiAxODU6XHRcdFx0XHRyZXR1cm4gLUVBR0FJTjtcbiAxODY6XHRcdFx0fVxuIDE4NzpcdFx0XHRtcHNbaV0gPSBtcDtcbiAxODg6XHRcdH1cbiAxODk6XHRcbiAxOTA6XHRcdC8qIFVwZGF0ZSB0aGUgbWV0YXBhZ2UgYW5kIHJlbW92ZSBpdCBmcm9tIHNyYyAqL1xuIDE5MTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTVBTX1BFUl9QQUdFOyBpJiM0MzsmIzQzOykge1xuIDE5MjpcdFx0XHRtcCA9IG1wc1tpXTtcbiAxOTM6XHRcdFx0aWYgKG1wKSB7XG4gMTk0Olx0XHRcdFx0aW50IHBhZ2Vfb2Zmc2V0ID0gbXAtXHUwMDNlZGF0YSAtIGZvbGlvX2FkZHJlc3Moc3JjKTtcbiAxOTU6XHRcbiAxOTY6XHRcdFx0XHRtcC1cdTAwM2VkYXRhID0gZm9saW9fYWRkcmVzcyhkc3QpICYjNDM7IHBhZ2Vfb2Zmc2V0O1xuIDE5NzpcdFx0XHRcdG1wLVx1MDAzZWZvbGlvID0gZHN0O1xuIDE5ODpcdFx0XHRcdHJlbW92ZV9tZXRhcGFnZShzcmMsIG1wKTtcbiAxOTk6XHRcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDk1CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkxvY2F0aW5nIHRoZSBNZXRhcGFnZSoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBsYXNlci1mb2N1c2VkOiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGxvY2F0aW9uIG9mIHRoZSBgaW5zZXJ0X21ldGFwYWdlYCBmdW5jdGlvbiBvciBmaWxlLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgY2FzdWFsIHNlYXJjaDsgSSYjMzk7bSBhc3N1bWluZyB0aGVyZSYjMzk7cyBhIHNwZWNpZmljLCB3ZWxsLWRlZmluZWQgcmVhc29uIEkmIzM5O20gdGFyZ2V0aW5nIHRoaXMgcGFydGljdWxhciBlbGVtZW50LiBNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggdGhlIGxpa2VseSBzY2VuYXJpb3MgYmFzZWQgb24gbXkgZmllbGQuIEkmIzM5O20gY29uc2lkZXJpbmc6CgoqICAgKipQcm9qZWN0IENvbnRleHQ6KiogV2hhdCYjMzk7cyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmU/IElzIHRoaXMgYSBsZWdhY3kgc3lzdGVtLCBhIG1vZHVsYXIgZGVzaWduLCBvciBzb21ldGhpbmcgbW9yZSBtb2Rlcm4/IFRoaXMgaGVscHMgbmFycm93IGRvd24gdGhlIHByb2JhYmxlIGxvY2F0aW9ucyB3aXRoaW4gdGhlIHByb2plY3Qgc3RydWN0dXJlLgoqICAgKipDb2RpbmcgQ29udmVudGlvbnM6KiogV2hhdCBhcmUgdGhlIGVzdGFibGlzaGVkIG5hbWluZyBwYXR0ZXJucyBhbmQgZmlsZSBvcmdhbml6YXRpb24gcGFyYWRpZ21zPyBBcmUgd2UgZGVhbGluZyB3aXRoIG5hbWVzcGFjZXMsIGNsYXNzZXMsIG9yIGEgbW9yZSBwcm9jZWR1cmFsIGFwcHJvYWNoPyBUaGlzIGtub3dsZWRnZSBkaWN0YXRlcyB3aGVyZSBJJiMzOTtsbCBsb29rIGZpcnN0LgoqICAgKipSZWxhdGVkIENvbXBvbmVudHM6KiogV2hhdCBvdGhlciBtb2R1bGVzIG9yIGZ1bmN0aW9ucyB3b3VsZCByZWFzb25hYmx5IGludGVyYWN0IHdpdGggYGluc2VydF9tZXRhcGFnZWA/IFRyYWNpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGNhbiBwcm92aWRlIGEgZGlyZWN0IHBhdGguIEFyZSB0aGVyZSBhbnkga25vd24gZW50cnkgcG9pbnRzIG9yIEFQSSBjYWxscyB0aGF0IG1ha2UgdXNlIG9mIGl0PwoqICAgKipTZWFyY2ggU3RyYXRlZ2llczoqKiBEZXBlbmRpbmcgb24gdGhlIHNjYWxlIGFuZCBjb21wbGV4aXR5LCBJJiMzOTtsbCBkZXBsb3kgdGhlIGFwcHJvcHJpYXRlIHNlYXJjaCB0b29scyAtIGdyZXAsIGBmaW5kYCwgSURFLWludGVncmF0ZWQgc2VhcmNoLCBvciBldmVuIGNyb3NzLXJlZmVyZW5jaW5nIHRvb2xzLiBUaGUgYXBwcm9hY2ggd2lsbCB2YXJ5IGJhc2VkIG9uIHdoZXRoZXIgSSBoYXZlIGFjY2VzcyB0byB0aGUgZnVsbCBzb3VyY2UgY29kZSBhbmQgYW55IHZlcnNpb24gY29udHJvbCBzeXN0ZW1zLgoqICAgKipFeHBlY3RlZCBmdW5jdGlvbmFsaXR5OioqIFdoYXQgaXMgbWVhbnQgdG8gaGFwcGVuIGhlcmU/IE15IGV4cGVydC1sZXZlbCB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb25hbGl0eSBhbGxvd3MgbWUgdG8gbmFycm93IGRvd24gd2hhdCBJIGFtIGxvb2tpbmcgZm9yIGJ5IGFzc2Vzc2luZyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IgYW5kIGxvZ2ljIGl0IHdpbGwgYmUgaW52b2x2ZWQgd2l0aC4KCk15IGdvYWwgaGVyZSBpcyBlZmZpY2llbnQgdHJpYWdlLiBJIHdhbnQgdG8gcmFwaWRseSBlbGltaW5hdGUgZGVhZCBlbmRzIGFuZCBmb2N1cyBteSBlZmZvcnQgb24gdGhlIG1vc3QgcHJvbWlzaW5nIGNhbmRpZGF0ZXMsIGFuZCBhbHNvIEkgd2FudCB0byBxdWlja2x5IGV2YWx1YXRlIGFueSByZWxhdGVkIHZhcmlhYmxlcywgZnVuY3Rpb25zIGFuZCBmaWxlcyB3aGljaCBtaWdodCBwb2ludCB0b3dhcmQgdGhlIGRlc2lyZWQgYW5zd2VyLiBJJiMzOTttIHJlYWR5IHRvIGRpdmUgaW50byB0aGUgY29kZWJhc2UsIGJ1dCBJJiMzOTttIGFwcHJvYWNoaW5nIHRoaXMgd2l0aCBhIHN0cmF0ZWdpYywgaW5mb3JtZWQgcGxhbi4gVGhlIGZpcnN0IHN0ZXAsIGhvd2V2ZXIsIGlzIHRvICpmaW5kKiBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtec3RhdGljIGludCBpbnNlcnRfbWV0YXBhZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTkyCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDb25zaWRlcmluZyB0aGUgTmF0dXJlIG9mIHRoZSBFbGVtZW50KioKCkhtbSwgSSYjMzk7bSB0cnlpbmcgdG8gcGluIGRvd24gdGhlIGJlaGF2aW9yIG9mIHRoaXMgcGFydGljdWxhciB0aGluZy4gSSYjMzk7bSB3b25kZXJpbmcgaWYgaXRzIHN0YXRlIGlzIHRydWx5IGZpeGVkLCBvciBpZiB0aGVyZSYjMzk7cyBzb21lIGR5bmFtaWMgYXNwZWN0IHRvIGl0IHRoYXQgSSYjMzk7bSBvdmVybG9va2luZy4gVGhlIGluaXRpYWwgaW1wcmVzc2lvbiB3YXMgdGhhdCBpdCB3YXMgc3RhdGljLCBidXQgbm93IEkgbmVlZCB0byBxdWVzdGlvbiB0aGF0IGFzc3VtcHRpb24uIFBlcmhhcHMgdGhlIGFwcGFyZW50ICYjMzQ7c3RhdGljLW5lc3MmIzM0OyBpcyBhbiBpbGx1c2lvbiwgb3IgbWF5YmUgaXQmIzM5O3MgY29uZmlndXJlZCBpbiBhIHdheSB0aGF04oCZcyB2ZXJ5IGNsb3NlbHkgdGllZCB0byBpdHMgaW1tZWRpYXRlIGNvbnRleHQsIGVmZmVjdGl2ZWx5IG1ha2luZyBpdCAqc2VlbSogc3RhdGljIGV2ZW4gaWYgaXQgaXNuJiMzOTt0LiBJJiMzOTttIGxlYW5pbmcgdG93YXJkIHRoaW5raW5nIGl0JiMzOTtzIG5vdCB0cnVseSBzdGF0aWMuIFRoZSBxdWVzdGlvbiBpcywgaWYgaXQmIzM5O3Mgbm90IHN0YXRpYywgd2hlcmUgaXMgdGhlIGR5bmFtaXNtIGNvbWluZyBmcm9tPyBBbmQgaG93IGlzIGl0IGJlaW5nIGludHJvZHVjZWQ/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIwOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBpbnNlcnRfbWV0YXBhZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvamZzL2pmc19tZXRhcGFnZS5jPTg0PXN0YXRpYyBpbmxpbmUgc3RydWN0IG1ldGFwYWdlICpmb2xpb190b19tcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2Zmc2V0KVxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy05Mi1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzo5MzpzdGF0aWMgaW5saW5lIGludCBpbnNlcnRfbWV0YXBhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1ldGFwYWdlICptcClcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy05NC17XG4tLVxuZnMvamZzL2pmc19tZXRhcGFnZS5jPTIwOD1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZXRhcGFnZSAqZm9saW9fdG9fbXAoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9mZnNldClcbi0tXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtMjEyLVxuZnMvamZzL2pmc19tZXRhcGFnZS5jOjIxMzpzdGF0aWMgaW5saW5lIGludCBpbnNlcnRfbWV0YXBhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1ldGFwYWdlICptcClcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy0yMTQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDQ4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgSkZTIE1ldGFwYWdlIENvZGUqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gYGZzL2pmcy9qZnNfbWV0YXBhZ2UuY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgYGluc2VydF9tZXRhcGFnZWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBKRlMgaGFuZGxlcyB0aGUgaW5zZXJ0aW9uIG9mIG1ldGFkYXRhIHBhZ2VzLiBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZD8gV2hhdCBsb2NraW5nIG1lY2hhbmlzbXMgYXJlIGVtcGxveWVkIHRvIGVuc3VyZSBjb25zaXN0ZW5jeSBhbmQgcHJldmVudCBjb3JydXB0aW9uIGR1cmluZyBjb25jdXJyZW50IGFjY2Vzcz8KCkkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGJsb2NrIGRldmljZS4gSXMgaXQgYSBkaXJlY3QgSS9PIHBhdGgsIG9yIGRvZXMgaXQgdXRpbGl6ZSB0aGUgcGFnZSBjYWNoZT8gSG93IGFyZSB0aGUgZGlydHkgcGFnZXMgZmx1c2hlZCB0byBkaXNrLCBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zPyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGluZWZmaWNpZW5jaWVzIGluIHRoZSBhbGdvcml0aG0sIGtlZXBpbmcgaW4gbWluZCB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9uIGhlYXZ5IHdvcmtsb2Fkcy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB3cml0ZSBhbXBsaWZpY2F0aW9uIGFyZSBhbHNvIG9uIG15IHJhZGFyLgoKRnVydGhlcm1vcmUsIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nLiBIb3cgcm9idXN0IGlzIHRoZSBjb2RlIGFnYWluc3QgdmFyaW91cyBmYWlsdXJlcywgc3VjaCBhcyBkaXNrIGVycm9ycywgbWVtb3J5IGFsbG9jYXRpb24gcHJvYmxlbXMsIG9yIGluY29uc2lzdGVuY2llcyBpbiB0aGUgSkZTIG1ldGFkYXRhIGl0c2VsZj8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGFyZWFzIGZvciBpbXByb3ZlbWVudCBpbiB0ZXJtcyBvZiBlcnJvciByZXBvcnRpbmcgb3IgcmVjb3Zlcnk/IEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaXMgc3VwcG9zZWQgdG8gYmVoYXZlLgoKRmluYWxseSwgSSYjMzk7bGwgYmUgY29tcGFyaW5nIHRoaXMgY29kZSB0byBzaW1pbGFyIG1lY2hhbmlzbXMgaW4gb3RoZXIgZmlsZXN5c3RlbXMgSSYjMzk7dmUgc3R1ZGllZC4gV2hhdCBhcmUgdGhlIHRyYWRlLW9mZnMgdGhhdCBKRlMgaGFzIG1hZGUgaW4gaXRzIGltcGxlbWVudGF0aW9uPyBBcmUgdGhlcmUgYW55IGNsZXZlciBvcHRpbWl6YXRpb25zIG9yIG5vdmVsIGFwcHJvYWNoZXMgdGhhdCBJIGNhbiBsZWFybiBmcm9tPyBUaGlzIHdpbGwgcHJvdmlkZSBtZSB3aXRoIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IGBpbnNlcnRfbWV0YXBhZ2VgIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIHRoZSBKRlMgZmlsZXN5c3RlbSBhbmQgaG93IGl0IGNhbiBiZSBpbXByb3ZlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9qZnMvamZzX21ldGFwYWdlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDgwOlx0XHRibGtfc3RhdHVzX3Qgc3RhdHVzO1xuICA4MTpcdFx0c3RydWN0IG1ldGFwYWdlICptcFtNUFNfUEVSX1BBR0VdO1xuICA4MjpcdH07XG4gIDgzOlx0XG4gIDg0Olx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbWV0YXBhZ2UgKmZvbGlvX3RvX21wKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvZmZzZXQpXG4gIDg1Olx0e1xuICA4NjpcdFx0c3RydWN0IG1ldGFfYW5jaG9yICphbmNob3IgPSBmb2xpby1cdTAwM2Vwcml2YXRlO1xuICA4NzpcdFxuICA4ODpcdFx0aWYgKCFhbmNob3IpXG4gIDg5Olx0XHRcdHJldHVybiBOVUxMO1xuICA5MDpcdFx0cmV0dXJuIGFuY2hvci1cdTAwM2VtcFtvZmZzZXQgXHUwMDNlXHUwMDNlIEwyUFNJWkVdO1xuICA5MTpcdH1cbiAgOTI6XHRcbiAgOTM6XHRzdGF0aWMgaW5saW5lIGludCBpbnNlcnRfbWV0YXBhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1ldGFwYWdlICptcClcbiAgOTQ6XHR7XG4gIDk1Olx0XHRzdHJ1Y3QgbWV0YV9hbmNob3IgKmE7XG4gIDk2Olx0XHRpbnQgaW5kZXg7XG4gIDk3Olx0XHRpbnQgbDJtcF9ibG9ja3M7XHQvKiBsb2cyIGJsb2NrcyBwZXIgbWV0YXBhZ2UgKi9cbiAgOTg6XHRcbiAgOTk6XHRcdGEgPSBmb2xpby1cdTAwM2Vwcml2YXRlO1xuIDEwMDpcdFx0aWYgKCFhKSB7XG4gMTAxOlx0XHRcdGEgPSBremFsbG9jX29iaihzdHJ1Y3QgbWV0YV9hbmNob3IsIEdGUF9OT0ZTKTtcbiAxMDI6XHRcdFx0aWYgKCFhKVxuIDEwMzpcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDEwNDpcdFx0XHRmb2xpb19hdHRhY2hfcHJpdmF0ZShmb2xpbywgYSk7XG4gMTA1Olx0XHRcdGttYXAoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSk7XG4gMTA2Olx0XHR9XG4gMTA3Olx0XG4gMTA4Olx0XHRpZiAobXApIHtcbiAxMDk6XHRcdFx0bDJtcF9ibG9ja3MgPSBMMlBTSVpFIC0gZm9saW8tXHUwMDNlbWFwcGluZy1cdTAwM2Vob3N0LVx1MDAzZWlfYmxrYml0cztcbiAxMTA6XHRcdFx0aW5kZXggPSAobXAtXHUwMDNlaW5kZXggXHUwMDNlXHUwMDNlIGwybXBfYmxvY2tzKSBcdTAwMjYgKE1QU19QRVJfUEFHRSAtIDEpO1xuIDExMTpcdFx0XHRhLVx1MDAzZW1wX2NvdW50JiM0MzsmIzQzOztcbiAxMTI6XHRcdFx0YS1cdTAwM2VtcFtpbmRleF0gPSBtcDtcbiAxMTM6XHRcdH1cbiAxMTQ6XHRcbiAxMTU6XHRcdHJldHVybiAwO1xuIDExNjpcdH1cbiAxMTc6XHRcbiAxMTg6XHRzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlX21ldGFwYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZXRhcGFnZSAqbXApXG4gMTE5Olx0e1xuIDEyMDpcdFx0c3RydWN0IG1ldGFfYW5jaG9yICphID0gZm9saW8tXHUwMDNlcHJpdmF0ZTtcbiAxMjE6XHRcdGludCBsMm1wX2Jsb2NrcyA9IEwyUFNJWkUgLSBmb2xpby1cdTAwM2VtYXBwaW5nLVx1MDAzZWhvc3QtXHUwMDNlaV9ibGtiaXRzO1xuIDEyMjpcdFx0aW50IGluZGV4O1xuIDEyMzpcdFxuIDEyNDpcdFx0aW5kZXggPSAobXAtXHUwMDNlaW5kZXggXHUwMDNlXHUwMDNlIGwybXBfYmxvY2tzKSBcdTAwMjYgKE1QU19QRVJfUEFHRSAtIDEpO1xuIDEyNTpcdFxuIDEyNjpcdFx0QlVHX09OKGEtXHUwMDNlbXBbaW5kZXhdICE9IG1wKTtcbiAxMjc6XHRcbiAxMjg6XHRcdGEtXHUwMDNlbXBbaW5kZXhdID0gTlVMTDtcbiAxMjk6XHRcdGlmICgtLWEtXHUwMDNlbXBfY291bnQgPT0gMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMDowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTczCgkJCQkJCQlvdXRwdXQ6IDIyNQoJCQkJCQkJdGhvdWdodHM6IDY5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbW9yeSBBbGxvY2F0aW9uIEVycm9yIGFuZCBLTVNBTiBBcHBsaWNhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBzZWUgaXQmIzM5O3MgYWJvdXQgYSBtaXNzaW5nIGVycm9yIGNoZWNrIGFmdGVyIGEgbWVtb3J5IGFsbG9jYXRpb24uIFRoZSBgaW5zZXJ0X21ldGFwYWdlYCBmdW5jdGlvbiwgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgaXMgYWxsb2NhdGluZyBhIGBzdHJ1Y3QgbWV0YV9hbmNob3JgLiBUaGUgY3JpdGljYWwgYml0IGlzLCBpZiBga3phbGxvY19vYmpgIGZhaWxzLCBpdCByZXR1cm5zIGAtRU5PTUVNYC4gVGhlIG9yaWdpbmFsIGNvZGUsIGhvd2V2ZXIsIGp1c3QgYmxpdGhlbHkgKmNhbGxlZCogYGluc2VydF9tZXRhcGFnZWAgd2l0aG91dCBjaGVja2luZyB0aGUgcmV0dXJuIHZhbHVlLiBTbywgaWYgdGhlIGFsbG9jYXRpb24gYm9tYmVkLCBgZm9saW8tJmd0O3ByaXZhdGVgIHdvdWxkIHN0YXkgYE5VTExgLCBidXQgdGhlIHByb2dyYW0gd291bGQganVzdCBrZWVwIGNodWdnaW5nIGFsb25nLgoKVGhhdCYjMzk7cyBhIGNsYXNzaWMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHNpdHVhdGlvbiB3YWl0aW5nIHRvIGhhcHBlbiwgb3IgcG90ZW50aWFsbHksIGEgYmlvIGdldHMgc3VibWl0dGVkIHdpdGhvdXQgaXRzIHByaXZhdGUgZGF0YSBzZXQgdXAgcmlnaHQsIGxlYWRpbmcgdG8gZ2FyYmFnZSBkYXRhIG9yIG90aGVyIHVuZGVmaW5lZCBiZWhhdmlvci4gVGhlIHBhdGNoIGFkZHJlc3NlcyB0aGlzIGJ5IGFjdHVhbGx5ICpjaGVja2luZyogdGhlIHJldHVybiB2YWx1ZSBvZiBgaW5zZXJ0X21ldGFwYWdlYCBhbmQgYnJlYWtpbmcgb3V0IG9mIHRoZSBsb29wIGlmIGl0JiMzOTtzIGFuIGVycm9yLgoKVGhlIGltcG9ydGFudCBwb2ludCBpcyB0aGF0IHRoaXMgaXMgKmp1c3QqIGEgc3RhbmRhcmQgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSBhbmQgYSBtaXNzaW5nIGVycm9yIGNoZWNrLiBga3phbGxvY19vYmpgICp6ZXJvZXMqIHRoZSBtZW1vcnkgaXQgYWxsb2NhdGVzLiBUaGVyZSYjMzk7cyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIGhlcmUuIElmIGBremFsbG9jX29iamAgZmFpbHMsIHdlJiMzOTtyZSBub3QgZGVhbGluZyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQsIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBwb2ludGVyIGJlaW5nIGBOVUxMYCB3aGVuIHRoZSBjb2RlICp0aGlua3MqIGl0JiMzOTtzIHZhbGlkLgoKTGV0IG1lIG1ha2Ugc3VyZS4uLklmIGBpbnNlcnRfbWV0YXBhZ2VgIGZhaWxzLCBgcmV0YCBiZWNvbWVzIGAtRU5PTUVNYCwgYW5kIHRoZSBsb29wIGJhaWxzIG91dC4gUHJldmlvdXNseSwgaXQgd291bGQgaGF2ZSBqdXN0IGtlcHQgZ29pbmchIFRoZSBvcmlnaW5hbCBjb2RlIHdvdWxkIGhhdmUgcmV0dXJuZWQgMCwgYWxsb3dpbmcgdGhlIGZvbGlvIHRvIGJlIHJlYWQgZXZlbiB0aG91Z2ggaXQmIzM5O3Mgbm90IHNldCB1cC4gVGhpcyBjb25maXJtcyBteSBpbml0aWFsIHRob3VnaHQ6IGp1c3QgYSBtaXNzaW5nIGVycm9yIGNoZWNrLgoKVGhlcmVmb3JlLCBLTVNBTiBpc24mIzM5O3QgcmVsZXZhbnQgaGVyZS4gS01TQU4gaXMgZm9yIGNhdGNoaW5nIHJlYWRzIG9mICp1bmluaXRpYWxpemVkKiBtZW1vcnksIG5vdCBtZW1vcnkgdGhhdCB3YXMgbmV2ZXIgYWxsb2NhdGVkIGNvcnJlY3RseSBpbiB0aGUgZmlyc3QgcGxhY2UsIG9yIG1lbW9yeSB0aGF0IHdhcyBhbGxvY2F0ZWQgYnV0IHRoZW4gbm90IGFzc2lnbmVkIHRvIHByb3Blcmx5LiBLQVNBTiBhbmQgc3RhbmRhcmQgY2hlY2tzIGZvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIHdpbGwgYmUgcGVyZmVjdGx5IHN1ZmZpY2llbnQgdG8gZGV0ZWN0IHRoaXMgYnVnLCBzaW5jZSBpdCYjMzk7cyBhbiBhY2Nlc3MgdG8gYSB6ZXJvLWZpbGxlZCBgZm9saW8tJmd0O3ByaXZhdGVgIG9yIGEgZGVyZWZlcmVuY2Ugb2YgYSBgTlVMTGAgcG9pbnRlci4KCkhlcmUmIzM5O3MgdGhlIHJlYXNvbmluZyB0byBkb2N1bWVudDogVGhlIHBhdGNoIGNvcnJlY3RseSBhZGRyZXNzZXMgYSBtaXNzaW5nIGVycm9yIGNoZWNrLiBgaW5zZXJ0X21ldGFwYWdlYCBjb3VsZCBmYWlsIGR1cmluZyB0aGUgYWxsb2NhdGlvbiBvZiBhIGBtZXRhX2FuY2hvcmAgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgd2hpY2ggcmV0dXJucyBgLUVOT01FTWAgb24gZmFpbHVyZS4gV2l0aG91dCB0aGUgcGF0Y2gsIHRoZSBjb2RlIHdvdWxkIGNvbnRpbnVlIHRvIHVzZSB0aGUgbWVtb3J5IGFzIGlmIGl0IGhhZCBiZWVuIHN1Y2Nlc3NmdWxseSBhbGxvY2F0ZWQsIHdoaWNoIG1heSBjYXVzZSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIG90aGVyIG1lbW9yeS1yZWxhdGVkIGlzc3VlcyB3aGVuIGFjY2Vzc2luZyBgZm9saW8tJmd0O3ByaXZhdGVgLiBIb3dldmVyLCB0aGUgbWVtb3J5IGlzIGluaXRpYWxpemVkIHZpYSBga3phbGxvY19vYmpgLCBzbyBpdCYjMzk7cyBub3QgYSByZWFkIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCBtZW1vcnkgZXJyb3IgZGV0ZWN0aW9uIGlzIHN1ZmZpY2llbnQsIGFuZCB0aGUgaXNzdWUgaXMgbm90IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLiBOZWVkc0tNU0FOIHNob3VsZCBiZSBmYWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtaXNzaW5nIGVycm9yIGNoZWNrIGZvciBgaW5zZXJ0X21ldGFwYWdlKClgLCB3aGljaCBjYW4gZmFpbCBhbmQgcmV0dXJuIGAtRU5PTUVNYCBpZiBga3phbGxvY19vYmooKWAgZmFpbHMgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBhIGBtZXRhX2FuY2hvcmAgc3RydWN0dXJlLiBXaXRob3V0IHRoaXMgY2hlY2ssIHRoZSBjb2RlIHdvdWxkIGNvbnRpbnVlIGV4ZWN1dGluZyBldmVuIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxlZCwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBvdGhlciBtZW1vcnktcmVsYXRlZCBidWdzIHdoZW4gYGZvbGlvLVx1MDAzZXByaXZhdGVgIGlzIGV4cGVjdGVkIHRvIGJlIGluaXRpYWxpemVkLiBUaGlzIGlzIGEgc3RhbmRhcmQgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSBhbmQgZXJyb3IgaGFuZGxpbmcgYnVnLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIFN0YW5kYXJkIEtBU0FOICh3aGljaCBkZXRlY3RzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIHVzZS1hZnRlci1mcmVlKSBhbmQgYmFzaWMga2VybmVsIGNyYXNoIGRldGVjdGlvbiAoZm9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZSBjb25zZXF1ZW5jZXMgb2YgdGhpcyBidWcuIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUgYmVjYXVzZSB0aGUgbWVtb3J5IGFsbG9jYXRlZCBieSBga3phbGxvY19vYmooKWAgaXMgYWxyZWFkeSB6ZXJvLWluaXRpYWxpemVkLCBhbmQgdGhlIGJ1ZyBkb2VzIG5vdCBpbnZvbHZlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFkZGluZyBieXRlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWlzc2luZyBlcnJvciBjaGVjayBmb3IgYGluc2VydF9tZXRhcGFnZSgpYCwgd2hpY2ggY2FuIGZhaWwgYW5kIHJldHVybiBgLUVOT01FTWAgaWYgYGt6YWxsb2Nfb2JqKClgIGZhaWxzIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgYSBgbWV0YV9hbmNob3JgIHN0cnVjdHVyZS4gV2l0aG91dCB0aGlzIGNoZWNrLCB0aGUgY29kZSB3b3VsZCBjb250aW51ZSBleGVjdXRpbmcgZXZlbiBpZiB0aGUgYWxsb2NhdGlvbiBmYWlsZWQsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3Igb3RoZXIgbWVtb3J5LXJlbGF0ZWQgYnVncyB3aGVuIGBmb2xpby1cdTAwM2Vwcml2YXRlYCBpcyBleHBlY3RlZCB0byBiZSBpbml0aWFsaXplZC4gVGhpcyBpcyBhIHN0YW5kYXJkIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUgYW5kIGVycm9yIGhhbmRsaW5nIGJ1Zy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBTdGFuZGFyZCBLQVNBTiAod2hpY2ggZGV0ZWN0cyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCB1c2UtYWZ0ZXItZnJlZSkgYW5kIGJhc2ljIGtlcm5lbCBjcmFzaCBkZXRlY3Rpb24gKGZvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSBhcmUgc3VmZmljaWVudCB0byBjYXRjaCB0aGUgY29uc2VxdWVuY2VzIG9mIHRoaXMgYnVnLiBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlIGJlY2F1c2UgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgYGt6YWxsb2Nfb2JqKClgIGlzIGFscmVhZHkgemVyby1pbml0aWFsaXplZCwgYW5kIHRoZSBidWcgZG9lcyBub3QgaW52b2x2ZSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgc3RhY2ssIGhlYXAsIG9yIHBhZGRpbmcgYnl0ZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjAwOjAwLjcyNDY5MDYzNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjgyNDUwMDgxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJKRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJqZnNfZmlsbF9zdXBlclwiLFxuICAgIFwiX19nZXRfbWV0YXBhZ2VcIixcbiAgICBcImRpUmVhZFwiLFxuICAgIFwiZGlXcml0ZVwiLFxuICAgIFwiZGJNb3VudFwiLFxuICAgIFwiZWFfZ2V0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1pc3NpbmcgZXJyb3IgY2hlY2sgZm9yIGBpbnNlcnRfbWV0YXBhZ2UoKWAsIHdoaWNoIGNhbiBmYWlsIGFuZCByZXR1cm4gYC1FTk9NRU1gIGlmIGBremFsbG9jX29iaigpYCBmYWlscyB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGEgYG1ldGFfYW5jaG9yYCBzdHJ1Y3R1cmUuIFdpdGhvdXQgdGhpcyBjaGVjaywgdGhlIGNvZGUgd291bGQgY29udGludWUgZXhlY3V0aW5nIGV2ZW4gaWYgdGhlIGFsbG9jYXRpb24gZmFpbGVkLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIG90aGVyIG1lbW9yeS1yZWxhdGVkIGJ1Z3Mgd2hlbiBgZm9saW8tXFx1MDAzZXByaXZhdGVgIGlzIGV4cGVjdGVkIHRvIGJlIGluaXRpYWxpemVkLiBUaGlzIGlzIGEgc3RhbmRhcmQgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSBhbmQgZXJyb3IgaGFuZGxpbmcgYnVnLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIFN0YW5kYXJkIEtBU0FOICh3aGljaCBkZXRlY3RzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIHVzZS1hZnRlci1mcmVlKSBhbmQgYmFzaWMga2VybmVsIGNyYXNoIGRldGVjdGlvbiAoZm9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIHRoZSBjb25zZXF1ZW5jZXMgb2YgdGhpcyBidWcuIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUgYmVjYXVzZSB0aGUgbWVtb3J5IGFsbG9jYXRlZCBieSBga3phbGxvY19vYmooKWAgaXMgYWxyZWFkeSB6ZXJvLWluaXRpYWxpemVkLCBhbmQgdGhlIGJ1ZyBkb2VzIG5vdCBpbnZvbHZlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBzdGFjaywgaGVhcCwgb3IgcGFkZGluZyBieXRlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbWV0YXBhZ2VfcmVhZF9mb2xpb2AgaW4gdGhlIEpGUyBmaWxlc3lzdGVtIHRvIHByb3Blcmx5IGhhbmRsZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyBmcm9tIGBpbnNlcnRfbWV0YXBhZ2VgLiBUaGlzIGVycm9yIHBhdGggaXMgcmVhY2hhYmxlIG9uIGFyY2hpdGVjdHVyZXMgd2hlcmUgUEFHRV9TSVpFIFxcdTAwM2UgNDA5NiAoZS5nLiwgYXJtNjQsIHBwYzY0KSBhbmQgZml4ZXMgYSBwb3RlbnRpYWwgYnVnIHdoZXJlIHRoZSBlcnJvciB3YXMgaWdub3JlZC4gSXQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIEpGUyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6MDA6MDAuNzI0Njk3NTk2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQzNjYxMzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDVhYTFmYzMxOTgzNmM5YmI1ZGJkNzliYTM2NTFlMWYwOTYxMzM4MlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxOTo1OTo1OCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX21ldGFwYWdlLmMgYi9mcy9qZnMvamZzX21ldGFwYWdlLmNcXG5pbmRleCA0MWZlMTJlNjQxY2VlLi5mZmJiMTg2ZTg1MGM2IDEwMDY0NFxcbi0tLSBhL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuY1xcbisrKyBiL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuY1xcbkBAIC01NzMsNiArNTczLDcgQEAgc3RhdGljIGludCBtZXRhcGFnZV9yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0aW50IHhsZW47XFxuIFxcdHVuc2lnbmVkIGludCBsZW47XFxuIFxcdGludCBvZmZzZXQ7XFxuK1xcdGludCByZXQgPSAwO1xcbiBcXG4gXFx0QlVHX09OKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbykpO1xcbiBcXHRwYWdlX3N0YXJ0ID0gZm9saW9fcG9zKGZvbGlvKSBcXHUwMDNlXFx1MDAzZSBpbm9kZS1cXHUwMDNlaV9ibGtiaXRzO1xcbkBAIC01ODMsOCArNTg0LDExIEBAIHN0YXRpYyBpbnQgbWV0YXBhZ2VfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdFxcdHBibG9jayA9IG1ldGFwYWdlX2dldF9ibG9ja3MoaW5vZGUsIHBhZ2Vfc3RhcnQgKyBibG9ja19vZmZzZXQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnhsZW4pO1xcbiBcXHRcXHRpZiAocGJsb2NrKSB7XFxuLVxcdFxcdFxcdGlmICghZm9saW8tXFx1MDAzZXByaXZhdGUpXFxuLVxcdFxcdFxcdFxcdGluc2VydF9tZXRhcGFnZShmb2xpbywgTlVMTCk7XFxuK1xcdFxcdFxcdGlmICghZm9saW8tXFx1MDAzZXByaXZhdGUpIHtcXG4rXFx0XFx0XFx0XFx0cmV0ID0gaW5zZXJ0X21ldGFwYWdlKGZvbGlvLCBOVUxMKTtcXG4rXFx0XFx0XFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0XFx0aW5jX2lvKGZvbGlvKTtcXG4gXFx0XFx0XFx0aWYgKGJpbylcXG4gXFx0XFx0XFx0XFx0c3VibWl0X2JpbyhiaW8pO1xcbkBAIC02MDcsNyArNjExLDcgQEAgc3RhdGljIGludCBtZXRhcGFnZV9yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0ZWxzZVxcbiBcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbiBcXG4tXFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIG1ldGFwYWdlX3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwX21hc2spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjAwOjAyLjA2OTIwNzIxMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEwNDk1NzkzNzAwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJKRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJqZnNfZmlsbF9zdXBlclwiLFxuICAgIFwiX19nZXRfbWV0YXBhZ2VcIixcbiAgICBcImRpUmVhZFwiLFxuICAgIFwiZGlXcml0ZVwiLFxuICAgIFwiZGJNb3VudFwiLFxuICAgIFwiZWFfZ2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYG1ldGFwYWdlX3JlYWRfZm9saW9gIGluIHRoZSBKRlMgZmlsZXN5c3RlbSB0byBwcm9wZXJseSBoYW5kbGUgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgZnJvbSBgaW5zZXJ0X21ldGFwYWdlYC4gVGhpcyBlcnJvciBwYXRoIGlzIHJlYWNoYWJsZSBvbiBhcmNoaXRlY3R1cmVzIHdoZXJlIFBBR0VfU0laRSBcXHUwMDNlIDQwOTYgKGUuZy4sIGFybTY0LCBwcGM2NCkgYW5kIGZpeGVzIGEgcG90ZW50aWFsIGJ1ZyB3aGVyZSB0aGUgZXJyb3Igd2FzIGlnbm9yZWQuIEl0IGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBKRlMgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQ1YWExZmMzMTk4MzZjOWJiNWRiZDc5YmEzNjUxZTFmMDk2MTMzODJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxOTo1OTo1OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuYyBiL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuY1xuaW5kZXggNDFmZTEyZTY0MWNlZS4uZmZiYjE4NmU4NTBjNiAxMDA2NDRcbi0tLSBhL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuY1xuKysrIGIvZnMvamZzL2pmc19tZXRhcGFnZS5jXG5AQCAtNTczLDYgKzU3Myw3IEBAIHN0YXRpYyBpbnQgbWV0YXBhZ2VfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRpbnQgeGxlbjtcbiBcdHVuc2lnbmVkIGludCBsZW47XG4gXHRpbnQgb2Zmc2V0O1xuK1x0aW50IHJldCA9IDA7XG4gXG4gXHRCVUdfT04oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSk7XG4gXHRwYWdlX3N0YXJ0ID0gZm9saW9fcG9zKGZvbGlvKSBcdTAwM2VcdTAwM2UgaW5vZGUtXHUwMDNlaV9ibGtiaXRzO1xuQEAgLTU4Myw4ICs1ODQsMTEgQEAgc3RhdGljIGludCBtZXRhcGFnZV9yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFx0cGJsb2NrID0gbWV0YXBhZ2VfZ2V0X2Jsb2Nrcyhpbm9kZSwgcGFnZV9zdGFydCArIGJsb2NrX29mZnNldCxcbiBcdFx0XHRcdFx0ICAgICBcdTAwMjZ4bGVuKTtcbiBcdFx0aWYgKHBibG9jaykge1xuLVx0XHRcdGlmICghZm9saW8tXHUwMDNlcHJpdmF0ZSlcbi1cdFx0XHRcdGluc2VydF9tZXRhcGFnZShmb2xpbywgTlVMTCk7XG4rXHRcdFx0aWYgKCFmb2xpby1cdTAwM2Vwcml2YXRlKSB7XG4rXHRcdFx0XHRyZXQgPSBpbnNlcnRfbWV0YXBhZ2UoZm9saW8sIE5VTEwpO1xuK1x0XHRcdFx0aWYgKHJldClcbitcdFx0XHRcdFx0YnJlYWs7XG4rXHRcdFx0fVxuIFx0XHRcdGluY19pbyhmb2xpbyk7XG4gXHRcdFx0aWYgKGJpbylcbiBcdFx0XHRcdHN1Ym1pdF9iaW8oYmlvKTtcbkBAIC02MDcsNyArNjExLDcgQEAgc3RhdGljIGludCBtZXRhcGFnZV9yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGVsc2VcbiBcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGJvb2wgbWV0YXBhZ2VfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnBfbWFzaylcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjAwOjAyLjA2OTIwODU0MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNzA1MzczOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgSkZTIE1ldGFwYWdlIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIEpGUyBmaWxlIHN5c3RlbSwgc3BlY2lmaWNhbGx5IGluIGBmcy9qZnMvamZzX21ldGFwYWdlLmNgLiBUaGV5J3ZlIG1vZGlmaWVkIHRoZSBgbWV0YXBhZ2VfcmVhZF9mb2xpb2AgZnVuY3Rpb24sIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJdCBzZWVtcyBsaWtlIHRoZXkncmUgemVyb2luZyBpbiBvbiBlcnJvciBoYW5kbGluZyByZWxhdGVkIHRvIGhvdyBtZXRhZGF0YSBwYWdlcyBhcmUgYnJvdWdodCBpbnRvIG1lbW9yeS5cblxuRnJvbSB3aGF0IEkgY2FuIHRlbGwsIHRoZSBrZXkgY2hhbmdlIGludm9sdmVzIGNoZWNraW5nIHRoZSByZXR1cm4gdmFsdWUgb2YgYGluc2VydF9tZXRhcGFnZShmb2xpbywgTlVMTClgIHdpdGhpbiB0aGF0IGBtZXRhcGFnZV9yZWFkX2ZvbGlvYCBmdW5jdGlvbi4gSWYgYGluc2VydF9tZXRhcGFnZWAgdGhyb3dzIGFuIGVycm9yLCB0aGUgcGF0Y2ggY29ycmVjdGx5IGJyZWFrcyBvdXQgb2YgdGhlIGxvb3AgYW5kIHJldHVybnMgdGhhdCBlcnJvci4gVGhhdOKAmXMgZ29vZCBwcmFjdGljZSB0byBtYWtlIHN1cmUgeW91IHJldHVybiB0aGUgZXJyb3IgY29kZS5cblxuTm93LCBJIG5lZWQgdG8gZGlnIGludG8gYG1ldGFwYWdlX3JlYWRfZm9saW9gIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgYGluc2VydF9tZXRhcGFnZWAgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBoZXJlLiBJIHdhbnQgdG8gc2VlIHdoYXQgc2NlbmFyaW9zIG1pZ2h0IHRyaWdnZXIgYW4gZXJyb3IgZnJvbSBgaW5zZXJ0X21ldGFwYWdlYCBhbmQgaWYgdGhlIGhhbmRsaW5nIGluIHRoaXMgcGF0Y2ggaXMgc3VmZmljaWVudC4gSXMgdGhlcmUgYW55IGNoYW5jZSBvZiByZXNvdXJjZSBsZWFrcyBvciBtaXNzZWQgZXJyb3IgY29uZGl0aW9ucyB0aGF0IGNvdWxkIGJlIGltcHJvdmVkPyBJIGFsc28gd2FudCB0byBjaGVjayB0aGUgcmVzdCBvZiB0aGUgY29kZSBmb3IgYW55IHJlbGF0ZWQgZXJyb3IgaGFuZGxpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMzIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDowMDowNi4yMzk3NDkwN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjE4NDEzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnNlcnRfbWV0YXBhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvamZzL2pmc19tZXRhcGFnZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2pmcy9qZnNfbWV0YXBhZ2UuYz04ND1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZXRhcGFnZSAqZm9saW9fdG9fbXAoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9mZnNldClcXG4tLVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy05Mi1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmM6OTM6c3RhdGljIGlubGluZSBpbnQgaW5zZXJ0X21ldGFwYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZXRhcGFnZSAqbXApXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTk0LXtcXG4tLVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYz0xNTY9c3RhdGljIGludCBfX21ldGFwYWdlX21pZ3JhdGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtMTc4LVxcdFxcdFxcdGNvbnRpbnVlO1xcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzoxNzk6XFx0XFx0aWYgKHVubGlrZWx5KGluc2VydF9tZXRhcGFnZShkc3QsIG1wKSkpIHtcXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtMTgwLVxcdFxcdFxcdC8qIElmIGVycm9yLCByb2xsLWJhY2sgcHJldmlvc2x5IGluc2VydGVkIHBhZ2VzICovXFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmM9MjA4PXN0YXRpYyBpbmxpbmUgc3RydWN0IG1ldGFwYWdlICpmb2xpb190b19tcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2Zmc2V0KVxcbi0tXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTIxMi1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmM6MjEzOnN0YXRpYyBpbmxpbmUgaW50IGluc2VydF9tZXRhcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWV0YXBhZ2UgKm1wKVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy0yMTQte1xcbi0tXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jPTIzMj1zdGF0aWMgaW50IF9fbWV0YXBhZ2VfbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy0yNDctXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jOjI0ODpcXHRpZiAodW5saWtlbHkoaW5zZXJ0X21ldGFwYWdlKGRzdCwgbXApKSlcXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtMjQ5LVxcdFxcdHJldHVybiAtRUFHQUlOO1xcbi0tXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jPTU2NT1zdGF0aWMgaW50IG1ldGFwYWdlX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTU4Ny1cXHRcXHRcXHRpZiAoIWZvbGlvLVxcdTAwM2Vwcml2YXRlKSB7XFxuZnMvamZzL2pmc19tZXRhcGFnZS5jOjU4ODpcXHRcXHRcXHRcXHRyZXQgPSBpbnNlcnRfbWV0YXBhZ2UoZm9saW8sIE5VTEwpO1xcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy01ODktXFx0XFx0XFx0XFx0aWYgKHJldClcXG4tLVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYz02ODg9c3RydWN0IG1ldGFwYWdlICpfX2dldF9tZXRhcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBsb25nIGxibG9jayxcXG4tLVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy03NzYtXFx0XFx0bXAtXFx1MDAzZWluZGV4ID0gbGJsb2NrO1xcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzo3Nzc6XFx0XFx0aWYgKHVubGlrZWx5KGluc2VydF9tZXRhcGFnZShmb2xpbywgbXApKSkge1xcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy03NzgtXFx0XFx0XFx0ZnJlZV9tZXRhcGFnZShtcCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjAwOjA2LjI5NTkzOThaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODEwNzk3ODUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIEpGUyBGaWxlc3lzdGVtOiBBIFRhcmdldCBBcHBlYXJzKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbWV0YXBhZ2VfcmVhZF9mb2xpb2Agd2l0aGluIGBmcy9qZnMvamZzX21ldGFwYWdlLmNgLiBSaWdodCwgdGhhdCdzIEpGUyDigJMgYSBmaWxlIHN5c3RlbSwgc3BlY2lmaWNhbGx5LiBNeSBleHBlcnQgaW50dWl0aW9uIGlzIGltbWVkaWF0ZWx5IHBpcXVlZDsgYW55IGxvdy1sZXZlbCBmaWxlc3lzdGVtIGNvZGUgbGlrZSB0aGlzIGlzIHByYWN0aWNhbGx5IGJlZ2dpbmcgZm9yIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbi4gVGhlIHBvdGVudGlhbCBmb3IgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3RoZXIgdnVsbmVyYWJpbGl0aWVzIGhlcmUgaXMgc2lnbmlmaWNhbnQuXG5cbk5vdywgYmVmb3JlIEkgZGl2ZSBpbiB0b28gZGVlcCwgbGV0J3MganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZy4gSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgSkZTIGZpbGVzeXN0ZW0gaXMgYWN0dWFsbHkgZW5hYmxlZCBhbmQgdGhhdCBhbnkgZGVwZW5kZW5jaWVzIGFyZSBhY2NvdW50ZWQgZm9yIGJlZm9yZSBJIGdvIHNldHRpbmcgdXAgbXkgZnV6emluZyBlbnZpcm9ubWVudC4gTm8gcG9pbnQgc3BlbmRpbmcgYSBidW5jaCBvZiB0aW1lIG9uIHNvbWV0aGluZyB0aGF0J3Mgbm90IGV2ZW4gYnVpbHQgaW50byB0aGUga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzkyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6MDA6MTAuMTA2NzQwNzIyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMjM4NDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBKRlNfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvamZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvamZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9qZnMvS2NvbmZpZzoyOmNvbmZpZyBKRlNfRlNcXG5mcy9qZnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJKRlMgZmlsZXN5c3RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDowMDoxMC4xNjY5ODUxOTFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODY0NTQwMjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpdmluZyBpbnRvIGBtZXRhcGFnZV9yZWFkX2ZvbGlvYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdGhlIGNvbmZpZyBpcyBkZWZpbml0ZWx5IHNldCB0byBgSkZTX0ZTYC4gUmlnaHQsIGdvdCBpdC4gTm93LCBteSBmb2N1cyBpcyBvbiB0aGlzIGBtZXRhcGFnZV9yZWFkX2ZvbGlvYCBmdW5jdGlvbi4gSG9sZCBvbi4uLiBpc24ndCB0aGF0IGEgc3RhdGljIGZ1bmN0aW9uPyBUaGF0J3MgaW50ZXJlc3RpbmcsIHVzdWFsbHkgbWVhbnMgaXQncyBsaW1pdGVkIGluIHNjb3BlLiBMZXQgbWUgcXVpY2tseSBjaGVjayBpZiBpdCdzIGFzc2lnbmVkIHRvIGFueSBzdHJ1Y3Q7IHRoYXQnbGwgZ2l2ZSBtZSBhIGJldHRlciBoYW5kbGUgb24gaXRzIGNvbnRleHQgYW5kIGhvdyBpdCdzIGJlaW5nIGNhbGxlZCB3aXRoaW4gdGhlIHN5c3RlbS4gR290dGEgZmlndXJlIG91dCBpdHMgYXNzb2NpYXRpb25zIVxuXG5cbiIsIklucHV0VG9rZW5zIjozNzI3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6MDA6MTMuMDMxNTI4OTUyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMDAzNTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1ldGFwYWdlX3JlYWRfZm9saW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvamZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9qZnMvamZzX21ldGFwYWdlLmM9NTUwPXN0YXRpYyBpbnQgbWV0YXBhZ2Vfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy01NjQtXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jOjU2NTpzdGF0aWMgaW50IG1ldGFwYWdlX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy01NjYte1xcbi0tXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jPTY3OT1jb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGpmc19tZXRhcGFnZV9hb3BzID0ge1xcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzo2ODA6XFx0LnJlYWRfZm9saW9cXHQ9IG1ldGFwYWdlX3JlYWRfZm9saW8sXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTY4MS1cXHQud3JpdGVwYWdlc1xcdD0gbWV0YXBhZ2Vfd3JpdGVwYWdlcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6MDA6MTMuMDk0NTM5NzUyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAyMzA2NDYwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBgamZzX21ldGFwYWdlX2FvcHMucmVhZF9mb2xpb2AgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgamZzX21ldGFwYWdlX2FvcHMucmVhZF9mb2xpb2AuIFRoZSBzeXN0ZW0gaGFzIGFzc2lnbmVkIHRoaXMgZnVuY3Rpb24gdG8gbWUsIGFuZCBteSBpbml0aWFsIHF1ZXN0aW9uIGlzLCB3aGVyZSBkb2VzIGl0IGxpdmUgaW4gdGhlIGJyb2FkZXIgcGljdHVyZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNhbGwgZ3JhcGguIElzIHRoZXJlIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiB0aGF0IGRpcmVjdGx5IGNhbGxzIGBqZnNfbWV0YXBhZ2VfYW9wcy5yZWFkX2ZvbGlvYCwgb3IgcGVyaGFwcyBpbmRpcmVjdGx5ICp1c2VzKiBpdCB3aXRoaW4gaXRzIGV4ZWN1dGlvbiBmbG93PyBJIG5lZWQgdG8gdHJhY2UgdGhpcyBmdW5jdGlvbidzIGRlcGVuZGVuY2llcy5cblxuTmV4dCwgSSBuZWVkIHRvIGxvb2sgZm9yIHdoZXJlIGBqZnNfbWV0YXBhZ2VfYW9wc2AgaXRzZWxmIGlzIGRlY2xhcmVkLCBhbmQgd2hlcmUgaXQgaXMgaW5zdGFudGlhdGVkIGFuZCB1c2VkLiBJJ2xsIGJldCBpdCdzIHNvbWV3aGVyZSBkZWVwIHdpdGhpbiB0aGUgSkZTIGZpbGUgc3lzdGVtIGltcGxlbWVudGF0aW9uLiBUaGUgZmlsZSBgZnMvamZzL2pmc19tb3VudC5jYCBvciBzb21ldGhpbmcgc2ltaWxhciBpbW1lZGlhdGVseSBjb21lcyB0byBtaW5kIGFzIGEgbGlrZWx5IGNhbmRpZGF0ZSDigJMgdGhhdCdzIG9mdGVuIHdoZXJlIHRoZSBjb3JlIG1vdW50IG9wdGlvbnMgYW5kIHN0cnVjdHVyZXMgZm9yIGEgZmlsZXN5c3RlbSBhcmUgZGVmaW5lZC4gSSdsbCBzdGFydCBieSBjaGVja2luZyB0aGVyZSwgYW5kIHRoZW4gZXhwYW5kIG15IHNlYXJjaCBhcyBuZWNlc3NhcnkuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNjksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDowMDoxNy4xMTc2MDc0NzFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MjgzMjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImpmc19tZXRhcGFnZV9hb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2pmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvamZzL2pmc19pbWFwLmM9NDE4PXN0cnVjdCBpbm9kZSAqZGlSZWFkU3BlY2lhbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbm9fdCBpbnVtLCBpbnQgc2Vjb25kYXJ5KVxcbi0tXFxuZnMvamZzL2pmc19pbWFwLmMtNDY4LVxcbmZzL2pmcy9qZnNfaW1hcC5jOjQ2OTpcXHRpcC1cXHUwMDNlaV9tYXBwaW5nLVxcdTAwM2VhX29wcyA9IFxcdTAwMjZqZnNfbWV0YXBhZ2VfYW9wcztcXG5mcy9qZnMvamZzX2ltYXAuYy00NzAtXFx0bWFwcGluZ19zZXRfZ2ZwX21hc2soaXAtXFx1MDAzZWlfbWFwcGluZywgR0ZQX05PRlMpO1xcbi0tXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jPTY2OT1zdGF0aWMgdm9pZCBtZXRhcGFnZV9pbnZhbGlkYXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsXFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtNjc4LVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzo2Nzk6Y29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBqZnNfbWV0YXBhZ2VfYW9wcyA9IHtcXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtNjgwLVxcdC5yZWFkX2ZvbGlvXFx0PSBtZXRhcGFnZV9yZWFkX2ZvbGlvLFxcbi0tXFxuZnMvamZzL2pmc19tZXRhcGFnZS5oPTEyMj1zdGF0aWMgaW5saW5lIHZvaWQgbWV0YXBhZ2VfaG9tZW9rKHN0cnVjdCBtZXRhcGFnZSAqbXApXFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmgtMTI4LVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuaDoxMjk6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgamZzX21ldGFwYWdlX2FvcHM7XFxuZnMvamZzL2pmc19tZXRhcGFnZS5oLTEzMC1cXG4tLVxcbmZzL2pmcy9zdXBlci5jPTQ0MT1zdGF0aWMgaW50IGpmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL2pmcy9zdXBlci5jLTUxNy1cXHRpbm9kZS1cXHUwMDNlaV9zaXplID0gYmRldl9ucl9ieXRlcyhzYi1cXHUwMDNlc19iZGV2KTtcXG5mcy9qZnMvc3VwZXIuYzo1MTg6XFx0aW5vZGUtXFx1MDAzZWlfbWFwcGluZy1cXHUwMDNlYV9vcHMgPSBcXHUwMDI2amZzX21ldGFwYWdlX2FvcHM7XFxuZnMvamZzL3N1cGVyLmMtNTE5LVxcdGlub2RlX2Zha2VfaGFzaChpbm9kZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjAwOjE3LjE3MjkwMDg3MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDU2MTc4NDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpdmluZyBpbnRvIEpGUyBCbG9jayBEZXZpY2UgTWFwcGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGUgSkZTIGZpbGVzeXN0ZW0gaGFuZGxlcyBpdHMgYmxvY2sgZGV2aWNlIG1hcHBpbmcuIEl0IHNlZW1zIGBqZnNfbWV0YXBhZ2VfYW9wc2AgaXMgdGhlIGtleS4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuIFRoYXQncyB0aGUgc3RydWN0dXJlIHRoYXQncyBnb2luZyB0byBtYW5hZ2UgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGZpbGUgc3lzdGVtJ3MgbWV0YWRhdGEgYW5kIHRoZSB1bmRlcmx5aW5nIGJsb2NrIGRldmljZS4gQW5kLCB0aGUgYHJlYWRfZm9saW9gIG9wZXJhdGlvbiBpcyB0aGUgb25lIHRoZSBWRlMgY2FsbHMgb24gdGhhdCBhb3BzIHN0cnVjdHVyZSB3aGVuIHRoZSBzeXN0ZW0gbmVlZHMgdG8gcmVhZCBmcm9tIHRoZSBibG9jayBkZXZpY2UgbWFwcGluZywgb3IgZm9yIHJlYWRpbmcgc3BlY2lhbCBpbm9kZXMuIFRoYXQncyBhIGNyaXRpY2FsIHBpZWNlLlxuXG5Ob3csIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBrZXkgZW50cnkgcG9pbnRzIGZvciBKRlMuIFRoaW5ncyBsaWtlIGBqZnNfbW91bnRgLCBgamZzX2ZpbGxfc3VwZXJgLCBgamZzX2lnZXRgLCBgamZzX2xvb2t1cGAsIGFuZCBgamZzX3JlYWRkaXJgLCBhcmUgYWxsIGdvb2QgY2FuZGlkYXRlcyB0byBmb2N1cyBvbiBhbmQgZ2V0IGEgc3Ryb25nIHVuZGVyc3RhbmRpbmcuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aG9zZSBhbmQgc2VlIGhvdyB0aGV5IHdvcmsgdG9nZXRoZXIgdG8gbWFrZSB0aGUgd2hvbGUgdGhpbmcgdGljay4gTGV0J3Mgc2VlIGlmIEkgY2FuIGZpbmQgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwMzgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6MDA6MjEuMjI5MDgyODFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTExMDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImpmc19maWxsX3N1cGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2pmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvamZzL3N1cGVyLmM9MzYxPXN0YXRpYyBpbnQgamZzX3JlY29uZmlndXJlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL2pmcy9zdXBlci5jLTQ0MC1cXG5mcy9qZnMvc3VwZXIuYzo0NDE6c3RhdGljIGludCBqZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuZnMvamZzL3N1cGVyLmMtNDQyLXtcXG4tLVxcbmZzL2pmcy9zdXBlci5jPTYzND1zdGF0aWMgaW50IGpmc19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuZnMvamZzL3N1cGVyLmMtNjM1LXtcXG5mcy9qZnMvc3VwZXIuYzo2MzY6XFx0cmV0dXJuIGdldF90cmVlX2JkZXYoZmMsIGpmc19maWxsX3N1cGVyKTtcXG5mcy9qZnMvc3VwZXIuYy02MzctfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDowMDoyMS4yNzQwMDAxOTlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEwODMwMjcwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ29uc2lkZXJpbmcgUG90ZW50aWFsIEVudHJ5IFBvaW50cyoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IGZ1bmN0aW9ucyBwb3RlbnRpYWxseSBpbnZvbHZlZCBpbiBzb21lIGtleSBhc3BlY3Qgb2YgdGhlIGZpbGUgc3lzdGVtLiBgamZzX2ZpbGxfc3VwZXJgIGlzIGRlZmluaXRlbHkgYSBzdHJvbmcgY29udGVuZGVyLCBhIGNsYXNzaWMgc3RhcnRpbmcgcG9pbnQgZm9yIHRoZSBmaWxlIHN5c3RlbSdzIGluaXRpYWxpemF0aW9uLiBCdXQsIGxldCdzIG5vdCBqdW1wIHRvIGNvbmNsdXNpb25zLlxuXG5JJ20gYWxzbyBwb25kZXJpbmcgYF9fZ2V0X21ldGFwYWdlYCBhbmQgYHJlYWRfbWV0YXBhZ2VgLiBUaGV5IHNlZW0gcmVsYXRlZCB0byBob3cgbWV0YWRhdGEsIHNwZWNpZmljYWxseSBtZXRhcGFnZXMsIGFyZSBoYW5kbGVkLiBEZXBlbmRpbmcgb24gd2hhdCB3ZSdyZSBpbnZlc3RpZ2F0aW5nLCB0aG9zZSBjb3VsZCBiZSBjcnVjaWFsLiBJdCdzIHRvbyBlYXJseSB0byBjaG9vc2UgZGVmaW5pdGl2ZWx5LCBidXQgSSdsbCBtYWtlIGEgbm90ZSBvZiBib3RoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjEyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6MDA6MjQuMzgyMzA1MDM4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODk4OTgxMjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19nZXRfbWV0YXBhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvamZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9qZnMvamZzX21ldGFwYWdlLmM9Njc5PWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgamZzX21ldGFwYWdlX2FvcHMgPSB7XFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtNjg3LVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzo2ODg6c3RydWN0IG1ldGFwYWdlICpfX2dldF9tZXRhcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBsb25nIGxibG9jayxcXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtNjg5LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBzaXplLCBpbnQgYWJzb2x1dGUsXFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtNjk5LVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzo3MDA6XFx0amZzX2luZm8oXFxcIl9fZ2V0X21ldGFwYWdlOiBpbm8gPSAlbGx1LCBsYmxvY2sgPSAweCVseCwgYWJzPSVkXFxcIixcXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtNzAxLVxcdFxcdCBpbm9kZS1cXHUwMDNlaV9pbm8sIGxibG9jaywgYWJzb2x1dGUpO1xcbi0tXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTc4OS1cXHRmb2xpb191bmxvY2soZm9saW8pO1xcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzo3OTA6XFx0amZzX2luZm8oXFxcIl9fZ2V0X21ldGFwYWdlOiByZXR1cm5pbmcgPSAweCVwIGRhdGEgPSAweCVwXFxcIiwgbXAsIG1wLVxcdTAwM2VkYXRhKTtcXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtNzkxLVxcdHJldHVybiBtcDtcXG4tLVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuaD00OT1leHRlcm4gdm9pZCBtZXRhcGFnZV9leGl0KHZvaWQpO1xcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuaDo1MDpleHRlcm4gc3RydWN0IG1ldGFwYWdlICpfX2dldF9tZXRhcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuaC01MS1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgbGJsb2NrLCB1bnNpZ25lZCBpbnQgc2l6ZSxcXG4tLVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuaC01NC0jZGVmaW5lIHJlYWRfbWV0YXBhZ2UoaW5vZGUsIGxibG9jaywgc2l6ZSwgYWJzb2x1dGUpXFxcXFxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuaDo1NTpcXHQgX19nZXRfbWV0YXBhZ2UoaW5vZGUsIGxibG9jaywgc2l6ZSwgYWJzb2x1dGUsIGZhbHNlKVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuaC01Ni1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmgtNTctI2RlZmluZSBnZXRfbWV0YXBhZ2UoaW5vZGUsIGxibG9jaywgc2l6ZSwgYWJzb2x1dGUpXFxcXFxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuaDo1ODpcXHQgX19nZXRfbWV0YXBhZ2UoaW5vZGUsIGxibG9jaywgc2l6ZSwgYWJzb2x1dGUsIHRydWUpXFxuZnMvamZzL2pmc19tZXRhcGFnZS5oLTU5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDowMDoyNC43NzIyMDc2NzRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA1ODM4MTEwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCB3aXRoIGEgZm9jdXMgZm9yIGFuIGV4cGVydCBsaWtlIHlvdXJzZWxmOlxuXG4qKklkZW50aWZ5aW5nIEtleSBLZXJuZWwgU3ltYm9scyBmb3IgQW5hbHlzaXMqKlxuXG5SaWdodCwgbGV0J3Mgc2VlLiBgX19nZXRfbWV0YXBhZ2VgIGlzIGV4cG9ydGVkLCBtZWFuaW5nIGl0J3MgYSBjcml0aWNhbCBlbnRyeSBwb2ludCBvciBmdW5jdGlvbiBwb3RlbnRpYWxseSB1c2VkIGJ5IG90aGVyIG1vZHVsZXMsIGFuZCBpdCdzIG5vbi1zdGF0aWMsIHNvIGl0J3MgZ2xvYmFsbHkgdmlzaWJsZSB3aXRoaW4gdGhlIHJlbGV2YW50IG5hbWVzcGFjZS4gSXQgbG9va3MgbGlrZSBpdCdzIGEgcHJldHR5IGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBkZWVwZXIuIEl0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdCBhcyBhIGxpa2VseSBmb2N1cyBzeW1ib2wgZm9yIGRlZXBlciBhbmFseXNpcy5cblxuQW5kIGBqZnNfZmlsbF9zdXBlcmAgaXMgYW5vdGhlciBnb29kIG9uZS4gQmFzZWQgb24gaXRzIG5hbWUsIGl0J3Mgb2J2aW91c2x5IHJlbGF0ZWQgdG8gdGhlIGZpbGVzeXN0ZW0uIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBsb29rIGludG8gdGhhdC5cblxuTm93LCBsZXQgbWUgc2VlIGlmIEkgY2FuIGZpbmQgc29tZSBvdGhlciBwb3RlbnRpYWxseSB2YWx1YWJsZSBjYW5kaWRhdGVzIGZvciBkZWVwZXIgYW5hbHlzaXMuIFRoZXJlJ3MgcHJvYmFibHkgbW9yZS4uLiBUaW1lIHRvIHN0YXJ0IGxvb2tpbmcgYXJvdW5kIGZvciByZWxhdGVkIHN5bWJvbHMuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ0NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjAwOjI4LjgzMDU5MjA0M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA4ODIyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVhZF9tZXRhcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9qZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2pmcy9qZnNfYnRyZWUuaD0xNz1zdHJ1Y3QgYnRwYWdlIHtcXG4tLVxcbmZzL2pmcy9qZnNfYnRyZWUuaC02My1cXHR7XFxcXFxcbmZzL2pmcy9qZnNfYnRyZWUuaDo2NDpcXHRcXHRNUCA9IHJlYWRfbWV0YXBhZ2UoKElQKSwgQk4sIFNJWkUsIDEpO1xcXFxcXG5mcy9qZnMvamZzX2J0cmVlLmgtNjUtXFx0XFx0aWYgKE1QKSB7XFxcXFxcbi0tXFxuZnMvamZzL2pmc19kbWFwLmM9MjQwPWludCBkYk1vdW50KHN0cnVjdCBpbm9kZSAqaXBibWFwKVxcbi0tXFxuZnMvamZzL2pmc19kbWFwLmMtMjU1LVxcdC8qIHJlYWQgdGhlIG9uLWRpc2sgYm1hcCBkZXNjcmlwdG9yLiAqL1xcbmZzL2pmcy9qZnNfZG1hcC5jOjI1NjpcXHRtcCA9IHJlYWRfbWV0YXBhZ2UoaXBibWFwLFxcbmZzL2pmcy9qZnNfZG1hcC5jLTI1Ny1cXHRcXHRcXHQgICBCTUFQQkxLTk8gXFx1MDAzY1xcdTAwM2MgSkZTX1NCSShpcGJtYXAtXFx1MDAzZWlfc2IpLVxcdTAwM2VsMm5icGVycGFnZSxcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jPTM2Mz1pbnQgZGJTeW5jKHN0cnVjdCBpbm9kZSAqaXBibWFwKVxcbi0tXFxuZnMvamZzL2pmc19kbWFwLmMtMzczLVxcdC8qIGdldCB0aGUgYnVmZmVyIGZvciB0aGUgb24tZGlzayBibWFwIGRlc2NyaXB0b3IuICovXFxuZnMvamZzL2pmc19kbWFwLmM6Mzc0OlxcdG1wID0gcmVhZF9tZXRhcGFnZShpcGJtYXAsXFxuZnMvamZzL2pmc19kbWFwLmMtMzc1LVxcdFxcdFxcdCAgIEJNQVBCTEtOTyBcXHUwMDNjXFx1MDAzYyBKRlNfU0JJKGlwYm1hcC1cXHUwMDNlaV9zYiktXFx1MDAzZWwybmJwZXJwYWdlLFxcbi0tXFxuZnMvamZzL2pmc19kbWFwLmMtMzc3LVxcdGlmIChtcCA9PSBOVUxMKSB7XFxuZnMvamZzL2pmc19kbWFwLmM6Mzc4OlxcdFxcdGpmc19lcnIoXFxcImRiU3luYzogcmVhZF9tZXRhcGFnZSBmYWlsZWQhXFxcIik7XFxuZnMvamZzL2pmc19kbWFwLmMtMzc5LVxcdFxcdHJldHVybiAtRUlPO1xcbi0tXFxuZnMvamZzL2pmc19kbWFwLmM9NDMxPWludCBkYkZyZWUoc3RydWN0IGlub2RlICppcCwgczY0IGJsa25vLCBzNjQgbmJsb2NrcylcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jLTQ3MS1cXHRcXHRsYmxrbm8gPSBCTEtUT0RNQVAoYmxrbm8sIGJtcC1cXHUwMDNlZGJfbDJuYnBlcnBhZ2UpO1xcbmZzL2pmcy9qZnNfZG1hcC5jOjQ3MjpcXHRcXHRtcCA9IHJlYWRfbWV0YXBhZ2UoaXBibWFwLCBsYmxrbm8sIFBTSVpFLCAwKTtcXG5mcy9qZnMvamZzX2RtYXAuYy00NzMtXFx0XFx0aWYgKG1wID09IE5VTEwpIHtcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jPTUyNT1kYlVwZGF0ZVBNYXAoc3RydWN0IGlub2RlICppcGJtYXAsXFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYy01NjUtXFxuZnMvamZzL2pmc19kbWFwLmM6NTY2OlxcdFxcdFxcdG1wID0gcmVhZF9tZXRhcGFnZShibXAtXFx1MDAzZWRiX2lwYm1hcCwgbGJsa25vLCBQU0laRSxcXG5mcy9qZnMvamZzX2RtYXAuYy01NjctXFx0XFx0XFx0XFx0XFx0ICAgMCk7XFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYz04MDE9aW50IGRiQWxsb2Moc3RydWN0IGlub2RlICppcCwgczY0IGhpbnQsIHM2NCBuYmxvY2tzLCBzNjQgKiByZXN1bHRzKVxcbi0tXFxuZnMvamZzL2pmc19kbWFwLmMtODgyLVxcdFxcdGxibGtubyA9IEJMS1RPRE1BUChibGtubywgYm1wLVxcdTAwM2VkYl9sMm5icGVycGFnZSk7XFxuZnMvamZzL2pmc19kbWFwLmM6ODgzOlxcdFxcdG1wID0gcmVhZF9tZXRhcGFnZShpcGJtYXAsIGxibGtubywgUFNJWkUsIDApO1xcbmZzL2pmcy9qZnNfZG1hcC5jLTg4NC1cXHRcXHRpZiAobXAgPT0gTlVMTClcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jPTEwNTk9c3RhdGljIGludCBkYkV4dGVuZChzdHJ1Y3QgaW5vZGUgKmlwLCBzNjQgYmxrbm8sIHM2NCBuYmxvY2tzLCBzNjQgYWRkbmJsb2NrcylcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jLTExMTItXFx0bGJsa25vID0gQkxLVE9ETUFQKGV4dGJsa25vLCBibXAtXFx1MDAzZWRiX2wybmJwZXJwYWdlKTtcXG5mcy9qZnMvamZzX2RtYXAuYzoxMTEzOlxcdG1wID0gcmVhZF9tZXRhcGFnZShpcGJtYXAsIGxibGtubywgUFNJWkUsIDApO1xcbmZzL2pmcy9qZnNfZG1hcC5jLTExMTQtXFx0aWYgKG1wID09IE5VTEwpIHtcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jPTEzOTk9ZGJBbGxvY0FHKHN0cnVjdCBibWFwICogYm1wLCBpbnQgYWdubywgczY0IG5ibG9ja3MsIGludCBsMm5iLCBzNjQgKiByZXN1bHRzKVxcbi0tXFxuZnMvamZzL2pmc19kbWFwLmMtMTQ1NS1cXHRsYmxrbm8gPSBCTEtUT0NUTChibGtubywgYm1wLVxcdTAwM2VkYl9sMm5icGVycGFnZSwgYm1wLVxcdTAwM2VkYl9hZ2xldmVsKTtcXG5mcy9qZnMvamZzX2RtYXAuYzoxNDU2OlxcdG1wID0gcmVhZF9tZXRhcGFnZShibXAtXFx1MDAzZWRiX2lwYm1hcCwgbGJsa25vLCBQU0laRSwgMCk7XFxuZnMvamZzL2pmc19kbWFwLmMtMTQ1Ny1cXHRpZiAobXAgPT0gTlVMTClcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jPTE3Njg9c3RhdGljIGludCBkYkZpbmRDdGwoc3RydWN0IGJtYXAgKiBibXAsIGludCBsMm5iLCBpbnQgbGV2ZWwsIHM2NCAqIGJsa25vKVxcbi0tXFxuZnMvamZzL2pmc19kbWFwLmMtMTc4NS1cXHRcXHRsYmxrbm8gPSBCTEtUT0NUTChiLCBibXAtXFx1MDAzZWRiX2wybmJwZXJwYWdlLCBsZXYpO1xcbmZzL2pmcy9qZnNfZG1hcC5jOjE3ODY6XFx0XFx0bXAgPSByZWFkX21ldGFwYWdlKGJtcC1cXHUwMDNlZGJfaXBibWFwLCBsYmxrbm8sIFBTSVpFLCAwKTtcXG5mcy9qZnMvamZzX2RtYXAuYy0xNzg3LVxcdFxcdGlmIChtcCA9PSBOVUxMKVxcbi0tXFxuZnMvamZzL2pmc19kbWFwLmM9MTg4Nz1kYkFsbG9jQ3RsKHN0cnVjdCBibWFwICogYm1wLCBzNjQgbmJsb2NrcywgaW50IGwybmIsIHM2NCBibGtubywgczY0ICogcmVzdWx0cylcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jLTE4OTktXFx0XFx0bGJsa25vID0gQkxLVE9ETUFQKGJsa25vLCBibXAtXFx1MDAzZWRiX2wybmJwZXJwYWdlKTtcXG5mcy9qZnMvamZzX2RtYXAuYzoxOTAwOlxcdFxcdG1wID0gcmVhZF9tZXRhcGFnZShibXAtXFx1MDAzZWRiX2lwYm1hcCwgbGJsa25vLCBQU0laRSwgMCk7XFxuZnMvamZzL2pmc19kbWFwLmMtMTkwMS1cXHRcXHRpZiAobXAgPT0gTlVMTClcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jLTE5MzEtXFx0XFx0bGJsa25vID0gQkxLVE9ETUFQKGIsIGJtcC1cXHUwMDNlZGJfbDJuYnBlcnBhZ2UpO1xcbmZzL2pmcy9qZnNfZG1hcC5jOjE5MzI6XFx0XFx0bXAgPSByZWFkX21ldGFwYWdlKGJtcC1cXHUwMDNlZGJfaXBibWFwLCBsYmxrbm8sIFBTSVpFLCAwKTtcXG5mcy9qZnMvamZzX2RtYXAuYy0xOTMzLVxcdFxcdGlmIChtcCA9PSBOVUxMKSB7XFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYy0xOTg0LVxcdFxcdGxibGtubyA9IEJMS1RPRE1BUChiLCBibXAtXFx1MDAzZWRiX2wybmJwZXJwYWdlKTtcXG5mcy9qZnMvamZzX2RtYXAuYzoxOTg1OlxcdFxcdG1wID0gcmVhZF9tZXRhcGFnZShibXAtXFx1MDAzZWRiX2lwYm1hcCwgbGJsa25vLCBQU0laRSwgMCk7XFxuZnMvamZzL2pmc19kbWFwLmMtMTk4Ni1cXHRcXHRpZiAobXAgPT0gTlVMTCkge1xcbi0tXFxuZnMvamZzL2pmc19kbWFwLmM9MjU1Nz1kYkFkakN0bChzdHJ1Y3QgYm1hcCAqIGJtcCwgczY0IGJsa25vLCBpbnQgbmV3dmFsLCBpbnQgYWxsb2MsIGludCBsZXZlbClcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jLTI1NjktXFx0bGJsa25vID0gQkxLVE9DVEwoYmxrbm8sIGJtcC1cXHUwMDNlZGJfbDJuYnBlcnBhZ2UsIGxldmVsKTtcXG5mcy9qZnMvamZzX2RtYXAuYzoyNTcwOlxcdG1wID0gcmVhZF9tZXRhcGFnZShibXAtXFx1MDAzZWRiX2lwYm1hcCwgbGJsa25vLCBQU0laRSwgMCk7XFxuZnMvamZzL2pmc19kbWFwLmMtMjU3MS1cXHRpZiAobXAgPT0gTlVMTClcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jPTMyNzg9aW50IGRiQWxsb2NCb3R0b21VcChzdHJ1Y3QgaW5vZGUgKmlwLCBzNjQgYmxrbm8sIHM2NCBuYmxvY2tzKVxcbi0tXFxuZnMvamZzL2pmc19kbWFwLmMtMzMwMy1cXHRcXHRsYmxrbm8gPSBCTEtUT0RNQVAoYmxrbm8sIGJtcC1cXHUwMDNlZGJfbDJuYnBlcnBhZ2UpO1xcbmZzL2pmcy9qZnNfZG1hcC5jOjMzMDQ6XFx0XFx0bXAgPSByZWFkX21ldGFwYWdlKGlwYm1hcCwgbGJsa25vLCBQU0laRSwgMCk7XFxuZnMvamZzL2pmc19kbWFwLmMtMzMwNS1cXHRcXHRpZiAobXAgPT0gTlVMTCkge1xcbi0tXFxuZnMvamZzL2pmc19kbWFwLmM9MzQ1ND1pbnQgZGJFeHRlbmRGUyhzdHJ1Y3QgaW5vZGUgKmlwYm1hcCwgczY0IGJsa25vLFxcdHM2NCBuYmxvY2tzKVxcbi0tXFxuZnMvamZzL2pmc19kbWFwLmMtMzUzNy1cXHRwID0gQk1BUEJMS05PICsgbmJwZXJwYWdlO1xcdC8qIEwyIHBhZ2UgKi9cXG5mcy9qZnMvamZzX2RtYXAuYzozNTM4OlxcdGwybXAgPSByZWFkX21ldGFwYWdlKGlwYm1hcCwgcCwgUFNJWkUsIDApO1xcbmZzL2pmcy9qZnNfZG1hcC5jLTM1MzktXFx0aWYgKCFsMm1wKSB7XFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYy0zNTYxLVxcdFxcdFxcdC8qIHJlYWQgaW4gTDEgcGFnZTogKGJsa25vIFxcdTAwMjYgKE1BWEwxU0laRSAtIDEpKSAqL1xcbmZzL2pmcy9qZnNfZG1hcC5jOjM1NjI6XFx0XFx0XFx0bDFtcCA9IHJlYWRfbWV0YXBhZ2UoaXBibWFwLCBwLCBQU0laRSwgMCk7XFxuZnMvamZzL2pmc19kbWFwLmMtMzU2My1cXHRcXHRcXHRpZiAobDFtcCA9PSBOVUxMKVxcbi0tXFxuZnMvamZzL2pmc19kbWFwLmMtMzYwMS1cXG5mcy9qZnMvamZzX2RtYXAuYzozNjAyOlxcdFxcdFxcdFxcdGwwbXAgPSByZWFkX21ldGFwYWdlKGlwYm1hcCwgcCwgUFNJWkUsIDApO1xcbmZzL2pmcy9qZnNfZG1hcC5jLTM2MDMtXFx0XFx0XFx0XFx0aWYgKGwwbXAgPT0gTlVMTClcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jLTM2NDUtXFx0XFx0XFx0XFx0XFx0LyogcmVhZCBpbiBkbWFwIHBhZ2U6ICovXFxuZnMvamZzL2pmc19kbWFwLmM6MzY0NjpcXHRcXHRcXHRcXHRcXHRtcCA9IHJlYWRfbWV0YXBhZ2UoaXBibWFwLCBwLFxcbmZzL2pmcy9qZnNfZG1hcC5jLTM2NDctXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgUFNJWkUsIDApO1xcbi0tXFxuZnMvamZzL2pmc19kbWFwLmMtMzY1Mi1cXHRcXHRcXHRcXHRcXHQvKiBhc3NpZ24vaW5pdCBkbWFwIHBhZ2UgKi9cXG5mcy9qZnMvamZzX2RtYXAuYzozNjUzOlxcdFxcdFxcdFxcdFxcdG1wID0gcmVhZF9tZXRhcGFnZShpcGJtYXAsIHAsXFxuZnMvamZzL2pmc19kbWFwLmMtMzY1NC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBQU0laRSwgMCk7XFxuLS1cXG5mcy9qZnMvamZzX2R0cmVlLmM9MTkzPXN0YXRpYyBzdHJ1Y3QgbWV0YXBhZ2UgKnJlYWRfaW5kZXhfcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzNjQgYmxrbm8pXFxuLS1cXG5mcy9qZnMvamZzX2R0cmVlLmMtMjAzLVxcbmZzL2pmcy9qZnNfZHRyZWUuYzoyMDQ6XFx0cmV0dXJuIHJlYWRfbWV0YXBhZ2UoaW5vZGUsIHhhZGRyLCBQU0laRSwgMSk7XFxuZnMvamZzL2pmc19kdHJlZS5jLTIwNS19XFxuLS1cXG5mcy9qZnMvamZzX2R0cmVlLmM9MzE5PXN0YXRpYyB1MzIgYWRkX2luZGV4KHRpZF90IHRpZCwgc3RydWN0IGlub2RlICppcCwgczY0IGJuLCBpbnQgc2xvdClcXG4tLVxcbmZzL2pmcy9qZnNfZHRyZWUuYy00NTEtXFx0aWYgKCFtcCkge1xcbmZzL2pmcy9qZnNfZHRyZWUuYzo0NTI6XFx0XFx0amZzX2VycihcXFwiYWRkX2luZGV4OiBnZXQvcmVhZF9tZXRhcGFnZSBmYWlsZWQhXFxcIik7XFxuZnMvamZzL2pmc19kdHJlZS5jLTQ1My1cXHRcXHRnb3RvIGNsZWFuX3VwO1xcbi0tXFxuZnMvamZzL2pmc19pbWFwLmM9OTQ9aW50IGRpTW91bnQoc3RydWN0IGlub2RlICppcGltYXApXFxuLS1cXG5mcy9qZnMvamZzX2ltYXAuYy0xMTAtXFxuZnMvamZzL2pmc19pbWFwLmM6MTExOlxcdG1wID0gcmVhZF9tZXRhcGFnZShpcGltYXAsXFxuZnMvamZzL2pmc19pbWFwLmMtMTEyLVxcdFxcdFxcdCAgIElNQVBCTEtOTyBcXHUwMDNjXFx1MDAzYyBKRlNfU0JJKGlwaW1hcC1cXHUwMDNlaV9zYiktXFx1MDAzZWwybmJwZXJwYWdlLFxcbi0tXFxuZnMvamZzL2pmc19pbWFwLmM9MjkwPWludCBkaVJlYWQoc3RydWN0IGlub2RlICppcClcXG4tLVxcbmZzL2pmcy9qZnNfaW1hcC5jLTM2Ni1cXHQvKiByZWFkIHRoZSBwYWdlIG9mIGRpc2sgaW5vZGUgKi9cXG5mcy9qZnMvamZzX2ltYXAuYzozNjc6XFx0bXAgPSByZWFkX21ldGFwYWdlKGlwaW1hcCwgcGFnZW5vIFxcdTAwM2NcXHUwMDNjIHNiaS1cXHUwMDNlbDJuYnBlcnBhZ2UsIFBTSVpFLCAxKTtcXG5mcy9qZnMvamZzX2ltYXAuYy0zNjgtXFx0aWYgKCFtcCkge1xcbmZzL2pmcy9qZnNfaW1hcC5jOjM2OTpcXHRcXHRqZnNfZXJyKFxcXCJkaVJlYWQ6IHJlYWRfbWV0YXBhZ2UgZmFpbGVkXFxcIik7XFxuZnMvamZzL2pmc19pbWFwLmMtMzcwLVxcdFxcdHJldHVybiAtRUlPO1xcbi0tXFxuZnMvamZzL2pmc19pbWFwLmM9NDE4PXN0cnVjdCBpbm9kZSAqZGlSZWFkU3BlY2lhbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbm9fdCBpbnVtLCBpbnQgc2Vjb25kYXJ5KVxcbi0tXFxuZnMvamZzL2pmc19pbWFwLmMtNDQ2LVxcdC8qIHJlYWQgdGhlIHBhZ2Ugb2YgZml4ZWQgZGlzayBpbm9kZSAoQUlUKSBpbiByYXcgbW9kZSAqL1xcbmZzL2pmcy9qZnNfaW1hcC5jOjQ0NzpcXHRtcCA9IHJlYWRfbWV0YXBhZ2UoaXAsIGFkZHJlc3MgXFx1MDAzY1xcdTAwM2Mgc2JpLVxcdTAwM2VsMm5icGVycGFnZSwgUFNJWkUsIDEpO1xcbmZzL2pmcy9qZnNfaW1hcC5jLTQ0OC1cXHRpZiAobXAgPT0gTlVMTCkge1xcbi0tXFxuZnMvamZzL2pmc19pbWFwLmM9NTAwPXZvaWQgZGlXcml0ZVNwZWNpYWwoc3RydWN0IGlub2RlICppcCwgaW50IHNlY29uZGFyeSlcXG4tLVxcbmZzL2pmcy9qZnNfaW1hcC5jLTUxNy1cXHQvKiByZWFkIHRoZSBwYWdlIG9mIGZpeGVkIGRpc2sgaW5vZGUgKEFJVCkgaW4gcmF3IG1vZGUgKi9cXG5mcy9qZnMvamZzX2ltYXAuYzo1MTg6XFx0bXAgPSByZWFkX21ldGFwYWdlKGlwLCBhZGRyZXNzIFxcdTAwM2NcXHUwMDNjIHNiaS1cXHUwMDNlbDJuYnBlcnBhZ2UsIFBTSVpFLCAxKTtcXG5mcy9qZnMvamZzX2ltYXAuYy01MTktXFx0aWYgKG1wID09IE5VTEwpIHtcXG4tLVxcbmZzL2pmcy9qZnNfaW1hcC5jPTU4MT1pbnQgZGlXcml0ZSh0aWRfdCB0aWQsIHN0cnVjdCBpbm9kZSAqaXApXFxuLS1cXG5mcy9qZnMvamZzX2ltYXAuYy02MzgtICAgICAgcmV0cnk6XFxuZnMvamZzL2pmc19pbWFwLmM6NjM5OlxcdG1wID0gcmVhZF9tZXRhcGFnZShpcGltYXAsIHBhZ2VubyBcXHUwMDNjXFx1MDAzYyBzYmktXFx1MDAzZWwybmJwZXJwYWdlLCBQU0laRSwgMSk7XFxuZnMvamZzL2pmc19pbWFwLmMtNjQwLVxcdGlmICghbXApXFxuLS1cXG5mcy9qZnMvamZzX2ltYXAuYz0yNjYzPXN0YXRpYyBpbnQgZGlJQUdSZWFkKHN0cnVjdCBpbm9tYXAgKiBpbWFwLCBpbnQgaWFnbm8sIHN0cnVjdCBtZXRhcGFnZSAqKiBtcHApXFxuLS1cXG5mcy9qZnMvamZzX2ltYXAuYy0yNjcxLVxcdC8qIHJlYWQgdGhlIGlhZy4gKi9cXG5mcy9qZnMvamZzX2ltYXAuYzoyNjcyOlxcdCptcHAgPSByZWFkX21ldGFwYWdlKGlwaW1hcCwgYmxrbm8sIFBTSVpFLCAwKTtcXG5mcy9qZnMvamZzX2ltYXAuYy0yNjczLVxcdGlmICgqbXBwID09IE5VTEwpIHtcXG4tLVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuaD01MD1leHRlcm4gc3RydWN0IG1ldGFwYWdlICpfX2dldF9tZXRhcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvamZzL2pmc19tZXRhcGFnZS5oLTUzLVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuaDo1NDojZGVmaW5lIHJlYWRfbWV0YXBhZ2UoaW5vZGUsIGxibG9jaywgc2l6ZSwgYWJzb2x1dGUpXFxcXFxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuaC01NS1cXHQgX19nZXRfbWV0YXBhZ2UoaW5vZGUsIGxibG9jaywgc2l6ZSwgYWJzb2x1dGUsIGZhbHNlKVxcbi0tXFxuZnMvamZzL3hhdHRyLmM9MzUxPXN0YXRpYyBpbnQgZWFfcmVhZChzdHJ1Y3QgaW5vZGUgKmlwLCBzdHJ1Y3QgamZzX2VhX2xpc3QgKmVhbGlzdClcXG4tLVxcbmZzL2pmcy94YXR0ci5jLTM5NS1cXG5mcy9qZnMveGF0dHIuYzozOTY6XFx0XFx0aWYgKCEobXAgPSByZWFkX21ldGFwYWdlKGlwLCBibGtubyArIGksIGJ5dGVzX3RvX3JlYWQsIDEpKSlcXG5mcy9qZnMveGF0dHIuYy0zOTctXFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuLS1cXG5mcy9qZnMveGF0dHIuYz00MjY9c3RhdGljIGludCBlYV9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGVhX2J1ZmZlciAqZWFfYnVmLCBpbnQgbWluX3NpemUpXFxuLS1cXG5mcy9qZnMveGF0dHIuYy01NDgtXFx0ZWFfYnVmLVxcdTAwM2VmbGFnID0gRUFfRVhURU5UO1xcbmZzL2pmcy94YXR0ci5jOjU0OTpcXHRlYV9idWYtXFx1MDAzZW1wID0gcmVhZF9tZXRhcGFnZShpbm9kZSwgYWRkcmVzc0RYRChcXHUwMDI2amktXFx1MDAzZWVhKSxcXG5mcy9qZnMveGF0dHIuYy01NTAtXFx0XFx0XFx0XFx0ICAgbGVuZ3RoRFhEKFxcdTAwMjZqaS1cXHUwMDNlZWEpIFxcdTAwM2NcXHUwMDNjIHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDowMDoyOC44ODE0Nzg3MjNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA4OTQ2MjQ4MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBKRlMgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgc2NhbiBmbGFnZ2VkIGEgYnVuY2ggb2YgSkZTIGZ1bmN0aW9ucywgYW5kIEkndmUgbmFycm93ZWQgaXQgZG93biB0byBhIG1vcmUgZm9jdXNlZCBzZXQ6IGBqZnNfZmlsbF9zdXBlcmAsIGBfX2dldF9tZXRhcGFnZWAsIGBkaVJlYWRgLCBgZGlXcml0ZWAsIGBkYk1vdW50YCwgYGRiU3luY2AsIGBkYkZyZWVgLCBgZGJBbGxvY2AsIGBlYV9nZXRgLCBhbmQgYGVhX3JlYWRgLiBHaXZlbiB0aGUgY29udGV4dCBvZiBhIHBhdGNoLCBgX19nZXRfbWV0YXBhZ2VgIGFuZCBgamZzX2ZpbGxfc3VwZXJgIGp1bXAgb3V0IGFzIHRoZSBtb3N0IHJlbGV2YW50IGVudHJ5IHBvaW50cyBiZWNhdXNlIHRoZXkgYXJlIGNsb3NlbHkgYXNzb2NpYXRlZCB3aXRoIGZpbGUgc3lzdGVtIG9wZXJhdGlvbnMsIGFuZCBpbml0aWFsaXphdGlvbiwgcmVzcGVjdGl2ZWx5LiBXZSdyZSBsb29raW5nIGF0IGNvcmUgZnVuY3Rpb25hbGl0eSBjaGFuZ2VzLlxuXG5UaGUgY3JpdGljYWwgcGllY2UgaGVyZSBpcyB0aGUgcGF0Y2gncyBsb2NhdGlvbiwgYG1ldGFwYWdlX3JlYWRfZm9saW9gLiBUaGUgVkZTIGNhbGxzIHRoaXMgd2hlbiBkZWFsaW5nIHdpdGggSkZTIGJsb2NrIGRldmljZSBtYXBwaW5ncywgc3BlY2lmaWNhbGx5IGR1cmluZyBwYWdlIHJlYWRzIHZpYSBgcmVhZF9tYXBwaW5nX2ZvbGlvYC4gYF9fZ2V0X21ldGFwYWdlYCBpcyB0aGUga2V5IGZ1bmN0aW9uIHRoYXQgY2FsbHMgYHJlYWRfbWFwcGluZ19mb2xpb2Agd2hpY2gsIGluIHR1cm4sIGNhbGxzIGBtZXRhcGFnZV9yZWFkX2ZvbGlvYCwgZWZmZWN0aXZlbHkgbWFraW5nIGl0IHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgcmVsZXZhbnQgZnVuY3Rpb25hbGl0eS4gVGhpcyBtYWtlcyBzZW5zZTogdGhlIGJsb2NrIGRldmljZSBtYXBwaW5nIGlzIGdvaW5nIHRvIHJlYWQgZmlsZXN5c3RlbSBtZXRhZGF0YSBwYWdlcy5cblxuSSd2ZSBjb25maXJtZWQgdGhhdCBgbWV0YXBhZ2VfcmVhZF9mb2xpb2AgaXMgcmVhY2hhYmxlLiBJdCdzIGFzc2lnbmVkIHRvIGBqZnNfbWV0YXBhZ2VfYW9wcy5yZWFkX2ZvbGlvYCwgd2hpY2ggaXMgdXNlZCBmb3IgYm90aCBibG9jayBkZXZpY2UgbWFwcGluZ3MgKGluaXRpYWxpemVkIGluIGBqZnNfZmlsbF9zdXBlcmApIGFuZCBzcGVjaWFsIGlub2RlcyAoYGRpUmVhZFNwZWNpYWxgKS4gVGhpcyBpcyB3aGF0IEkgZXhwZWN0IGJhc2VkIG9uIEpGUydzIGFyY2hpdGVjdHVyZS4gTWV0YWRhdGEgcmVhZHMgYXJlIGdvaW5nIHRocm91Z2ggdGhpcy5cblxuVGhlIHBhdGNoJ3MgY2hhbmdlIGlzIGFib3V0IGNoZWNraW5nIHRoZSByZXR1cm4gdmFsdWUgb2YgYGluc2VydF9tZXRhcGFnZWAuIFRoaXMgaXMgc2lnbmlmaWNhbnQhIEZhaWx1cmUgaW4gYGluc2VydF9tZXRhcGFnZWAgKHdoaWNoIGNhbiByZXR1cm4gLUVCVVNZIG9yIC1FTk9NRU0pIHdhcyBwcmV2aW91c2x5IGJlaW5nIGlnbm9yZWQsIHBvdGVudGlhbGx5IGNhdXNpbmcgc2lsZW50IGRhdGEgY29ycnVwdGlvbiBvciBvdGhlciBpc3N1ZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNvcnJlY3RuZXNzIGZpeCwgYW5kIHRoZXJlZm9yZSwgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIGFuZCBmdXJ0aGVyIHNjcnV0aW55LlxuXG5Gb2N1c2luZyBpbiwgYF9fZ2V0X21ldGFwYWdlYCBpcyB0aGUgbW9zdCBkaXJlY3QgZW50cnkgcG9pbnQuIEl0J3MgdGhlIGNvcmUgb2YgdGhlIG1ldGFkYXRhIHBhZ2UgcmV0cmlldmFsIHByb2Nlc3MuIGBqZnNfZmlsbF9zdXBlcmAgd2lsbCBiZSBpbXBvcnRhbnQgZHVyaW5nIG1vdW50LCBhbmQgYGRpUmVhZGAgYW5kIGBlYV9nZXRgIHdpbGwgYmUgdXNlZnVsIGluIGlub2RlIGFuZCBleHRlbmRlZCBhdHRyaWJ1dGUgcmVhZGluZy5cblxuTm93LCBsZXQncyBkaWcgaW50byBgaW5zZXJ0X21ldGFwYWdlYCBpdHNlbGYuIEl0IHJldHVybnMgYC1FQlVTWWAgaWYgdGhlIG1ldGFwYWdlIGlzIGFscmVhZHkgaW4gdGhlIGhhc2ggdGFibGUgYW5kIGAtRU5PTUVNYCBpZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlscy4gSXQncyBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24sIHdoaWNoIG1lYW5zIHRoZSBjb21waWxlciBtaWdodCBvcHRpbWl6ZSBpdCBhd2F5LiBTdGlsbCwgY2hlY2tpbmcgdGhlIHJldHVybiB2YWx1ZSBpcyBjcnVjaWFsIGJlY2F1c2UgaXQgZW5zdXJlcyBwcm9wZXIgZXJyb3IgaGFuZGxpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODg0LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjAwOjM5Ljc3NjEwNjUyM1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5NTM0OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhdGljIGlubGluZSBpbnQgaW5zZXJ0X21ldGFwYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2pmcy9qZnNfbWV0YXBhZ2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9qZnMvamZzX21ldGFwYWdlLmM9ODQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgbWV0YXBhZ2UgKmZvbGlvX3RvX21wKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvZmZzZXQpXFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtOTItXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jOjkzOnN0YXRpYyBpbmxpbmUgaW50IGluc2VydF9tZXRhcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWV0YXBhZ2UgKm1wKVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy05NC17XFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmM9MjA4PXN0YXRpYyBpbmxpbmUgc3RydWN0IG1ldGFwYWdlICpmb2xpb190b19tcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2Zmc2V0KVxcbi0tXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTIxMi1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmM6MjEzOnN0YXRpYyBpbmxpbmUgaW50IGluc2VydF9tZXRhcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWV0YXBhZ2UgKm1wKVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy0yMTQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDowMDozOS44MjUwNzAzNDJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMxMDkxMDQwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBgaW5zZXJ0X21ldGFwYWdlYCBJbXBsZW1lbnRhdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29kZSdzIHJhaXNpbmcgYSByZWQgZmxhZyBhYm91dCBgaW5zZXJ0X21ldGFwYWdlYC4gSXQgbG9va3MgbGlrZSB0aGVyZSBhcmUgKnR3byogcG90ZW50aWFsIGRlZmluaXRpb25zIGZsb2F0aW5nIGFyb3VuZCwgYW5kIHdoaWNoIG9uZSBnZXRzIHVzZWQgZGVwZW5kcyBvbiBzb21lIGtpbmQgb2YgY29uZmlndXJhdGlvbiBzZXR0aW5nLiBUaGF0J3MgYWx3YXlzIGEgcmVjaXBlIGZvciBzdWJ0bGUgYnVncyBpZiBub3QgaGFuZGxlZCBjYXJlZnVsbHkuXG5cbk15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSBzb3VyY2UuIExldCdzIHNlZS4uLiB0aGUgc3VzcGVjdCBmaWxlIGlzIGBmcy9qZnMvamZzX21ldGFwYWdlLmNgLCBhbmQgYmFzZWQgb24gdGhlIGNvbnRleHQsIEknbSBndWVzc2luZyB0aGUga2V5IGFyZWFzIHdpbGwgYmUgYXJvdW5kIGxpbmUgOTMgYW5kIHRoZW4gYWdhaW4gYXJvdW5kIGxpbmUgMjEzLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhvc2UgYXJlYXMgc3BlY2lmaWNhbGx5IHRvIHNlZSBleGFjdGx5IGhvdyB0aGVzZSBwb3RlbnRpYWxseSBjb25mbGljdGluZyBkZWZpbml0aW9ucyBhcmUgYmVpbmcgaGFuZGxlZCBhbmQgd2hhdCBjb25kaXRpb25zIHRyaWdnZXIgZWFjaCBvbmUuIEhvcGVmdWxseSBpdCdzIHN0cmFpZ2h0Zm9yd2FyZCBhbmQgd2VsbC1jb21tZW50ZWQsIHNvIEkgZG9uJ3QgaGF2ZSB0byB0cmFjZSB0aHJvdWdoIGEgYnVuY2ggb2YgcHJlcHJvY2Vzc29yIG1hY3JvcyEgVGhpcyBzaXR1YXRpb24gcmVxdWlyZXMgcHJlY2lzaW9uIHRvIGVuc3VyZSB0aGUgY29kZSBpcyBkb2luZyB3aGF0IGlzIGludGVuZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQ1OSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjAwOjQ0LjEzNTk4MzI5OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTM4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvamZzL2pmc19tZXRhcGFnZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MDpcXHRcXHRibGtfc3RhdHVzX3Qgc3RhdHVzO1xcbiAgODE6XFx0XFx0c3RydWN0IG1ldGFwYWdlICptcFtNUFNfUEVSX1BBR0VdO1xcbiAgODI6XFx0fTtcXG4gIDgzOlxcdFxcbiAgODQ6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbWV0YXBhZ2UgKmZvbGlvX3RvX21wKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvZmZzZXQpXFxuICA4NTpcXHR7XFxuICA4NjpcXHRcXHRzdHJ1Y3QgbWV0YV9hbmNob3IgKmFuY2hvciA9IGZvbGlvLVxcdTAwM2Vwcml2YXRlO1xcbiAgODc6XFx0XFxuICA4ODpcXHRcXHRpZiAoIWFuY2hvcilcXG4gIDg5OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAgOTA6XFx0XFx0cmV0dXJuIGFuY2hvci1cXHUwMDNlbXBbb2Zmc2V0IFxcdTAwM2VcXHUwMDNlIEwyUFNJWkVdO1xcbiAgOTE6XFx0fVxcbiAgOTI6XFx0XFxuICA5MzpcXHRzdGF0aWMgaW5saW5lIGludCBpbnNlcnRfbWV0YXBhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1ldGFwYWdlICptcClcXG4gIDk0OlxcdHtcXG4gIDk1OlxcdFxcdHN0cnVjdCBtZXRhX2FuY2hvciAqYTtcXG4gIDk2OlxcdFxcdGludCBpbmRleDtcXG4gIDk3OlxcdFxcdGludCBsMm1wX2Jsb2NrcztcXHQvKiBsb2cyIGJsb2NrcyBwZXIgbWV0YXBhZ2UgKi9cXG4gIDk4OlxcdFxcbiAgOTk6XFx0XFx0YSA9IGZvbGlvLVxcdTAwM2Vwcml2YXRlO1xcbiAxMDA6XFx0XFx0aWYgKCFhKSB7XFxuIDEwMTpcXHRcXHRcXHRhID0ga3phbGxvY19vYmooc3RydWN0IG1ldGFfYW5jaG9yLCBHRlBfTk9GUyk7XFxuIDEwMjpcXHRcXHRcXHRpZiAoIWEpXFxuIDEwMzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMTA0OlxcdFxcdFxcdGZvbGlvX2F0dGFjaF9wcml2YXRlKGZvbGlvLCBhKTtcXG4gMTA1OlxcdFxcdFxcdGttYXAoXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlKTtcXG4gMTA2OlxcdFxcdH1cXG4gMTA3OlxcdFxcbiAxMDg6XFx0XFx0aWYgKG1wKSB7XFxuIDEwOTpcXHRcXHRcXHRsMm1wX2Jsb2NrcyA9IEwyUFNJWkUgLSBmb2xpby1cXHUwMDNlbWFwcGluZy1cXHUwMDNlaG9zdC1cXHUwMDNlaV9ibGtiaXRzO1xcbiAxMTA6XFx0XFx0XFx0aW5kZXggPSAobXAtXFx1MDAzZWluZGV4IFxcdTAwM2VcXHUwMDNlIGwybXBfYmxvY2tzKSBcXHUwMDI2IChNUFNfUEVSX1BBR0UgLSAxKTtcXG4gMTExOlxcdFxcdFxcdGEtXFx1MDAzZW1wX2NvdW50Kys7XFxuIDExMjpcXHRcXHRcXHRhLVxcdTAwM2VtcFtpbmRleF0gPSBtcDtcXG4gMTEzOlxcdFxcdH1cXG4gMTE0OlxcdFxcbiAxMTU6XFx0XFx0cmV0dXJuIDA7XFxuIDExNjpcXHR9XFxuIDExNzpcXHRcXG4gMTE4OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVfbWV0YXBhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1ldGFwYWdlICptcClcXG4gMTE5OlxcdHtcXG4gMTIwOlxcdFxcdHN0cnVjdCBtZXRhX2FuY2hvciAqYSA9IGZvbGlvLVxcdTAwM2Vwcml2YXRlO1xcbiAxMjE6XFx0XFx0aW50IGwybXBfYmxvY2tzID0gTDJQU0laRSAtIGZvbGlvLVxcdTAwM2VtYXBwaW5nLVxcdTAwM2Vob3N0LVxcdTAwM2VpX2Jsa2JpdHM7XFxuIDEyMjpcXHRcXHRpbnQgaW5kZXg7XFxuIDEyMzpcXHRcXG4gMTI0OlxcdFxcdGluZGV4ID0gKG1wLVxcdTAwM2VpbmRleCBcXHUwMDNlXFx1MDAzZSBsMm1wX2Jsb2NrcykgXFx1MDAyNiAoTVBTX1BFUl9QQUdFIC0gMSk7XFxuIDEyNTpcXHRcXG4gMTI2OlxcdFxcdEJVR19PTihhLVxcdTAwM2VtcFtpbmRleF0gIT0gbXApO1xcbiAxMjc6XFx0XFxuIDEyODpcXHRcXHRhLVxcdTAwM2VtcFtpbmRleF0gPSBOVUxMO1xcbiAxMjk6XFx0XFx0aWYgKC0tYS1cXHUwMDNlbXBfY291bnQgPT0gMCkge1xcbiAxMzA6XFx0XFx0XFx0a2ZyZWUoYSk7XFxuIDEzMTpcXHRcXHRcXHRmb2xpb19kZXRhY2hfcHJpdmF0ZShmb2xpbyk7XFxuIDEzMjpcXHRcXHRcXHRrdW5tYXAoXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlKTtcXG4gMTMzOlxcdFxcdH1cXG4gMTM0OlxcdH1cXG4gMTM1OlxcdFxcbiAxMzY6XFx0c3RhdGljIGlubGluZSB2b2lkIGluY19pbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiAxMzc6XFx0e1xcbiAxMzg6XFx0XFx0c3RydWN0IG1ldGFfYW5jaG9yICphbmNob3IgPSBmb2xpby1cXHUwMDNlcHJpdmF0ZTtcXG4gMTM5OlxcdFxcbiAxNDA6XFx0XFx0YXRvbWljX2luYyhcXHUwMDI2YW5jaG9yLVxcdTAwM2Vpb19jb3VudCk7XFxuIDE0MTpcXHR9XFxuIDE0MjpcXHRcXG4gMTQzOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBkZWNfaW8oc3RydWN0IGZvbGlvICpmb2xpbywgYmxrX3N0YXR1c190IHN0YXR1cyxcXG4gMTQ0OlxcdFxcdFxcdHZvaWQgKCpoYW5kbGVyKShzdHJ1Y3QgZm9saW8gKiwgYmxrX3N0YXR1c190KSlcXG4gMTQ1OlxcdHtcXG4gMTQ2OlxcdFxcdHN0cnVjdCBtZXRhX2FuY2hvciAqYW5jaG9yID0gZm9saW8tXFx1MDAzZXByaXZhdGU7XFxuIDE0NzpcXHRcXG4gMTQ4OlxcdFxcdGlmIChhbmNob3ItXFx1MDAzZXN0YXR1cyA9PSBCTEtfU1RTX09LKVxcbiAxNDk6XFx0XFx0XFx0YW5jaG9yLVxcdTAwM2VzdGF0dXMgPSBzdGF0dXM7XFxuIDE1MDpcXHRcXG4gMTUxOlxcdFxcdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFxcdTAwMjZhbmNob3ItXFx1MDAzZWlvX2NvdW50KSlcXG4gMTUyOlxcdFxcdFxcdGhhbmRsZXIoZm9saW8sIGFuY2hvci1cXHUwMDNlc3RhdHVzKTtcXG4gMTUzOlxcdH1cXG4gMTU0OlxcdFxcbiAxNTU6XFx0I2lmZGVmIENPTkZJR19NSUdSQVRJT05cXG4gMTU2OlxcdHN0YXRpYyBpbnQgX19tZXRhcGFnZV9taWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiAxNTc6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBmb2xpbyAqZHN0LCBzdHJ1Y3QgZm9saW8gKnNyYyxcXG4gMTU4OlxcdFxcdFxcdFxcdFxcdCAgICBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlKVxcbiAxNTk6XFx0e1xcbiAxNjA6XFx0XFx0c3RydWN0IG1ldGFfYW5jaG9yICpzcmNfYW5jaG9yID0gc3JjLVxcdTAwM2Vwcml2YXRlO1xcbiAxNjE6XFx0XFx0c3RydWN0IG1ldGFwYWdlICptcHNbTVBTX1BFUl9QQUdFXSA9IHswfTtcXG4gMTYyOlxcdFxcdHN0cnVjdCBtZXRhcGFnZSAqbXA7XFxuIDE2MzpcXHRcXHRpbnQgaSwgcmM7XFxuIDE2NDpcXHRcXG4gMTY1OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBNUFNfUEVSX1BBR0U7IGkrKykge1xcbiAxNjY6XFx0XFx0XFx0bXAgPSBzcmNfYW5jaG9yLVxcdTAwM2VtcFtpXTtcXG4gMTY3OlxcdFxcdFxcdGlmIChtcCBcXHUwMDI2XFx1MDAyNiBtZXRhcGFnZV9sb2NrZWQobXApKVxcbiAxNjg6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuIDE2OTpcXHRcXHR9XFxuIDE3MDpcXHRcXG4gMTcxOlxcdFxcdHJjID0gZmlsZW1hcF9taWdyYXRlX2ZvbGlvKG1hcHBpbmcsIGRzdCwgc3JjLCBtb2RlKTtcXG4gMTcyOlxcdFxcdGlmIChyYylcXG4gMTczOlxcdFxcdFxcdHJldHVybiByYztcXG4gMTc0OlxcdFxcbiAxNzU6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1QU19QRVJfUEFHRTsgaSsrKSB7XFxuIDE3NjpcXHRcXHRcXHRtcCA9IHNyY19hbmNob3ItXFx1MDAzZW1wW2ldO1xcbiAxNzc6XFx0XFx0XFx0aWYgKCFtcClcXG4gMTc4OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAxNzk6XFx0XFx0XFx0aWYgKHVubGlrZWx5KGluc2VydF9tZXRhcGFnZShkc3QsIG1wKSkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6MDA6NDQuMTM2MDk4ODU5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2NjgxMDM1ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIE1ldGFwYWdlIExvZ2ljKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgaW5zZXJ0X21ldGFwYWdlYCBmdW5jdGlvbiwgYW5kIGl0IHNlZW1zIGxpa2UgaXQncyBhIGNyaXRpY2FsIHBpZWNlLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGF0IGl0IGNhbiByZXR1cm4gYC1FTk9NRU1gLCB3aGljaCBpcyBhbHdheXMgYSByZWQgZmxhZyB3aGVuIGRlYWxpbmcgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiBpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGZhaWx1cmUgcGF0aHMgaGVyZS5cblxuSG1tLCBJIHNlZSBhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJsb2NrIOKAkyBzb21ldGhpbmcgcmVsYXRlZCB0byBgQ09ORklHX01JR1JBVElPTmAsIEkgYmVsaWV2ZSwgb3IgaXMgaXQgZGlyZWN0bHkgb24gYENPTkZJR19NSUdSQVRJT05gPyBMZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQuLi4gWWVhaCwgaXQgaXMgaW5kZWVkIGAjaWZkZWYgQ09ORklHX01JR1JBVElPTmAuXG5cbkhvbGQgb24sIEkgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIHRoZSBvdGhlciBpbnN0YW5jZSBvZiBgaW5zZXJ0X21ldGFwYWdlYCBhdCBsaW5lIDIxMyBpbiB0aGlzIGZpbGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIGNvbnNpZGVyaW5nIGFsbCB0aGUgdXNlIGNhc2VzIGZvciB0aGUgZnVuY3Rpb24sIGFuZCB3aGV0aGVyIHRoaXMgZGlmZmVyZW50IGNvbnRleHQgY2hhbmdlcyB0aGUgaW1wYWN0IG9yIG5hdHVyZSBvZiBhIHBvdGVudGlhbCBgLUVOT01FTWAgcmV0dXJuLiBUaW1lIHRvIGRpZyBpbiBhbmQgY29tcGFyZSB0aGUgY2FsbCBzaXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxODAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjAwOjQ5LjgwNDIwNDc0MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9qZnMvamZzX21ldGFwYWdlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTkwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTkwOlxcdFxcdC8qIFVwZGF0ZSB0aGUgbWV0YXBhZ2UgYW5kIHJlbW92ZSBpdCBmcm9tIHNyYyAqL1xcbiAxOTE6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1QU19QRVJfUEFHRTsgaSsrKSB7XFxuIDE5MjpcXHRcXHRcXHRtcCA9IG1wc1tpXTtcXG4gMTkzOlxcdFxcdFxcdGlmIChtcCkge1xcbiAxOTQ6XFx0XFx0XFx0XFx0aW50IHBhZ2Vfb2Zmc2V0ID0gbXAtXFx1MDAzZWRhdGEgLSBmb2xpb19hZGRyZXNzKHNyYyk7XFxuIDE5NTpcXHRcXG4gMTk2OlxcdFxcdFxcdFxcdG1wLVxcdTAwM2VkYXRhID0gZm9saW9fYWRkcmVzcyhkc3QpICsgcGFnZV9vZmZzZXQ7XFxuIDE5NzpcXHRcXHRcXHRcXHRtcC1cXHUwMDNlZm9saW8gPSBkc3Q7XFxuIDE5ODpcXHRcXHRcXHRcXHRyZW1vdmVfbWV0YXBhZ2Uoc3JjLCBtcCk7XFxuIDE5OTpcXHRcXHRcXHR9XFxuIDIwMDpcXHRcXHR9XFxuIDIwMTpcXHRcXG4gMjAyOlxcdFxcdHJldHVybiAwO1xcbiAyMDM6XFx0fVxcbiAyMDQ6XFx0I2VuZGlmXFx0LyogQ09ORklHX01JR1JBVElPTiAqL1xcbiAyMDU6XFx0XFxuIDIwNjpcXHQjZWxzZVxcbiAyMDc6XFx0XFxuIDIwODpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBtZXRhcGFnZSAqZm9saW9fdG9fbXAoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9mZnNldClcXG4gMjA5OlxcdHtcXG4gMjEwOlxcdFxcdHJldHVybiBmb2xpby1cXHUwMDNlcHJpdmF0ZTtcXG4gMjExOlxcdH1cXG4gMjEyOlxcdFxcbiAyMTM6XFx0c3RhdGljIGlubGluZSBpbnQgaW5zZXJ0X21ldGFwYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZXRhcGFnZSAqbXApXFxuIDIxNDpcXHR7XFxuIDIxNTpcXHRcXHRpZiAobXApIHtcXG4gMjE2OlxcdFxcdFxcdGZvbGlvX2F0dGFjaF9wcml2YXRlKGZvbGlvLCBtcCk7XFxuIDIxNzpcXHRcXHRcXHRrbWFwKFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSk7XFxuIDIxODpcXHRcXHR9XFxuIDIxOTpcXHRcXHRyZXR1cm4gMDtcXG4gMjIwOlxcdH1cXG4gMjIxOlxcdFxcbiAyMjI6XFx0c3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9tZXRhcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWV0YXBhZ2UgKm1wKVxcbiAyMjM6XFx0e1xcbiAyMjQ6XFx0XFx0Zm9saW9fZGV0YWNoX3ByaXZhdGUoZm9saW8pO1xcbiAyMjU6XFx0XFx0a3VubWFwKFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSk7XFxuIDIyNjpcXHR9XFxuIDIyNzpcXHRcXG4gMjI4OlxcdCNkZWZpbmUgaW5jX2lvKGZvbGlvKSBkbyB7fSB3aGlsZSgwKVxcbiAyMjk6XFx0I2RlZmluZSBkZWNfaW8oZm9saW8sIHN0YXR1cywgaGFuZGxlcikgaGFuZGxlcihmb2xpbywgc3RhdHVzKVxcbiAyMzA6XFx0XFxuIDIzMTpcXHQjaWZkZWYgQ09ORklHX01JR1JBVElPTlxcbiAyMzI6XFx0c3RhdGljIGludCBfX21ldGFwYWdlX21pZ3JhdGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuIDIzMzpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGZvbGlvICpkc3QsIHN0cnVjdCBmb2xpbyAqc3JjLFxcbiAyMzQ6XFx0XFx0XFx0XFx0XFx0ICAgIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUpXFxuIDIzNTpcXHR7XFxuIDIzNjpcXHRcXHRzdHJ1Y3QgbWV0YXBhZ2UgKm1wO1xcbiAyMzc6XFx0XFx0aW50IHBhZ2Vfb2Zmc2V0O1xcbiAyMzg6XFx0XFx0aW50IHJjO1xcbiAyMzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjAwOjQ5LjgwNDI4OTMyMloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODE1OTIwNzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEpGUyBQYXRjaCBmb3IgTWVtb3J5IEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGAjZWxzZWAgYmxvY2sgYW5kIGl0J3MgYWxsIGFib3V0IHRoZSBjYXNlIHdoZXJlIGAjaWYgUEFHRV9TSVpFIFx1MDAzZSBQU0laRWAuIFJpZ2h0LCBhbmQgYFBTSVpFYCBpcyA0MDk2LCB0aGUgc3RhbmRhcmQgcGFnZSBzaXplIGluIEpGUy4gVGhpcyBtZWFucyB0aGF0IGlmIHRoZSBzeXN0ZW0ncyBwYWdlIHNpemUgKGBQQUdFX1NJWkVgKSBpcyBsYXJnZXIgdGhhbiA0MDk2IOKAkyBsaWtlIHRob3NlIDY0SyBwYWdlcyBvbiBBUk02NCBvciBQb3dlclBDIOKAkyBgaW5zZXJ0X21ldGFwYWdlYCAqY2FuKiByZXR1cm4gYC1FTk9NRU1gLiBUaGF0J3MgdGhlIGtleS4gSWYgYFBBR0VfU0laRWAgKmVxdWFscyogYFBTSVpFYCwgaXQgKmFsd2F5cyogcmV0dXJucyAwLiBTbywgdGhpcyBwYXRjaCBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIHRoZSBwb3RlbnRpYWwgYC1FTk9NRU1gIHNpdHVhdGlvbiB3aGVuIGBQQUdFX1NJWkVgIGlzLCBpbiBmYWN0LCBsYXJnZXIuXG5cbldhaXQgYSBzZWNvbmQsIG9uIHg4Nl82NCwgYFBBR0VfU0laRWAgKmlzKiA0MDk2LCBzbyB3ZSdyZSBhbHdheXMgcmV0dXJuaW5nIDAgYnkgZGVmYXVsdC4gU28gdGhpcyBjaGFuZ2Ugd291bGRuJ3QgaGF2ZSBhbnkgaW1wYWN0LiBCdXQgaWYgd2UncmUgZGVhbGluZyB3aXRoIHRob3NlIHN5c3RlbXMgd2l0aCBsYXJnZXIgcGFnZSBzaXplcywgdGhlbiBgLUVOT01FTWAgY2FuIGhhcHBlbi5cblxuSG1tLCBub3cgSSdtIHdvbmRlcmluZyBpZiBzeXpib3QgaXMgZXZlbiBjb25maWd1cmVkIHRvIHVzZSA2NEsgcGFnZXM/IFNvbWV0aW1lcywgeWVzLiBJIGhhdmUgc2VlbiBpdCB1c2UgdGhlbS4gVGhpcyBpcyBwcm9iYWJseSBhIGdlbmVyYWwgZml4LlxuXG5SZWdhcmRsZXNzLCB0aGUgcGF0Y2ggdG91Y2hlcyBgbWV0YXBhZ2VfcmVhZF9mb2xpb2AsIHdoaWNoIGlzIGEgZnVuZGFtZW50YWwgSkZTIGZ1bmN0aW9uLiBUaGF0IG1ha2VzIHRoaXMgcGF0Y2ggcmVhbGx5IGludGVyZXN0aW5nLiBBbnl0aGluZyBhZmZlY3RpbmcgYG1ldGFwYWdlX3JlYWRfZm9saW9gIGlzIGNyaXRpY2FsLCBlc3BlY2lhbGx5IHdoZW4gYWRkcmVzc2luZyBtZW1vcnkgYWxsb2NhdGlvbiBpc3N1ZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyB0ZXN0ZWQuIEknbSBnb2luZyB0byBkb3VibGUgY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYFBTSVpFYCBmb3IgY29uZmlybWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTE4NCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjAwOjU2LjYyMDIxMzQxM1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyNDAxMTc5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIFBTSVpFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2pmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjAwOjU2LjcyMjYyMDE3MloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzU3NjY0NTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQgYW5kIGFkb3B0aW5nIGEgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlOlxuXG4qKkh1bnRpbmcgZm9yIGBQU0laRWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gVGltZSB0byBodW50IGRvd24gdGhhdCBgUFNJWkVgIHZhcmlhYmxlLiBVc3VhbGx5LCB3aGVuIEkgZW5jb3VudGVyIHNvbWV0aGluZyBsaWtlIHRoaXMsIG15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIGNhdGFsb2dpbmcgdGhlIHBvc3NpYmlsaXRpZXMuIElzIGl0IGEgc3RhbmRhcmQgcGFyYW1ldGVyIHdpdGhpbiB0aGlzIGxpYnJhcnkgb3IgZnJhbWV3b3JrPyBJcyBpdCBhIGN1c3RvbSBtYWNybyBkZWZpbmVkIHNvbWV3aGVyZSBvYnNjdXJlLCBidXJpZWQgaW4gYSBoZWFkZXIgZmlsZT8gQ291bGQgaXQgYmUgc29tZXRoaW5nIHJlbGF0ZWQgdG8gbWVtb3J5IGFsbG9jYXRpb24sIG9yIHBlcmhhcHMgZXZlbiBhIGNvbmZpZ3VyYXRpb24gc2V0dGluZyB0aGF0J3MgZHluYW1pY2FsbHkgZGV0ZXJtaW5lZD9cblxuRmlyc3QsIEknZCBwcm9iYWJseSBzdGFydCB3aXRoIGEgZ2xvYmFsIHNlYXJjaCB3aXRoaW4gdGhlIGNvZGViYXNlLiBJIG5lZWQgdG8gZ2V0IGEgc2Vuc2Ugb2YgaXRzIHByZXZhbGVuY2UgYW5kIGNvbnRleHQuIEEgcXVpY2sgZ3JlcCwgb3Igd2hhdGV2ZXIgc2VhcmNoIHRvb2wgSSdtIHVzaW5nIGF0IHRoZSBtb21lbnQsIHdpbGwgcGFpbnQgYSBwaWN0dXJlOiBob3cgZnJlcXVlbnRseSBpcyBpdCB1c2VkPyBJbiB3aGF0IGtpbmRzIG9mIG1vZHVsZXMgb3IgZnVuY3Rpb25zPyBBcmUgdGhlcmUgY29tbWVudHMsIG9yIG90aGVyIHN1cnJvdW5kaW5nIGNvZGUsIHRoYXQgcHJvdmlkZSBpbW1lZGlhdGUgY2x1ZXMgYWJvdXQgaXRzIG1lYW5pbmcgb3IgcHVycG9zZT9cblxuSWYgdGhlIGdsb2JhbCBzZWFyY2ggZG9lc24ndCBpbW1lZGlhdGVseSByZXZlYWwgaXRzIG9yaWdpbiwgb3IgaWYgdGhlIGluaXRpYWwgcmVzdWx0cyBhcmUgYW1iaWd1b3VzLCBJJ2xsIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgbW9yZSBvYnZpb3VzIGNhbmRpZGF0ZXMuIFRoZSBkb2N1bWVudGF0aW9uIGlzIHRoZSBiZXN0IHN0YXJ0aW5nIHBvaW50LCBJIGtub3cgaXQncyBhIGJpdCBvZiBhIGNsaWNow6ksIGJ1dCBpdCBpcyBvZnRlbiB0aGUgYmVzdCByZXNvdXJjZSBmb3IgaW5mb3JtYXRpb24gYWJvdXQgYSB2YXJpYWJsZS4gSXMgdGhlcmUgYSByZWxldmFudCBjb25maWd1cmF0aW9uIGZpbGU/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBoZWFkZXIgZmlsZXMgSSBzaG91bGQgbG9vayBhdD8gUGVyaGFwcyB0aGVyZSdzIGFuIGludGVybmFsIHByb2plY3Qgd2lraSBvciBrbm93bGVkZ2UgYmFzZSB0aGF0IGNvdmVycyB0aGUgY29udmVudGlvbnMgdXNlZCBpbiB0aGlzIGNvZGViYXNlLlxuXG5VbHRpbWF0ZWx5LCBmaW5kaW5nIGBQU0laRWAgaXMgYWxsIGFib3V0IG1ldGhvZGljYWwgZXhwbG9yYXRpb24gYW5kIHBhdHRlcm4gcmVjb2duaXRpb24uIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMsIGZvbGxvd2luZyBicmVhZGNydW1icywgYW5kIGNhcmVmdWxseSBleGFtaW5pbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdW50aWwgSSd2ZSBzdWNjZXNzZnVsbHkgdHJhY2VkIGl0cyBkZWZpbml0aW9uIGFuZCBmdWxseSB1bmRlcnN0YW5kIGl0cyByb2xlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTgyOSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6MDE6MDEuNDgwMjg4Mzk0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzQxMTQzOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmaW5lIFBTSVpFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2pmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjAxOjAxLjU1MzcwODkyM1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDE4Njk5OTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBgUFNJWkVgIGluIHRoZSBKRlMgTWV0YXBhZ2UgSGVhZGVyKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYFBTSVpFYC4gIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgSkZTIGZpbGVzeXN0ZW0sIHNwZWNpZmljYWxseSBhcyBpdCByZWxhdGVzIHRvIG1ldGFwYWdlcy4gIFNvLCB0aGUgZmlyc3QgdGhpbmcgSSdtIGdvaW5nIHRvIGRvIGlzIGxvY2F0ZSBpdHMgZGVmaW5pdGlvbi4gVGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyB0aGUgaGVhZGVyIGZpbGUgZm9yIEpGUyBtZXRhcGFnZSBzdHJ1Y3R1cmVzIOKAkyBgZnMvamZzL2pmc19tZXRhcGFnZS5oYC4gIExldCdzIHNlZSB3aGF0IHRoYXQgcmV2ZWFscy4gIEknbSBleHBlY3RpbmcgdG8gZmluZCBpdHMgZGVmaW5pdGlvbiB0aGVyZSwgbGlrZWx5IGFzIGEgbWFjcm8gb3IgcG9zc2libHkgYSBjb25zdGFudCwgYW5kIGhvcGVmdWxseSBzb21lIGNvbnRleHQgYXJvdW5kIGl0cyB1c2UuIEnigJltIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIHBhZ2Ugc2l6ZXMsIGhvdyBpdCBtaWdodCByZWxhdGUgdG8gYmxvY2sgc2l6ZXMsIGFuZCBob3cgdGhlIGZpbGVzeXN0ZW0gc3RydWN0dXJlcyBsZXZlcmFnZSB0aGlzIGBQU0laRWAgdmFsdWUuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSB1c2Ugb2YgdGhpcyBkZWZpbml0aW9uIGluIHRlcm1zIG9mIHRoZSB1bmRlcmx5aW5nIGJsb2NrIGRldmljZSwgYW5kIGhvdyBpdCBtYXkgYmUgdXNlZCBkdXJpbmcgcmVhZHMgYW5kIHdyaXRlcyBvZiBmaWxlIHN5c3RlbSBtZXRhZGF0YS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyNDQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDowMTowNi41NzI0MTIyMTNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMjk1NjI5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJQU0laRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9qZnMvamZzX21ldGFwYWdlLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjAxOjA2LjYzMjcxODkzMloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODU0OTEwMDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgSkZTIEZpbGVzeXN0ZW0gQ29kZWJhc2UqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB3aGVyZSB0aGUgYFBTSVpFYCBtYWNybyBpcyBkZWZpbmVkIGFuZCB1c2VkIHdpdGhpbiB0aGUgSkZTIGZpbGVzeXN0ZW0uIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIE15IGluaXRpYWwgaW5jbGluYXRpb24gaXMgdG8gbG9vayBkaXJlY3RseSBpbiB0aGUgYGZzL2pmcy9gIGRpcmVjdG9yeSwgYXMgdGhhdCdzIHdoZXJlIHRoZSBjb3JlIGZpbGVzeXN0ZW0gY29kZSByZXNpZGVzLiBJdCdzIGEgZmFpcmx5IHN0YW5kYXJkIGFwcHJvYWNoOyBsb2NhdGUgdGhlIHJlbGV2YW50IGluY2x1ZGUgZmlsZXMgZmlyc3QsIHRoZW4gdHJhY2sgZG93biB3aGVyZSB0aGUgbWFjcm8gaXMgdXNlZC4gSSdsbCBzdGFydCB3aXRoIGEgc3RyYWlnaHRmb3J3YXJkIGdyZXAgZm9yIFwiUFNJWkVcIiBhbmQgc2VlIHdoZXJlIHRoYXQgbGVhZHMuIEhvcGVmdWxseSwgaXQncyBhIHNpbXBsZSwgbG9jYWxpemVkIGRlZmluaXRpb24uIElmIG5vdCwgSSdsbCBuZWVkIHRvIGJyb2FkZW4gbXkgc2VhcmNoIHRvIGluY2x1ZGUgYWxsIGhlYWRlciBmaWxlcyB3aXRoaW4gdGhlIEpGUyB0cmVlLCBhbmQgcG90ZW50aWFsbHkgZXZlbiBzeXN0ZW0td2lkZSBoZWFkZXJzIGlmIHRoZSBtYWNybyBhcHBlYXJzIHRvIGJlIG1vcmUgZ2VuZXJpYy4gRnJvbSB0aGVyZSwgSSdsbCBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZTogaXMgaXQgcmVsYXRlZCB0byBibG9jayBzaXplcywgYWxsb2NhdGlvbiB1bml0cywgc2VjdG9yIHNpemVzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGNvbnRleHQgb2YgaXRzIHVzZSB3aWxsIGJlIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBKRlMgYXJjaGl0ZWN0dXJlLiBJIGFudGljaXBhdGUgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zIGlmIGl0IHJlbGF0ZXMgdG8gYmxvY2sgSS9PIG9yIHRoZSB2aXJ0dWFsIGZpbGVzeXN0ZW0gKFZGUykgbGF5ZXIuIEknbGwgbmVlZCB0byBrZWVwIGEgbWVudGFsIG5vdGUgb2YgdGhvc2UgcmVsYXRpb25zaGlwcyBhcyBJIGdvIHRocm91Z2ggdGhlIHJlbGV2YW50IGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTU2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6MDE6MTEuNDg3NjMyMTQ0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDA0NzA1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJQU0laRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9qZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNjY3IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5mcy9qZnMvamZzX2RtYXAuYz0yNDA9aW50IGRiTW91bnQoc3RydWN0IGlub2RlICppcGJtYXApXFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYy0yNTctXFx0XFx0XFx0ICAgQk1BUEJMS05PIFxcdTAwM2NcXHUwMDNjIEpGU19TQkkoaXBibWFwLVxcdTAwM2VpX3NiKS1cXHUwMDNlbDJuYnBlcnBhZ2UsXFxuZnMvamZzL2pmc19kbWFwLmM6MjU4OlxcdFxcdFxcdCAgIFBTSVpFLCAwKTtcXG5mcy9qZnMvamZzX2RtYXAuYy0yNTktXFx0aWYgKG1wID09IE5VTEwpIHtcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jLTI3OC1cXG5mcy9qZnMvamZzX2RtYXAuYzoyNzk6XFx0aWYgKChibXAtXFx1MDAzZWRiX2wybmJwZXJwYWdlIFxcdTAwM2UgTDJQU0laRSAtIEwyTUlOQkxPQ0tTSVpFKSB8fFxcbmZzL2pmcy9qZnNfZG1hcC5jLTI4MC1cXHQgICAgKGJtcC1cXHUwMDNlZGJfbDJuYnBlcnBhZ2UgXFx1MDAzYyAwKSB8fFxcbi0tXFxuZnMvamZzL2pmc19kbWFwLmM9MzYzPWludCBkYlN5bmMoc3RydWN0IGlub2RlICppcGJtYXApXFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYy0zNzUtXFx0XFx0XFx0ICAgQk1BUEJMS05PIFxcdTAwM2NcXHUwMDNjIEpGU19TQkkoaXBibWFwLVxcdTAwM2VpX3NiKS1cXHUwMDNlbDJuYnBlcnBhZ2UsXFxuZnMvamZzL2pmc19kbWFwLmM6Mzc2OlxcdFxcdFxcdCAgIFBTSVpFLCAwKTtcXG5mcy9qZnMvamZzX2RtYXAuYy0zNzctXFx0aWYgKG1wID09IE5VTEwpIHtcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jPTQzMT1pbnQgZGJGcmVlKHN0cnVjdCBpbm9kZSAqaXAsIHM2NCBibGtubywgczY0IG5ibG9ja3MpXFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYy00NzEtXFx0XFx0bGJsa25vID0gQkxLVE9ETUFQKGJsa25vLCBibXAtXFx1MDAzZWRiX2wybmJwZXJwYWdlKTtcXG5mcy9qZnMvamZzX2RtYXAuYzo0NzI6XFx0XFx0bXAgPSByZWFkX21ldGFwYWdlKGlwYm1hcCwgbGJsa25vLCBQU0laRSwgMCk7XFxuZnMvamZzL2pmc19kbWFwLmMtNDczLVxcdFxcdGlmIChtcCA9PSBOVUxMKSB7XFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYz01MjU9ZGJVcGRhdGVQTWFwKHN0cnVjdCBpbm9kZSAqaXBibWFwLFxcbi0tXFxuZnMvamZzL2pmc19kbWFwLmMtNTY1LVxcbmZzL2pmcy9qZnNfZG1hcC5jOjU2NjpcXHRcXHRcXHRtcCA9IHJlYWRfbWV0YXBhZ2UoYm1wLVxcdTAwM2VkYl9pcGJtYXAsIGxibGtubywgUFNJWkUsXFxuZnMvamZzL2pmc19kbWFwLmMtNTY3LVxcdFxcdFxcdFxcdFxcdCAgIDApO1xcbi0tXFxuZnMvamZzL2pmc19kbWFwLmM9ODAxPWludCBkYkFsbG9jKHN0cnVjdCBpbm9kZSAqaXAsIHM2NCBoaW50LCBzNjQgbmJsb2NrcywgczY0ICogcmVzdWx0cylcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jLTg4Mi1cXHRcXHRsYmxrbm8gPSBCTEtUT0RNQVAoYmxrbm8sIGJtcC1cXHUwMDNlZGJfbDJuYnBlcnBhZ2UpO1xcbmZzL2pmcy9qZnNfZG1hcC5jOjg4MzpcXHRcXHRtcCA9IHJlYWRfbWV0YXBhZ2UoaXBibWFwLCBsYmxrbm8sIFBTSVpFLCAwKTtcXG5mcy9qZnMvamZzX2RtYXAuYy04ODQtXFx0XFx0aWYgKG1wID09IE5VTEwpXFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYz0xMDU5PXN0YXRpYyBpbnQgZGJFeHRlbmQoc3RydWN0IGlub2RlICppcCwgczY0IGJsa25vLCBzNjQgbmJsb2NrcywgczY0IGFkZG5ibG9ja3MpXFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYy0xMTEyLVxcdGxibGtubyA9IEJMS1RPRE1BUChleHRibGtubywgYm1wLVxcdTAwM2VkYl9sMm5icGVycGFnZSk7XFxuZnMvamZzL2pmc19kbWFwLmM6MTExMzpcXHRtcCA9IHJlYWRfbWV0YXBhZ2UoaXBibWFwLCBsYmxrbm8sIFBTSVpFLCAwKTtcXG5mcy9qZnMvamZzX2RtYXAuYy0xMTE0LVxcdGlmIChtcCA9PSBOVUxMKSB7XFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYz0xMzk5PWRiQWxsb2NBRyhzdHJ1Y3QgYm1hcCAqIGJtcCwgaW50IGFnbm8sIHM2NCBuYmxvY2tzLCBpbnQgbDJuYiwgczY0ICogcmVzdWx0cylcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jLTE0NTUtXFx0bGJsa25vID0gQkxLVE9DVEwoYmxrbm8sIGJtcC1cXHUwMDNlZGJfbDJuYnBlcnBhZ2UsIGJtcC1cXHUwMDNlZGJfYWdsZXZlbCk7XFxuZnMvamZzL2pmc19kbWFwLmM6MTQ1NjpcXHRtcCA9IHJlYWRfbWV0YXBhZ2UoYm1wLVxcdTAwM2VkYl9pcGJtYXAsIGxibGtubywgUFNJWkUsIDApO1xcbmZzL2pmcy9qZnNfZG1hcC5jLTE0NTctXFx0aWYgKG1wID09IE5VTEwpXFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYz0xNzY4PXN0YXRpYyBpbnQgZGJGaW5kQ3RsKHN0cnVjdCBibWFwICogYm1wLCBpbnQgbDJuYiwgaW50IGxldmVsLCBzNjQgKiBibGtubylcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jLTE3ODUtXFx0XFx0bGJsa25vID0gQkxLVE9DVEwoYiwgYm1wLVxcdTAwM2VkYl9sMm5icGVycGFnZSwgbGV2KTtcXG5mcy9qZnMvamZzX2RtYXAuYzoxNzg2OlxcdFxcdG1wID0gcmVhZF9tZXRhcGFnZShibXAtXFx1MDAzZWRiX2lwYm1hcCwgbGJsa25vLCBQU0laRSwgMCk7XFxuZnMvamZzL2pmc19kbWFwLmMtMTc4Ny1cXHRcXHRpZiAobXAgPT0gTlVMTClcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jPTE4ODc9ZGJBbGxvY0N0bChzdHJ1Y3QgYm1hcCAqIGJtcCwgczY0IG5ibG9ja3MsIGludCBsMm5iLCBzNjQgYmxrbm8sIHM2NCAqIHJlc3VsdHMpXFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYy0xODk5LVxcdFxcdGxibGtubyA9IEJMS1RPRE1BUChibGtubywgYm1wLVxcdTAwM2VkYl9sMm5icGVycGFnZSk7XFxuZnMvamZzL2pmc19kbWFwLmM6MTkwMDpcXHRcXHRtcCA9IHJlYWRfbWV0YXBhZ2UoYm1wLVxcdTAwM2VkYl9pcGJtYXAsIGxibGtubywgUFNJWkUsIDApO1xcbmZzL2pmcy9qZnNfZG1hcC5jLTE5MDEtXFx0XFx0aWYgKG1wID09IE5VTEwpXFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYy0xOTMxLVxcdFxcdGxibGtubyA9IEJMS1RPRE1BUChiLCBibXAtXFx1MDAzZWRiX2wybmJwZXJwYWdlKTtcXG5mcy9qZnMvamZzX2RtYXAuYzoxOTMyOlxcdFxcdG1wID0gcmVhZF9tZXRhcGFnZShibXAtXFx1MDAzZWRiX2lwYm1hcCwgbGJsa25vLCBQU0laRSwgMCk7XFxuZnMvamZzL2pmc19kbWFwLmMtMTkzMy1cXHRcXHRpZiAobXAgPT0gTlVMTCkge1xcbi0tXFxuZnMvamZzL2pmc19kbWFwLmMtMTk4NC1cXHRcXHRsYmxrbm8gPSBCTEtUT0RNQVAoYiwgYm1wLVxcdTAwM2VkYl9sMm5icGVycGFnZSk7XFxuZnMvamZzL2pmc19kbWFwLmM6MTk4NTpcXHRcXHRtcCA9IHJlYWRfbWV0YXBhZ2UoYm1wLVxcdTAwM2VkYl9pcGJtYXAsIGxibGtubywgUFNJWkUsIDApO1xcbmZzL2pmcy9qZnNfZG1hcC5jLTE5ODYtXFx0XFx0aWYgKG1wID09IE5VTEwpIHtcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jPTI1NTc9ZGJBZGpDdGwoc3RydWN0IGJtYXAgKiBibXAsIHM2NCBibGtubywgaW50IG5ld3ZhbCwgaW50IGFsbG9jLCBpbnQgbGV2ZWwpXFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYy0yNTY5LVxcdGxibGtubyA9IEJMS1RPQ1RMKGJsa25vLCBibXAtXFx1MDAzZWRiX2wybmJwZXJwYWdlLCBsZXZlbCk7XFxuZnMvamZzL2pmc19kbWFwLmM6MjU3MDpcXHRtcCA9IHJlYWRfbWV0YXBhZ2UoYm1wLVxcdTAwM2VkYl9pcGJtYXAsIGxibGtubywgUFNJWkUsIDApO1xcbmZzL2pmcy9qZnNfZG1hcC5jLTI1NzEtXFx0aWYgKG1wID09IE5VTEwpXFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYz0zMjc4PWludCBkYkFsbG9jQm90dG9tVXAoc3RydWN0IGlub2RlICppcCwgczY0IGJsa25vLCBzNjQgbmJsb2NrcylcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jLTMzMDMtXFx0XFx0bGJsa25vID0gQkxLVE9ETUFQKGJsa25vLCBibXAtXFx1MDAzZWRiX2wybmJwZXJwYWdlKTtcXG5mcy9qZnMvamZzX2RtYXAuYzozMzA0OlxcdFxcdG1wID0gcmVhZF9tZXRhcGFnZShpcGJtYXAsIGxibGtubywgUFNJWkUsIDApO1xcbmZzL2pmcy9qZnNfZG1hcC5jLTMzMDUtXFx0XFx0aWYgKG1wID09IE5VTEwpIHtcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jPTM0NTQ9aW50IGRiRXh0ZW5kRlMoc3RydWN0IGlub2RlICppcGJtYXAsIHM2NCBibGtubyxcXHRzNjQgbmJsb2NrcylcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jLTM1MzctXFx0cCA9IEJNQVBCTEtOTyArIG5icGVycGFnZTtcXHQvKiBMMiBwYWdlICovXFxuZnMvamZzL2pmc19kbWFwLmM6MzUzODpcXHRsMm1wID0gcmVhZF9tZXRhcGFnZShpcGJtYXAsIHAsIFBTSVpFLCAwKTtcXG5mcy9qZnMvamZzX2RtYXAuYy0zNTM5LVxcdGlmICghbDJtcCkge1xcbi0tXFxuZnMvamZzL2pmc19kbWFwLmMtMzU2MS1cXHRcXHRcXHQvKiByZWFkIGluIEwxIHBhZ2U6IChibGtubyBcXHUwMDI2IChNQVhMMVNJWkUgLSAxKSkgKi9cXG5mcy9qZnMvamZzX2RtYXAuYzozNTYyOlxcdFxcdFxcdGwxbXAgPSByZWFkX21ldGFwYWdlKGlwYm1hcCwgcCwgUFNJWkUsIDApO1xcbmZzL2pmcy9qZnNfZG1hcC5jLTM1NjMtXFx0XFx0XFx0aWYgKGwxbXAgPT0gTlVMTClcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jLTM1NzctXFx0XFx0XFx0LyogYXNzaWduL2luaXQgTDEgcGFnZSAqL1xcbmZzL2pmcy9qZnNfZG1hcC5jOjM1Nzg6XFx0XFx0XFx0bDFtcCA9IGdldF9tZXRhcGFnZShpcGJtYXAsIHAsIFBTSVpFLCAwKTtcXG5mcy9qZnMvamZzX2RtYXAuYy0zNTc5LVxcdFxcdFxcdGlmIChsMW1wID09IE5VTEwpXFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYy0zNjAxLVxcbmZzL2pmcy9qZnNfZG1hcC5jOjM2MDI6XFx0XFx0XFx0XFx0bDBtcCA9IHJlYWRfbWV0YXBhZ2UoaXBibWFwLCBwLCBQU0laRSwgMCk7XFxuZnMvamZzL2pmc19kbWFwLmMtMzYwMy1cXHRcXHRcXHRcXHRpZiAobDBtcCA9PSBOVUxMKVxcbi0tXFxuZnMvamZzL2pmc19kbWFwLmMtMzYxOS1cXHRcXHRcXHRcXHQvKiBhc3NpZ24vaW5pdCBMMCBwYWdlICovXFxuZnMvamZzL2pmc19kbWFwLmM6MzYyMDpcXHRcXHRcXHRcXHRsMG1wID0gZ2V0X21ldGFwYWdlKGlwYm1hcCwgcCwgUFNJWkUsIDApO1xcbmZzL2pmcy9qZnNfZG1hcC5jLTM2MjEtXFx0XFx0XFx0XFx0aWYgKGwwbXAgPT0gTlVMTClcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jLTM2NDYtXFx0XFx0XFx0XFx0XFx0bXAgPSByZWFkX21ldGFwYWdlKGlwYm1hcCwgcCxcXG5mcy9qZnMvamZzX2RtYXAuYzozNjQ3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIFBTSVpFLCAwKTtcXG5mcy9qZnMvamZzX2RtYXAuYy0zNjQ4LVxcdFxcdFxcdFxcdFxcdGlmIChtcCA9PSBOVUxMKVxcbi0tXFxuZnMvamZzL2pmc19kbWFwLmMtMzY1My1cXHRcXHRcXHRcXHRcXHRtcCA9IHJlYWRfbWV0YXBhZ2UoaXBibWFwLCBwLFxcbmZzL2pmcy9qZnNfZG1hcC5jOjM2NTQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgUFNJWkUsIDApO1xcbmZzL2pmcy9qZnNfZG1hcC5jLTM2NTUtXFx0XFx0XFx0XFx0XFx0aWYgKG1wID09IE5VTEwpXFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuaC00NC1cXG5mcy9qZnMvamZzX2RtYXAuaDo0NTojZGVmaW5lXFx0TUFYTUFQU0laRVxcdE1BWEwyU0laRVxcdC8qIG1heGltdW0gYWdncmVnYXRlIG1hcCBzaXplICovXFxuZnMvamZzL2pmc19kbWFwLmgtNDYtXFxuLS1cXG5mcy9qZnMvamZzX2R0cmVlLmM9MTkzPXN0YXRpYyBzdHJ1Y3QgbWV0YXBhZ2UgKnJlYWRfaW5kZXhfcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzNjQgYmxrbm8pXFxuLS1cXG5mcy9qZnMvamZzX2R0cmVlLmMtMjAzLVxcbmZzL2pmcy9qZnNfZHRyZWUuYzoyMDQ6XFx0cmV0dXJuIHJlYWRfbWV0YXBhZ2UoaW5vZGUsIHhhZGRyLCBQU0laRSwgMSk7XFxuZnMvamZzL2pmc19kdHJlZS5jLTIwNS19XFxuLS1cXG5mcy9qZnMvamZzX2R0cmVlLmM9MjEyPXN0YXRpYyBzdHJ1Y3QgbWV0YXBhZ2UgKmdldF9pbmRleF9wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHM2NCBibGtubylcXG4tLVxcbmZzL2pmcy9qZnNfZHRyZWUuYy0yMjItXFxuZnMvamZzL2pmc19kdHJlZS5jOjIyMzpcXHRyZXR1cm4gZ2V0X21ldGFwYWdlKGlub2RlLCB4YWRkciwgUFNJWkUsIDEpO1xcbmZzL2pmcy9qZnNfZHRyZWUuYy0yMjQtfVxcbi0tXFxuZnMvamZzL2pmc19kdHJlZS5jPTIzND1zdGF0aWMgc3RydWN0IGRpcl90YWJsZV9zbG90ICpmaW5kX2luZGV4KHN0cnVjdCBpbm9kZSAqaXAsIHUzMiBpbmRleCxcXG4tLVxcbmZzL2pmcy9qZnNfZHRyZWUuYy0yNjQtXFx0XFx0b2Zmc2V0ID0gKGluZGV4IC0gMikgKiBzaXplb2Yoc3RydWN0IGRpcl90YWJsZV9zbG90KTtcXG5mcy9qZnMvamZzX2R0cmVlLmM6MjY1OlxcdFxcdHBhZ2Vfb2Zmc2V0ID0gb2Zmc2V0IFxcdTAwMjYgKFBTSVpFIC0gMSk7XFxuZnMvamZzL2pmc19kdHJlZS5jOjI2NjpcXHRcXHRibGtubyA9ICgob2Zmc2V0ICsgMSkgXFx1MDAzZVxcdTAwM2UgTDJQU0laRSkgXFx1MDAzY1xcdTAwM2NcXG5mcy9qZnMvamZzX2R0cmVlLmMtMjY3LVxcdFxcdCAgICBKRlNfU0JJKGlwLVxcdTAwM2VpX3NiKS1cXHUwMDNlbDJuYnBlcnBhZ2U7XFxuLS1cXG5mcy9qZnMvamZzX2R0cmVlLmM9MzE5PXN0YXRpYyB1MzIgYWRkX2luZGV4KHRpZF90IHRpZCwgc3RydWN0IGlub2RlICppcCwgczY0IGJuLCBpbnQgc2xvdClcXG4tLVxcbmZzL2pmcy9qZnNfZHRyZWUuYy0zOTktXFx0XFx0fVxcbmZzL2pmcy9qZnNfZHRyZWUuYzo0MDA6XFx0XFx0aXAtXFx1MDAzZWlfc2l6ZSA9IFBTSVpFO1xcbmZzL2pmcy9qZnNfZHRyZWUuYy00MDEtXFxuLS1cXG5mcy9qZnMvamZzX2R0cmVlLmMtNDMwLVxcdG9mZnNldCA9IChpbmRleCAtIDIpICogc2l6ZW9mKHN0cnVjdCBkaXJfdGFibGVfc2xvdCk7XFxuZnMvamZzL2pmc19kdHJlZS5jOjQzMTpcXHRwYWdlX29mZnNldCA9IG9mZnNldCBcXHUwMDI2IChQU0laRSAtIDEpO1xcbmZzL2pmcy9qZnNfZHRyZWUuYzo0MzI6XFx0Ymxrbm8gPSAoKG9mZnNldCArIDEpIFxcdTAwM2VcXHUwMDNlIEwyUFNJWkUpIFxcdTAwM2NcXHUwMDNjIHNiaS1cXHUwMDNlbDJuYnBlcnBhZ2U7XFxuZnMvamZzL2pmc19kdHJlZS5jLTQzMy1cXHRpZiAocGFnZV9vZmZzZXQgPT0gMCkge1xcbi0tXFxuZnMvamZzL2pmc19kdHJlZS5jLTQ0MS1cXHRcXHR9XFxuZnMvamZzL2pmc19kdHJlZS5jOjQ0MjpcXHRcXHRpcC1cXHUwMDNlaV9zaXplICs9IFBTSVpFO1xcbmZzL2pmcy9qZnNfZHRyZWUuYy00NDMtXFxuZnMvamZzL2pmc19kdHJlZS5jLTQ0NC1cXHRcXHRpZiAoKG1wID0gZ2V0X2luZGV4X3BhZ2UoaXAsIGJsa25vKSkpXFxuZnMvamZzL2pmc19kdHJlZS5jOjQ0NTpcXHRcXHRcXHRtZW1zZXQobXAtXFx1MDAzZWRhdGEsIDAsIFBTSVpFKTtcXHQvKiBKdXN0IGxvb2tzIGJldHRlciAqL1xcbmZzL2pmcy9qZnNfZHRyZWUuYy00NDYtXFx0XFx0ZWxzZVxcbi0tXFxuZnMvamZzL2pmc19kdHJlZS5jPTkyMz1zdGF0aWMgaW50IGR0U3BsaXRVcCh0aWRfdCB0aWQsXFxuLS1cXG5mcy9qZnMvamZzX2R0cmVlLmMtMTAxMy1cXHR4c2l6ZSA9IHhsZW4gXFx1MDAzY1xcdTAwM2Mgc2JpLVxcdTAwM2VsMmJzaXplO1xcbmZzL2pmcy9qZnNfZHRyZWUuYzoxMDE0OlxcdGlmICh4c2l6ZSBcXHUwMDNjIFBTSVpFKSB7XFxuZnMvamZzL2pmc19kdHJlZS5jLTEwMTUtXFx0XFx0eGFkZHIgPSBhZGRyZXNzUFhEKHB4ZCk7XFxuLS1cXG5mcy9qZnMvamZzX2R0cmVlLmMtMTA5Ni1cXHRpZiAoIURPX0lOREVYKGlwKSlcXG5mcy9qZnMvamZzX2R0cmVlLmM6MTA5NzpcXHRcXHRpcC1cXHUwMDNlaV9zaXplICs9IFBTSVpFO1xcbmZzL2pmcy9qZnNfZHRyZWUuYy0xMDk4LVxcbi0tXFxuZnMvamZzL2pmc19kdHJlZS5jLTExMzAtXFx0XFx0LyogZ2V0IHRoZSBwYXJlbnQgcGFnZSBcXHUwMDNjc3BcXHUwMDNlICovXFxuZnMvamZzL2pmc19kdHJlZS5jOjExMzE6XFx0XFx0RFRfR0VUUEFHRShpcCwgcGFyZW50LVxcdTAwM2Vibiwgc21wLCBQU0laRSwgc3AsIHJjKTtcXG5mcy9qZnMvamZzX2R0cmVlLmMtMTEzMi1cXHRcXHRpZiAocmMpIHtcXG4tLVxcbmZzL2pmcy9qZnNfZHRyZWUuYz0xMzIzPXN0YXRpYyBpbnQgZHRTcGxpdFBhZ2UodGlkX3QgdGlkLCBzdHJ1Y3QgaW5vZGUgKmlwLCBzdHJ1Y3QgZHRzcGxpdCAqIHNwbGl0LFxcbi0tXFxuZnMvamZzL2pmc19kdHJlZS5jLTEzNTktXFx0cmJuID0gYWRkcmVzc1BYRChweGQpO1xcbmZzL2pmcy9qZnNfZHRyZWUuYzoxMzYwOlxcdHJtcCA9IGdldF9tZXRhcGFnZShpcCwgcmJuLCBQU0laRSwgMSk7XFxuZnMvamZzL2pmc19kdHJlZS5jLTEzNjEtXFx0aWYgKHJtcCA9PSBOVUxMKVxcbi0tXFxuZnMvamZzL2pmc19kdHJlZS5jLTE0MTYtXFxuZnMvamZzL2pmc19kdHJlZS5jOjE0MTc6XFx0biA9IFBTSVpFIFxcdTAwM2VcXHUwMDNlIEwyRFRTTE9UU0laRTtcXG5mcy9qZnMvamZzX2R0cmVlLmMtMTQxOC1cXHRycC1cXHUwMDNlaGVhZGVyLm1heHNsb3QgPSBuO1xcbi0tXFxuZnMvamZzL2pmc19kdHJlZS5jLTE0NjctXFx0aWYgKG5leHRibiAhPSAwKSB7XFxuZnMvamZzL2pmc19kdHJlZS5jOjE0Njg6XFx0XFx0RFRfR0VUUEFHRShpcCwgbmV4dGJuLCBtcCwgUFNJWkUsIHAsIHJjKTtcXG5mcy9qZnMvamZzX2R0cmVlLmMtMTQ2OS1cXHRcXHRpZiAocmMpIHtcXG4tLVxcbmZzL2pmcy9qZnNfZHRyZWUuYy0xNDk3LVxcdHNraXAgPSBzcGxpdC1cXHUwMDNlaW5kZXg7XFxuZnMvamZzL2pmc19kdHJlZS5jOjE0OTg6XFx0aGFsZiA9IChQU0laRSBcXHUwMDNlXFx1MDAzZSBMMkRUU0xPVFNJWkUpIFxcdTAwM2VcXHUwMDNlIDE7XFx0Lyogc3dhZyAqL1xcbmZzL2pmcy9qZnNfZHRyZWUuYy0xNDk5LVxcdGxlZnQgPSAwO1xcbi0tXFxuZnMvamZzL2pmc19kdHJlZS5jPTE2MzU9c3RhdGljIGludCBkdEV4dGVuZFBhZ2UodGlkX3QgdGlkLFxcbi0tXFxuZnMvamZzL2pmc19kdHJlZS5jLTE2NjUtXFx0cGFyZW50ID0gQlRfUE9QKGJ0c3RhY2spO1xcbmZzL2pmcy9qZnNfZHRyZWUuYzoxNjY2OlxcdERUX0dFVFBBR0UoaXAsIHBhcmVudC1cXHUwMDNlYm4sIHBtcCwgUFNJWkUsIHBwLCByYyk7XFxuZnMvamZzL2pmc19kdHJlZS5jLTE2NjctXFx0aWYgKHJjKVxcbi0tXFxuZnMvamZzL2pmc19kdHJlZS5jPTIwNzU9aW50IGR0RGVsZXRlKHRpZF90IHRpZCxcXG4tLVxcbmZzL2pmcy9qZnNfZHRyZWUuYy0yMTIzLVxcdFxcdFxcdFxcdERUX0dFVFBBR0UoaXAsIGxlNjRfdG9fY3B1KHAtXFx1MDAzZWhlYWRlci5uZXh0KSxcXG5mcy9qZnMvamZzX2R0cmVlLmM6MjEyNDpcXHRcXHRcXHRcXHRcXHQgICBubXAsIFBTSVpFLCBucCwgcmMpO1xcbmZzL2pmcy9qZnNfZHRyZWUuYy0yMTI1LVxcdFxcdFxcdFxcdGlmIChyYylcXG4tLVxcbmZzL2pmcy9qZnNfZHRyZWUuYz0yMjMwPXN0YXRpYyBpbnQgZHREZWxldGVVcCh0aWRfdCB0aWQsIHN0cnVjdCBpbm9kZSAqaXAsXFxuLS1cXG5mcy9qZnMvamZzX2R0cmVlLmMtMjMwMC1cXHRcXHQvKiBwaW4gdGhlIHBhcmVudCBwYWdlIFxcdTAwM2NzcFxcdTAwM2UgKi9cXG5mcy9qZnMvamZzX2R0cmVlLmM6MjMwMTpcXHRcXHREVF9HRVRQQUdFKGlwLCBwYXJlbnQtXFx1MDAzZWJuLCBtcCwgUFNJWkUsIHAsIHJjKTtcXG5mcy9qZnMvamZzX2R0cmVlLmMtMjMwMi1cXHRcXHRpZiAocmMpXFxuLS1cXG5mcy9qZnMvamZzX2R0cmVlLmMtMjQyNS1cXHRpZiAoIURPX0lOREVYKGlwKSlcXG5mcy9qZnMvamZzX2R0cmVlLmM6MjQyNjpcXHRcXHRpcC1cXHUwMDNlaV9zaXplIC09IFBTSVpFO1xcbmZzL2pmcy9qZnNfZHRyZWUuYy0yNDI3LVxcbi0tXFxuZnMvamZzL2pmc19kdHJlZS5jPTI0NDI9c3RhdGljIGludCBkdFJlbGluayh0aWRfdCB0aWQsIHN0cnVjdCBpbm9kZSAqaXAsIGR0cGFnZV90ICogcClcXG4tLVxcbmZzL2pmcy9qZnNfZHRyZWUuYy0yNDU1LVxcdGlmIChuZXh0Ym4gIT0gMCkge1xcbmZzL2pmcy9qZnNfZHRyZWUuYzoyNDU2OlxcdFxcdERUX0dFVFBBR0UoaXAsIG5leHRibiwgbXAsIFBTSVpFLCBwLCByYyk7XFxuZnMvamZzL2pmc19kdHJlZS5jLTI0NTctXFx0XFx0aWYgKHJjKVxcbi0tXFxuZnMvamZzL2pmc19kdHJlZS5jLTI0ODQtXFx0aWYgKHByZXZibiAhPSAwKSB7XFxuZnMvamZzL2pmc19kdHJlZS5jOjI0ODU6XFx0XFx0RFRfR0VUUEFHRShpcCwgcHJldmJuLCBtcCwgUFNJWkUsIHAsIHJjKTtcXG5mcy9qZnMvamZzX2R0cmVlLmMtMjQ4Ni1cXHRcXHRpZiAocmMpXFxuLS1cXG5mcy9qZnMvamZzX2R0cmVlLmM9MjYxMz1zdGF0aWMgaW50IGFkZF9taXNzaW5nX2luZGljZXMoc3RydWN0IGlub2RlICppbm9kZSwgczY0IGJuKVxcbi0tXFxuZnMvamZzL2pmc19kdHJlZS5jLTI2MjgtXFxuZnMvamZzL2pmc19kdHJlZS5jOjI2Mjk6XFx0RFRfR0VUUEFHRShpbm9kZSwgYm4sIG1wLCBQU0laRSwgcCwgcmMpO1xcbmZzL2pmcy9qZnNfZHRyZWUuYy0yNjMwLVxcbi0tXFxuZnMvamZzL2pmc19kdHJlZS5jPTI3MTE9aW50IGpmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcXG4tLVxcbmZzL2pmcy9qZnNfZHRyZWUuYy0yNzkzLVxcdFxcdFxcdGluZGV4ID0gZGlydGFiX3Nsb3Quc2xvdDtcXG5mcy9qZnMvamZzX2R0cmVlLmM6Mjc5NDpcXHRcXHRcXHREVF9HRVRQQUdFKGlwLCBibiwgbXAsIFBTSVpFLCBwLCByYyk7XFxuZnMvamZzL2pmc19kdHJlZS5jLTI3OTUtXFx0XFx0XFx0aWYgKHJjKSB7XFxuLS1cXG5mcy9qZnMvamZzX2R0cmVlLmMtMzAzNy1cXG5mcy9qZnMvamZzX2R0cmVlLmM6MzAzODpcXHRcXHREVF9HRVRQQUdFKGlwLCBibiwgbXAsIFBTSVpFLCBwLCByYyk7XFxuZnMvamZzL2pmc19kdHJlZS5jLTMwMzktXFx0XFx0aWYgKHJjKSB7XFxuLS1cXG5mcy9qZnMvamZzX2R0cmVlLmM9MzEzNj1zdGF0aWMgaW50IGR0UmVhZE5leHQoc3RydWN0IGlub2RlICppcCwgbG9mZl90ICogb2Zmc2V0LFxcbi0tXFxuZnMvamZzL2pmc19kdHJlZS5jLTMyMTktXFx0Ym4gPSBwYXJlbnQtXFx1MDAzZWJuO1xcbmZzL2pmcy9qZnNfZHRyZWUuYzozMjIwOlxcdERUX0dFVFBBR0UoaXAsIGJuLCBtcCwgUFNJWkUsIHAsIHJjKTtcXG5mcy9qZnMvamZzX2R0cmVlLmMtMzIyMS1cXHRpZiAocmMpXFxuLS1cXG5mcy9qZnMvamZzX2R0cmVlLmMtMzI0MC1cXHRcXHQvKiBnZXQgbmV4dCBwYXJlbnQgcGFnZSAqL1xcbmZzL2pmcy9qZnNfZHRyZWUuYzozMjQxOlxcdFxcdERUX0dFVFBBR0UoaXAsIGJuLCBtcCwgUFNJWkUsIHAsIHJjKTtcXG5mcy9qZnMvamZzX2R0cmVlLmMtMzI0Mi1cXHRcXHRpZiAocmMpXFxuLS1cXG5mcy9qZnMvamZzX2R0cmVlLmMtMzI2MC0gICAgICBjOlxcbmZzL2pmcy9qZnNfZHRyZWUuYzozMjYxOlxcdERUX0dFVFBBR0UoaXAsIGJuLCBtcCwgUFNJWkUsIHAsIHJjKTtcXG5mcy9qZnMvamZzX2R0cmVlLmMtMzI2Mi1cXHRpZiAocmMpXFxuLS1cXG5mcy9qZnMvamZzX2R0cmVlLmMtMzI4MS1cXHRcXHQvKiBnZXQgbmV4dCBsZWFmIHBhZ2UgKi9cXG5mcy9qZnMvamZzX2R0cmVlLmM6MzI4MjpcXHRcXHREVF9HRVRQQUdFKGlwLCBibiwgbXAsIFBTSVpFLCBwLCByYyk7XFxuZnMvamZzL2pmc19kdHJlZS5jLTMyODMtXFx0XFx0aWYgKHJjKVxcbi0tXFxuZnMvamZzL2pmc19kdHJlZS5jPTQzODQ9Ym9vbCBjaGVja19kdHBhZ2UoZHRwYWdlX3QgKnApXFxuLS1cXG5mcy9qZnMvamZzX2R0cmVlLmMtNDM4Ni1cXHRERUNMQVJFX0JJVE1BUChiaXRtYXAsIERUUEFHRU1BWFNMT1QpID0gezB9O1xcbmZzL2pmcy9qZnNfZHRyZWUuYzo0Mzg3OlxcdGNvbnN0IGludCBzdGJsc2l6ZSA9ICgoUFNJWkUgXFx1MDAzZVxcdTAwM2UgTDJEVFNMT1RTSVpFKSArIDMxKSBcXHUwMDNlXFx1MDAzZSBMMkRUU0xPVFNJWkU7XFxuZnMvamZzL2pmc19kdHJlZS5jLTQzODgtXFx0aW50IGk7XFxuLS1cXG5mcy9qZnMvamZzX2ZpbHN5cy5oLTgxLS8qIHBhZ2Ugc2l6ZSAqL1xcbmZzL2pmcy9qZnNfZmlsc3lzLmg6ODI6I2lmZGVmIFBTSVpFXFxuZnMvamZzL2pmc19maWxzeXMuaDo4MzojdW5kZWYgUFNJWkVcXG5mcy9qZnMvamZzX2ZpbHN5cy5oLTg0LSNlbmRpZlxcbmZzL2pmcy9qZnNfZmlsc3lzLmg6ODU6I2RlZmluZVxcdFBTSVpFXFx0XFx0NDA5NlxcdC8qIHBhZ2Ugc2l6ZSAoaW4gYnl0ZSkgKi9cXG5mcy9qZnMvamZzX2ZpbHN5cy5oOjg2OiNkZWZpbmVcXHRMMlBTSVpFXFx0XFx0MTJcXHQvKiBsb2cyKFBTSVpFKSAqL1xcbmZzL2pmcy9qZnNfZmlsc3lzLmgtODctI2RlZmluZVxcdFBPRkZTRVRcXHRcXHQ0MDk1XFx0Lyogb2Zmc2V0IHdpdGhpbiBwYWdlICovXFxuLS1cXG5mcy9qZnMvamZzX2ZpbHN5cy5oLTg5LS8qIGJ1ZmZlciBwYWdlIHNpemUgKi9cXG5mcy9qZnMvamZzX2ZpbHN5cy5oOjkwOiNkZWZpbmUgQlBTSVpFXFx0UFNJWkVcXG5mcy9qZnMvamZzX2ZpbHN5cy5oLTkxLVxcbi0tXFxuZnMvamZzL2pmc19maWxzeXMuaC05NC0gKlxcbmZzL2pmcy9qZnNfZmlsc3lzLmg6OTU6ICogUFNJWkUgXFx1MDAzZT0gZmlsZSBzeXN0ZW0gYmxvY2sgc2l6ZSBcXHUwMDNlPSBQQlNJWkUgXFx1MDAzZT0gRElTSVpFXFxuZnMvamZzL2pmc19maWxzeXMuaC05Ni0gKi9cXG4tLVxcbmZzL2pmcy9qZnNfZmlsc3lzLmgtMTQ0LS8qIHNpemUgaW4gYnl0ZSAtXFx1MDAzZSBsYXN0IHBhZ2UgbnVtYmVyICovXFxuZnMvamZzL2pmc19maWxzeXMuaDoxNDU6I2RlZmluZVxcdFNJWkUyUE4oc2l6ZSlcXHQoICgoczY0KSgoc2l6ZSkgLSAxKSkgXFx1MDAzZVxcdTAwM2UgKEwyUFNJWkUpIClcXG5mcy9qZnMvamZzX2ZpbHN5cy5oLTE0Ni0vKiBzaXplIGluIGJ5dGUgLVxcdTAwM2UgbGFzdCBmaWxlIHN5c3RlbSBibG9jayBudW1iZXIgKi9cXG4tLVxcbmZzL2pmcy9qZnNfZmlsc3lzLmgtMTY3LSAqL1xcbmZzL2pmcy9qZnNfZmlsc3lzLmg6MTY4OiNkZWZpbmUgU0laRV9PRl9TVVBFUlxcdFBTSVpFXFxuZnMvamZzL2pmc19maWxzeXMuaC0xNjktXFxuLS1cXG5mcy9qZnMvamZzX2ZpbHN5cy5oLTE3Mi0gKi9cXG5mcy9qZnMvamZzX2ZpbHN5cy5oOjE3MzojZGVmaW5lIFNJWkVfT0ZfQUdfVEFCTEVcXHRQU0laRVxcbmZzL2pmcy9qZnNfZmlsc3lzLmgtMTc0LVxcbi0tXFxuZnMvamZzL2pmc19maWxzeXMuaC0xNzgtICovXFxuZnMvamZzL2pmc19maWxzeXMuaDoxNzk6I2RlZmluZSBTSVpFX09GX01BUF9QQUdFXFx0UFNJWkVcXG5mcy9qZnMvamZzX2ZpbHN5cy5oLTE4MC1cXG4tLVxcbmZzL2pmcy9qZnNfZmlsc3lzLmgtMjU2LSNkZWZpbmUgSkZTX05BTUVfTUFYXFx0MjU1XFxuZnMvamZzL2pmc19maWxzeXMuaDoyNTc6I2RlZmluZSBKRlNfUEFUSF9NQVhcXHRCUFNJWkVcXG5mcy9qZnMvamZzX2ZpbHN5cy5oLTI1OC1cXG4tLVxcbmZzL2pmcy9qZnNfaW1hcC5jPTk0PWludCBkaU1vdW50KHN0cnVjdCBpbm9kZSAqaXBpbWFwKVxcbi0tXFxuZnMvamZzL2pmc19pbWFwLmMtMTEyLVxcdFxcdFxcdCAgIElNQVBCTEtOTyBcXHUwMDNjXFx1MDAzYyBKRlNfU0JJKGlwaW1hcC1cXHUwMDNlaV9zYiktXFx1MDAzZWwybmJwZXJwYWdlLFxcbmZzL2pmcy9qZnNfaW1hcC5jOjExMzpcXHRcXHRcXHQgICBQU0laRSwgMCk7XFxuZnMvamZzL2pmc19pbWFwLmMtMTE0LVxcdGlmIChtcCA9PSBOVUxMKSB7XFxuLS1cXG5mcy9qZnMvamZzX2ltYXAuYz0yMDU9aW50IGRpU3luYyhzdHJ1Y3QgaW5vZGUgKmlwaW1hcClcXG4tLVxcbmZzL2pmcy9qZnNfaW1hcC5jLTIxNy1cXHRcXHRcXHQgIElNQVBCTEtOTyBcXHUwMDNjXFx1MDAzYyBKRlNfU0JJKGlwaW1hcC1cXHUwMDNlaV9zYiktXFx1MDAzZWwybmJwZXJwYWdlLFxcbmZzL2pmcy9qZnNfaW1hcC5jOjIxODpcXHRcXHRcXHQgIFBTSVpFLCAwKTtcXG5mcy9qZnMvamZzX2ltYXAuYy0yMTktXFx0aWYgKG1wID09IE5VTEwpIHtcXG4tLVxcbmZzL2pmcy9qZnNfaW1hcC5jPTI5MD1pbnQgZGlSZWFkKHN0cnVjdCBpbm9kZSAqaXApXFxuLS1cXG5mcy9qZnMvamZzX2ltYXAuYy0zNjYtXFx0LyogcmVhZCB0aGUgcGFnZSBvZiBkaXNrIGlub2RlICovXFxuZnMvamZzL2pmc19pbWFwLmM6MzY3OlxcdG1wID0gcmVhZF9tZXRhcGFnZShpcGltYXAsIHBhZ2VubyBcXHUwMDNjXFx1MDAzYyBzYmktXFx1MDAzZWwybmJwZXJwYWdlLCBQU0laRSwgMSk7XFxuZnMvamZzL2pmc19pbWFwLmMtMzY4LVxcdGlmICghbXApIHtcXG4tLVxcbmZzL2pmcy9qZnNfaW1hcC5jPTQxOD1zdHJ1Y3QgaW5vZGUgKmRpUmVhZFNwZWNpYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW5vX3QgaW51bSwgaW50IHNlY29uZGFyeSlcXG4tLVxcbmZzL2pmcy9qZnNfaW1hcC5jLTQzNS1cXHR9IGVsc2Uge1xcbmZzL2pmcy9qZnNfaW1hcC5jOjQzNjpcXHRcXHRhZGRyZXNzID0gQUlUQkxfT0ZGIFxcdTAwM2VcXHUwMDNlIEwyUFNJWkU7XFxuZnMvamZzL2pmc19pbWFwLmMtNDM3LVxcdFxcdEpGU19JUChpcCktXFx1MDAzZWlwaW1hcCA9IHNiaS1cXHUwMDNlaXBhaW1hcDtcXG4tLVxcbmZzL2pmcy9qZnNfaW1hcC5jLTQ0Ni1cXHQvKiByZWFkIHRoZSBwYWdlIG9mIGZpeGVkIGRpc2sgaW5vZGUgKEFJVCkgaW4gcmF3IG1vZGUgKi9cXG5mcy9qZnMvamZzX2ltYXAuYzo0NDc6XFx0bXAgPSByZWFkX21ldGFwYWdlKGlwLCBhZGRyZXNzIFxcdTAwM2NcXHUwMDNjIHNiaS1cXHUwMDNlbDJuYnBlcnBhZ2UsIFBTSVpFLCAxKTtcXG5mcy9qZnMvamZzX2ltYXAuYy00NDgtXFx0aWYgKG1wID09IE5VTEwpIHtcXG4tLVxcbmZzL2pmcy9qZnNfaW1hcC5jPTUwMD12b2lkIGRpV3JpdGVTcGVjaWFsKHN0cnVjdCBpbm9kZSAqaXAsIGludCBzZWNvbmRhcnkpXFxuLS1cXG5mcy9qZnMvamZzX2ltYXAuYy01MTAtXFx0ZWxzZVxcbmZzL2pmcy9qZnNfaW1hcC5jOjUxMTpcXHRcXHRhZGRyZXNzID0gQUlUQkxfT0ZGIFxcdTAwM2VcXHUwMDNlIEwyUFNJWkU7XFxuZnMvamZzL2pmc19pbWFwLmMtNTEyLVxcbi0tXFxuZnMvamZzL2pmc19pbWFwLmMtNTE3LVxcdC8qIHJlYWQgdGhlIHBhZ2Ugb2YgZml4ZWQgZGlzayBpbm9kZSAoQUlUKSBpbiByYXcgbW9kZSAqL1xcbmZzL2pmcy9qZnNfaW1hcC5jOjUxODpcXHRtcCA9IHJlYWRfbWV0YXBhZ2UoaXAsIGFkZHJlc3MgXFx1MDAzY1xcdTAwM2Mgc2JpLVxcdTAwM2VsMm5icGVycGFnZSwgUFNJWkUsIDEpO1xcbmZzL2pmcy9qZnNfaW1hcC5jLTUxOS1cXHRpZiAobXAgPT0gTlVMTCkge1xcbi0tXFxuZnMvamZzL2pmc19pbWFwLmM9NTgxPWludCBkaVdyaXRlKHRpZF90IHRpZCwgc3RydWN0IGlub2RlICppcClcXG4tLVxcbmZzL2pmcy9qZnNfaW1hcC5jLTYzOC0gICAgICByZXRyeTpcXG5mcy9qZnMvamZzX2ltYXAuYzo2Mzk6XFx0bXAgPSByZWFkX21ldGFwYWdlKGlwaW1hcCwgcGFnZW5vIFxcdTAwM2NcXHUwMDNjIHNiaS1cXHUwMDNlbDJuYnBlcnBhZ2UsIFBTSVpFLCAxKTtcXG5mcy9qZnMvamZzX2ltYXAuYy02NDAtXFx0aWYgKCFtcClcXG4tLVxcbmZzL2pmcy9qZnNfaW1hcC5jPTIxNTU9c3RhdGljIGludCBkaU5ld0V4dChzdHJ1Y3QgaW5vbWFwICogaW1hcCwgc3RydWN0IGlhZyAqIGlhZ3AsIGludCBleHRubylcXG4tLVxcbmZzL2pmcy9qZnNfaW1hcC5jLTIyNzQtXFx0XFx0ICovXFxuZnMvamZzL2pmc19pbWFwLmM6MjI3NTpcXHRcXHRkbXAgPSBnZXRfbWV0YXBhZ2UoaXBpbWFwLCBibGtubyArIGksIFBTSVpFLCAxKTtcXG5mcy9qZnMvamZzX2ltYXAuYy0yMjc2LVxcdFxcdGlmIChkbXAgPT0gTlVMTCkge1xcbi0tXFxuZnMvamZzL2pmc19pbWFwLmM9MjQ0MD1kaU5ld0lBRyhzdHJ1Y3QgaW5vbWFwICogaW1hcCwgaW50ICppYWdub3AsIGludCBhZ25vLCBzdHJ1Y3QgbWV0YXBhZ2UgKiogbXBwKVxcbi0tXFxuZnMvamZzL2pmc19pbWFwLmMtMjQ3OC1cXG5mcy9qZnMvamZzX2ltYXAuYzoyNDc5OlxcdFxcdGlmIChpcGltYXAtXFx1MDAzZWlfc2l6ZSBcXHUwMDNlXFx1MDAzZSBMMlBTSVpFICE9IGltYXAtXFx1MDAzZWltX25leHRpYWcgKyAxKSB7XFxuZnMvamZzL2pmc19pbWFwLmMtMjQ4MC1cXHRcXHRcXHRJV1JJVEVfVU5MT0NLKGlwaW1hcCk7XFxuLS1cXG5mcy9qZnMvamZzX2ltYXAuYy0yNTQwLVxcdFxcdC8qIHVwZGF0ZSB0aGUgaW5vZGUgbWFwJ3MgaW5vZGUgdG8gcmVmbGVjdCB0aGUgZXh0ZW5zaW9uICovXFxuZnMvamZzL2pmc19pbWFwLmM6MjU0MTpcXHRcXHRpcGltYXAtXFx1MDAzZWlfc2l6ZSArPSBQU0laRTtcXG5mcy9qZnMvamZzX2ltYXAuYzoyNTQyOlxcdFxcdGlub2RlX2FkZF9ieXRlcyhpcGltYXAsIFBTSVpFKTtcXG5mcy9qZnMvamZzX2ltYXAuYy0yNTQzLVxcbmZzL2pmcy9qZnNfaW1hcC5jLTI1NDQtXFx0XFx0LyogYXNzaWduIGEgYnVmZmVyIGZvciB0aGUgcGFnZSAqL1xcbmZzL2pmcy9qZnNfaW1hcC5jOjI1NDU6XFx0XFx0bXAgPSBnZXRfbWV0YXBhZ2UoaXBpbWFwLCBibGtubywgUFNJWkUsIDApO1xcbmZzL2pmcy9qZnNfaW1hcC5jLTI1NDYtXFx0XFx0aWYgKCFtcCkge1xcbi0tXFxuZnMvamZzL2pmc19pbWFwLmMtMjU1MC1cXHRcXHRcXHQgKi9cXG5mcy9qZnMvamZzX2ltYXAuYzoyNTUxOlxcdFxcdFxcdHh0VHJ1bmNhdGUodGlkLCBpcGltYXAsIGlwaW1hcC1cXHUwMDNlaV9zaXplIC0gUFNJWkUsXFxuZnMvamZzL2pmc19pbWFwLmMtMjU1Mi1cXHRcXHRcXHRcXHQgICBDT01NSVRfUFdNQVApO1xcbi0tXFxuZnMvamZzL2pmc19pbWFwLmM9MjY2Mz1zdGF0aWMgaW50IGRpSUFHUmVhZChzdHJ1Y3QgaW5vbWFwICogaW1hcCwgaW50IGlhZ25vLCBzdHJ1Y3QgbWV0YXBhZ2UgKiogbXBwKVxcbi0tXFxuZnMvamZzL2pmc19pbWFwLmMtMjY3MS1cXHQvKiByZWFkIHRoZSBpYWcuICovXFxuZnMvamZzL2pmc19pbWFwLmM6MjY3MjpcXHQqbXBwID0gcmVhZF9tZXRhcGFnZShpcGltYXAsIGJsa25vLCBQU0laRSwgMCk7XFxuZnMvamZzL2pmc19pbWFwLmMtMjY3My1cXHRpZiAoKm1wcCA9PSBOVUxMKSB7XFxuLS1cXG5mcy9qZnMvamZzX2ltYXAuYz0yOTgyPXN0YXRpYyB2b2lkIGR1cGxpY2F0ZUlYdHJlZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzNjQgYmxrbm8sXFxuLS1cXG5mcy9qZnMvamZzX2ltYXAuYy0zMDE2LVxcdC8qIHVwZGF0ZSB0aGUgaW5vZGUgbWFwJ3MgaW5vZGUgdG8gcmVmbGVjdCB0aGUgZXh0ZW5zaW9uICovXFxuZnMvamZzL2pmc19pbWFwLmM6MzAxNzpcXHRpcC1cXHUwMDNlaV9zaXplICs9IFBTSVpFO1xcbmZzL2pmcy9qZnNfaW1hcC5jOjMwMTg6XFx0aW5vZGVfYWRkX2J5dGVzKGlwLCBQU0laRSk7XFxuZnMvamZzL2pmc19pbWFwLmMtMzAxOS1cXHR0eENvbW1pdCh0aWQsIDEsIFxcdTAwMjZpcCwgQ09NTUlUX0ZPUkNFKTtcXG4tLVxcbmZzL2pmcy9qZnNfaW1hcC5oLTIyLVxcbmZzL2pmcy9qZnNfaW1hcC5oOjIzOiNkZWZpbmUgQU1BUFNJWkVcXHQ1MTJcXHQvKiBieXRlcyBpbiB0aGUgSUFHIGFsbG9jYXRpb24gbWFwcyAqL1xcbmZzL2pmcy9qZnNfaW1hcC5oOjI0OiNkZWZpbmUgU01BUFNJWkVcXHQxNlxcdC8qIGJ5dGVzIGluIHRoZSBJQUcgc3VtbWFyeSBtYXBzICovXFxuZnMvamZzL2pmc19pbWFwLmgtMjUtXFxuLS1cXG5mcy9qZnMvamZzX2xvZ21nci5jPTc0PXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobG9nX3JlZHJpdmVfbG9jayk7XFxuLS1cXG5mcy9qZnMvamZzX2xvZ21nci5jLTkwLSAqL1xcbmZzL2pmcy9qZnNfbG9nbWdyLmM6OTE6I2RlZmluZVxcdExPR1NZTkNfREVMVEEobG9nc2l6ZSlcXHRcXHRtaW4oKGxvZ3NpemUpLzgsIDEyOCpMT0dQU0laRSlcXG5mcy9qZnMvamZzX2xvZ21nci5jLTkyLSNkZWZpbmVcXHRMT0dTWU5DX0JBUlJJRVIobG9nc2l6ZSlcXHQoKGxvZ3NpemUpLzQpXFxuZnMvamZzL2pmc19sb2dtZ3IuYy05My0vKlxcbmZzL2pmcy9qZnNfbG9nbWdyLmM6OTQ6I2RlZmluZVxcdExPR1NZTkNfREVMVEEobG9nc2l6ZSlcXHRcXHRtaW4oKGxvZ3NpemUpLzQsIDI1NipMT0dQU0laRSlcXG5mcy9qZnMvamZzX2xvZ21nci5jLTk1LSNkZWZpbmVcXHRMT0dTWU5DX0JBUlJJRVIobG9nc2l6ZSlcXHQoKGxvZ3NpemUpLzIpXFxuLS1cXG5mcy9qZnMvamZzX2xvZ21nci5jPTM0Mj1sbVdyaXRlUmVjb3JkKHN0cnVjdCBqZnNfbG9nICogbG9nLCBzdHJ1Y3QgdGJsb2NrICogdGJsaywgc3RydWN0IGxyZCAqIGxyZCxcXG4tLVxcbmZzL2pmcy9qZnNfbG9nbWdyLmMtNDAzLVxcdFxcdC8qIGlzIHBhZ2UgZnVsbCA/ICovXFxuZnMvamZzL2pmc19sb2dtZ3IuYzo0MDQ6XFx0XFx0aWYgKGRzdG9mZnNldCBcXHUwMDNlPSBMT0dQU0laRSAtIExPR1BUTFJTSVpFKSB7XFxuZnMvamZzL2pmc19sb2dtZ3IuYy00MDUtXFx0XFx0XFx0LyogcGFnZSBiZWNvbWUgZnVsbDogbW92ZSBvbiB0byBuZXh0IHBhZ2UgKi9cXG4tLVxcbmZzL2pmcy9qZnNfbG9nbWdyLmMtNDE5LVxcdFxcdHdoaWxlIChzcmNsZW4gXFx1MDAzZSAwKSB7XFxuZnMvamZzL2pmc19sb2dtZ3IuYzo0MjA6XFx0XFx0XFx0ZnJlZXNwYWNlID0gKExPR1BTSVpFIC0gTE9HUFRMUlNJWkUpIC0gZHN0b2Zmc2V0O1xcbmZzL2pmcy9qZnNfbG9nbWdyLmMtNDIxLVxcdFxcdFxcdG5ieXRlcyA9IG1pbihmcmVlc3BhY2UsIHNyY2xlbik7XFxuLS1cXG5mcy9qZnMvamZzX2xvZ21nci5jLTQyNi1cXHRcXHRcXHQvKiBpcyBwYWdlIG5vdCBmdWxsID8gKi9cXG5mcy9qZnMvamZzX2xvZ21nci5jOjQyNzpcXHRcXHRcXHRpZiAoZHN0b2Zmc2V0IFxcdTAwM2MgTE9HUFNJWkUgLSBMT0dQVExSU0laRSlcXG5mcy9qZnMvamZzX2xvZ21nci5jLTQyOC1cXHRcXHRcXHRcXHRicmVhaztcXG4tLVxcbmZzL2pmcy9qZnNfbG9nbWdyLmMtNDY3LVxcdHdoaWxlIChzcmNsZW4gXFx1MDAzZSAwKSB7XFxuZnMvamZzL2pmc19sb2dtZ3IuYzo0Njg6XFx0XFx0ZnJlZXNwYWNlID0gKExPR1BTSVpFIC0gTE9HUFRMUlNJWkUpIC0gZHN0b2Zmc2V0O1xcbmZzL2pmcy9qZnNfbG9nbWdyLmMtNDY5LVxcdFxcdG5ieXRlcyA9IG1pbihmcmVlc3BhY2UsIHNyY2xlbik7XFxuLS1cXG5mcy9qZnMvamZzX2xvZ21nci5jLTQ4Ni1cXHRcXHRicC1cXHUwMDNlbF9lb3IgPSBkc3RvZmZzZXQ7XFxuZnMvamZzL2pmc19sb2dtZ3IuYzo0ODc6XFx0XFx0bHNuID0gKGxvZy1cXHUwMDNlcGFnZSBcXHUwMDNjXFx1MDAzYyBMMkxPR1BTSVpFKSArIGRzdG9mZnNldDtcXG5mcy9qZnMvamZzX2xvZ21nci5jLTQ4OC1cXG4tLVxcbmZzL2pmcy9qZnNfbG9nbWdyLmMtNTIxLVxcdFxcdC8qIHBhZ2Ugbm90IGZ1bGwgPyAqL1xcbmZzL2pmcy9qZnNfbG9nbWdyLmM6NTIyOlxcdFxcdGlmIChkc3RvZmZzZXQgXFx1MDAzYyBMT0dQU0laRSAtIExPR1BUTFJTSVpFKVxcbmZzL2pmcy9qZnNfbG9nbWdyLmMtNTIzLVxcdFxcdFxcdHJldHVybiBsc247XFxuLS1cXG5mcy9qZnMvamZzX2xvZ21nci5jPTkxOT1zdGF0aWMgaW50IGxtTG9nU3luYyhzdHJ1Y3QgamZzX2xvZyAqIGxvZywgaW50IGhhcmRfc3luYylcXG4tLVxcbmZzL2pmcy9qZnNfbG9nbWdyLmMtOTgxLVxcdG1vcmUgPSBtaW4oZnJlZSAvIDIsIGRlbHRhKTtcXG5mcy9qZnMvamZzX2xvZ21nci5jOjk4MjpcXHRpZiAobW9yZSBcXHUwMDNjIDIgKiBMT0dQU0laRSkge1xcbmZzL2pmcy9qZnNfbG9nbWdyLmMtOTgzLVxcdFxcdGpmc193YXJuKFxcXCJcXFxcbiAuLi4gTG9nIFdyYXAgLi4uIExvZyBXcmFwIC4uLiBMb2cgV3JhcCAuLi5cXFxcblxcXCIpO1xcbi0tXFxuZnMvamZzL2pmc19sb2dtZ3IuYz0xMTUyPXN0YXRpYyBpbnQgb3Blbl9pbmxpbmVfbG9nKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9qZnMvamZzX2xvZ21nci5jLTExNjUtXFx0bG9nLVxcdTAwM2VzaXplID0gbGVuZ3RoUFhEKFxcdTAwMjZKRlNfU0JJKHNiKS1cXHUwMDNlbG9ncHhkKSBcXHUwMDNlXFx1MDAzZVxcbmZzL2pmcy9qZnNfbG9nbWdyLmM6MTE2NjpcXHQgICAgKEwyTE9HUFNJWkUgLSBzYi1cXHUwMDNlc19ibG9ja3NpemVfYml0cyk7XFxuZnMvamZzL2pmc19sb2dtZ3IuYy0xMTY3LVxcdGxvZy1cXHUwMDNlbDJic2l6ZSA9IHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzO1xcbmZzL2pmcy9qZnNfbG9nbWdyLmM6MTE2ODpcXHRBU1NFUlQoTDJMT0dQU0laRSBcXHUwMDNlPSBzYi1cXHUwMDNlc19ibG9ja3NpemVfYml0cyk7XFxuZnMvamZzL2pmc19sb2dtZ3IuYy0xMTY5LVxcbi0tXFxuZnMvamZzL2pmc19sb2dtZ3IuYz0xMjM3PWludCBsbUxvZ0luaXQoc3RydWN0IGpmc19sb2cgKiBsb2cpXFxuLS1cXG5mcy9qZnMvamZzX2xvZ21nci5jLTEyNzAtXFx0aWYgKCF0ZXN0X2JpdChsb2dfSU5MSU5FTE9HLCBcXHUwMDI2bG9nLVxcdTAwM2VmbGFnKSlcXG5mcy9qZnMvamZzX2xvZ21nci5jOjEyNzE6XFx0XFx0bG9nLVxcdTAwM2VsMmJzaXplID0gTDJMT0dQU0laRTtcXG5mcy9qZnMvamZzX2xvZ21nci5jLTEyNzItXFxuLS1cXG5mcy9qZnMvamZzX2xvZ21nci5jLTEzMjQtXFxuZnMvamZzL2pmc19sb2dtZ3IuYzoxMzI1OlxcdFxcdGxvZy1cXHUwMDNlcGFnZSA9IGxlMzJfdG9fY3B1KGxvZ3N1cGVyLVxcdTAwM2VlbmQpIC8gTE9HUFNJWkU7XFxuZnMvamZzL2pmc19sb2dtZ3IuYzoxMzI2OlxcdFxcdGxvZy1cXHUwMDNlZW9yID0gbGUzMl90b19jcHUobG9nc3VwZXItXFx1MDAzZWVuZCkgLSAoTE9HUFNJWkUgKiBsb2ctXFx1MDAzZXBhZ2UpO1xcbmZzL2pmcy9qZnNfbG9nbWdyLmMtMTMyNy1cXG4tLVxcbmZzL2pmcy9qZnNfbG9nbWdyLmMtMTM0NS1cXHRcXHQvKiBpZiBjdXJyZW50IHBhZ2UgaXMgZnVsbCwgbW92ZSBvbiB0byBuZXh0IHBhZ2UgKi9cXG5mcy9qZnMvamZzX2xvZ21nci5jOjEzNDY6XFx0XFx0aWYgKGxvZy1cXHUwMDNlZW9yIFxcdTAwM2U9IExPR1BTSVpFIC0gTE9HUFRMUlNJWkUpXFxuZnMvamZzL2pmc19sb2dtZ3IuYy0xMzQ3LVxcdFxcdFxcdGxtTmV4dFBhZ2UobG9nKTtcXG4tLVxcbmZzL2pmcy9qZnNfbG9nbWdyLmMtMTM4NC1cXHQvKiBpbml0aWFsaXplIGxvZ3N5bmMgcGFyYW1ldGVycyAqL1xcbmZzL2pmcy9qZnNfbG9nbWdyLmM6MTM4NTpcXHRsb2ctXFx1MDAzZWxvZ3NpemUgPSAobG9nLVxcdTAwM2VzaXplIC0gMikgXFx1MDAzY1xcdTAwM2MgTDJMT0dQU0laRTtcXG5mcy9qZnMvamZzX2xvZ21nci5jLTEzODYtXFx0bG9nLVxcdTAwM2Vsc24gPSBsc247XFxuLS1cXG5mcy9qZnMvamZzX2xvZ21nci5jPTE3ODQ9c3RhdGljIGludCBsYm1Mb2dJbml0KHN0cnVjdCBqZnNfbG9nICogbG9nKVxcbi0tXFxuZnMvamZzL2pmc19sb2dtZ3IuYy0xODE3LVxcdFxcdGJ1ZmZlciA9IHBhZ2VfYWRkcmVzcyhwYWdlKTtcXG5mcy9qZnMvamZzX2xvZ21nci5jOjE4MTg6XFx0XFx0Zm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgXFx1MDAzYyBQQUdFX1NJWkU7IG9mZnNldCArPSBMT0dQU0laRSkge1xcbmZzL2pmcy9qZnNfbG9nbWdyLmMtMTgxOS1cXHRcXHRcXHRsYnVmID0ga21hbGxvY19vYmooc3RydWN0IGxidWYpO1xcbi0tXFxuZnMvamZzL2pmc19sb2dtZ3IuYz0xODczPXN0YXRpYyBzdHJ1Y3QgbGJ1ZiAqbGJtQWxsb2NhdGUoc3RydWN0IGpmc19sb2cgKiBsb2csIGludCBwbilcXG4tLVxcbmZzL2pmcy9qZnNfbG9nbWdyLmMtMTg5MS1cXHRicC1cXHUwMDNlbF9wbiA9IHBuO1xcbmZzL2pmcy9qZnNfbG9nbWdyLmM6MTg5MjpcXHRicC1cXHUwMDNlbF9ibGtubyA9IGxvZy1cXHUwMDNlYmFzZSArIChwbiBcXHUwMDNjXFx1MDAzYyAoTDJMT0dQU0laRSAtIGxvZy1cXHUwMDNlbDJic2l6ZSkpO1xcbmZzL2pmcy9qZnNfbG9nbWdyLmMtMTg5My1cXHRicC1cXHUwMDNlbF9jZW9yID0gMDtcXG4tLVxcbmZzL2pmcy9qZnNfbG9nbWdyLmM9MTk1OT1zdGF0aWMgaW50IGxibVJlYWQoc3RydWN0IGpmc19sb2cgKiBsb2csIGludCBwbiwgc3RydWN0IGxidWYgKiogYnBwKVxcbi0tXFxuZnMvamZzL2pmc19sb2dtZ3IuYy0xOTczLVxcdGJpby1cXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgPSBicC1cXHUwMDNlbF9ibGtubyBcXHUwMDNjXFx1MDAzYyAobG9nLVxcdTAwM2VsMmJzaXplIC0gOSk7XFxuZnMvamZzL2pmc19sb2dtZ3IuYzoxOTc0OlxcdF9fYmlvX2FkZF9wYWdlKGJpbywgYnAtXFx1MDAzZWxfcGFnZSwgTE9HUFNJWkUsIGJwLVxcdTAwM2VsX29mZnNldCk7XFxuZnMvamZzL2pmc19sb2dtZ3IuYzoxOTc1OlxcdEJVR19PTihiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSAhPSBMT0dQU0laRSk7XFxuZnMvamZzL2pmc19sb2dtZ3IuYy0xOTc2LVxcbi0tXFxuZnMvamZzL2pmc19sb2dtZ3IuYz0yMDA4PXN0YXRpYyB2b2lkIGxibVdyaXRlKHN0cnVjdCBqZnNfbG9nICogbG9nLCBzdHJ1Y3QgbGJ1ZiAqIGJwLCBpbnQgZmxhZyxcXG4tLVxcbmZzL2pmcy9qZnNfbG9nbWdyLmMtMjAxNy1cXHRicC1cXHUwMDNlbF9ibGtubyA9XFxuZnMvamZzL2pmc19sb2dtZ3IuYzoyMDE4OlxcdCAgICBsb2ctXFx1MDAzZWJhc2UgKyAoYnAtXFx1MDAzZWxfcG4gXFx1MDAzY1xcdTAwM2MgKEwyTE9HUFNJWkUgLSBsb2ctXFx1MDAzZWwyYnNpemUpKTtcXG5mcy9qZnMvamZzX2xvZ21nci5jLTIwMTktXFxuLS1cXG5mcy9qZnMvamZzX2xvZ21nci5jPTIwNzY9c3RhdGljIHZvaWQgbGJtRGlyZWN0V3JpdGUoc3RydWN0IGpmc19sb2cgKiBsb2csIHN0cnVjdCBsYnVmICogYnAsIGludCBmbGFnKVxcbi0tXFxuZnMvamZzL2pmc19sb2dtZ3IuYy0yMDg3LVxcdGJwLVxcdTAwM2VsX2Jsa25vID1cXG5mcy9qZnMvamZzX2xvZ21nci5jOjIwODg6XFx0ICAgIGxvZy1cXHUwMDNlYmFzZSArIChicC1cXHUwMDNlbF9wbiBcXHUwMDNjXFx1MDAzYyAoTDJMT0dQU0laRSAtIGxvZy1cXHUwMDNlbDJic2l6ZSkpO1xcbmZzL2pmcy9qZnNfbG9nbWdyLmMtMjA4OS1cXG4tLVxcbmZzL2pmcy9qZnNfbG9nbWdyLmM9MjEwNj1zdGF0aWMgdm9pZCBsYm1TdGFydElPKHN0cnVjdCBsYnVmICogYnApXFxuLS1cXG5mcy9qZnMvamZzX2xvZ21nci5jLTIxMTktXFx0YmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NlY3RvciA9IGJwLVxcdTAwM2VsX2Jsa25vIFxcdTAwM2NcXHUwMDNjIChsb2ctXFx1MDAzZWwyYnNpemUgLSA5KTtcXG5mcy9qZnMvamZzX2xvZ21nci5jOjIxMjA6XFx0X19iaW9fYWRkX3BhZ2UoYmlvLCBicC1cXHUwMDNlbF9wYWdlLCBMT0dQU0laRSwgYnAtXFx1MDAzZWxfb2Zmc2V0KTtcXG5mcy9qZnMvamZzX2xvZ21nci5jOjIxMjE6XFx0QlVHX09OKGJpby1cXHUwMDNlYmlfaXRlci5iaV9zaXplICE9IExPR1BTSVpFKTtcXG5mcy9qZnMvamZzX2xvZ21nci5jLTIxMjItXFxuLS1cXG5mcy9qZnMvamZzX2xvZ21nci5jPTIxNjc9c3RhdGljIHZvaWQgbGJtSU9Eb25lKHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmZzL2pmcy9qZnNfbG9nbWdyLmMtMjIxNy1cXHRsb2cgPSBicC1cXHUwMDNlbF9sb2c7XFxuZnMvamZzL2pmc19sb2dtZ3IuYzoyMjE4OlxcdGxvZy1cXHUwMDNlY2xzbiA9IChicC1cXHUwMDNlbF9wbiBcXHUwMDNjXFx1MDAzYyBMMkxPR1BTSVpFKSArIGJwLVxcdTAwM2VsX2Nlb3I7XFxuZnMvamZzL2pmc19sb2dtZ3IuYy0yMjE5LVxcbi0tXFxuZnMvamZzL2pmc19sb2dtZ3IuYz0yMzQ5PWludCBsbUxvZ0Zvcm1hdChzdHJ1Y3QgamZzX2xvZyAqbG9nLCBzNjQgbG9nQWRkcmVzcywgaW50IGxvZ1NpemUpXFxuLS1cXG5mcy9qZnMvamZzX2xvZ21nci5jLTIzOTAtXFx0bG9nc3VwZXItXFx1MDAzZWwyYnNpemUgPSBjcHVfdG9fbGUzMihzYmktXFx1MDAzZWwyYnNpemUpO1xcbmZzL2pmcy9qZnNfbG9nbWdyLmM6MjM5MTpcXHRsb2dzdXBlci1cXHUwMDNlZW5kID0gY3B1X3RvX2xlMzIoMiAqIExPR1BTSVpFICsgTE9HUEhEUlNJWkUgKyBMT0dSRFNJWkUpO1xcbmZzL2pmcy9qZnNfbG9nbWdyLmMtMjM5Mi1cXG4tLVxcbmZzL2pmcy9qZnNfbG9nbWdyLmgtMTgtLyogbG9nIHBhZ2Ugc2l6ZSAqL1xcbmZzL2pmcy9qZnNfbG9nbWdyLmg6MTk6I2RlZmluZVxcdExPR1BTSVpFXFx0NDA5NlxcbmZzL2pmcy9qZnNfbG9nbWdyLmg6MjA6I2RlZmluZVxcdEwyTE9HUFNJWkVcXHQxMlxcbmZzL2pmcy9qZnNfbG9nbWdyLmgtMjEtXFxuLS1cXG5mcy9qZnMvamZzX2xvZ21nci5oPTUzPXN0cnVjdCBsb2dzdXBlciB7XFxuLS1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6MDE6MTEuNTUxNjg5NjkzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3ODQ4MzE3NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgSkZTIE1ldGFwYWdlIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBKRlMgY29kZSBhbmQgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCBoYW5kbGVzIG1ldGFwYWdlcywgcGFydGljdWxhcmx5IGluIHJlbGF0aW9uIHRvIHRoZSBwYWdlIHNpemUuIFJpZ2h0LCBgUFNJWkVgIGlzIGRlZmluZWQgYXMgNDA5NiBpbiBgZnMvamZzL2pmc19maWxzeXMuaGAuIFRoYXQncyBhIGNvbnN0YW50LiBJIGtub3cgYFBBR0VfU0laRWAgb24geDg2XzY0IGlzIGFsc28gNDA5Ni4gVGh1cywgb24geDg2XzY0IGBQQUdFX1NJWkUgPT0gUFNJWkVgLiBUaGlzIG1lYW5zIHRoZSBgI2lmIFBBR0VfU0laRSBcdTAwM2UgUFNJWkVgIGlzIGZhbHNlLCBhbmQgdGhlcmVmb3JlIHRoZSBgI2Vsc2VgIGJyYW5jaCBjb250YWluaW5nIHRoZSBgaW5zZXJ0X21ldGFwYWdlYCBmdW5jdGlvbiB3aWxsIGJlIHVzZWQuXG5cbk5vdywgdGhhdCBgaW5zZXJ0X21ldGFwYWdlYCBmdW5jdGlvbiwgYXMgZGVmaW5lZCBpbiB0aGF0IGAjZWxzZWAgYmxvY2ssIGFsd2F5cyByZXR1cm5zIDAuIFNvLCB0aGUgYGlmIChyZXQpYCBjb25kaXRpb24gdGhhdCBmb2xsb3dzIHdvdWxkIG5ldmVyIGJlIHRydWUgb24geDg2XzY0LiBCdXQgSSd2ZSBzZWVuIHN5emJvdCByZXBvcnRzIGZyb20geDg2XzY0LCBhcm02NCwgYW5kIHJpc2N2LCBzbyB0aGlzIHNlZW1zIHRvIGJlIG1vcmUgY29tcGxleC5cblxuQWgsIG9uIGFybTY0LCBpdCdzIHBvc3NpYmxlIGZvciBgUEFHRV9TSVpFYCB0byBiZSA2NEssIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiBgUFNJWkVgLiBTbywgaWYgYFBBR0VfU0laRWAgaXMgNjRLLCB0aGUgYCNpZmAgY29uZGl0aW9uIGlzIHRydWUuIFRoYXQgbWVhbnMgdGhlICpvdGhlciogZGVmaW5pdGlvbiBvZiBgaW5zZXJ0X21ldGFwYWdlYCBpcyB1c2VkIOKAkyB0aGUgb25lIHRoYXQgKmNhbiogcmV0dXJuIGAtRU5PTUVNYC4gVGhhdCBtYWtlcyBzZW5zZS4gVGhlIGBtZXRhcGFnZV9yZWFkX2ZvbGlvYCBmdW5jdGlvbiBzZWVtcyB0byBiZSByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgdGhlIGVycm9yIHdoZW4gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMuXG5cbkhhbmcgb24gYSBzZWMuLi5pcyB0aGF0IHRoZSBvbmx5IGNvbmRpdGlvbj8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBQQUdFX1NJWkUgXHUwMDNlIFBTSVpFYCBpcyB0aGUgYWN0dWFsIGdvdmVybmluZyBmYWN0b3IuIEkgbmVlZCB0byBsb29rIGluIGBmcy9qZnMvamZzX21ldGFwYWdlLmNgIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NDQyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjAxOjE5LjMzNjUyNTE2NVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ2NDA4NDksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlBBR0VfU0laRSBcXHUwMDNlIFBTSVpFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2pmcy9qZnNfbWV0YXBhZ2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6MDE6MTkuMzkxMTc1NDQ0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MzA2ODgxMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKlByaW9yaXRpemluZyBDb25kaXRpb25hbCBMb2dpYyBpbiBNZXRhcGFnZSBJbnNlcnRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gYWJvdXQgdG8gY2FsbCBgaW5zZXJ0X21ldGFwYWdlYCwgYnV0IGJlZm9yZSBJIGRvLCBJIHJlYWxseSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGAjaWZgIGNvbmRpdGlvbi4gSXQncyB0aGUgZ2F0ZWtlZXBlciwgcmlnaHQ/IFdlIGNhbid0IGp1c3QgYmxpbmRseSBpbnNlcnQgdGhlIG1ldGFwYWdlIGlmIGl0J3Mgbm90IHdhcnJhbnRlZC4gVGhhdCBjb25kaXRpb24gbGlrZWx5IGVuY2Fwc3VsYXRlcyBzb21lIGNydWNpYWwgbG9naWMsIHBlcmhhcHMgcmVsYXRlZCB0byB0aGUgY29udGV4dCwgc3RhdGUsIG9yIGV2ZW4gZGF0YSB2YWxpZGl0eS4gSWdub3JpbmcgaXQgY291bGQgbGVhZCB0byBhbGwgc29ydHMgb2YgaXNzdWVzIOKAkyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiwgaW5jb3JyZWN0IGRhdGEgc3RydWN0dXJlcywgb3IgZXZlbiBvdXRyaWdodCBlcnJvcnMuIFdlJ3ZlIHNlZW4gdGhpcyBoYXBwZW4gYmVmb3JlLiBMZXQncyBtYWtlIHN1cmUgdGhhdCBjb25kaXRpb24gaXMgKnRydWUqIGFuZCB0aGF0IGl0IHN0aWxsIGhvbGRzIHZhbGlkIHVuZGVyIHRoZSBwcmV2YWlsaW5nIGNvbmRpdGlvbnMuIEknbSBnb2luZyB0byBjYXJlZnVsbHkgcmUtZXZhbHVhdGUgdGhhdCBgI2lmYCBzdGF0ZW1lbnQganVzdCB0byBiZSBzdXJlLiBJJ2xsIGV2ZW4gY29uc2lkZXIgYSBmZXcgZWRnZSBjYXNlcyBpbiBteSBoZWFkIGFzIGEgc2FuaXR5IGNoZWNrLiBObyBzZW5zZSB0YWtpbmcgc2hvcnRjdXRzIGhlcmUuIFRoaXMgY3JpdGljYWwgYml0IG9mIGNvbmRpdGlvbmFsIGxvZ2ljIGRldGVybWluZXMgdGhlIGVudGlyZSBpbnNlcnRpb24gcGF0aC4gQmV0dGVyIHNhZmUgdGhhbiBzb3JyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkyNjQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDowMToyMy45MjE4NjU4OTlaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzOTM3NDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNpZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9qZnMvamZzX21ldGFwYWdlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvamZzL2pmc19tZXRhcGFnZS5jLTI1LVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzoyNjojaWZkZWYgQ09ORklHX0pGU19TVEFUSVNUSUNTXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTI3LXN0YXRpYyBzdHJ1Y3Qge1xcbi0tXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jPTcxPXN0YXRpYyBtZW1wb29sX3QgKm1ldGFwYWdlX21lbXBvb2w7XFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtNzQtXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jOjc1OiNpZiBNUFNfUEVSX1BBR0UgXFx1MDAzZSAxXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTc2LVxcbi0tXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jPTE0Mz1zdGF0aWMgaW5saW5lIHZvaWQgZGVjX2lvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJsa19zdGF0dXNfdCBzdGF0dXMsXFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtMTU0LVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzoxNTU6I2lmZGVmIENPTkZJR19NSUdSQVRJT05cXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtMTU2LXN0YXRpYyBpbnQgX19tZXRhcGFnZV9taWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jPTIyMj1zdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlX21ldGFwYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZXRhcGFnZSAqbXApXFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtMjMwLVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzoyMzE6I2lmZGVmIENPTkZJR19NSUdSQVRJT05cXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtMjMyLXN0YXRpYyBpbnQgX19tZXRhcGFnZV9taWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jPTYxNz1zdGF0aWMgYm9vbCBtZXRhcGFnZV9yZWxlYXNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTY0NS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmM6NjQ2OiNpZmRlZiBDT05GSUdfTUlHUkFUSU9OXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTY0Ny0vKlxcbi0tXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jPTkwMz12b2lkIF9faW52YWxpZGF0ZV9tZXRhcGFnZXMoc3RydWN0IGlub2RlICppcCwgczY0IGFkZHIsIGludCBsZW4pXFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtOTQyLVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzo5NDM6I2lmZGVmIENPTkZJR19KRlNfU1RBVElTVElDU1xcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy05NDQtaW50IGpmc19tcHN0YXRfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6MDE6MjMuOTg1ODA3MjM4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NjI5NDY1NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gYW5kIGEgUG90ZW50aWFsIFBhZ2UtTGV2ZWwgT3B0aW1pemF0aW9uKipcblxuQWgsIGEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlISBgI2lmIE1QU19QRVJfUEFHRSBcdTAwM2UgMWAuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIGZvciBtZW1vcnkgcGFnZSBtYW5hZ2VtZW50LiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiT2theSwgbGV0J3MgdW5wYWNrIHRoaXMgYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuXCIgTXkgaW1tZWRpYXRlIHRhc2sgaXMgdG8gZGV0ZXJtaW5lIHRoZSBjdXJyZW50IHZhbHVlIG9mIGBNUFNfUEVSX1BBR0VgLiBJcyB0aGlzIHZhcmlhYmxlIGRlZmluZWQ/IFdoYXQgdmFsdWUgaXMgaXQgc2V0IHRvPyBXaGF0IGlzIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmxvY2s/IElzIGl0IHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBoYXJkd2FyZSBjb25maWd1cmF0aW9uLCBhIHBhcnRpY3VsYXIgbWVtb3J5IGFsbG9jYXRvciBzdHJhdGVneSwgb3IgcGVyaGFwcyBhIHRyYWRlLW9mZiBiZXR3ZWVuIG1lbW9yeSB1dGlsaXphdGlvbiBhbmQgY2FjaGUgZWZmaWNpZW5jeT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGNvbmRpdGlvbmFsIGlzIGdhdGluZy4gSXMgYE1QU19QRVJfUEFHRWAgcmVwcmVzZW50YXRpdmUgb2YgTXVsdGkgUHJvY2Vzc2luZyBwZXIgUGFnZT8gVGhpcyB2YWx1ZSBjb3VsZCBwcm92aWRlIGRpZmZlcmVudCBwZXJmb3JtYW5jZSBkZXBlbmRpbmcgb24gc3lzdGVtIHBhcmFtZXRlcnMuIEdldHRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgZmxhZyBmaXJzdCBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZvbGxvd2luZyBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDIwNCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjAxOjI3Ljk0ODc1NzMxOVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3NDE4MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTVBTX1BFUl9QQUdFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2pmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvamZzL2pmc19tZXRhcGFnZS5jPTcxPXN0YXRpYyBtZW1wb29sX3QgKm1ldGFwYWdlX21lbXBvb2w7XFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTcyLVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzo3MzojZGVmaW5lIE1QU19QRVJfUEFHRSAoUEFHRV9TSVpFIFxcdTAwM2VcXHUwMDNlIEwyUFNJWkUpXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTc0LVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzo3NTojaWYgTVBTX1BFUl9QQUdFIFxcdTAwM2UgMVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy03Ni1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmM9Nzc9c3RydWN0IG1ldGFfYW5jaG9yIHtcXG4tLVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy04MC1cXHRibGtfc3RhdHVzX3Qgc3RhdHVzO1xcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzo4MTpcXHRzdHJ1Y3QgbWV0YXBhZ2UgKm1wW01QU19QRVJfUEFHRV07XFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTgyLX07XFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmM9OTM9c3RhdGljIGlubGluZSBpbnQgaW5zZXJ0X21ldGFwYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZXRhcGFnZSAqbXApXFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtMTA5LVxcdFxcdGwybXBfYmxvY2tzID0gTDJQU0laRSAtIGZvbGlvLVxcdTAwM2VtYXBwaW5nLVxcdTAwM2Vob3N0LVxcdTAwM2VpX2Jsa2JpdHM7XFxuZnMvamZzL2pmc19tZXRhcGFnZS5jOjExMDpcXHRcXHRpbmRleCA9IChtcC1cXHUwMDNlaW5kZXggXFx1MDAzZVxcdTAwM2UgbDJtcF9ibG9ja3MpIFxcdTAwMjYgKE1QU19QRVJfUEFHRSAtIDEpO1xcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy0xMTEtXFx0XFx0YS1cXHUwMDNlbXBfY291bnQrKztcXG4tLVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYz0xMTg9c3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9tZXRhcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWV0YXBhZ2UgKm1wKVxcbi0tXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTEyMy1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmM6MTI0OlxcdGluZGV4ID0gKG1wLVxcdTAwM2VpbmRleCBcXHUwMDNlXFx1MDAzZSBsMm1wX2Jsb2NrcykgXFx1MDAyNiAoTVBTX1BFUl9QQUdFIC0gMSk7XFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTEyNS1cXG4tLVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYz0xNTY9c3RhdGljIGludCBfX21ldGFwYWdlX21pZ3JhdGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtMTYwLVxcdHN0cnVjdCBtZXRhX2FuY2hvciAqc3JjX2FuY2hvciA9IHNyYy1cXHUwMDNlcHJpdmF0ZTtcXG5mcy9qZnMvamZzX21ldGFwYWdlLmM6MTYxOlxcdHN0cnVjdCBtZXRhcGFnZSAqbXBzW01QU19QRVJfUEFHRV0gPSB7MH07XFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTE2Mi1cXHRzdHJ1Y3QgbWV0YXBhZ2UgKm1wO1xcbi0tXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTE2NC1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmM6MTY1OlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBNUFNfUEVSX1BBR0U7IGkrKykge1xcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy0xNjYtXFx0XFx0bXAgPSBzcmNfYW5jaG9yLVxcdTAwM2VtcFtpXTtcXG4tLVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy0xNzQtXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jOjE3NTpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTVBTX1BFUl9QQUdFOyBpKyspIHtcXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtMTc2LVxcdFxcdG1wID0gc3JjX2FuY2hvci1cXHUwMDNlbXBbaV07XFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtMTkwLVxcdC8qIFVwZGF0ZSB0aGUgbWV0YXBhZ2UgYW5kIHJlbW92ZSBpdCBmcm9tIHNyYyAqL1xcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzoxOTE6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1QU19QRVJfUEFHRTsgaSsrKSB7XFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTE5Mi1cXHRcXHRtcCA9IG1wc1tpXTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6MDE6MjcuOTk2NTA0NzI4WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwOTQ2MjkwMDExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBKRlMgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGF0IGBNUFNfUEVSX1BBR0VgIGlzIGRldGVybWluZWQgYnkgYFBBR0VfU0laRWAgYW5kIGBMMlBTSVpFYCwgd2hpY2ggaXMgYSBjb25zdGFudCAxMiwgcmVwcmVzZW50aW5nIDQwOTYgYnl0ZXMgKDJeMTIpLiBTbywgb24geDg2XzY0LCBgUEFHRV9TSVpFYCBpcyBhbHNvIDQwOTYsIG1lYW5pbmcgYE1QU19QRVJfUEFHRWAgaXMgMS4gVGhpcyBtZWFucyB0aGUgYCNpZiBNUFNfUEVSX1BBR0UgXHUwMDNlIDFgIGNvbmRpdGlvbiBpcyBmYWxzZSBvbiB4ODZfNjQuXG5cbkNvbnNlcXVlbnRseSwgYGluc2VydF9tZXRhcGFnZWAgYWx3YXlzIHJldHVybnMgMCBvbiB4ODZfNjQgYmVjYXVzZSB0aGUgY29kZSBibG9jayBpbnNpZGUgdGhlIGBpZmAgc3RhdGVtZW50IGlzIG5ldmVyIGV4ZWN1dGVkLiBUaGlzIGluaXRpYWxseSBtYWRlIG1lIHRoaW5rIHRoZSBwYXRjaCBoYWQgbm8gZnVuY3Rpb25hbCBpbXBhY3Qgb24geDg2XzY0LlxuXG5Ib3dldmVyLCBJIGltbWVkaWF0ZWx5IHRob3VnaHQsIGhhbmcgb24sIHRoaXMgKmRvZXMqIGFmZmVjdCBhcmNoaXRlY3R1cmVzIGxpa2UgYXJtNjQsIGFuZCBwb3RlbnRpYWxseSBwcGM2NCwgd2hlcmUgYFBBR0VfU0laRWAgY2FuIGJlIHNpZ25pZmljYW50bHkgbGFyZ2VyLCBmb3IgZXhhbXBsZSA2NEsuIFRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMsIGlzIHRoaXMgd29ydGggZnV6emluZz8gU3l6Ym90IGRvZXMgcnVuIG9uIGFybTY0IGFuZCByaXNjdjY0LlxuXG5CdXQsIGRvZXMgaXQ/IE15IG1lbW9yeSB0ZWxscyBtZSBpdCBoYXMgYXJtNjQgaW5zdGFuY2VzIGFuZCB0aGVyZWZvcmUgaXQgKmlzKiB3b3J0aCBmdXp6aW5nLiBCdXQgZXZlbiBpZiBpdCB3YXMganVzdCBhcm02NCwgaXQncyBzdGlsbCBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBrZXJuZWwuXG5cbk5vdywgbGV0IG1lIGdvIGRlZXBlci4gSXMgdGhlcmUgYW55IHdheSBgaW5zZXJ0X21ldGFwYWdlYCBjYW4gZmFpbCBvbiB4ODZfNjQ/IE5vLCBpdCBsb29rcyBsaWtlIGl0IGp1c3QgYXR0YWNoZXMgYSBgbWV0YXBhZ2VgIHRvIGEgYGZvbGlvYCBhbmQgbWFwcyBpdC5cblxuYGBgY1xuc3RhdGljIGlubGluZSBpbnQgaW5zZXJ0X21ldGFwYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZXRhcGFnZSAqbXApXG57XG5cdGlmIChtcCkge1xuXHRcdGZvbGlvX2F0dGFjaF9wcml2YXRlKGZvbGlvLCBtcCk7XG5cdFx0a21hcChcdTAwMjZmb2xpby1cdTAwM2VwYWdlKTtcblx0fVxuXHRyZXR1cm4gMDtcbn1cbmBgYFxuXG5XYWl0LCBgZm9saW9fYXR0YWNoX3ByaXZhdGVgIGRvZXNuJ3QgcmV0dXJuIGFueXRoaW5nLiBUaGVyZWZvcmUsIGl0IG5ldmVyIGZhaWxzIG9uIHg4Nl82NC5cblxuT24gdGhlIG90aGVyIGhhbmQsIGFybTY0IHdpdGggNjRLIHBhZ2VzIGNoYW5nZXMgdGhlIGdhbWUuIEhlcmUsIGBNUFNfUEVSX1BBR0VgIGlzIDE2LiBgaW5zZXJ0X21ldGFwYWdlYCB0aGVuIGFsbG9jYXRlcyBhIGBzdHJ1Y3QgbWV0YV9hbmNob3JgIHVzaW5nIGBremFsbG9jX29iamAsIHdoaWNoIGNhbiByZXR1cm4gYC1FTk9NRU1gLiBUaGUgcGF0Y2ggY29ycmVjdGx5IGhhbmRsZXMgdGhpcyBgLUVOT01FTWAgY2FzZSwgYnJlYWtpbmcgb3V0IG9mIHRoZSBsb29wIGFuZCByZXR1cm5pbmcgdGhlIGVycm9yLiBDcnVjaWFsbHksIGJlZm9yZSB0aGUgcGF0Y2gsIHRoaXMgZXJyb3Igd2FzIGlnbm9yZWQsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3Igb3RoZXIgc3VidGxlIGJ1Z3MgbGF0ZXIgb24uIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGJ1ZyBmaXguXG5cbk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEl0IGFwcGVhcnMgSkZTX0ZTIGlzIHRoZSBvbmx5IG9uZSByZXF1aXJlZC4gSSBzaG91bGQgZm9jdXMgb24gdGhlIHN5bWJvbHMgYGpmc19maWxsX3N1cGVyYCwgYF9fZ2V0X21ldGFwYWdlYCwgYGRpUmVhZGAsIGBkaVdyaXRlYCwgYGRiTW91bnRgLCBhbmQgYGVhX2dldGAuXG5cbkZpbmFsbHksIGlzIGBtZXRhcGFnZV9yZWFkX2ZvbGlvYCByZWFjaGFibGUgb24geDg2XzY0PyBZZXMsIGl0IGlzLiBCdXQsIHRoZSBlcnJvciBwYXRoIGlzIG9ubHkgcmVhY2hhYmxlIG9uIGFyY2hpdGVjdHVyZXMgd2l0aCBgUEFHRV9TSVpFIFx1MDAzZSA0MDk2YC4gU3RpbGwsIHRoZSBwcmVzZW5jZSBvZiBhcm02NCBpbiBzeXpib3QgdGVzdGluZyBtYWtlcyBmdXp6aW5nIHdvcnRod2hpbGUuIEJlc2lkZXMgdGhhdCwgdGhlIHBhdGNoIGZpeGVzIGNvcmUgSkZTIGxvZ2ljLlxuXG5XYWl0LCBzaG91bGQgSSBjaGVjayBpZiBgaW5zZXJ0X21ldGFwYWdlYCBpcyBjYWxsZWQgYW55d2hlcmUgZWxzZT8gSSB3aWxsIGxvb2sgZm9yIG90aGVyIGNhbGwgc2l0ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNDE5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjAxOjM4Ljk0Mjc5NzEwOVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5NTgxOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5zZXJ0X21ldGFwYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2pmcy9qZnNfbWV0YXBhZ2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9qZnMvamZzX21ldGFwYWdlLmM9ODQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgbWV0YXBhZ2UgKmZvbGlvX3RvX21wKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvZmZzZXQpXFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtOTItXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jOjkzOnN0YXRpYyBpbmxpbmUgaW50IGluc2VydF9tZXRhcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWV0YXBhZ2UgKm1wKVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy05NC17XFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmM9MTU2PXN0YXRpYyBpbnQgX19tZXRhcGFnZV9taWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTE3OC1cXHRcXHRcXHRjb250aW51ZTtcXG5mcy9qZnMvamZzX21ldGFwYWdlLmM6MTc5OlxcdFxcdGlmICh1bmxpa2VseShpbnNlcnRfbWV0YXBhZ2UoZHN0LCBtcCkpKSB7XFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTE4MC1cXHRcXHRcXHQvKiBJZiBlcnJvciwgcm9sbC1iYWNrIHByZXZpb3NseSBpbnNlcnRlZCBwYWdlcyAqL1xcbi0tXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jPTIwOD1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZXRhcGFnZSAqZm9saW9fdG9fbXAoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9mZnNldClcXG4tLVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy0yMTItXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jOjIxMzpzdGF0aWMgaW5saW5lIGludCBpbnNlcnRfbWV0YXBhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1ldGFwYWdlICptcClcXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtMjE0LXtcXG4tLVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYz0yMzI9c3RhdGljIGludCBfX21ldGFwYWdlX21pZ3JhdGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtMjQ3LVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzoyNDg6XFx0aWYgKHVubGlrZWx5KGluc2VydF9tZXRhcGFnZShkc3QsIG1wKSkpXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTI0OS1cXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4tLVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYz01NjU9c3RhdGljIGludCBtZXRhcGFnZV9yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy01ODctXFx0XFx0XFx0aWYgKCFmb2xpby1cXHUwMDNlcHJpdmF0ZSkge1xcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYzo1ODg6XFx0XFx0XFx0XFx0cmV0ID0gaW5zZXJ0X21ldGFwYWdlKGZvbGlvLCBOVUxMKTtcXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtNTg5LVxcdFxcdFxcdFxcdGlmIChyZXQpXFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmM9Njg4PXN0cnVjdCBtZXRhcGFnZSAqX19nZXRfbWV0YXBhZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgbG9uZyBsYmxvY2ssXFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtNzc2LVxcdFxcdG1wLVxcdTAwM2VpbmRleCA9IGxibG9jaztcXG5mcy9qZnMvamZzX21ldGFwYWdlLmM6Nzc3OlxcdFxcdGlmICh1bmxpa2VseShpbnNlcnRfbWV0YXBhZ2UoZm9saW8sIG1wKSkpIHtcXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtNzc4LVxcdFxcdFxcdGZyZWVfbWV0YXBhZ2UobXApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDowMTozOC45ODg3NjMzNzhaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzk1MDE2NzgzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGaXhpbmcgYSBNZXRhcGFnZSBFcnJvciBhbmQgQ2hlY2tpbmcgQ29uZmlndXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGFuIGVycm9yIGhhbmRsaW5nIGlzc3VlIHdpdGhpbiB0aGUgbWV0YXBhZ2UgY29kZS4gU3BlY2lmaWNhbGx5LCB0aGUgZXJyb3IgaXMgdHJpZ2dlcmVkIHdpdGhpbiB0aGUgYF9fZ2V0X21ldGFwYWdlYCBhbmQgYF9fbWV0YXBhZ2VfbWlncmF0ZV9mb2xpb2AgZnVuY3Rpb25zLiBJIHNlZSB0aGF0IGBfX2dldF9tZXRhcGFnZWAgYWxyZWFkeSBoYXMgYSBnb29kIGVycm9yIGhhbmRsaW5nIG1lY2hhbmlzbSBpbiBwbGFjZSB1c2luZyB0aGlzIGBpbnNlcnRfbWV0YXBhZ2VgIGNhbGwgYW5kIHRoZSBzdWJzZXF1ZW50IGNsZWFudXAgdXNpbmcgYGZyZWVfbWV0YXBhZ2VgLCB3aGljaCBpcyBnb29kIHRvIHNlZS5cblxuVGhlIGlzc3VlIGxpZXMgaW4gYG1ldGFwYWdlX3JlYWRfZm9saW9gLCB0aG91Z2guIFRoZSBjb2RlIHdhc24ndCBwcm9wZXJseSBjaGVja2luZyB0aGUgcmVzdWx0IG9mIHBvdGVudGlhbGx5IGZhaWxpbmcgb3BlcmF0aW9ucyB0aGVyZSwgYW5kIHRoZSBwYXRjaCBmaXhlcyB0aGlzLiBUaGF0J3MgYSBzdHJhaWdodGZvcndhcmQgYnV0IGltcG9ydGFudCBjb3JyZWN0aW9uLlxuXG5Ob3csIGxldCdzIGp1c3QgZG8gYSBxdWljayBzY2FuIHRvIG1ha2Ugc3VyZSB0aGlzIGZpeCBkb2Vzbid0IGludGVyYWN0IHdpdGggYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIGluIGEgcG90ZW50aWFsbHkgdW5leHBlY3RlZCB3YXkuIEknbGwgY2hlY2sgdG8gc2VlIGlmIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyBtaWdodCBiZSBhdCBwbGF5IGhlcmUuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19KRlNfRlNgIGlzIHRoZSBwcmltYXJ5IG9uZSB0aGF0IGNvbWVzIHRvIG1pbmQsIGFuZCBJIGNhbid0IHNwb3QgYW55IG90aGVycyBhdCBhIHF1aWNrIGdsYW5jZSwgc28gSSB0aGluayB3ZSdyZSBzYWZlLlxuXG5BbHJpZ2h0LCBJJ20gc2F0aXNmaWVkIHRoYXQgdGhpcyBpcyBhIHZhbGlkIGFuZCB0YXJnZXRlZCBmaXguIFRpbWUgdG8gc2V0IHRoZSByZXN1bHRzIGFuZCBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzYxMywiT3V0cHV0VG9rZW5zIjoxNTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6MDE6NDYuOTM4OTM0NzU4WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODgyMDYyNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkpGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImpmc19maWxsX3N1cGVyXCIsXG4gICAgXCJfX2dldF9tZXRhcGFnZVwiLFxuICAgIFwiZGlSZWFkXCIsXG4gICAgXCJkaVdyaXRlXCIsXG4gICAgXCJkYk1vdW50XCIsXG4gICAgXCJlYV9nZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbWV0YXBhZ2VfcmVhZF9mb2xpb2AgaW4gdGhlIEpGUyBmaWxlc3lzdGVtIHRvIHByb3Blcmx5IGhhbmRsZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyBmcm9tIGBpbnNlcnRfbWV0YXBhZ2VgLiBUaGlzIGVycm9yIHBhdGggaXMgcmVhY2hhYmxlIG9uIGFyY2hpdGVjdHVyZXMgd2hlcmUgUEFHRV9TSVpFIFxcdTAwM2UgNDA5NiAoZS5nLiwgYXJtNjQsIHBwYzY0KSBhbmQgZml4ZXMgYSBwb3RlbnRpYWwgYnVnIHdoZXJlIHRoZSBlcnJvciB3YXMgaWdub3JlZC4gSXQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIEpGUyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJKRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJqZnNfZmlsbF9zdXBlclwiLFxuICAgIFwiX19nZXRfbWV0YXBhZ2VcIixcbiAgICBcImRpUmVhZFwiLFxuICAgIFwiZGlXcml0ZVwiLFxuICAgIFwiZGJNb3VudFwiLFxuICAgIFwiZWFfZ2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYG1ldGFwYWdlX3JlYWRfZm9saW9gIGluIHRoZSBKRlMgZmlsZXN5c3RlbSB0byBwcm9wZXJseSBoYW5kbGUgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgZnJvbSBgaW5zZXJ0X21ldGFwYWdlYC4gVGhpcyBlcnJvciBwYXRoIGlzIHJlYWNoYWJsZSBvbiBhcmNoaXRlY3R1cmVzIHdoZXJlIFBBR0VfU0laRSBcXHUwMDNlIDQwOTYgKGUuZy4sIGFybTY0LCBwcGM2NCkgYW5kIGZpeGVzIGEgcG90ZW50aWFsIGJ1ZyB3aGVyZSB0aGUgZXJyb3Igd2FzIGlnbm9yZWQuIEl0IGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBKRlMgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjAxOjQ3LjAyNzE0OTI3N1oiLCJTZXEiOjQxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA1MjIwMzAzNjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDowMTo0Ny4wMjc3MzgyOTdaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTA1MjE0MzUzNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWlzc2luZyBlcnJvciBjaGVjayBmb3IgYGluc2VydF9tZXRhcGFnZSgpYCwgd2hpY2ggY2FuIGZhaWwgYW5kIHJldHVybiBgLUVOT01FTWAgaWYgYGt6YWxsb2Nfb2JqKClgIGZhaWxzIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgYSBgbWV0YV9hbmNob3JgIHN0cnVjdHVyZS4gV2l0aG91dCB0aGlzIGNoZWNrLCB0aGUgY29kZSB3b3VsZCBjb250aW51ZSBleGVjdXRpbmcgZXZlbiBpZiB0aGUgYWxsb2NhdGlvbiBmYWlsZWQsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3Igb3RoZXIgbWVtb3J5LXJlbGF0ZWQgYnVncyB3aGVuIGBmb2xpby1cXHUwMDNlcHJpdmF0ZWAgaXMgZXhwZWN0ZWQgdG8gYmUgaW5pdGlhbGl6ZWQuIFRoaXMgaXMgYSBzdGFuZGFyZCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIGFuZCBlcnJvciBoYW5kbGluZyBidWcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gU3RhbmRhcmQgS0FTQU4gKHdoaWNoIGRldGVjdHMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgdXNlLWFmdGVyLWZyZWUpIGFuZCBiYXNpYyBrZXJuZWwgY3Jhc2ggZGV0ZWN0aW9uIChmb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcykgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhlIGNvbnNlcXVlbmNlcyBvZiB0aGlzIGJ1Zy4gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZSBiZWNhdXNlIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IGBremFsbG9jX29iaigpYCBpcyBhbHJlYWR5IHplcm8taW5pdGlhbGl6ZWQsIGFuZCB0aGUgYnVnIGRvZXMgbm90IGludm9sdmUgcmVhZGluZyB1bmluaXRpYWxpemVkIHN0YWNrLCBoZWFwLCBvciBwYWRkaW5nIGJ5dGVzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQ1YWExZmMzMTk4MzZjOWJiNWRiZDc5YmEzNjUxZTFmMDk2MTMzODJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxOTo1OTo1OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuYyBiL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuY1xuaW5kZXggNDFmZTEyZTY0MWNlZS4uZmZiYjE4NmU4NTBjNiAxMDA2NDRcbi0tLSBhL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuY1xuKysrIGIvZnMvamZzL2pmc19tZXRhcGFnZS5jXG5AQCAtNTczLDYgKzU3Myw3IEBAIHN0YXRpYyBpbnQgbWV0YXBhZ2VfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRpbnQgeGxlbjtcbiBcdHVuc2lnbmVkIGludCBsZW47XG4gXHRpbnQgb2Zmc2V0O1xuK1x0aW50IHJldCA9IDA7XG4gXG4gXHRCVUdfT04oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSk7XG4gXHRwYWdlX3N0YXJ0ID0gZm9saW9fcG9zKGZvbGlvKSBcdTAwM2VcdTAwM2UgaW5vZGUtXHUwMDNlaV9ibGtiaXRzO1xuQEAgLTU4Myw4ICs1ODQsMTEgQEAgc3RhdGljIGludCBtZXRhcGFnZV9yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFx0cGJsb2NrID0gbWV0YXBhZ2VfZ2V0X2Jsb2Nrcyhpbm9kZSwgcGFnZV9zdGFydCArIGJsb2NrX29mZnNldCxcbiBcdFx0XHRcdFx0ICAgICBcdTAwMjZ4bGVuKTtcbiBcdFx0aWYgKHBibG9jaykge1xuLVx0XHRcdGlmICghZm9saW8tXHUwMDNlcHJpdmF0ZSlcbi1cdFx0XHRcdGluc2VydF9tZXRhcGFnZShmb2xpbywgTlVMTCk7XG4rXHRcdFx0aWYgKCFmb2xpby1cdTAwM2Vwcml2YXRlKSB7XG4rXHRcdFx0XHRyZXQgPSBpbnNlcnRfbWV0YXBhZ2UoZm9saW8sIE5VTEwpO1xuK1x0XHRcdFx0aWYgKHJldClcbitcdFx0XHRcdFx0YnJlYWs7XG4rXHRcdFx0fVxuIFx0XHRcdGluY19pbyhmb2xpbyk7XG4gXHRcdFx0aWYgKGJpbylcbiBcdFx0XHRcdHN1Ym1pdF9iaW8oYmlvKTtcbkBAIC02MDcsNyArNjExLDcgQEAgc3RhdGljIGludCBtZXRhcGFnZV9yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGVsc2VcbiBcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGJvb2wgbWV0YXBhZ2VfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnBfbWFzaylcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjAxOjQ3LjAyNzczOTA0N1oiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTEyMDkzOTA4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEpGUyBNZXRhcGFnZSBSZWFkIEZ1bmN0aW9uKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB6ZXJvaW5nIGluIG9uIGBtZXRhcGFnZV9yZWFkX2ZvbGlvYCB3aXRoaW4gYGZzL2pmcy9qZnNfbWV0YXBhZ2UuY2AuIEkgc2VlIGl0J3Mgc3BlY2lmaWNhbGx5IGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgZmFpbHVyZSBwb2ludCB3aGVuIGRlYWxpbmcgd2l0aCBtZXRhcGFnZXMuIFRoZSBjaGFuZ2UgaXMgc3RyYWlnaHRmb3J3YXJkOiBhIGNydWNpYWwgcmV0dXJuIHZhbHVlIGNoZWNrIGhhcyBiZWVuIGFkZGVkIGFmdGVyIHRoZSBjYWxsIHRvIGBpbnNlcnRfbWV0YXBhZ2UoZm9saW8sIE5VTEwpYC5cblxuVGhlIGNvcmUgb2YgaXQgaXMgdGhpczogaWYgYGluc2VydF9tZXRhcGFnZWAgaGl0cyBhIHNuYWcgYW5kICpmYWlscyogZHVyaW5nIGl0cyBvcGVyYXRpb24sIHRoZSBwYXRjaGVkIGNvZGUgbm93IGNvcnJlY3RseSBicmVha3Mgb3V0IG9mIHRoZSBsb29wIGFuZCBwcm9wYWdhdGVzIHRoZSBlcnJvciBjb2RlIGJhY2sgdXAgdGhlIGNhbGwgc3RhY2suIFRoaXMgcHJldmVudHMgY29udGludWVkIHByb2Nlc3Npbmcgd2hlbiBhIG1ldGFwYWdlIGluc2VydGlvbiBnb2VzIHNpZGV3YXlzLiBXaXRob3V0IHRoaXMgY2hlY2ssIHdlJ2QgcG90ZW50aWFsbHkgYmUgY29udGludWluZyBkb3duIGEgcGF0aCB3aGVyZSBkYXRhIGludGVncml0eSBtaWdodCBiZSBjb21wcm9taXNlZCwgd2hpY2ggY291bGQgbGVhZCB0byBmaWxlIHN5c3RlbSBjb3JydXB0aW9uIG9yIG90aGVyIHVuZm9yZXNlZW4gaXNzdWVzLlxuXG5UbyBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byB6b29tIGluIGFuZCBleGFtaW5lIHRoZSBjb250ZXh0IHdpdGhpbiBgbWV0YXBhZ2VfcmVhZF9mb2xpb2AuIFdoYXQncyB0aGUgZmxvdz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgbG9vcCB0aGF0IGlzIGJlaW5nIGJyb2tlbj8gV2hhdCBlcnJvciBjb25kaXRpb25zIGNvdWxkIGxlYWQgdG8gYGluc2VydF9tZXRhcGFnZWAgZmFpbGluZyBpbiB0aGUgZmlyc3QgcGxhY2U/IEFuZCBJJ2xsIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IHRoaXMgYWRkZWQgZXJyb3IgaGFuZGxpbmcgbWlnaHQgYWZmZWN0IHBlcmZvcm1hbmNlLCB0aG91Z2ggaW4gdGhpcyBjYXNlLCBJJ2QgZXhwZWN0IHRoZSBwZXJmb3JtYW5jZSBpbXBhY3QgdG8gYmUgbWluaW1hbCBjb21wYXJlZCB0byB0aGUgZ2FpbiBpbiByb2J1c3RuZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjI5LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDowMTo1OC4xNDg2ODMwNjVaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI4OTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2pmcy9qZnNfbWV0YXBhZ2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NzA6XFx0XFx0aW50IGJsb2Nrc19wZXJfcGFnZSA9IGlfYmxvY2tzX3Blcl9mb2xpbyhpbm9kZSwgZm9saW8pO1xcbiA1NzE6XFx0XFx0c2VjdG9yX3QgcGFnZV9zdGFydDtcXHQvKiBhZGRyZXNzIG9mIHBhZ2UgaW4gZnMgYmxvY2tzICovXFxuIDU3MjpcXHRcXHRzZWN0b3JfdCBwYmxvY2s7XFxuIDU3MzpcXHRcXHRpbnQgeGxlbjtcXG4gNTc0OlxcdFxcdHVuc2lnbmVkIGludCBsZW47XFxuIDU3NTpcXHRcXHRpbnQgb2Zmc2V0O1xcbiA1NzY6XFx0XFx0aW50IHJldCA9IDA7XFxuIDU3NzpcXHRcXG4gNTc4OlxcdFxcdEJVR19PTighZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pKTtcXG4gNTc5OlxcdFxcdHBhZ2Vfc3RhcnQgPSBmb2xpb19wb3MoZm9saW8pIFxcdTAwM2VcXHUwMDNlIGlub2RlLVxcdTAwM2VpX2Jsa2JpdHM7XFxuIDU4MDpcXHRcXG4gNTgxOlxcdFxcdGJsb2NrX29mZnNldCA9IDA7XFxuIDU4MjpcXHRcXHR3aGlsZSAoYmxvY2tfb2Zmc2V0IFxcdTAwM2MgYmxvY2tzX3Blcl9wYWdlKSB7XFxuIDU4MzpcXHRcXHRcXHR4bGVuID0gYmxvY2tzX3Blcl9wYWdlIC0gYmxvY2tfb2Zmc2V0O1xcbiA1ODQ6XFx0XFx0XFx0cGJsb2NrID0gbWV0YXBhZ2VfZ2V0X2Jsb2Nrcyhpbm9kZSwgcGFnZV9zdGFydCArIGJsb2NrX29mZnNldCxcXG4gNTg1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnhsZW4pO1xcbiA1ODY6XFx0XFx0XFx0aWYgKHBibG9jaykge1xcbiA1ODc6XFx0XFx0XFx0XFx0aWYgKCFmb2xpby1cXHUwMDNlcHJpdmF0ZSkge1xcbiA1ODg6XFx0XFx0XFx0XFx0XFx0cmV0ID0gaW5zZXJ0X21ldGFwYWdlKGZvbGlvLCBOVUxMKTtcXG4gNTg5OlxcdFxcdFxcdFxcdFxcdGlmIChyZXQpXFxuIDU5MDpcXHRcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gNTkxOlxcdFxcdFxcdFxcdH1cXG4gNTkyOlxcdFxcdFxcdFxcdGluY19pbyhmb2xpbyk7XFxuIDU5MzpcXHRcXHRcXHRcXHRpZiAoYmlvKVxcbiA1OTQ6XFx0XFx0XFx0XFx0XFx0c3VibWl0X2JpbyhiaW8pO1xcbiA1OTU6XFx0XFxuIDU5NjpcXHRcXHRcXHRcXHRiaW8gPSBiaW9fYWxsb2MoaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmRldiwgMSwgUkVRX09QX1JFQUQsXFxuIDU5NzpcXHRcXHRcXHRcXHRcXHRcXHRHRlBfTk9GUyk7XFxuIDU5ODpcXHRcXHRcXHRcXHRiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yID1cXG4gNTk5OlxcdFxcdFxcdFxcdFxcdHBibG9jayBcXHUwMDNjXFx1MDAzYyAoaW5vZGUtXFx1MDAzZWlfYmxrYml0cyAtIDkpO1xcbiA2MDA6XFx0XFx0XFx0XFx0YmlvLVxcdTAwM2ViaV9lbmRfaW8gPSBtZXRhcGFnZV9yZWFkX2VuZF9pbztcXG4gNjAxOlxcdFxcdFxcdFxcdGJpby1cXHUwMDNlYmlfcHJpdmF0ZSA9IGZvbGlvO1xcbiA2MDI6XFx0XFx0XFx0XFx0bGVuID0geGxlbiBcXHUwMDNjXFx1MDAzYyBpbm9kZS1cXHUwMDNlaV9ibGtiaXRzO1xcbiA2MDM6XFx0XFx0XFx0XFx0b2Zmc2V0ID0gYmxvY2tfb2Zmc2V0IFxcdTAwM2NcXHUwMDNjIGlub2RlLVxcdTAwM2VpX2Jsa2JpdHM7XFxuIDYwNDpcXHRcXHRcXHRcXHRiaW9fYWRkX2ZvbGlvX25vZmFpbChiaW8sIGZvbGlvLCBsZW4sIG9mZnNldCk7XFxuIDYwNTpcXHRcXHRcXHRcXHRibG9ja19vZmZzZXQgKz0geGxlbjtcXG4gNjA2OlxcdFxcdFxcdH0gZWxzZVxcbiA2MDc6XFx0XFx0XFx0XFx0YmxvY2tfb2Zmc2V0Kys7XFxuIDYwODpcXHRcXHR9XFxuIDYwOTpcXHRcXHRpZiAoYmlvKVxcbiA2MTA6XFx0XFx0XFx0c3VibWl0X2JpbyhiaW8pO1xcbiA2MTE6XFx0XFx0ZWxzZVxcbiA2MTI6XFx0XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4gNjEzOlxcdFxcbiA2MTQ6XFx0XFx0cmV0dXJuIHJldDtcXG4gNjE1OlxcdH1cXG4gNjE2OlxcdFxcbiA2MTc6XFx0c3RhdGljIGJvb2wgbWV0YXBhZ2VfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnBfbWFzaylcXG4gNjE4OlxcdHtcXG4gNjE5OlxcdFxcdHN0cnVjdCBtZXRhcGFnZSAqbXA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjAxOjU4LjE0ODgxMzk5NloiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTQ1NzY4MDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIGBpbnNlcnRfbWV0YXBhZ2VgIFJldHVybiBWYWx1ZSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IGhvdyB3ZSBoYW5kbGUgdGhlIHJldHVybiB2YWx1ZSBmcm9tIGBpbnNlcnRfbWV0YXBhZ2VgLiBTZWVtcyBsaWtlIGEgc2ltcGxlIHRoaW5nLCBidXQgcG90ZW50aWFsbHkgY3JpdGljYWwuIElmIGBpbnNlcnRfbWV0YXBhZ2VgIGZhaWxzIOKAkyBtYXliZSBkdWUgdG8gYSBtZW1vcnkgYWxsb2NhdGlvbiBpc3N1ZSwgb3Igc29tZSBvdGhlciB1bmV4cGVjdGVkIHByb2JsZW0g4oCTIGl0J3Mgc3VwcG9zZWQgdG8gcmV0dXJuIGFuIGVycm9yIGNvZGUsIHJpZ2h0PyBHb29kLiBUaGlzIG1ha2VzIHNlbnNlOyBpdCdzIGEgZGVmZW5zaXZlIHByb2dyYW1taW5nIG1lYXN1cmUuIFdlIG5lZWQgdG8gY2hlY2sgdGhlIHJldHVybiB2YWx1ZSBiZWNhdXNlIGlmIHdlICpkb24ndCosIGFuZCB0aGUgZnVuY3Rpb24gZmFpbGVkIHNpbGVudGx5LCB3ZSBjb3VsZCBiZSBsb29raW5nIGF0IGEgbWVtb3J5IGxlYWssIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlLCBvciBzb21ldGhpbmcgZXZlbiB3b3JzZSBkb3duIHRoZSBsaW5lLiBUaGF0J3MgYSBjbGFzc2ljIHNjZW5hcmlvLCBhbmQgdGhlIHNvcnQgb2YgYnVnIHdlICphYnNvbHV0ZWx5KiB3YW50IHRvIGF2b2lkLlxuXG5Ib2xkIG9uLCBJIHNlZSBgaW5zZXJ0X21ldGFwYWdlYCByZXR1cm5zIGFuIGBpbnRgLCBub3QgYSBwb2ludGVyIG9yIGEgbW9yZSBjb21wbGV4IHN0cnVjdHVyZSwgc28gbGV0IG1lIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBpbnNlcnRfbWV0YXBhZ2VgIHRvIGNoZWNrIHdoYXQgdHlwZSBvZiBlcnJvciBjb2RlcyBpdCByZXR1cm5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzkxLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6MDI6MDMuNjk0NTg1NTY5WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2pmcy9qZnNfbWV0YXBhZ2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNTA6XFx0XFxuIDE1MTpcXHRcXHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcXHUwMDI2YW5jaG9yLVxcdTAwM2Vpb19jb3VudCkpXFxuIDE1MjpcXHRcXHRcXHRoYW5kbGVyKGZvbGlvLCBhbmNob3ItXFx1MDAzZXN0YXR1cyk7XFxuIDE1MzpcXHR9XFxuIDE1NDpcXHRcXG4gMTU1OlxcdCNpZmRlZiBDT05GSUdfTUlHUkFUSU9OXFxuIDE1NjpcXHRzdGF0aWMgaW50IF9fbWV0YXBhZ2VfbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4gMTU3OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZm9saW8gKmRzdCwgc3RydWN0IGZvbGlvICpzcmMsXFxuIDE1ODpcXHRcXHRcXHRcXHRcXHQgICAgZW51bSBtaWdyYXRlX21vZGUgbW9kZSlcXG4gMTU5OlxcdHtcXG4gMTYwOlxcdFxcdHN0cnVjdCBtZXRhX2FuY2hvciAqc3JjX2FuY2hvciA9IHNyYy1cXHUwMDNlcHJpdmF0ZTtcXG4gMTYxOlxcdFxcdHN0cnVjdCBtZXRhcGFnZSAqbXBzW01QU19QRVJfUEFHRV0gPSB7MH07XFxuIDE2MjpcXHRcXHRzdHJ1Y3QgbWV0YXBhZ2UgKm1wO1xcbiAxNjM6XFx0XFx0aW50IGksIHJjO1xcbiAxNjQ6XFx0XFxuIDE2NTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTVBTX1BFUl9QQUdFOyBpKyspIHtcXG4gMTY2OlxcdFxcdFxcdG1wID0gc3JjX2FuY2hvci1cXHUwMDNlbXBbaV07XFxuIDE2NzpcXHRcXHRcXHRpZiAobXAgXFx1MDAyNlxcdTAwMjYgbWV0YXBhZ2VfbG9ja2VkKG1wKSlcXG4gMTY4OlxcdFxcdFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbiAxNjk6XFx0XFx0fVxcbiAxNzA6XFx0XFxuIDE3MTpcXHRcXHRyYyA9IGZpbGVtYXBfbWlncmF0ZV9mb2xpbyhtYXBwaW5nLCBkc3QsIHNyYywgbW9kZSk7XFxuIDE3MjpcXHRcXHRpZiAocmMpXFxuIDE3MzpcXHRcXHRcXHRyZXR1cm4gcmM7XFxuIDE3NDpcXHRcXG4gMTc1OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBNUFNfUEVSX1BBR0U7IGkrKykge1xcbiAxNzY6XFx0XFx0XFx0bXAgPSBzcmNfYW5jaG9yLVxcdTAwM2VtcFtpXTtcXG4gMTc3OlxcdFxcdFxcdGlmICghbXApXFxuIDE3ODpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gMTc5OlxcdFxcdFxcdGlmICh1bmxpa2VseShpbnNlcnRfbWV0YXBhZ2UoZHN0LCBtcCkpKSB7XFxuIDE4MDpcXHRcXHRcXHRcXHQvKiBJZiBlcnJvciwgcm9sbC1iYWNrIHByZXZpb3NseSBpbnNlcnRlZCBwYWdlcyAqL1xcbiAxODE6XFx0XFx0XFx0XFx0Zm9yIChpbnQgaiA9IDAgOyBqIFxcdTAwM2MgaTsgaisrKSB7XFxuIDE4MjpcXHRcXHRcXHRcXHRcXHRpZiAobXBzW2pdKVxcbiAxODM6XFx0XFx0XFx0XFx0XFx0XFx0cmVtb3ZlX21ldGFwYWdlKGRzdCwgbXBzW2pdKTtcXG4gMTg0OlxcdFxcdFxcdFxcdH1cXG4gMTg1OlxcdFxcdFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbiAxODY6XFx0XFx0XFx0fVxcbiAxODc6XFx0XFx0XFx0bXBzW2ldID0gbXA7XFxuIDE4ODpcXHRcXHR9XFxuIDE4OTpcXHRcXG4gMTkwOlxcdFxcdC8qIFVwZGF0ZSB0aGUgbWV0YXBhZ2UgYW5kIHJlbW92ZSBpdCBmcm9tIHNyYyAqL1xcbiAxOTE6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1QU19QRVJfUEFHRTsgaSsrKSB7XFxuIDE5MjpcXHRcXHRcXHRtcCA9IG1wc1tpXTtcXG4gMTkzOlxcdFxcdFxcdGlmIChtcCkge1xcbiAxOTQ6XFx0XFx0XFx0XFx0aW50IHBhZ2Vfb2Zmc2V0ID0gbXAtXFx1MDAzZWRhdGEgLSBmb2xpb19hZGRyZXNzKHNyYyk7XFxuIDE5NTpcXHRcXG4gMTk2OlxcdFxcdFxcdFxcdG1wLVxcdTAwM2VkYXRhID0gZm9saW9fYWRkcmVzcyhkc3QpICsgcGFnZV9vZmZzZXQ7XFxuIDE5NzpcXHRcXHRcXHRcXHRtcC1cXHUwMDNlZm9saW8gPSBkc3Q7XFxuIDE5ODpcXHRcXHRcXHRcXHRyZW1vdmVfbWV0YXBhZ2Uoc3JjLCBtcCk7XFxuIDE5OTpcXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjAyOjAzLjY5NDY4NDkwOVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjUwODk0NjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTG9jYXRpbmcgdGhlIE1ldGFwYWdlKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBsYXNlci1mb2N1c2VkOiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGxvY2F0aW9uIG9mIHRoZSBgaW5zZXJ0X21ldGFwYWdlYCBmdW5jdGlvbiBvciBmaWxlLiBUaGlzIGlzbid0IGp1c3QgYSBjYXN1YWwgc2VhcmNoOyBJJ20gYXNzdW1pbmcgdGhlcmUncyBhIHNwZWNpZmljLCB3ZWxsLWRlZmluZWQgcmVhc29uIEknbSB0YXJnZXRpbmcgdGhpcyBwYXJ0aWN1bGFyIGVsZW1lbnQuIE15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIHJ1bm5pbmcgdGhyb3VnaCB0aGUgbGlrZWx5IHNjZW5hcmlvcyBiYXNlZCBvbiBteSBmaWVsZC4gSSdtIGNvbnNpZGVyaW5nOlxuXG4qICAgKipQcm9qZWN0IENvbnRleHQ6KiogV2hhdCdzIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZT8gSXMgdGhpcyBhIGxlZ2FjeSBzeXN0ZW0sIGEgbW9kdWxhciBkZXNpZ24sIG9yIHNvbWV0aGluZyBtb3JlIG1vZGVybj8gVGhpcyBoZWxwcyBuYXJyb3cgZG93biB0aGUgcHJvYmFibGUgbG9jYXRpb25zIHdpdGhpbiB0aGUgcHJvamVjdCBzdHJ1Y3R1cmUuXG4qICAgKipDb2RpbmcgQ29udmVudGlvbnM6KiogV2hhdCBhcmUgdGhlIGVzdGFibGlzaGVkIG5hbWluZyBwYXR0ZXJucyBhbmQgZmlsZSBvcmdhbml6YXRpb24gcGFyYWRpZ21zPyBBcmUgd2UgZGVhbGluZyB3aXRoIG5hbWVzcGFjZXMsIGNsYXNzZXMsIG9yIGEgbW9yZSBwcm9jZWR1cmFsIGFwcHJvYWNoPyBUaGlzIGtub3dsZWRnZSBkaWN0YXRlcyB3aGVyZSBJJ2xsIGxvb2sgZmlyc3QuXG4qICAgKipSZWxhdGVkIENvbXBvbmVudHM6KiogV2hhdCBvdGhlciBtb2R1bGVzIG9yIGZ1bmN0aW9ucyB3b3VsZCByZWFzb25hYmx5IGludGVyYWN0IHdpdGggYGluc2VydF9tZXRhcGFnZWA/IFRyYWNpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGNhbiBwcm92aWRlIGEgZGlyZWN0IHBhdGguIEFyZSB0aGVyZSBhbnkga25vd24gZW50cnkgcG9pbnRzIG9yIEFQSSBjYWxscyB0aGF0IG1ha2UgdXNlIG9mIGl0P1xuKiAgICoqU2VhcmNoIFN0cmF0ZWdpZXM6KiogRGVwZW5kaW5nIG9uIHRoZSBzY2FsZSBhbmQgY29tcGxleGl0eSwgSSdsbCBkZXBsb3kgdGhlIGFwcHJvcHJpYXRlIHNlYXJjaCB0b29scyAtIGdyZXAsIGBmaW5kYCwgSURFLWludGVncmF0ZWQgc2VhcmNoLCBvciBldmVuIGNyb3NzLXJlZmVyZW5jaW5nIHRvb2xzLiBUaGUgYXBwcm9hY2ggd2lsbCB2YXJ5IGJhc2VkIG9uIHdoZXRoZXIgSSBoYXZlIGFjY2VzcyB0byB0aGUgZnVsbCBzb3VyY2UgY29kZSBhbmQgYW55IHZlcnNpb24gY29udHJvbCBzeXN0ZW1zLlxuKiAgICoqRXhwZWN0ZWQgZnVuY3Rpb25hbGl0eToqKiBXaGF0IGlzIG1lYW50IHRvIGhhcHBlbiBoZXJlPyBNeSBleHBlcnQtbGV2ZWwgdW5kZXJzdGFuZGluZyBvZiB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkgYWxsb3dzIG1lIHRvIG5hcnJvdyBkb3duIHdoYXQgSSBhbSBsb29raW5nIGZvciBieSBhc3Nlc3NpbmcgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIGFuZCBsb2dpYyBpdCB3aWxsIGJlIGludm9sdmVkIHdpdGguXG5cbk15IGdvYWwgaGVyZSBpcyBlZmZpY2llbnQgdHJpYWdlLiBJIHdhbnQgdG8gcmFwaWRseSBlbGltaW5hdGUgZGVhZCBlbmRzIGFuZCBmb2N1cyBteSBlZmZvcnQgb24gdGhlIG1vc3QgcHJvbWlzaW5nIGNhbmRpZGF0ZXMsIGFuZCBhbHNvIEkgd2FudCB0byBxdWlja2x5IGV2YWx1YXRlIGFueSByZWxhdGVkIHZhcmlhYmxlcywgZnVuY3Rpb25zIGFuZCBmaWxlcyB3aGljaCBtaWdodCBwb2ludCB0b3dhcmQgdGhlIGRlc2lyZWQgYW5zd2VyLiBJJ20gcmVhZHkgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlYmFzZSwgYnV0IEknbSBhcHByb2FjaGluZyB0aGlzIHdpdGggYSBzdHJhdGVnaWMsIGluZm9ybWVkIHBsYW4uIFRoZSBmaXJzdCBzdGVwLCBob3dldmVyLCBpcyB0byAqZmluZCogaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0OTUsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIwOjAyOjA3Ljk0NTU4NDAyN1oiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcyMjMyNzUzMywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnN0YXRpYyBpbnQgaW5zZXJ0X21ldGFwYWdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDowMjoxMC42Njc5MjY0MVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4OTM4ODk0Mjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNvbnNpZGVyaW5nIHRoZSBOYXR1cmUgb2YgdGhlIEVsZW1lbnQqKlxuXG5IbW0sIEknbSB0cnlpbmcgdG8gcGluIGRvd24gdGhlIGJlaGF2aW9yIG9mIHRoaXMgcGFydGljdWxhciB0aGluZy4gSSdtIHdvbmRlcmluZyBpZiBpdHMgc3RhdGUgaXMgdHJ1bHkgZml4ZWQsIG9yIGlmIHRoZXJlJ3Mgc29tZSBkeW5hbWljIGFzcGVjdCB0byBpdCB0aGF0IEknbSBvdmVybG9va2luZy4gVGhlIGluaXRpYWwgaW1wcmVzc2lvbiB3YXMgdGhhdCBpdCB3YXMgc3RhdGljLCBidXQgbm93IEkgbmVlZCB0byBxdWVzdGlvbiB0aGF0IGFzc3VtcHRpb24uIFBlcmhhcHMgdGhlIGFwcGFyZW50IFwic3RhdGljLW5lc3NcIiBpcyBhbiBpbGx1c2lvbiwgb3IgbWF5YmUgaXQncyBjb25maWd1cmVkIGluIGEgd2F5IHRoYXTigJlzIHZlcnkgY2xvc2VseSB0aWVkIHRvIGl0cyBpbW1lZGlhdGUgY29udGV4dCwgZWZmZWN0aXZlbHkgbWFraW5nIGl0ICpzZWVtKiBzdGF0aWMgZXZlbiBpZiBpdCBpc24ndC4gSSdtIGxlYW5pbmcgdG93YXJkIHRoaW5raW5nIGl0J3Mgbm90IHRydWx5IHN0YXRpYy4gVGhlIHF1ZXN0aW9uIGlzLCBpZiBpdCdzIG5vdCBzdGF0aWMsIHdoZXJlIGlzIHRoZSBkeW5hbWlzbSBjb21pbmcgZnJvbT8gQW5kIGhvdyBpcyBpdCBiZWluZyBpbnRyb2R1Y2VkP1xuXG5cbiIsIklucHV0VG9rZW5zIjo0OTkyLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjA6MDI6MTkuNjA2ODU3NDZaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NjIzNTQyMjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IGluc2VydF9tZXRhcGFnZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9qZnMvamZzX21ldGFwYWdlLmM9ODQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgbWV0YXBhZ2UgKmZvbGlvX3RvX21wKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvZmZzZXQpXFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtOTItXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jOjkzOnN0YXRpYyBpbmxpbmUgaW50IGluc2VydF9tZXRhcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWV0YXBhZ2UgKm1wKVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy05NC17XFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmM9MjA4PXN0YXRpYyBpbmxpbmUgc3RydWN0IG1ldGFwYWdlICpmb2xpb190b19tcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2Zmc2V0KVxcbi0tXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTIxMi1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmM6MjEzOnN0YXRpYyBpbmxpbmUgaW50IGluc2VydF9tZXRhcGFnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWV0YXBhZ2UgKm1wKVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy0yMTQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDowMjoyMS41NjkyMzk2MloiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjM2OTE1OTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBKRlMgTWV0YXBhZ2UgQ29kZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQncyBzdGFydCBieSBkaWdnaW5nIGludG8gYGZzL2pmcy9qZnNfbWV0YXBhZ2UuY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgYGluc2VydF9tZXRhcGFnZWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBKRlMgaGFuZGxlcyB0aGUgaW5zZXJ0aW9uIG9mIG1ldGFkYXRhIHBhZ2VzLiBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZD8gV2hhdCBsb2NraW5nIG1lY2hhbmlzbXMgYXJlIGVtcGxveWVkIHRvIGVuc3VyZSBjb25zaXN0ZW5jeSBhbmQgcHJldmVudCBjb3JydXB0aW9uIGR1cmluZyBjb25jdXJyZW50IGFjY2Vzcz9cblxuSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBibG9jayBkZXZpY2UuIElzIGl0IGEgZGlyZWN0IEkvTyBwYXRoLCBvciBkb2VzIGl0IHV0aWxpemUgdGhlIHBhZ2UgY2FjaGU/IEhvdyBhcmUgdGhlIGRpcnR5IHBhZ2VzIGZsdXNoZWQgdG8gZGlzaywgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucz8gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGluZWZmaWNpZW5jaWVzIGluIHRoZSBhbGdvcml0aG0sIGtlZXBpbmcgaW4gbWluZCB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9uIGhlYXZ5IHdvcmtsb2Fkcy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB3cml0ZSBhbXBsaWZpY2F0aW9uIGFyZSBhbHNvIG9uIG15IHJhZGFyLlxuXG5GdXJ0aGVybW9yZSwgSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZy4gSG93IHJvYnVzdCBpcyB0aGUgY29kZSBhZ2FpbnN0IHZhcmlvdXMgZmFpbHVyZXMsIHN1Y2ggYXMgZGlzayBlcnJvcnMsIG1lbW9yeSBhbGxvY2F0aW9uIHByb2JsZW1zLCBvciBpbmNvbnNpc3RlbmNpZXMgaW4gdGhlIEpGUyBtZXRhZGF0YSBpdHNlbGY/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBhcmVhcyBmb3IgaW1wcm92ZW1lbnQgaW4gdGVybXMgb2YgZXJyb3IgcmVwb3J0aW5nIG9yIHJlY292ZXJ5PyBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHN1cHBvc2VkIHRvIGJlaGF2ZS5cblxuRmluYWxseSwgSSdsbCBiZSBjb21wYXJpbmcgdGhpcyBjb2RlIHRvIHNpbWlsYXIgbWVjaGFuaXNtcyBpbiBvdGhlciBmaWxlc3lzdGVtcyBJJ3ZlIHN0dWRpZWQuIFdoYXQgYXJlIHRoZSB0cmFkZS1vZmZzIHRoYXQgSkZTIGhhcyBtYWRlIGluIGl0cyBpbXBsZW1lbnRhdGlvbj8gQXJlIHRoZXJlIGFueSBjbGV2ZXIgb3B0aW1pemF0aW9ucyBvciBub3ZlbCBhcHByb2FjaGVzIHRoYXQgSSBjYW4gbGVhcm4gZnJvbT8gVGhpcyB3aWxsIHByb3ZpZGUgbWUgd2l0aCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgaW5zZXJ0X21ldGFwYWdlYCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiB0aGUgSkZTIGZpbGVzeXN0ZW0gYW5kIGhvdyBpdCBjYW4gYmUgaW1wcm92ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NDgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDowMjoyNS44MDYxNTg2MzdaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxMjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2pmcy9qZnNfbWV0YXBhZ2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MDpcXHRcXHRibGtfc3RhdHVzX3Qgc3RhdHVzO1xcbiAgODE6XFx0XFx0c3RydWN0IG1ldGFwYWdlICptcFtNUFNfUEVSX1BBR0VdO1xcbiAgODI6XFx0fTtcXG4gIDgzOlxcdFxcbiAgODQ6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbWV0YXBhZ2UgKmZvbGlvX3RvX21wKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvZmZzZXQpXFxuICA4NTpcXHR7XFxuICA4NjpcXHRcXHRzdHJ1Y3QgbWV0YV9hbmNob3IgKmFuY2hvciA9IGZvbGlvLVxcdTAwM2Vwcml2YXRlO1xcbiAgODc6XFx0XFxuICA4ODpcXHRcXHRpZiAoIWFuY2hvcilcXG4gIDg5OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAgOTA6XFx0XFx0cmV0dXJuIGFuY2hvci1cXHUwMDNlbXBbb2Zmc2V0IFxcdTAwM2VcXHUwMDNlIEwyUFNJWkVdO1xcbiAgOTE6XFx0fVxcbiAgOTI6XFx0XFxuICA5MzpcXHRzdGF0aWMgaW5saW5lIGludCBpbnNlcnRfbWV0YXBhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1ldGFwYWdlICptcClcXG4gIDk0OlxcdHtcXG4gIDk1OlxcdFxcdHN0cnVjdCBtZXRhX2FuY2hvciAqYTtcXG4gIDk2OlxcdFxcdGludCBpbmRleDtcXG4gIDk3OlxcdFxcdGludCBsMm1wX2Jsb2NrcztcXHQvKiBsb2cyIGJsb2NrcyBwZXIgbWV0YXBhZ2UgKi9cXG4gIDk4OlxcdFxcbiAgOTk6XFx0XFx0YSA9IGZvbGlvLVxcdTAwM2Vwcml2YXRlO1xcbiAxMDA6XFx0XFx0aWYgKCFhKSB7XFxuIDEwMTpcXHRcXHRcXHRhID0ga3phbGxvY19vYmooc3RydWN0IG1ldGFfYW5jaG9yLCBHRlBfTk9GUyk7XFxuIDEwMjpcXHRcXHRcXHRpZiAoIWEpXFxuIDEwMzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMTA0OlxcdFxcdFxcdGZvbGlvX2F0dGFjaF9wcml2YXRlKGZvbGlvLCBhKTtcXG4gMTA1OlxcdFxcdFxcdGttYXAoXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlKTtcXG4gMTA2OlxcdFxcdH1cXG4gMTA3OlxcdFxcbiAxMDg6XFx0XFx0aWYgKG1wKSB7XFxuIDEwOTpcXHRcXHRcXHRsMm1wX2Jsb2NrcyA9IEwyUFNJWkUgLSBmb2xpby1cXHUwMDNlbWFwcGluZy1cXHUwMDNlaG9zdC1cXHUwMDNlaV9ibGtiaXRzO1xcbiAxMTA6XFx0XFx0XFx0aW5kZXggPSAobXAtXFx1MDAzZWluZGV4IFxcdTAwM2VcXHUwMDNlIGwybXBfYmxvY2tzKSBcXHUwMDI2IChNUFNfUEVSX1BBR0UgLSAxKTtcXG4gMTExOlxcdFxcdFxcdGEtXFx1MDAzZW1wX2NvdW50Kys7XFxuIDExMjpcXHRcXHRcXHRhLVxcdTAwM2VtcFtpbmRleF0gPSBtcDtcXG4gMTEzOlxcdFxcdH1cXG4gMTE0OlxcdFxcbiAxMTU6XFx0XFx0cmV0dXJuIDA7XFxuIDExNjpcXHR9XFxuIDExNzpcXHRcXG4gMTE4OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVfbWV0YXBhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1ldGFwYWdlICptcClcXG4gMTE5OlxcdHtcXG4gMTIwOlxcdFxcdHN0cnVjdCBtZXRhX2FuY2hvciAqYSA9IGZvbGlvLVxcdTAwM2Vwcml2YXRlO1xcbiAxMjE6XFx0XFx0aW50IGwybXBfYmxvY2tzID0gTDJQU0laRSAtIGZvbGlvLVxcdTAwM2VtYXBwaW5nLVxcdTAwM2Vob3N0LVxcdTAwM2VpX2Jsa2JpdHM7XFxuIDEyMjpcXHRcXHRpbnQgaW5kZXg7XFxuIDEyMzpcXHRcXG4gMTI0OlxcdFxcdGluZGV4ID0gKG1wLVxcdTAwM2VpbmRleCBcXHUwMDNlXFx1MDAzZSBsMm1wX2Jsb2NrcykgXFx1MDAyNiAoTVBTX1BFUl9QQUdFIC0gMSk7XFxuIDEyNTpcXHRcXG4gMTI2OlxcdFxcdEJVR19PTihhLVxcdTAwM2VtcFtpbmRleF0gIT0gbXApO1xcbiAxMjc6XFx0XFxuIDEyODpcXHRcXHRhLVxcdTAwM2VtcFtpbmRleF0gPSBOVUxMO1xcbiAxMjk6XFx0XFx0aWYgKC0tYS1cXHUwMDNlbXBfY291bnQgPT0gMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDowMjoyNS44MDYyODE5NTdaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE3NDI4NjUxNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgQWxsb2NhdGlvbiBFcnJvciBhbmQgS01TQU4gQXBwbGljYWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNlZSBpdCdzIGFib3V0IGEgbWlzc2luZyBlcnJvciBjaGVjayBhZnRlciBhIG1lbW9yeSBhbGxvY2F0aW9uLiBUaGUgYGluc2VydF9tZXRhcGFnZWAgZnVuY3Rpb24sIHVzaW5nIGBremFsbG9jX29iamAsIGlzIGFsbG9jYXRpbmcgYSBgc3RydWN0IG1ldGFfYW5jaG9yYC4gVGhlIGNyaXRpY2FsIGJpdCBpcywgaWYgYGt6YWxsb2Nfb2JqYCBmYWlscywgaXQgcmV0dXJucyBgLUVOT01FTWAuIFRoZSBvcmlnaW5hbCBjb2RlLCBob3dldmVyLCBqdXN0IGJsaXRoZWx5ICpjYWxsZWQqIGBpbnNlcnRfbWV0YXBhZ2VgIHdpdGhvdXQgY2hlY2tpbmcgdGhlIHJldHVybiB2YWx1ZS4gU28sIGlmIHRoZSBhbGxvY2F0aW9uIGJvbWJlZCwgYGZvbGlvLVx1MDAzZXByaXZhdGVgIHdvdWxkIHN0YXkgYE5VTExgLCBidXQgdGhlIHByb2dyYW0gd291bGQganVzdCBrZWVwIGNodWdnaW5nIGFsb25nLlxuXG5UaGF0J3MgYSBjbGFzc2ljIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBzaXR1YXRpb24gd2FpdGluZyB0byBoYXBwZW4sIG9yIHBvdGVudGlhbGx5LCBhIGJpbyBnZXRzIHN1Ym1pdHRlZCB3aXRob3V0IGl0cyBwcml2YXRlIGRhdGEgc2V0IHVwIHJpZ2h0LCBsZWFkaW5nIHRvIGdhcmJhZ2UgZGF0YSBvciBvdGhlciB1bmRlZmluZWQgYmVoYXZpb3IuIFRoZSBwYXRjaCBhZGRyZXNzZXMgdGhpcyBieSBhY3R1YWxseSAqY2hlY2tpbmcqIHRoZSByZXR1cm4gdmFsdWUgb2YgYGluc2VydF9tZXRhcGFnZWAgYW5kIGJyZWFraW5nIG91dCBvZiB0aGUgbG9vcCBpZiBpdCdzIGFuIGVycm9yLlxuXG5UaGUgaW1wb3J0YW50IHBvaW50IGlzIHRoYXQgdGhpcyBpcyAqanVzdCogYSBzdGFuZGFyZCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIGFuZCBhIG1pc3NpbmcgZXJyb3IgY2hlY2suIGBremFsbG9jX29iamAgKnplcm9lcyogdGhlIG1lbW9yeSBpdCBhbGxvY2F0ZXMuIFRoZXJlJ3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBoZXJlLiBJZiBga3phbGxvY19vYmpgIGZhaWxzLCB3ZSdyZSBub3QgZGVhbGluZyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQsIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHBvaW50ZXIgYmVpbmcgYE5VTExgIHdoZW4gdGhlIGNvZGUgKnRoaW5rcyogaXQncyB2YWxpZC5cblxuTGV0IG1lIG1ha2Ugc3VyZS4uLklmIGBpbnNlcnRfbWV0YXBhZ2VgIGZhaWxzLCBgcmV0YCBiZWNvbWVzIGAtRU5PTUVNYCwgYW5kIHRoZSBsb29wIGJhaWxzIG91dC4gUHJldmlvdXNseSwgaXQgd291bGQgaGF2ZSBqdXN0IGtlcHQgZ29pbmchIFRoZSBvcmlnaW5hbCBjb2RlIHdvdWxkIGhhdmUgcmV0dXJuZWQgMCwgYWxsb3dpbmcgdGhlIGZvbGlvIHRvIGJlIHJlYWQgZXZlbiB0aG91Z2ggaXQncyBub3Qgc2V0IHVwLiBUaGlzIGNvbmZpcm1zIG15IGluaXRpYWwgdGhvdWdodDoganVzdCBhIG1pc3NpbmcgZXJyb3IgY2hlY2suXG5cblRoZXJlZm9yZSwgS01TQU4gaXNuJ3QgcmVsZXZhbnQgaGVyZS4gS01TQU4gaXMgZm9yIGNhdGNoaW5nIHJlYWRzIG9mICp1bmluaXRpYWxpemVkKiBtZW1vcnksIG5vdCBtZW1vcnkgdGhhdCB3YXMgbmV2ZXIgYWxsb2NhdGVkIGNvcnJlY3RseSBpbiB0aGUgZmlyc3QgcGxhY2UsIG9yIG1lbW9yeSB0aGF0IHdhcyBhbGxvY2F0ZWQgYnV0IHRoZW4gbm90IGFzc2lnbmVkIHRvIHByb3Blcmx5LiBLQVNBTiBhbmQgc3RhbmRhcmQgY2hlY2tzIGZvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIHdpbGwgYmUgcGVyZmVjdGx5IHN1ZmZpY2llbnQgdG8gZGV0ZWN0IHRoaXMgYnVnLCBzaW5jZSBpdCdzIGFuIGFjY2VzcyB0byBhIHplcm8tZmlsbGVkIGBmb2xpby1cdTAwM2Vwcml2YXRlYCBvciBhIGRlcmVmZXJlbmNlIG9mIGEgYE5VTExgIHBvaW50ZXIuXG5cbkhlcmUncyB0aGUgcmVhc29uaW5nIHRvIGRvY3VtZW50OiBUaGUgcGF0Y2ggY29ycmVjdGx5IGFkZHJlc3NlcyBhIG1pc3NpbmcgZXJyb3IgY2hlY2suIGBpbnNlcnRfbWV0YXBhZ2VgIGNvdWxkIGZhaWwgZHVyaW5nIHRoZSBhbGxvY2F0aW9uIG9mIGEgYG1ldGFfYW5jaG9yYCB1c2luZyBga3phbGxvY19vYmpgLCB3aGljaCByZXR1cm5zIGAtRU5PTUVNYCBvbiBmYWlsdXJlLiBXaXRob3V0IHRoZSBwYXRjaCwgdGhlIGNvZGUgd291bGQgY29udGludWUgdG8gdXNlIHRoZSBtZW1vcnkgYXMgaWYgaXQgaGFkIGJlZW4gc3VjY2Vzc2Z1bGx5IGFsbG9jYXRlZCwgd2hpY2ggbWF5IGNhdXNlIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3Igb3RoZXIgbWVtb3J5LXJlbGF0ZWQgaXNzdWVzIHdoZW4gYWNjZXNzaW5nIGBmb2xpby1cdTAwM2Vwcml2YXRlYC4gSG93ZXZlciwgdGhlIG1lbW9yeSBpcyBpbml0aWFsaXplZCB2aWEgYGt6YWxsb2Nfb2JqYCwgc28gaXQncyBub3QgYSByZWFkIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCBtZW1vcnkgZXJyb3IgZGV0ZWN0aW9uIGlzIHN1ZmZpY2llbnQsIGFuZCB0aGUgaXNzdWUgaXMgbm90IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLiBOZWVkc0tNU0FOIHNob3VsZCBiZSBmYWxzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU3MywiT3V0cHV0VG9rZW5zIjoyMjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMDowMjozNy41NDkxNTA2NzlaIiwiU2VxIjo1NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWlzc2luZyBlcnJvciBjaGVjayBmb3IgYGluc2VydF9tZXRhcGFnZSgpYCwgd2hpY2ggY2FuIGZhaWwgYW5kIHJldHVybiBgLUVOT01FTWAgaWYgYGt6YWxsb2Nfb2JqKClgIGZhaWxzIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgYSBgbWV0YV9hbmNob3JgIHN0cnVjdHVyZS4gV2l0aG91dCB0aGlzIGNoZWNrLCB0aGUgY29kZSB3b3VsZCBjb250aW51ZSBleGVjdXRpbmcgZXZlbiBpZiB0aGUgYWxsb2NhdGlvbiBmYWlsZWQsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3Igb3RoZXIgbWVtb3J5LXJlbGF0ZWQgYnVncyB3aGVuIGBmb2xpby1cXHUwMDNlcHJpdmF0ZWAgaXMgZXhwZWN0ZWQgdG8gYmUgaW5pdGlhbGl6ZWQuIFRoaXMgaXMgYSBzdGFuZGFyZCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIGFuZCBlcnJvciBoYW5kbGluZyBidWcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gU3RhbmRhcmQgS0FTQU4gKHdoaWNoIGRldGVjdHMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgdXNlLWFmdGVyLWZyZWUpIGFuZCBiYXNpYyBrZXJuZWwgY3Jhc2ggZGV0ZWN0aW9uIChmb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcykgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhlIGNvbnNlcXVlbmNlcyBvZiB0aGlzIGJ1Zy4gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZSBiZWNhdXNlIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IGBremFsbG9jX29iaigpYCBpcyBhbHJlYWR5IHplcm8taW5pdGlhbGl6ZWQsIGFuZCB0aGUgYnVnIGRvZXMgbm90IGludm9sdmUgcmVhZGluZyB1bmluaXRpYWxpemVkIHN0YWNrLCBoZWFwLCBvciBwYWRkaW5nIGJ5dGVzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWlzc2luZyBlcnJvciBjaGVjayBmb3IgYGluc2VydF9tZXRhcGFnZSgpYCwgd2hpY2ggY2FuIGZhaWwgYW5kIHJldHVybiBgLUVOT01FTWAgaWYgYGt6YWxsb2Nfb2JqKClgIGZhaWxzIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgYSBgbWV0YV9hbmNob3JgIHN0cnVjdHVyZS4gV2l0aG91dCB0aGlzIGNoZWNrLCB0aGUgY29kZSB3b3VsZCBjb250aW51ZSBleGVjdXRpbmcgZXZlbiBpZiB0aGUgYWxsb2NhdGlvbiBmYWlsZWQsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3Igb3RoZXIgbWVtb3J5LXJlbGF0ZWQgYnVncyB3aGVuIGBmb2xpby1cXHUwMDNlcHJpdmF0ZWAgaXMgZXhwZWN0ZWQgdG8gYmUgaW5pdGlhbGl6ZWQuIFRoaXMgaXMgYSBzdGFuZGFyZCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIGFuZCBlcnJvciBoYW5kbGluZyBidWcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gU3RhbmRhcmQgS0FTQU4gKHdoaWNoIGRldGVjdHMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgdXNlLWFmdGVyLWZyZWUpIGFuZCBiYXNpYyBrZXJuZWwgY3Jhc2ggZGV0ZWN0aW9uIChmb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcykgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhlIGNvbnNlcXVlbmNlcyBvZiB0aGlzIGJ1Zy4gS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZSBiZWNhdXNlIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IGBremFsbG9jX29iaigpYCBpcyBhbHJlYWR5IHplcm8taW5pdGlhbGl6ZWQsIGFuZCB0aGUgYnVnIGRvZXMgbm90IGludm9sdmUgcmVhZGluZyB1bmluaXRpYWxpemVkIHN0YWNrLCBoZWFwLCBvciBwYWRkaW5nIGJ5dGVzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowv6bll[1] Phase: Succeeded StartedAt: 2026-08-12 20:02:49 +0000 UTC FinishedAt: 2026-08-12 20:02:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv6bll[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-12 20:02:49 +0000 UTC FinishedAt: 2026-08-12 20:02:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv6bll[2] Phase: Succeeded StartedAt: 2026-08-12 20:02:49 +0000 UTC FinishedAt: 2026-08-12 23:55:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv6bll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_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":["jfs_fill_super","__get_metapage","diRead","diWrite","dbMount","ea_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"be566569-3f6e-4871-8d25-b7f975b5c6ab","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-08-12 20:02:49 +0000 UTC FinishedAt: 2026-08-12 23:55:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_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":["jfs_fill_super","__get_metapage","diRead","diWrite","dbMount","ea_get"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"be566569-3f6e-4871-8d25-b7f975b5c6ab","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-workflowv6bll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_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":["jfs_fill_super","__get_metapage","diRead","diWrite","dbMount","ea_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"be566569-3f6e-4871-8d25-b7f975b5c6ab","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-08-12 20:02:49 +0000 UTC FinishedAt: 2026-08-12 20:02:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv6bll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_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":["jfs_fill_super","__get_metapage","diRead","diWrite","dbMount","ea_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"be566569-3f6e-4871-8d25-b7f975b5c6ab","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-08-12 20:02:49 +0000 UTC FinishedAt: 2026-08-12 20:02:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_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-workflowv6bll/series-workflowv6bll-convert-artifact-1569897017/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv6bll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_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":["jfs_fill_super","__get_metapage","diRead","diWrite","dbMount","ea_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"be566569-3f6e-4871-8d25-b7f975b5c6ab","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-08-12 20:02:59 +0000 UTC FinishedAt: 2026-08-12 20:26:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv6bll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_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":["jfs_fill_super","__get_metapage","diRead","diWrite","dbMount","ea_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"be566569-3f6e-4871-8d25-b7f975b5c6ab","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-08-12 20:02:59 +0000 UTC FinishedAt: 2026-08-12 20:26:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*73436ad6-0fc6-4b8e-8313-8f3a008b126a,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-workflowv6bll/series-workflowv6bll-convert-artifact-1569897017/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": "56b5507f-d92a-4022-876a-5a1799245578", "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-workflowv6bll/series-workflowv6bll-build-action-3151439703/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv6bll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_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":["jfs_fill_super","__get_metapage","diRead","diWrite","dbMount","ea_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"be566569-3f6e-4871-8d25-b7f975b5c6ab","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-08-12 20:02:59 +0000 UTC FinishedAt: 2026-08-12 20:25:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*73436ad6-0fc6-4b8e-8313-8f3a008b126a,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-workflowv6bll/series-workflowv6bll-convert-artifact-1569897017/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": "56b5507f-d92a-4022-876a-5a1799245578", "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-workflowv6bll/series-workflowv6bll-build-action-3151439703/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv6bll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_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":["jfs_fill_super","__get_metapage","diRead","diWrite","dbMount","ea_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"be566569-3f6e-4871-8d25-b7f975b5c6ab","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-08-12 20:26:18 +0000 UTC FinishedAt: 2026-08-12 20:26:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv6bll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_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":["jfs_fill_super","__get_metapage","diRead","diWrite","dbMount","ea_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"be566569-3f6e-4871-8d25-b7f975b5c6ab","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-08-12 20:26:18 +0000 UTC FinishedAt: 2026-08-12 20:26:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv6bll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_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":["jfs_fill_super","__get_metapage","diRead","diWrite","dbMount","ea_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"be566569-3f6e-4871-8d25-b7f975b5c6ab","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-08-12 20:26:18 +0000 UTC FinishedAt: 2026-08-12 20:26:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv6bll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_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":["jfs_fill_super","__get_metapage","diRead","diWrite","dbMount","ea_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"be566569-3f6e-4871-8d25-b7f975b5c6ab","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-08-12 20:26:18 +0000 UTC FinishedAt: 2026-08-12 20:26:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"be566569-3f6e-4871-8d25-b7f975b5c6ab","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-workflowv6bll/series-workflowv6bll-convert-artifact-867227916/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv6bll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_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":["jfs_fill_super","__get_metapage","diRead","diWrite","dbMount","ea_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"be566569-3f6e-4871-8d25-b7f975b5c6ab","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-08-12 20:26:28 +0000 UTC FinishedAt: 2026-08-12 20:28:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv6bll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_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":["jfs_fill_super","__get_metapage","diRead","diWrite","dbMount","ea_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"be566569-3f6e-4871-8d25-b7f975b5c6ab","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-08-12 20:26:28 +0000 UTC FinishedAt: 2026-08-12 20:28:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*56b5507f-d92a-4022-876a-5a1799245578,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-workflowv6bll/series-workflowv6bll-build-action-3151439703/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-workflowv6bll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_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":["jfs_fill_super","__get_metapage","diRead","diWrite","dbMount","ea_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"be566569-3f6e-4871-8d25-b7f975b5c6ab","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-08-12 20:28:35 +0000 UTC FinishedAt: 2026-08-12 20:28:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv6bll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_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":["jfs_fill_super","__get_metapage","diRead","diWrite","dbMount","ea_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"be566569-3f6e-4871-8d25-b7f975b5c6ab","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-08-12 20:28:35 +0000 UTC FinishedAt: 2026-08-12 20:28:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv6bll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_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":["jfs_fill_super","__get_metapage","diRead","diWrite","dbMount","ea_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"be566569-3f6e-4871-8d25-b7f975b5c6ab","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-08-12 20:28:35 +0000 UTC FinishedAt: 2026-08-12 20:50:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv6bll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_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":["jfs_fill_super","__get_metapage","diRead","diWrite","dbMount","ea_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"be566569-3f6e-4871-8d25-b7f975b5c6ab","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-08-12 20:28:35 +0000 UTC FinishedAt: 2026-08-12 20:50:09 +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:*73436ad6-0fc6-4b8e-8313-8f3a008b126a,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-workflowv6bll/series-workflowv6bll-convert-artifact-867227916/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": "e478cc9d-017f-407a-86f9-c0fe592237e2", "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-workflowv6bll/series-workflowv6bll-build-action-2308652328/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv6bll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_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":["jfs_fill_super","__get_metapage","diRead","diWrite","dbMount","ea_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"be566569-3f6e-4871-8d25-b7f975b5c6ab","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-08-12 20:28:35 +0000 UTC FinishedAt: 2026-08-12 20:49:59 +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:*73436ad6-0fc6-4b8e-8313-8f3a008b126a,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-workflowv6bll/series-workflowv6bll-convert-artifact-867227916/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": "e478cc9d-017f-407a-86f9-c0fe592237e2", "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-workflowv6bll/series-workflowv6bll-build-action-2308652328/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv6bll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_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":["jfs_fill_super","__get_metapage","diRead","diWrite","dbMount","ea_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"be566569-3f6e-4871-8d25-b7f975b5c6ab","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-08-12 20:50:09 +0000 UTC FinishedAt: 2026-08-12 20:50:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv6bll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_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":["jfs_fill_super","__get_metapage","diRead","diWrite","dbMount","ea_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"be566569-3f6e-4871-8d25-b7f975b5c6ab","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-08-12 20:50:09 +0000 UTC FinishedAt: 2026-08-12 20:50:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv6bll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_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":["jfs_fill_super","__get_metapage","diRead","diWrite","dbMount","ea_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"be566569-3f6e-4871-8d25-b7f975b5c6ab","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-08-12 20:50:09 +0000 UTC FinishedAt: 2026-08-12 20:52:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv6bll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_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":["jfs_fill_super","__get_metapage","diRead","diWrite","dbMount","ea_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"be566569-3f6e-4871-8d25-b7f975b5c6ab","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-08-12 20:50:09 +0000 UTC FinishedAt: 2026-08-12 20:52:04 +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:*e478cc9d-017f-407a-86f9-c0fe592237e2,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-workflowv6bll/series-workflowv6bll-build-action-2308652328/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-workflowv6bll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_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":["jfs_fill_super","__get_metapage","diRead","diWrite","dbMount","ea_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"be566569-3f6e-4871-8d25-b7f975b5c6ab","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-08-12 20:52:14 +0000 UTC FinishedAt: 2026-08-12 23:55:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv6bll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_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":["jfs_fill_super","__get_metapage","diRead","diWrite","dbMount","ea_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"be566569-3f6e-4871-8d25-b7f975b5c6ab","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-08-12 20:52:14 +0000 UTC FinishedAt: 2026-08-12 23:55:38 +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":["jfs_fill_super","__get_metapage","diRead","diWrite","dbMount","ea_get"],"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:*56b5507f-d92a-4022-876a-5a1799245578,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e478cc9d-017f-407a-86f9-c0fe592237e2,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-workflowv6bll/series-workflowv6bll-build-action-3151439703/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-workflowv6bll/series-workflowv6bll-build-action-2308652328/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowv6bll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_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":["jfs_fill_super","__get_metapage","diRead","diWrite","dbMount","ea_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"be566569-3f6e-4871-8d25-b7f975b5c6ab","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-08-12 20:52:14 +0000 UTC FinishedAt: 2026-08-12 20:52:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv6bll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_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":["jfs_fill_super","__get_metapage","diRead","diWrite","dbMount","ea_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"be566569-3f6e-4871-8d25-b7f975b5c6ab","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-08-12 20:52:14 +0000 UTC FinishedAt: 2026-08-12 20:52:20 +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":["jfs_fill_super","__get_metapage","diRead","diWrite","dbMount","ea_get"],"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-workflowv6bll/series-workflowv6bll-convert-artifact-3734383477/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowv6bll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_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":["jfs_fill_super","__get_metapage","diRead","diWrite","dbMount","ea_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"be566569-3f6e-4871-8d25-b7f975b5c6ab","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-08-12 20:52:14 +0000 UTC FinishedAt: 2026-08-12 20:52:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv6bll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_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":["jfs_fill_super","__get_metapage","diRead","diWrite","dbMount","ea_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"be566569-3f6e-4871-8d25-b7f975b5c6ab","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-08-12 20:52:14 +0000 UTC FinishedAt: 2026-08-12 20:52:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv6bll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_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":["jfs_fill_super","__get_metapage","diRead","diWrite","dbMount","ea_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"be566569-3f6e-4871-8d25-b7f975b5c6ab","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-08-12 20:52:15 +0000 UTC FinishedAt: 2026-08-12 20:52:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv6bll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_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":["jfs_fill_super","__get_metapage","diRead","diWrite","dbMount","ea_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"be566569-3f6e-4871-8d25-b7f975b5c6ab","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-08-12 20:52:25 +0000 UTC FinishedAt: 2026-08-12 23:55:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv6bll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_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":["jfs_fill_super","__get_metapage","diRead","diWrite","dbMount","ea_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"be566569-3f6e-4871-8d25-b7f975b5c6ab","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-08-12 20:52:25 +0000 UTC FinishedAt: 2026-08-12 23:55:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*56b5507f-d92a-4022-876a-5a1799245578,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e478cc9d-017f-407a-86f9-c0fe592237e2,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-workflowv6bll/series-workflowv6bll-build-action-3151439703/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-workflowv6bll/series-workflowv6bll-build-action-2308652328/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-workflowv6bll/series-workflowv6bll-convert-artifact-3734383477/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,}