Name: series-workflowbpz6r Phase: Succeeded StartedAt: 2026-09-06 15:50:16 +0000 UTC FinishedAt: 2026-09-06 20:28:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbpz6r[0] Phase: Succeeded StartedAt: 2026-09-06 15:50:16 +0000 UTC FinishedAt: 2026-09-06 16:38:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbpz6r[0].run-triage Phase: Succeeded StartedAt: 2026-09-06 15:50:16 +0000 UTC FinishedAt: 2026-09-06 16:38:53 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "4e1b4014532112df280540d958895383b791d6d5", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "4e1b4014532112df280540d958895383b791d6d5", "config_name": "upstream-apparmor-kasan.config", "series_id": "3bc64f8e-3527-41a3-85a4-2700cf1ff8bf" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__folio_start_writeback", "folio_end_writeback", "folio_wait_writeback", "folio_end_writeback_no_dropbehind" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19mb2xpb19zdGFydF93cml0ZWJhY2smIzM0OywKICAgICYjMzQ7Zm9saW9fZW5kX3dyaXRlYmFjayYjMzQ7LAogICAgJiMzNDtmb2xpb193YWl0X3dyaXRlYmFjayYjMzQ7LAogICAgJiMzNDtmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb252ZXJ0cyB0aGUgcGFnZSBmbGFnIGRlZmluaXRpb25zIGZvciBQR193cml0ZWJhY2sgZnJvbSBsZWdhY3kgcGFnZS1iYXNlZCBtYWNyb3MgKFRFU1RQQUdFRkxBRyAvIFRFU1RTQ0ZMQUcpIHRvIGZvbGlvLWJhc2VkIG1hY3JvcyAoRk9MSU9fVEVTVF9GTEFHIC8gRk9MSU9fVEVTVF9TRVRfRkxBRykuIFxuXG5UaGlzIGlzIGEgdHlwZS1zYWZlIG1hY3JvIHJlZmFjdG9yaW5nIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IG9wZXJhdGVzIHB1cmVseSBvbiBwYWdlL2ZvbGlvIGJpdCBmbGFncy4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBhbGxvY2F0ZSwgb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgc3RydWN0IHBhZGRpbmcsIHVzZXItY29weSBidWZmZXJzLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBBbnkgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgdGhhdCBjb3VsZCBhcmlzZSBmcm9tIGludmFsaWQgZm9saW8vcGFnZSByZWZlcmVuY2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgcGFnZSBhY2Nlc3MpIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIHBhZ2UgZmxhZyBkZWJ1ZyBjaGVja3MgKFZNX0JVR19PTl9QR0ZMQUdTKS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9ybWF0aW9uIGxlYWsgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgd3JpdGViYWNrIGZvbGlvIGZsYWcgZGVmaW5pdGlvbnMgaW4gaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggZnJvbSBsZWdhY3kgcGFnZS1mbGFnIG1hY3JvcyAoVEVTVFBBR0VGTEFHLCBURVNUU0NGTEFHKSB0byB0aGUgbW9kZXJuIGZvbGlvIGZsYWcgbWFjcm9zIChGT0xJT19URVNUX0ZMQUcsIEZPTElPX1RFU1RfU0VUX0ZMQUcpLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbnZvbHZlZCBpbiBmb2xpbyB3cml0ZWJhY2sgc3RhdGUgdHJhY2tpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6Mzc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3NDIyZWVlM2U3ZjUyNDJmZGQyYTcxMjU3NTJkYTBhY2U2N2RkMTdjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAxNjozNzoxOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXG5pbmRleCAzZGM3OWMwYzVhZGYwLi44NmRkMDQ3MGRhMTE3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXG5AQCAtNTg4LDggJiM0Mzs1ODgsOCBAQCBGT0xJT19GTEFHKG93bmVyXzIsIEZPTElPX0hFQURfUEFHRSlcbiAgKiBPbmx5IHRlc3QtYW5kLXNldCBleGlzdCBmb3IgUEdfd3JpdGViYWNrLiAgVGhlIHVuY29uZGl0aW9uYWwgb3BlcmF0b3JzIGFyZVxuICAqIHJpc2t5OiB0aGV5IGJ5cGFzcyBwYWdlIGFjY291bnRpbmcuXG4gICovXG4tVEVTVFBBR0VGTEFHKFdyaXRlYmFjaywgd3JpdGViYWNrLCBQRl9OT19UQUlMKVxuLVx0VEVTVFNDRkxBRyhXcml0ZWJhY2ssIHdyaXRlYmFjaywgUEZfTk9fVEFJTClcbiYjNDM7Rk9MSU9fVEVTVF9GTEFHKHdyaXRlYmFjaywgRk9MSU9fSEVBRF9QQUdFKVxuJiM0MztcdEZPTElPX1RFU1RfU0VUX0ZMQUcod3JpdGViYWNrLCBGT0xJT19IRUFEX1BBR0UpXG4gRk9MSU9fRkxBRyhtYXBwZWR0b2Rpc2ssIEZPTElPX0hFQURfUEFHRSlcbiBcbiAvKiBQR19yZWFkYWhlYWQgaXMgb25seSB1c2VkIGZvciByZWFkczsgUEdfcmVjbGFpbSBpcyBvbmx5IGZvciB3cml0ZXMgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fZm9saW9fc3RhcnRfd3JpdGViYWNrJiMzNDssCiAgICAmIzM0O2ZvbGlvX2VuZF93cml0ZWJhY2smIzM0OywKICAgICYjMzQ7Zm9saW9fd2FpdF93cml0ZWJhY2smIzM0OywKICAgICYjMzQ7Zm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgdGhlIHdyaXRlYmFjayBmb2xpbyBmbGFnIGRlZmluaXRpb25zIGluIGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oIGZyb20gbGVnYWN5IHBhZ2UtZmxhZyBtYWNyb3MgKFRFU1RQQUdFRkxBRywgVEVTVFNDRkxBRykgdG8gdGhlIG1vZGVybiBmb2xpbyBmbGFnIG1hY3JvcyAoRk9MSU9fVEVTVF9GTEFHLCBGT0xJT19URVNUX1NFVF9GTEFHKS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgaW52b2x2ZWQgaW4gZm9saW8gd3JpdGViYWNrIHN0YXRlIHRyYWNraW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzQyMmVlZTNlN2Y1MjQyZmRkMmE3MTI1NzUyZGEwYWNlNjdkZDE3YwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMTY6Mzc6MTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCmluZGV4IDNkYzc5YzBjNWFkZjAuLjg2ZGQwNDcwZGExMTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCkBAIC01ODgsOCAmIzQzOzU4OCw4IEBAIEZPTElPX0ZMQUcob3duZXJfMiwgRk9MSU9fSEVBRF9QQUdFKQogICogT25seSB0ZXN0LWFuZC1zZXQgZXhpc3QgZm9yIFBHX3dyaXRlYmFjay4gIFRoZSB1bmNvbmRpdGlvbmFsIG9wZXJhdG9ycyBhcmUKICAqIHJpc2t5OiB0aGV5IGJ5cGFzcyBwYWdlIGFjY291bnRpbmcuCiAgKi8KLVRFU1RQQUdFRkxBRyhXcml0ZWJhY2ssIHdyaXRlYmFjaywgUEZfTk9fVEFJTCkKLQlURVNUU0NGTEFHKFdyaXRlYmFjaywgd3JpdGViYWNrLCBQRl9OT19UQUlMKQomIzQzO0ZPTElPX1RFU1RfRkxBRyh3cml0ZWJhY2ssIEZPTElPX0hFQURfUEFHRSkKJiM0MzsJRk9MSU9fVEVTVF9TRVRfRkxBRyh3cml0ZWJhY2ssIEZPTElPX0hFQURfUEFHRSkKIEZPTElPX0ZMQUcobWFwcGVkdG9kaXNrLCBGT0xJT19IRUFEX1BBR0UpCiAKIC8qIFBHX3JlYWRhaGVhZCBpcyBvbmx5IHVzZWQgZm9yIHJlYWRzOyBQR19yZWNsYWltIGlzIG9ubHkgZm9yIHdyaXRlcyAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTI3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogVW5yYXZlbGluZyBQYWdlLUZsYWcgTWVjaGFuaWNzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgdGhlIGFzc29jaWF0ZWQgaW5zdHJ1Y3Rpb25zLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbW9kaWZpY2F0aW9uIGltcGFjdHMgdGhlIHBhZ2UtZmxhZ3MgbWFjcm9zLiBUbyBkbyB0aGlzIGVmZmVjdGl2ZWx5LCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGZvY3VzaW5nIG9uIHRoZSBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgIGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIHRoZSBjb2RlIGFyb3VuZCBsaW5lIDU4OCB0byBzZWUgcHJlY2lzZWx5IHdoYXQmIzM5O3MgYmVlbiBhbHRlcmVkLgoKSSYjMzk7bGwgYmUgbGV2ZXJhZ2luZyBteSB1c3VhbCB0b29scyBmb3IgdGhpcyBraW5kIG9mIGludmVzdGlnYXRpb24g4oCTIGxpa2VseSBlaXRoZXIgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgZGlyZWN0IHZpZXcgb2YgdGhlIGNoYW5nZXMsIG9yIGBncmVwcGVyYCB0byBzZWFyY2ggZm9yIHNwZWNpZmljIHRlcm1zIG9yIHBhdHRlcm5zIHRoYXQgd2lsbCBpbGx1bWluYXRlIHRoZSByZXZpc2VkIGZ1bmN0aW9uYWxpdHkgb2YgdGhvc2UgcGFnZS1mbGFnIG1hY3Jvcy4gVGhpcyBhcHByb2FjaCBzaG91bGQgZ2l2ZSBtZSB0aGUgY2xlYXIsIHRhcmdldGVkIGluZm9ybWF0aW9uIEkgbmVlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NzA6XHRcdF9fQ0xFQVJQQUdFRkxBRyhSZXNlcnZlZCwgcmVzZXJ2ZWQsIFBGX05PX0NPTVBPVU5EKVxuIDU3MTpcdFx0X19TRVRQQUdFRkxBRyhSZXNlcnZlZCwgcmVzZXJ2ZWQsIFBGX05PX0NPTVBPVU5EKVxuIDU3MjpcdEZPTElPX0ZMQUcoc3dhcGJhY2tlZCwgRk9MSU9fSEVBRF9QQUdFKVxuIDU3MzpcdFx0X19GT0xJT19DTEVBUl9GTEFHKHN3YXBiYWNrZWQsIEZPTElPX0hFQURfUEFHRSlcbiA1NzQ6XHRcdF9fRk9MSU9fU0VUX0ZMQUcoc3dhcGJhY2tlZCwgRk9MSU9fSEVBRF9QQUdFKVxuIDU3NTpcdFxuIDU3NjpcdC8qXG4gNTc3Olx0ICogUHJpdmF0ZSBwYWdlIG1hcmtpbmdzIHRoYXQgbWF5IGJlIHVzZWQgYnkgdGhlIGZpbGVzeXN0ZW0gdGhhdCBvd25zIHRoZSBwYWdlXG4gNTc4Olx0ICogZm9yIGl0cyBvd24gcHVycG9zZXMuXG4gNTc5Olx0ICogLSBQR19wcml2YXRlIGFuZCBQR19wcml2YXRlXzIgY2F1c2UgcmVsZWFzZV9mb2xpbygpIGFuZCBjbyB0byBiZSBpbnZva2VkXG4gNTgwOlx0ICovXG4gNTgxOlx0UEFHRUZMQUcoUHJpdmF0ZSwgcHJpdmF0ZSwgUEZfQU5ZKVxuIDU4MjpcdEZPTElPX0ZMQUcocHJpdmF0ZV8yLCBGT0xJT19IRUFEX1BBR0UpXG4gNTgzOlx0XG4gNTg0Olx0Lyogb3duZXJfMiBjYW4gYmUgc2V0IG9uIHRhaWwgcGFnZXMgZm9yIGFub24gbWVtb3J5ICovXG4gNTg1Olx0Rk9MSU9fRkxBRyhvd25lcl8yLCBGT0xJT19IRUFEX1BBR0UpXG4gNTg2Olx0XG4gNTg3Olx0LypcbiA1ODg6XHQgKiBPbmx5IHRlc3QtYW5kLXNldCBleGlzdCBmb3IgUEdfd3JpdGViYWNrLiAgVGhlIHVuY29uZGl0aW9uYWwgb3BlcmF0b3JzIGFyZVxuIDU4OTpcdCAqIHJpc2t5OiB0aGV5IGJ5cGFzcyBwYWdlIGFjY291bnRpbmcuXG4gNTkwOlx0ICovXG4gNTkxOlx0Rk9MSU9fVEVTVF9GTEFHKHdyaXRlYmFjaywgRk9MSU9fSEVBRF9QQUdFKVxuIDU5MjpcdFx0Rk9MSU9fVEVTVF9TRVRfRkxBRyh3cml0ZWJhY2ssIEZPTElPX0hFQURfUEFHRSlcbiA1OTM6XHRGT0xJT19GTEFHKG1hcHBlZHRvZGlzaywgRk9MSU9fSEVBRF9QQUdFKVxuIDU5NDpcdFxuIDU5NTpcdC8qIFBHX3JlYWRhaGVhZCBpcyBvbmx5IHVzZWQgZm9yIHJlYWRzOyBQR19yZWNsYWltIGlzIG9ubHkgZm9yIHdyaXRlcyAqL1xuIDU5NjpcdEZPTElPX0ZMQUcocmVjbGFpbSwgRk9MSU9fSEVBRF9QQUdFKVxuIDU5NzpcdEZPTElPX0ZMQUcocmVhZGFoZWFkLCBGT0xJT19IRUFEX1BBR0UpXG4gNTk4Olx0XHRGT0xJT19URVNUX0NMRUFSX0ZMQUcocmVhZGFoZWFkLCBGT0xJT19IRUFEX1BBR0UpXG4gNTk5Olx0XG4gNjAwOlx0Rk9MSU9fRkxBRyhkcm9wYmVoaW5kLCBGT0xJT19IRUFEX1BBR0UpXG4gNjAxOlx0XHRGT0xJT19URVNUX0NMRUFSX0ZMQUcoZHJvcGJlaGluZCwgRk9MSU9fSEVBRF9QQUdFKVxuIDYwMjpcdFx0X19GT0xJT19TRVRfRkxBRyhkcm9wYmVoaW5kLCBGT0xJT19IRUFEX1BBR0UpXG4gNjAzOlx0XG4gNjA0Olx0I2lmZGVmIENPTkZJR19ISUdITUVNXG4gNjA1Olx0LypcbiA2MDY6XHQgKiBNdXN0IHVzZSBhIG1hY3JvIGhlcmUgZHVlIHRvIGhlYWRlciBkZXBlbmRlbmN5IGlzc3Vlcy4gcGFnZV96b25lKCkgaXMgbm90XG4gNjA3Olx0ICogYXZhaWxhYmxlIGF0IHRoaXMgcG9pbnQuXG4gNjA4Olx0ICovXG4gNjA5Olx0I2RlZmluZSBQYWdlSGlnaE1lbShfX3ApIGlzX2hpZ2htZW1faWR4KHBhZ2Vfem9uZW51bShfX3ApKVxuIDYxMDpcdCNkZWZpbmUgZm9saW9fdGVzdF9oaWdobWVtKF9fZilcdGlzX2hpZ2htZW1faWR4KGZvbGlvX3pvbmVudW0oX19mKSlcbiA2MTE6XHQjZWxzZVxuIDYxMjpcdFBBR0VGTEFHX0ZBTFNFKEhpZ2hNZW0sIGhpZ2htZW0pXG4gNjEzOlx0I2VuZGlmXG4gNjE0Olx0I2RlZmluZSBQaHlzSGlnaE1lbShfX3ApIChQYWdlSGlnaE1lbShwaHlzX3RvX3BhZ2UoX19wKSkpXG4gNjE1Olx0XG4gNjE2Olx0LyogRG9lcyBrbWFwX2xvY2FsX2ZvbGlvKCkgb25seSBhbGxvdyBhY2Nlc3MgdG8gb25lIHBhZ2Ugb2YgdGhlIGZvbGlvPyAqL1xuIDYxNzpcdCNpZmRlZiBDT05GSUdfREVCVUdfS01BUF9MT0NBTF9GT1JDRV9NQVBcbiA2MTg6XHQjZGVmaW5lIGZvbGlvX3Rlc3RfcGFydGlhbF9rbWFwKGYpXHR0cnVlXG4gNjE5Olx0I2Vsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTI0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIGZyYW1lZCBhcyBteSBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgTGludXggUGFnZSBGbGFncyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoZXNlIGZsYWdzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiBgVEVTVFBBR0VGTEFHYCwgYFRFU1RTQ0ZMQUdgLCBgRk9MSU9fVEVTVF9GTEFHYCwgYW5kIGBGT0xJT19URVNUX1NFVF9GTEFHYC4gVGhleSYjMzk7cmUgcHJvYmFibHkgZGVmaW5lZCBzb21ld2hlcmUgaW4gYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYCwgc28gbGV0JiMzOTtzIGhlYWQgb3ZlciB0aGVyZSBhbmQgdGFrZSBhIGxvb2suIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIHJlbGF0ZSB0bywgeW91IGtub3csIHRoZSBwYWdlIGFsbG9jYXRpb24gYW5kIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBrZXJuZWwuIFdoYXQgYXJlIHRoZXkgdGVzdGluZz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBpZiBvbmUgb2YgdGhlbSBpcyBzZXQgb3Igbm90PyBIb3BlZnVsbHkgdGhlIGNvbW1lbnRzIGFyZSBnb29kIGluIHRoZXJlIHNvIEkgZG9uJiMzOTt0IGhhdmUgdG8gdHJhY2UgaXQgYWxsIGJhY2sgZnJvbSB0aGUgdXNhZ2UhIFRpbWUgdG8gZGl2ZSBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIEZPTElPX1RFU1RfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MzUwPXN0YXRpYyB1bnNpZ25lZCBsb25nICpmb2xpb19mbGFncyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBuKVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTQwOS0gKi9cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjQxMDojZGVmaW5lIEZPTElPX1RFU1RfRkxBRyhuYW1lLCBwYWdlKVx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNDExLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBmb2xpb190ZXN0XyMjbmFtZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKSBcXFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTQyNz1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19mb2xpb19jbGVhcl8jI25hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcdFxcXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNDI5LVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6NDMwOiNkZWZpbmUgRk9MSU9fVEVTVF9TRVRfRkxBRyhuYW1lLCBwYWdlKVx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNDMxLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBmb2xpb190ZXN0X3NldF8jI25hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcdFxcXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNDMzLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6NDM0OiNkZWZpbmUgRk9MSU9fVEVTVF9DTEVBUl9GTEFHKG5hbWUsIHBhZ2UpXHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNDM1LXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBmb2xpb190ZXN0X2NsZWFyXyMjbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKSBcXFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTQ3NT1zdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBUZXN0Q2xlYXJQYWdlIyN1bmFtZShzdHJ1Y3QgcGFnZSAqcGFnZSlcdFxcXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNDkxLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6NDkyOiNkZWZpbmUgRk9MSU9fVEVTVF9GTEFHX0ZBTFNFKG5hbWUpXHRcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC00OTMtc3RhdGljIGlubGluZSBib29sIGZvbGlvX3Rlc3RfIyNuYW1lKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXHRcdFxcXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9NTAyPXN0YXRpYyBpbmxpbmUgdm9pZCBfX2ZvbGlvX2NsZWFyXyMjbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKSB7IH1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjUwMzojZGVmaW5lIEZPTElPX1RFU1RfU0VUX0ZMQUdfRkFMU0UobmFtZSlcdFx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTUwNC1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fdGVzdF9zZXRfIyNuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXHRcdFxcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC01MDUteyByZXR1cm4gZmFsc2U7IH1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjUwNjojZGVmaW5lIEZPTElPX1RFU1RfQ0xFQVJfRkxBR19GQUxTRShuYW1lKVx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTUwNy1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fdGVzdF9jbGVhcl8jI25hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcdFx0XFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDEzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBtYWNyb3MsIGFzIGlmIHRoZXkgd2VyZSBteSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaGAgLSBMaW5lcyA0MDAtNDgwKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgcGFnZS1mbGFncy5oYCBoZWFkZXIgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZ2V0IG15IGhlYWQgYXJvdW5kIHRoZSBtYWNybyBkZWZpbml0aW9ucyBraWNraW5nIGFyb3VuZCBsaW5lcyA0MDAgdG8gNDgwLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGJlIHdoZXJlIHRoZSBjb3JlIGJpdCBtYW5pcHVsYXRpb24gaGFwcGVucyBmb3IgdGhlIHBhZ2UgZmxhZ3MsIHNvIHVuZGVyc3RhbmRpbmcgdGhpcyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgbWVtb3J5IG1hbmFnZW1lbnQgaXMgd29ya2luZyB1bmRlciB0aGUgaG9vZC4gSSBhbnRpY2lwYXRlIHRoZXNlIG1hY3JvcyB3aWxsIGhhbmRsZSBvcGVyYXRpb25zIGxpa2Ugc2V0dGluZywgY2xlYXJpbmcsIHRlc3RpbmcsIGFuZCBwcm9iYWJseSBldmVuIGF0b21pYyBtb2RpZmljYXRpb24gb2YgdGhvc2UgcGFnZSBmbGFncy4gSSYjMzk7bSBob3BpbmcgdG8gc2VlIHNvbWUgd2VsbC1kZWZpbmVkIGJpdCBmaWVsZHMsIHBvc3NpYmx5IHVzaW5nIGBfX0JJVChuKWAgb3Igc2ltaWxhciBjb25zdHJ1Y3RzLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGNvbnRleHQgaW4gd2hpY2ggdGhlc2UgYXJlIHVzZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgYXRvbWljIGd1YXJhbnRlZXMgbWFkZSBmb3IgY29uY3VycmVuY3kuIEdpdmVuIHRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIGtlcm5lbCwgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcG9zc2libGUgY29tcGlsZXIgYmFycmllcnMsIHZvbGF0aWxlIHF1YWxpZmllcnMsIG9yIG90aGVyIG1lbW9yeSBvcmRlcmluZyBwcmltaXRpdmVzLCBhbGwgdG8gbWFpbnRhaW4gZGF0YSBpbnRlZ3JpdHkgd2hlbiBtYW55IHByb2Nlc3NvcnMgYWNjZXNzIHRoZSBzYW1lIG1lbW9yeSBsb2NhdGlvbnMuIEkmIzM5O20gcmVhZHkgdG8gY2FyZWZ1bGx5IGNvbnNpZGVyIGVhY2ggbWFjcm8mIzM5O3MgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDAwOlx0I2RlZmluZSBGT0xJT19QRl9OT19UQUlMXHQwXG4gNDAxOlx0I2RlZmluZSBGT0xJT19QRl9OT19DT01QT1VORFx0MFxuIDQwMjpcdCNkZWZpbmUgRk9MSU9fUEZfU0VDT05EXHRcdDFcbiA0MDM6XHRcbiA0MDQ6XHQjZGVmaW5lIEZPTElPX0hFQURfUEFHRVx0XHQwXG4gNDA1Olx0I2RlZmluZSBGT0xJT19TRUNPTkRfUEFHRVx0MVxuIDQwNjpcdFxuIDQwNzpcdC8qXG4gNDA4Olx0ICogTWFjcm9zIHRvIGNyZWF0ZSBmdW5jdGlvbiBkZWZpbml0aW9ucyBmb3IgcGFnZSBmbGFnc1xuIDQwOTpcdCAqL1xuIDQxMDpcdCNkZWZpbmUgRk9MSU9fVEVTVF9GTEFHKG5hbWUsIHBhZ2UpXHRcdFx0XHRcdFxcXG4gNDExOlx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGZvbGlvX3Rlc3RfIyNuYW1lKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pIFxcXG4gNDEyOlx0eyByZXR1cm4gdGVzdF9iaXQoUEdfIyNuYW1lLCBjb25zdF9mb2xpb19mbGFncyhmb2xpbywgcGFnZSkpOyB9XG4gNDEzOlx0XG4gNDE0Olx0I2RlZmluZSBGT0xJT19TRVRfRkxBRyhuYW1lLCBwYWdlKVx0XHRcdFx0XHRcXFxuIDQxNTpcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBmb2xpb19zZXRfIyNuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXHRcXFxuIDQxNjpcdHsgc2V0X2JpdChQR18jI25hbWUsIGZvbGlvX2ZsYWdzKGZvbGlvLCBwYWdlKSk7IH1cbiA0MTc6XHRcbiA0MTg6XHQjZGVmaW5lIEZPTElPX0NMRUFSX0ZMQUcobmFtZSwgcGFnZSlcdFx0XHRcdFx0XFxcbiA0MTk6XHRzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgZm9saW9fY2xlYXJfIyNuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXHRcXFxuIDQyMDpcdHsgY2xlYXJfYml0KFBHXyMjbmFtZSwgZm9saW9fZmxhZ3MoZm9saW8sIHBhZ2UpKTsgfVxuIDQyMTpcdFxuIDQyMjpcdCNkZWZpbmUgX19GT0xJT19TRVRfRkxBRyhuYW1lLCBwYWdlKVx0XHRcdFx0XHRcXFxuIDQyMzpcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX2ZvbGlvX3NldF8jI25hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcdFxcXG4gNDI0Olx0eyBfX3NldF9iaXQoUEdfIyNuYW1lLCBmb2xpb19mbGFncyhmb2xpbywgcGFnZSkpOyB9XG4gNDI1Olx0XG4gNDI2Olx0I2RlZmluZSBfX0ZPTElPX0NMRUFSX0ZMQUcobmFtZSwgcGFnZSlcdFx0XHRcdFx0XFxcbiA0Mjc6XHRzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19mb2xpb19jbGVhcl8jI25hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcdFxcXG4gNDI4Olx0eyBfX2NsZWFyX2JpdChQR18jI25hbWUsIGZvbGlvX2ZsYWdzKGZvbGlvLCBwYWdlKSk7IH1cbiA0Mjk6XHRcbiA0MzA6XHQjZGVmaW5lIEZPTElPX1RFU1RfU0VUX0ZMQUcobmFtZSwgcGFnZSlcdFx0XHRcdFx0XFxcbiA0MzE6XHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgZm9saW9fdGVzdF9zZXRfIyNuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXHRcXFxuIDQzMjpcdHsgcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoUEdfIyNuYW1lLCBmb2xpb19mbGFncyhmb2xpbywgcGFnZSkpOyB9XG4gNDMzOlx0XG4gNDM0Olx0I2RlZmluZSBGT0xJT19URVNUX0NMRUFSX0ZMQUcobmFtZSwgcGFnZSlcdFx0XHRcdFxcXG4gNDM1Olx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGZvbGlvX3Rlc3RfY2xlYXJfIyNuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pIFxcXG4gNDM2Olx0eyByZXR1cm4gdGVzdF9hbmRfY2xlYXJfYml0KFBHXyMjbmFtZSwgZm9saW9fZmxhZ3MoZm9saW8sIHBhZ2UpKTsgfVxuIDQzNzpcdFxuIDQzODpcdCNkZWZpbmUgRk9MSU9fRkxBRyhuYW1lLCBwYWdlKVx0XHRcdFx0XHRcdFxcXG4gNDM5Olx0Rk9MSU9fVEVTVF9GTEFHKG5hbWUsIHBhZ2UpXHRcdFx0XHRcdFx0XFxcbiA0NDA6XHRGT0xJT19TRVRfRkxBRyhuYW1lLCBwYWdlKVx0XHRcdFx0XHRcdFxcXG4gNDQxOlx0Rk9MSU9fQ0xFQVJfRkxBRyhuYW1lLCBwYWdlKVxuIDQ0MjpcdFxuIDQ0MzpcdCNkZWZpbmUgVEVTVFBBR0VGTEFHKHVuYW1lLCBsbmFtZSwgcG9saWN5KVx0XHRcdFx0XFxcbiA0NDQ6XHRGT0xJT19URVNUX0ZMQUcobG5hbWUsIEZPTElPXyMjcG9saWN5KVx0XHRcdFx0XHRcXFxuIDQ0NTpcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IFBhZ2UjI3VuYW1lKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVx0XHRcXFxuIDQ0NjpcdHsgcmV0dXJuIHRlc3RfYml0KFBHXyMjbG5hbWUsIFx1MDAyNnBvbGljeShwYWdlLCAwKS1cdTAwM2VmbGFncy5mKTsgfVxuIDQ0NzpcdFxuIDQ0ODpcdCNkZWZpbmUgU0VUUEFHRUZMQUcodW5hbWUsIGxuYW1lLCBwb2xpY3kpXHRcdFx0XHRcXFxuIDQ0OTpcdEZPTElPX1NFVF9GTEFHKGxuYW1lLCBGT0xJT18jI3BvbGljeSlcdFx0XHRcdFx0XFxcbiA0NTA6XHRzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgU2V0UGFnZSMjdW5hbWUoc3RydWN0IHBhZ2UgKnBhZ2UpXHRcdFxcXG4gNDUxOlx0eyBzZXRfYml0KFBHXyMjbG5hbWUsIFx1MDAyNnBvbGljeShwYWdlLCAxKS1cdTAwM2VmbGFncy5mKTsgfVxuIDQ1MjpcdFxuIDQ1MzpcdCNkZWZpbmUgQ0xFQVJQQUdFRkxBRyh1bmFtZSwgbG5hbWUsIHBvbGljeSlcdFx0XHRcdFxcXG4gNDU0Olx0Rk9MSU9fQ0xFQVJfRkxBRyhsbmFtZSwgRk9MSU9fIyNwb2xpY3kpXHRcdFx0XHRcdFxcXG4gNDU1Olx0c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIENsZWFyUGFnZSMjdW5hbWUoc3RydWN0IHBhZ2UgKnBhZ2UpXHRcdFxcXG4gNDU2Olx0eyBjbGVhcl9iaXQoUEdfIyNsbmFtZSwgXHUwMDI2cG9saWN5KHBhZ2UsIDEpLVx1MDAzZWZsYWdzLmYpOyB9XG4gNDU3Olx0XG4gNDU4Olx0I2RlZmluZSBfX1NFVFBBR0VGTEFHKHVuYW1lLCBsbmFtZSwgcG9saWN5KVx0XHRcdFx0XFxcbiA0NTk6XHRfX0ZPTElPX1NFVF9GTEFHKGxuYW1lLCBGT0xJT18jI3BvbGljeSlcdFx0XHRcdFx0XFxcbiA0NjA6XHRzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19TZXRQYWdlIyN1bmFtZShzdHJ1Y3QgcGFnZSAqcGFnZSlcdFx0XFxcbiA0NjE6XHR7IF9fc2V0X2JpdChQR18jI2xuYW1lLCBcdTAwMjZwb2xpY3kocGFnZSwgMSktXHUwMDNlZmxhZ3MuZik7IH1cbiA0NjI6XHRcbiA0NjM6XHQjZGVmaW5lIF9fQ0xFQVJQQUdFRkxBRyh1bmFtZSwgbG5hbWUsIHBvbGljeSlcdFx0XHRcdFxcXG4gNDY0Olx0X19GT0xJT19DTEVBUl9GTEFHKGxuYW1lLCBGT0xJT18jI3BvbGljeSlcdFx0XHRcdFxcXG4gNDY1Olx0c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fQ2xlYXJQYWdlIyN1bmFtZShzdHJ1Y3QgcGFnZSAqcGFnZSlcdFxcXG4gNDY2Olx0eyBfX2NsZWFyX2JpdChQR18jI2xuYW1lLCBcdTAwMjZwb2xpY3kocGFnZSwgMSktXHUwMDNlZmxhZ3MuZik7IH1cbiA0Njc6XHRcbiA0Njg6XHQjZGVmaW5lIFRFU1RTRVRGTEFHKHVuYW1lLCBsbmFtZSwgcG9saWN5KVx0XHRcdFx0XFxcbiA0Njk6XHRGT0xJT19URVNUX1NFVF9GTEFHKGxuYW1lLCBGT0xJT18jI3BvbGljeSlcdFx0XHRcdFxcXG4gNDcwOlx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgVGVzdFNldFBhZ2UjI3VuYW1lKHN0cnVjdCBwYWdlICpwYWdlKVx0XFxcbiA0NzE6XHR7IHJldHVybiB0ZXN0X2FuZF9zZXRfYml0KFBHXyMjbG5hbWUsIFx1MDAyNnBvbGljeShwYWdlLCAxKS1cdTAwM2VmbGFncy5mKTsgfVxuIDQ3MjpcdFxuIDQ3MzpcdCNkZWZpbmUgVEVTVENMRUFSRkxBRyh1bmFtZSwgbG5hbWUsIHBvbGljeSlcdFx0XHRcdFxcXG4gNDc0Olx0Rk9MSU9fVEVTVF9DTEVBUl9GTEFHKGxuYW1lLCBGT0xJT18jI3BvbGljeSlcdFx0XHRcdFxcXG4gNDc1Olx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgVGVzdENsZWFyUGFnZSMjdW5hbWUoc3RydWN0IHBhZ2UgKnBhZ2UpXHRcXFxuIDQ3NjpcdHsgcmV0dXJuIHRlc3RfYW5kX2NsZWFyX2JpdChQR18jI2xuYW1lLCBcdTAwMjZwb2xpY3kocGFnZSwgMSktXHUwMDNlZmxhZ3MuZik7IH1cbiA0Nzc6XHRcbiA0Nzg6XHQjZGVmaW5lIFBBR0VGTEFHKHVuYW1lLCBsbmFtZSwgcG9saWN5KVx0XHRcdFx0XHRcXFxuIDQ3OTpcdFx0VEVTVFBBR0VGTEFHKHVuYW1lLCBsbmFtZSwgcG9saWN5KVx0XHRcdFx0XFxcbiA0ODA6XHRcdFNFVFBBR0VGTEFHKHVuYW1lLCBsbmFtZSwgcG9saWN5KVx0XHRcdFx0XFxcbiA0ODE6XHRcdENMRUFSUEFHRUZMQUcodW5hbWUsIGxuYW1lLCBwb2xpY3kpXG4gNDgyOlx0XG4gNDgzOlx0I2RlZmluZSBfX1BBR0VGTEFHKHVuYW1lLCBsbmFtZSwgcG9saWN5KVx0XHRcdFx0XFxcbiA0ODQ6XHRcdFRFU1RQQUdFRkxBRyh1bmFtZSwgbG5hbWUsIHBvbGljeSlcdFx0XHRcdFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA2NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvZGUgQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGRpZmYgYW5kIGltbWVkaWF0ZWx5IG15IGJyYWluIGZsYWdzIHRoZSBjaGFuZ2UuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB6ZXJvaW5nIGluIG9uIHRoZSBzaGlmdCBmcm9tIGBURVNUUEFHRUZMQUdgIGFuZCBgVEVTVFNDRkxBR2AgdG8gYEZPTElPX1RFU1RfRkxBR2AgYW5kIGBGT0xJT19URVNUX1NFVF9GTEFHYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGlzIG1lYW5zLCBlc3BlY2lhbGx5IGJlY2F1c2Ugb2YgdGhlIHJlbW92YWwgb2YgUEZfTk9fVEFJTC4gSSByZWNvZ25pemUgYFBGX05PX1RBSUxgIGFzIGEgZmFtaWxpYXIgZmxhZywgYnV0IEkmIzM5O20gbW9tZW50YXJpbHkgc3R1bXBlZCBvbiBgVEVTVFNDRkxBR2AuIE15IHJlZmxleCBpcyB0byBqdW1wIGludG8gdGhlIGhlYWRlcnM7IEkmIzM5O20gcHJldHR5IHN1cmUgSSYjMzk7bGwgZmluZCB0aGUgZGVmaW5pdGlvbiBvZiBgVEVTVFNDRkxBR2AgaW4gYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYCBvciBzb21ldGhpbmcgc2ltaWxhcmx5IG5hbWVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYEZPTElPYC1iYXNlZCBhcHByb2FjaCBpcyByZWFsbHkgZG9pbmcgdG8gdGhlIHBhZ2UgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoZSBvbGRlciBwYWdlLWZsYWcgbWVjaGFuaXNtcyB0byBhY2N1cmF0ZWx5IHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvbiB0aGUgd3JpdGViYWNrIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1RFU1RTQ0ZMQUcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD00NzU9c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgVGVzdENsZWFyUGFnZSMjdW5hbWUoc3RydWN0IHBhZ2UgKnBhZ2UpXHRcXFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTQ4Ny1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjQ4ODojZGVmaW5lIFRFU1RTQ0ZMQUcodW5hbWUsIGxuYW1lLCBwb2xpY3kpXHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNDg5LVx0VEVTVFNFVEZMQUcodW5hbWUsIGxuYW1lLCBwb2xpY3kpXHRcdFx0XHRcXFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTUzNz1zdGF0aWMgaW5saW5lIGludCBUZXN0Q2xlYXJQYWdlIyN1bmFtZShzdHJ1Y3QgcGFnZSAqcGFnZSkgeyByZXR1cm4gMDsgfVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTU0MS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjU0MjojZGVmaW5lIFRFU1RTQ0ZMQUdfRkFMU0UodW5hbWUsIGxuYW1lKVx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNTQzLVx0VEVTVFNFVEZMQUdfRkFMU0UodW5hbWUsIGxuYW1lKSBURVNUQ0xFQVJGTEFHX0ZBTFNFKHVuYW1lLCBsbmFtZSlcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD01NDc9Rk9MSU9fRkxBRyhyZWZlcmVuY2VkLCBGT0xJT19IRUFEX1BBR0UpXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNTQ5LVx0X19GT0xJT19TRVRfRkxBRyhyZWZlcmVuY2VkLCBGT0xJT19IRUFEX1BBR0UpXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo1NTA6UEFHRUZMQUcoRGlydHksIGRpcnR5LCBQRl9IRUFEKSBURVNUU0NGTEFHKERpcnR5LCBkaXJ0eSwgUEZfSEVBRClcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTU1MS1cdF9fQ0xFQVJQQUdFRkxBRyhEaXJ0eSwgZGlydHksIFBGX0hFQUQpXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9NTYyPVBBR0VGTEFHKFBpbm5lZCwgcGlubmVkLCBQRl9OT19DT01QT1VORClcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjU2MzpcdFRFU1RTQ0ZMQUcoUGlubmVkLCBwaW5uZWQsIFBGX05PX0NPTVBPVU5EKVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNTY0LVBBR0VGTEFHKFNhdmVQaW5uZWQsIHNhdmVwaW5uZWQsIFBGX05PX0NPTVBPVU5EKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD02NTM9UEFHRUZMQUcoSFdQb2lzb24sIGh3cG9pc29uLCBQRl9BTlkpXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo2NTQ6VEVTVFNDRkxBRyhIV1BvaXNvbiwgaHdwb2lzb24sIFBGX0FOWSlcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTY1NS0jZGVmaW5lIF9fUEdfSFdQT0lTT04gKDFVTCBcdTAwM2NcdTAwM2MgUEdfaHdwb2lzb24pXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9NjU3PVBBR0VGTEFHX0ZBTFNFKEhXUG9pc29uLCBod3BvaXNvbilcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjY1ODpURVNUU0NGTEFHX0ZBTFNFKEhXUG9pc29uLCBod3BvaXNvbilcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTY1OS0jZGVmaW5lIF9fUEdfSFdQT0lTT04gMFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDY4CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMzQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRmxhZyBNYWNyb3MqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSBgVEVTVFNDRkxBRyh1bmFtZSwgbG5hbWUsIHBvbGljeSlgIGV4cGFuZHMgaW50byBhIGBURVNUU0VURkxBR2AgYW5kIGEgYFRFU1RDTEVBUkZMQUdgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gU28sIGBURVNUU0VURkxBR2AgZ2VuZXJhdGVzIGBGT0xJT19URVNUX1NFVF9GTEFHKGxuYW1lLCBGT0xJT18jI3BvbGljeSlgIGFuZCBgVGVzdFNldFBhZ2UjI3VuYW1lKHN0cnVjdCBwYWdlICpwYWdlKWAsIGFuZCBgVEVTVENMRUFSRkxBR2AgZ2VuZXJhdGVzIGBGT0xJT19URVNUX0NMRUFSX0ZMQUcobG5hbWUsIEZPTElPXyMjcG9saWN5KWAgYWxvbmcgd2l0aCBgVGVzdENsZWFyUGFnZSMjdW5hbWUoc3RydWN0IHBhZ2UgKnBhZ2UpYC4gV2UgYWxzbyBoYXZlIGBURVNUUEFHRUZMQUdgLCB3aGljaCBkZWZpbmVzIGBGT0xJT19URVNUX0ZMQUcobG5hbWUsIEZPTElPXyMjcG9saWN5KWAgYW5kIGBQYWdlIyN1bmFtZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlgLgoKTm93LCB3aXRoIHRoaXMgc3BlY2lmaWMgcGF0Y2gsIGl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgcmVwbGFjZWQgYFRFU1RQQUdFRkxBRyhXcml0ZWJhY2ssIHdyaXRlYmFjaywgUEZfTk9fVEFJTClgIGFuZCBgVEVTVFNDRkxBRyhXcml0ZWJhY2ssIHdyaXRlYmFjaywgUEZfTk9fVEFJTClgIHdpdGggYEZPTElPX1RFU1RfRkxBRyh3cml0ZWJhY2ssIEZPTElPX0hFQURfUEFHRSlgIGFuZCBgRk9MSU9fVEVTVF9TRVRfRkxBRyh3cml0ZWJhY2ssIEZPTElPX0hFQURfUEFHRSlgLiBIbW0sIHRoYXQmIzM5O3MgYSBzaWduaWZpY2FudCBjaGFuZ2UuCgpXaGF0IHdhcyByZW1vdmVkPyBXZWxsLCBjbGVhcmx5IHdlIGxvc3QgYFBhZ2VXcml0ZWJhY2socGFnZSlgLCBgVGVzdFNldFBhZ2VXcml0ZWJhY2socGFnZSlgLCBgVGVzdENsZWFyUGFnZVdyaXRlYmFjayhwYWdlKWAgYW5kIGFsc28gYGZvbGlvX3Rlc3RfY2xlYXJfd3JpdGViYWNrKGZvbGlvKWAuIEJ1dCB3aHk/IEdpdmVuIHRoYXQgYFRFU1RTQ0ZMQUdgIGluY2x1ZGVkIGEgYFRFU1RDTEVBUkZMQUdgLCB0aGF0IGZ1bmN0aW9uIHdhcyByZW1vdmVkIHdoZW4gaXQgd2FzIG5vIGxvbmdlciB1c2VkLiBUaGlzIG1lYW5zIHRoYXQgdGhlc2Ugb2xkZXIgZnVuY3Rpb25zIG1pZ2h0IGhhdmUgYmVlbiBjb21wbGV0ZWx5IGVsaW1pbmF0ZWQgYmVjYXVzZSB0aGV5IGFyZSBubyBsb25nZXIgbmVjZXNzYXJ5LCBvciBtb3JlIGxpa2VseSwgYmVjYXVzZSB0aGV5IGFyZSBtYWRlIHJlZHVuZGFudCBieSBkaXJlY3QgYWNjZXNzIHRvIHRoZSBgZm9saW9gIG9iamVjdC4KClRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlICp3aHkqLCBJIHJlYWxseSBuZWVkIHRvIGNoZWNrIHRoZSBjb21taXQgbG9nLiBJIHNob3VsZCBnbyBsb29rIGZvciB0aGUgY29tbWl0IG1lc3NhZ2UgYW5kIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBJdCYjMzk7cyBsaWtlbHkgdGhlIGFuc3dlciBpcyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQYWdlV3JpdGViYWNrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg3MgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqRmluZGluZyB0aGUgV3JpdGViYWNrIEZsYWcmIzM5O3MgRm9vdHByaW50KioKCkFscmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSB0aGUgd3JpdGViYWNrIG1lY2hhbmlzbSwgYW5kIEkmIzM5O3ZlIGhpdCBhIHNuYWcuIFRoZSBmdW5jdGlvbiBgUGFnZVdyaXRlYmFja2DigJR0aGUgb25lIHRoYXQmIzM5O3Mgc3VwcG9zZWQgdG8gaGFuZGxlLCBvciBhdCBsZWFzdCBzaWduYWwsIHRoZSB3cml0ZWJhY2sgc3RhdGXigJRpc24mIzM5O3Qgc2hvd2luZyB1cCBpbiBhbnkgb2YgdGhlIHN5bWJvbCB0YWJsZXMuIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgc3VzcGljaW91cy4gVGhpcyBsaWtlbHkgbWVhbnMgaXQgaXNuJiMzOTt0IGEgZGlyZWN0IGV4cG9ydGVkIGZ1bmN0aW9uLCBvciBpdCBtaWdodCBiZSByZW5hbWVkIGF0IGNvbXBpbGUgdGltZSwgb3IgSSYjMzk7bSBzaW1wbHkgbG9va2luZyBpbiB0aGUgd3JvbmcgcGxhY2UuCgpHaXZlbiB0aGF0IGBQYWdlV3JpdGViYWNrYCBpcyBhIGZ1bmRhbWVudGFsIGNvbmNlcHQsIEkgc2hvdWxkIGhhdmUgc2VlbiBzb21ldGhpbmcuIE9rYXksIGxldCYjMzk7cyBiYWNrIHVwIGEgc3RlcC4gQ291bGQgaXQgYmUgYSByZWxhdGVkIGZ1bmN0aW9uIG9yIGEgbWFjcm8/IExldCYjMzk7cyB0cnkgbG9va2luZyBmb3IgZnVuY3Rpb24gbmFtZXMgdGhhdCBzZWVtIHJlbGF0ZWQgdG8gdGhlIHdyaXRlYmFjayBmdW5jdGlvbmFsaXR5LCBuYW1lcyB0aGF0IGNvdWxkIGludGVyYWN0IHdpdGggdGhlIHdyaXRlYmFjayBmbGFnLiBgVGVzdFNldFBhZ2VXcml0ZWJhY2tgIGFuZCBgVGVzdENsZWFyUGFnZVdyaXRlYmFja2AgaW1tZWRpYXRlbHkgY29tZSB0byBtaW5kLiBUaGVzZSBmdW5jdGlvbnMgd291bGQgYmUgdGhlIG9wZXJhdGlvbnMgcmVsYXRlZCB0byBxdWVyeWluZyBhbmQgdXBkYXRpbmcgYSBmbGFnLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBgUGFnZVdyaXRlYmFja2AmIzM5O3Mgd29yayBpcyBoYW5kbGVkIGJ5IHRoZXNlLiBJdCBtaWdodCBiZSBhIG1hY3JvLCBvciBzb21ldGhpbmcgdGhhdCBpcyBpbmxpbmVkLCBvciBzb21lIG90aGVyIHBpZWNlIG9mIG1hZ2ljIHRoZSBrZXJuZWwgY2FuIGRvISBMZXQmIzM5O3MgZm9sbG93IHRob3NlIGJyZWFkY3J1bWJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1Rlc3QoU2V0fENsZWFyKVBhZ2VXcml0ZWJhY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjMzCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIFdyaXRlYmFjayBUZXN0cyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHdyaXRlYmFjayBmdW5jdGlvbmFsaXR5LCBzcGVjaWZpY2FsbHkgaW4gdGhlIGNvbnRleHQgb2Ygb3VyIGZvbGlvIHN5c3RlbS4gSSYjMzk7bSBoaXR0aW5nIGEgc25hZyBvciBuZWVkIHRvIGNsYXJpZnkgc29tZXRoaW5nLiBNeSBtaW5kIGlzIGltbWVkaWF0ZWx5IGRyYXduIHRvIHRob3NlIHRlc3QgZnVuY3Rpb25zOiBgZm9saW9fdGVzdF93cml0ZWJhY2tgIGFuZCBgZm9saW9fdGVzdF9zZXRfd3JpdGViYWNrYC4gSXQmIzM5O3MgbGlrZWx5IHRoZXkmIzM5O3JlIGNyaXRpY2FsIGZvciB2YWxpZGF0aW5nIHRoZSB3cml0ZWJhY2sgbWVjaGFuaXNtLCBidXQgdGhlIGV4YWN0IGZsb3cgYW5kIGludGVyYWN0aW9ucyB0aGVzZSBmdW5jdGlvbnMgcmVwcmVzZW50IG5lZWQgZnVydGhlciBpbnZlc3RpZ2F0aW9uLCBzcGVjaWZpY2FsbHkgaG93IHRoZXkgYXJlIHVzZWQsIHdoYXQgdGhleSB0ZXN0LCBhbmQgaG93IHRoZSByZXN1bHRzIGNhbiBiZSB2ZXJpZmllZCBhbmQgaW50ZXJwcmV0ZWQuIFVuZGVyc3RhbmRpbmcgdGhlIG51YW5jZXMgb2YgdGhlc2UgZnVuY3Rpb25zIGlzIGtleSB0byBncmFzcGluZyB0aGUgaW50ZWdyaXR5IG9mIHRoZSB3cml0ZWJhY2sgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fdGVzdF9zZXRfd3JpdGViYWNrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BhZ2Utd3JpdGViYWNrLmM9Mjk4OT12b2lkIF9fZm9saW9fc3RhcnRfd3JpdGViYWNrKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wga2VlcF93cml0ZSlcbi0tXG5tbS9wYWdlLXdyaXRlYmFjay5jLTMwMDYtXHRcdHhhc19sb2FkKFx1MDAyNnhhcyk7XG5tbS9wYWdlLXdyaXRlYmFjay5jOjMwMDc6XHRcdGZvbGlvX3Rlc3Rfc2V0X3dyaXRlYmFjayhmb2xpbyk7XG5tbS9wYWdlLXdyaXRlYmFjay5jLTMwMDgtXG4tLVxubW0vcGFnZS13cml0ZWJhY2suYy0zMDMwLVx0fSBlbHNlIHtcbm1tL3BhZ2Utd3JpdGViYWNrLmM6MzAzMTpcdFx0Zm9saW9fdGVzdF9zZXRfd3JpdGViYWNrKGZvbGlvKTtcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMzAzMi1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYwOQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipBbmFseXppbmcgYGZvbGlvX3Rlc3RfY2xlYXJfd3JpdGViYWNrYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byBpdC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoIGBmb2xpb190ZXN0X2NsZWFyX3dyaXRlYmFja2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZnVuY3Rpb25hbGl0eSBpbnNpZGUgYW5kIG91dC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIGEgdGhvcm91Z2ggY2hlY2sg4oCTIGRpc3NlY3QgdGhlIGNvZGUsIGlkZW50aWZ5IHRoZSBwdXJwb3NlIG9mIHRoaXMgY29tcG9uZW50LCBhbmQgZGV0ZXJtaW5lIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgaXNzdWVzLCBib3R0bGVuZWNrcywgb3IgYXJlYXMgd2hlcmUgb3B0aW1pemF0aW9uIGNvdWxkIGJlIGJlbmVmaWNpYWwuIE15IGdvYWwgaXMgdG8gYWNoaWV2ZSBhIGRlZXAgYW5kIG51YW5jZWQgdW5kZXJzdGFuZGluZyBvZiBpdHMgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fdGVzdF9jbGVhcl93cml0ZWJhY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODA1CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTI2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBLZXJuZWwgUGFnZSBGbGFnIEFic3RyYWN0aW9uIFJlZmFjdG9yaW5nKioKCk9rYXksIHNvIGBmb2xpb190ZXN0X2NsZWFyX3dyaXRlYmFja2Agd2FzIHVudXNlZCwgdGhhdCYjMzk7cyBnb29kIHRvIGtub3cuIE5vdywgbG9va2luZyBhdCBgZm9saW9fdGVzdF93cml0ZWJhY2tgIGFuZCBgZm9saW9fdGVzdF9zZXRfd3JpdGViYWNrYCwgdGhvc2UgYXJlIGRpcmVjdCBmb2xpbyBoZWxwZXJzIGZvciB0ZXN0aW5nIGFuZCBzZXR0aW5nIHRoZSBgUEdfd3JpdGViYWNrYCBmbGFnLiBJbnRlcmVzdGluZ2x5LCBgRk9MSU9fVEVTVF9GTEFHKHdyaXRlYmFjaywgRk9MSU9fSEVBRF9QQUdFKWAgYW5kIGBGT0xJT19URVNUX1NFVF9GTEFHKHdyaXRlYmFjaywgRk9MSU9fSEVBRF9QQUdFKWAgc2VlbSB0byBtaXJyb3IgYFRFU1RQQUdFRkxBRyhXcml0ZWJhY2ssIHdyaXRlYmFjaywgUEZfTk9fVEFJTClgIGFuZCBgVEVTVFNDRkxBRyhXcml0ZWJhY2ssIHdyaXRlYmFjaywgUEZfTk9fVEFJTClgLgoKTGV0IG1lIGNoZWNrIGhvdyBgVEVTVFBBR0VGTEFHYCBleHBhbmRzLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBjYWxsaW5nIGBGT0xJT19URVNUX0ZMQUdgLCBhbmQgdGhlbiBjYWxsaW5nIGEgc3RhdGljIGZ1bmN0aW9uIHdpdGggYHRlc3RfYml0YCBvbiB0aGUgcmVsZXZhbnQgZmxhZy4gYEZPTElPX1BGX05PX1RBSUxgIGlzIGRlZmluZWQgYXMgMCwgYW5kIGBGT0xJT19IRUFEX1BBR0VgIGlzIGFsc28gMC4KClNvLCBgRk9MSU9fVEVTVF9GTEFHKHdyaXRlYmFjaywgRk9MSU9fSEVBRF9QQUdFKWAgcmVzb2x2ZXMgdG8gYHRlc3RfYml0KFBHX3dyaXRlYmFjaywgY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKWAsIHdoaWNoIGlzIGlkZW50aWNhbCB0byB3aGF0IGBURVNUUEFHRUZMQUcoV3JpdGViYWNrLCB3cml0ZWJhY2ssIFBGX05PX1RBSUwpYCBjcmVhdGVzLiBUaGUgc2FtZSBob2xkcyB0cnVlIGZvciBgZm9saW9fdGVzdF9zZXRfd3JpdGViYWNrYCBhbmQgYFRFU1RTRVRGTEFHYC4KClRoZXJlZm9yZSwgdGhlIHBhZ2UtYmFzZWQgaGVscGVycyBsaWtlIGBQYWdlV3JpdGViYWNrYCwgYFRlc3RTZXRQYWdlV3JpdGViYWNrYCwgZXRjLiBhcmUgYmVpbmcgcmVtb3ZlZCBiZWNhdXNlIHRoZXkgYXJlIG5vIGxvbmdlciBuZWVkZWQsIGJlY2F1c2UgdGhlIGZvbGlvIHZlcnNpb24gaXMgaWRlbnRpY2FsLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgZnV6emluZyBndWlkZWxpbmVzLiBXZSYjMzk7dmUgZ290IHRvIGJlIGNhcmVmdWwgYW5kIG5vdCBibGluZGx5IHRydXN0IGNsYWltcyBvZiAmIzM0O25vIGZ1bmN0aW9uYWwgY2hhbmdlJiMzNDsgb3IgJiMzNDtyZWZhY3RvcmluZy4mIzM0OyBUaGUgZ3VpZGVsaW5lcyBzYXkgYW55IHJlZmFjdG9yaW5nIG9mIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgbXVzdCBiZSBmdXp6ZWQuCgpMb29raW5nIGF0IHRoZSBuZWdhdGl2ZSBjcml0ZXJpYSwgZG9lcyB0aGlzIGZhbGwgaW50byBhbnkgb2YgdGhvc2UgY2F0ZWdvcmllcz8gSXQmIzM5O3Mgbm90IGRvY3VtZW50YXRpb24sIGEgdXNlci1zcGFjZSBjaGFuZ2UsIGRlY29yYXRpdmUgbG9nZ2luZywgb3IgYSBidWlsZCBzeXN0ZW0gY2hhbmdlIHRoYXQgZG9lc24mIzM5O3QgYWZmZWN0IEMgbG9naWMuIEl0JiMzOTtzIG5vdCB1bnJlYWNoYWJsZSBoYXJkd2FyZSBvciBjb2RlLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgcG9zaXRpdmUgY3JpdGVyaWEuIFRoaXMgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgKGBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaGApLCBpdCByZXN0cnVjdHVyZXMgZm9saW8gZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmbGFnIGFic3RyYWN0aW9ucy4gU28sIHRoaXMgZGVmaW5pdGVseSBmYWxscyBpbnRvIHRoZSBjYXRlZ29yeSBvZiAmIzM0O3JlZmFjdG9yaW5ncyBhbmQgY29kZSBjbGVhbnVwcyB0aGF0IHJlc3RydWN0dXJlIGRhdGEgc3RydWN0dXJlcy4mIzM0OyBUaGlzIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2UuCgpTbyBgV29ydGhGdXp6aW5nYCBtdXN0IGJlIGB0cnVlYC4KCk5vdyBsZXQmIzM5O3MgZGV0ZXJtaW5lIHRoZSBjb25maWd1cmF0aW9ucyBhbmQgZm9jdXMgc3ltYm9scy4gSXQmIzM5O3MgZXNzZW50aWFsIHRoYXQgd2UgZG8gdGhpcyByaWdodC4gSSBuZWVkIHRvIHN0YXJ0IGZpZ3VyaW5nIG91dCB3aGljaCBjb25maWd1cmF0aW9ucyBhcmUgbW9zdCByZWxldmFudCBhbmQgaWRlbnRpZnkgYW55IG5vbi11YmlxdWl0b3VzIGZ1bmN0aW9ucyB0aGF0IGFyZSBtb2RpZmllZC4gVG8gaGVscCB3aXRoIHRoYXQgSSBzaG91bGQgbG9vayBhdCBgZm9saW9fdGVzdF93cml0ZWJhY2tgIGNhbGxlcnMgYWNyb3NzIHRoZSBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZvbGlvX3Rlc3Rfd3JpdGViYWNrXFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rZXJuZWwvdXYuYz0zMTY9aW50IF9fbWFrZV9mb2xpb19zZWN1cmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHV2X2NiX2hlYWRlciAqdXZjYilcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtMzE5LVxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjMyMDpcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtMzIxLVx0XHRyZXR1cm4gLUVCVVNZO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JhY2t1cC5jPTEwMz10dG1fYmFja3VwX2JhY2t1cF9mb2xpbyhzdHJ1Y3QgZmlsZSAqYmFja3VwLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JhY2t1cC5jLTE2My1cdFx0cmV0ID0gc2htZW1fd3JpdGVfZm9saW8odG9fZm9saW8pO1xuZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYmFja3VwLmM6MTY0Olx0XHRcdGlmICghZm9saW9fdGVzdF93cml0ZWJhY2sodG9fZm9saW8pKVxuZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYmFja3VwLmMtMTY1LVx0XHRcdFx0Zm9saW9fY2xlYXJfcmVjbGFpbSh0b19mb2xpbyk7XG4tLVxuZnMvYWlvLmM9NDYwPXN0YXRpYyBpbnQgYWlvX21pZ3JhdGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZHN0LFxuLS1cbmZzL2Fpby5jLTQ5Ny1cdC8qIFdyaXRlYmFjayBtdXN0IGJlIGNvbXBsZXRlICovXG5mcy9haW8uYzo0OTg6XHRCVUdfT04oZm9saW9fdGVzdF93cml0ZWJhY2soc3JjKSk7XG5mcy9haW8uYy00OTktXHRmb2xpb19nZXQoZHN0KTtcbi0tXG5mcy9idHJmcy9kaXNrLWlvLmM9NDg0PXN0YXRpYyBib29sIGJ0cmVlX3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwX2ZsYWdzKVxuZnMvYnRyZnMvZGlzay1pby5jLTQ4NS17XG5mcy9idHJmcy9kaXNrLWlvLmM6NDg2Olx0aWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSB8fCBmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSlcbmZzL2J0cmZzL2Rpc2staW8uYy00ODctXHRcdHJldHVybiBmYWxzZTtcbi0tXG5mcy9idHJmcy9leHRlbnRfaW8uYz05NzE9dm9pZCBjbGVhcl9mb2xpb19leHRlbnRfbWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuZnMvYnRyZnMvZXh0ZW50X2lvLmMtOTg1LVx0QVNTRVJUKCFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSk7XG5mcy9idHJmcy9leHRlbnRfaW8uYzo5ODY6XHRBU1NFUlQoIWZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSk7XG5mcy9idHJmcy9leHRlbnRfaW8uYy05ODctXG4tLVxuZnMvYnRyZnMvZXh0ZW50X2lvLmM9MTgxNz1zdGF0aWMgaW50IHN1Ym1pdF9vbmVfc2VjdG9yKHN0cnVjdCBidHJmc19pbm9kZSAqaW5vZGUsXG4tLVxuZnMvYnRyZnMvZXh0ZW50X2lvLmMtMTg5Mi1cdCAqL1xuZnMvYnRyZnMvZXh0ZW50X2lvLmM6MTg5MzpcdEFTU0VSVChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpO1xuZnMvYnRyZnMvZXh0ZW50X2lvLmMtMTg5NC1cbi0tXG5mcy9idHJmcy9leHRlbnRfaW8uYz0yNzE2PXN0YXRpYyBpbnQgZXh0ZW50X3dyaXRlX2NhY2hlX3BhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmZzL2J0cmZzL2V4dGVudF9pby5jLTI4MjktXHRcdFx0ICAgIGJ0cmZzX2lzX3N1YnBhZ2UoaW5vZGVfdG9fZnNfaW5mbyhpbm9kZSksIGZvbGlvKSkge1xuZnMvYnRyZnMvZXh0ZW50X2lvLmM6MjgzMDpcdFx0XHRcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpXG5mcy9idHJmcy9leHRlbnRfaW8uYy0yODMxLVx0XHRcdFx0XHRzdWJtaXRfd3JpdGVfYmlvKGJpb19jdHJsLCAwKTtcbi0tXG5mcy9idHJmcy9leHRlbnRfaW8uYy0yODM0LVxuZnMvYnRyZnMvZXh0ZW50X2lvLmM6MjgzNTpcdFx0XHRpZiAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pIHx8XG5mcy9idHJmcy9leHRlbnRfaW8uYy0yODM2LVx0XHRcdCAgICAhZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpIHtcbi0tXG5mcy9idHJmcy9leHRlbnRfaW8uYz0zMTY1PXN0YXRpYyB2b2lkIGRldGFjaF9leHRlbnRfYnVmZmVyX2ZvbGlvKGNvbnN0IHN0cnVjdCBleHRlbnRfYnVmZmVyICplYiwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5mcy9idHJmcy9leHRlbnRfaW8uYy0zMTkzLVx0XHRcdEJVR19PTihmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSk7XG5mcy9idHJmcy9leHRlbnRfaW8uYzozMTk0Olx0XHRcdEJVR19PTihmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpO1xuZnMvYnRyZnMvZXh0ZW50X2lvLmMtMzE5NS1cdFx0XHQvKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlbiYjMzk7dCBiZSBhdHRhY2hlZCB0byBhIG5ldyBlYi4gKi9cbi0tXG5mcy9idHJmcy9pbm9kZS5jPTc2NDc9c3RhdGljIGJvb2wgYnRyZnNfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnBfZmxhZ3MpXG5mcy9idHJmcy9pbm9kZS5jLTc2NDgte1xuZnMvYnRyZnMvaW5vZGUuYzo3NjQ5Olx0aWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSB8fCBmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSlcbmZzL2J0cmZzL2lub2RlLmMtNzY1MC1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmZzL2J0cmZzL3N1YnBhZ2UuYz00NTY9dm9pZCBidHJmc19zdWJwYWdlX3NldF93cml0ZWJhY2soY29uc3Qgc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmZzX2luZm8sXG4tLVxuZnMvYnRyZnMvc3VicGFnZS5jLTQ3NS1cdCAqL1xuZnMvYnRyZnMvc3VicGFnZS5jOjQ3NjpcdGlmICghZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKVxuZnMvYnRyZnMvc3VicGFnZS5jLTQ3Ny1cdFx0X19mb2xpb19zdGFydF93cml0ZWJhY2soZm9saW8sIHRydWUpO1xuLS1cbmZzL2J0cmZzL3N1YnBhZ2UuYz00ODM9dm9pZCBidHJmc19zdWJwYWdlX2NsZWFyX3dyaXRlYmFjayhjb25zdCBzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqZnNfaW5mbyxcbi0tXG5mcy9idHJmcy9zdWJwYWdlLmMtNDkzLVx0aWYgKHN1YnBhZ2VfdGVzdF9iaXRtYXBfYWxsX3plcm8oZnNfaW5mbywgZm9saW8sIHdyaXRlYmFjaykpIHtcbmZzL2J0cmZzL3N1YnBhZ2UuYzo0OTQ6XHRcdEFTU0VSVChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpO1xuZnMvYnRyZnMvc3VicGFnZS5jLTQ5NS1cdFx0Zm9saW9fZW5kX3dyaXRlYmFjayhmb2xpbyk7XG4tLVxuZnMvYnVmZmVyLmM9ODM9dm9pZCBidWZmZXJfY2hlY2tfZGlydHlfd3JpdGViYWNrKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxuZnMvYnVmZmVyLmMtOTUtXG5mcy9idWZmZXIuYzo5NjpcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpXG5mcy9idWZmZXIuYy05Ny1cdFx0KndyaXRlYmFjayA9IHRydWU7XG4tLVxuZnMvYnVmZmVyLmM9MTcyMT1pbnQgX19ibG9ja193cml0ZV9mdWxsX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxuZnMvYnVmZmVyLmMtMTgxMC1cdCAqL1xuZnMvYnVmZmVyLmM6MTgxMTpcdEJVR19PTihmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpO1xuZnMvYnVmZmVyLmMtMTgxMi1cdGZvbGlvX3N0YXJ0X3dyaXRlYmFjayhmb2xpbyk7XG4tLVxuZnMvYnVmZmVyLmMtMTg2NC1cdH0gd2hpbGUgKChiaCA9IGJoLVx1MDAzZWJfdGhpc19wYWdlKSAhPSBoZWFkKTtcbmZzL2J1ZmZlci5jOjE4NjU6XHRCVUdfT04oZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKTtcbmZzL2J1ZmZlci5jLTE4NjYtXHRtYXBwaW5nX3NldF9lcnJvcihmb2xpby1cdTAwM2VtYXBwaW5nLCBlcnIpO1xuLS1cbmZzL2J1ZmZlci5jPTI3ODQ9Ym9vbCB0cnlfdG9fZnJlZV9idWZmZXJzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuZnMvYnVmZmVyLmMtMjc5MC1cdEJVR19PTighZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pKTtcbmZzL2J1ZmZlci5jOjI3OTE6XHRpZiAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKVxuZnMvYnVmZmVyLmMtMjc5Mi1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmZzL2NlcGgvYWRkci5jPTEzMTE9dm9pZCBjZXBoX3Byb2Nlc3NfZm9saW9fYmF0Y2goc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvY2VwaC9hZGRyLmMtMTMyOS1cdFx0XHRcJiMzNDtmb2xpb190ZXN0X2RpcnR5ICUjeCwgZm9saW9fdGVzdF9sb2NrZWQgJSN4XFxuXCYjMzQ7LFxuZnMvY2VwaC9hZGRyLmM6MTMzMDpcdFx0XHRmb2xpbywgZm9saW8tXHUwMDNlaW5kZXgsIGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSxcbmZzL2NlcGgvYWRkci5jLTEzMzEtXHRcdFx0Zm9saW9fdGVzdF9kaXJ0eShmb2xpbyksXG4tLVxuZnMvY2VwaC9hZGRyLmMtMTMzMy1cbmZzL2NlcGgvYWRkci5jOjEzMzQ6XHRcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykgfHxcbmZzL2NlcGgvYWRkci5jLTEzMzUtXHRcdCAgICBmb2xpb190ZXN0X3ByaXZhdGVfMihmb2xpbykgLyogW0RFUFJFQ0FURURdICovKSB7XG4tLVxuZnMvZXh0NC9pbm9kZS5jPTE3MDY9c3RhdGljIHZvaWQgbXBhZ2VfcmVsZWFzZV91bnVzZWRfcGFnZXMoc3RydWN0IG1wYWdlX2RhX2RhdGEgKm1wZCxcbi0tXG5mcy9leHQ0L2lub2RlLmMtMTc0OC1cdFx0XHRCVUdfT04oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSk7XG5mcy9leHQ0L2lub2RlLmM6MTc0OTpcdFx0XHRCVUdfT04oZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKTtcbmZzL2V4dDQvaW5vZGUuYy0xNzUwLVx0XHRcdGlmIChpbnZhbGlkYXRlKSB7XG4tLVxuZnMvZXh0NC9pbm9kZS5jPTI2MDg9c3RhdGljIGludCBtcGFnZV9wcmVwYXJlX2V4dGVudF90b19tYXAoc3RydWN0IG1wYWdlX2RhX2RhdGEgKm1wZClcbi0tXG5mcy9leHQ0L2lub2RlLmMtMjY3NC1cdFx0XHQgKi9cbmZzL2V4dDQvaW5vZGUuYzoyNjc1Olx0XHRcdGlmICgoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pIFx1MDAyNlx1MDAyNlxuZnMvZXh0NC9pbm9kZS5jLTI2NzYtXHRcdFx0ICAgIG1wZC1cdTAwM2V3YmMtXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfTk9ORSkgfHxcbi0tXG5mcy9leHQ0L2lub2RlLmMtMjY4Ni1cdFx0XHRpZiAoIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKSB7XG5mcy9leHQ0L2lub2RlLmM6MjY4NzpcdFx0XHRcdGlmICghZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKSB7XG5mcy9leHQ0L2lub2RlLmMtMjY4OC1cdFx0XHRcdFx0X19mb2xpb19zdGFydF93cml0ZWJhY2soZm9saW8sIGZhbHNlKTtcbi0tXG5mcy9leHQ0L2lub2RlLmMtMjY5NS1cdFx0XHRmb2xpb193YWl0X3dyaXRlYmFjayhmb2xpbyk7XG5mcy9leHQ0L2lub2RlLmM6MjY5NjpcdFx0XHRCVUdfT04oZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKTtcbmZzL2V4dDQvaW5vZGUuYy0yNjk3LVxuLS1cbmZzL2V4dDQvbW92ZV9leHRlbnQuYz0xMTc9c3RhdGljIGludCBtZXh0X2ZvbGlvX21rdXB0b2RhdGUoc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IGZyb20sIHNpemVfdCB0bylcbi0tXG5mcy9leHQ0L21vdmVfZXh0ZW50LmMtMTI2LVx0QlVHX09OKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbykpO1xuZnMvZXh0NC9tb3ZlX2V4dGVudC5jOjEyNzpcdEJVR19PTihmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpO1xuZnMvZXh0NC9tb3ZlX2V4dGVudC5jLTEyOC1cbi0tXG5mcy9leHQ0L3BhZ2UtaW8uYz00NjI9dm9pZCBleHQ0X2Jpb193cml0ZV9mb2xpbyhzdHJ1Y3QgZXh0NF9pb19zdWJtaXQgKmlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmZzL2V4dDQvcGFnZS1pby5jLTQ3Mi1cdEJVR19PTighZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pKTtcbmZzL2V4dDQvcGFnZS1pby5jOjQ3MzpcdEJVR19PTihmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpO1xuZnMvZXh0NC9wYWdlLWlvLmMtNDc0LVxuLS1cbmZzL2YyZnMvY29tcHJlc3MuYz0xMDUyPXN0YXRpYyB2b2lkIGNhbmNlbF9jbHVzdGVyX3dyaXRlYmFjayhzdHJ1Y3QgY29tcHJlc3NfY3R4ICpjYyxcbi0tXG5mcy9mMmZzL2NvbXByZXNzLmMtMTA3MS1cdFx0Y2xlYXJfcGFnZV9wcml2YXRlX2djaW5nKGNjLVx1MDAzZXJwYWdlc1tpXSk7XG5mcy9mMmZzL2NvbXByZXNzLmM6MTA3MjpcdFx0aWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKHBhZ2VfZm9saW8oY2MtXHUwMDNlcnBhZ2VzW2ldKSkpXG5mcy9mMmZzL2NvbXByZXNzLmMtMTA3My1cdFx0XHRlbmRfcGFnZV93cml0ZWJhY2soY2MtXHUwMDNlcnBhZ2VzW2ldKTtcbi0tXG5mcy9mMmZzL2NvbXByZXNzLmM9MTQ5Nj1zdGF0aWMgaW50IGYyZnNfd3JpdGVfcmF3X3BhZ2VzKHN0cnVjdCBjb21wcmVzc19jdHggKmNjLFxuLS1cbmZzL2YyZnMvY29tcHJlc3MuYy0xNTQxLVxuZnMvZjJmcy9jb21wcmVzcy5jOjE1NDI6XHRcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpIHtcbmZzL2YyZnMvY29tcHJlc3MuYy0xNTQzLVx0XHRcdGlmICh3YmMtXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfTk9ORSlcbi0tXG5mcy9mMmZzL2RhdGEuYz0zMjI4PXN0YXRpYyBpbnQgZjJmc193cml0ZV9jYWNoZV9wYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9mMmZzL2RhdGEuYy0zNDA5LVxuZnMvZjJmcy9kYXRhLmM6MzQxMDpcdFx0XHRpZiAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKSB7XG5mcy9mMmZzL2RhdGEuYy0zNDExLVx0XHRcdFx0aWYgKHdiYy1cdTAwM2VzeW5jX21vZGUgPT0gV0JfU1lOQ19OT05FKVxuLS1cbmZzL2YyZnMvZjJmcy5oPTUxOTk9c3RhdGljIGlubGluZSB2b2lkIGYyZnNfdHJ1bmNhdGVfbWV0YV9pbm9kZV9wYWdlcyhzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmksXG4tLVxuZnMvZjJmcy9mMmZzLmgtNTIwOS1cdFx0aWYgKCFJU19FUlIoZm9saW8pKSB7XG5mcy9mMmZzL2YyZnMuaDo1MjEwOlx0XHRcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpXG5mcy9mMmZzL2YyZnMuaC01MjExLVx0XHRcdFx0bmVlZF9zdWJtaXQgPSB0cnVlO1xuLS1cbmZzL2YyZnMvZ2MuYz0xNTAzPXN0YXRpYyBpbnQgbW92ZV9kYXRhX3BhZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgYmxvY2tfdCBiaWR4LCBpbnQgZ2NfdHlwZSxcbi0tXG5mcy9mMmZzL2djLmMtMTUyMi1cdGlmIChnY190eXBlID09IEJHX0dDKSB7XG5mcy9mMmZzL2djLmM6MTUyMzpcdFx0aWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkge1xuZnMvZjJmcy9nYy5jLTE1MjQtXHRcdFx0ZXJyID0gLUVBR0FJTjtcbi0tXG5mcy9mMmZzL2lubGluZS5jPTE0Nj1pbnQgZjJmc19jb252ZXJ0X2lubGluZV9mb2xpbyhzdHJ1Y3QgZG5vZGVfb2ZfZGF0YSAqZG4sIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuZnMvZjJmcy9pbmxpbmUuYy0xODYtXG5mcy9mMmZzL2lubGluZS5jOjE4NzpcdGYyZnNfYnVnX29uKEYyRlNfRl9TQihmb2xpbyksIGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSk7XG5mcy9mMmZzL2lubGluZS5jLTE4OC1cbi0tXG5mcy9mMmZzL2lub2RlLmM9MTczPWJvb2wgZjJmc19pbm9kZV9jaGtzdW1fdmVyaWZ5KHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5mcy9mMmZzL2lub2RlLmMtMTg1LVx0XHRcdGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIHx8XG5mcy9mMmZzL2lub2RlLmM6MTg2Olx0XHRcdGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSlcbmZzL2YyZnMvaW5vZGUuYy0xODctI2VuZGlmXG4tLVxuZnMvZjJmcy9ub2RlLmM9MTg3MD1pbnQgZjJmc193cml0ZV9zaW5nbGVfbm9kZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKm5vZGVfZm9saW8sIGludCBzeW5jX21vZGUsXG4tLVxuZnMvZjJmcy9ub2RlLmMtMTg4MC1cdFx0Lyogc2V0IHBhZ2UgZGlydHkgYW5kIHdyaXRlIGl0ICovXG5mcy9mMmZzL25vZGUuYzoxODgxOlx0XHRpZiAoIWZvbGlvX3Rlc3Rfd3JpdGViYWNrKG5vZGVfZm9saW8pKVxuZnMvZjJmcy9ub2RlLmMtMTg4Mi1cdFx0XHRmb2xpb19tYXJrX2RpcnR5KG5vZGVfZm9saW8pO1xuLS1cbmZzL2YyZnMvc2VnbWVudC5jPTQzNTI9dm9pZCBmMmZzX2ZvbGlvX3dhaXRfd3JpdGViYWNrKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gcGFnZV90eXBlIHR5cGUsXG4tLVxuZnMvZjJmcy9zZWdtZW50LmMtNDM1NC17XG5mcy9mMmZzL3NlZ21lbnQuYzo0MzU1Olx0aWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkge1xuZnMvZjJmcy9zZWdtZW50LmMtNDM1Ni1cdFx0c3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpID0gRjJGU19GX1NCKGZvbGlvKTtcbi0tXG5mcy9mMmZzL3NlZ21lbnQuYy00MzYzLVx0XHRcdGZvbGlvX3dhaXRfd3JpdGViYWNrKGZvbGlvKTtcbmZzL2YyZnMvc2VnbWVudC5jOjQzNjQ6XHRcdFx0ZjJmc19idWdfb24oc2JpLCBsb2NrZWQgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSk7XG5mcy9mMmZzL3NlZ21lbnQuYy00MzY1LVx0XHR9IGVsc2Uge1xuLS1cbmZzL2ZzLXdyaXRlYmFjay5jPTQwNT1zdGF0aWMgYm9vbCBpbm9kZV9kb19zd2l0Y2hfd2JzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZnMtd3JpdGViYWNrLmMtNDQ1LVx0XHRsb25nIG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuZnMvZnMtd3JpdGViYWNrLmM6NDQ2Olx0XHRXQVJOX09OX09OQ0UoIWZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSk7XG5mcy9mcy13cml0ZWJhY2suYy00NDctXHRcdHdiX3N0YXRfbW9kKG9sZF93YiwgV0JfV1JJVEVCQUNLLCAtbnIpO1xuLS1cbmZzL2Z1c2UvZGV2LmM9MTEyMz1zdGF0aWMgaW50IGZ1c2VfdHJ5X21vdmVfZm9saW8oc3RydWN0IGZ1c2VfY29weV9zdGF0ZSAqY3MsIHN0cnVjdCBmb2xpbyAqKmZvbGlvcClcbi0tXG5mcy9mdXNlL2Rldi5jLTExNzItXHRpZiAoV0FSTl9PTihmb2xpb190ZXN0X2RpcnR5KG9sZGZvbGlvKSB8fFxuZnMvZnVzZS9kZXYuYzoxMTczOlx0XHRcdFx0Zm9saW9fdGVzdF93cml0ZWJhY2sob2xkZm9saW8pKSlcbmZzL2Z1c2UvZGV2LmMtMTE3NC1cdFx0Z290byBvdXRfZmFsbGJhY2tfdW5sb2NrO1xuLS1cbmZzL2dmczIvYW9wcy5jPTE5MT1zdGF0aWMgaW50IGdmczJfd3JpdGVfamRhdGFfYmF0Y2goc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvZ2ZzMi9hb3BzLmMtMjI5LVxuZnMvZ2ZzMi9hb3BzLmM6MjMwOlx0XHRpZiAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKSB7XG5mcy9nZnMyL2FvcHMuYy0yMzEtXHRcdFx0aWYgKHdiYy1cdTAwM2VzeW5jX21vZGUgIT0gV0JfU1lOQ19OT05FKVxuLS1cbmZzL2dmczIvYW9wcy5jLTIzNi1cbmZzL2dmczIvYW9wcy5jOjIzNzpcdFx0QlVHX09OKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSk7XG5mcy9nZnMyL2FvcHMuYy0yMzgtXHRcdGlmICghZm9saW9fY2xlYXJfZGlydHlfZm9yX2lvKGZvbGlvKSlcbi0tXG5mcy9nZnMyL21ldGFfaW8uYz0zMz1zdGF0aWMgdm9pZCBnZnMyX2FzcGFjZV93cml0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmZzL2dmczIvbWV0YV9pby5jLTcxLVx0ICovXG5mcy9nZnMyL21ldGFfaW8uYzo3MjpcdEJVR19PTihmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpO1xuZnMvZ2ZzMi9tZXRhX2lvLmMtNzMtXHRmb2xpb19zdGFydF93cml0ZWJhY2soZm9saW8pO1xuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9ODMxPXZvaWQgaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuKVxuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtODQwLVx0aWYgKG9mZnNldCA9PSAwIFx1MDAyNlx1MDAyNiBsZW4gPT0gZm9saW9fc2l6ZShmb2xpbykpIHtcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6ODQxOlx0XHRXQVJOX09OX09OQ0UoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKTtcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtODQyLVx0XHRmb2xpb19jYW5jZWxfZGlydHkoZm9saW8pO1xuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9MTk4MD1pbnQgaW9tYXBfd3JpdGViYWNrX2ZvbGlvKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xOTkzLVx0V0FSTl9PTl9PTkNFKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKTtcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MTk5NDpcdFdBUk5fT05fT05DRShmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpO1xuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xOTk1LVxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYz00MjQ9c3RhdGljIGludCBtZXRhcGFnZV93cml0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy00NDYtXHRCVUdfT04oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSk7XG5mcy9qZnMvamZzX21ldGFwYWdlLmM6NDQ3Olx0QlVHX09OKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSk7XG5mcy9qZnMvamZzX21ldGFwYWdlLmMtNDQ4LVx0Zm9saW9fc3RhcnRfd3JpdGViYWNrKGZvbGlvKTtcbi0tXG5mcy9qZnMvamZzX21ldGFwYWdlLmM9NjY1PXN0YXRpYyB2b2lkIG1ldGFwYWdlX2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCxcbi0tXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtNjY5LVxuZnMvamZzL2pmc19tZXRhcGFnZS5jOjY3MDpcdEJVR19PTihmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpO1xuZnMvamZzL2pmc19tZXRhcGFnZS5jLTY3MS1cbi0tXG5mcy9tcGFnZS5jPTQ1Mz1zdGF0aWMgaW50IG1wYWdlX3dyaXRlX2ZvbGlvKHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmZzL21wYWdlLmMtNjE4LVxuZnMvbXBhZ2UuYzo2MTk6XHRCVUdfT04oZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKTtcbmZzL21wYWdlLmMtNjIwLVx0Zm9saW9fc3RhcnRfd3JpdGViYWNrKGZvbGlvKTtcbi0tXG5mcy9uZXRmcy93cml0ZV9jb2xsZWN0LmM9MTE0PXN0YXRpYyB2b2lkIG5ldGZzX3dyaXRlYmFja191bmxvY2tfZm9saW9zKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLFxuLS1cbmZzL25ldGZzL3dyaXRlX2NvbGxlY3QuYy0xNDYtXHRcdGZvbGlvID0gZm9saW9xX2ZvbGlvKGZvbGlvcSwgc2xvdCk7XG5mcy9uZXRmcy93cml0ZV9jb2xsZWN0LmM6MTQ3Olx0XHRpZiAoV0FSTl9PTkNFKCFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksXG5mcy9uZXRmcy93cml0ZV9jb2xsZWN0LmMtMTQ4LVx0XHRcdCAgICAgIFwmIzM0O1I9JTA4eDogZm9saW8gJWx4IGlzIG5vdCB1bmRlciB3cml0ZWJhY2tcXG5cJiMzNDssXG4tLVxuZnMvbmZzL3dyaXRlLmM9MjA0NT1pbnQgbmZzX3diX2ZvbGlvX3JlY2xhaW0oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5mcy9uZnMvd3JpdGUuYy0yMDU3LVxuZnMvbmZzL3dyaXRlLmM6MjA1ODpcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpXG5mcy9uZnMvd3JpdGUuYy0yMDU5LVx0XHRyZXR1cm4gLUVCVVNZO1xuLS1cbmZzL25pbGZzMi9wYWdlLmM9MTk2PXN0YXRpYyB2b2lkIG5pbGZzX2NvcHlfZm9saW8oc3RydWN0IGZvbGlvICpkc3QsIHN0cnVjdCBmb2xpbyAqc3JjLFxuLS1cbmZzL25pbGZzMi9wYWdlLmMtMjAxLVxuZnMvbmlsZnMyL3BhZ2UuYzoyMDI6XHRCVUdfT04oZm9saW9fdGVzdF93cml0ZWJhY2soZHN0KSk7XG5mcy9uaWxmczIvcGFnZS5jLTIwMy1cbi0tXG5mcy9uaWxmczIvc2VnbWVudC5jPTE2ODY9c3RhdGljIHZvaWQgbmlsZnNfYmVnaW5fZm9saW9faW8oc3RydWN0IGZvbGlvICpmb2xpbylcbmZzL25pbGZzMi9zZWdtZW50LmMtMTY4Ny17XG5mcy9uaWxmczIvc2VnbWVudC5jOjE2ODg6XHRpZiAoIWZvbGlvIHx8IGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSlcbmZzL25pbGZzMi9zZWdtZW50LmMtMTY4OS1cdFx0Lypcbi0tXG5mcy9uaWxmczIvc2VnbWVudC5jPTE3ODc9c3RhdGljIHZvaWQgbmlsZnNfZW5kX2ZvbGlvX2lvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBlcnIpXG4tLVxuZnMvbmlsZnMyL3NlZ21lbnQuYy0xNzkyLVx0aWYgKGJ1ZmZlcl9uaWxmc19ub2RlKGZvbGlvX2J1ZmZlcnMoZm9saW8pKSBcdTAwMjZcdTAwMjZcbmZzL25pbGZzMi9zZWdtZW50LmM6MTc5MzpcdFx0XHQhZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKSB7XG5mcy9uaWxmczIvc2VnbWVudC5jLTE3OTQtXHRcdC8qXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jPTMyNjA9c3RhdGljIHZvaWQgZ2F0aGVyX3N0YXRzKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbnVtYV9tYXBzICptZCwgaW50IHB0ZV9kaXJ0eSxcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzI4MC1cbmZzL3Byb2MvdGFza19tbXUuYzozMjgxOlx0aWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSlcbmZzL3Byb2MvdGFza19tbXUuYy0zMjgyLVx0XHRtZC1cdTAwM2V3cml0ZWJhY2sgJiM0Mzs9IG5yX3BhZ2VzO1xuLS1cbmZzL3ViaWZzL2ZpbGUuYz0xNDU4PXN0YXRpYyBib29sIHViaWZzX3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgdW51c2VkX2dmcF9mbGFncylcbi0tXG5mcy91Ymlmcy9maWxlLmMtMTQ2Mi1cbmZzL3ViaWZzL2ZpbGUuYzoxNDYzOlx0aWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSlcbmZzL3ViaWZzL2ZpbGUuYy0xNDY0LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD0yMjE9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydV9nZW5fZm9saW9fc2VxKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTI0Ni1cdFx0IChmb2xpb190ZXN0X3JlY2xhaW0oZm9saW8pIFx1MDAyNlx1MDAyNlxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDoyNDc6XHRcdCAgKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIHx8IGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkpKVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0yNDgtXHRcdGdlbiA9IE1JTl9OUl9HRU5TO1xuLS1cbm1tL2NvbXBhY3Rpb24uYz04NTU9aXNvbGF0ZV9taWdyYXRlcGFnZXNfYmxvY2soc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHVuc2lnbmVkIGxvbmcgbG93X3Bmbixcbi0tXG5tbS9jb21wYWN0aW9uLmMtMTEyNy1cdFx0ICovXG5tbS9jb21wYWN0aW9uLmM6MTEyODpcdFx0aWYgKChtb2RlIFx1MDAyNiBJU09MQVRFX0FTWU5DX01JR1JBVEUpIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpXG5tbS9jb21wYWN0aW9uLmMtMTEyOS1cdFx0XHRnb3RvIGlzb2xhdGVfZmFpbF9wdXQ7XG4tLVxubW0vZmlsZW1hcC5jPTYzNz1ib29sIGZpbGVtYXBfcmFuZ2VfaGFzX3dyaXRlYmFjayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9maWxlbWFwLmMtNjUzLVx0XHRpZiAoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgfHwgZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pIHx8XG5tbS9maWxlbWFwLmM6NjU0Olx0XHRcdFx0Zm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKVxubW0vZmlsZW1hcC5jLTY1NS1cdFx0XHRicmVhaztcbi0tXG5tbS9maWxlbWFwLmM9MTYwOT1zdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZmlsZW1hcC5jLTE2MTQtXG5tbS9maWxlbWFwLmM6MTYxNTpcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykgfHwgZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpXG5tbS9maWxlbWFwLmMtMTYxNi1cdFx0cmV0dXJuO1xuLS1cbm1tL2ZpbGVtYXAuYz0xNjU2PXZvaWQgZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9maWxlbWFwLmMtMTY1Ny17XG5tbS9maWxlbWFwLmM6MTY1ODpcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pLCBmb2xpbyk7XG5tbS9maWxlbWFwLmMtMTY1OS1cbi0tXG5tbS9maWxlbWFwLmM9MTY4Nz12b2lkIGZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL2ZpbGVtYXAuYy0xNjg4LXtcbm1tL2ZpbGVtYXAuYzoxNjg5Olx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksIGZvbGlvKTtcbm1tL2ZpbGVtYXAuYy0xNjkwLVxuLS1cbm1tL2ZpbGVtYXAuYz0yMTgyPXVuc2lnbmVkIGZpbmRfbG9ja19lbnRyaWVzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90ICpzdGFydCxcbi0tXG5tbS9maWxlbWFwLmMtMjIwNC1cdFx0XHRpZiAoZm9saW8tXHUwMDNlbWFwcGluZyAhPSBtYXBwaW5nIHx8XG5tbS9maWxlbWFwLmM6MjIwNTpcdFx0XHQgICAgZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKVxubW0vZmlsZW1hcC5jLTIyMDYtXHRcdFx0XHRnb3RvIHVubG9jaztcbi0tXG5tbS9maWxlbWFwLmM9MjQwMD11bnNpZ25lZCBmaWxlbWFwX2dldF9mb2xpb3NfZGlydHkoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgKnN0YXJ0LFxuLS1cbm1tL2ZpbGVtYXAuYy0yNDExLVx0XHRcdGJvb2wgY2xlYW4gPSAhZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgXHUwMDI2XHUwMDI2XG5tbS9maWxlbWFwLmM6MjQxMjpcdFx0XHRcdCAgICAgIWZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKTtcbm1tL2ZpbGVtYXAuYy0yNDEzLVx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4tLVxubW0vZmlsZW1hcC5jPTI3NjI9c3RhdGljIHZvaWQgZmlsZW1hcF9lbmRfZHJvcGJlaGluZF9yZWFkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZmlsZW1hcC5jLTI3NjUtXHRcdHJldHVybjtcbm1tL2ZpbGVtYXAuYzoyNzY2Olx0aWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSB8fCBmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSlcbm1tL2ZpbGVtYXAuYy0yNzY3LVx0XHRyZXR1cm47XG4tLVxubW0vZmlsZW1hcC5jPTQ1NDM9Ym9vbCBmaWxlbWFwX3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKVxuLS1cbm1tL2ZpbGVtYXAuYy00NTQ5LVx0XHRyZXR1cm4gdHJ1ZTtcbm1tL2ZpbGVtYXAuYzo0NTUwOlx0aWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSlcbm1tL2ZpbGVtYXAuYy00NTUxLVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vZm9saW8uYz01MzI9c3RhdGljIHZvaWQgbHJ1X2RlYWN0aXZhdGVfZmlsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZm9saW8uYy01NDctXG5tbS9mb2xpby5jOjU0ODpcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykgfHwgZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpIHtcbm1tL2ZvbGlvLmMtNTQ5LVx0XHQvKlxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MzkyOT1pbnQgZm9saW9fY2hlY2tfc3BsaXR0YWJsZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzk2MC1cbm1tL2h1Z2VfbWVtb3J5LmM6Mzk2MTpcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpXG5tbS9odWdlX21lbW9yeS5jLTM5NjItXHRcdHJldHVybiAtRUJVU1k7XG4tLVxubW0va2h1Z2VwYWdlZC5jPTIyNjA9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yMzg0LVx0XHRcdFx0Z290byB4YV91bmxvY2tlZDtcbm1tL2todWdlcGFnZWQuYzoyMzg1Olx0XHRcdH0gZWxzZSBpZiAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKSB7XG5tbS9raHVnZXBhZ2VkLmMtMjM4Ni1cdFx0XHRcdHhhc191bmxvY2tfaXJxKFx1MDAyNnhhcyk7XG4tLVxubW0va2h1Z2VwYWdlZC5jLTI0MjUtXHRcdGlmICghaXNfc2htZW0gXHUwMDI2XHUwMDI2IChmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSB8fFxubW0va2h1Z2VwYWdlZC5jOjI0MjY6XHRcdFx0XHQgIGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkpIHtcbm1tL2todWdlcGFnZWQuYy0yNDI3LVx0XHRcdC8qXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMzg2PWludCBtZW1vcnlfZmFpbHVyZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjU4MS1cdCAqL1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyNTgyOlx0aWYgKCFmb2xpb190ZXN0X2xydShmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI1ODMtXHRcdGdvdG8gaWRlbnRpZnlfcGFnZV9zdGF0ZTtcbi0tXG5tbS9tZW1vcnkuYz00ODQ0PXZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTUwOTgtXHRcdFx0ZXhjbHVzaXZlID0gdHJ1ZTtcbm1tL21lbW9yeS5jOjUwOTk6XHRcdH0gZWxzZSBpZiAoZXhjbHVzaXZlIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykgXHUwMDI2XHUwMDI2XG5tbS9tZW1vcnkuYy01MTAwLVx0XHRcdCAgZGF0YV9yYWNlKHNpLVx1MDAzZWZsYWdzIFx1MDAyNiBTV1BfU1RBQkxFX1dSSVRFUykpIHtcbi0tXG5tbS9taWdyYXRlLmM9Nzc1PXZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL21pZ3JhdGUuYy04NDctXHQgKi9cbm1tL21pZ3JhdGUuYzo4NDg6XHRpZiAoZm9saW9fdGVzdF93cml0ZWJhY2sobmV3Zm9saW8pKVxubW0vbWlncmF0ZS5jLTg0OS1cdFx0Zm9saW9fZW5kX3dyaXRlYmFjayhuZXdmb2xpbyk7XG4tLVxubW0vbWlncmF0ZS5jPTkwNz1pbnQgbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpkc3QsXG4tLVxubW0vbWlncmF0ZS5jLTkwOS17XG5tbS9taWdyYXRlLmM6OTEwOlx0QlVHX09OKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKHNyYykpO1x0LyogV3JpdGViYWNrIG11c3QgYmUgY29tcGxldGUgKi9cbm1tL21pZ3JhdGUuYy05MTEtXHRyZXR1cm4gX19taWdyYXRlX2ZvbGlvKG1hcHBpbmcsIGRzdCwgc3JjLCBOVUxMLCBtb2RlKTtcbi0tXG5tbS9taWdyYXRlLmM9MTIxMz1zdGF0aWMgaW50IG1pZ3JhdGVfZm9saW9fdW5tYXAobmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbi0tXG5tbS9taWdyYXRlLmMtMTI2NS1cbm1tL21pZ3JhdGUuYzoxMjY2Olx0aWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKHNyYykpIHtcbm1tL21pZ3JhdGUuYy0xMjY3LVx0XHQvKlxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTEwOT1zdGF0aWMgdm9pZCBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTIzMy1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTIzNDpcdFx0QlVHX09OKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSk7XG5tbS9taWdyYXRlX2RldmljZS5jLTEyMzUtXG4tLVxubW0vcGFnZS13cml0ZWJhY2suYz0yMzY3PXN0YXRpYyBib29sIGZvbGlvX3ByZXBhcmVfd3JpdGViYWNrKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjM4NS1cbm1tL3BhZ2Utd3JpdGViYWNrLmM6MjM4NjpcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpIHtcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjM4Ny1cdFx0aWYgKHdiYy1cdTAwM2VzeW5jX21vZGUgPT0gV0JfU1lOQ19OT05FKVxuLS1cbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjM5MC1cdH1cbm1tL3BhZ2Utd3JpdGViYWNrLmM6MjM5MTpcdEJVR19PTihmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpO1xubW0vcGFnZS13cml0ZWJhY2suYy0yMzkyLVxuLS1cbm1tL3BhZ2Utd3JpdGViYWNrLmM9Mjk4OT12b2lkIF9fZm9saW9fc3RhcnRfd3JpdGViYWNrKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wga2VlcF93cml0ZSlcbi0tXG5tbS9wYWdlLXdyaXRlYmFjay5jLTI5OTQtXG5tbS9wYWdlLXdyaXRlYmFjay5jOjI5OTU6XHRWTV9CVUdfT05fRk9MSU8oZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pLCBmb2xpbyk7XG5tbS9wYWdlLXdyaXRlYmFjay5jLTI5OTYtXHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO1xuLS1cbm1tL3BhZ2Utd3JpdGViYWNrLmM9MzA1OD12b2lkIGZvbGlvX3dhaXRfd3JpdGViYWNrKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9wYWdlLXdyaXRlYmFjay5jLTMwNTkte1xubW0vcGFnZS13cml0ZWJhY2suYzozMDYwOlx0d2hpbGUgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkge1xubW0vcGFnZS13cml0ZWJhY2suYy0zMDYxLVx0XHR0cmFjZV9mb2xpb193YWl0X3dyaXRlYmFjayhmb2xpbywgZm9saW9fbWFwcGluZyhmb2xpbykpO1xuLS1cbm1tL3BhZ2Utd3JpdGViYWNrLmM9MzA4MD1pbnQgZm9saW9fd2FpdF93cml0ZWJhY2tfa2lsbGFibGUoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMzA4MS17XG5tbS9wYWdlLXdyaXRlYmFjay5jOjMwODI6XHR3aGlsZSAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKSB7XG5tbS9wYWdlLXdyaXRlYmFjay5jLTMwODMtXHRcdHRyYWNlX2ZvbGlvX3dhaXRfd3JpdGViYWNrKGZvbGlvLCBmb2xpb19tYXBwaW5nKGZvbGlvKSk7XG4tLVxubW0vcmVhZGFoZWFkLmM9NjUzPXZvaWQgcGFnZV9jYWNoZV9hc3luY19yYShzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxuLS1cbm1tL3JlYWRhaGVhZC5jLTY2Ny1cdCAqL1xubW0vcmVhZGFoZWFkLmM6NjY4Olx0aWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSlcbm1tL3JlYWRhaGVhZC5jLTY2OS1cdFx0cmV0dXJuO1xuLS1cbm1tL3NobWVtLmM9MTMyOD1zdGF0aWMgdm9pZCBzaG1lbV91bmRvX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBsc3RhcnQsIHVvZmZfdCBsZW5kLFxuLS1cbm1tL3NobWVtLmMtMTQ2NC1cdFx0XHRcdH1cbm1tL3NobWVtLmM6MTQ2NTpcdFx0XHRcdFZNX0JVR19PTl9GT0xJTyhmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksXG5tbS9zaG1lbS5jLTE0NjYtXHRcdFx0XHRcdFx0Zm9saW8pO1xuLS1cbm1tL3N3YXBfc3RhdGUuYz0yNTc9c3RhdGljIHZvaWQgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLS1cbm1tL3N3YXBfc3RhdGUuYy0yNjktXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pO1xubW0vc3dhcF9zdGF0ZS5jOjI3MDpcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksIGZvbGlvKTtcbm1tL3N3YXBfc3RhdGUuYy0yNzEtXG4tLVxubW0vc3dhcGZpbGUuYz0yMDc1PXN0YXRpYyBib29sIGZvbGlvX3N3YXBjYWNoZV9mcmVlYWJsZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3N3YXBmaWxlLmMtMjA4MC1cdFx0cmV0dXJuIGZhbHNlO1xubW0vc3dhcGZpbGUuYzoyMDgxOlx0aWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSlcbm1tL3N3YXBmaWxlLmMtMjA4Mi1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm1tL3N3YXBmaWxlLmM9MjQzNj1zdGF0aWMgaW50IHVudXNlX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcG1kX3QgKnBtZCxcbi0tXG5tbS9zd2FwZmlsZS5jLTI1MDYtXHRcdCAqL1xubW0vc3dhcGZpbGUuYzoyNTA3Olx0XHRWTV9CVUdfT05fRk9MSU8oZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pLCBmb2xpbyk7XG5tbS9zd2FwZmlsZS5jLTI1MDgtXHRcdGlmIChwdGVfc3dwX2V4Y2x1c2l2ZShvbGRfcHRlKSlcbi0tXG5tbS90cnVuY2F0ZS5jPTMyNT1sb25nIG1hcHBpbmdfZXZpY3RfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vdHJ1bmNhdGUuYy0zMjktXHRcdHJldHVybiAwO1xubW0vdHJ1bmNhdGUuYzozMzA6XHRpZiAoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgfHwgZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKVxubW0vdHJ1bmNhdGUuYy0zMzEtXHRcdHJldHVybiAwO1xuLS1cbm1tL3Ztc2Nhbi5jPTY0MT1zdGF0aWMgcGFnZW91dF90IHBhZ2VvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL3Ztc2Nhbi5jLTY4OS1cdC8qIHN5bmNocm9ub3VzIHdyaXRlPyAqL1xubW0vdm1zY2FuLmM6NjkwOlx0aWYgKCFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpXG5tbS92bXNjYW4uYy02OTEtXHRcdGZvbGlvX2NsZWFyX3JlY2xhaW0oZm9saW8pO1xuLS1cbm1tL3Ztc2Nhbi5jPTk1NT1zdGF0aWMgdm9pZCBmb2xpb19jaGVja19kaXJ0eV93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS92bXNjYW4uYy05NzQtXHQqZGlydHkgPSBmb2xpb190ZXN0X2RpcnR5KGZvbGlvKTtcbm1tL3Ztc2Nhbi5jOjk3NTpcdCp3cml0ZWJhY2sgPSBmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyk7XG5tbS92bXNjYW4uYy05NzYtXG4tLVxubW0vdm1zY2FuLmM9MTA3OD1zdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4tLVxubW0vdm1zY2FuLmMtMTIwNi1cdFx0ICovXG5tbS92bXNjYW4uYzoxMjA3Olx0XHRpZiAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKSB7XG5tbS92bXNjYW4uYy0xMjA4LVx0XHRcdG1hcHBpbmcgPSBmb2xpb19tYXBwaW5nKGZvbGlvKTtcbi0tXG5tbS92bXNjYW4uYy0xNDQwLVx0XHRcdFx0fVxubW0vdm1zY2FuLmM6MTQ0MTpcdFx0XHRcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpXG5tbS92bXNjYW4uYy0xNDQyLVx0XHRcdFx0XHRnb3RvIGtlZXA7XG4tLVxubW0vdm1zY2FuLmMtMTQ1Mi1cdFx0XHRcdGlmIChmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSB8fFxubW0vdm1zY2FuLmM6MTQ1MzpcdFx0XHRcdCAgICBmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpXG5tbS92bXNjYW4uYy0xNDU0LVx0XHRcdFx0XHRnb3RvIGtlZXBfbG9ja2VkO1xuLS1cbm1tL3Ztc2Nhbi5jPTQ5NjA9c3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vdm1zY2FuLmMtNTAxMy1cdFx0aWYgKCFza2lwX3JldHJ5IFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSBcdTAwMjZcdTAwMjZcbm1tL3Ztc2Nhbi5jOjUwMTQ6XHRcdCAgICAhZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpIHtcbm1tL3Ztc2Nhbi5jLTUwMTUtXHRcdFx0bGlzdF9tb3ZlKFx1MDAyNmZvbGlvLVx1MDAzZWxydSwgXHUwMDI2Y2xlYW4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTIyOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFdyaXRlYmFjayBNZWNoYW5pc20qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgd3JpdGViYWNrIHByb2Nlc3MsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRoZSBjb3JlIGZ1bmN0aW9ucyBpbnZvbHZlZC4gSSYjMzk7bSB0aGlua2luZyBhYm91dCBgX19mb2xpb19zdGFydF93cml0ZWJhY2tgLCBgZm9saW9fd2FpdF93cml0ZWJhY2tgLCBgZm9saW9fd2FpdF93cml0ZWJhY2tfa2lsbGFibGVgLCBhbmQgYGZvbGlvX2VuZF93cml0ZWJhY2tgIOKAkyB0aG9zZSBhcmUgdGhlIGtleSBwbGF5ZXJzIGhlcmUsIGFsbCBuZXN0bGVkIHdpdGhpbiBgbW0vcGFnZS13cml0ZWJhY2suY2AgYW5kIHBvdGVudGlhbGx5IHRvdWNoaW5nIGBtbS9maWxlbWFwLmNgIGFzIHdlbGwuCgpNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGJlZ2lubmluZyBhbmQgZW5kIHBvaW50cyBvZiB0aGUgd3JpdGViYWNrIGN5Y2xlLiBTbywgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBgX19mb2xpb19zdGFydF93cml0ZWJhY2tgIGFuZCBgZm9saW9fZW5kX3dyaXRlYmFja2AuIFRvIGdldCB0aGUgd2hvbGUgcGljdHVyZSwgSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYG1tL3BhZ2Utd3JpdGViYWNrLmNgIGFuZCBnbyBzdHJhaWdodCB0byBhcm91bmQgbGluZSAyOTg5LiBUaGF0JiMzOTtzIHVzdWFsbHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGNvbnRleHR1YWxpemUgdGhvc2UgZnVuY3Rpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3BhZ2Utd3JpdGViYWNrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI5ODU6XHRcbjI5ODY6XHRcdHJldHVybiByZXQ7XG4yOTg3Olx0fVxuMjk4ODpcdFxuMjk4OTpcdHZvaWQgX19mb2xpb19zdGFydF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBrZWVwX3dyaXRlKVxuMjk5MDpcdHtcbjI5OTE6XHRcdGxvbmcgbnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4yOTkyOlx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZvbGlvX21hcHBpbmcoZm9saW8pO1xuMjk5MzpcdFx0aW50IGFjY2Vzc19yZXQ7XG4yOTk0Olx0XG4yOTk1Olx0XHRWTV9CVUdfT05fRk9MSU8oZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pLCBmb2xpbyk7XG4yOTk2Olx0XHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO1xuMjk5NzpcdFxuMjk5ODpcdFx0aWYgKG1hcHBpbmcgXHUwMDI2XHUwMDI2IG1hcHBpbmdfdXNlX3dyaXRlYmFja190YWdzKG1hcHBpbmcpKSB7XG4yOTk5Olx0XHRcdFhBX1NUQVRFKHhhcywgXHUwMDI2bWFwcGluZy1cdTAwM2VpX3BhZ2VzLCBmb2xpby1cdTAwM2VpbmRleCk7XG4zMDAwOlx0XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLVx1MDAzZWhvc3Q7XG4zMDAxOlx0XHRcdHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YjtcbjMwMDI6XHRcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbjMwMDM6XHRcdFx0Ym9vbCBvbl93Ymxpc3Q7XG4zMDA0Olx0XG4zMDA1Olx0XHRcdHhhc19sb2NrX2lycXNhdmUoXHUwMDI2eGFzLCBmbGFncyk7XG4zMDA2Olx0XHRcdHhhc19sb2FkKFx1MDAyNnhhcyk7XG4zMDA3Olx0XHRcdGZvbGlvX3Rlc3Rfc2V0X3dyaXRlYmFjayhmb2xpbyk7XG4zMDA4Olx0XG4zMDA5Olx0XHRcdG9uX3dibGlzdCA9IG1hcHBpbmdfdGFnZ2VkKG1hcHBpbmcsIFBBR0VDQUNIRV9UQUdfV1JJVEVCQUNLKTtcbjMwMTA6XHRcbjMwMTE6XHRcdFx0eGFzX3NldF9tYXJrKFx1MDAyNnhhcywgUEFHRUNBQ0hFX1RBR19XUklURUJBQ0spO1xuMzAxMjpcdFx0XHR3YiA9IGlub2RlX3RvX3diKGlub2RlKTtcbjMwMTM6XHRcdFx0d2Jfc3RhdF9tb2Qod2IsIFdCX1dSSVRFQkFDSywgbnIpO1xuMzAxNDpcdFx0XHRpZiAoIW9uX3dibGlzdCkge1xuMzAxNTpcdFx0XHRcdHdiX2lub2RlX3dyaXRlYmFja19zdGFydCh3Yik7XG4zMDE2Olx0XHRcdFx0LypcbjMwMTc6XHRcdFx0XHQgKiBXZSBjYW4gY29tZSB0aHJvdWdoIGhlcmUgd2hlbiBzd2FwcGluZyBhbm9ueW1vdXNcbjMwMTg6XHRcdFx0XHQgKiBmb2xpb3MsIHNvIHdlIGRvbiYjMzk7dCBuZWNlc3NhcmlseSBoYXZlIGFuIGlub2RlIHRvXG4zMDE5Olx0XHRcdFx0ICogdHJhY2sgZm9yIHN5bmMuXG4zMDIwOlx0XHRcdFx0ICovXG4zMDIxOlx0XHRcdFx0aWYgKG1hcHBpbmctXHUwMDNlaG9zdClcbjMwMjI6XHRcdFx0XHRcdHNiX21hcmtfaW5vZGVfd3JpdGViYWNrKG1hcHBpbmctXHUwMDNlaG9zdCk7XG4zMDIzOlx0XHRcdH1cbjMwMjQ6XHRcbjMwMjU6XHRcdFx0aWYgKCFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSlcbjMwMjY6XHRcdFx0XHR4YXNfY2xlYXJfbWFyayhcdTAwMjZ4YXMsIFBBR0VDQUNIRV9UQUdfRElSVFkpO1xuMzAyNzpcdFx0XHRpZiAoIWtlZXBfd3JpdGUpXG4zMDI4Olx0XHRcdFx0eGFzX2NsZWFyX21hcmsoXHUwMDI2eGFzLCBQQUdFQ0FDSEVfVEFHX1RPV1JJVEUpO1xuMzAyOTpcdFx0XHR4YXNfdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2eGFzLCBmbGFncyk7XG4zMDMwOlx0XHR9IGVsc2Uge1xuMzAzMTpcdFx0XHRmb2xpb190ZXN0X3NldF93cml0ZWJhY2soZm9saW8pO1xuMzAzMjpcdFx0fVxuMzAzMzpcdFxuMzAzNDpcdFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9XUklURUJBQ0ssIG5yKTtcbjMwMzU6XHRcdHpvbmVfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX1pPTkVfV1JJVEVfUEVORElORywgbnIpO1xuMzAzNjpcdFxuMzAzNzpcdFx0YWNjZXNzX3JldCA9IGFyY2hfbWFrZV9mb2xpb19hY2Nlc3NpYmxlKGZvbGlvKTtcbjMwMzg6XHRcdC8qXG4zMDM5Olx0XHQgKiBJZiB3cml0ZWJhY2sgaGFzIGJlZW4gdHJpZ2dlcmVkIG9uIGEgcGFnZSB0aGF0IGNhbm5vdCBiZSBtYWRlXG4zMDQwOlx0XHQgKiBhY2Nlc3NpYmxlLCBpdCBpcyB0b28gbGF0ZSB0byByZWNvdmVyIGhlcmUuXG4zMDQxOlx0XHQgKi9cbjMwNDI6XHRcdFZNX0JVR19PTl9GT0xJTyhhY2Nlc3NfcmV0ICE9IDAsIGZvbGlvKTtcbjMwNDM6XHR9XG4zMDQ0Olx0RVhQT1JUX1NZTUJPTChfX2ZvbGlvX3N0YXJ0X3dyaXRlYmFjayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNTIxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW52ZXN0aWdhdGlvbiBvZiB0aGUgV3JpdGViYWNrIE1lY2hhbmlzbSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYF9fZm9saW9fc3RhcnRfd3JpdGViYWNrYCwgYW5kIGl0JiMzOTtzIGNhbGxpbmcgYm90aCBgZm9saW9fdGVzdF93cml0ZWJhY2tgIGFuZCBgZm9saW9fdGVzdF9zZXRfd3JpdGViYWNrYC4gSW50ZXJlc3RpbmcuIE15IGd1dCBmZWVsaW5nIHRlbGxzIG1lIHRvIGRlbHZlIGRlZXBlciBpbnRvIGhvdyB0aGlzIHdyaXRlYmFjayBwcm9jZXNzIGlzIGNvbnRyb2xsZWQsIGFuZCBob3cgaXQgaXMgcHJvdGVjdGVkIGFnYWluc3QgY29uY3VycmVudCBhY2Nlc3MuIExldCYjMzk7cyBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgZnVsbCBwaWN0dXJlLgoKQmVmb3JlIEkganVtcCB0byBjb25jbHVzaW9ucywgSSBuZWVkIHRvIGNoZWNrIGhvdyBgZm9saW9fd2FpdF93cml0ZWJhY2tgIGFuZCBgZm9saW9fZW5kX3dyaXRlYmFja2AgYXJlIHVzZWQgaW4gdGhpcyBjb250ZXh0LiBUaGVzZSBjb3VsZCBiZSBrZXkgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMsIHNpZ25hbGxpbmcgd2hlbiBhIHdyaXRlYmFjayBvcGVyYXRpb24gaGFzIHN0YXJ0ZWQgb3IgZmluaXNoZWQuIFRoZXkgcHJvYmFibHkgY29udHJvbCB3aGVuIGEgcGFnZSBpcyB2aXNpYmxlIHRvIG90aGVycywgYW5kIHdoZW4gaXQgaXMgYmVpbmcgd29ya2VkIG9uLgoKVG8gdHJ1bHkgdW5kZXJzdGFuZCB0aGUgaW50ZXJuYWwgbWVjaGFuaWNzLCBJIHNob3VsZCBwdWxsIHVwIGBtbS9maWxlbWFwLmNgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSAxNjU2LiBUaGF0IHNob3VsZCBiZSByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhlIGZpbGVtYXAgY29kZS4gRnJvbSBtZW1vcnksIHRoYXQgYXJlYSBoYW5kbGVzIHRoZSBjb3JlIHdyaXRlYmFjayBsb2dpYywgc28gdGhhdCB3aWxsIGxldCBtZSBjaGVjayBleGFjdGx5IGhvdyBhbGwgdGhlc2UgZnVuY3Rpb25zIGFyZSB3b3JraW5nIHRvZ2V0aGVyLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBpbXBsZW1lbnRhdGlvbiwgb3IgYXQgbGVhc3QgdGhlIGNhbGxlcnMsIG9mIGBmb2xpb19zdGFydF93cml0ZWJhY2tgLCBgZm9saW9fZW5kX3dyaXRlYmFja2AsIGV0Yy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9maWxlbWFwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2NTU6XHQgKi9cbjE2NTY6XHR2b2lkIGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuMTY1NzpcdHtcbjE2NTg6XHRcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pLCBmb2xpbyk7XG4xNjU5Olx0XG4xNjYwOlx0XHQvKlxuMTY2MTpcdFx0ICogZm9saW9fdGVzdF9jbGVhcl9yZWNsYWltKCkgY291bGQgYmUgdXNlZCBoZXJlIGJ1dCBpdCBpcyBhblxuMTY2MjpcdFx0ICogYXRvbWljIG9wZXJhdGlvbiBhbmQgb3ZlcmtpbGwgaW4gdGhpcyBwYXJ0aWN1bGFyIGNhc2UuIEZhaWxpbmdcbjE2NjM6XHRcdCAqIHRvIHNodWZmbGUgYSBmb2xpbyBtYXJrZWQgZm9yIGltbWVkaWF0ZSByZWNsYWltIGlzIHRvbyBtaWxkXG4xNjY0Olx0XHQgKiBhIGdhaW4gdG8ganVzdGlmeSB0YWtpbmcgYW4gYXRvbWljIG9wZXJhdGlvbiBwZW5hbHR5IGF0IHRoZVxuMTY2NTpcdFx0ICogZW5kIG9mIGV2ZXJ5IGZvbGlvIHdyaXRlYmFjay5cbjE2NjY6XHRcdCAqL1xuMTY2NzpcdFx0aWYgKGZvbGlvX3Rlc3RfcmVjbGFpbShmb2xpbykpIHtcbjE2Njg6XHRcdFx0Zm9saW9fY2xlYXJfcmVjbGFpbShmb2xpbyk7XG4xNjY5Olx0XHRcdGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZShmb2xpbyk7XG4xNjcwOlx0XHR9XG4xNjcxOlx0XG4xNjcyOlx0XHRpZiAoX19mb2xpb19lbmRfd3JpdGViYWNrKGZvbGlvKSlcbjE2NzM6XHRcdFx0Zm9saW9fd2FrZV9iaXQoZm9saW8sIFBHX3dyaXRlYmFjayk7XG4xNjc0Olx0XG4xNjc1Olx0XHRhY2N0X3JlY2xhaW1fd3JpdGViYWNrKGZvbGlvKTtcbjE2NzY6XHR9XG4xNjc3Olx0RVhQT1JUX1NZTUJPTF9HUEwoZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKTtcbjE2Nzg6XHRcbjE2Nzk6XHQvKipcbjE2ODA6XHQgKiBmb2xpb19lbmRfd3JpdGViYWNrIC0gRW5kIHdyaXRlYmFjayBhZ2FpbnN0IGEgZm9saW8uXG4xNjgxOlx0ICogQGZvbGlvOiBUaGUgZm9saW8uXG4xNjgyOlx0ICpcbjE2ODM6XHQgKiBUaGUgZm9saW8gbXVzdCBhY3R1YWxseSBiZSB1bmRlciB3cml0ZWJhY2suXG4xNjg0Olx0ICpcbjE2ODU6XHQgKiBDb250ZXh0OiBNYXkgYmUgY2FsbGVkIGZyb20gcHJvY2VzcyBvciBpbnRlcnJ1cHQgY29udGV4dC5cbjE2ODY6XHQgKi9cbjE2ODc6XHR2b2lkIGZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbylcbjE2ODg6XHR7XG4xNjg5Olx0XHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSwgZm9saW8pO1xuMTY5MDpcdFxuMTY5MTpcdFx0LypcbjE2OTI6XHRcdCAqIFdyaXRlYmFjayBkb2VzIG5vdCBob2xkIGEgZm9saW8gcmVmZXJlbmNlIG9mIGl0cyBvd24sIHJlbHlpbmdcbjE2OTM6XHRcdCAqIG9uIHRydW5jYXRpb24gdG8gd2FpdCBmb3IgdGhlIGNsZWFyaW5nIG9mIFBHX3dyaXRlYmFjay5cbjE2OTQ6XHRcdCAqIEJ1dCBoZXJlIHdlIG11c3QgbWFrZSBzdXJlIHRoYXQgdGhlIGZvbGlvIGlzIG5vdCBmcmVlZCBhbmRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM1MTgKCQkJCQkJCW91dHB1dDogMTQ0CgkJCQkJCQl0aG91Z2h0czogODgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzIFN5bWJvbCBTZWxlY3Rpb24gZm9yIEZvbGlvIFdyaXRlYmFjayBGbGFnIENvbnZlcnNpb24qKgoKT2theSwgbGV0JiMzOTtzIG5haWwgZG93biB0aGVzZSBmb2N1cyBzeW1ib2xzLiBGaXJzdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBhY2NpZGVudGFsbHkgZmxhZ2dpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgdGhhdCB3aWxsIGRpbHV0ZSB0aGUgZnV6emluZyBlZmZvcnQuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgd3JpdGViYWNrLXJlbGF0ZWQgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHk6IGBfX2ZvbGlvX3N0YXJ0X3dyaXRlYmFja2AsIGBmb2xpb19lbmRfd3JpdGViYWNrYCwgYGZvbGlvX3dhaXRfd3JpdGViYWNrYCwgYW5kIGBmaWxlbWFwX3JhbmdlX2hhc193cml0ZWJhY2tgLiBBcmUgYW55IG9mIHRoZXNlIGdlbmVyaWMgZW5vdWdoIHRvIGJlIHByb2JsZW1hdGljPyBMZXQmIzM5O3MgcXVpY2tseSByZXZpZXcgdGhlIEZvY3VzU3ltYm9scyBndWlkZWxpbmVzIHRvIGJlIHN1cmUuIEl0IGxvb2tzIGxpa2UgdGhlIGdvYWwgaGVyZSBpcyB0byBzcGVjaWZpY2FsbHkgdGFyZ2V0IGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSBjb3JlIGxvZ2ljIGJlaW5nIGFsdGVyZWQsIHJhdGhlciB0aGFuIGdlbmVyYWwgc3lzdGVtLWxldmVsIGNhbGxzLgoKTm93LCBjb25zaWRlcmluZyB0aG9zZSwgYF9fZm9saW9fc3RhcnRfd3JpdGViYWNrYCwgYGZvbGlvX2VuZF93cml0ZWJhY2tgLCBgZm9saW9fd2FpdF93cml0ZWJhY2tgLCBhbmQgYGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZGAsIGFyZSBhbGwgcHJldHR5IHNwZWNpZmljIHRvIGZvbGlvIHdyaXRlYmFjayBoYW5kbGluZy4gVGhleSBhcmVuJiMzOTt0IG1lbW9yeSBhbGxvY2F0b3JzIG9yIHBhZ2UgZmF1bHQgaGFuZGxlcnMsIHdoaWNoIGlzIGdvb2QuIFRoZXkgc2VlbSBsaWtlIGdvb2QgY2FuZGlkYXRlcy4gSSBzaG91bGQgYWxzbyBjaGVjayBgZm9saW9fcHJlcGFyZV93cml0ZWJhY2tgLCBhbHRob3VnaCB0aGF0IGZ1bmN0aW9uIGlzIGRlZmluZWQgaW4gYG1tL3BhZ2Utd3JpdGViYWNrLmNgLiBBbHNvIGBmaWxlbWFwX3JlbGVhc2VfZm9saW9gIGZyb20gYG1tL2ZpbGVtYXAuY2AuCgpOZXh0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IGNvbmZpZyBkZXBlbmRlbmNpZXMuIEkmIzM5O20gZm9jdXNpbmcgb24gYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYCBhbmQgd3JpdGViYWNrIHJlbGF0ZWQgY29kZS4gQXJlIHRoZXJlIGFueSB1bnVzdWFsIEtjb25maWcgcmVxdWlyZW1lbnRzPyBOb3BlLiBTdGFuZGFyZCBMaW51eCBjb25maWd1cmF0aW9ucyBoYXZlIGBGT0xJT19IRUFEX1BBR0VgIGFuZCBgUEdfd3JpdGViYWNrYC4gSSBxdWlja2x5IGRvdWJsZS1jaGVja2VkIHRoZSBjb25maWdzIGFuZCBjb25maXJtIHRoYXQgYEVuYWJsZUNvbmZpZ3M6IFtdYCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSB3b3VsZCBleHBlY3QgZm9yIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2UuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgcmVjb25maXJtIG15IGNob3NlbiBmb2N1cyBzeW1ib2xzLiBJIGhhdmU6IGBfX2ZvbGlvX3N0YXJ0X3dyaXRlYmFja2AsIGBmb2xpb19lbmRfd3JpdGViYWNrYCwgYGZvbGlvX3dhaXRfd3JpdGViYWNrYCwgYW5kIGBmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmRgLiBUaGVzZSBzZWVtIHNwb3Qgb24uIEkganVzdCBxdWlja2x5IGNvbmZpcm1lZCB0aGF0IHRoZXNlIGFyZSBhbGwgZXhwb3J0ZWQgc3ltYm9scywgcHJlc2VudCBpbiB0aGUgc3ltYm9sIHRhYmxlcy4KCkZpbmFsbHksIGxldCYjMzk7cyBkbyBhIHF1aWNrIG1lbnRhbCByZXZpZXcgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nOiB0aGUgcGF0Y2ggaXMgY29udmVydGluZyB0aGUgYFBHX3dyaXRlYmFja2AgZmxhZyBkZWZpbml0aW9ucyBmcm9tIGxlZ2FjeSBtYWNyb3MgdG8gYEZPTElPX1RFU1RfRkxBR2AgYW5kIGBGT0xJT19URVNUX1NFVF9GTEFHYC4gSXQmIzM5O3MgbW9kaWZ5aW5nIHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZvbGlvIGZsYWdzIGxvZ2ljLiBXb3J0aEZ1enppbmcgaXMgdHJ1ZS4gRW5hYmxlQ29uZmlncyBpcyBlbXB0eS4gQW5kLCBtb3N0IGltcG9ydGFudGx5LCB0aGUgRm9jdXNTeW1ib2xzIHRhcmdldCB0aGUga2V5IHdyaXRlYmFjayBsaWZlY3ljbGUgaGVscGVycyB0aGF0IHVzZSB0aGVzZSBtYWNyb3MuCgpPa2F5LCBldmVyeXRoaW5nIGNoZWNrcyBvdXQuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2ZvbGlvX3N0YXJ0X3dyaXRlYmFjayYjMzQ7LAogICAgJiMzNDtmb2xpb19lbmRfd3JpdGViYWNrJiMzNDssCiAgICAmIzM0O2ZvbGlvX3dhaXRfd3JpdGViYWNrJiMzNDssCiAgICAmIzM0O2ZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHRoZSB3cml0ZWJhY2sgZm9saW8gZmxhZyBkZWZpbml0aW9ucyBpbiBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCBmcm9tIGxlZ2FjeSBwYWdlLWZsYWcgbWFjcm9zIChURVNUUEFHRUZMQUcsIFRFU1RTQ0ZMQUcpIHRvIHRoZSBtb2Rlcm4gZm9saW8gZmxhZyBtYWNyb3MgKEZPTElPX1RFU1RfRkxBRywgRk9MSU9fVEVTVF9TRVRfRkxBRykuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGludm9sdmVkIGluIGZvbGlvIHdyaXRlYmFjayBzdGF0ZSB0cmFja2luZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2ZvbGlvX3N0YXJ0X3dyaXRlYmFjayYjMzQ7LAogICAgJiMzNDtmb2xpb19lbmRfd3JpdGViYWNrJiMzNDssCiAgICAmIzM0O2ZvbGlvX3dhaXRfd3JpdGViYWNrJiMzNDssCiAgICAmIzM0O2ZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHRoZSB3cml0ZWJhY2sgZm9saW8gZmxhZyBkZWZpbml0aW9ucyBpbiBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCBmcm9tIGxlZ2FjeSBwYWdlLWZsYWcgbWFjcm9zIChURVNUUEFHRUZMQUcsIFRFU1RTQ0ZMQUcpIHRvIHRoZSBtb2Rlcm4gZm9saW8gZmxhZyBtYWNyb3MgKEZPTElPX1RFU1RfRkxBRywgRk9MSU9fVEVTVF9TRVRfRkxBRykuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGludm9sdmVkIGluIGZvbGlvIHdyaXRlYmFjayBzdGF0ZSB0cmFja2luZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6Mzg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnZlcnRzIHRoZSBwYWdlIGZsYWcgZGVmaW5pdGlvbnMgZm9yIFBHX3dyaXRlYmFjayBmcm9tIGxlZ2FjeSBwYWdlLWJhc2VkIG1hY3JvcyAoVEVTVFBBR0VGTEFHIC8gVEVTVFNDRkxBRykgdG8gZm9saW8tYmFzZWQgbWFjcm9zIChGT0xJT19URVNUX0ZMQUcgLyBGT0xJT19URVNUX1NFVF9GTEFHKS4gXG5cblRoaXMgaXMgYSB0eXBlLXNhZmUgbWFjcm8gcmVmYWN0b3JpbmcgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgb3BlcmF0ZXMgcHVyZWx5IG9uIHBhZ2UvZm9saW8gYml0IGZsYWdzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIGFsbG9jYXRlLCBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzdHJ1Y3QgcGFkZGluZywgdXNlci1jb3B5IGJ1ZmZlcnMsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFueSBtZW1vcnkgc2FmZXR5IGlzc3VlcyB0aGF0IGNvdWxkIGFyaXNlIGZyb20gaW52YWxpZCBmb2xpby9wYWdlIHJlZmVyZW5jZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBwYWdlIGFjY2VzcykgYXJlIGFscmVhZHkgY292ZXJlZCBieSBLQVNBTiBhbmQgcGFnZSBmbGFnIGRlYnVnIGNoZWNrcyAoVk1fQlVHX09OX1BHRkxBR1MpLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVhayByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzQyMmVlZTNlN2Y1MjQyZmRkMmE3MTI1NzUyZGEwYWNlNjdkZDE3YwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMTY6Mzc6MTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCmluZGV4IDNkYzc5YzBjNWFkZjAuLjg2ZGQwNDcwZGExMTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCkBAIC01ODgsOCAmIzQzOzU4OCw4IEBAIEZPTElPX0ZMQUcob3duZXJfMiwgRk9MSU9fSEVBRF9QQUdFKQogICogT25seSB0ZXN0LWFuZC1zZXQgZXhpc3QgZm9yIFBHX3dyaXRlYmFjay4gIFRoZSB1bmNvbmRpdGlvbmFsIG9wZXJhdG9ycyBhcmUKICAqIHJpc2t5OiB0aGV5IGJ5cGFzcyBwYWdlIGFjY291bnRpbmcuCiAgKi8KLVRFU1RQQUdFRkxBRyhXcml0ZWJhY2ssIHdyaXRlYmFjaywgUEZfTk9fVEFJTCkKLQlURVNUU0NGTEFHKFdyaXRlYmFjaywgd3JpdGViYWNrLCBQRl9OT19UQUlMKQomIzQzO0ZPTElPX1RFU1RfRkxBRyh3cml0ZWJhY2ssIEZPTElPX0hFQURfUEFHRSkKJiM0MzsJRk9MSU9fVEVTVF9TRVRfRkxBRyh3cml0ZWJhY2ssIEZPTElPX0hFQURfUEFHRSkKIEZPTElPX0ZMQUcobWFwcGVkdG9kaXNrLCBGT0xJT19IRUFEX1BBR0UpCiAKIC8qIFBHX3JlYWRhaGVhZCBpcyBvbmx5IHVzZWQgZm9yIHJlYWRzOyBQR19yZWNsYWltIGlzIG9ubHkgZm9yIHdyaXRlcyAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEzOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhZ2UgRmxhZyBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBzZWUgd2UmIzM5O3JlIG1vZGlmeWluZyBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgLiBTcGVjaWZpY2FsbHksIHRoZSBkaWZmIGZvY3VzZXMgb24gY2hhbmdlcyBhcm91bmQgdGhlIGBQR193cml0ZWJhY2tgIGZsYWcsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgdXNpbmcgYFRFU1RQQUdFRkxBR2AgYW5kIGBURVNUU0NGTEFHYCBmb3IgdGhlIHdyaXRlYmFjayBmbGFnLCB3aGljaCBoYXMgYSBzcGVjaWZpYyBjb21tZW50IGFib3V0IGJlaW5nIHJpc2t5IGJlY2F1c2UgdGhleSBieXBhc3MgcGFnZSBhY2NvdW50aW5nLCBpbXBseWluZyB0aGF0IHRoZSBwYXRjaCBpcyBtZWFudCB0byBhZGRyZXNzIHRoaXMuIE5vdywgaXQgbG9va3MgbGlrZSB0aGVzZSBhcmUgYmVpbmcgcmVwbGFjZWQgd2l0aCBgRk9MSU9fVEVTVF9GTEFHYCBhbmQgYEZPTElPX1RFU1RfU0VUX0ZMQUdgIHdpdGggdGhlIGBGT0xJT19IRUFEX1BBR0VgIHBhcmFtZXRlci4gVGhpcyBsaWtlbHkgc2lnbmlmaWVzIGEgbW92ZSB0b3dhcmQgYSBtb3JlIGZvbGlvLWNlbnRyaWMgYXBwcm9hY2gsIHdoaWNoIGlzIHNvbWV0aGluZyBJJiMzOTt2ZSBiZWVuIGtlZXBpbmcgYW4gZXllIG9uLgoKTXkgbmV4dCBzdGVwIHdvdWxkIGJlIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGRlZmluaXRpb25zIG9mIGBURVNUUEFHRUZMQUdgLCBgVEVTVFNDRkxBR2AsIGBGT0xJT19URVNUX0ZMQUdgLCBhbmQgYEZPTElPX1RFU1RfU0VUX0ZMQUdgLCB3aGljaCBzaG91bGQgYmUgZGVmaW5lZCBlYXJsaWVyIGluIHRoaXMgc2FtZSBpbmNsdWRlIGZpbGUgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBjaGFuZ2VzLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgdGhlIGZvbGlvLWJhc2VkIHZlcnNpb25zIGhhbmRsZSB0aGUgd3JpdGViYWNrIGZsYWcgYW5kIHdoZXRoZXIgdGhleSBhZGRyZXNzIHRoZSBzdGF0ZWQgY29uY2VybnMgYWJvdXQgcGFnZSBhY2NvdW50aW5nLiBUaGlzIGlzIGxpa2VseSBhbiBpbXBvcnRhbnQgcGllY2Ugb2YgdGhlIHB1enpsZSB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZSBwYXRjaCBhbmQgd2hldGhlciBpdCYjMzk7cyB0aGUgcmlnaHQgZGlyZWN0aW9uIGZvciB0aGUga2VybmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NzA6XHRcdF9fQ0xFQVJQQUdFRkxBRyhSZXNlcnZlZCwgcmVzZXJ2ZWQsIFBGX05PX0NPTVBPVU5EKVxuIDU3MTpcdFx0X19TRVRQQUdFRkxBRyhSZXNlcnZlZCwgcmVzZXJ2ZWQsIFBGX05PX0NPTVBPVU5EKVxuIDU3MjpcdEZPTElPX0ZMQUcoc3dhcGJhY2tlZCwgRk9MSU9fSEVBRF9QQUdFKVxuIDU3MzpcdFx0X19GT0xJT19DTEVBUl9GTEFHKHN3YXBiYWNrZWQsIEZPTElPX0hFQURfUEFHRSlcbiA1NzQ6XHRcdF9fRk9MSU9fU0VUX0ZMQUcoc3dhcGJhY2tlZCwgRk9MSU9fSEVBRF9QQUdFKVxuIDU3NTpcdFxuIDU3NjpcdC8qXG4gNTc3Olx0ICogUHJpdmF0ZSBwYWdlIG1hcmtpbmdzIHRoYXQgbWF5IGJlIHVzZWQgYnkgdGhlIGZpbGVzeXN0ZW0gdGhhdCBvd25zIHRoZSBwYWdlXG4gNTc4Olx0ICogZm9yIGl0cyBvd24gcHVycG9zZXMuXG4gNTc5Olx0ICogLSBQR19wcml2YXRlIGFuZCBQR19wcml2YXRlXzIgY2F1c2UgcmVsZWFzZV9mb2xpbygpIGFuZCBjbyB0byBiZSBpbnZva2VkXG4gNTgwOlx0ICovXG4gNTgxOlx0UEFHRUZMQUcoUHJpdmF0ZSwgcHJpdmF0ZSwgUEZfQU5ZKVxuIDU4MjpcdEZPTElPX0ZMQUcocHJpdmF0ZV8yLCBGT0xJT19IRUFEX1BBR0UpXG4gNTgzOlx0XG4gNTg0Olx0Lyogb3duZXJfMiBjYW4gYmUgc2V0IG9uIHRhaWwgcGFnZXMgZm9yIGFub24gbWVtb3J5ICovXG4gNTg1Olx0Rk9MSU9fRkxBRyhvd25lcl8yLCBGT0xJT19IRUFEX1BBR0UpXG4gNTg2Olx0XG4gNTg3Olx0LypcbiA1ODg6XHQgKiBPbmx5IHRlc3QtYW5kLXNldCBleGlzdCBmb3IgUEdfd3JpdGViYWNrLiAgVGhlIHVuY29uZGl0aW9uYWwgb3BlcmF0b3JzIGFyZVxuIDU4OTpcdCAqIHJpc2t5OiB0aGV5IGJ5cGFzcyBwYWdlIGFjY291bnRpbmcuXG4gNTkwOlx0ICovXG4gNTkxOlx0Rk9MSU9fVEVTVF9GTEFHKHdyaXRlYmFjaywgRk9MSU9fSEVBRF9QQUdFKVxuIDU5MjpcdFx0Rk9MSU9fVEVTVF9TRVRfRkxBRyh3cml0ZWJhY2ssIEZPTElPX0hFQURfUEFHRSlcbiA1OTM6XHRGT0xJT19GTEFHKG1hcHBlZHRvZGlzaywgRk9MSU9fSEVBRF9QQUdFKVxuIDU5NDpcdFxuIDU5NTpcdC8qIFBHX3JlYWRhaGVhZCBpcyBvbmx5IHVzZWQgZm9yIHJlYWRzOyBQR19yZWNsYWltIGlzIG9ubHkgZm9yIHdyaXRlcyAqL1xuIDU5NjpcdEZPTElPX0ZMQUcocmVjbGFpbSwgRk9MSU9fSEVBRF9QQUdFKVxuIDU5NzpcdEZPTElPX0ZMQUcocmVhZGFoZWFkLCBGT0xJT19IRUFEX1BBR0UpXG4gNTk4Olx0XHRGT0xJT19URVNUX0NMRUFSX0ZMQUcocmVhZGFoZWFkLCBGT0xJT19IRUFEX1BBR0UpXG4gNTk5Olx0XG4gNjAwOlx0Rk9MSU9fRkxBRyhkcm9wYmVoaW5kLCBGT0xJT19IRUFEX1BBR0UpXG4gNjAxOlx0XHRGT0xJT19URVNUX0NMRUFSX0ZMQUcoZHJvcGJlaGluZCwgRk9MSU9fSEVBRF9QQUdFKVxuIDYwMjpcdFx0X19GT0xJT19TRVRfRkxBRyhkcm9wYmVoaW5kLCBGT0xJT19IRUFEX1BBR0UpXG4gNjAzOlx0XG4gNjA0Olx0I2lmZGVmIENPTkZJR19ISUdITUVNXG4gNjA1Olx0LypcbiA2MDY6XHQgKiBNdXN0IHVzZSBhIG1hY3JvIGhlcmUgZHVlIHRvIGhlYWRlciBkZXBlbmRlbmN5IGlzc3Vlcy4gcGFnZV96b25lKCkgaXMgbm90XG4gNjA3Olx0ICogYXZhaWxhYmxlIGF0IHRoaXMgcG9pbnQuXG4gNjA4Olx0ICovXG4gNjA5Olx0I2RlZmluZSBQYWdlSGlnaE1lbShfX3ApIGlzX2hpZ2htZW1faWR4KHBhZ2Vfem9uZW51bShfX3ApKVxuIDYxMDpcdCNkZWZpbmUgZm9saW9fdGVzdF9oaWdobWVtKF9fZilcdGlzX2hpZ2htZW1faWR4KGZvbGlvX3pvbmVudW0oX19mKSlcbiA2MTE6XHQjZWxzZVxuIDYxMjpcdFBBR0VGTEFHX0ZBTFNFKEhpZ2hNZW0sIGhpZ2htZW0pXG4gNjEzOlx0I2VuZGlmXG4gNjE0Olx0I2RlZmluZSBQaHlzSGlnaE1lbShfX3ApIChQYWdlSGlnaE1lbShwaHlzX3RvX3BhZ2UoX19wKSkpXG4gNjE1Olx0XG4gNjE2Olx0LyogRG9lcyBrbWFwX2xvY2FsX2ZvbGlvKCkgb25seSBhbGxvdyBhY2Nlc3MgdG8gb25lIHBhZ2Ugb2YgdGhlIGZvbGlvPyAqL1xuIDYxNzpcdCNpZmRlZiBDT05GSUdfREVCVUdfS01BUF9MT0NBTF9GT1JDRV9NQVBcbiA2MTg6XHQjZGVmaW5lIGZvbGlvX3Rlc3RfcGFydGlhbF9rbWFwKGYpXHR0cnVlXG4gNjE5Olx0I2Vsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzczNwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlc2UgZmxhZ3MgYXJlIGRvaW5nIGluIHRoZSBrZXJuZWwsIHNvIGZpcnN0IHRoaW5ncyBmaXJzdDogSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIHRoZSBkZWZpbml0aW9ucyBmb3IgYFRFU1RQQUdFRkxBR2AsIGBURVNUU0NGTEFHYCwgYEZPTElPX1RFU1RfRkxBR2AsIGFuZCBgRk9MSU9fVEVTVF9TRVRfRkxBR2AuIEkmIzM5O2xsIGJlIGNoZWNraW5nIGBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaGAg4oCTIHRoYXQmIzM5O3MgdGhlIG9idmlvdXMgcGxhY2UgdG8gZmluZCB0aGVtLCBnaXZlbiB0aGUgZmlsZW5hbWVzIEkgaGF2ZS4gSSBleHBlY3QgdGhhdCBJJiMzOTtsbCBmaW5kIHRoZXNlIGFyZSBzb21lIGtpbmQgb2YgdGVzdCBvciBkZWJ1Z2dpbmcgZmxhZ3MgcmVsYXRlZCB0byBwYWdlIG1hbmFnZW1lbnQgb3IgZm9saW9zLCBidXQgSSBuZWVkIHRoZSBwcmVjaXNlIGRlZmluaXRpb25zIHRvIHVuZGVyc3RhbmQgdGhlaXIgc3BlY2lmaWMgcHVycG9zZSBhbmQgaG93IHRoZXkmIzM5O3JlIGludGVuZGVkIHRvIGJlIHVzZWQuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIEZPTElPX1RFU1RfRkxBRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTM1MD1zdGF0aWMgdW5zaWduZWQgbG9uZyAqZm9saW9fZmxhZ3Moc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgbilcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC00MDktICovXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo0MTA6I2RlZmluZSBGT0xJT19URVNUX0ZMQUcobmFtZSwgcGFnZSlcdFx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTQxMS1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgZm9saW9fdGVzdF8jI25hbWUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykgXFxcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD00NzU9c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgVGVzdENsZWFyUGFnZSMjdW5hbWUoc3RydWN0IHBhZ2UgKnBhZ2UpXHRcXFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTQ5MS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjQ5MjojZGVmaW5lIEZPTElPX1RFU1RfRkxBR19GQUxTRShuYW1lKVx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNDkzLXN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb190ZXN0XyMjbmFtZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XHRcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjE1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgcGFnZS1mbGFncy5oYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbiBvbiBsaW5lcyAzODAgdGhyb3VnaCA0NTAgd2l0aGluIGBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaGAuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyBob3cgdGhlIGtlcm5lbCBkZWZpbmVzIGFuZCBtYW5pcHVsYXRlcyBwYWdlIGZsYWdzIGluIHRoaXMgcmVnaW9uIG9mIHRoZSBoZWFkZXIgZmlsZS4gSSBhbnRpY2lwYXRlIGZpbmRpbmcga2V5IG1hY3JvcyBhbmQgZW51bWVyYXRpb25zIHRoYXQgcmVsYXRlIHRvIHBhZ2Ugc3RhdGUgdHJhbnNpdGlvbnMsIHByb3RlY3Rpb24gbGV2ZWxzLCBhbmQgYWxsb2NhdGlvbiBtZXRhZGF0YS4gR2l2ZW4gdGhlIGNvbnRleHQgb2YgdGhlIGBwYWdlLWZsYWdzLmhgIGhlYWRlciwgSSBleHBlY3QgdG8gZW5jb3VudGVyIGRldGFpbHMgYXJvdW5kIGZsYWdzIGFzc29jaWF0ZWQgd2l0aCBodWdlIHBhZ2UgbWFuYWdlbWVudCwgTlVNQSBub2Rlcywgb3IgcG9zc2libHkgZXZlbiBmbGFncyByZWxhdGVkIHRvIGRpZmZlcmVudCBtZW1vcnkgdGllcnMgaWYgdGhpcyBjb2RlIGlzIHJlbGF0aXZlbHkgcmVjZW50LiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBzdWJ0bGUgc2hpZnRzIGZyb20gdGhlIG1vcmUgZm91bmRhdGlvbmFsIHBhZ2UgZmxhZ3MsIGFzIHRoaXMgcGFydCBvZiB0aGUgZmlsZSB0ZW5kcyB0byBob3VzZSB0aGUgbW9yZSBzcGVjaWZpYywgbGVzcyBmcmVxdWVudGx5IHRvdWNoZWQgZmxhZ3MuIE15IGdvYWwgaXMgdG8gZ3Jhc3AgdGhlIGdyYW51bGFyaXR5IG9mIGNvbnRyb2wgdGhlIGtlcm5lbCBoYXMgb3ZlciBwaHlzaWNhbCBwYWdlcyBhdCB0aGlzIGxldmVsLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgbmV3IG9yIGV2b2x2aW5nIHBhdHRlcm5zIEkgbWlnaHQgaGF2ZSBtaXNzZWQgaW4gcHJldmlvdXMgcmV2aWV3cyBvZiB0aGlzIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM4MDpcdCAqICAgICB0aGUgcGFnZSBmbGFnIGlzIHN0b3JlZCBpbiB0aGUgZmlyc3QgdGFpbCBwYWdlLlxuIDM4MTpcdCAqL1xuIDM4MjpcdCNkZWZpbmUgUEZfUE9JU09ORURfQ0hFQ0socGFnZSkgKHtcdFx0XHRcdFx0XFxcbiAzODM6XHRcdFx0Vk1fQlVHX09OX1BHRkxBR1MoUGFnZVBvaXNvbmVkKHBhZ2UpLCBwYWdlKTtcdFx0XFxcbiAzODQ6XHRcdFx0cGFnZTsgfSlcbiAzODU6XHQjZGVmaW5lIFBGX0FOWShwYWdlLCBlbmZvcmNlKVx0UEZfUE9JU09ORURfQ0hFQ0socGFnZSlcbiAzODY6XHQjZGVmaW5lIFBGX0hFQUQocGFnZSwgZW5mb3JjZSlcdFBGX1BPSVNPTkVEX0NIRUNLKGNvbXBvdW5kX2hlYWQocGFnZSkpXG4gMzg3Olx0I2RlZmluZSBQRl9OT19UQUlMKHBhZ2UsIGVuZm9yY2UpICh7XHRcdFx0XHRcdFxcXG4gMzg4Olx0XHRcdFZNX0JVR19PTl9QR0ZMQUdTKGVuZm9yY2UgXHUwMDI2XHUwMDI2IFBhZ2VUYWlsKHBhZ2UpLCBwYWdlKTtcdFxcXG4gMzg5Olx0XHRcdFBGX1BPSVNPTkVEX0NIRUNLKGNvbXBvdW5kX2hlYWQocGFnZSkpOyB9KVxuIDM5MDpcdCNkZWZpbmUgUEZfTk9fQ09NUE9VTkQocGFnZSwgZW5mb3JjZSkgKHtcdFx0XHRcdFxcXG4gMzkxOlx0XHRcdFZNX0JVR19PTl9QR0ZMQUdTKGVuZm9yY2UgXHUwMDI2XHUwMDI2IFBhZ2VDb21wb3VuZChwYWdlKSwgcGFnZSk7XHRcXFxuIDM5MjpcdFx0XHRQRl9QT0lTT05FRF9DSEVDSyhwYWdlKTsgfSlcbiAzOTM6XHQjZGVmaW5lIFBGX1NFQ09ORChwYWdlLCBlbmZvcmNlKSAoe1x0XHRcdFx0XHRcXFxuIDM5NDpcdFx0XHRWTV9CVUdfT05fUEdGTEFHUyghUGFnZUhlYWQocGFnZSksIHBhZ2UpO1x0XHRcXFxuIDM5NTpcdFx0XHRQRl9QT0lTT05FRF9DSEVDSyhcdTAwMjZwYWdlWzFdKTsgfSlcbiAzOTY6XHRcbiAzOTc6XHQvKiBXaGljaCBwYWdlIGlzIHRoZSBmbGFnIHN0b3JlZCBpbiAqL1xuIDM5ODpcdCNkZWZpbmUgRk9MSU9fUEZfQU5ZXHRcdDBcbiAzOTk6XHQjZGVmaW5lIEZPTElPX1BGX0hFQURcdFx0MFxuIDQwMDpcdCNkZWZpbmUgRk9MSU9fUEZfTk9fVEFJTFx0MFxuIDQwMTpcdCNkZWZpbmUgRk9MSU9fUEZfTk9fQ09NUE9VTkRcdDBcbiA0MDI6XHQjZGVmaW5lIEZPTElPX1BGX1NFQ09ORFx0XHQxXG4gNDAzOlx0XG4gNDA0Olx0I2RlZmluZSBGT0xJT19IRUFEX1BBR0VcdFx0MFxuIDQwNTpcdCNkZWZpbmUgRk9MSU9fU0VDT05EX1BBR0VcdDFcbiA0MDY6XHRcbiA0MDc6XHQvKlxuIDQwODpcdCAqIE1hY3JvcyB0byBjcmVhdGUgZnVuY3Rpb24gZGVmaW5pdGlvbnMgZm9yIHBhZ2UgZmxhZ3NcbiA0MDk6XHQgKi9cbiA0MTA6XHQjZGVmaW5lIEZPTElPX1RFU1RfRkxBRyhuYW1lLCBwYWdlKVx0XHRcdFx0XHRcXFxuIDQxMTpcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBmb2xpb190ZXN0XyMjbmFtZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKSBcXFxuIDQxMjpcdHsgcmV0dXJuIHRlc3RfYml0KFBHXyMjbmFtZSwgY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIHBhZ2UpKTsgfVxuIDQxMzpcdFxuIDQxNDpcdCNkZWZpbmUgRk9MSU9fU0VUX0ZMQUcobmFtZSwgcGFnZSlcdFx0XHRcdFx0XFxcbiA0MTU6XHRzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgZm9saW9fc2V0XyMjbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XFxcbiA0MTY6XHR7IHNldF9iaXQoUEdfIyNuYW1lLCBmb2xpb19mbGFncyhmb2xpbywgcGFnZSkpOyB9XG4gNDE3Olx0XG4gNDE4Olx0I2RlZmluZSBGT0xJT19DTEVBUl9GTEFHKG5hbWUsIHBhZ2UpXHRcdFx0XHRcdFxcXG4gNDE5Olx0c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGZvbGlvX2NsZWFyXyMjbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XFxcbiA0MjA6XHR7IGNsZWFyX2JpdChQR18jI25hbWUsIGZvbGlvX2ZsYWdzKGZvbGlvLCBwYWdlKSk7IH1cbiA0MjE6XHRcbiA0MjI6XHQjZGVmaW5lIF9fRk9MSU9fU0VUX0ZMQUcobmFtZSwgcGFnZSlcdFx0XHRcdFx0XFxcbiA0MjM6XHRzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19mb2xpb19zZXRfIyNuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXHRcXFxuIDQyNDpcdHsgX19zZXRfYml0KFBHXyMjbmFtZSwgZm9saW9fZmxhZ3MoZm9saW8sIHBhZ2UpKTsgfVxuIDQyNTpcdFxuIDQyNjpcdCNkZWZpbmUgX19GT0xJT19DTEVBUl9GTEFHKG5hbWUsIHBhZ2UpXHRcdFx0XHRcdFxcXG4gNDI3Olx0c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fZm9saW9fY2xlYXJfIyNuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXHRcXFxuIDQyODpcdHsgX19jbGVhcl9iaXQoUEdfIyNuYW1lLCBmb2xpb19mbGFncyhmb2xpbywgcGFnZSkpOyB9XG4gNDI5Olx0XG4gNDMwOlx0I2RlZmluZSBGT0xJT19URVNUX1NFVF9GTEFHKG5hbWUsIHBhZ2UpXHRcdFx0XHRcdFxcXG4gNDMxOlx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGZvbGlvX3Rlc3Rfc2V0XyMjbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XFxcbiA0MzI6XHR7IHJldHVybiB0ZXN0X2FuZF9zZXRfYml0KFBHXyMjbmFtZSwgZm9saW9fZmxhZ3MoZm9saW8sIHBhZ2UpKTsgfVxuIDQzMzpcdFxuIDQzNDpcdCNkZWZpbmUgRk9MSU9fVEVTVF9DTEVBUl9GTEFHKG5hbWUsIHBhZ2UpXHRcdFx0XHRcXFxuIDQzNTpcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBmb2xpb190ZXN0X2NsZWFyXyMjbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKSBcXFxuIDQzNjpcdHsgcmV0dXJuIHRlc3RfYW5kX2NsZWFyX2JpdChQR18jI25hbWUsIGZvbGlvX2ZsYWdzKGZvbGlvLCBwYWdlKSk7IH1cbiA0Mzc6XHRcbiA0Mzg6XHQjZGVmaW5lIEZPTElPX0ZMQUcobmFtZSwgcGFnZSlcdFx0XHRcdFx0XHRcXFxuIDQzOTpcdEZPTElPX1RFU1RfRkxBRyhuYW1lLCBwYWdlKVx0XHRcdFx0XHRcdFxcXG4gNDQwOlx0Rk9MSU9fU0VUX0ZMQUcobmFtZSwgcGFnZSlcdFx0XHRcdFx0XHRcXFxuIDQ0MTpcdEZPTElPX0NMRUFSX0ZMQUcobmFtZSwgcGFnZSlcbiA0NDI6XHRcbiA0NDM6XHQjZGVmaW5lIFRFU1RQQUdFRkxBRyh1bmFtZSwgbG5hbWUsIHBvbGljeSlcdFx0XHRcdFxcXG4gNDQ0Olx0Rk9MSU9fVEVTVF9GTEFHKGxuYW1lLCBGT0xJT18jI3BvbGljeSlcdFx0XHRcdFx0XFxcbiA0NDU6XHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBQYWdlIyN1bmFtZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcdFx0XFxcbiA0NDY6XHR7IHJldHVybiB0ZXN0X2JpdChQR18jI2xuYW1lLCBcdTAwMjZwb2xpY3kocGFnZSwgMCktXHUwMDNlZmxhZ3MuZik7IH1cbiA0NDc6XHRcbiA0NDg6XHQjZGVmaW5lIFNFVFBBR0VGTEFHKHVuYW1lLCBsbmFtZSwgcG9saWN5KVx0XHRcdFx0XFxcbiA0NDk6XHRGT0xJT19TRVRfRkxBRyhsbmFtZSwgRk9MSU9fIyNwb2xpY3kpXHRcdFx0XHRcdFxcXG4gNDUwOlx0c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIFNldFBhZ2UjI3VuYW1lKHN0cnVjdCBwYWdlICpwYWdlKVx0XHRcXFxuIDQ1MTpcdHsgc2V0X2JpdChQR18jI2xuYW1lLCBcdTAwMjZwb2xpY3kocGFnZSwgMSktXHUwMDNlZmxhZ3MuZik7IH1cbiA0NTI6XHRcbiA0NTM6XHQjZGVmaW5lIENMRUFSUEFHRUZMQUcodW5hbWUsIGxuYW1lLCBwb2xpY3kpXHRcdFx0XHRcXFxuIDQ1NDpcdEZPTElPX0NMRUFSX0ZMQUcobG5hbWUsIEZPTElPXyMjcG9saWN5KVx0XHRcdFx0XHRcXFxuIDQ1NTpcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBDbGVhclBhZ2UjI3VuYW1lKHN0cnVjdCBwYWdlICpwYWdlKVx0XHRcXFxuIDQ1NjpcdHsgY2xlYXJfYml0KFBHXyMjbG5hbWUsIFx1MDAyNnBvbGljeShwYWdlLCAxKS1cdTAwM2VmbGFncy5mKTsgfVxuIDQ1NzpcdFxuIDQ1ODpcdCNkZWZpbmUgX19TRVRQQUdFRkxBRyh1bmFtZSwgbG5hbWUsIHBvbGljeSlcdFx0XHRcdFxcXG4gNDU5Olx0X19GT0xJT19TRVRfRkxBRyhsbmFtZSwgRk9MSU9fIyNwb2xpY3kpXHRcdFx0XHRcdFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxMjcKCQkJCQkJCW91dHB1dDogMjA0CgkJCQkJCQl0aG91Z2h0czogNjMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmFjdG9yaW5nIFBhZ2UvRm9saW8gV3JpdGViYWNrIEZsYWdzOiBBIEtNU0FOIFBlcnNwZWN0aXZlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFByZXZpb3VzbHksIHdlIGhhZCBgVEVTVFBBR0VGTEFHYCBhbmQgYFRFU1RTQ0ZMQUdgIG1hY3JvcyB0aGF0LCBpbiB0aGUgY29udGV4dCBvZiB0aGUgYHdyaXRlYmFja2AgZmxhZywgZXNzZW50aWFsbHkgbWFwcGVkIHRvIGBQYWdlV3JpdGViYWNrYCBhbmQgYFRlc3RTZXRQYWdlV3JpdGViYWNrYCBmdW5jdGlvbnMgb3BlcmF0aW5nIG9uIHBhZ2Ugc3RydWN0dXJlcy4gVGhpcyBzZWVtcyBzdHJhaWdodGZvcndhcmQsIGJ1dCBub3cgd2UmIzM5O3JlIG1vZGVybml6aW5nIHRoaXMuIFRoZSBjb2RlIGlzIGJlaW5nIHVwZGF0ZWQgdG8gdXNlIGBGT0xJT19URVNUX0ZMQUdgIGFuZCBgRk9MSU9fVEVTVF9TRVRfRkxBR2Agd2l0aCBgRk9MSU9fSEVBRF9QQUdFYCwgd2hpY2gsIGF0IGEgaGlnaCBsZXZlbCwgaXMgcmVwbGFjaW5nIHRoZSBvbGQgcGFnZS1jZW50cmljIGhlbHBlcnMgd2l0aCBmb2xpby1jZW50cmljIGhlbHBlcnMgZm9yIHdyaXRlYmFjayBtYW5hZ2VtZW50LgoKU3BlY2lmaWNhbGx5LCB0aGUgb2xkIG1hY3JvcyB3ZXJlIGVmZmVjdGl2ZWx5IGNhbGxpbmcgYGZvbGlvX3Rlc3Rfd3JpdGViYWNrYCBhbmQgYGZvbGlvX3Rlc3Rfc2V0X3dyaXRlYmFja2AgZnVuY3Rpb25zIHdoaWNoIEkgc2hvdWxkIG5vdGUsIGFyZSBkZWZpbmVkIHdpdGggYEZPTElPX1BGX05PX1RBSUxgLgoKVGhpcyB0cmFuc2l0aW9uIGVmZmVjdGl2ZWx5IHJlbW92ZXMsIG9yIGF0IGxlYXN0IHJlbG9jYXRlcywgdGhlIGBQYWdlV3JpdGViYWNrYCwgYFRlc3RTZXRQYWdlV3JpdGViYWNrYCwgYW5kIGBUZXN0Q2xlYXJQYWdlV3JpdGViYWNrYCBoZWxwZXJzLCBub3cgdXNpbmcgZXF1aXZhbGVudCBmb2xpbyBoZWxwZXJzLCB3aXRoIGBmb2xpb190ZXN0X3dyaXRlYmFja2AsIGBmb2xpb190ZXN0X3NldF93cml0ZWJhY2tgLCBhbmQgYGZvbGlvX3Rlc3RfY2xlYXJfd3JpdGViYWNrYC4KClRoaXMgaXMgYSBwcmV0dHkgY2xlYW4gcmVmYWN0b3Jpbmc7IGl0JiMzOTtzIGEgbWFjcm8gcmVwbGFjZW1lbnQgYW5kIGZsYWcgaGVscGVyIGNoYW5nZSBwcmltYXJpbHkgZm9yIHRoZSBgd3JpdGViYWNrYCBmbGFnLiBTbywgdGhlIGtleSBxdWVzdGlvbiBpczogZG9lcyB0aGlzIGNoYW5nZSBleHBvc2UgYW55IG5ldywgcHJldmlvdXNseSB1bmFkZHJlc3NlZCwgS01TQU4tcmVsZXZhbnQgbWVtb3J5IGlzc3Vlcz8gTGV0JiMzOTtzIGFuYWx5emUuCgpJJiMzOTt2ZSBnb3QgdG8gY29uc2lkZXIgcG90ZW50aWFsIHJpc2tzOiBrZXJuZWwgc3RydWN0dXJlcyBiZWluZyBjb3BpZWQgdG8gdXNlcnNwYWNlLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMgb3IgcGFkZGluZywgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbGxvY2F0aW9ucyBvciBidWZmZXJzIHdpdGhvdXQgemVyb2luZywgYW5kIGFueSBhbHRlcmF0aW9uIG9mIGxlbmd0aCBvciBib3VuZHMgY2hlY2tzIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gTm9uZSBvZiB0aGVzZSBzY2VuYXJpb3Mgc2VlbSB0byBiZSBwcmVzZW50IGhlcmUuCgpHaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2UgYW5kIHRoZSBhYnNlbmNlIG9mIGFueSBvYnZpb3VzIG5ldyB2dWxuZXJhYmlsaXRpZXMsIEkmIzM5O20gY29uZmlkZW50IHRoaXMgcmVmYWN0b3JpbmcgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvcm1hdGlvbiBsZWFrIHJpc2tzIHRoYXQgd291bGQgc3BlY2lmaWNhbGx5IHdhcnJhbnQgS01TQU4uIEtBU0FOIGFuZCBzdGFuZGFyZCBzYW5pdGl6ZXJzIGhhbmRsZSBhbnkgbWVtb3J5IGlzc3VlcyBpZiBjYWxsZXJzIHBhc3MgYmFkIHBhZ2UvZm9saW8gcG9pbnRlcnMsIHdoaWNoIHRoaXMgY2hhbmdlIGl0c2VsZiBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UuCgpUaGVyZWZvcmUsIHRoZSBgTmVlZHNLTVNBTmAgZmxhZyBjYW4gYmUgc2V0IHRvIGBmYWxzZWAuIFRpbWUgdG8gbW92ZSBmb3J3YXJkIHdpdGggdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgcHJlcGFyZSBhIGNvbmNpc2UgZmluYWwgcmVwbHkgdGhhdCBoaWdobGlnaHRzIHRoZSBjb250cmFzdCBiZXR3ZWVuIEtBU0FOIGFuZCBLTVNBTiBhcHBsaWNhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb252ZXJ0cyB0aGUgcGFnZSBmbGFnIGRlZmluaXRpb25zIGZvciBQR193cml0ZWJhY2sgZnJvbSBsZWdhY3kgcGFnZS1iYXNlZCBtYWNyb3MgKFRFU1RQQUdFRkxBRyAvIFRFU1RTQ0ZMQUcpIHRvIGZvbGlvLWJhc2VkIG1hY3JvcyAoRk9MSU9fVEVTVF9GTEFHIC8gRk9MSU9fVEVTVF9TRVRfRkxBRykuIFxuXG5UaGlzIGlzIGEgdHlwZS1zYWZlIG1hY3JvIHJlZmFjdG9yaW5nIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IG9wZXJhdGVzIHB1cmVseSBvbiBwYWdlL2ZvbGlvIGJpdCBmbGFncy4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBhbGxvY2F0ZSwgb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgc3RydWN0IHBhZGRpbmcsIHVzZXItY29weSBidWZmZXJzLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBBbnkgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgdGhhdCBjb3VsZCBhcmlzZSBmcm9tIGludmFsaWQgZm9saW8vcGFnZSByZWZlcmVuY2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgcGFnZSBhY2Nlc3MpIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIHBhZ2UgZmxhZyBkZWJ1ZyBjaGVja3MgKFZNX0JVR19PTl9QR0ZMQUdTKS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9ybWF0aW9uIGxlYWsgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnZlcnRzIHRoZSBwYWdlIGZsYWcgZGVmaW5pdGlvbnMgZm9yIFBHX3dyaXRlYmFjayBmcm9tIGxlZ2FjeSBwYWdlLWJhc2VkIG1hY3JvcyAoVEVTVFBBR0VGTEFHIC8gVEVTVFNDRkxBRykgdG8gZm9saW8tYmFzZWQgbWFjcm9zIChGT0xJT19URVNUX0ZMQUcgLyBGT0xJT19URVNUX1NFVF9GTEFHKS4gXG5cblRoaXMgaXMgYSB0eXBlLXNhZmUgbWFjcm8gcmVmYWN0b3JpbmcgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgb3BlcmF0ZXMgcHVyZWx5IG9uIHBhZ2UvZm9saW8gYml0IGZsYWdzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIGFsbG9jYXRlLCBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzdHJ1Y3QgcGFkZGluZywgdXNlci1jb3B5IGJ1ZmZlcnMsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFueSBtZW1vcnkgc2FmZXR5IGlzc3VlcyB0aGF0IGNvdWxkIGFyaXNlIGZyb20gaW52YWxpZCBmb2xpby9wYWdlIHJlZmVyZW5jZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBwYWdlIGFjY2VzcykgYXJlIGFscmVhZHkgY292ZXJlZCBieSBLQVNBTiBhbmQgcGFnZSBmbGFnIGRlYnVnIGNoZWNrcyAoVk1fQlVHX09OX1BHRkxBR1MpLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVhayByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjozNzoyMS4wNDY1MjY4ODRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjA4MjQxMDAzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2ZvbGlvX3N0YXJ0X3dyaXRlYmFja1wiLFxuICAgIFwiZm9saW9fZW5kX3dyaXRlYmFja1wiLFxuICAgIFwiZm9saW9fd2FpdF93cml0ZWJhY2tcIixcbiAgICBcImZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29udmVydHMgdGhlIHBhZ2UgZmxhZyBkZWZpbml0aW9ucyBmb3IgUEdfd3JpdGViYWNrIGZyb20gbGVnYWN5IHBhZ2UtYmFzZWQgbWFjcm9zIChURVNUUEFHRUZMQUcgLyBURVNUU0NGTEFHKSB0byBmb2xpby1iYXNlZCBtYWNyb3MgKEZPTElPX1RFU1RfRkxBRyAvIEZPTElPX1RFU1RfU0VUX0ZMQUcpLiBcXG5cXG5UaGlzIGlzIGEgdHlwZS1zYWZlIG1hY3JvIHJlZmFjdG9yaW5nIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IG9wZXJhdGVzIHB1cmVseSBvbiBwYWdlL2ZvbGlvIGJpdCBmbGFncy4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBhbGxvY2F0ZSwgb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgc3RydWN0IHBhZGRpbmcsIHVzZXItY29weSBidWZmZXJzLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBBbnkgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgdGhhdCBjb3VsZCBhcmlzZSBmcm9tIGludmFsaWQgZm9saW8vcGFnZSByZWZlcmVuY2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgcGFnZSBhY2Nlc3MpIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIHBhZ2UgZmxhZyBkZWJ1ZyBjaGVja3MgKFZNX0JVR19PTl9QR0ZMQUdTKS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9ybWF0aW9uIGxlYWsgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIHRoZSB3cml0ZWJhY2sgZm9saW8gZmxhZyBkZWZpbml0aW9ucyBpbiBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCBmcm9tIGxlZ2FjeSBwYWdlLWZsYWcgbWFjcm9zIChURVNUUEFHRUZMQUcsIFRFU1RTQ0ZMQUcpIHRvIHRoZSBtb2Rlcm4gZm9saW8gZmxhZyBtYWNyb3MgKEZPTElPX1RFU1RfRkxBRywgRk9MSU9fVEVTVF9TRVRfRkxBRykuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGludm9sdmVkIGluIGZvbGlvIHdyaXRlYmFjayBzdGF0ZSB0cmFja2luZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzc6MjEuMDQ2NTMyNjA0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTM2NTQ3NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3NDIyZWVlM2U3ZjUyNDJmZGQyYTcxMjU3NTJkYTBhY2U2N2RkMTdjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gU2VwIDYgMTY6Mzc6MTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxcbmluZGV4IDNkYzc5YzBjNWFkZjAuLjg2ZGQwNDcwZGExMTcgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxcbkBAIC01ODgsOCArNTg4LDggQEAgRk9MSU9fRkxBRyhvd25lcl8yLCBGT0xJT19IRUFEX1BBR0UpXFxuICAqIE9ubHkgdGVzdC1hbmQtc2V0IGV4aXN0IGZvciBQR193cml0ZWJhY2suICBUaGUgdW5jb25kaXRpb25hbCBvcGVyYXRvcnMgYXJlXFxuICAqIHJpc2t5OiB0aGV5IGJ5cGFzcyBwYWdlIGFjY291bnRpbmcuXFxuICAqL1xcbi1URVNUUEFHRUZMQUcoV3JpdGViYWNrLCB3cml0ZWJhY2ssIFBGX05PX1RBSUwpXFxuLVxcdFRFU1RTQ0ZMQUcoV3JpdGViYWNrLCB3cml0ZWJhY2ssIFBGX05PX1RBSUwpXFxuK0ZPTElPX1RFU1RfRkxBRyh3cml0ZWJhY2ssIEZPTElPX0hFQURfUEFHRSlcXG4rXFx0Rk9MSU9fVEVTVF9TRVRfRkxBRyh3cml0ZWJhY2ssIEZPTElPX0hFQURfUEFHRSlcXG4gRk9MSU9fRkxBRyhtYXBwZWR0b2Rpc2ssIEZPTElPX0hFQURfUEFHRSlcXG4gXFxuIC8qIFBHX3JlYWRhaGVhZCBpcyBvbmx5IHVzZWQgZm9yIHJlYWRzOyBQR19yZWNsYWltIGlzIG9ubHkgZm9yIHdyaXRlcyAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjozNzoyMS43NDEwNjU4NDJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjY0NTY5MjA3NDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fZm9saW9fc3RhcnRfd3JpdGViYWNrXCIsXG4gICAgXCJmb2xpb19lbmRfd3JpdGViYWNrXCIsXG4gICAgXCJmb2xpb193YWl0X3dyaXRlYmFja1wiLFxuICAgIFwiZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgd3JpdGViYWNrIGZvbGlvIGZsYWcgZGVmaW5pdGlvbnMgaW4gaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggZnJvbSBsZWdhY3kgcGFnZS1mbGFnIG1hY3JvcyAoVEVTVFBBR0VGTEFHLCBURVNUU0NGTEFHKSB0byB0aGUgbW9kZXJuIGZvbGlvIGZsYWcgbWFjcm9zIChGT0xJT19URVNUX0ZMQUcsIEZPTElPX1RFU1RfU0VUX0ZMQUcpLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbnZvbHZlZCBpbiBmb2xpbyB3cml0ZWJhY2sgc3RhdGUgdHJhY2tpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzQyMmVlZTNlN2Y1MjQyZmRkMmE3MTI1NzUyZGEwYWNlNjdkZDE3Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTY6Mzc6MTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXG5pbmRleCAzZGM3OWMwYzVhZGYwLi44NmRkMDQ3MGRhMTE3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXG5AQCAtNTg4LDggKzU4OCw4IEBAIEZPTElPX0ZMQUcob3duZXJfMiwgRk9MSU9fSEVBRF9QQUdFKVxuICAqIE9ubHkgdGVzdC1hbmQtc2V0IGV4aXN0IGZvciBQR193cml0ZWJhY2suICBUaGUgdW5jb25kaXRpb25hbCBvcGVyYXRvcnMgYXJlXG4gICogcmlza3k6IHRoZXkgYnlwYXNzIHBhZ2UgYWNjb3VudGluZy5cbiAgKi9cbi1URVNUUEFHRUZMQUcoV3JpdGViYWNrLCB3cml0ZWJhY2ssIFBGX05PX1RBSUwpXG4tXHRURVNUU0NGTEFHKFdyaXRlYmFjaywgd3JpdGViYWNrLCBQRl9OT19UQUlMKVxuK0ZPTElPX1RFU1RfRkxBRyh3cml0ZWJhY2ssIEZPTElPX0hFQURfUEFHRSlcbitcdEZPTElPX1RFU1RfU0VUX0ZMQUcod3JpdGViYWNrLCBGT0xJT19IRUFEX1BBR0UpXG4gRk9MSU9fRkxBRyhtYXBwZWR0b2Rpc2ssIEZPTElPX0hFQURfUEFHRSlcbiBcbiAvKiBQR19yZWFkYWhlYWQgaXMgb25seSB1c2VkIGZvciByZWFkczsgUEdfcmVjbGFpbSBpcyBvbmx5IGZvciB3cml0ZXMgKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM3OjIxLjc0MTA2ODI2MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc3Njc0NzQ5NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogVW5yYXZlbGluZyBQYWdlLUZsYWcgTWVjaGFuaWNzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHRoZSBhc3NvY2lhdGVkIGluc3RydWN0aW9ucy4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY29yZSBvZiB0aGUgY2hhbmdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG1vZGlmaWNhdGlvbiBpbXBhY3RzIHRoZSBwYWdlLWZsYWdzIG1hY3Jvcy4gVG8gZG8gdGhpcyBlZmZlY3RpdmVseSwgSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGZvY3VzaW5nIG9uIHRoZSBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgIGZpbGUuIFNwZWNpZmljYWxseSwgSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIGNvZGUgYXJvdW5kIGxpbmUgNTg4IHRvIHNlZSBwcmVjaXNlbHkgd2hhdCdzIGJlZW4gYWx0ZXJlZC5cblxuSSdsbCBiZSBsZXZlcmFnaW5nIG15IHVzdWFsIHRvb2xzIGZvciB0aGlzIGtpbmQgb2YgaW52ZXN0aWdhdGlvbiDigJMgbGlrZWx5IGVpdGhlciBgcmVhZC1maWxlYCB0byBnZXQgYSBkaXJlY3QgdmlldyBvZiB0aGUgY2hhbmdlcywgb3IgYGdyZXBwZXJgIHRvIHNlYXJjaCBmb3Igc3BlY2lmaWMgdGVybXMgb3IgcGF0dGVybnMgdGhhdCB3aWxsIGlsbHVtaW5hdGUgdGhlIHJldmlzZWQgZnVuY3Rpb25hbGl0eSBvZiB0aG9zZSBwYWdlLWZsYWcgbWFjcm9zLiBUaGlzIGFwcHJvYWNoIHNob3VsZCBnaXZlIG1lIHRoZSBjbGVhciwgdGFyZ2V0ZWQgaW5mb3JtYXRpb24gSSBuZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTI3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjozNzoyOS41MDg1NDk4OTRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTk5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNTcwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTcwOlxcdFxcdF9fQ0xFQVJQQUdFRkxBRyhSZXNlcnZlZCwgcmVzZXJ2ZWQsIFBGX05PX0NPTVBPVU5EKVxcbiA1NzE6XFx0XFx0X19TRVRQQUdFRkxBRyhSZXNlcnZlZCwgcmVzZXJ2ZWQsIFBGX05PX0NPTVBPVU5EKVxcbiA1NzI6XFx0Rk9MSU9fRkxBRyhzd2FwYmFja2VkLCBGT0xJT19IRUFEX1BBR0UpXFxuIDU3MzpcXHRcXHRfX0ZPTElPX0NMRUFSX0ZMQUcoc3dhcGJhY2tlZCwgRk9MSU9fSEVBRF9QQUdFKVxcbiA1NzQ6XFx0XFx0X19GT0xJT19TRVRfRkxBRyhzd2FwYmFja2VkLCBGT0xJT19IRUFEX1BBR0UpXFxuIDU3NTpcXHRcXG4gNTc2OlxcdC8qXFxuIDU3NzpcXHQgKiBQcml2YXRlIHBhZ2UgbWFya2luZ3MgdGhhdCBtYXkgYmUgdXNlZCBieSB0aGUgZmlsZXN5c3RlbSB0aGF0IG93bnMgdGhlIHBhZ2VcXG4gNTc4OlxcdCAqIGZvciBpdHMgb3duIHB1cnBvc2VzLlxcbiA1Nzk6XFx0ICogLSBQR19wcml2YXRlIGFuZCBQR19wcml2YXRlXzIgY2F1c2UgcmVsZWFzZV9mb2xpbygpIGFuZCBjbyB0byBiZSBpbnZva2VkXFxuIDU4MDpcXHQgKi9cXG4gNTgxOlxcdFBBR0VGTEFHKFByaXZhdGUsIHByaXZhdGUsIFBGX0FOWSlcXG4gNTgyOlxcdEZPTElPX0ZMQUcocHJpdmF0ZV8yLCBGT0xJT19IRUFEX1BBR0UpXFxuIDU4MzpcXHRcXG4gNTg0OlxcdC8qIG93bmVyXzIgY2FuIGJlIHNldCBvbiB0YWlsIHBhZ2VzIGZvciBhbm9uIG1lbW9yeSAqL1xcbiA1ODU6XFx0Rk9MSU9fRkxBRyhvd25lcl8yLCBGT0xJT19IRUFEX1BBR0UpXFxuIDU4NjpcXHRcXG4gNTg3OlxcdC8qXFxuIDU4ODpcXHQgKiBPbmx5IHRlc3QtYW5kLXNldCBleGlzdCBmb3IgUEdfd3JpdGViYWNrLiAgVGhlIHVuY29uZGl0aW9uYWwgb3BlcmF0b3JzIGFyZVxcbiA1ODk6XFx0ICogcmlza3k6IHRoZXkgYnlwYXNzIHBhZ2UgYWNjb3VudGluZy5cXG4gNTkwOlxcdCAqL1xcbiA1OTE6XFx0Rk9MSU9fVEVTVF9GTEFHKHdyaXRlYmFjaywgRk9MSU9fSEVBRF9QQUdFKVxcbiA1OTI6XFx0XFx0Rk9MSU9fVEVTVF9TRVRfRkxBRyh3cml0ZWJhY2ssIEZPTElPX0hFQURfUEFHRSlcXG4gNTkzOlxcdEZPTElPX0ZMQUcobWFwcGVkdG9kaXNrLCBGT0xJT19IRUFEX1BBR0UpXFxuIDU5NDpcXHRcXG4gNTk1OlxcdC8qIFBHX3JlYWRhaGVhZCBpcyBvbmx5IHVzZWQgZm9yIHJlYWRzOyBQR19yZWNsYWltIGlzIG9ubHkgZm9yIHdyaXRlcyAqL1xcbiA1OTY6XFx0Rk9MSU9fRkxBRyhyZWNsYWltLCBGT0xJT19IRUFEX1BBR0UpXFxuIDU5NzpcXHRGT0xJT19GTEFHKHJlYWRhaGVhZCwgRk9MSU9fSEVBRF9QQUdFKVxcbiA1OTg6XFx0XFx0Rk9MSU9fVEVTVF9DTEVBUl9GTEFHKHJlYWRhaGVhZCwgRk9MSU9fSEVBRF9QQUdFKVxcbiA1OTk6XFx0XFxuIDYwMDpcXHRGT0xJT19GTEFHKGRyb3BiZWhpbmQsIEZPTElPX0hFQURfUEFHRSlcXG4gNjAxOlxcdFxcdEZPTElPX1RFU1RfQ0xFQVJfRkxBRyhkcm9wYmVoaW5kLCBGT0xJT19IRUFEX1BBR0UpXFxuIDYwMjpcXHRcXHRfX0ZPTElPX1NFVF9GTEFHKGRyb3BiZWhpbmQsIEZPTElPX0hFQURfUEFHRSlcXG4gNjAzOlxcdFxcbiA2MDQ6XFx0I2lmZGVmIENPTkZJR19ISUdITUVNXFxuIDYwNTpcXHQvKlxcbiA2MDY6XFx0ICogTXVzdCB1c2UgYSBtYWNybyBoZXJlIGR1ZSB0byBoZWFkZXIgZGVwZW5kZW5jeSBpc3N1ZXMuIHBhZ2Vfem9uZSgpIGlzIG5vdFxcbiA2MDc6XFx0ICogYXZhaWxhYmxlIGF0IHRoaXMgcG9pbnQuXFxuIDYwODpcXHQgKi9cXG4gNjA5OlxcdCNkZWZpbmUgUGFnZUhpZ2hNZW0oX19wKSBpc19oaWdobWVtX2lkeChwYWdlX3pvbmVudW0oX19wKSlcXG4gNjEwOlxcdCNkZWZpbmUgZm9saW9fdGVzdF9oaWdobWVtKF9fZilcXHRpc19oaWdobWVtX2lkeChmb2xpb196b25lbnVtKF9fZikpXFxuIDYxMTpcXHQjZWxzZVxcbiA2MTI6XFx0UEFHRUZMQUdfRkFMU0UoSGlnaE1lbSwgaGlnaG1lbSlcXG4gNjEzOlxcdCNlbmRpZlxcbiA2MTQ6XFx0I2RlZmluZSBQaHlzSGlnaE1lbShfX3ApIChQYWdlSGlnaE1lbShwaHlzX3RvX3BhZ2UoX19wKSkpXFxuIDYxNTpcXHRcXG4gNjE2OlxcdC8qIERvZXMga21hcF9sb2NhbF9mb2xpbygpIG9ubHkgYWxsb3cgYWNjZXNzIHRvIG9uZSBwYWdlIG9mIHRoZSBmb2xpbz8gKi9cXG4gNjE3OlxcdCNpZmRlZiBDT05GSUdfREVCVUdfS01BUF9MT0NBTF9GT1JDRV9NQVBcXG4gNjE4OlxcdCNkZWZpbmUgZm9saW9fdGVzdF9wYXJ0aWFsX2ttYXAoZilcXHR0cnVlXFxuIDYxOTpcXHQjZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjozNzoyOS41MDg5MTU3MzRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzE4MzAyNTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcnksIGZyYW1lZCBhcyBteSBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBMaW51eCBQYWdlIEZsYWdzKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGVzZSBmbGFncy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgYFRFU1RQQUdFRkxBR2AsIGBURVNUU0NGTEFHYCwgYEZPTElPX1RFU1RfRkxBR2AsIGFuZCBgRk9MSU9fVEVTVF9TRVRfRkxBR2AuIFRoZXkncmUgcHJvYmFibHkgZGVmaW5lZCBzb21ld2hlcmUgaW4gYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYCwgc28gbGV0J3MgaGVhZCBvdmVyIHRoZXJlIGFuZCB0YWtlIGEgbG9vay4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSByZWxhdGUgdG8sIHlvdSBrbm93LCB0aGUgcGFnZSBhbGxvY2F0aW9uIGFuZCBtYW5hZ2VtZW50IHdpdGhpbiB0aGUga2VybmVsLiBXaGF0IGFyZSB0aGV5IHRlc3Rpbmc/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgaWYgb25lIG9mIHRoZW0gaXMgc2V0IG9yIG5vdD8gSG9wZWZ1bGx5IHRoZSBjb21tZW50cyBhcmUgZ29vZCBpbiB0aGVyZSBzbyBJIGRvbid0IGhhdmUgdG8gdHJhY2UgaXQgYWxsIGJhY2sgZnJvbSB0aGUgdXNhZ2UhIFRpbWUgdG8gZGl2ZSBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEyNCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzc6MzEuODI3MjI3MjQyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNDk1Mzk1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIEZPTElPX1RFU1RfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTM1MD1zdGF0aWMgdW5zaWduZWQgbG9uZyAqZm9saW9fZmxhZ3Moc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgbilcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTQwOS0gKi9cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo0MTA6I2RlZmluZSBGT0xJT19URVNUX0ZMQUcobmFtZSwgcGFnZSlcXHRcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNDExLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBmb2xpb190ZXN0XyMjbmFtZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKSBcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD00Mjc9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fZm9saW9fY2xlYXJfIyNuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXFx0XFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNDI5LVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjQzMDojZGVmaW5lIEZPTElPX1RFU1RfU0VUX0ZMQUcobmFtZSwgcGFnZSlcXHRcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNDMxLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBmb2xpb190ZXN0X3NldF8jI25hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC00MzMtXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6NDM0OiNkZWZpbmUgRk9MSU9fVEVTVF9DTEVBUl9GTEFHKG5hbWUsIHBhZ2UpXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTQzNS1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgZm9saW9fdGVzdF9jbGVhcl8jI25hbWUoc3RydWN0IGZvbGlvICpmb2xpbykgXFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9NDc1PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IFRlc3RDbGVhclBhZ2UjI3VuYW1lKHN0cnVjdCBwYWdlICpwYWdlKVxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTQ5MS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo0OTI6I2RlZmluZSBGT0xJT19URVNUX0ZMQUdfRkFMU0UobmFtZSlcXHRcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNDkzLXN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb190ZXN0XyMjbmFtZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTUwMj1zdGF0aWMgaW5saW5lIHZvaWQgX19mb2xpb19jbGVhcl8jI25hbWUoc3RydWN0IGZvbGlvICpmb2xpbykgeyB9XFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6NTAzOiNkZWZpbmUgRk9MSU9fVEVTVF9TRVRfRkxBR19GQUxTRShuYW1lKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC01MDQtc3RhdGljIGlubGluZSBib29sIGZvbGlvX3Rlc3Rfc2V0XyMjbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC01MDUteyByZXR1cm4gZmFsc2U7IH1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo1MDY6I2RlZmluZSBGT0xJT19URVNUX0NMRUFSX0ZMQUdfRkFMU0UobmFtZSlcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNTA3LXN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb190ZXN0X2NsZWFyXyMjbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcdFxcdFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzc6MzIuMDMyMTg2NjU5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQyNTcyNTk1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgbWFjcm9zLCBhcyBpZiB0aGV5IHdlcmUgbXkgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaGAgLSBMaW5lcyA0MDAtNDgwKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHBhZ2UtZmxhZ3MuaGAgaGVhZGVyIGZpbGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGdldCBteSBoZWFkIGFyb3VuZCB0aGUgbWFjcm8gZGVmaW5pdGlvbnMga2lja2luZyBhcm91bmQgbGluZXMgNDAwIHRvIDQ4MC4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIGJlIHdoZXJlIHRoZSBjb3JlIGJpdCBtYW5pcHVsYXRpb24gaGFwcGVucyBmb3IgdGhlIHBhZ2UgZmxhZ3MsIHNvIHVuZGVyc3RhbmRpbmcgdGhpcyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgbWVtb3J5IG1hbmFnZW1lbnQgaXMgd29ya2luZyB1bmRlciB0aGUgaG9vZC4gSSBhbnRpY2lwYXRlIHRoZXNlIG1hY3JvcyB3aWxsIGhhbmRsZSBvcGVyYXRpb25zIGxpa2Ugc2V0dGluZywgY2xlYXJpbmcsIHRlc3RpbmcsIGFuZCBwcm9iYWJseSBldmVuIGF0b21pYyBtb2RpZmljYXRpb24gb2YgdGhvc2UgcGFnZSBmbGFncy4gSSdtIGhvcGluZyB0byBzZWUgc29tZSB3ZWxsLWRlZmluZWQgYml0IGZpZWxkcywgcG9zc2libHkgdXNpbmcgYF9fQklUKG4pYCBvciBzaW1pbGFyIGNvbnN0cnVjdHMuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBjb250ZXh0IGluIHdoaWNoIHRoZXNlIGFyZSB1c2VkIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGF0b21pYyBndWFyYW50ZWVzIG1hZGUgZm9yIGNvbmN1cnJlbmN5LiBHaXZlbiB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSBrZXJuZWwsIEknbGwgYmUgbG9va2luZyBmb3IgcG9zc2libGUgY29tcGlsZXIgYmFycmllcnMsIHZvbGF0aWxlIHF1YWxpZmllcnMsIG9yIG90aGVyIG1lbW9yeSBvcmRlcmluZyBwcmltaXRpdmVzLCBhbGwgdG8gbWFpbnRhaW4gZGF0YSBpbnRlZ3JpdHkgd2hlbiBtYW55IHByb2Nlc3NvcnMgYWNjZXNzIHRoZSBzYW1lIG1lbW9yeSBsb2NhdGlvbnMuIEknbSByZWFkeSB0byBjYXJlZnVsbHkgY29uc2lkZXIgZWFjaCBtYWNybydzIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDEzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzc6MzQuNDU3OTE3MzE1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2MjExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwMCxcbiAgXCJMaW5lQ291bnRcIjogODVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQwMDpcXHQjZGVmaW5lIEZPTElPX1BGX05PX1RBSUxcXHQwXFxuIDQwMTpcXHQjZGVmaW5lIEZPTElPX1BGX05PX0NPTVBPVU5EXFx0MFxcbiA0MDI6XFx0I2RlZmluZSBGT0xJT19QRl9TRUNPTkRcXHRcXHQxXFxuIDQwMzpcXHRcXG4gNDA0OlxcdCNkZWZpbmUgRk9MSU9fSEVBRF9QQUdFXFx0XFx0MFxcbiA0MDU6XFx0I2RlZmluZSBGT0xJT19TRUNPTkRfUEFHRVxcdDFcXG4gNDA2OlxcdFxcbiA0MDc6XFx0LypcXG4gNDA4OlxcdCAqIE1hY3JvcyB0byBjcmVhdGUgZnVuY3Rpb24gZGVmaW5pdGlvbnMgZm9yIHBhZ2UgZmxhZ3NcXG4gNDA5OlxcdCAqL1xcbiA0MTA6XFx0I2RlZmluZSBGT0xJT19URVNUX0ZMQUcobmFtZSwgcGFnZSlcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDQxMTpcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgZm9saW9fdGVzdF8jI25hbWUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykgXFxcXFxcbiA0MTI6XFx0eyByZXR1cm4gdGVzdF9iaXQoUEdfIyNuYW1lLCBjb25zdF9mb2xpb19mbGFncyhmb2xpbywgcGFnZSkpOyB9XFxuIDQxMzpcXHRcXG4gNDE0OlxcdCNkZWZpbmUgRk9MSU9fU0VUX0ZMQUcobmFtZSwgcGFnZSlcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDQxNTpcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgZm9saW9fc2V0XyMjbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcdFxcXFxcXG4gNDE2OlxcdHsgc2V0X2JpdChQR18jI25hbWUsIGZvbGlvX2ZsYWdzKGZvbGlvLCBwYWdlKSk7IH1cXG4gNDE3OlxcdFxcbiA0MTg6XFx0I2RlZmluZSBGT0xJT19DTEVBUl9GTEFHKG5hbWUsIHBhZ2UpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA0MTk6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGZvbGlvX2NsZWFyXyMjbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcdFxcXFxcXG4gNDIwOlxcdHsgY2xlYXJfYml0KFBHXyMjbmFtZSwgZm9saW9fZmxhZ3MoZm9saW8sIHBhZ2UpKTsgfVxcbiA0MjE6XFx0XFxuIDQyMjpcXHQjZGVmaW5lIF9fRk9MSU9fU0VUX0ZMQUcobmFtZSwgcGFnZSlcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDQyMzpcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19mb2xpb19zZXRfIyNuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXFx0XFxcXFxcbiA0MjQ6XFx0eyBfX3NldF9iaXQoUEdfIyNuYW1lLCBmb2xpb19mbGFncyhmb2xpbywgcGFnZSkpOyB9XFxuIDQyNTpcXHRcXG4gNDI2OlxcdCNkZWZpbmUgX19GT0xJT19DTEVBUl9GTEFHKG5hbWUsIHBhZ2UpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA0Mjc6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fZm9saW9fY2xlYXJfIyNuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXFx0XFxcXFxcbiA0Mjg6XFx0eyBfX2NsZWFyX2JpdChQR18jI25hbWUsIGZvbGlvX2ZsYWdzKGZvbGlvLCBwYWdlKSk7IH1cXG4gNDI5OlxcdFxcbiA0MzA6XFx0I2RlZmluZSBGT0xJT19URVNUX1NFVF9GTEFHKG5hbWUsIHBhZ2UpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA0MzE6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGZvbGlvX3Rlc3Rfc2V0XyMjbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcdFxcXFxcXG4gNDMyOlxcdHsgcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoUEdfIyNuYW1lLCBmb2xpb19mbGFncyhmb2xpbywgcGFnZSkpOyB9XFxuIDQzMzpcXHRcXG4gNDM0OlxcdCNkZWZpbmUgRk9MSU9fVEVTVF9DTEVBUl9GTEFHKG5hbWUsIHBhZ2UpXFx0XFx0XFx0XFx0XFxcXFxcbiA0MzU6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGZvbGlvX3Rlc3RfY2xlYXJfIyNuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pIFxcXFxcXG4gNDM2OlxcdHsgcmV0dXJuIHRlc3RfYW5kX2NsZWFyX2JpdChQR18jI25hbWUsIGZvbGlvX2ZsYWdzKGZvbGlvLCBwYWdlKSk7IH1cXG4gNDM3OlxcdFxcbiA0Mzg6XFx0I2RlZmluZSBGT0xJT19GTEFHKG5hbWUsIHBhZ2UpXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA0Mzk6XFx0Rk9MSU9fVEVTVF9GTEFHKG5hbWUsIHBhZ2UpXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA0NDA6XFx0Rk9MSU9fU0VUX0ZMQUcobmFtZSwgcGFnZSlcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDQ0MTpcXHRGT0xJT19DTEVBUl9GTEFHKG5hbWUsIHBhZ2UpXFxuIDQ0MjpcXHRcXG4gNDQzOlxcdCNkZWZpbmUgVEVTVFBBR0VGTEFHKHVuYW1lLCBsbmFtZSwgcG9saWN5KVxcdFxcdFxcdFxcdFxcXFxcXG4gNDQ0OlxcdEZPTElPX1RFU1RfRkxBRyhsbmFtZSwgRk9MSU9fIyNwb2xpY3kpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA0NDU6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgUGFnZSMjdW5hbWUoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFx0XFx0XFxcXFxcbiA0NDY6XFx0eyByZXR1cm4gdGVzdF9iaXQoUEdfIyNsbmFtZSwgXFx1MDAyNnBvbGljeShwYWdlLCAwKS1cXHUwMDNlZmxhZ3MuZik7IH1cXG4gNDQ3OlxcdFxcbiA0NDg6XFx0I2RlZmluZSBTRVRQQUdFRkxBRyh1bmFtZSwgbG5hbWUsIHBvbGljeSlcXHRcXHRcXHRcXHRcXFxcXFxuIDQ0OTpcXHRGT0xJT19TRVRfRkxBRyhsbmFtZSwgRk9MSU9fIyNwb2xpY3kpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA0NTA6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIFNldFBhZ2UjI3VuYW1lKHN0cnVjdCBwYWdlICpwYWdlKVxcdFxcdFxcXFxcXG4gNDUxOlxcdHsgc2V0X2JpdChQR18jI2xuYW1lLCBcXHUwMDI2cG9saWN5KHBhZ2UsIDEpLVxcdTAwM2VmbGFncy5mKTsgfVxcbiA0NTI6XFx0XFxuIDQ1MzpcXHQjZGVmaW5lIENMRUFSUEFHRUZMQUcodW5hbWUsIGxuYW1lLCBwb2xpY3kpXFx0XFx0XFx0XFx0XFxcXFxcbiA0NTQ6XFx0Rk9MSU9fQ0xFQVJfRkxBRyhsbmFtZSwgRk9MSU9fIyNwb2xpY3kpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA0NTU6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIENsZWFyUGFnZSMjdW5hbWUoc3RydWN0IHBhZ2UgKnBhZ2UpXFx0XFx0XFxcXFxcbiA0NTY6XFx0eyBjbGVhcl9iaXQoUEdfIyNsbmFtZSwgXFx1MDAyNnBvbGljeShwYWdlLCAxKS1cXHUwMDNlZmxhZ3MuZik7IH1cXG4gNDU3OlxcdFxcbiA0NTg6XFx0I2RlZmluZSBfX1NFVFBBR0VGTEFHKHVuYW1lLCBsbmFtZSwgcG9saWN5KVxcdFxcdFxcdFxcdFxcXFxcXG4gNDU5OlxcdF9fRk9MSU9fU0VUX0ZMQUcobG5hbWUsIEZPTElPXyMjcG9saWN5KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gNDYwOlxcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX1NldFBhZ2UjI3VuYW1lKHN0cnVjdCBwYWdlICpwYWdlKVxcdFxcdFxcXFxcXG4gNDYxOlxcdHsgX19zZXRfYml0KFBHXyMjbG5hbWUsIFxcdTAwMjZwb2xpY3kocGFnZSwgMSktXFx1MDAzZWZsYWdzLmYpOyB9XFxuIDQ2MjpcXHRcXG4gNDYzOlxcdCNkZWZpbmUgX19DTEVBUlBBR0VGTEFHKHVuYW1lLCBsbmFtZSwgcG9saWN5KVxcdFxcdFxcdFxcdFxcXFxcXG4gNDY0OlxcdF9fRk9MSU9fQ0xFQVJfRkxBRyhsbmFtZSwgRk9MSU9fIyNwb2xpY3kpXFx0XFx0XFx0XFx0XFxcXFxcbiA0NjU6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fQ2xlYXJQYWdlIyN1bmFtZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXHRcXFxcXFxuIDQ2NjpcXHR7IF9fY2xlYXJfYml0KFBHXyMjbG5hbWUsIFxcdTAwMjZwb2xpY3kocGFnZSwgMSktXFx1MDAzZWZsYWdzLmYpOyB9XFxuIDQ2NzpcXHRcXG4gNDY4OlxcdCNkZWZpbmUgVEVTVFNFVEZMQUcodW5hbWUsIGxuYW1lLCBwb2xpY3kpXFx0XFx0XFx0XFx0XFxcXFxcbiA0Njk6XFx0Rk9MSU9fVEVTVF9TRVRfRkxBRyhsbmFtZSwgRk9MSU9fIyNwb2xpY3kpXFx0XFx0XFx0XFx0XFxcXFxcbiA0NzA6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgVGVzdFNldFBhZ2UjI3VuYW1lKHN0cnVjdCBwYWdlICpwYWdlKVxcdFxcXFxcXG4gNDcxOlxcdHsgcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoUEdfIyNsbmFtZSwgXFx1MDAyNnBvbGljeShwYWdlLCAxKS1cXHUwMDNlZmxhZ3MuZik7IH1cXG4gNDcyOlxcdFxcbiA0NzM6XFx0I2RlZmluZSBURVNUQ0xFQVJGTEFHKHVuYW1lLCBsbmFtZSwgcG9saWN5KVxcdFxcdFxcdFxcdFxcXFxcXG4gNDc0OlxcdEZPTElPX1RFU1RfQ0xFQVJfRkxBRyhsbmFtZSwgRk9MSU9fIyNwb2xpY3kpXFx0XFx0XFx0XFx0XFxcXFxcbiA0NzU6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgVGVzdENsZWFyUGFnZSMjdW5hbWUoc3RydWN0IHBhZ2UgKnBhZ2UpXFx0XFxcXFxcbiA0NzY6XFx0eyByZXR1cm4gdGVzdF9hbmRfY2xlYXJfYml0KFBHXyMjbG5hbWUsIFxcdTAwMjZwb2xpY3kocGFnZSwgMSktXFx1MDAzZWZsYWdzLmYpOyB9XFxuIDQ3NzpcXHRcXG4gNDc4OlxcdCNkZWZpbmUgUEFHRUZMQUcodW5hbWUsIGxuYW1lLCBwb2xpY3kpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA0Nzk6XFx0XFx0VEVTVFBBR0VGTEFHKHVuYW1lLCBsbmFtZSwgcG9saWN5KVxcdFxcdFxcdFxcdFxcXFxcXG4gNDgwOlxcdFxcdFNFVFBBR0VGTEFHKHVuYW1lLCBsbmFtZSwgcG9saWN5KVxcdFxcdFxcdFxcdFxcXFxcXG4gNDgxOlxcdFxcdENMRUFSUEFHRUZMQUcodW5hbWUsIGxuYW1lLCBwb2xpY3kpXFxuIDQ4MjpcXHRcXG4gNDgzOlxcdCNkZWZpbmUgX19QQUdFRkxBRyh1bmFtZSwgbG5hbWUsIHBvbGljeSlcXHRcXHRcXHRcXHRcXFxcXFxuIDQ4NDpcXHRcXHRURVNUUEFHRUZMQUcodW5hbWUsIGxuYW1lLCBwb2xpY3kpXFx0XFx0XFx0XFx0XFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjozNzozNC40NTgwODU0NTVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTc0NTAzNTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29kZSBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGRpZmYgYW5kIGltbWVkaWF0ZWx5IG15IGJyYWluIGZsYWdzIHRoZSBjaGFuZ2UuIFNwZWNpZmljYWxseSwgSSdtIHplcm9pbmcgaW4gb24gdGhlIHNoaWZ0IGZyb20gYFRFU1RQQUdFRkxBR2AgYW5kIGBURVNUU0NGTEFHYCB0byBgRk9MSU9fVEVTVF9GTEFHYCBhbmQgYEZPTElPX1RFU1RfU0VUX0ZMQUdgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRoaXMgbWVhbnMsIGVzcGVjaWFsbHkgYmVjYXVzZSBvZiB0aGUgcmVtb3ZhbCBvZiBQRl9OT19UQUlMLiBJIHJlY29nbml6ZSBgUEZfTk9fVEFJTGAgYXMgYSBmYW1pbGlhciBmbGFnLCBidXQgSSdtIG1vbWVudGFyaWx5IHN0dW1wZWQgb24gYFRFU1RTQ0ZMQUdgLiBNeSByZWZsZXggaXMgdG8ganVtcCBpbnRvIHRoZSBoZWFkZXJzOyBJJ20gcHJldHR5IHN1cmUgSSdsbCBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIGBURVNUU0NGTEFHYCBpbiBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgIG9yIHNvbWV0aGluZyBzaW1pbGFybHkgbmFtZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgRk9MSU9gLWJhc2VkIGFwcHJvYWNoIGlzIHJlYWxseSBkb2luZyB0byB0aGUgcGFnZSBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gdGhlIG9sZGVyIHBhZ2UtZmxhZyBtZWNoYW5pc21zIHRvIGFjY3VyYXRlbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9uIHRoZSB3cml0ZWJhY2sgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA2NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM3OjM2LjYzMjU5MzA0N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2NzgzOTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlRFU1RTQ0ZMQUdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9NDc1PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IFRlc3RDbGVhclBhZ2UjI3VuYW1lKHN0cnVjdCBwYWdlICpwYWdlKVxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTQ4Ny1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo0ODg6I2RlZmluZSBURVNUU0NGTEFHKHVuYW1lLCBsbmFtZSwgcG9saWN5KVxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC00ODktXFx0VEVTVFNFVEZMQUcodW5hbWUsIGxuYW1lLCBwb2xpY3kpXFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9NTM3PXN0YXRpYyBpbmxpbmUgaW50IFRlc3RDbGVhclBhZ2UjI3VuYW1lKHN0cnVjdCBwYWdlICpwYWdlKSB7IHJldHVybiAwOyB9XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC01NDEtXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6NTQyOiNkZWZpbmUgVEVTVFNDRkxBR19GQUxTRSh1bmFtZSwgbG5hbWUpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTU0My1cXHRURVNUU0VURkxBR19GQUxTRSh1bmFtZSwgbG5hbWUpIFRFU1RDTEVBUkZMQUdfRkFMU0UodW5hbWUsIGxuYW1lKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9NTQ3PUZPTElPX0ZMQUcocmVmZXJlbmNlZCwgRk9MSU9fSEVBRF9QQUdFKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNTQ5LVxcdF9fRk9MSU9fU0VUX0ZMQUcocmVmZXJlbmNlZCwgRk9MSU9fSEVBRF9QQUdFKVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjU1MDpQQUdFRkxBRyhEaXJ0eSwgZGlydHksIFBGX0hFQUQpIFRFU1RTQ0ZMQUcoRGlydHksIGRpcnR5LCBQRl9IRUFEKVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTU1MS1cXHRfX0NMRUFSUEFHRUZMQUcoRGlydHksIGRpcnR5LCBQRl9IRUFEKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9NTYyPVBBR0VGTEFHKFBpbm5lZCwgcGlubmVkLCBQRl9OT19DT01QT1VORClcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo1NjM6XFx0VEVTVFNDRkxBRyhQaW5uZWQsIHBpbm5lZCwgUEZfTk9fQ09NUE9VTkQpXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNTY0LVBBR0VGTEFHKFNhdmVQaW5uZWQsIHNhdmVwaW5uZWQsIFBGX05PX0NPTVBPVU5EKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTY1Mz1QQUdFRkxBRyhIV1BvaXNvbiwgaHdwb2lzb24sIFBGX0FOWSlcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo2NTQ6VEVTVFNDRkxBRyhIV1BvaXNvbiwgaHdwb2lzb24sIFBGX0FOWSlcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC02NTUtI2RlZmluZSBfX1BHX0hXUE9JU09OICgxVUwgXFx1MDAzY1xcdTAwM2MgUEdfaHdwb2lzb24pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD02NTc9UEFHRUZMQUdfRkFMU0UoSFdQb2lzb24sIGh3cG9pc29uKVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjY1ODpURVNUU0NGTEFHX0ZBTFNFKEhXUG9pc29uLCBod3BvaXNvbilcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC02NTktI2RlZmluZSBfX1BHX0hXUE9JU09OIDBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzc6MzYuODA5MzkwNTk0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1ODAxNDc5MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGbGFnIE1hY3JvcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSBgVEVTVFNDRkxBRyh1bmFtZSwgbG5hbWUsIHBvbGljeSlgIGV4cGFuZHMgaW50byBhIGBURVNUU0VURkxBR2AgYW5kIGEgYFRFU1RDTEVBUkZMQUdgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gU28sIGBURVNUU0VURkxBR2AgZ2VuZXJhdGVzIGBGT0xJT19URVNUX1NFVF9GTEFHKGxuYW1lLCBGT0xJT18jI3BvbGljeSlgIGFuZCBgVGVzdFNldFBhZ2UjI3VuYW1lKHN0cnVjdCBwYWdlICpwYWdlKWAsIGFuZCBgVEVTVENMRUFSRkxBR2AgZ2VuZXJhdGVzIGBGT0xJT19URVNUX0NMRUFSX0ZMQUcobG5hbWUsIEZPTElPXyMjcG9saWN5KWAgYWxvbmcgd2l0aCBgVGVzdENsZWFyUGFnZSMjdW5hbWUoc3RydWN0IHBhZ2UgKnBhZ2UpYC4gV2UgYWxzbyBoYXZlIGBURVNUUEFHRUZMQUdgLCB3aGljaCBkZWZpbmVzIGBGT0xJT19URVNUX0ZMQUcobG5hbWUsIEZPTElPXyMjcG9saWN5KWAgYW5kIGBQYWdlIyN1bmFtZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlgLlxuXG5Ob3csIHdpdGggdGhpcyBzcGVjaWZpYyBwYXRjaCwgaXQgbG9va3MgbGlrZSB0aGV5J3ZlIHJlcGxhY2VkIGBURVNUUEFHRUZMQUcoV3JpdGViYWNrLCB3cml0ZWJhY2ssIFBGX05PX1RBSUwpYCBhbmQgYFRFU1RTQ0ZMQUcoV3JpdGViYWNrLCB3cml0ZWJhY2ssIFBGX05PX1RBSUwpYCB3aXRoIGBGT0xJT19URVNUX0ZMQUcod3JpdGViYWNrLCBGT0xJT19IRUFEX1BBR0UpYCBhbmQgYEZPTElPX1RFU1RfU0VUX0ZMQUcod3JpdGViYWNrLCBGT0xJT19IRUFEX1BBR0UpYC4gSG1tLCB0aGF0J3MgYSBzaWduaWZpY2FudCBjaGFuZ2UuXG5cbldoYXQgd2FzIHJlbW92ZWQ/IFdlbGwsIGNsZWFybHkgd2UgbG9zdCBgUGFnZVdyaXRlYmFjayhwYWdlKWAsIGBUZXN0U2V0UGFnZVdyaXRlYmFjayhwYWdlKWAsIGBUZXN0Q2xlYXJQYWdlV3JpdGViYWNrKHBhZ2UpYCBhbmQgYWxzbyBgZm9saW9fdGVzdF9jbGVhcl93cml0ZWJhY2soZm9saW8pYC4gQnV0IHdoeT8gR2l2ZW4gdGhhdCBgVEVTVFNDRkxBR2AgaW5jbHVkZWQgYSBgVEVTVENMRUFSRkxBR2AsIHRoYXQgZnVuY3Rpb24gd2FzIHJlbW92ZWQgd2hlbiBpdCB3YXMgbm8gbG9uZ2VyIHVzZWQuIFRoaXMgbWVhbnMgdGhhdCB0aGVzZSBvbGRlciBmdW5jdGlvbnMgbWlnaHQgaGF2ZSBiZWVuIGNvbXBsZXRlbHkgZWxpbWluYXRlZCBiZWNhdXNlIHRoZXkgYXJlIG5vIGxvbmdlciBuZWNlc3NhcnksIG9yIG1vcmUgbGlrZWx5LCBiZWNhdXNlIHRoZXkgYXJlIG1hZGUgcmVkdW5kYW50IGJ5IGRpcmVjdCBhY2Nlc3MgdG8gdGhlIGBmb2xpb2Agb2JqZWN0LlxuXG5UbyBmdWxseSB1bmRlcnN0YW5kIHRoZSAqd2h5KiwgSSByZWFsbHkgbmVlZCB0byBjaGVjayB0aGUgY29tbWl0IGxvZy4gSSBzaG91bGQgZ28gbG9vayBmb3IgdGhlIGNvbW1pdCBtZXNzYWdlIGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4gSXQncyBsaWtlbHkgdGhlIGFuc3dlciBpcyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA2OCwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjozNzo0MC4zODk1NTE3NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc2MzMzNTk1MywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUGFnZVdyaXRlYmFja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzc6NDQuMTUyODk5OTIzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyOTkyNzQwMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqRmluZGluZyB0aGUgV3JpdGViYWNrIEZsYWcncyBGb290cHJpbnQqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSB0aGUgd3JpdGViYWNrIG1lY2hhbmlzbSwgYW5kIEkndmUgaGl0IGEgc25hZy4gVGhlIGZ1bmN0aW9uIGBQYWdlV3JpdGViYWNrYOKAlHRoZSBvbmUgdGhhdCdzIHN1cHBvc2VkIHRvIGhhbmRsZSwgb3IgYXQgbGVhc3Qgc2lnbmFsLCB0aGUgd3JpdGViYWNrIHN0YXRl4oCUaXNuJ3Qgc2hvd2luZyB1cCBpbiBhbnkgb2YgdGhlIHN5bWJvbCB0YWJsZXMuIFRoYXQncyBpbW1lZGlhdGVseSBzdXNwaWNpb3VzLiBUaGlzIGxpa2VseSBtZWFucyBpdCBpc24ndCBhIGRpcmVjdCBleHBvcnRlZCBmdW5jdGlvbiwgb3IgaXQgbWlnaHQgYmUgcmVuYW1lZCBhdCBjb21waWxlIHRpbWUsIG9yIEknbSBzaW1wbHkgbG9va2luZyBpbiB0aGUgd3JvbmcgcGxhY2UuXG5cbkdpdmVuIHRoYXQgYFBhZ2VXcml0ZWJhY2tgIGlzIGEgZnVuZGFtZW50YWwgY29uY2VwdCwgSSBzaG91bGQgaGF2ZSBzZWVuIHNvbWV0aGluZy4gT2theSwgbGV0J3MgYmFjayB1cCBhIHN0ZXAuIENvdWxkIGl0IGJlIGEgcmVsYXRlZCBmdW5jdGlvbiBvciBhIG1hY3JvPyBMZXQncyB0cnkgbG9va2luZyBmb3IgZnVuY3Rpb24gbmFtZXMgdGhhdCBzZWVtIHJlbGF0ZWQgdG8gdGhlIHdyaXRlYmFjayBmdW5jdGlvbmFsaXR5LCBuYW1lcyB0aGF0IGNvdWxkIGludGVyYWN0IHdpdGggdGhlIHdyaXRlYmFjayBmbGFnLiBgVGVzdFNldFBhZ2VXcml0ZWJhY2tgIGFuZCBgVGVzdENsZWFyUGFnZVdyaXRlYmFja2AgaW1tZWRpYXRlbHkgY29tZSB0byBtaW5kLiBUaGVzZSBmdW5jdGlvbnMgd291bGQgYmUgdGhlIG9wZXJhdGlvbnMgcmVsYXRlZCB0byBxdWVyeWluZyBhbmQgdXBkYXRpbmcgYSBmbGFnLiBJdCdzIGxpa2VseSB0aGF0IGBQYWdlV3JpdGViYWNrYCdzIHdvcmsgaXMgaGFuZGxlZCBieSB0aGVzZS4gSXQgbWlnaHQgYmUgYSBtYWNybywgb3Igc29tZXRoaW5nIHRoYXQgaXMgaW5saW5lZCwgb3Igc29tZSBvdGhlciBwaWVjZSBvZiBtYWdpYyB0aGUga2VybmVsIGNhbiBkbyEgTGV0J3MgZm9sbG93IHRob3NlIGJyZWFkY3J1bWJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODcyLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzc6NDYuNDUyMTc3MjYyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDkzMzQyODk3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJUZXN0KFNldHxDbGVhcilQYWdlV3JpdGViYWNrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjozNzo1MC41NDU1Mjk0MzlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA0MjI3NDc3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gV3JpdGViYWNrIFRlc3RzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHdyaXRlYmFjayBmdW5jdGlvbmFsaXR5LCBzcGVjaWZpY2FsbHkgaW4gdGhlIGNvbnRleHQgb2Ygb3VyIGZvbGlvIHN5c3RlbS4gSSdtIGhpdHRpbmcgYSBzbmFnIG9yIG5lZWQgdG8gY2xhcmlmeSBzb21ldGhpbmcuIE15IG1pbmQgaXMgaW1tZWRpYXRlbHkgZHJhd24gdG8gdGhvc2UgdGVzdCBmdW5jdGlvbnM6IGBmb2xpb190ZXN0X3dyaXRlYmFja2AgYW5kIGBmb2xpb190ZXN0X3NldF93cml0ZWJhY2tgLiBJdCdzIGxpa2VseSB0aGV5J3JlIGNyaXRpY2FsIGZvciB2YWxpZGF0aW5nIHRoZSB3cml0ZWJhY2sgbWVjaGFuaXNtLCBidXQgdGhlIGV4YWN0IGZsb3cgYW5kIGludGVyYWN0aW9ucyB0aGVzZSBmdW5jdGlvbnMgcmVwcmVzZW50IG5lZWQgZnVydGhlciBpbnZlc3RpZ2F0aW9uLCBzcGVjaWZpY2FsbHkgaG93IHRoZXkgYXJlIHVzZWQsIHdoYXQgdGhleSB0ZXN0LCBhbmQgaG93IHRoZSByZXN1bHRzIGNhbiBiZSB2ZXJpZmllZCBhbmQgaW50ZXJwcmV0ZWQuIFVuZGVyc3RhbmRpbmcgdGhlIG51YW5jZXMgb2YgdGhlc2UgZnVuY3Rpb25zIGlzIGtleSB0byBncmFzcGluZyB0aGUgaW50ZWdyaXR5IG9mIHRoZSB3cml0ZWJhY2sgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTIzMywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM3OjUyLjU4NzgwOTQyM1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM1OTQ0NTAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmb2xpb190ZXN0X3NldF93cml0ZWJhY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZS13cml0ZWJhY2suYz0yOTg5PXZvaWQgX19mb2xpb19zdGFydF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBrZWVwX3dyaXRlKVxcbi0tXFxubW0vcGFnZS13cml0ZWJhY2suYy0zMDA2LVxcdFxcdHhhc19sb2FkKFxcdTAwMjZ4YXMpO1xcbm1tL3BhZ2Utd3JpdGViYWNrLmM6MzAwNzpcXHRcXHRmb2xpb190ZXN0X3NldF93cml0ZWJhY2soZm9saW8pO1xcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMzAwOC1cXG4tLVxcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMzAzMC1cXHR9IGVsc2Uge1xcbm1tL3BhZ2Utd3JpdGViYWNrLmM6MzAzMTpcXHRcXHRmb2xpb190ZXN0X3NldF93cml0ZWJhY2soZm9saW8pO1xcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMzAzMi1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM3OjU1Ljk0NzI2MjY2M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTU4MDY0NTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgZm9saW9fdGVzdF9jbGVhcl93cml0ZWJhY2tgKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gaXQuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHdpdGggYGZvbGlvX3Rlc3RfY2xlYXJfd3JpdGViYWNrYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbmFsaXR5IGluc2lkZSBhbmQgb3V0LiBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIHRob3JvdWdoIGNoZWNrIOKAkyBkaXNzZWN0IHRoZSBjb2RlLCBpZGVudGlmeSB0aGUgcHVycG9zZSBvZiB0aGlzIGNvbXBvbmVudCwgYW5kIGRldGVybWluZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4gSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgaXNzdWVzLCBib3R0bGVuZWNrcywgb3IgYXJlYXMgd2hlcmUgb3B0aW1pemF0aW9uIGNvdWxkIGJlIGJlbmVmaWNpYWwuIE15IGdvYWwgaXMgdG8gYWNoaWV2ZSBhIGRlZXAgYW5kIG51YW5jZWQgdW5kZXJzdGFuZGluZyBvZiBpdHMgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2MDksIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjozNzo1OC4xMDUzMzExMzVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMDQ0NDk3ODMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX3Rlc3RfY2xlYXJfd3JpdGViYWNrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjozODowMS4zMDk3OTU1MThaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzQzMjQ1MjQ3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBLZXJuZWwgUGFnZSBGbGFnIEFic3RyYWN0aW9uIFJlZmFjdG9yaW5nKipcblxuT2theSwgc28gYGZvbGlvX3Rlc3RfY2xlYXJfd3JpdGViYWNrYCB3YXMgdW51c2VkLCB0aGF0J3MgZ29vZCB0byBrbm93LiBOb3csIGxvb2tpbmcgYXQgYGZvbGlvX3Rlc3Rfd3JpdGViYWNrYCBhbmQgYGZvbGlvX3Rlc3Rfc2V0X3dyaXRlYmFja2AsIHRob3NlIGFyZSBkaXJlY3QgZm9saW8gaGVscGVycyBmb3IgdGVzdGluZyBhbmQgc2V0dGluZyB0aGUgYFBHX3dyaXRlYmFja2AgZmxhZy4gSW50ZXJlc3RpbmdseSwgYEZPTElPX1RFU1RfRkxBRyh3cml0ZWJhY2ssIEZPTElPX0hFQURfUEFHRSlgIGFuZCBgRk9MSU9fVEVTVF9TRVRfRkxBRyh3cml0ZWJhY2ssIEZPTElPX0hFQURfUEFHRSlgIHNlZW0gdG8gbWlycm9yIGBURVNUUEFHRUZMQUcoV3JpdGViYWNrLCB3cml0ZWJhY2ssIFBGX05PX1RBSUwpYCBhbmQgYFRFU1RTQ0ZMQUcoV3JpdGViYWNrLCB3cml0ZWJhY2ssIFBGX05PX1RBSUwpYC5cblxuTGV0IG1lIGNoZWNrIGhvdyBgVEVTVFBBR0VGTEFHYCBleHBhbmRzLiBJdCdzIGVzc2VudGlhbGx5IGNhbGxpbmcgYEZPTElPX1RFU1RfRkxBR2AsIGFuZCB0aGVuIGNhbGxpbmcgYSBzdGF0aWMgZnVuY3Rpb24gd2l0aCBgdGVzdF9iaXRgIG9uIHRoZSByZWxldmFudCBmbGFnLiBgRk9MSU9fUEZfTk9fVEFJTGAgaXMgZGVmaW5lZCBhcyAwLCBhbmQgYEZPTElPX0hFQURfUEFHRWAgaXMgYWxzbyAwLlxuXG5TbywgYEZPTElPX1RFU1RfRkxBRyh3cml0ZWJhY2ssIEZPTElPX0hFQURfUEFHRSlgIHJlc29sdmVzIHRvIGB0ZXN0X2JpdChQR193cml0ZWJhY2ssIGNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSlgLCB3aGljaCBpcyBpZGVudGljYWwgdG8gd2hhdCBgVEVTVFBBR0VGTEFHKFdyaXRlYmFjaywgd3JpdGViYWNrLCBQRl9OT19UQUlMKWAgY3JlYXRlcy4gVGhlIHNhbWUgaG9sZHMgdHJ1ZSBmb3IgYGZvbGlvX3Rlc3Rfc2V0X3dyaXRlYmFja2AgYW5kIGBURVNUU0VURkxBR2AuXG5cblRoZXJlZm9yZSwgdGhlIHBhZ2UtYmFzZWQgaGVscGVycyBsaWtlIGBQYWdlV3JpdGViYWNrYCwgYFRlc3RTZXRQYWdlV3JpdGViYWNrYCwgZXRjLiBhcmUgYmVpbmcgcmVtb3ZlZCBiZWNhdXNlIHRoZXkgYXJlIG5vIGxvbmdlciBuZWVkZWQsIGJlY2F1c2UgdGhlIGZvbGlvIHZlcnNpb24gaXMgaWRlbnRpY2FsLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIGZ1enppbmcgZ3VpZGVsaW5lcy4gV2UndmUgZ290IHRvIGJlIGNhcmVmdWwgYW5kIG5vdCBibGluZGx5IHRydXN0IGNsYWltcyBvZiBcIm5vIGZ1bmN0aW9uYWwgY2hhbmdlXCIgb3IgXCJyZWZhY3RvcmluZy5cIiBUaGUgZ3VpZGVsaW5lcyBzYXkgYW55IHJlZmFjdG9yaW5nIG9mIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgbXVzdCBiZSBmdXp6ZWQuXG5cbkxvb2tpbmcgYXQgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhLCBkb2VzIHRoaXMgZmFsbCBpbnRvIGFueSBvZiB0aG9zZSBjYXRlZ29yaWVzPyBJdCdzIG5vdCBkb2N1bWVudGF0aW9uLCBhIHVzZXItc3BhY2UgY2hhbmdlLCBkZWNvcmF0aXZlIGxvZ2dpbmcsIG9yIGEgYnVpbGQgc3lzdGVtIGNoYW5nZSB0aGF0IGRvZXNuJ3QgYWZmZWN0IEMgbG9naWMuIEl0J3Mgbm90IHVucmVhY2hhYmxlIGhhcmR3YXJlIG9yIGNvZGUuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgcG9zaXRpdmUgY3JpdGVyaWEuIFRoaXMgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgKGBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaGApLCBpdCByZXN0cnVjdHVyZXMgZm9saW8gZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmbGFnIGFic3RyYWN0aW9ucy4gU28sIHRoaXMgZGVmaW5pdGVseSBmYWxscyBpbnRvIHRoZSBjYXRlZ29yeSBvZiBcInJlZmFjdG9yaW5ncyBhbmQgY29kZSBjbGVhbnVwcyB0aGF0IHJlc3RydWN0dXJlIGRhdGEgc3RydWN0dXJlcy5cIiBUaGlzIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2UuXG5cblNvIGBXb3J0aEZ1enppbmdgIG11c3QgYmUgYHRydWVgLlxuXG5Ob3cgbGV0J3MgZGV0ZXJtaW5lIHRoZSBjb25maWd1cmF0aW9ucyBhbmQgZm9jdXMgc3ltYm9scy4gSXQncyBlc3NlbnRpYWwgdGhhdCB3ZSBkbyB0aGlzIHJpZ2h0LiBJIG5lZWQgdG8gc3RhcnQgZmlndXJpbmcgb3V0IHdoaWNoIGNvbmZpZ3VyYXRpb25zIGFyZSBtb3N0IHJlbGV2YW50IGFuZCBpZGVudGlmeSBhbnkgbm9uLXViaXF1aXRvdXMgZnVuY3Rpb25zIHRoYXQgYXJlIG1vZGlmaWVkLiBUbyBoZWxwIHdpdGggdGhhdCBJIHNob3VsZCBsb29rIGF0IGBmb2xpb190ZXN0X3dyaXRlYmFja2AgY2FsbGVycyBhY3Jvc3MgdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTgwNSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzg6MDguNzQyMjUxNzQ1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTE3MDMxMjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX3Rlc3Rfd3JpdGViYWNrXFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2tlcm5lbC91di5jPTMxNj1pbnQgX19tYWtlX2ZvbGlvX3NlY3VyZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgdXZfY2JfaGVhZGVyICp1dmNiKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTMxOS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6MzIwOlxcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTMyMS1cXHRcXHRyZXR1cm4gLUVCVVNZO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYmFja3VwLmM9MTAzPXR0bV9iYWNrdXBfYmFja3VwX2ZvbGlvKHN0cnVjdCBmaWxlICpiYWNrdXAsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iYWNrdXAuYy0xNjMtXFx0XFx0cmV0ID0gc2htZW1fd3JpdGVfZm9saW8odG9fZm9saW8pO1xcbmRyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JhY2t1cC5jOjE2NDpcXHRcXHRcXHRpZiAoIWZvbGlvX3Rlc3Rfd3JpdGViYWNrKHRvX2ZvbGlvKSlcXG5kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iYWNrdXAuYy0xNjUtXFx0XFx0XFx0XFx0Zm9saW9fY2xlYXJfcmVjbGFpbSh0b19mb2xpbyk7XFxuLS1cXG5mcy9haW8uYz00NjA9c3RhdGljIGludCBhaW9fbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpkc3QsXFxuLS1cXG5mcy9haW8uYy00OTctXFx0LyogV3JpdGViYWNrIG11c3QgYmUgY29tcGxldGUgKi9cXG5mcy9haW8uYzo0OTg6XFx0QlVHX09OKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKHNyYykpO1xcbmZzL2Fpby5jLTQ5OS1cXHRmb2xpb19nZXQoZHN0KTtcXG4tLVxcbmZzL2J0cmZzL2Rpc2staW8uYz00ODQ9c3RhdGljIGJvb2wgYnRyZWVfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnBfZmxhZ3MpXFxuZnMvYnRyZnMvZGlzay1pby5jLTQ4NS17XFxuZnMvYnRyZnMvZGlzay1pby5jOjQ4NjpcXHRpZiAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pIHx8IGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKVxcbmZzL2J0cmZzL2Rpc2staW8uYy00ODctXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuZnMvYnRyZnMvZXh0ZW50X2lvLmM9OTcxPXZvaWQgY2xlYXJfZm9saW9fZXh0ZW50X21hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuZnMvYnRyZnMvZXh0ZW50X2lvLmMtOTg1LVxcdEFTU0VSVCghZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpO1xcbmZzL2J0cmZzL2V4dGVudF9pby5jOjk4NjpcXHRBU1NFUlQoIWZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSk7XFxuZnMvYnRyZnMvZXh0ZW50X2lvLmMtOTg3LVxcbi0tXFxuZnMvYnRyZnMvZXh0ZW50X2lvLmM9MTgxNz1zdGF0aWMgaW50IHN1Ym1pdF9vbmVfc2VjdG9yKHN0cnVjdCBidHJmc19pbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9idHJmcy9leHRlbnRfaW8uYy0xODkyLVxcdCAqL1xcbmZzL2J0cmZzL2V4dGVudF9pby5jOjE4OTM6XFx0QVNTRVJUKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSk7XFxuZnMvYnRyZnMvZXh0ZW50X2lvLmMtMTg5NC1cXG4tLVxcbmZzL2J0cmZzL2V4dGVudF9pby5jPTI3MTY9c3RhdGljIGludCBleHRlbnRfd3JpdGVfY2FjaGVfcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5mcy9idHJmcy9leHRlbnRfaW8uYy0yODI5LVxcdFxcdFxcdCAgICBidHJmc19pc19zdWJwYWdlKGlub2RlX3RvX2ZzX2luZm8oaW5vZGUpLCBmb2xpbykpIHtcXG5mcy9idHJmcy9leHRlbnRfaW8uYzoyODMwOlxcdFxcdFxcdFxcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpXFxuZnMvYnRyZnMvZXh0ZW50X2lvLmMtMjgzMS1cXHRcXHRcXHRcXHRcXHRzdWJtaXRfd3JpdGVfYmlvKGJpb19jdHJsLCAwKTtcXG4tLVxcbmZzL2J0cmZzL2V4dGVudF9pby5jLTI4MzQtXFxuZnMvYnRyZnMvZXh0ZW50X2lvLmM6MjgzNTpcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pIHx8XFxuZnMvYnRyZnMvZXh0ZW50X2lvLmMtMjgzNi1cXHRcXHRcXHQgICAgIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKSB7XFxuLS1cXG5mcy9idHJmcy9leHRlbnRfaW8uYz0zMTY1PXN0YXRpYyB2b2lkIGRldGFjaF9leHRlbnRfYnVmZmVyX2ZvbGlvKGNvbnN0IHN0cnVjdCBleHRlbnRfYnVmZmVyICplYiwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmZzL2J0cmZzL2V4dGVudF9pby5jLTMxOTMtXFx0XFx0XFx0QlVHX09OKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKTtcXG5mcy9idHJmcy9leHRlbnRfaW8uYzozMTk0OlxcdFxcdFxcdEJVR19PTihmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpO1xcbmZzL2J0cmZzL2V4dGVudF9pby5jLTMxOTUtXFx0XFx0XFx0LyogV2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgaGF2ZW4ndCBiZSBhdHRhY2hlZCB0byBhIG5ldyBlYi4gKi9cXG4tLVxcbmZzL2J0cmZzL2lub2RlLmM9NzY0Nz1zdGF0aWMgYm9vbCBidHJmc19yZWxlYXNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcF9mbGFncylcXG5mcy9idHJmcy9pbm9kZS5jLTc2NDgte1xcbmZzL2J0cmZzL2lub2RlLmM6NzY0OTpcXHRpZiAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pIHx8IGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKVxcbmZzL2J0cmZzL2lub2RlLmMtNzY1MC1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5mcy9idHJmcy9zdWJwYWdlLmM9NDU2PXZvaWQgYnRyZnNfc3VicGFnZV9zZXRfd3JpdGViYWNrKGNvbnN0IHN0cnVjdCBidHJmc19mc19pbmZvICpmc19pbmZvLFxcbi0tXFxuZnMvYnRyZnMvc3VicGFnZS5jLTQ3NS1cXHQgKi9cXG5mcy9idHJmcy9zdWJwYWdlLmM6NDc2OlxcdGlmICghZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKVxcbmZzL2J0cmZzL3N1YnBhZ2UuYy00NzctXFx0XFx0X19mb2xpb19zdGFydF93cml0ZWJhY2soZm9saW8sIHRydWUpO1xcbi0tXFxuZnMvYnRyZnMvc3VicGFnZS5jPTQ4Mz12b2lkIGJ0cmZzX3N1YnBhZ2VfY2xlYXJfd3JpdGViYWNrKGNvbnN0IHN0cnVjdCBidHJmc19mc19pbmZvICpmc19pbmZvLFxcbi0tXFxuZnMvYnRyZnMvc3VicGFnZS5jLTQ5My1cXHRpZiAoc3VicGFnZV90ZXN0X2JpdG1hcF9hbGxfemVybyhmc19pbmZvLCBmb2xpbywgd3JpdGViYWNrKSkge1xcbmZzL2J0cmZzL3N1YnBhZ2UuYzo0OTQ6XFx0XFx0QVNTRVJUKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSk7XFxuZnMvYnRyZnMvc3VicGFnZS5jLTQ5NS1cXHRcXHRmb2xpb19lbmRfd3JpdGViYWNrKGZvbGlvKTtcXG4tLVxcbmZzL2J1ZmZlci5jPTgzPXZvaWQgYnVmZmVyX2NoZWNrX2RpcnR5X3dyaXRlYmFjayhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxuZnMvYnVmZmVyLmMtOTUtXFxuZnMvYnVmZmVyLmM6OTY6XFx0aWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSlcXG5mcy9idWZmZXIuYy05Ny1cXHRcXHQqd3JpdGViYWNrID0gdHJ1ZTtcXG4tLVxcbmZzL2J1ZmZlci5jPTE3MjE9aW50IF9fYmxvY2tfd3JpdGVfZnVsbF9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxuZnMvYnVmZmVyLmMtMTgxMC1cXHQgKi9cXG5mcy9idWZmZXIuYzoxODExOlxcdEJVR19PTihmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpO1xcbmZzL2J1ZmZlci5jLTE4MTItXFx0Zm9saW9fc3RhcnRfd3JpdGViYWNrKGZvbGlvKTtcXG4tLVxcbmZzL2J1ZmZlci5jLTE4NjQtXFx0fSB3aGlsZSAoKGJoID0gYmgtXFx1MDAzZWJfdGhpc19wYWdlKSAhPSBoZWFkKTtcXG5mcy9idWZmZXIuYzoxODY1OlxcdEJVR19PTihmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpO1xcbmZzL2J1ZmZlci5jLTE4NjYtXFx0bWFwcGluZ19zZXRfZXJyb3IoZm9saW8tXFx1MDAzZW1hcHBpbmcsIGVycik7XFxuLS1cXG5mcy9idWZmZXIuYz0yNzg0PWJvb2wgdHJ5X3RvX2ZyZWVfYnVmZmVycyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuZnMvYnVmZmVyLmMtMjc5MC1cXHRCVUdfT04oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSk7XFxuZnMvYnVmZmVyLmM6Mjc5MTpcXHRpZiAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKVxcbmZzL2J1ZmZlci5jLTI3OTItXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuZnMvY2VwaC9hZGRyLmM9MTMxMT12b2lkIGNlcGhfcHJvY2Vzc19mb2xpb19iYXRjaChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL2NlcGgvYWRkci5jLTEzMjktXFx0XFx0XFx0XFxcImZvbGlvX3Rlc3RfZGlydHkgJSN4LCBmb2xpb190ZXN0X2xvY2tlZCAlI3hcXFxcblxcXCIsXFxuZnMvY2VwaC9hZGRyLmM6MTMzMDpcXHRcXHRcXHRmb2xpbywgZm9saW8tXFx1MDAzZWluZGV4LCBmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksXFxuZnMvY2VwaC9hZGRyLmMtMTMzMS1cXHRcXHRcXHRmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSxcXG4tLVxcbmZzL2NlcGgvYWRkci5jLTEzMzMtXFxuZnMvY2VwaC9hZGRyLmM6MTMzNDpcXHRcXHRpZiAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pIHx8XFxuZnMvY2VwaC9hZGRyLmMtMTMzNS1cXHRcXHQgICAgZm9saW9fdGVzdF9wcml2YXRlXzIoZm9saW8pIC8qIFtERVBSRUNBVEVEXSAqLykge1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTE3MDY9c3RhdGljIHZvaWQgbXBhZ2VfcmVsZWFzZV91bnVzZWRfcGFnZXMoc3RydWN0IG1wYWdlX2RhX2RhdGEgKm1wZCxcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy0xNzQ4LVxcdFxcdFxcdEJVR19PTighZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pKTtcXG5mcy9leHQ0L2lub2RlLmM6MTc0OTpcXHRcXHRcXHRCVUdfT04oZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKTtcXG5mcy9leHQ0L2lub2RlLmMtMTc1MC1cXHRcXHRcXHRpZiAoaW52YWxpZGF0ZSkge1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTI2MDg9c3RhdGljIGludCBtcGFnZV9wcmVwYXJlX2V4dGVudF90b19tYXAoc3RydWN0IG1wYWdlX2RhX2RhdGEgKm1wZClcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy0yNjc0LVxcdFxcdFxcdCAqL1xcbmZzL2V4dDQvaW5vZGUuYzoyNjc1OlxcdFxcdFxcdGlmICgoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuZnMvZXh0NC9pbm9kZS5jLTI2NzYtXFx0XFx0XFx0ICAgIG1wZC1cXHUwMDNld2JjLVxcdTAwM2VzeW5jX21vZGUgPT0gV0JfU1lOQ19OT05FKSB8fFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTI2ODYtXFx0XFx0XFx0aWYgKCFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSkge1xcbmZzL2V4dDQvaW5vZGUuYzoyNjg3OlxcdFxcdFxcdFxcdGlmICghZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKSB7XFxuZnMvZXh0NC9pbm9kZS5jLTI2ODgtXFx0XFx0XFx0XFx0XFx0X19mb2xpb19zdGFydF93cml0ZWJhY2soZm9saW8sIGZhbHNlKTtcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy0yNjk1LVxcdFxcdFxcdGZvbGlvX3dhaXRfd3JpdGViYWNrKGZvbGlvKTtcXG5mcy9leHQ0L2lub2RlLmM6MjY5NjpcXHRcXHRcXHRCVUdfT04oZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKTtcXG5mcy9leHQ0L2lub2RlLmMtMjY5Ny1cXG4tLVxcbmZzL2V4dDQvbW92ZV9leHRlbnQuYz0xMTc9c3RhdGljIGludCBtZXh0X2ZvbGlvX21rdXB0b2RhdGUoc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IGZyb20sIHNpemVfdCB0bylcXG4tLVxcbmZzL2V4dDQvbW92ZV9leHRlbnQuYy0xMjYtXFx0QlVHX09OKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbykpO1xcbmZzL2V4dDQvbW92ZV9leHRlbnQuYzoxMjc6XFx0QlVHX09OKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSk7XFxuZnMvZXh0NC9tb3ZlX2V4dGVudC5jLTEyOC1cXG4tLVxcbmZzL2V4dDQvcGFnZS1pby5jPTQ2Mj12b2lkIGV4dDRfYmlvX3dyaXRlX2ZvbGlvKHN0cnVjdCBleHQ0X2lvX3N1Ym1pdCAqaW8sIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5mcy9leHQ0L3BhZ2UtaW8uYy00NzItXFx0QlVHX09OKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbykpO1xcbmZzL2V4dDQvcGFnZS1pby5jOjQ3MzpcXHRCVUdfT04oZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKTtcXG5mcy9leHQ0L3BhZ2UtaW8uYy00NzQtXFxuLS1cXG5mcy9mMmZzL2NvbXByZXNzLmM9MTA1Mj1zdGF0aWMgdm9pZCBjYW5jZWxfY2x1c3Rlcl93cml0ZWJhY2soc3RydWN0IGNvbXByZXNzX2N0eCAqY2MsXFxuLS1cXG5mcy9mMmZzL2NvbXByZXNzLmMtMTA3MS1cXHRcXHRjbGVhcl9wYWdlX3ByaXZhdGVfZ2NpbmcoY2MtXFx1MDAzZXJwYWdlc1tpXSk7XFxuZnMvZjJmcy9jb21wcmVzcy5jOjEwNzI6XFx0XFx0aWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKHBhZ2VfZm9saW8oY2MtXFx1MDAzZXJwYWdlc1tpXSkpKVxcbmZzL2YyZnMvY29tcHJlc3MuYy0xMDczLVxcdFxcdFxcdGVuZF9wYWdlX3dyaXRlYmFjayhjYy1cXHUwMDNlcnBhZ2VzW2ldKTtcXG4tLVxcbmZzL2YyZnMvY29tcHJlc3MuYz0xNDk2PXN0YXRpYyBpbnQgZjJmc193cml0ZV9yYXdfcGFnZXMoc3RydWN0IGNvbXByZXNzX2N0eCAqY2MsXFxuLS1cXG5mcy9mMmZzL2NvbXByZXNzLmMtMTU0MS1cXG5mcy9mMmZzL2NvbXByZXNzLmM6MTU0MjpcXHRcXHRpZiAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKSB7XFxuZnMvZjJmcy9jb21wcmVzcy5jLTE1NDMtXFx0XFx0XFx0aWYgKHdiYy1cXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfTk9ORSlcXG4tLVxcbmZzL2YyZnMvZGF0YS5jPTMyMjg9c3RhdGljIGludCBmMmZzX3dyaXRlX2NhY2hlX3BhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvZjJmcy9kYXRhLmMtMzQwOS1cXG5mcy9mMmZzL2RhdGEuYzozNDEwOlxcdFxcdFxcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpIHtcXG5mcy9mMmZzL2RhdGEuYy0zNDExLVxcdFxcdFxcdFxcdGlmICh3YmMtXFx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX05PTkUpXFxuLS1cXG5mcy9mMmZzL2YyZnMuaD01MTk5PXN0YXRpYyBpbmxpbmUgdm9pZCBmMmZzX3RydW5jYXRlX21ldGFfaW5vZGVfcGFnZXMoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpLFxcbi0tXFxuZnMvZjJmcy9mMmZzLmgtNTIwOS1cXHRcXHRpZiAoIUlTX0VSUihmb2xpbykpIHtcXG5mcy9mMmZzL2YyZnMuaDo1MjEwOlxcdFxcdFxcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpXFxuZnMvZjJmcy9mMmZzLmgtNTIxMS1cXHRcXHRcXHRcXHRuZWVkX3N1Ym1pdCA9IHRydWU7XFxuLS1cXG5mcy9mMmZzL2djLmM9MTUwMz1zdGF0aWMgaW50IG1vdmVfZGF0YV9wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJsb2NrX3QgYmlkeCwgaW50IGdjX3R5cGUsXFxuLS1cXG5mcy9mMmZzL2djLmMtMTUyMi1cXHRpZiAoZ2NfdHlwZSA9PSBCR19HQykge1xcbmZzL2YyZnMvZ2MuYzoxNTIzOlxcdFxcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpIHtcXG5mcy9mMmZzL2djLmMtMTUyNC1cXHRcXHRcXHRlcnIgPSAtRUFHQUlOO1xcbi0tXFxuZnMvZjJmcy9pbmxpbmUuYz0xNDY9aW50IGYyZnNfY29udmVydF9pbmxpbmVfZm9saW8oc3RydWN0IGRub2RlX29mX2RhdGEgKmRuLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuZnMvZjJmcy9pbmxpbmUuYy0xODYtXFxuZnMvZjJmcy9pbmxpbmUuYzoxODc6XFx0ZjJmc19idWdfb24oRjJGU19GX1NCKGZvbGlvKSwgZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKTtcXG5mcy9mMmZzL2lubGluZS5jLTE4OC1cXG4tLVxcbmZzL2YyZnMvaW5vZGUuYz0xNzM9Ym9vbCBmMmZzX2lub2RlX2Noa3N1bV92ZXJpZnkoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuZnMvZjJmcy9pbm9kZS5jLTE4NS1cXHRcXHRcXHRmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSB8fFxcbmZzL2YyZnMvaW5vZGUuYzoxODY6XFx0XFx0XFx0Zm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKVxcbmZzL2YyZnMvaW5vZGUuYy0xODctI2VuZGlmXFxuLS1cXG5mcy9mMmZzL25vZGUuYz0xODcwPWludCBmMmZzX3dyaXRlX3NpbmdsZV9ub2RlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqbm9kZV9mb2xpbywgaW50IHN5bmNfbW9kZSxcXG4tLVxcbmZzL2YyZnMvbm9kZS5jLTE4ODAtXFx0XFx0Lyogc2V0IHBhZ2UgZGlydHkgYW5kIHdyaXRlIGl0ICovXFxuZnMvZjJmcy9ub2RlLmM6MTg4MTpcXHRcXHRpZiAoIWZvbGlvX3Rlc3Rfd3JpdGViYWNrKG5vZGVfZm9saW8pKVxcbmZzL2YyZnMvbm9kZS5jLTE4ODItXFx0XFx0XFx0Zm9saW9fbWFya19kaXJ0eShub2RlX2ZvbGlvKTtcXG4tLVxcbmZzL2YyZnMvc2VnbWVudC5jPTQzNTI9dm9pZCBmMmZzX2ZvbGlvX3dhaXRfd3JpdGViYWNrKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gcGFnZV90eXBlIHR5cGUsXFxuLS1cXG5mcy9mMmZzL3NlZ21lbnQuYy00MzU0LXtcXG5mcy9mMmZzL3NlZ21lbnQuYzo0MzU1OlxcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpIHtcXG5mcy9mMmZzL3NlZ21lbnQuYy00MzU2LVxcdFxcdHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSA9IEYyRlNfRl9TQihmb2xpbyk7XFxuLS1cXG5mcy9mMmZzL3NlZ21lbnQuYy00MzYzLVxcdFxcdFxcdGZvbGlvX3dhaXRfd3JpdGViYWNrKGZvbGlvKTtcXG5mcy9mMmZzL3NlZ21lbnQuYzo0MzY0OlxcdFxcdFxcdGYyZnNfYnVnX29uKHNiaSwgbG9ja2VkIFxcdTAwMjZcXHUwMDI2IGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSk7XFxuZnMvZjJmcy9zZWdtZW50LmMtNDM2NS1cXHRcXHR9IGVsc2Uge1xcbi0tXFxuZnMvZnMtd3JpdGViYWNrLmM9NDA1PXN0YXRpYyBib29sIGlub2RlX2RvX3N3aXRjaF93YnMoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2ZzLXdyaXRlYmFjay5jLTQ0NS1cXHRcXHRsb25nIG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbmZzL2ZzLXdyaXRlYmFjay5jOjQ0NjpcXHRcXHRXQVJOX09OX09OQ0UoIWZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSk7XFxuZnMvZnMtd3JpdGViYWNrLmMtNDQ3LVxcdFxcdHdiX3N0YXRfbW9kKG9sZF93YiwgV0JfV1JJVEVCQUNLLCAtbnIpO1xcbi0tXFxuZnMvZnVzZS9kZXYuYz0xMTIzPXN0YXRpYyBpbnQgZnVzZV90cnlfbW92ZV9mb2xpbyhzdHJ1Y3QgZnVzZV9jb3B5X3N0YXRlICpjcywgc3RydWN0IGZvbGlvICoqZm9saW9wKVxcbi0tXFxuZnMvZnVzZS9kZXYuYy0xMTcyLVxcdGlmIChXQVJOX09OKGZvbGlvX3Rlc3RfZGlydHkob2xkZm9saW8pIHx8XFxuZnMvZnVzZS9kZXYuYzoxMTczOlxcdFxcdFxcdFxcdGZvbGlvX3Rlc3Rfd3JpdGViYWNrKG9sZGZvbGlvKSkpXFxuZnMvZnVzZS9kZXYuYy0xMTc0LVxcdFxcdGdvdG8gb3V0X2ZhbGxiYWNrX3VubG9jaztcXG4tLVxcbmZzL2dmczIvYW9wcy5jPTE5MT1zdGF0aWMgaW50IGdmczJfd3JpdGVfamRhdGFfYmF0Y2goc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5mcy9nZnMyL2FvcHMuYy0yMjktXFxuZnMvZ2ZzMi9hb3BzLmM6MjMwOlxcdFxcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpIHtcXG5mcy9nZnMyL2FvcHMuYy0yMzEtXFx0XFx0XFx0aWYgKHdiYy1cXHUwMDNlc3luY19tb2RlICE9IFdCX1NZTkNfTk9ORSlcXG4tLVxcbmZzL2dmczIvYW9wcy5jLTIzNi1cXG5mcy9nZnMyL2FvcHMuYzoyMzc6XFx0XFx0QlVHX09OKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSk7XFxuZnMvZ2ZzMi9hb3BzLmMtMjM4LVxcdFxcdGlmICghZm9saW9fY2xlYXJfZGlydHlfZm9yX2lvKGZvbGlvKSlcXG4tLVxcbmZzL2dmczIvbWV0YV9pby5jPTMzPXN0YXRpYyB2b2lkIGdmczJfYXNwYWNlX3dyaXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5mcy9nZnMyL21ldGFfaW8uYy03MS1cXHQgKi9cXG5mcy9nZnMyL21ldGFfaW8uYzo3MjpcXHRCVUdfT04oZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKTtcXG5mcy9nZnMyL21ldGFfaW8uYy03My1cXHRmb2xpb19zdGFydF93cml0ZWJhY2soZm9saW8pO1xcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz04MzE9dm9pZCBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW4pXFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTg0MC1cXHRpZiAob2Zmc2V0ID09IDAgXFx1MDAyNlxcdTAwMjYgbGVuID09IGZvbGlvX3NpemUoZm9saW8pKSB7XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzo4NDE6XFx0XFx0V0FSTl9PTl9PTkNFKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSk7XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy04NDItXFx0XFx0Zm9saW9fY2FuY2VsX2RpcnR5KGZvbGlvKTtcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9MTk4MD1pbnQgaW9tYXBfd3JpdGViYWNrX2ZvbGlvKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE5OTMtXFx0V0FSTl9PTl9PTkNFKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKTtcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjE5OTQ6XFx0V0FSTl9PTl9PTkNFKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSk7XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xOTk1LVxcbi0tXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jPTQyND1zdGF0aWMgaW50IG1ldGFwYWdlX3dyaXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtNDQ2LVxcdEJVR19PTighZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pKTtcXG5mcy9qZnMvamZzX21ldGFwYWdlLmM6NDQ3OlxcdEJVR19PTihmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpO1xcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy00NDgtXFx0Zm9saW9fc3RhcnRfd3JpdGViYWNrKGZvbGlvKTtcXG4tLVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYz02NjU9c3RhdGljIHZvaWQgbWV0YXBhZ2VfaW52YWxpZGF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LFxcbi0tXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTY2OS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmM6NjcwOlxcdEJVR19PTihmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpO1xcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy02NzEtXFxuLS1cXG5mcy9tcGFnZS5jPTQ1Mz1zdGF0aWMgaW50IG1wYWdlX3dyaXRlX2ZvbGlvKHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxuZnMvbXBhZ2UuYy02MTgtXFxuZnMvbXBhZ2UuYzo2MTk6XFx0QlVHX09OKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSk7XFxuZnMvbXBhZ2UuYy02MjAtXFx0Zm9saW9fc3RhcnRfd3JpdGViYWNrKGZvbGlvKTtcXG4tLVxcbmZzL25ldGZzL3dyaXRlX2NvbGxlY3QuYz0xMTQ9c3RhdGljIHZvaWQgbmV0ZnNfd3JpdGViYWNrX3VubG9ja19mb2xpb3Moc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEsXFxuLS1cXG5mcy9uZXRmcy93cml0ZV9jb2xsZWN0LmMtMTQ2LVxcdFxcdGZvbGlvID0gZm9saW9xX2ZvbGlvKGZvbGlvcSwgc2xvdCk7XFxuZnMvbmV0ZnMvd3JpdGVfY29sbGVjdC5jOjE0NzpcXHRcXHRpZiAoV0FSTl9PTkNFKCFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksXFxuZnMvbmV0ZnMvd3JpdGVfY29sbGVjdC5jLTE0OC1cXHRcXHRcXHQgICAgICBcXFwiUj0lMDh4OiBmb2xpbyAlbHggaXMgbm90IHVuZGVyIHdyaXRlYmFja1xcXFxuXFxcIixcXG4tLVxcbmZzL25mcy93cml0ZS5jPTIwNDU9aW50IG5mc193Yl9mb2xpb19yZWNsYWltKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5mcy9uZnMvd3JpdGUuYy0yMDU3LVxcbmZzL25mcy93cml0ZS5jOjIwNTg6XFx0aWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSlcXG5mcy9uZnMvd3JpdGUuYy0yMDU5LVxcdFxcdHJldHVybiAtRUJVU1k7XFxuLS1cXG5mcy9uaWxmczIvcGFnZS5jPTE5Nj1zdGF0aWMgdm9pZCBuaWxmc19jb3B5X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZHN0LCBzdHJ1Y3QgZm9saW8gKnNyYyxcXG4tLVxcbmZzL25pbGZzMi9wYWdlLmMtMjAxLVxcbmZzL25pbGZzMi9wYWdlLmM6MjAyOlxcdEJVR19PTihmb2xpb190ZXN0X3dyaXRlYmFjayhkc3QpKTtcXG5mcy9uaWxmczIvcGFnZS5jLTIwMy1cXG4tLVxcbmZzL25pbGZzMi9zZWdtZW50LmM9MTY4Nj1zdGF0aWMgdm9pZCBuaWxmc19iZWdpbl9mb2xpb19pbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbmZzL25pbGZzMi9zZWdtZW50LmMtMTY4Ny17XFxuZnMvbmlsZnMyL3NlZ21lbnQuYzoxNjg4OlxcdGlmICghZm9saW8gfHwgZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKVxcbmZzL25pbGZzMi9zZWdtZW50LmMtMTY4OS1cXHRcXHQvKlxcbi0tXFxuZnMvbmlsZnMyL3NlZ21lbnQuYz0xNzg3PXN0YXRpYyB2b2lkIG5pbGZzX2VuZF9mb2xpb19pbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZXJyKVxcbi0tXFxuZnMvbmlsZnMyL3NlZ21lbnQuYy0xNzkyLVxcdGlmIChidWZmZXJfbmlsZnNfbm9kZShmb2xpb19idWZmZXJzKGZvbGlvKSkgXFx1MDAyNlxcdTAwMjZcXG5mcy9uaWxmczIvc2VnbWVudC5jOjE3OTM6XFx0XFx0XFx0IWZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkge1xcbmZzL25pbGZzMi9zZWdtZW50LmMtMTc5NC1cXHRcXHQvKlxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jPTMyNjA9c3RhdGljIHZvaWQgZ2F0aGVyX3N0YXRzKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbnVtYV9tYXBzICptZCwgaW50IHB0ZV9kaXJ0eSxcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0zMjgwLVxcbmZzL3Byb2MvdGFza19tbXUuYzozMjgxOlxcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpXFxuZnMvcHJvYy90YXNrX21tdS5jLTMyODItXFx0XFx0bWQtXFx1MDAzZXdyaXRlYmFjayArPSBucl9wYWdlcztcXG4tLVxcbmZzL3ViaWZzL2ZpbGUuYz0xNDU4PXN0YXRpYyBib29sIHViaWZzX3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgdW51c2VkX2dmcF9mbGFncylcXG4tLVxcbmZzL3ViaWZzL2ZpbGUuYy0xNDYyLVxcbmZzL3ViaWZzL2ZpbGUuYzoxNDYzOlxcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpXFxuZnMvdWJpZnMvZmlsZS5jLTE0NjQtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD0yMjE9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydV9nZW5fZm9saW9fc2VxKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMjQ2LVxcdFxcdCAoZm9saW9fdGVzdF9yZWNsYWltKGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6MjQ3OlxcdFxcdCAgKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIHx8IGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkpKVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMjQ4LVxcdFxcdGdlbiA9IE1JTl9OUl9HRU5TO1xcbi0tXFxubW0vY29tcGFjdGlvbi5jPTg1NT1pc29sYXRlX21pZ3JhdGVwYWdlc19ibG9jayhzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYywgdW5zaWduZWQgbG9uZyBsb3dfcGZuLFxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTExMjctXFx0XFx0ICovXFxubW0vY29tcGFjdGlvbi5jOjExMjg6XFx0XFx0aWYgKChtb2RlIFxcdTAwMjYgSVNPTEFURV9BU1lOQ19NSUdSQVRFKSBcXHUwMDI2XFx1MDAyNiBmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpXFxubW0vY29tcGFjdGlvbi5jLTExMjktXFx0XFx0XFx0Z290byBpc29sYXRlX2ZhaWxfcHV0O1xcbi0tXFxubW0vZmlsZW1hcC5jPTYzNz1ib29sIGZpbGVtYXBfcmFuZ2VfaGFzX3dyaXRlYmFjayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbm1tL2ZpbGVtYXAuYy02NTMtXFx0XFx0aWYgKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIHx8IGZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSB8fFxcbm1tL2ZpbGVtYXAuYzo2NTQ6XFx0XFx0XFx0XFx0Zm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKVxcbm1tL2ZpbGVtYXAuYy02NTUtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9maWxlbWFwLmM9MTYwOT1zdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9maWxlbWFwLmMtMTYxNC1cXG5tbS9maWxlbWFwLmM6MTYxNTpcXHRpZiAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pIHx8IGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKVxcbm1tL2ZpbGVtYXAuYy0xNjE2LVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL2ZpbGVtYXAuYz0xNjU2PXZvaWQgZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vZmlsZW1hcC5jLTE2NTcte1xcbm1tL2ZpbGVtYXAuYzoxNjU4OlxcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pLCBmb2xpbyk7XFxubW0vZmlsZW1hcC5jLTE2NTktXFxuLS1cXG5tbS9maWxlbWFwLmM9MTY4Nz12b2lkIGZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9maWxlbWFwLmMtMTY4OC17XFxubW0vZmlsZW1hcC5jOjE2ODk6XFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksIGZvbGlvKTtcXG5tbS9maWxlbWFwLmMtMTY5MC1cXG4tLVxcbm1tL2ZpbGVtYXAuYz0yMTgyPXVuc2lnbmVkIGZpbmRfbG9ja19lbnRyaWVzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90ICpzdGFydCxcXG4tLVxcbm1tL2ZpbGVtYXAuYy0yMjA0LVxcdFxcdFxcdGlmIChmb2xpby1cXHUwMDNlbWFwcGluZyAhPSBtYXBwaW5nIHx8XFxubW0vZmlsZW1hcC5jOjIyMDU6XFx0XFx0XFx0ICAgIGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSlcXG5tbS9maWxlbWFwLmMtMjIwNi1cXHRcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4tLVxcbm1tL2ZpbGVtYXAuYz0yNDAwPXVuc2lnbmVkIGZpbGVtYXBfZ2V0X2ZvbGlvc19kaXJ0eShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCAqc3RhcnQsXFxuLS1cXG5tbS9maWxlbWFwLmMtMjQxMS1cXHRcXHRcXHRib29sIGNsZWFuID0gIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxubW0vZmlsZW1hcC5jOjI0MTI6XFx0XFx0XFx0XFx0ICAgICAhZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pO1xcbm1tL2ZpbGVtYXAuYy0yNDEzLVxcdFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuLS1cXG5tbS9maWxlbWFwLmM9Mjc2Mj1zdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kX3JlYWQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2ZpbGVtYXAuYy0yNzY1LVxcdFxcdHJldHVybjtcXG5tbS9maWxlbWFwLmM6Mjc2NjpcXHRpZiAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pIHx8IGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKVxcbm1tL2ZpbGVtYXAuYy0yNzY3LVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL2ZpbGVtYXAuYz00NTQzPWJvb2wgZmlsZW1hcF9yZWxlYXNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcXG4tLVxcbm1tL2ZpbGVtYXAuYy00NTQ5LVxcdFxcdHJldHVybiB0cnVlO1xcbm1tL2ZpbGVtYXAuYzo0NTUwOlxcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpXFxubW0vZmlsZW1hcC5jLTQ1NTEtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubW0vZm9saW8uYz01MzI9c3RhdGljIHZvaWQgbHJ1X2RlYWN0aXZhdGVfZmlsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9mb2xpby5jLTU0Ny1cXG5tbS9mb2xpby5jOjU0ODpcXHRpZiAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pIHx8IGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKSB7XFxubW0vZm9saW8uYy01NDktXFx0XFx0LypcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MzkyOT1pbnQgZm9saW9fY2hlY2tfc3BsaXR0YWJsZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zOTYwLVxcbm1tL2h1Z2VfbWVtb3J5LmM6Mzk2MTpcXHRpZiAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzk2Mi1cXHRcXHRyZXR1cm4gLUVCVVNZO1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTIyNjA9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTIzODQtXFx0XFx0XFx0XFx0Z290byB4YV91bmxvY2tlZDtcXG5tbS9raHVnZXBhZ2VkLmM6MjM4NTpcXHRcXHRcXHR9IGVsc2UgaWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkge1xcbm1tL2todWdlcGFnZWQuYy0yMzg2LVxcdFxcdFxcdFxcdHhhc191bmxvY2tfaXJxKFxcdTAwMjZ4YXMpO1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI0MjUtXFx0XFx0aWYgKCFpc19zaG1lbSBcXHUwMDI2XFx1MDAyNiAoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgfHxcXG5tbS9raHVnZXBhZ2VkLmM6MjQyNjpcXHRcXHRcXHRcXHQgIGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkpIHtcXG5tbS9raHVnZXBhZ2VkLmMtMjQyNy1cXHRcXHRcXHQvKlxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMzg2PWludCBtZW1vcnlfZmFpbHVyZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNTgxLVxcdCAqL1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjU4MjpcXHRpZiAoIWZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjU4My1cXHRcXHRnb3RvIGlkZW50aWZ5X3BhZ2Vfc3RhdGU7XFxuLS1cXG5tbS9tZW1vcnkuYz00ODQ0PXZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNTA5OC1cXHRcXHRcXHRleGNsdXNpdmUgPSB0cnVlO1xcbm1tL21lbW9yeS5jOjUwOTk6XFx0XFx0fSBlbHNlIGlmIChleGNsdXNpdmUgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxubW0vbWVtb3J5LmMtNTEwMC1cXHRcXHRcXHQgIGRhdGFfcmFjZShzaS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTV1BfU1RBQkxFX1dSSVRFUykpIHtcXG4tLVxcbm1tL21pZ3JhdGUuYz03NzU9dm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9taWdyYXRlLmMtODQ3LVxcdCAqL1xcbm1tL21pZ3JhdGUuYzo4NDg6XFx0aWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKG5ld2ZvbGlvKSlcXG5tbS9taWdyYXRlLmMtODQ5LVxcdFxcdGZvbGlvX2VuZF93cml0ZWJhY2sobmV3Zm9saW8pO1xcbi0tXFxubW0vbWlncmF0ZS5jPTkwNz1pbnQgbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpkc3QsXFxuLS1cXG5tbS9taWdyYXRlLmMtOTA5LXtcXG5tbS9taWdyYXRlLmM6OTEwOlxcdEJVR19PTihmb2xpb190ZXN0X3dyaXRlYmFjayhzcmMpKTtcXHQvKiBXcml0ZWJhY2sgbXVzdCBiZSBjb21wbGV0ZSAqL1xcbm1tL21pZ3JhdGUuYy05MTEtXFx0cmV0dXJuIF9fbWlncmF0ZV9mb2xpbyhtYXBwaW5nLCBkc3QsIHNyYywgTlVMTCwgbW9kZSk7XFxuLS1cXG5tbS9taWdyYXRlLmM9MTIxMz1zdGF0aWMgaW50IG1pZ3JhdGVfZm9saW9fdW5tYXAobmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcXG4tLVxcbm1tL21pZ3JhdGUuYy0xMjY1LVxcbm1tL21pZ3JhdGUuYzoxMjY2OlxcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhzcmMpKSB7XFxubW0vbWlncmF0ZS5jLTEyNjctXFx0XFx0LypcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTEwOT1zdGF0aWMgdm9pZCBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjMzLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTIzNDpcXHRcXHRCVUdfT04oZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTEyMzUtXFxuLS1cXG5tbS9wYWdlLXdyaXRlYmFjay5jPTIzNjc9c3RhdGljIGJvb2wgZm9saW9fcHJlcGFyZV93cml0ZWJhY2soc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS9wYWdlLXdyaXRlYmFjay5jLTIzODUtXFxubW0vcGFnZS13cml0ZWJhY2suYzoyMzg2OlxcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpIHtcXG5tbS9wYWdlLXdyaXRlYmFjay5jLTIzODctXFx0XFx0aWYgKHdiYy1cXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfTk9ORSlcXG4tLVxcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjM5MC1cXHR9XFxubW0vcGFnZS13cml0ZWJhY2suYzoyMzkxOlxcdEJVR19PTihmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpO1xcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjM5Mi1cXG4tLVxcbm1tL3BhZ2Utd3JpdGViYWNrLmM9Mjk4OT12b2lkIF9fZm9saW9fc3RhcnRfd3JpdGViYWNrKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wga2VlcF93cml0ZSlcXG4tLVxcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjk5NC1cXG5tbS9wYWdlLXdyaXRlYmFjay5jOjI5OTU6XFx0Vk1fQlVHX09OX0ZPTElPKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSwgZm9saW8pO1xcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjk5Ni1cXHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO1xcbi0tXFxubW0vcGFnZS13cml0ZWJhY2suYz0zMDU4PXZvaWQgZm9saW9fd2FpdF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9wYWdlLXdyaXRlYmFjay5jLTMwNTkte1xcbm1tL3BhZ2Utd3JpdGViYWNrLmM6MzA2MDpcXHR3aGlsZSAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKSB7XFxubW0vcGFnZS13cml0ZWJhY2suYy0zMDYxLVxcdFxcdHRyYWNlX2ZvbGlvX3dhaXRfd3JpdGViYWNrKGZvbGlvLCBmb2xpb19tYXBwaW5nKGZvbGlvKSk7XFxuLS1cXG5tbS9wYWdlLXdyaXRlYmFjay5jPTMwODA9aW50IGZvbGlvX3dhaXRfd3JpdGViYWNrX2tpbGxhYmxlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vcGFnZS13cml0ZWJhY2suYy0zMDgxLXtcXG5tbS9wYWdlLXdyaXRlYmFjay5jOjMwODI6XFx0d2hpbGUgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkge1xcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMzA4My1cXHRcXHR0cmFjZV9mb2xpb193YWl0X3dyaXRlYmFjayhmb2xpbywgZm9saW9fbWFwcGluZyhmb2xpbykpO1xcbi0tXFxubW0vcmVhZGFoZWFkLmM9NjUzPXZvaWQgcGFnZV9jYWNoZV9hc3luY19yYShzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxcbi0tXFxubW0vcmVhZGFoZWFkLmMtNjY3LVxcdCAqL1xcbm1tL3JlYWRhaGVhZC5jOjY2ODpcXHRpZiAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKVxcbm1tL3JlYWRhaGVhZC5jLTY2OS1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS9zaG1lbS5jPTEzMjg9c3RhdGljIHZvaWQgc2htZW1fdW5kb19yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgbHN0YXJ0LCB1b2ZmX3QgbGVuZCxcXG4tLVxcbm1tL3NobWVtLmMtMTQ2NC1cXHRcXHRcXHRcXHR9XFxubW0vc2htZW0uYzoxNDY1OlxcdFxcdFxcdFxcdFZNX0JVR19PTl9GT0xJTyhmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksXFxubW0vc2htZW0uYy0xNDY2LVxcdFxcdFxcdFxcdFxcdFxcdGZvbGlvKTtcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYz0yNTc9c3RhdGljIHZvaWQgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTI2OS1cXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pO1xcbm1tL3N3YXBfc3RhdGUuYzoyNzA6XFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSwgZm9saW8pO1xcbm1tL3N3YXBfc3RhdGUuYy0yNzEtXFxuLS1cXG5tbS9zd2FwZmlsZS5jPTIwNzU9c3RhdGljIGJvb2wgZm9saW9fc3dhcGNhY2hlX2ZyZWVhYmxlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTIwODAtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbm1tL3N3YXBmaWxlLmM6MjA4MTpcXHRpZiAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKVxcbm1tL3N3YXBmaWxlLmMtMjA4Mi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTI0MzY9c3RhdGljIGludCB1bnVzZV9wdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTI1MDYtXFx0XFx0ICovXFxubW0vc3dhcGZpbGUuYzoyNTA3OlxcdFxcdFZNX0JVR19PTl9GT0xJTyhmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksIGZvbGlvKTtcXG5tbS9zd2FwZmlsZS5jLTI1MDgtXFx0XFx0aWYgKHB0ZV9zd3BfZXhjbHVzaXZlKG9sZF9wdGUpKVxcbi0tXFxubW0vdHJ1bmNhdGUuYz0zMjU9bG9uZyBtYXBwaW5nX2V2aWN0X2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vdHJ1bmNhdGUuYy0zMjktXFx0XFx0cmV0dXJuIDA7XFxubW0vdHJ1bmNhdGUuYzozMzA6XFx0aWYgKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIHx8IGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSlcXG5tbS90cnVuY2F0ZS5jLTMzMS1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY0MT1zdGF0aWMgcGFnZW91dF90IHBhZ2VvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxubW0vdm1zY2FuLmMtNjg5LVxcdC8qIHN5bmNocm9ub3VzIHdyaXRlPyAqL1xcbm1tL3Ztc2Nhbi5jOjY5MDpcXHRpZiAoIWZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSlcXG5tbS92bXNjYW4uYy02OTEtXFx0XFx0Zm9saW9fY2xlYXJfcmVjbGFpbShmb2xpbyk7XFxuLS1cXG5tbS92bXNjYW4uYz05NTU9c3RhdGljIHZvaWQgZm9saW9fY2hlY2tfZGlydHlfd3JpdGViYWNrKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS92bXNjYW4uYy05NzQtXFx0KmRpcnR5ID0gZm9saW9fdGVzdF9kaXJ0eShmb2xpbyk7XFxubW0vdm1zY2FuLmM6OTc1OlxcdCp3cml0ZWJhY2sgPSBmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyk7XFxubW0vdm1zY2FuLmMtOTc2LVxcbi0tXFxubW0vdm1zY2FuLmM9MTA3OD1zdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXFxuLS1cXG5tbS92bXNjYW4uYy0xMjA2LVxcdFxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjEyMDc6XFx0XFx0aWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkge1xcbm1tL3Ztc2Nhbi5jLTEyMDgtXFx0XFx0XFx0bWFwcGluZyA9IGZvbGlvX21hcHBpbmcoZm9saW8pO1xcbi0tXFxubW0vdm1zY2FuLmMtMTQ0MC1cXHRcXHRcXHRcXHR9XFxubW0vdm1zY2FuLmM6MTQ0MTpcXHRcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKVxcbm1tL3Ztc2Nhbi5jLTE0NDItXFx0XFx0XFx0XFx0XFx0Z290byBrZWVwO1xcbi0tXFxubW0vdm1zY2FuLmMtMTQ1Mi1cXHRcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgfHxcXG5tbS92bXNjYW4uYzoxNDUzOlxcdFxcdFxcdFxcdCAgICBmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpXFxubW0vdm1zY2FuLmMtMTQ1NC1cXHRcXHRcXHRcXHRcXHRnb3RvIGtlZXBfbG9ja2VkO1xcbi0tXFxubW0vdm1zY2FuLmM9NDk2MD1zdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUwMTMtXFx0XFx0aWYgKCFza2lwX3JldHJ5IFxcdTAwMjZcXHUwMDI2ICFmb2xpb190ZXN0X2FjdGl2ZShmb2xpbykgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX21hcHBlZChmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG5tbS92bXNjYW4uYzo1MDE0OlxcdFxcdCAgICAhZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkge1xcbm1tL3Ztc2Nhbi5jLTUwMTUtXFx0XFx0XFx0bGlzdF9tb3ZlKFxcdTAwMjZmb2xpby1cXHUwMDNlbHJ1LCBcXHUwMDI2Y2xlYW4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjozODoxMi44NTkyOTIwMjJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ1NDAzOTMzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFdyaXRlYmFjayBNZWNoYW5pc20qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIHdyaXRlYmFjayBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGUgY29yZSBmdW5jdGlvbnMgaW52b2x2ZWQuIEknbSB0aGlua2luZyBhYm91dCBgX19mb2xpb19zdGFydF93cml0ZWJhY2tgLCBgZm9saW9fd2FpdF93cml0ZWJhY2tgLCBgZm9saW9fd2FpdF93cml0ZWJhY2tfa2lsbGFibGVgLCBhbmQgYGZvbGlvX2VuZF93cml0ZWJhY2tgIOKAkyB0aG9zZSBhcmUgdGhlIGtleSBwbGF5ZXJzIGhlcmUsIGFsbCBuZXN0bGVkIHdpdGhpbiBgbW0vcGFnZS13cml0ZWJhY2suY2AgYW5kIHBvdGVudGlhbGx5IHRvdWNoaW5nIGBtbS9maWxlbWFwLmNgIGFzIHdlbGwuXG5cbk15IGluaXRpYWwgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgcG9pbnRzIG9mIHRoZSB3cml0ZWJhY2sgY3ljbGUuIFNvLCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGBfX2ZvbGlvX3N0YXJ0X3dyaXRlYmFja2AgYW5kIGBmb2xpb19lbmRfd3JpdGViYWNrYC4gVG8gZ2V0IHRoZSB3aG9sZSBwaWN0dXJlLCBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIGBtbS9wYWdlLXdyaXRlYmFjay5jYCBhbmQgZ28gc3RyYWlnaHQgdG8gYXJvdW5kIGxpbmUgMjk4OS4gVGhhdCdzIHVzdWFsbHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGNvbnRleHR1YWxpemUgdGhvc2UgZnVuY3Rpb25zLiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEyMjksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzg6MTUuMzEzMzM1ODA4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0Nzg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlLXdyaXRlYmFjay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5ODUsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI5ODU6XFx0XFxuMjk4NjpcXHRcXHRyZXR1cm4gcmV0O1xcbjI5ODc6XFx0fVxcbjI5ODg6XFx0XFxuMjk4OTpcXHR2b2lkIF9fZm9saW9fc3RhcnRfd3JpdGViYWNrKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wga2VlcF93cml0ZSlcXG4yOTkwOlxcdHtcXG4yOTkxOlxcdFxcdGxvbmcgbnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuMjk5MjpcXHRcXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZvbGlvX21hcHBpbmcoZm9saW8pO1xcbjI5OTM6XFx0XFx0aW50IGFjY2Vzc19yZXQ7XFxuMjk5NDpcXHRcXG4yOTk1OlxcdFxcdFZNX0JVR19PTl9GT0xJTyhmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksIGZvbGlvKTtcXG4yOTk2OlxcdFxcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7XFxuMjk5NzpcXHRcXG4yOTk4OlxcdFxcdGlmIChtYXBwaW5nIFxcdTAwMjZcXHUwMDI2IG1hcHBpbmdfdXNlX3dyaXRlYmFja190YWdzKG1hcHBpbmcpKSB7XFxuMjk5OTpcXHRcXHRcXHRYQV9TVEFURSh4YXMsIFxcdTAwMjZtYXBwaW5nLVxcdTAwM2VpX3BhZ2VzLCBmb2xpby1cXHUwMDNlaW5kZXgpO1xcbjMwMDA6XFx0XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctXFx1MDAzZWhvc3Q7XFxuMzAwMTpcXHRcXHRcXHRzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2I7XFxuMzAwMjpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbjMwMDM6XFx0XFx0XFx0Ym9vbCBvbl93Ymxpc3Q7XFxuMzAwNDpcXHRcXG4zMDA1OlxcdFxcdFxcdHhhc19sb2NrX2lycXNhdmUoXFx1MDAyNnhhcywgZmxhZ3MpO1xcbjMwMDY6XFx0XFx0XFx0eGFzX2xvYWQoXFx1MDAyNnhhcyk7XFxuMzAwNzpcXHRcXHRcXHRmb2xpb190ZXN0X3NldF93cml0ZWJhY2soZm9saW8pO1xcbjMwMDg6XFx0XFxuMzAwOTpcXHRcXHRcXHRvbl93Ymxpc3QgPSBtYXBwaW5nX3RhZ2dlZChtYXBwaW5nLCBQQUdFQ0FDSEVfVEFHX1dSSVRFQkFDSyk7XFxuMzAxMDpcXHRcXG4zMDExOlxcdFxcdFxcdHhhc19zZXRfbWFyayhcXHUwMDI2eGFzLCBQQUdFQ0FDSEVfVEFHX1dSSVRFQkFDSyk7XFxuMzAxMjpcXHRcXHRcXHR3YiA9IGlub2RlX3RvX3diKGlub2RlKTtcXG4zMDEzOlxcdFxcdFxcdHdiX3N0YXRfbW9kKHdiLCBXQl9XUklURUJBQ0ssIG5yKTtcXG4zMDE0OlxcdFxcdFxcdGlmICghb25fd2JsaXN0KSB7XFxuMzAxNTpcXHRcXHRcXHRcXHR3Yl9pbm9kZV93cml0ZWJhY2tfc3RhcnQod2IpO1xcbjMwMTY6XFx0XFx0XFx0XFx0LypcXG4zMDE3OlxcdFxcdFxcdFxcdCAqIFdlIGNhbiBjb21lIHRocm91Z2ggaGVyZSB3aGVuIHN3YXBwaW5nIGFub255bW91c1xcbjMwMTg6XFx0XFx0XFx0XFx0ICogZm9saW9zLCBzbyB3ZSBkb24ndCBuZWNlc3NhcmlseSBoYXZlIGFuIGlub2RlIHRvXFxuMzAxOTpcXHRcXHRcXHRcXHQgKiB0cmFjayBmb3Igc3luYy5cXG4zMDIwOlxcdFxcdFxcdFxcdCAqL1xcbjMwMjE6XFx0XFx0XFx0XFx0aWYgKG1hcHBpbmctXFx1MDAzZWhvc3QpXFxuMzAyMjpcXHRcXHRcXHRcXHRcXHRzYl9tYXJrX2lub2RlX3dyaXRlYmFjayhtYXBwaW5nLVxcdTAwM2Vob3N0KTtcXG4zMDIzOlxcdFxcdFxcdH1cXG4zMDI0OlxcdFxcbjMwMjU6XFx0XFx0XFx0aWYgKCFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSlcXG4zMDI2OlxcdFxcdFxcdFxcdHhhc19jbGVhcl9tYXJrKFxcdTAwMjZ4YXMsIFBBR0VDQUNIRV9UQUdfRElSVFkpO1xcbjMwMjc6XFx0XFx0XFx0aWYgKCFrZWVwX3dyaXRlKVxcbjMwMjg6XFx0XFx0XFx0XFx0eGFzX2NsZWFyX21hcmsoXFx1MDAyNnhhcywgUEFHRUNBQ0hFX1RBR19UT1dSSVRFKTtcXG4zMDI5OlxcdFxcdFxcdHhhc191bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2eGFzLCBmbGFncyk7XFxuMzAzMDpcXHRcXHR9IGVsc2Uge1xcbjMwMzE6XFx0XFx0XFx0Zm9saW9fdGVzdF9zZXRfd3JpdGViYWNrKGZvbGlvKTtcXG4zMDMyOlxcdFxcdH1cXG4zMDMzOlxcdFxcbjMwMzQ6XFx0XFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9XUklURUJBQ0ssIG5yKTtcXG4zMDM1OlxcdFxcdHpvbmVfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX1pPTkVfV1JJVEVfUEVORElORywgbnIpO1xcbjMwMzY6XFx0XFxuMzAzNzpcXHRcXHRhY2Nlc3NfcmV0ID0gYXJjaF9tYWtlX2ZvbGlvX2FjY2Vzc2libGUoZm9saW8pO1xcbjMwMzg6XFx0XFx0LypcXG4zMDM5OlxcdFxcdCAqIElmIHdyaXRlYmFjayBoYXMgYmVlbiB0cmlnZ2VyZWQgb24gYSBwYWdlIHRoYXQgY2Fubm90IGJlIG1hZGVcXG4zMDQwOlxcdFxcdCAqIGFjY2Vzc2libGUsIGl0IGlzIHRvbyBsYXRlIHRvIHJlY292ZXIgaGVyZS5cXG4zMDQxOlxcdFxcdCAqL1xcbjMwNDI6XFx0XFx0Vk1fQlVHX09OX0ZPTElPKGFjY2Vzc19yZXQgIT0gMCwgZm9saW8pO1xcbjMwNDM6XFx0fVxcbjMwNDQ6XFx0RVhQT1JUX1NZTUJPTChfX2ZvbGlvX3N0YXJ0X3dyaXRlYmFjayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM4OjE1LjMxMzY4ODE1OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDI1MDAwNDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEludmVzdGlnYXRpb24gb2YgdGhlIFdyaXRlYmFjayBNZWNoYW5pc20qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgX19mb2xpb19zdGFydF93cml0ZWJhY2tgLCBhbmQgaXQncyBjYWxsaW5nIGJvdGggYGZvbGlvX3Rlc3Rfd3JpdGViYWNrYCBhbmQgYGZvbGlvX3Rlc3Rfc2V0X3dyaXRlYmFja2AuIEludGVyZXN0aW5nLiBNeSBndXQgZmVlbGluZyB0ZWxscyBtZSB0byBkZWx2ZSBkZWVwZXIgaW50byBob3cgdGhpcyB3cml0ZWJhY2sgcHJvY2VzcyBpcyBjb250cm9sbGVkLCBhbmQgaG93IGl0IGlzIHByb3RlY3RlZCBhZ2FpbnN0IGNvbmN1cnJlbnQgYWNjZXNzLiBMZXQncyBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgZnVsbCBwaWN0dXJlLlxuXG5CZWZvcmUgSSBqdW1wIHRvIGNvbmNsdXNpb25zLCBJIG5lZWQgdG8gY2hlY2sgaG93IGBmb2xpb193YWl0X3dyaXRlYmFja2AgYW5kIGBmb2xpb19lbmRfd3JpdGViYWNrYCBhcmUgdXNlZCBpbiB0aGlzIGNvbnRleHQuIFRoZXNlIGNvdWxkIGJlIGtleSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcywgc2lnbmFsbGluZyB3aGVuIGEgd3JpdGViYWNrIG9wZXJhdGlvbiBoYXMgc3RhcnRlZCBvciBmaW5pc2hlZC4gVGhleSBwcm9iYWJseSBjb250cm9sIHdoZW4gYSBwYWdlIGlzIHZpc2libGUgdG8gb3RoZXJzLCBhbmQgd2hlbiBpdCBpcyBiZWluZyB3b3JrZWQgb24uXG5cblRvIHRydWx5IHVuZGVyc3RhbmQgdGhlIGludGVybmFsIG1lY2hhbmljcywgSSBzaG91bGQgcHVsbCB1cCBgbW0vZmlsZW1hcC5jYCBhbmQgdGFrZSBhIGxvb2sgYXJvdW5kIGxpbmUgMTY1Ni4gVGhhdCBzaG91bGQgYmUgcmlnaHQgaW4gdGhlIGhlYXJ0IG9mIHRoZSBmaWxlbWFwIGNvZGUuIEZyb20gbWVtb3J5LCB0aGF0IGFyZWEgaGFuZGxlcyB0aGUgY29yZSB3cml0ZWJhY2sgbG9naWMsIHNvIHRoYXQgd2lsbCBsZXQgbWUgY2hlY2sgZXhhY3RseSBob3cgYWxsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgd29ya2luZyB0b2dldGhlci4gSSBleHBlY3QgdG8gZmluZCB0aGUgaW1wbGVtZW50YXRpb24sIG9yIGF0IGxlYXN0IHRoZSBjYWxsZXJzLCBvZiBgZm9saW9fc3RhcnRfd3JpdGViYWNrYCwgYGZvbGlvX2VuZF93cml0ZWJhY2tgLCBldGMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNTIxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjozODoxOS43Mzg2OTI3NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDI0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZmlsZW1hcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2NTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2NTU6XFx0ICovXFxuMTY1NjpcXHR2b2lkIGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbjE2NTc6XFx0e1xcbjE2NTg6XFx0XFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksIGZvbGlvKTtcXG4xNjU5OlxcdFxcbjE2NjA6XFx0XFx0LypcXG4xNjYxOlxcdFxcdCAqIGZvbGlvX3Rlc3RfY2xlYXJfcmVjbGFpbSgpIGNvdWxkIGJlIHVzZWQgaGVyZSBidXQgaXQgaXMgYW5cXG4xNjYyOlxcdFxcdCAqIGF0b21pYyBvcGVyYXRpb24gYW5kIG92ZXJraWxsIGluIHRoaXMgcGFydGljdWxhciBjYXNlLiBGYWlsaW5nXFxuMTY2MzpcXHRcXHQgKiB0byBzaHVmZmxlIGEgZm9saW8gbWFya2VkIGZvciBpbW1lZGlhdGUgcmVjbGFpbSBpcyB0b28gbWlsZFxcbjE2NjQ6XFx0XFx0ICogYSBnYWluIHRvIGp1c3RpZnkgdGFraW5nIGFuIGF0b21pYyBvcGVyYXRpb24gcGVuYWx0eSBhdCB0aGVcXG4xNjY1OlxcdFxcdCAqIGVuZCBvZiBldmVyeSBmb2xpbyB3cml0ZWJhY2suXFxuMTY2NjpcXHRcXHQgKi9cXG4xNjY3OlxcdFxcdGlmIChmb2xpb190ZXN0X3JlY2xhaW0oZm9saW8pKSB7XFxuMTY2ODpcXHRcXHRcXHRmb2xpb19jbGVhcl9yZWNsYWltKGZvbGlvKTtcXG4xNjY5OlxcdFxcdFxcdGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZShmb2xpbyk7XFxuMTY3MDpcXHRcXHR9XFxuMTY3MTpcXHRcXG4xNjcyOlxcdFxcdGlmIChfX2ZvbGlvX2VuZF93cml0ZWJhY2soZm9saW8pKVxcbjE2NzM6XFx0XFx0XFx0Zm9saW9fd2FrZV9iaXQoZm9saW8sIFBHX3dyaXRlYmFjayk7XFxuMTY3NDpcXHRcXG4xNjc1OlxcdFxcdGFjY3RfcmVjbGFpbV93cml0ZWJhY2soZm9saW8pO1xcbjE2NzY6XFx0fVxcbjE2Nzc6XFx0RVhQT1JUX1NZTUJPTF9HUEwoZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKTtcXG4xNjc4OlxcdFxcbjE2Nzk6XFx0LyoqXFxuMTY4MDpcXHQgKiBmb2xpb19lbmRfd3JpdGViYWNrIC0gRW5kIHdyaXRlYmFjayBhZ2FpbnN0IGEgZm9saW8uXFxuMTY4MTpcXHQgKiBAZm9saW86IFRoZSBmb2xpby5cXG4xNjgyOlxcdCAqXFxuMTY4MzpcXHQgKiBUaGUgZm9saW8gbXVzdCBhY3R1YWxseSBiZSB1bmRlciB3cml0ZWJhY2suXFxuMTY4NDpcXHQgKlxcbjE2ODU6XFx0ICogQ29udGV4dDogTWF5IGJlIGNhbGxlZCBmcm9tIHByb2Nlc3Mgb3IgaW50ZXJydXB0IGNvbnRleHQuXFxuMTY4NjpcXHQgKi9cXG4xNjg3OlxcdHZvaWQgZm9saW9fZW5kX3dyaXRlYmFjayhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbjE2ODg6XFx0e1xcbjE2ODk6XFx0XFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksIGZvbGlvKTtcXG4xNjkwOlxcdFxcbjE2OTE6XFx0XFx0LypcXG4xNjkyOlxcdFxcdCAqIFdyaXRlYmFjayBkb2VzIG5vdCBob2xkIGEgZm9saW8gcmVmZXJlbmNlIG9mIGl0cyBvd24sIHJlbHlpbmdcXG4xNjkzOlxcdFxcdCAqIG9uIHRydW5jYXRpb24gdG8gd2FpdCBmb3IgdGhlIGNsZWFyaW5nIG9mIFBHX3dyaXRlYmFjay5cXG4xNjk0OlxcdFxcdCAqIEJ1dCBoZXJlIHdlIG11c3QgbWFrZSBzdXJlIHRoYXQgdGhlIGZvbGlvIGlzIG5vdCBmcmVlZCBhbmRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzg6MTkuNzM4OTk3NjJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjU3MTE5NTE4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1cyBTeW1ib2wgU2VsZWN0aW9uIGZvciBGb2xpbyBXcml0ZWJhY2sgRmxhZyBDb252ZXJzaW9uKipcblxuT2theSwgbGV0J3MgbmFpbCBkb3duIHRoZXNlIGZvY3VzIHN5bWJvbHMuIEZpcnN0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgYWNjaWRlbnRhbGx5IGZsYWdnaW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIHRoYXQgd2lsbCBkaWx1dGUgdGhlIGZ1enppbmcgZWZmb3J0LiBJJ20gdGhpbmtpbmcgYWJvdXQgd3JpdGViYWNrLXJlbGF0ZWQgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHk6IGBfX2ZvbGlvX3N0YXJ0X3dyaXRlYmFja2AsIGBmb2xpb19lbmRfd3JpdGViYWNrYCwgYGZvbGlvX3dhaXRfd3JpdGViYWNrYCwgYW5kIGBmaWxlbWFwX3JhbmdlX2hhc193cml0ZWJhY2tgLiBBcmUgYW55IG9mIHRoZXNlIGdlbmVyaWMgZW5vdWdoIHRvIGJlIHByb2JsZW1hdGljPyBMZXQncyBxdWlja2x5IHJldmlldyB0aGUgRm9jdXNTeW1ib2xzIGd1aWRlbGluZXMgdG8gYmUgc3VyZS4gSXQgbG9va3MgbGlrZSB0aGUgZ29hbCBoZXJlIGlzIHRvIHNwZWNpZmljYWxseSB0YXJnZXQgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhlIGNvcmUgbG9naWMgYmVpbmcgYWx0ZXJlZCwgcmF0aGVyIHRoYW4gZ2VuZXJhbCBzeXN0ZW0tbGV2ZWwgY2FsbHMuXG5cbk5vdywgY29uc2lkZXJpbmcgdGhvc2UsIGBfX2ZvbGlvX3N0YXJ0X3dyaXRlYmFja2AsIGBmb2xpb19lbmRfd3JpdGViYWNrYCwgYGZvbGlvX3dhaXRfd3JpdGViYWNrYCwgYW5kIGBmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmRgLCBhcmUgYWxsIHByZXR0eSBzcGVjaWZpYyB0byBmb2xpbyB3cml0ZWJhY2sgaGFuZGxpbmcuIFRoZXkgYXJlbid0IG1lbW9yeSBhbGxvY2F0b3JzIG9yIHBhZ2UgZmF1bHQgaGFuZGxlcnMsIHdoaWNoIGlzIGdvb2QuIFRoZXkgc2VlbSBsaWtlIGdvb2QgY2FuZGlkYXRlcy4gSSBzaG91bGQgYWxzbyBjaGVjayBgZm9saW9fcHJlcGFyZV93cml0ZWJhY2tgLCBhbHRob3VnaCB0aGF0IGZ1bmN0aW9uIGlzIGRlZmluZWQgaW4gYG1tL3BhZ2Utd3JpdGViYWNrLmNgLiBBbHNvIGBmaWxlbWFwX3JlbGVhc2VfZm9saW9gIGZyb20gYG1tL2ZpbGVtYXAuY2AuXG5cbk5leHQsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueSBjb25maWcgZGVwZW5kZW5jaWVzLiBJJ20gZm9jdXNpbmcgb24gYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYCBhbmQgd3JpdGViYWNrIHJlbGF0ZWQgY29kZS4gQXJlIHRoZXJlIGFueSB1bnVzdWFsIEtjb25maWcgcmVxdWlyZW1lbnRzPyBOb3BlLiBTdGFuZGFyZCBMaW51eCBjb25maWd1cmF0aW9ucyBoYXZlIGBGT0xJT19IRUFEX1BBR0VgIGFuZCBgUEdfd3JpdGViYWNrYC4gSSBxdWlja2x5IGRvdWJsZS1jaGVja2VkIHRoZSBjb25maWdzIGFuZCBjb25maXJtIHRoYXQgYEVuYWJsZUNvbmZpZ3M6IFtdYCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSB3b3VsZCBleHBlY3QgZm9yIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2UuXG5cbkFscmlnaHQsIGxldCdzIHJlY29uZmlybSBteSBjaG9zZW4gZm9jdXMgc3ltYm9scy4gSSBoYXZlOiBgX19mb2xpb19zdGFydF93cml0ZWJhY2tgLCBgZm9saW9fZW5kX3dyaXRlYmFja2AsIGBmb2xpb193YWl0X3dyaXRlYmFja2AsIGFuZCBgZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kYC4gVGhlc2Ugc2VlbSBzcG90IG9uLiBJIGp1c3QgcXVpY2tseSBjb25maXJtZWQgdGhhdCB0aGVzZSBhcmUgYWxsIGV4cG9ydGVkIHN5bWJvbHMsIHByZXNlbnQgaW4gdGhlIHN5bWJvbCB0YWJsZXMuXG5cbkZpbmFsbHksIGxldCdzIGRvIGEgcXVpY2sgbWVudGFsIHJldmlldyB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZzogdGhlIHBhdGNoIGlzIGNvbnZlcnRpbmcgdGhlIGBQR193cml0ZWJhY2tgIGZsYWcgZGVmaW5pdGlvbnMgZnJvbSBsZWdhY3kgbWFjcm9zIHRvIGBGT0xJT19URVNUX0ZMQUdgIGFuZCBgRk9MSU9fVEVTVF9TRVRfRkxBR2AuIEl0J3MgbW9kaWZ5aW5nIHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZvbGlvIGZsYWdzIGxvZ2ljLiBXb3J0aEZ1enppbmcgaXMgdHJ1ZS4gRW5hYmxlQ29uZmlncyBpcyBlbXB0eS4gQW5kLCBtb3N0IGltcG9ydGFudGx5LCB0aGUgRm9jdXNTeW1ib2xzIHRhcmdldCB0aGUga2V5IHdyaXRlYmFjayBsaWZlY3ljbGUgaGVscGVycyB0aGF0IHVzZSB0aGVzZSBtYWNyb3MuXG5cbk9rYXksIGV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzUxOCwiT3V0cHV0VG9rZW5zIjoxNDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4ODEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjozODoyNi4zMTAxOTY5NzNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzQyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fZm9saW9fc3RhcnRfd3JpdGViYWNrXCIsXG4gICAgXCJmb2xpb19lbmRfd3JpdGViYWNrXCIsXG4gICAgXCJmb2xpb193YWl0X3dyaXRlYmFja1wiLFxuICAgIFwiZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgd3JpdGViYWNrIGZvbGlvIGZsYWcgZGVmaW5pdGlvbnMgaW4gaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggZnJvbSBsZWdhY3kgcGFnZS1mbGFnIG1hY3JvcyAoVEVTVFBBR0VGTEFHLCBURVNUU0NGTEFHKSB0byB0aGUgbW9kZXJuIGZvbGlvIGZsYWcgbWFjcm9zIChGT0xJT19URVNUX0ZMQUcsIEZPTElPX1RFU1RfU0VUX0ZMQUcpLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbnZvbHZlZCBpbiBmb2xpbyB3cml0ZWJhY2sgc3RhdGUgdHJhY2tpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19mb2xpb19zdGFydF93cml0ZWJhY2tcIixcbiAgICBcImZvbGlvX2VuZF93cml0ZWJhY2tcIixcbiAgICBcImZvbGlvX3dhaXRfd3JpdGViYWNrXCIsXG4gICAgXCJmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIHRoZSB3cml0ZWJhY2sgZm9saW8gZmxhZyBkZWZpbml0aW9ucyBpbiBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCBmcm9tIGxlZ2FjeSBwYWdlLWZsYWcgbWFjcm9zIChURVNUUEFHRUZMQUcsIFRFU1RTQ0ZMQUcpIHRvIHRoZSBtb2Rlcm4gZm9saW8gZmxhZyBtYWNyb3MgKEZPTElPX1RFU1RfRkxBRywgRk9MSU9fVEVTVF9TRVRfRkxBRykuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGludm9sdmVkIGluIGZvbGlvIHdyaXRlYmFjayBzdGF0ZSB0cmFja2luZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzg6MjYuMzEwMjc2ODczWiIsIlNlcSI6MjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjgxODYzOTY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM4OjI2LjMxMTMwOTI5M1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE2ODE3NTk5MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb252ZXJ0cyB0aGUgcGFnZSBmbGFnIGRlZmluaXRpb25zIGZvciBQR193cml0ZWJhY2sgZnJvbSBsZWdhY3kgcGFnZS1iYXNlZCBtYWNyb3MgKFRFU1RQQUdFRkxBRyAvIFRFU1RTQ0ZMQUcpIHRvIGZvbGlvLWJhc2VkIG1hY3JvcyAoRk9MSU9fVEVTVF9GTEFHIC8gRk9MSU9fVEVTVF9TRVRfRkxBRykuIFxcblxcblRoaXMgaXMgYSB0eXBlLXNhZmUgbWFjcm8gcmVmYWN0b3JpbmcgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgb3BlcmF0ZXMgcHVyZWx5IG9uIHBhZ2UvZm9saW8gYml0IGZsYWdzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIGFsbG9jYXRlLCBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzdHJ1Y3QgcGFkZGluZywgdXNlci1jb3B5IGJ1ZmZlcnMsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFueSBtZW1vcnkgc2FmZXR5IGlzc3VlcyB0aGF0IGNvdWxkIGFyaXNlIGZyb20gaW52YWxpZCBmb2xpby9wYWdlIHJlZmVyZW5jZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBwYWdlIGFjY2VzcykgYXJlIGFscmVhZHkgY292ZXJlZCBieSBLQVNBTiBhbmQgcGFnZSBmbGFnIGRlYnVnIGNoZWNrcyAoVk1fQlVHX09OX1BHRkxBR1MpLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVhayByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc0MjJlZWUzZTdmNTI0MmZkZDJhNzEyNTc1MmRhMGFjZTY3ZGQxN2NcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDE2OjM3OjE5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuaW5kZXggM2RjNzljMGM1YWRmMC4uODZkZDA0NzBkYTExNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuQEAgLTU4OCw4ICs1ODgsOCBAQCBGT0xJT19GTEFHKG93bmVyXzIsIEZPTElPX0hFQURfUEFHRSlcbiAgKiBPbmx5IHRlc3QtYW5kLXNldCBleGlzdCBmb3IgUEdfd3JpdGViYWNrLiAgVGhlIHVuY29uZGl0aW9uYWwgb3BlcmF0b3JzIGFyZVxuICAqIHJpc2t5OiB0aGV5IGJ5cGFzcyBwYWdlIGFjY291bnRpbmcuXG4gICovXG4tVEVTVFBBR0VGTEFHKFdyaXRlYmFjaywgd3JpdGViYWNrLCBQRl9OT19UQUlMKVxuLVx0VEVTVFNDRkxBRyhXcml0ZWJhY2ssIHdyaXRlYmFjaywgUEZfTk9fVEFJTClcbitGT0xJT19URVNUX0ZMQUcod3JpdGViYWNrLCBGT0xJT19IRUFEX1BBR0UpXG4rXHRGT0xJT19URVNUX1NFVF9GTEFHKHdyaXRlYmFjaywgRk9MSU9fSEVBRF9QQUdFKVxuIEZPTElPX0ZMQUcobWFwcGVkdG9kaXNrLCBGT0xJT19IRUFEX1BBR0UpXG4gXG4gLyogUEdfcmVhZGFoZWFkIGlzIG9ubHkgdXNlZCBmb3IgcmVhZHM7IFBHX3JlY2xhaW0gaXMgb25seSBmb3Igd3JpdGVzICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjozODoyNi4zMTEzMTM5MDNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzg3MzQxNjIyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhZ2UgRmxhZyBDaGFuZ2VzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEkgc2VlIHdlJ3JlIG1vZGlmeWluZyBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgLiBTcGVjaWZpY2FsbHksIHRoZSBkaWZmIGZvY3VzZXMgb24gY2hhbmdlcyBhcm91bmQgdGhlIGBQR193cml0ZWJhY2tgIGZsYWcsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgdXNpbmcgYFRFU1RQQUdFRkxBR2AgYW5kIGBURVNUU0NGTEFHYCBmb3IgdGhlIHdyaXRlYmFjayBmbGFnLCB3aGljaCBoYXMgYSBzcGVjaWZpYyBjb21tZW50IGFib3V0IGJlaW5nIHJpc2t5IGJlY2F1c2UgdGhleSBieXBhc3MgcGFnZSBhY2NvdW50aW5nLCBpbXBseWluZyB0aGF0IHRoZSBwYXRjaCBpcyBtZWFudCB0byBhZGRyZXNzIHRoaXMuIE5vdywgaXQgbG9va3MgbGlrZSB0aGVzZSBhcmUgYmVpbmcgcmVwbGFjZWQgd2l0aCBgRk9MSU9fVEVTVF9GTEFHYCBhbmQgYEZPTElPX1RFU1RfU0VUX0ZMQUdgIHdpdGggdGhlIGBGT0xJT19IRUFEX1BBR0VgIHBhcmFtZXRlci4gVGhpcyBsaWtlbHkgc2lnbmlmaWVzIGEgbW92ZSB0b3dhcmQgYSBtb3JlIGZvbGlvLWNlbnRyaWMgYXBwcm9hY2gsIHdoaWNoIGlzIHNvbWV0aGluZyBJJ3ZlIGJlZW4ga2VlcGluZyBhbiBleWUgb24uXG5cbk15IG5leHQgc3RlcCB3b3VsZCBiZSB0byBxdWlja2x5IGNoZWNrIHRoZSBkZWZpbml0aW9ucyBvZiBgVEVTVFBBR0VGTEFHYCwgYFRFU1RTQ0ZMQUdgLCBgRk9MSU9fVEVTVF9GTEFHYCwgYW5kIGBGT0xJT19URVNUX1NFVF9GTEFHYCwgd2hpY2ggc2hvdWxkIGJlIGRlZmluZWQgZWFybGllciBpbiB0aGlzIHNhbWUgaW5jbHVkZSBmaWxlIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGUgY2hhbmdlcy4gSSdsbCBuZWVkIHRvIHNlZSBob3cgdGhlIGZvbGlvLWJhc2VkIHZlcnNpb25zIGhhbmRsZSB0aGUgd3JpdGViYWNrIGZsYWcgYW5kIHdoZXRoZXIgdGhleSBhZGRyZXNzIHRoZSBzdGF0ZWQgY29uY2VybnMgYWJvdXQgcGFnZSBhY2NvdW50aW5nLiBUaGlzIGlzIGxpa2VseSBhbiBpbXBvcnRhbnQgcGllY2Ugb2YgdGhlIHB1enpsZSB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZSBwYXRjaCBhbmQgd2hldGhlciBpdCdzIHRoZSByaWdodCBkaXJlY3Rpb24gZm9yIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMzksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjozODozMC4xODQ3MzQyMjVaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwOTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU3MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU3MDpcXHRcXHRfX0NMRUFSUEFHRUZMQUcoUmVzZXJ2ZWQsIHJlc2VydmVkLCBQRl9OT19DT01QT1VORClcXG4gNTcxOlxcdFxcdF9fU0VUUEFHRUZMQUcoUmVzZXJ2ZWQsIHJlc2VydmVkLCBQRl9OT19DT01QT1VORClcXG4gNTcyOlxcdEZPTElPX0ZMQUcoc3dhcGJhY2tlZCwgRk9MSU9fSEVBRF9QQUdFKVxcbiA1NzM6XFx0XFx0X19GT0xJT19DTEVBUl9GTEFHKHN3YXBiYWNrZWQsIEZPTElPX0hFQURfUEFHRSlcXG4gNTc0OlxcdFxcdF9fRk9MSU9fU0VUX0ZMQUcoc3dhcGJhY2tlZCwgRk9MSU9fSEVBRF9QQUdFKVxcbiA1NzU6XFx0XFxuIDU3NjpcXHQvKlxcbiA1Nzc6XFx0ICogUHJpdmF0ZSBwYWdlIG1hcmtpbmdzIHRoYXQgbWF5IGJlIHVzZWQgYnkgdGhlIGZpbGVzeXN0ZW0gdGhhdCBvd25zIHRoZSBwYWdlXFxuIDU3ODpcXHQgKiBmb3IgaXRzIG93biBwdXJwb3Nlcy5cXG4gNTc5OlxcdCAqIC0gUEdfcHJpdmF0ZSBhbmQgUEdfcHJpdmF0ZV8yIGNhdXNlIHJlbGVhc2VfZm9saW8oKSBhbmQgY28gdG8gYmUgaW52b2tlZFxcbiA1ODA6XFx0ICovXFxuIDU4MTpcXHRQQUdFRkxBRyhQcml2YXRlLCBwcml2YXRlLCBQRl9BTlkpXFxuIDU4MjpcXHRGT0xJT19GTEFHKHByaXZhdGVfMiwgRk9MSU9fSEVBRF9QQUdFKVxcbiA1ODM6XFx0XFxuIDU4NDpcXHQvKiBvd25lcl8yIGNhbiBiZSBzZXQgb24gdGFpbCBwYWdlcyBmb3IgYW5vbiBtZW1vcnkgKi9cXG4gNTg1OlxcdEZPTElPX0ZMQUcob3duZXJfMiwgRk9MSU9fSEVBRF9QQUdFKVxcbiA1ODY6XFx0XFxuIDU4NzpcXHQvKlxcbiA1ODg6XFx0ICogT25seSB0ZXN0LWFuZC1zZXQgZXhpc3QgZm9yIFBHX3dyaXRlYmFjay4gIFRoZSB1bmNvbmRpdGlvbmFsIG9wZXJhdG9ycyBhcmVcXG4gNTg5OlxcdCAqIHJpc2t5OiB0aGV5IGJ5cGFzcyBwYWdlIGFjY291bnRpbmcuXFxuIDU5MDpcXHQgKi9cXG4gNTkxOlxcdEZPTElPX1RFU1RfRkxBRyh3cml0ZWJhY2ssIEZPTElPX0hFQURfUEFHRSlcXG4gNTkyOlxcdFxcdEZPTElPX1RFU1RfU0VUX0ZMQUcod3JpdGViYWNrLCBGT0xJT19IRUFEX1BBR0UpXFxuIDU5MzpcXHRGT0xJT19GTEFHKG1hcHBlZHRvZGlzaywgRk9MSU9fSEVBRF9QQUdFKVxcbiA1OTQ6XFx0XFxuIDU5NTpcXHQvKiBQR19yZWFkYWhlYWQgaXMgb25seSB1c2VkIGZvciByZWFkczsgUEdfcmVjbGFpbSBpcyBvbmx5IGZvciB3cml0ZXMgKi9cXG4gNTk2OlxcdEZPTElPX0ZMQUcocmVjbGFpbSwgRk9MSU9fSEVBRF9QQUdFKVxcbiA1OTc6XFx0Rk9MSU9fRkxBRyhyZWFkYWhlYWQsIEZPTElPX0hFQURfUEFHRSlcXG4gNTk4OlxcdFxcdEZPTElPX1RFU1RfQ0xFQVJfRkxBRyhyZWFkYWhlYWQsIEZPTElPX0hFQURfUEFHRSlcXG4gNTk5OlxcdFxcbiA2MDA6XFx0Rk9MSU9fRkxBRyhkcm9wYmVoaW5kLCBGT0xJT19IRUFEX1BBR0UpXFxuIDYwMTpcXHRcXHRGT0xJT19URVNUX0NMRUFSX0ZMQUcoZHJvcGJlaGluZCwgRk9MSU9fSEVBRF9QQUdFKVxcbiA2MDI6XFx0XFx0X19GT0xJT19TRVRfRkxBRyhkcm9wYmVoaW5kLCBGT0xJT19IRUFEX1BBR0UpXFxuIDYwMzpcXHRcXG4gNjA0OlxcdCNpZmRlZiBDT05GSUdfSElHSE1FTVxcbiA2MDU6XFx0LypcXG4gNjA2OlxcdCAqIE11c3QgdXNlIGEgbWFjcm8gaGVyZSBkdWUgdG8gaGVhZGVyIGRlcGVuZGVuY3kgaXNzdWVzLiBwYWdlX3pvbmUoKSBpcyBub3RcXG4gNjA3OlxcdCAqIGF2YWlsYWJsZSBhdCB0aGlzIHBvaW50LlxcbiA2MDg6XFx0ICovXFxuIDYwOTpcXHQjZGVmaW5lIFBhZ2VIaWdoTWVtKF9fcCkgaXNfaGlnaG1lbV9pZHgocGFnZV96b25lbnVtKF9fcCkpXFxuIDYxMDpcXHQjZGVmaW5lIGZvbGlvX3Rlc3RfaGlnaG1lbShfX2YpXFx0aXNfaGlnaG1lbV9pZHgoZm9saW9fem9uZW51bShfX2YpKVxcbiA2MTE6XFx0I2Vsc2VcXG4gNjEyOlxcdFBBR0VGTEFHX0ZBTFNFKEhpZ2hNZW0sIGhpZ2htZW0pXFxuIDYxMzpcXHQjZW5kaWZcXG4gNjE0OlxcdCNkZWZpbmUgUGh5c0hpZ2hNZW0oX19wKSAoUGFnZUhpZ2hNZW0ocGh5c190b19wYWdlKF9fcCkpKVxcbiA2MTU6XFx0XFxuIDYxNjpcXHQvKiBEb2VzIGttYXBfbG9jYWxfZm9saW8oKSBvbmx5IGFsbG93IGFjY2VzcyB0byBvbmUgcGFnZSBvZiB0aGUgZm9saW8/ICovXFxuIDYxNzpcXHQjaWZkZWYgQ09ORklHX0RFQlVHX0tNQVBfTE9DQUxfRk9SQ0VfTUFQXFxuIDYxODpcXHQjZGVmaW5lIGZvbGlvX3Rlc3RfcGFydGlhbF9rbWFwKGYpXFx0dHJ1ZVxcbiA2MTk6XFx0I2Vsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzg6MzAuMTg0OTE5MzY1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzMjkwNTI1OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZXNlIGZsYWdzIGFyZSBkb2luZyBpbiB0aGUga2VybmVsLCBzbyBmaXJzdCB0aGluZ3MgZmlyc3Q6IEknbSBnb2luZyB0byBwdWxsIHVwIHRoZSBkZWZpbml0aW9ucyBmb3IgYFRFU1RQQUdFRkxBR2AsIGBURVNUU0NGTEFHYCwgYEZPTElPX1RFU1RfRkxBR2AsIGFuZCBgRk9MSU9fVEVTVF9TRVRfRkxBR2AuIEknbGwgYmUgY2hlY2tpbmcgYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYCDigJMgdGhhdCdzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIGZpbmQgdGhlbSwgZ2l2ZW4gdGhlIGZpbGVuYW1lcyBJIGhhdmUuIEkgZXhwZWN0IHRoYXQgSSdsbCBmaW5kIHRoZXNlIGFyZSBzb21lIGtpbmQgb2YgdGVzdCBvciBkZWJ1Z2dpbmcgZmxhZ3MgcmVsYXRlZCB0byBwYWdlIG1hbmFnZW1lbnQgb3IgZm9saW9zLCBidXQgSSBuZWVkIHRoZSBwcmVjaXNlIGRlZmluaXRpb25zIHRvIHVuZGVyc3RhbmQgdGhlaXIgc3BlY2lmaWMgcHVycG9zZSBhbmQgaG93IHRoZXkncmUgaW50ZW5kZWQgdG8gYmUgdXNlZC4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzczNywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzg6MzMuNTEzOTc2MDU2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjI4OTgxMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2RlZmluZSBGT0xJT19URVNUX0ZMQUdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MzUwPXN0YXRpYyB1bnNpZ25lZCBsb25nICpmb2xpb19mbGFncyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBuKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNDA5LSAqL1xcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjQxMDojZGVmaW5lIEZPTElPX1RFU1RfRkxBRyhuYW1lLCBwYWdlKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC00MTEtc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGZvbGlvX3Rlc3RfIyNuYW1lKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pIFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTQ3NT1zdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBUZXN0Q2xlYXJQYWdlIyN1bmFtZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC00OTEtXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6NDkyOiNkZWZpbmUgRk9MSU9fVEVTVF9GTEFHX0ZBTFNFKG5hbWUpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTQ5My1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fdGVzdF8jI25hbWUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXHRcXHRcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM4OjM0LjIzNjg4MjI2M1oiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzk1ODY1Mjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBwYWdlLWZsYWdzLmhgKipcblxuQWxyaWdodCwgbGV0J3MgemVybyBpbiBvbiBsaW5lcyAzODAgdGhyb3VnaCA0NTAgd2l0aGluIGBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaGAuIEknbSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGUga2VybmVsIGRlZmluZXMgYW5kIG1hbmlwdWxhdGVzIHBhZ2UgZmxhZ3MgaW4gdGhpcyByZWdpb24gb2YgdGhlIGhlYWRlciBmaWxlLiBJIGFudGljaXBhdGUgZmluZGluZyBrZXkgbWFjcm9zIGFuZCBlbnVtZXJhdGlvbnMgdGhhdCByZWxhdGUgdG8gcGFnZSBzdGF0ZSB0cmFuc2l0aW9ucywgcHJvdGVjdGlvbiBsZXZlbHMsIGFuZCBhbGxvY2F0aW9uIG1ldGFkYXRhLiBHaXZlbiB0aGUgY29udGV4dCBvZiB0aGUgYHBhZ2UtZmxhZ3MuaGAgaGVhZGVyLCBJIGV4cGVjdCB0byBlbmNvdW50ZXIgZGV0YWlscyBhcm91bmQgZmxhZ3MgYXNzb2NpYXRlZCB3aXRoIGh1Z2UgcGFnZSBtYW5hZ2VtZW50LCBOVU1BIG5vZGVzLCBvciBwb3NzaWJseSBldmVuIGZsYWdzIHJlbGF0ZWQgdG8gZGlmZmVyZW50IG1lbW9yeSB0aWVycyBpZiB0aGlzIGNvZGUgaXMgcmVsYXRpdmVseSByZWNlbnQuIEknbSBnb2luZyB0byBsb29rIGZvciBhbnkgc3VidGxlIHNoaWZ0cyBmcm9tIHRoZSBtb3JlIGZvdW5kYXRpb25hbCBwYWdlIGZsYWdzLCBhcyB0aGlzIHBhcnQgb2YgdGhlIGZpbGUgdGVuZHMgdG8gaG91c2UgdGhlIG1vcmUgc3BlY2lmaWMsIGxlc3MgZnJlcXVlbnRseSB0b3VjaGVkIGZsYWdzLiBNeSBnb2FsIGlzIHRvIGdyYXNwIHRoZSBncmFudWxhcml0eSBvZiBjb250cm9sIHRoZSBrZXJuZWwgaGFzIG92ZXIgcGh5c2ljYWwgcGFnZXMgYXQgdGhpcyBsZXZlbC4gTGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgbmV3IG9yIGV2b2x2aW5nIHBhdHRlcm5zIEkgbWlnaHQgaGF2ZSBtaXNzZWQgaW4gcHJldmlvdXMgcmV2aWV3cyBvZiB0aGlzIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyMTUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjozODozNi42MzI3NTE1MjhaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE0NjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM4MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM4MDpcXHQgKiAgICAgdGhlIHBhZ2UgZmxhZyBpcyBzdG9yZWQgaW4gdGhlIGZpcnN0IHRhaWwgcGFnZS5cXG4gMzgxOlxcdCAqL1xcbiAzODI6XFx0I2RlZmluZSBQRl9QT0lTT05FRF9DSEVDSyhwYWdlKSAoe1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMzgzOlxcdFxcdFxcdFZNX0JVR19PTl9QR0ZMQUdTKFBhZ2VQb2lzb25lZChwYWdlKSwgcGFnZSk7XFx0XFx0XFxcXFxcbiAzODQ6XFx0XFx0XFx0cGFnZTsgfSlcXG4gMzg1OlxcdCNkZWZpbmUgUEZfQU5ZKHBhZ2UsIGVuZm9yY2UpXFx0UEZfUE9JU09ORURfQ0hFQ0socGFnZSlcXG4gMzg2OlxcdCNkZWZpbmUgUEZfSEVBRChwYWdlLCBlbmZvcmNlKVxcdFBGX1BPSVNPTkVEX0NIRUNLKGNvbXBvdW5kX2hlYWQocGFnZSkpXFxuIDM4NzpcXHQjZGVmaW5lIFBGX05PX1RBSUwocGFnZSwgZW5mb3JjZSkgKHtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDM4ODpcXHRcXHRcXHRWTV9CVUdfT05fUEdGTEFHUyhlbmZvcmNlIFxcdTAwMjZcXHUwMDI2IFBhZ2VUYWlsKHBhZ2UpLCBwYWdlKTtcXHRcXFxcXFxuIDM4OTpcXHRcXHRcXHRQRl9QT0lTT05FRF9DSEVDSyhjb21wb3VuZF9oZWFkKHBhZ2UpKTsgfSlcXG4gMzkwOlxcdCNkZWZpbmUgUEZfTk9fQ09NUE9VTkQocGFnZSwgZW5mb3JjZSkgKHtcXHRcXHRcXHRcXHRcXFxcXFxuIDM5MTpcXHRcXHRcXHRWTV9CVUdfT05fUEdGTEFHUyhlbmZvcmNlIFxcdTAwMjZcXHUwMDI2IFBhZ2VDb21wb3VuZChwYWdlKSwgcGFnZSk7XFx0XFxcXFxcbiAzOTI6XFx0XFx0XFx0UEZfUE9JU09ORURfQ0hFQ0socGFnZSk7IH0pXFxuIDM5MzpcXHQjZGVmaW5lIFBGX1NFQ09ORChwYWdlLCBlbmZvcmNlKSAoe1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMzk0OlxcdFxcdFxcdFZNX0JVR19PTl9QR0ZMQUdTKCFQYWdlSGVhZChwYWdlKSwgcGFnZSk7XFx0XFx0XFxcXFxcbiAzOTU6XFx0XFx0XFx0UEZfUE9JU09ORURfQ0hFQ0soXFx1MDAyNnBhZ2VbMV0pOyB9KVxcbiAzOTY6XFx0XFxuIDM5NzpcXHQvKiBXaGljaCBwYWdlIGlzIHRoZSBmbGFnIHN0b3JlZCBpbiAqL1xcbiAzOTg6XFx0I2RlZmluZSBGT0xJT19QRl9BTllcXHRcXHQwXFxuIDM5OTpcXHQjZGVmaW5lIEZPTElPX1BGX0hFQURcXHRcXHQwXFxuIDQwMDpcXHQjZGVmaW5lIEZPTElPX1BGX05PX1RBSUxcXHQwXFxuIDQwMTpcXHQjZGVmaW5lIEZPTElPX1BGX05PX0NPTVBPVU5EXFx0MFxcbiA0MDI6XFx0I2RlZmluZSBGT0xJT19QRl9TRUNPTkRcXHRcXHQxXFxuIDQwMzpcXHRcXG4gNDA0OlxcdCNkZWZpbmUgRk9MSU9fSEVBRF9QQUdFXFx0XFx0MFxcbiA0MDU6XFx0I2RlZmluZSBGT0xJT19TRUNPTkRfUEFHRVxcdDFcXG4gNDA2OlxcdFxcbiA0MDc6XFx0LypcXG4gNDA4OlxcdCAqIE1hY3JvcyB0byBjcmVhdGUgZnVuY3Rpb24gZGVmaW5pdGlvbnMgZm9yIHBhZ2UgZmxhZ3NcXG4gNDA5OlxcdCAqL1xcbiA0MTA6XFx0I2RlZmluZSBGT0xJT19URVNUX0ZMQUcobmFtZSwgcGFnZSlcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDQxMTpcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgZm9saW9fdGVzdF8jI25hbWUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykgXFxcXFxcbiA0MTI6XFx0eyByZXR1cm4gdGVzdF9iaXQoUEdfIyNuYW1lLCBjb25zdF9mb2xpb19mbGFncyhmb2xpbywgcGFnZSkpOyB9XFxuIDQxMzpcXHRcXG4gNDE0OlxcdCNkZWZpbmUgRk9MSU9fU0VUX0ZMQUcobmFtZSwgcGFnZSlcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDQxNTpcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgZm9saW9fc2V0XyMjbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcdFxcXFxcXG4gNDE2OlxcdHsgc2V0X2JpdChQR18jI25hbWUsIGZvbGlvX2ZsYWdzKGZvbGlvLCBwYWdlKSk7IH1cXG4gNDE3OlxcdFxcbiA0MTg6XFx0I2RlZmluZSBGT0xJT19DTEVBUl9GTEFHKG5hbWUsIHBhZ2UpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA0MTk6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGZvbGlvX2NsZWFyXyMjbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcdFxcXFxcXG4gNDIwOlxcdHsgY2xlYXJfYml0KFBHXyMjbmFtZSwgZm9saW9fZmxhZ3MoZm9saW8sIHBhZ2UpKTsgfVxcbiA0MjE6XFx0XFxuIDQyMjpcXHQjZGVmaW5lIF9fRk9MSU9fU0VUX0ZMQUcobmFtZSwgcGFnZSlcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDQyMzpcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19mb2xpb19zZXRfIyNuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXFx0XFxcXFxcbiA0MjQ6XFx0eyBfX3NldF9iaXQoUEdfIyNuYW1lLCBmb2xpb19mbGFncyhmb2xpbywgcGFnZSkpOyB9XFxuIDQyNTpcXHRcXG4gNDI2OlxcdCNkZWZpbmUgX19GT0xJT19DTEVBUl9GTEFHKG5hbWUsIHBhZ2UpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA0Mjc6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fZm9saW9fY2xlYXJfIyNuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXFx0XFxcXFxcbiA0Mjg6XFx0eyBfX2NsZWFyX2JpdChQR18jI25hbWUsIGZvbGlvX2ZsYWdzKGZvbGlvLCBwYWdlKSk7IH1cXG4gNDI5OlxcdFxcbiA0MzA6XFx0I2RlZmluZSBGT0xJT19URVNUX1NFVF9GTEFHKG5hbWUsIHBhZ2UpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA0MzE6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGZvbGlvX3Rlc3Rfc2V0XyMjbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcdFxcXFxcXG4gNDMyOlxcdHsgcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoUEdfIyNuYW1lLCBmb2xpb19mbGFncyhmb2xpbywgcGFnZSkpOyB9XFxuIDQzMzpcXHRcXG4gNDM0OlxcdCNkZWZpbmUgRk9MSU9fVEVTVF9DTEVBUl9GTEFHKG5hbWUsIHBhZ2UpXFx0XFx0XFx0XFx0XFxcXFxcbiA0MzU6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGZvbGlvX3Rlc3RfY2xlYXJfIyNuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pIFxcXFxcXG4gNDM2OlxcdHsgcmV0dXJuIHRlc3RfYW5kX2NsZWFyX2JpdChQR18jI25hbWUsIGZvbGlvX2ZsYWdzKGZvbGlvLCBwYWdlKSk7IH1cXG4gNDM3OlxcdFxcbiA0Mzg6XFx0I2RlZmluZSBGT0xJT19GTEFHKG5hbWUsIHBhZ2UpXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA0Mzk6XFx0Rk9MSU9fVEVTVF9GTEFHKG5hbWUsIHBhZ2UpXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA0NDA6XFx0Rk9MSU9fU0VUX0ZMQUcobmFtZSwgcGFnZSlcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDQ0MTpcXHRGT0xJT19DTEVBUl9GTEFHKG5hbWUsIHBhZ2UpXFxuIDQ0MjpcXHRcXG4gNDQzOlxcdCNkZWZpbmUgVEVTVFBBR0VGTEFHKHVuYW1lLCBsbmFtZSwgcG9saWN5KVxcdFxcdFxcdFxcdFxcXFxcXG4gNDQ0OlxcdEZPTElPX1RFU1RfRkxBRyhsbmFtZSwgRk9MSU9fIyNwb2xpY3kpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA0NDU6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgUGFnZSMjdW5hbWUoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFx0XFx0XFxcXFxcbiA0NDY6XFx0eyByZXR1cm4gdGVzdF9iaXQoUEdfIyNsbmFtZSwgXFx1MDAyNnBvbGljeShwYWdlLCAwKS1cXHUwMDNlZmxhZ3MuZik7IH1cXG4gNDQ3OlxcdFxcbiA0NDg6XFx0I2RlZmluZSBTRVRQQUdFRkxBRyh1bmFtZSwgbG5hbWUsIHBvbGljeSlcXHRcXHRcXHRcXHRcXFxcXFxuIDQ0OTpcXHRGT0xJT19TRVRfRkxBRyhsbmFtZSwgRk9MSU9fIyNwb2xpY3kpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA0NTA6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIFNldFBhZ2UjI3VuYW1lKHN0cnVjdCBwYWdlICpwYWdlKVxcdFxcdFxcXFxcXG4gNDUxOlxcdHsgc2V0X2JpdChQR18jI2xuYW1lLCBcXHUwMDI2cG9saWN5KHBhZ2UsIDEpLVxcdTAwM2VmbGFncy5mKTsgfVxcbiA0NTI6XFx0XFxuIDQ1MzpcXHQjZGVmaW5lIENMRUFSUEFHRUZMQUcodW5hbWUsIGxuYW1lLCBwb2xpY3kpXFx0XFx0XFx0XFx0XFxcXFxcbiA0NTQ6XFx0Rk9MSU9fQ0xFQVJfRkxBRyhsbmFtZSwgRk9MSU9fIyNwb2xpY3kpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA0NTU6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIENsZWFyUGFnZSMjdW5hbWUoc3RydWN0IHBhZ2UgKnBhZ2UpXFx0XFx0XFxcXFxcbiA0NTY6XFx0eyBjbGVhcl9iaXQoUEdfIyNsbmFtZSwgXFx1MDAyNnBvbGljeShwYWdlLCAxKS1cXHUwMDNlZmxhZ3MuZik7IH1cXG4gNDU3OlxcdFxcbiA0NTg6XFx0I2RlZmluZSBfX1NFVFBBR0VGTEFHKHVuYW1lLCBsbmFtZSwgcG9saWN5KVxcdFxcdFxcdFxcdFxcXFxcXG4gNDU5OlxcdF9fRk9MSU9fU0VUX0ZMQUcobG5hbWUsIEZPTElPXyMjcG9saWN5KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzg6MzYuNjMzMDY4ODg4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY0OTU3OTU4NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmYWN0b3JpbmcgUGFnZS9Gb2xpbyBXcml0ZWJhY2sgRmxhZ3M6IEEgS01TQU4gUGVyc3BlY3RpdmUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFByZXZpb3VzbHksIHdlIGhhZCBgVEVTVFBBR0VGTEFHYCBhbmQgYFRFU1RTQ0ZMQUdgIG1hY3JvcyB0aGF0LCBpbiB0aGUgY29udGV4dCBvZiB0aGUgYHdyaXRlYmFja2AgZmxhZywgZXNzZW50aWFsbHkgbWFwcGVkIHRvIGBQYWdlV3JpdGViYWNrYCBhbmQgYFRlc3RTZXRQYWdlV3JpdGViYWNrYCBmdW5jdGlvbnMgb3BlcmF0aW5nIG9uIHBhZ2Ugc3RydWN0dXJlcy4gVGhpcyBzZWVtcyBzdHJhaWdodGZvcndhcmQsIGJ1dCBub3cgd2UncmUgbW9kZXJuaXppbmcgdGhpcy4gVGhlIGNvZGUgaXMgYmVpbmcgdXBkYXRlZCB0byB1c2UgYEZPTElPX1RFU1RfRkxBR2AgYW5kIGBGT0xJT19URVNUX1NFVF9GTEFHYCB3aXRoIGBGT0xJT19IRUFEX1BBR0VgLCB3aGljaCwgYXQgYSBoaWdoIGxldmVsLCBpcyByZXBsYWNpbmcgdGhlIG9sZCBwYWdlLWNlbnRyaWMgaGVscGVycyB3aXRoIGZvbGlvLWNlbnRyaWMgaGVscGVycyBmb3Igd3JpdGViYWNrIG1hbmFnZW1lbnQuXG5cblNwZWNpZmljYWxseSwgdGhlIG9sZCBtYWNyb3Mgd2VyZSBlZmZlY3RpdmVseSBjYWxsaW5nIGBmb2xpb190ZXN0X3dyaXRlYmFja2AgYW5kIGBmb2xpb190ZXN0X3NldF93cml0ZWJhY2tgIGZ1bmN0aW9ucyB3aGljaCBJIHNob3VsZCBub3RlLCBhcmUgZGVmaW5lZCB3aXRoIGBGT0xJT19QRl9OT19UQUlMYC5cblxuVGhpcyB0cmFuc2l0aW9uIGVmZmVjdGl2ZWx5IHJlbW92ZXMsIG9yIGF0IGxlYXN0IHJlbG9jYXRlcywgdGhlIGBQYWdlV3JpdGViYWNrYCwgYFRlc3RTZXRQYWdlV3JpdGViYWNrYCwgYW5kIGBUZXN0Q2xlYXJQYWdlV3JpdGViYWNrYCBoZWxwZXJzLCBub3cgdXNpbmcgZXF1aXZhbGVudCBmb2xpbyBoZWxwZXJzLCB3aXRoIGBmb2xpb190ZXN0X3dyaXRlYmFja2AsIGBmb2xpb190ZXN0X3NldF93cml0ZWJhY2tgLCBhbmQgYGZvbGlvX3Rlc3RfY2xlYXJfd3JpdGViYWNrYC5cblxuVGhpcyBpcyBhIHByZXR0eSBjbGVhbiByZWZhY3RvcmluZzsgaXQncyBhIG1hY3JvIHJlcGxhY2VtZW50IGFuZCBmbGFnIGhlbHBlciBjaGFuZ2UgcHJpbWFyaWx5IGZvciB0aGUgYHdyaXRlYmFja2AgZmxhZy4gU28sIHRoZSBrZXkgcXVlc3Rpb24gaXM6IGRvZXMgdGhpcyBjaGFuZ2UgZXhwb3NlIGFueSBuZXcsIHByZXZpb3VzbHkgdW5hZGRyZXNzZWQsIEtNU0FOLXJlbGV2YW50IG1lbW9yeSBpc3N1ZXM/IExldCdzIGFuYWx5emUuXG5cbkkndmUgZ290IHRvIGNvbnNpZGVyIHBvdGVudGlhbCByaXNrczoga2VybmVsIHN0cnVjdHVyZXMgYmVpbmcgY29waWVkIHRvIHVzZXJzcGFjZSwgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzIG9yIHBhZGRpbmcsIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSwgYWxsb2NhdGlvbnMgb3IgYnVmZmVycyB3aXRob3V0IHplcm9pbmcsIGFuZCBhbnkgYWx0ZXJhdGlvbiBvZiBsZW5ndGggb3IgYm91bmRzIGNoZWNrcyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIE5vbmUgb2YgdGhlc2Ugc2NlbmFyaW9zIHNlZW0gdG8gYmUgcHJlc2VudCBoZXJlLlxuXG5HaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2UgYW5kIHRoZSBhYnNlbmNlIG9mIGFueSBvYnZpb3VzIG5ldyB2dWxuZXJhYmlsaXRpZXMsIEknbSBjb25maWRlbnQgdGhpcyByZWZhY3RvcmluZyBkb2Vzbid0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVhayByaXNrcyB0aGF0IHdvdWxkIHNwZWNpZmljYWxseSB3YXJyYW50IEtNU0FOLiBLQVNBTiBhbmQgc3RhbmRhcmQgc2FuaXRpemVycyBoYW5kbGUgYW55IG1lbW9yeSBpc3N1ZXMgaWYgY2FsbGVycyBwYXNzIGJhZCBwYWdlL2ZvbGlvIHBvaW50ZXJzLCB3aGljaCB0aGlzIGNoYW5nZSBpdHNlbGYgZG9lc24ndCBpbnRyb2R1Y2UuXG5cblRoZXJlZm9yZSwgdGhlIGBOZWVkc0tNU0FOYCBmbGFnIGNhbiBiZSBzZXQgdG8gYGZhbHNlYC4gVGltZSB0byBtb3ZlIGZvcndhcmQgd2l0aCB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGFuZCBwcmVwYXJlIGEgY29uY2lzZSBmaW5hbCByZXBseSB0aGF0IGhpZ2hsaWdodHMgdGhlIGNvbnRyYXN0IGJldHdlZW4gS0FTQU4gYW5kIEtNU0FOIGFwcGxpY2FiaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMjcsIk91dHB1dFRva2VucyI6MjA0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzg6NDMuMTI4ODcxMTIzWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzEwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb252ZXJ0cyB0aGUgcGFnZSBmbGFnIGRlZmluaXRpb25zIGZvciBQR193cml0ZWJhY2sgZnJvbSBsZWdhY3kgcGFnZS1iYXNlZCBtYWNyb3MgKFRFU1RQQUdFRkxBRyAvIFRFU1RTQ0ZMQUcpIHRvIGZvbGlvLWJhc2VkIG1hY3JvcyAoRk9MSU9fVEVTVF9GTEFHIC8gRk9MSU9fVEVTVF9TRVRfRkxBRykuIFxcblxcblRoaXMgaXMgYSB0eXBlLXNhZmUgbWFjcm8gcmVmYWN0b3JpbmcgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgb3BlcmF0ZXMgcHVyZWx5IG9uIHBhZ2UvZm9saW8gYml0IGZsYWdzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIGFsbG9jYXRlLCBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzdHJ1Y3QgcGFkZGluZywgdXNlci1jb3B5IGJ1ZmZlcnMsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFueSBtZW1vcnkgc2FmZXR5IGlzc3VlcyB0aGF0IGNvdWxkIGFyaXNlIGZyb20gaW52YWxpZCBmb2xpby9wYWdlIHJlZmVyZW5jZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBwYWdlIGFjY2VzcykgYXJlIGFscmVhZHkgY292ZXJlZCBieSBLQVNBTiBhbmQgcGFnZSBmbGFnIGRlYnVnIGNoZWNrcyAoVk1fQlVHX09OX1BHRkxBR1MpLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVhayByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnZlcnRzIHRoZSBwYWdlIGZsYWcgZGVmaW5pdGlvbnMgZm9yIFBHX3dyaXRlYmFjayBmcm9tIGxlZ2FjeSBwYWdlLWJhc2VkIG1hY3JvcyAoVEVTVFBBR0VGTEFHIC8gVEVTVFNDRkxBRykgdG8gZm9saW8tYmFzZWQgbWFjcm9zIChGT0xJT19URVNUX0ZMQUcgLyBGT0xJT19URVNUX1NFVF9GTEFHKS4gXFxuXFxuVGhpcyBpcyBhIHR5cGUtc2FmZSBtYWNybyByZWZhY3RvcmluZyBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBvcGVyYXRlcyBwdXJlbHkgb24gcGFnZS9mb2xpbyBiaXQgZmxhZ3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgYWxsb2NhdGUsIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIHN0cnVjdCBwYWRkaW5nLCB1c2VyLWNvcHkgYnVmZmVycywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQW55IG1lbW9yeSBzYWZldHkgaXNzdWVzIHRoYXQgY291bGQgYXJpc2UgZnJvbSBpbnZhbGlkIGZvbGlvL3BhZ2UgcmVmZXJlbmNlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIHBhZ2UgYWNjZXNzKSBhcmUgYWxyZWFkeSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBwYWdlIGZsYWcgZGVidWcgY2hlY2tzIChWTV9CVUdfT05fUEdGTEFHUykuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvcm1hdGlvbiBsZWFrIHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbpz6r[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-06 15:50:16 +0000 UTC FinishedAt: 2026-09-06 16:38:44 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "4e1b4014532112df280540d958895383b791d6d5", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "4e1b4014532112df280540d958895383b791d6d5", "config_name": "upstream-apparmor-kasan.config", "series_id": "3bc64f8e-3527-41a3-85a4-2700cf1ff8bf" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__folio_start_writeback", "folio_end_writeback", "folio_wait_writeback", "folio_end_writeback_no_dropbehind" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19mb2xpb19zdGFydF93cml0ZWJhY2smIzM0OywKICAgICYjMzQ7Zm9saW9fZW5kX3dyaXRlYmFjayYjMzQ7LAogICAgJiMzNDtmb2xpb193YWl0X3dyaXRlYmFjayYjMzQ7LAogICAgJiMzNDtmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb252ZXJ0cyB0aGUgcGFnZSBmbGFnIGRlZmluaXRpb25zIGZvciBQR193cml0ZWJhY2sgZnJvbSBsZWdhY3kgcGFnZS1iYXNlZCBtYWNyb3MgKFRFU1RQQUdFRkxBRyAvIFRFU1RTQ0ZMQUcpIHRvIGZvbGlvLWJhc2VkIG1hY3JvcyAoRk9MSU9fVEVTVF9GTEFHIC8gRk9MSU9fVEVTVF9TRVRfRkxBRykuIFxuXG5UaGlzIGlzIGEgdHlwZS1zYWZlIG1hY3JvIHJlZmFjdG9yaW5nIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IG9wZXJhdGVzIHB1cmVseSBvbiBwYWdlL2ZvbGlvIGJpdCBmbGFncy4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBhbGxvY2F0ZSwgb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgc3RydWN0IHBhZGRpbmcsIHVzZXItY29weSBidWZmZXJzLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBBbnkgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgdGhhdCBjb3VsZCBhcmlzZSBmcm9tIGludmFsaWQgZm9saW8vcGFnZSByZWZlcmVuY2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgcGFnZSBhY2Nlc3MpIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIHBhZ2UgZmxhZyBkZWJ1ZyBjaGVja3MgKFZNX0JVR19PTl9QR0ZMQUdTKS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9ybWF0aW9uIGxlYWsgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgd3JpdGViYWNrIGZvbGlvIGZsYWcgZGVmaW5pdGlvbnMgaW4gaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggZnJvbSBsZWdhY3kgcGFnZS1mbGFnIG1hY3JvcyAoVEVTVFBBR0VGTEFHLCBURVNUU0NGTEFHKSB0byB0aGUgbW9kZXJuIGZvbGlvIGZsYWcgbWFjcm9zIChGT0xJT19URVNUX0ZMQUcsIEZPTElPX1RFU1RfU0VUX0ZMQUcpLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbnZvbHZlZCBpbiBmb2xpbyB3cml0ZWJhY2sgc3RhdGUgdHJhY2tpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6Mzc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3NDIyZWVlM2U3ZjUyNDJmZGQyYTcxMjU3NTJkYTBhY2U2N2RkMTdjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAxNjozNzoxOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXG5pbmRleCAzZGM3OWMwYzVhZGYwLi44NmRkMDQ3MGRhMTE3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXG5AQCAtNTg4LDggJiM0Mzs1ODgsOCBAQCBGT0xJT19GTEFHKG93bmVyXzIsIEZPTElPX0hFQURfUEFHRSlcbiAgKiBPbmx5IHRlc3QtYW5kLXNldCBleGlzdCBmb3IgUEdfd3JpdGViYWNrLiAgVGhlIHVuY29uZGl0aW9uYWwgb3BlcmF0b3JzIGFyZVxuICAqIHJpc2t5OiB0aGV5IGJ5cGFzcyBwYWdlIGFjY291bnRpbmcuXG4gICovXG4tVEVTVFBBR0VGTEFHKFdyaXRlYmFjaywgd3JpdGViYWNrLCBQRl9OT19UQUlMKVxuLVx0VEVTVFNDRkxBRyhXcml0ZWJhY2ssIHdyaXRlYmFjaywgUEZfTk9fVEFJTClcbiYjNDM7Rk9MSU9fVEVTVF9GTEFHKHdyaXRlYmFjaywgRk9MSU9fSEVBRF9QQUdFKVxuJiM0MztcdEZPTElPX1RFU1RfU0VUX0ZMQUcod3JpdGViYWNrLCBGT0xJT19IRUFEX1BBR0UpXG4gRk9MSU9fRkxBRyhtYXBwZWR0b2Rpc2ssIEZPTElPX0hFQURfUEFHRSlcbiBcbiAvKiBQR19yZWFkYWhlYWQgaXMgb25seSB1c2VkIGZvciByZWFkczsgUEdfcmVjbGFpbSBpcyBvbmx5IGZvciB3cml0ZXMgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fZm9saW9fc3RhcnRfd3JpdGViYWNrJiMzNDssCiAgICAmIzM0O2ZvbGlvX2VuZF93cml0ZWJhY2smIzM0OywKICAgICYjMzQ7Zm9saW9fd2FpdF93cml0ZWJhY2smIzM0OywKICAgICYjMzQ7Zm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgdGhlIHdyaXRlYmFjayBmb2xpbyBmbGFnIGRlZmluaXRpb25zIGluIGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oIGZyb20gbGVnYWN5IHBhZ2UtZmxhZyBtYWNyb3MgKFRFU1RQQUdFRkxBRywgVEVTVFNDRkxBRykgdG8gdGhlIG1vZGVybiBmb2xpbyBmbGFnIG1hY3JvcyAoRk9MSU9fVEVTVF9GTEFHLCBGT0xJT19URVNUX1NFVF9GTEFHKS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgaW52b2x2ZWQgaW4gZm9saW8gd3JpdGViYWNrIHN0YXRlIHRyYWNraW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzQyMmVlZTNlN2Y1MjQyZmRkMmE3MTI1NzUyZGEwYWNlNjdkZDE3YwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMTY6Mzc6MTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCmluZGV4IDNkYzc5YzBjNWFkZjAuLjg2ZGQwNDcwZGExMTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCkBAIC01ODgsOCAmIzQzOzU4OCw4IEBAIEZPTElPX0ZMQUcob3duZXJfMiwgRk9MSU9fSEVBRF9QQUdFKQogICogT25seSB0ZXN0LWFuZC1zZXQgZXhpc3QgZm9yIFBHX3dyaXRlYmFjay4gIFRoZSB1bmNvbmRpdGlvbmFsIG9wZXJhdG9ycyBhcmUKICAqIHJpc2t5OiB0aGV5IGJ5cGFzcyBwYWdlIGFjY291bnRpbmcuCiAgKi8KLVRFU1RQQUdFRkxBRyhXcml0ZWJhY2ssIHdyaXRlYmFjaywgUEZfTk9fVEFJTCkKLQlURVNUU0NGTEFHKFdyaXRlYmFjaywgd3JpdGViYWNrLCBQRl9OT19UQUlMKQomIzQzO0ZPTElPX1RFU1RfRkxBRyh3cml0ZWJhY2ssIEZPTElPX0hFQURfUEFHRSkKJiM0MzsJRk9MSU9fVEVTVF9TRVRfRkxBRyh3cml0ZWJhY2ssIEZPTElPX0hFQURfUEFHRSkKIEZPTElPX0ZMQUcobWFwcGVkdG9kaXNrLCBGT0xJT19IRUFEX1BBR0UpCiAKIC8qIFBHX3JlYWRhaGVhZCBpcyBvbmx5IHVzZWQgZm9yIHJlYWRzOyBQR19yZWNsYWltIGlzIG9ubHkgZm9yIHdyaXRlcyAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTI3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogVW5yYXZlbGluZyBQYWdlLUZsYWcgTWVjaGFuaWNzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgdGhlIGFzc29jaWF0ZWQgaW5zdHJ1Y3Rpb25zLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbW9kaWZpY2F0aW9uIGltcGFjdHMgdGhlIHBhZ2UtZmxhZ3MgbWFjcm9zLiBUbyBkbyB0aGlzIGVmZmVjdGl2ZWx5LCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGZvY3VzaW5nIG9uIHRoZSBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgIGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIHRoZSBjb2RlIGFyb3VuZCBsaW5lIDU4OCB0byBzZWUgcHJlY2lzZWx5IHdoYXQmIzM5O3MgYmVlbiBhbHRlcmVkLgoKSSYjMzk7bGwgYmUgbGV2ZXJhZ2luZyBteSB1c3VhbCB0b29scyBmb3IgdGhpcyBraW5kIG9mIGludmVzdGlnYXRpb24g4oCTIGxpa2VseSBlaXRoZXIgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgZGlyZWN0IHZpZXcgb2YgdGhlIGNoYW5nZXMsIG9yIGBncmVwcGVyYCB0byBzZWFyY2ggZm9yIHNwZWNpZmljIHRlcm1zIG9yIHBhdHRlcm5zIHRoYXQgd2lsbCBpbGx1bWluYXRlIHRoZSByZXZpc2VkIGZ1bmN0aW9uYWxpdHkgb2YgdGhvc2UgcGFnZS1mbGFnIG1hY3Jvcy4gVGhpcyBhcHByb2FjaCBzaG91bGQgZ2l2ZSBtZSB0aGUgY2xlYXIsIHRhcmdldGVkIGluZm9ybWF0aW9uIEkgbmVlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NzA6XHRcdF9fQ0xFQVJQQUdFRkxBRyhSZXNlcnZlZCwgcmVzZXJ2ZWQsIFBGX05PX0NPTVBPVU5EKVxuIDU3MTpcdFx0X19TRVRQQUdFRkxBRyhSZXNlcnZlZCwgcmVzZXJ2ZWQsIFBGX05PX0NPTVBPVU5EKVxuIDU3MjpcdEZPTElPX0ZMQUcoc3dhcGJhY2tlZCwgRk9MSU9fSEVBRF9QQUdFKVxuIDU3MzpcdFx0X19GT0xJT19DTEVBUl9GTEFHKHN3YXBiYWNrZWQsIEZPTElPX0hFQURfUEFHRSlcbiA1NzQ6XHRcdF9fRk9MSU9fU0VUX0ZMQUcoc3dhcGJhY2tlZCwgRk9MSU9fSEVBRF9QQUdFKVxuIDU3NTpcdFxuIDU3NjpcdC8qXG4gNTc3Olx0ICogUHJpdmF0ZSBwYWdlIG1hcmtpbmdzIHRoYXQgbWF5IGJlIHVzZWQgYnkgdGhlIGZpbGVzeXN0ZW0gdGhhdCBvd25zIHRoZSBwYWdlXG4gNTc4Olx0ICogZm9yIGl0cyBvd24gcHVycG9zZXMuXG4gNTc5Olx0ICogLSBQR19wcml2YXRlIGFuZCBQR19wcml2YXRlXzIgY2F1c2UgcmVsZWFzZV9mb2xpbygpIGFuZCBjbyB0byBiZSBpbnZva2VkXG4gNTgwOlx0ICovXG4gNTgxOlx0UEFHRUZMQUcoUHJpdmF0ZSwgcHJpdmF0ZSwgUEZfQU5ZKVxuIDU4MjpcdEZPTElPX0ZMQUcocHJpdmF0ZV8yLCBGT0xJT19IRUFEX1BBR0UpXG4gNTgzOlx0XG4gNTg0Olx0Lyogb3duZXJfMiBjYW4gYmUgc2V0IG9uIHRhaWwgcGFnZXMgZm9yIGFub24gbWVtb3J5ICovXG4gNTg1Olx0Rk9MSU9fRkxBRyhvd25lcl8yLCBGT0xJT19IRUFEX1BBR0UpXG4gNTg2Olx0XG4gNTg3Olx0LypcbiA1ODg6XHQgKiBPbmx5IHRlc3QtYW5kLXNldCBleGlzdCBmb3IgUEdfd3JpdGViYWNrLiAgVGhlIHVuY29uZGl0aW9uYWwgb3BlcmF0b3JzIGFyZVxuIDU4OTpcdCAqIHJpc2t5OiB0aGV5IGJ5cGFzcyBwYWdlIGFjY291bnRpbmcuXG4gNTkwOlx0ICovXG4gNTkxOlx0Rk9MSU9fVEVTVF9GTEFHKHdyaXRlYmFjaywgRk9MSU9fSEVBRF9QQUdFKVxuIDU5MjpcdFx0Rk9MSU9fVEVTVF9TRVRfRkxBRyh3cml0ZWJhY2ssIEZPTElPX0hFQURfUEFHRSlcbiA1OTM6XHRGT0xJT19GTEFHKG1hcHBlZHRvZGlzaywgRk9MSU9fSEVBRF9QQUdFKVxuIDU5NDpcdFxuIDU5NTpcdC8qIFBHX3JlYWRhaGVhZCBpcyBvbmx5IHVzZWQgZm9yIHJlYWRzOyBQR19yZWNsYWltIGlzIG9ubHkgZm9yIHdyaXRlcyAqL1xuIDU5NjpcdEZPTElPX0ZMQUcocmVjbGFpbSwgRk9MSU9fSEVBRF9QQUdFKVxuIDU5NzpcdEZPTElPX0ZMQUcocmVhZGFoZWFkLCBGT0xJT19IRUFEX1BBR0UpXG4gNTk4Olx0XHRGT0xJT19URVNUX0NMRUFSX0ZMQUcocmVhZGFoZWFkLCBGT0xJT19IRUFEX1BBR0UpXG4gNTk5Olx0XG4gNjAwOlx0Rk9MSU9fRkxBRyhkcm9wYmVoaW5kLCBGT0xJT19IRUFEX1BBR0UpXG4gNjAxOlx0XHRGT0xJT19URVNUX0NMRUFSX0ZMQUcoZHJvcGJlaGluZCwgRk9MSU9fSEVBRF9QQUdFKVxuIDYwMjpcdFx0X19GT0xJT19TRVRfRkxBRyhkcm9wYmVoaW5kLCBGT0xJT19IRUFEX1BBR0UpXG4gNjAzOlx0XG4gNjA0Olx0I2lmZGVmIENPTkZJR19ISUdITUVNXG4gNjA1Olx0LypcbiA2MDY6XHQgKiBNdXN0IHVzZSBhIG1hY3JvIGhlcmUgZHVlIHRvIGhlYWRlciBkZXBlbmRlbmN5IGlzc3Vlcy4gcGFnZV96b25lKCkgaXMgbm90XG4gNjA3Olx0ICogYXZhaWxhYmxlIGF0IHRoaXMgcG9pbnQuXG4gNjA4Olx0ICovXG4gNjA5Olx0I2RlZmluZSBQYWdlSGlnaE1lbShfX3ApIGlzX2hpZ2htZW1faWR4KHBhZ2Vfem9uZW51bShfX3ApKVxuIDYxMDpcdCNkZWZpbmUgZm9saW9fdGVzdF9oaWdobWVtKF9fZilcdGlzX2hpZ2htZW1faWR4KGZvbGlvX3pvbmVudW0oX19mKSlcbiA2MTE6XHQjZWxzZVxuIDYxMjpcdFBBR0VGTEFHX0ZBTFNFKEhpZ2hNZW0sIGhpZ2htZW0pXG4gNjEzOlx0I2VuZGlmXG4gNjE0Olx0I2RlZmluZSBQaHlzSGlnaE1lbShfX3ApIChQYWdlSGlnaE1lbShwaHlzX3RvX3BhZ2UoX19wKSkpXG4gNjE1Olx0XG4gNjE2Olx0LyogRG9lcyBrbWFwX2xvY2FsX2ZvbGlvKCkgb25seSBhbGxvdyBhY2Nlc3MgdG8gb25lIHBhZ2Ugb2YgdGhlIGZvbGlvPyAqL1xuIDYxNzpcdCNpZmRlZiBDT05GSUdfREVCVUdfS01BUF9MT0NBTF9GT1JDRV9NQVBcbiA2MTg6XHQjZGVmaW5lIGZvbGlvX3Rlc3RfcGFydGlhbF9rbWFwKGYpXHR0cnVlXG4gNjE5Olx0I2Vsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTI0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIGZyYW1lZCBhcyBteSBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgTGludXggUGFnZSBGbGFncyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoZXNlIGZsYWdzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiBgVEVTVFBBR0VGTEFHYCwgYFRFU1RTQ0ZMQUdgLCBgRk9MSU9fVEVTVF9GTEFHYCwgYW5kIGBGT0xJT19URVNUX1NFVF9GTEFHYC4gVGhleSYjMzk7cmUgcHJvYmFibHkgZGVmaW5lZCBzb21ld2hlcmUgaW4gYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYCwgc28gbGV0JiMzOTtzIGhlYWQgb3ZlciB0aGVyZSBhbmQgdGFrZSBhIGxvb2suIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIHJlbGF0ZSB0bywgeW91IGtub3csIHRoZSBwYWdlIGFsbG9jYXRpb24gYW5kIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBrZXJuZWwuIFdoYXQgYXJlIHRoZXkgdGVzdGluZz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBpZiBvbmUgb2YgdGhlbSBpcyBzZXQgb3Igbm90PyBIb3BlZnVsbHkgdGhlIGNvbW1lbnRzIGFyZSBnb29kIGluIHRoZXJlIHNvIEkgZG9uJiMzOTt0IGhhdmUgdG8gdHJhY2UgaXQgYWxsIGJhY2sgZnJvbSB0aGUgdXNhZ2UhIFRpbWUgdG8gZGl2ZSBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIEZPTElPX1RFU1RfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MzUwPXN0YXRpYyB1bnNpZ25lZCBsb25nICpmb2xpb19mbGFncyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBuKVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTQwOS0gKi9cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjQxMDojZGVmaW5lIEZPTElPX1RFU1RfRkxBRyhuYW1lLCBwYWdlKVx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNDExLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBmb2xpb190ZXN0XyMjbmFtZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKSBcXFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTQyNz1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19mb2xpb19jbGVhcl8jI25hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcdFxcXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNDI5LVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6NDMwOiNkZWZpbmUgRk9MSU9fVEVTVF9TRVRfRkxBRyhuYW1lLCBwYWdlKVx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNDMxLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBmb2xpb190ZXN0X3NldF8jI25hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcdFxcXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNDMzLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6NDM0OiNkZWZpbmUgRk9MSU9fVEVTVF9DTEVBUl9GTEFHKG5hbWUsIHBhZ2UpXHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNDM1LXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBmb2xpb190ZXN0X2NsZWFyXyMjbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKSBcXFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTQ3NT1zdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBUZXN0Q2xlYXJQYWdlIyN1bmFtZShzdHJ1Y3QgcGFnZSAqcGFnZSlcdFxcXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNDkxLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6NDkyOiNkZWZpbmUgRk9MSU9fVEVTVF9GTEFHX0ZBTFNFKG5hbWUpXHRcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC00OTMtc3RhdGljIGlubGluZSBib29sIGZvbGlvX3Rlc3RfIyNuYW1lKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXHRcdFxcXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9NTAyPXN0YXRpYyBpbmxpbmUgdm9pZCBfX2ZvbGlvX2NsZWFyXyMjbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKSB7IH1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjUwMzojZGVmaW5lIEZPTElPX1RFU1RfU0VUX0ZMQUdfRkFMU0UobmFtZSlcdFx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTUwNC1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fdGVzdF9zZXRfIyNuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXHRcdFxcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC01MDUteyByZXR1cm4gZmFsc2U7IH1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjUwNjojZGVmaW5lIEZPTElPX1RFU1RfQ0xFQVJfRkxBR19GQUxTRShuYW1lKVx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTUwNy1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fdGVzdF9jbGVhcl8jI25hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcdFx0XFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDEzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBtYWNyb3MsIGFzIGlmIHRoZXkgd2VyZSBteSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaGAgLSBMaW5lcyA0MDAtNDgwKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgcGFnZS1mbGFncy5oYCBoZWFkZXIgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZ2V0IG15IGhlYWQgYXJvdW5kIHRoZSBtYWNybyBkZWZpbml0aW9ucyBraWNraW5nIGFyb3VuZCBsaW5lcyA0MDAgdG8gNDgwLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGJlIHdoZXJlIHRoZSBjb3JlIGJpdCBtYW5pcHVsYXRpb24gaGFwcGVucyBmb3IgdGhlIHBhZ2UgZmxhZ3MsIHNvIHVuZGVyc3RhbmRpbmcgdGhpcyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgbWVtb3J5IG1hbmFnZW1lbnQgaXMgd29ya2luZyB1bmRlciB0aGUgaG9vZC4gSSBhbnRpY2lwYXRlIHRoZXNlIG1hY3JvcyB3aWxsIGhhbmRsZSBvcGVyYXRpb25zIGxpa2Ugc2V0dGluZywgY2xlYXJpbmcsIHRlc3RpbmcsIGFuZCBwcm9iYWJseSBldmVuIGF0b21pYyBtb2RpZmljYXRpb24gb2YgdGhvc2UgcGFnZSBmbGFncy4gSSYjMzk7bSBob3BpbmcgdG8gc2VlIHNvbWUgd2VsbC1kZWZpbmVkIGJpdCBmaWVsZHMsIHBvc3NpYmx5IHVzaW5nIGBfX0JJVChuKWAgb3Igc2ltaWxhciBjb25zdHJ1Y3RzLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGNvbnRleHQgaW4gd2hpY2ggdGhlc2UgYXJlIHVzZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgYXRvbWljIGd1YXJhbnRlZXMgbWFkZSBmb3IgY29uY3VycmVuY3kuIEdpdmVuIHRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIGtlcm5lbCwgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcG9zc2libGUgY29tcGlsZXIgYmFycmllcnMsIHZvbGF0aWxlIHF1YWxpZmllcnMsIG9yIG90aGVyIG1lbW9yeSBvcmRlcmluZyBwcmltaXRpdmVzLCBhbGwgdG8gbWFpbnRhaW4gZGF0YSBpbnRlZ3JpdHkgd2hlbiBtYW55IHByb2Nlc3NvcnMgYWNjZXNzIHRoZSBzYW1lIG1lbW9yeSBsb2NhdGlvbnMuIEkmIzM5O20gcmVhZHkgdG8gY2FyZWZ1bGx5IGNvbnNpZGVyIGVhY2ggbWFjcm8mIzM5O3MgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDAwOlx0I2RlZmluZSBGT0xJT19QRl9OT19UQUlMXHQwXG4gNDAxOlx0I2RlZmluZSBGT0xJT19QRl9OT19DT01QT1VORFx0MFxuIDQwMjpcdCNkZWZpbmUgRk9MSU9fUEZfU0VDT05EXHRcdDFcbiA0MDM6XHRcbiA0MDQ6XHQjZGVmaW5lIEZPTElPX0hFQURfUEFHRVx0XHQwXG4gNDA1Olx0I2RlZmluZSBGT0xJT19TRUNPTkRfUEFHRVx0MVxuIDQwNjpcdFxuIDQwNzpcdC8qXG4gNDA4Olx0ICogTWFjcm9zIHRvIGNyZWF0ZSBmdW5jdGlvbiBkZWZpbml0aW9ucyBmb3IgcGFnZSBmbGFnc1xuIDQwOTpcdCAqL1xuIDQxMDpcdCNkZWZpbmUgRk9MSU9fVEVTVF9GTEFHKG5hbWUsIHBhZ2UpXHRcdFx0XHRcdFxcXG4gNDExOlx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGZvbGlvX3Rlc3RfIyNuYW1lKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pIFxcXG4gNDEyOlx0eyByZXR1cm4gdGVzdF9iaXQoUEdfIyNuYW1lLCBjb25zdF9mb2xpb19mbGFncyhmb2xpbywgcGFnZSkpOyB9XG4gNDEzOlx0XG4gNDE0Olx0I2RlZmluZSBGT0xJT19TRVRfRkxBRyhuYW1lLCBwYWdlKVx0XHRcdFx0XHRcXFxuIDQxNTpcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBmb2xpb19zZXRfIyNuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXHRcXFxuIDQxNjpcdHsgc2V0X2JpdChQR18jI25hbWUsIGZvbGlvX2ZsYWdzKGZvbGlvLCBwYWdlKSk7IH1cbiA0MTc6XHRcbiA0MTg6XHQjZGVmaW5lIEZPTElPX0NMRUFSX0ZMQUcobmFtZSwgcGFnZSlcdFx0XHRcdFx0XFxcbiA0MTk6XHRzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgZm9saW9fY2xlYXJfIyNuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXHRcXFxuIDQyMDpcdHsgY2xlYXJfYml0KFBHXyMjbmFtZSwgZm9saW9fZmxhZ3MoZm9saW8sIHBhZ2UpKTsgfVxuIDQyMTpcdFxuIDQyMjpcdCNkZWZpbmUgX19GT0xJT19TRVRfRkxBRyhuYW1lLCBwYWdlKVx0XHRcdFx0XHRcXFxuIDQyMzpcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX2ZvbGlvX3NldF8jI25hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcdFxcXG4gNDI0Olx0eyBfX3NldF9iaXQoUEdfIyNuYW1lLCBmb2xpb19mbGFncyhmb2xpbywgcGFnZSkpOyB9XG4gNDI1Olx0XG4gNDI2Olx0I2RlZmluZSBfX0ZPTElPX0NMRUFSX0ZMQUcobmFtZSwgcGFnZSlcdFx0XHRcdFx0XFxcbiA0Mjc6XHRzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19mb2xpb19jbGVhcl8jI25hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcdFxcXG4gNDI4Olx0eyBfX2NsZWFyX2JpdChQR18jI25hbWUsIGZvbGlvX2ZsYWdzKGZvbGlvLCBwYWdlKSk7IH1cbiA0Mjk6XHRcbiA0MzA6XHQjZGVmaW5lIEZPTElPX1RFU1RfU0VUX0ZMQUcobmFtZSwgcGFnZSlcdFx0XHRcdFx0XFxcbiA0MzE6XHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgZm9saW9fdGVzdF9zZXRfIyNuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXHRcXFxuIDQzMjpcdHsgcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoUEdfIyNuYW1lLCBmb2xpb19mbGFncyhmb2xpbywgcGFnZSkpOyB9XG4gNDMzOlx0XG4gNDM0Olx0I2RlZmluZSBGT0xJT19URVNUX0NMRUFSX0ZMQUcobmFtZSwgcGFnZSlcdFx0XHRcdFxcXG4gNDM1Olx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGZvbGlvX3Rlc3RfY2xlYXJfIyNuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pIFxcXG4gNDM2Olx0eyByZXR1cm4gdGVzdF9hbmRfY2xlYXJfYml0KFBHXyMjbmFtZSwgZm9saW9fZmxhZ3MoZm9saW8sIHBhZ2UpKTsgfVxuIDQzNzpcdFxuIDQzODpcdCNkZWZpbmUgRk9MSU9fRkxBRyhuYW1lLCBwYWdlKVx0XHRcdFx0XHRcdFxcXG4gNDM5Olx0Rk9MSU9fVEVTVF9GTEFHKG5hbWUsIHBhZ2UpXHRcdFx0XHRcdFx0XFxcbiA0NDA6XHRGT0xJT19TRVRfRkxBRyhuYW1lLCBwYWdlKVx0XHRcdFx0XHRcdFxcXG4gNDQxOlx0Rk9MSU9fQ0xFQVJfRkxBRyhuYW1lLCBwYWdlKVxuIDQ0MjpcdFxuIDQ0MzpcdCNkZWZpbmUgVEVTVFBBR0VGTEFHKHVuYW1lLCBsbmFtZSwgcG9saWN5KVx0XHRcdFx0XFxcbiA0NDQ6XHRGT0xJT19URVNUX0ZMQUcobG5hbWUsIEZPTElPXyMjcG9saWN5KVx0XHRcdFx0XHRcXFxuIDQ0NTpcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IFBhZ2UjI3VuYW1lKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVx0XHRcXFxuIDQ0NjpcdHsgcmV0dXJuIHRlc3RfYml0KFBHXyMjbG5hbWUsIFx1MDAyNnBvbGljeShwYWdlLCAwKS1cdTAwM2VmbGFncy5mKTsgfVxuIDQ0NzpcdFxuIDQ0ODpcdCNkZWZpbmUgU0VUUEFHRUZMQUcodW5hbWUsIGxuYW1lLCBwb2xpY3kpXHRcdFx0XHRcXFxuIDQ0OTpcdEZPTElPX1NFVF9GTEFHKGxuYW1lLCBGT0xJT18jI3BvbGljeSlcdFx0XHRcdFx0XFxcbiA0NTA6XHRzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgU2V0UGFnZSMjdW5hbWUoc3RydWN0IHBhZ2UgKnBhZ2UpXHRcdFxcXG4gNDUxOlx0eyBzZXRfYml0KFBHXyMjbG5hbWUsIFx1MDAyNnBvbGljeShwYWdlLCAxKS1cdTAwM2VmbGFncy5mKTsgfVxuIDQ1MjpcdFxuIDQ1MzpcdCNkZWZpbmUgQ0xFQVJQQUdFRkxBRyh1bmFtZSwgbG5hbWUsIHBvbGljeSlcdFx0XHRcdFxcXG4gNDU0Olx0Rk9MSU9fQ0xFQVJfRkxBRyhsbmFtZSwgRk9MSU9fIyNwb2xpY3kpXHRcdFx0XHRcdFxcXG4gNDU1Olx0c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIENsZWFyUGFnZSMjdW5hbWUoc3RydWN0IHBhZ2UgKnBhZ2UpXHRcdFxcXG4gNDU2Olx0eyBjbGVhcl9iaXQoUEdfIyNsbmFtZSwgXHUwMDI2cG9saWN5KHBhZ2UsIDEpLVx1MDAzZWZsYWdzLmYpOyB9XG4gNDU3Olx0XG4gNDU4Olx0I2RlZmluZSBfX1NFVFBBR0VGTEFHKHVuYW1lLCBsbmFtZSwgcG9saWN5KVx0XHRcdFx0XFxcbiA0NTk6XHRfX0ZPTElPX1NFVF9GTEFHKGxuYW1lLCBGT0xJT18jI3BvbGljeSlcdFx0XHRcdFx0XFxcbiA0NjA6XHRzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19TZXRQYWdlIyN1bmFtZShzdHJ1Y3QgcGFnZSAqcGFnZSlcdFx0XFxcbiA0NjE6XHR7IF9fc2V0X2JpdChQR18jI2xuYW1lLCBcdTAwMjZwb2xpY3kocGFnZSwgMSktXHUwMDNlZmxhZ3MuZik7IH1cbiA0NjI6XHRcbiA0NjM6XHQjZGVmaW5lIF9fQ0xFQVJQQUdFRkxBRyh1bmFtZSwgbG5hbWUsIHBvbGljeSlcdFx0XHRcdFxcXG4gNDY0Olx0X19GT0xJT19DTEVBUl9GTEFHKGxuYW1lLCBGT0xJT18jI3BvbGljeSlcdFx0XHRcdFxcXG4gNDY1Olx0c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fQ2xlYXJQYWdlIyN1bmFtZShzdHJ1Y3QgcGFnZSAqcGFnZSlcdFxcXG4gNDY2Olx0eyBfX2NsZWFyX2JpdChQR18jI2xuYW1lLCBcdTAwMjZwb2xpY3kocGFnZSwgMSktXHUwMDNlZmxhZ3MuZik7IH1cbiA0Njc6XHRcbiA0Njg6XHQjZGVmaW5lIFRFU1RTRVRGTEFHKHVuYW1lLCBsbmFtZSwgcG9saWN5KVx0XHRcdFx0XFxcbiA0Njk6XHRGT0xJT19URVNUX1NFVF9GTEFHKGxuYW1lLCBGT0xJT18jI3BvbGljeSlcdFx0XHRcdFxcXG4gNDcwOlx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgVGVzdFNldFBhZ2UjI3VuYW1lKHN0cnVjdCBwYWdlICpwYWdlKVx0XFxcbiA0NzE6XHR7IHJldHVybiB0ZXN0X2FuZF9zZXRfYml0KFBHXyMjbG5hbWUsIFx1MDAyNnBvbGljeShwYWdlLCAxKS1cdTAwM2VmbGFncy5mKTsgfVxuIDQ3MjpcdFxuIDQ3MzpcdCNkZWZpbmUgVEVTVENMRUFSRkxBRyh1bmFtZSwgbG5hbWUsIHBvbGljeSlcdFx0XHRcdFxcXG4gNDc0Olx0Rk9MSU9fVEVTVF9DTEVBUl9GTEFHKGxuYW1lLCBGT0xJT18jI3BvbGljeSlcdFx0XHRcdFxcXG4gNDc1Olx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgVGVzdENsZWFyUGFnZSMjdW5hbWUoc3RydWN0IHBhZ2UgKnBhZ2UpXHRcXFxuIDQ3NjpcdHsgcmV0dXJuIHRlc3RfYW5kX2NsZWFyX2JpdChQR18jI2xuYW1lLCBcdTAwMjZwb2xpY3kocGFnZSwgMSktXHUwMDNlZmxhZ3MuZik7IH1cbiA0Nzc6XHRcbiA0Nzg6XHQjZGVmaW5lIFBBR0VGTEFHKHVuYW1lLCBsbmFtZSwgcG9saWN5KVx0XHRcdFx0XHRcXFxuIDQ3OTpcdFx0VEVTVFBBR0VGTEFHKHVuYW1lLCBsbmFtZSwgcG9saWN5KVx0XHRcdFx0XFxcbiA0ODA6XHRcdFNFVFBBR0VGTEFHKHVuYW1lLCBsbmFtZSwgcG9saWN5KVx0XHRcdFx0XFxcbiA0ODE6XHRcdENMRUFSUEFHRUZMQUcodW5hbWUsIGxuYW1lLCBwb2xpY3kpXG4gNDgyOlx0XG4gNDgzOlx0I2RlZmluZSBfX1BBR0VGTEFHKHVuYW1lLCBsbmFtZSwgcG9saWN5KVx0XHRcdFx0XFxcbiA0ODQ6XHRcdFRFU1RQQUdFRkxBRyh1bmFtZSwgbG5hbWUsIHBvbGljeSlcdFx0XHRcdFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA2NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvZGUgQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGRpZmYgYW5kIGltbWVkaWF0ZWx5IG15IGJyYWluIGZsYWdzIHRoZSBjaGFuZ2UuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB6ZXJvaW5nIGluIG9uIHRoZSBzaGlmdCBmcm9tIGBURVNUUEFHRUZMQUdgIGFuZCBgVEVTVFNDRkxBR2AgdG8gYEZPTElPX1RFU1RfRkxBR2AgYW5kIGBGT0xJT19URVNUX1NFVF9GTEFHYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGlzIG1lYW5zLCBlc3BlY2lhbGx5IGJlY2F1c2Ugb2YgdGhlIHJlbW92YWwgb2YgUEZfTk9fVEFJTC4gSSByZWNvZ25pemUgYFBGX05PX1RBSUxgIGFzIGEgZmFtaWxpYXIgZmxhZywgYnV0IEkmIzM5O20gbW9tZW50YXJpbHkgc3R1bXBlZCBvbiBgVEVTVFNDRkxBR2AuIE15IHJlZmxleCBpcyB0byBqdW1wIGludG8gdGhlIGhlYWRlcnM7IEkmIzM5O20gcHJldHR5IHN1cmUgSSYjMzk7bGwgZmluZCB0aGUgZGVmaW5pdGlvbiBvZiBgVEVTVFNDRkxBR2AgaW4gYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYCBvciBzb21ldGhpbmcgc2ltaWxhcmx5IG5hbWVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYEZPTElPYC1iYXNlZCBhcHByb2FjaCBpcyByZWFsbHkgZG9pbmcgdG8gdGhlIHBhZ2UgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoZSBvbGRlciBwYWdlLWZsYWcgbWVjaGFuaXNtcyB0byBhY2N1cmF0ZWx5IHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvbiB0aGUgd3JpdGViYWNrIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1RFU1RTQ0ZMQUcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD00NzU9c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgVGVzdENsZWFyUGFnZSMjdW5hbWUoc3RydWN0IHBhZ2UgKnBhZ2UpXHRcXFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTQ4Ny1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjQ4ODojZGVmaW5lIFRFU1RTQ0ZMQUcodW5hbWUsIGxuYW1lLCBwb2xpY3kpXHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNDg5LVx0VEVTVFNFVEZMQUcodW5hbWUsIGxuYW1lLCBwb2xpY3kpXHRcdFx0XHRcXFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTUzNz1zdGF0aWMgaW5saW5lIGludCBUZXN0Q2xlYXJQYWdlIyN1bmFtZShzdHJ1Y3QgcGFnZSAqcGFnZSkgeyByZXR1cm4gMDsgfVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTU0MS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjU0MjojZGVmaW5lIFRFU1RTQ0ZMQUdfRkFMU0UodW5hbWUsIGxuYW1lKVx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNTQzLVx0VEVTVFNFVEZMQUdfRkFMU0UodW5hbWUsIGxuYW1lKSBURVNUQ0xFQVJGTEFHX0ZBTFNFKHVuYW1lLCBsbmFtZSlcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD01NDc9Rk9MSU9fRkxBRyhyZWZlcmVuY2VkLCBGT0xJT19IRUFEX1BBR0UpXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNTQ5LVx0X19GT0xJT19TRVRfRkxBRyhyZWZlcmVuY2VkLCBGT0xJT19IRUFEX1BBR0UpXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo1NTA6UEFHRUZMQUcoRGlydHksIGRpcnR5LCBQRl9IRUFEKSBURVNUU0NGTEFHKERpcnR5LCBkaXJ0eSwgUEZfSEVBRClcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTU1MS1cdF9fQ0xFQVJQQUdFRkxBRyhEaXJ0eSwgZGlydHksIFBGX0hFQUQpXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9NTYyPVBBR0VGTEFHKFBpbm5lZCwgcGlubmVkLCBQRl9OT19DT01QT1VORClcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjU2MzpcdFRFU1RTQ0ZMQUcoUGlubmVkLCBwaW5uZWQsIFBGX05PX0NPTVBPVU5EKVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNTY0LVBBR0VGTEFHKFNhdmVQaW5uZWQsIHNhdmVwaW5uZWQsIFBGX05PX0NPTVBPVU5EKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD02NTM9UEFHRUZMQUcoSFdQb2lzb24sIGh3cG9pc29uLCBQRl9BTlkpXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo2NTQ6VEVTVFNDRkxBRyhIV1BvaXNvbiwgaHdwb2lzb24sIFBGX0FOWSlcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTY1NS0jZGVmaW5lIF9fUEdfSFdQT0lTT04gKDFVTCBcdTAwM2NcdTAwM2MgUEdfaHdwb2lzb24pXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9NjU3PVBBR0VGTEFHX0ZBTFNFKEhXUG9pc29uLCBod3BvaXNvbilcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjY1ODpURVNUU0NGTEFHX0ZBTFNFKEhXUG9pc29uLCBod3BvaXNvbilcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTY1OS0jZGVmaW5lIF9fUEdfSFdQT0lTT04gMFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDY4CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMzQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRmxhZyBNYWNyb3MqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSBgVEVTVFNDRkxBRyh1bmFtZSwgbG5hbWUsIHBvbGljeSlgIGV4cGFuZHMgaW50byBhIGBURVNUU0VURkxBR2AgYW5kIGEgYFRFU1RDTEVBUkZMQUdgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gU28sIGBURVNUU0VURkxBR2AgZ2VuZXJhdGVzIGBGT0xJT19URVNUX1NFVF9GTEFHKGxuYW1lLCBGT0xJT18jI3BvbGljeSlgIGFuZCBgVGVzdFNldFBhZ2UjI3VuYW1lKHN0cnVjdCBwYWdlICpwYWdlKWAsIGFuZCBgVEVTVENMRUFSRkxBR2AgZ2VuZXJhdGVzIGBGT0xJT19URVNUX0NMRUFSX0ZMQUcobG5hbWUsIEZPTElPXyMjcG9saWN5KWAgYWxvbmcgd2l0aCBgVGVzdENsZWFyUGFnZSMjdW5hbWUoc3RydWN0IHBhZ2UgKnBhZ2UpYC4gV2UgYWxzbyBoYXZlIGBURVNUUEFHRUZMQUdgLCB3aGljaCBkZWZpbmVzIGBGT0xJT19URVNUX0ZMQUcobG5hbWUsIEZPTElPXyMjcG9saWN5KWAgYW5kIGBQYWdlIyN1bmFtZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlgLgoKTm93LCB3aXRoIHRoaXMgc3BlY2lmaWMgcGF0Y2gsIGl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgcmVwbGFjZWQgYFRFU1RQQUdFRkxBRyhXcml0ZWJhY2ssIHdyaXRlYmFjaywgUEZfTk9fVEFJTClgIGFuZCBgVEVTVFNDRkxBRyhXcml0ZWJhY2ssIHdyaXRlYmFjaywgUEZfTk9fVEFJTClgIHdpdGggYEZPTElPX1RFU1RfRkxBRyh3cml0ZWJhY2ssIEZPTElPX0hFQURfUEFHRSlgIGFuZCBgRk9MSU9fVEVTVF9TRVRfRkxBRyh3cml0ZWJhY2ssIEZPTElPX0hFQURfUEFHRSlgLiBIbW0sIHRoYXQmIzM5O3MgYSBzaWduaWZpY2FudCBjaGFuZ2UuCgpXaGF0IHdhcyByZW1vdmVkPyBXZWxsLCBjbGVhcmx5IHdlIGxvc3QgYFBhZ2VXcml0ZWJhY2socGFnZSlgLCBgVGVzdFNldFBhZ2VXcml0ZWJhY2socGFnZSlgLCBgVGVzdENsZWFyUGFnZVdyaXRlYmFjayhwYWdlKWAgYW5kIGFsc28gYGZvbGlvX3Rlc3RfY2xlYXJfd3JpdGViYWNrKGZvbGlvKWAuIEJ1dCB3aHk/IEdpdmVuIHRoYXQgYFRFU1RTQ0ZMQUdgIGluY2x1ZGVkIGEgYFRFU1RDTEVBUkZMQUdgLCB0aGF0IGZ1bmN0aW9uIHdhcyByZW1vdmVkIHdoZW4gaXQgd2FzIG5vIGxvbmdlciB1c2VkLiBUaGlzIG1lYW5zIHRoYXQgdGhlc2Ugb2xkZXIgZnVuY3Rpb25zIG1pZ2h0IGhhdmUgYmVlbiBjb21wbGV0ZWx5IGVsaW1pbmF0ZWQgYmVjYXVzZSB0aGV5IGFyZSBubyBsb25nZXIgbmVjZXNzYXJ5LCBvciBtb3JlIGxpa2VseSwgYmVjYXVzZSB0aGV5IGFyZSBtYWRlIHJlZHVuZGFudCBieSBkaXJlY3QgYWNjZXNzIHRvIHRoZSBgZm9saW9gIG9iamVjdC4KClRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlICp3aHkqLCBJIHJlYWxseSBuZWVkIHRvIGNoZWNrIHRoZSBjb21taXQgbG9nLiBJIHNob3VsZCBnbyBsb29rIGZvciB0aGUgY29tbWl0IG1lc3NhZ2UgYW5kIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBJdCYjMzk7cyBsaWtlbHkgdGhlIGFuc3dlciBpcyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQYWdlV3JpdGViYWNrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg3MgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqRmluZGluZyB0aGUgV3JpdGViYWNrIEZsYWcmIzM5O3MgRm9vdHByaW50KioKCkFscmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSB0aGUgd3JpdGViYWNrIG1lY2hhbmlzbSwgYW5kIEkmIzM5O3ZlIGhpdCBhIHNuYWcuIFRoZSBmdW5jdGlvbiBgUGFnZVdyaXRlYmFja2DigJR0aGUgb25lIHRoYXQmIzM5O3Mgc3VwcG9zZWQgdG8gaGFuZGxlLCBvciBhdCBsZWFzdCBzaWduYWwsIHRoZSB3cml0ZWJhY2sgc3RhdGXigJRpc24mIzM5O3Qgc2hvd2luZyB1cCBpbiBhbnkgb2YgdGhlIHN5bWJvbCB0YWJsZXMuIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgc3VzcGljaW91cy4gVGhpcyBsaWtlbHkgbWVhbnMgaXQgaXNuJiMzOTt0IGEgZGlyZWN0IGV4cG9ydGVkIGZ1bmN0aW9uLCBvciBpdCBtaWdodCBiZSByZW5hbWVkIGF0IGNvbXBpbGUgdGltZSwgb3IgSSYjMzk7bSBzaW1wbHkgbG9va2luZyBpbiB0aGUgd3JvbmcgcGxhY2UuCgpHaXZlbiB0aGF0IGBQYWdlV3JpdGViYWNrYCBpcyBhIGZ1bmRhbWVudGFsIGNvbmNlcHQsIEkgc2hvdWxkIGhhdmUgc2VlbiBzb21ldGhpbmcuIE9rYXksIGxldCYjMzk7cyBiYWNrIHVwIGEgc3RlcC4gQ291bGQgaXQgYmUgYSByZWxhdGVkIGZ1bmN0aW9uIG9yIGEgbWFjcm8/IExldCYjMzk7cyB0cnkgbG9va2luZyBmb3IgZnVuY3Rpb24gbmFtZXMgdGhhdCBzZWVtIHJlbGF0ZWQgdG8gdGhlIHdyaXRlYmFjayBmdW5jdGlvbmFsaXR5LCBuYW1lcyB0aGF0IGNvdWxkIGludGVyYWN0IHdpdGggdGhlIHdyaXRlYmFjayBmbGFnLiBgVGVzdFNldFBhZ2VXcml0ZWJhY2tgIGFuZCBgVGVzdENsZWFyUGFnZVdyaXRlYmFja2AgaW1tZWRpYXRlbHkgY29tZSB0byBtaW5kLiBUaGVzZSBmdW5jdGlvbnMgd291bGQgYmUgdGhlIG9wZXJhdGlvbnMgcmVsYXRlZCB0byBxdWVyeWluZyBhbmQgdXBkYXRpbmcgYSBmbGFnLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBgUGFnZVdyaXRlYmFja2AmIzM5O3Mgd29yayBpcyBoYW5kbGVkIGJ5IHRoZXNlLiBJdCBtaWdodCBiZSBhIG1hY3JvLCBvciBzb21ldGhpbmcgdGhhdCBpcyBpbmxpbmVkLCBvciBzb21lIG90aGVyIHBpZWNlIG9mIG1hZ2ljIHRoZSBrZXJuZWwgY2FuIGRvISBMZXQmIzM5O3MgZm9sbG93IHRob3NlIGJyZWFkY3J1bWJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1Rlc3QoU2V0fENsZWFyKVBhZ2VXcml0ZWJhY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjMzCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIFdyaXRlYmFjayBUZXN0cyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHdyaXRlYmFjayBmdW5jdGlvbmFsaXR5LCBzcGVjaWZpY2FsbHkgaW4gdGhlIGNvbnRleHQgb2Ygb3VyIGZvbGlvIHN5c3RlbS4gSSYjMzk7bSBoaXR0aW5nIGEgc25hZyBvciBuZWVkIHRvIGNsYXJpZnkgc29tZXRoaW5nLiBNeSBtaW5kIGlzIGltbWVkaWF0ZWx5IGRyYXduIHRvIHRob3NlIHRlc3QgZnVuY3Rpb25zOiBgZm9saW9fdGVzdF93cml0ZWJhY2tgIGFuZCBgZm9saW9fdGVzdF9zZXRfd3JpdGViYWNrYC4gSXQmIzM5O3MgbGlrZWx5IHRoZXkmIzM5O3JlIGNyaXRpY2FsIGZvciB2YWxpZGF0aW5nIHRoZSB3cml0ZWJhY2sgbWVjaGFuaXNtLCBidXQgdGhlIGV4YWN0IGZsb3cgYW5kIGludGVyYWN0aW9ucyB0aGVzZSBmdW5jdGlvbnMgcmVwcmVzZW50IG5lZWQgZnVydGhlciBpbnZlc3RpZ2F0aW9uLCBzcGVjaWZpY2FsbHkgaG93IHRoZXkgYXJlIHVzZWQsIHdoYXQgdGhleSB0ZXN0LCBhbmQgaG93IHRoZSByZXN1bHRzIGNhbiBiZSB2ZXJpZmllZCBhbmQgaW50ZXJwcmV0ZWQuIFVuZGVyc3RhbmRpbmcgdGhlIG51YW5jZXMgb2YgdGhlc2UgZnVuY3Rpb25zIGlzIGtleSB0byBncmFzcGluZyB0aGUgaW50ZWdyaXR5IG9mIHRoZSB3cml0ZWJhY2sgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fdGVzdF9zZXRfd3JpdGViYWNrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BhZ2Utd3JpdGViYWNrLmM9Mjk4OT12b2lkIF9fZm9saW9fc3RhcnRfd3JpdGViYWNrKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wga2VlcF93cml0ZSlcbi0tXG5tbS9wYWdlLXdyaXRlYmFjay5jLTMwMDYtXHRcdHhhc19sb2FkKFx1MDAyNnhhcyk7XG5tbS9wYWdlLXdyaXRlYmFjay5jOjMwMDc6XHRcdGZvbGlvX3Rlc3Rfc2V0X3dyaXRlYmFjayhmb2xpbyk7XG5tbS9wYWdlLXdyaXRlYmFjay5jLTMwMDgtXG4tLVxubW0vcGFnZS13cml0ZWJhY2suYy0zMDMwLVx0fSBlbHNlIHtcbm1tL3BhZ2Utd3JpdGViYWNrLmM6MzAzMTpcdFx0Zm9saW9fdGVzdF9zZXRfd3JpdGViYWNrKGZvbGlvKTtcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMzAzMi1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYwOQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipBbmFseXppbmcgYGZvbGlvX3Rlc3RfY2xlYXJfd3JpdGViYWNrYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byBpdC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoIGBmb2xpb190ZXN0X2NsZWFyX3dyaXRlYmFja2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZnVuY3Rpb25hbGl0eSBpbnNpZGUgYW5kIG91dC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIGEgdGhvcm91Z2ggY2hlY2sg4oCTIGRpc3NlY3QgdGhlIGNvZGUsIGlkZW50aWZ5IHRoZSBwdXJwb3NlIG9mIHRoaXMgY29tcG9uZW50LCBhbmQgZGV0ZXJtaW5lIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgaXNzdWVzLCBib3R0bGVuZWNrcywgb3IgYXJlYXMgd2hlcmUgb3B0aW1pemF0aW9uIGNvdWxkIGJlIGJlbmVmaWNpYWwuIE15IGdvYWwgaXMgdG8gYWNoaWV2ZSBhIGRlZXAgYW5kIG51YW5jZWQgdW5kZXJzdGFuZGluZyBvZiBpdHMgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fdGVzdF9jbGVhcl93cml0ZWJhY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODA1CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTI2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBLZXJuZWwgUGFnZSBGbGFnIEFic3RyYWN0aW9uIFJlZmFjdG9yaW5nKioKCk9rYXksIHNvIGBmb2xpb190ZXN0X2NsZWFyX3dyaXRlYmFja2Agd2FzIHVudXNlZCwgdGhhdCYjMzk7cyBnb29kIHRvIGtub3cuIE5vdywgbG9va2luZyBhdCBgZm9saW9fdGVzdF93cml0ZWJhY2tgIGFuZCBgZm9saW9fdGVzdF9zZXRfd3JpdGViYWNrYCwgdGhvc2UgYXJlIGRpcmVjdCBmb2xpbyBoZWxwZXJzIGZvciB0ZXN0aW5nIGFuZCBzZXR0aW5nIHRoZSBgUEdfd3JpdGViYWNrYCBmbGFnLiBJbnRlcmVzdGluZ2x5LCBgRk9MSU9fVEVTVF9GTEFHKHdyaXRlYmFjaywgRk9MSU9fSEVBRF9QQUdFKWAgYW5kIGBGT0xJT19URVNUX1NFVF9GTEFHKHdyaXRlYmFjaywgRk9MSU9fSEVBRF9QQUdFKWAgc2VlbSB0byBtaXJyb3IgYFRFU1RQQUdFRkxBRyhXcml0ZWJhY2ssIHdyaXRlYmFjaywgUEZfTk9fVEFJTClgIGFuZCBgVEVTVFNDRkxBRyhXcml0ZWJhY2ssIHdyaXRlYmFjaywgUEZfTk9fVEFJTClgLgoKTGV0IG1lIGNoZWNrIGhvdyBgVEVTVFBBR0VGTEFHYCBleHBhbmRzLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBjYWxsaW5nIGBGT0xJT19URVNUX0ZMQUdgLCBhbmQgdGhlbiBjYWxsaW5nIGEgc3RhdGljIGZ1bmN0aW9uIHdpdGggYHRlc3RfYml0YCBvbiB0aGUgcmVsZXZhbnQgZmxhZy4gYEZPTElPX1BGX05PX1RBSUxgIGlzIGRlZmluZWQgYXMgMCwgYW5kIGBGT0xJT19IRUFEX1BBR0VgIGlzIGFsc28gMC4KClNvLCBgRk9MSU9fVEVTVF9GTEFHKHdyaXRlYmFjaywgRk9MSU9fSEVBRF9QQUdFKWAgcmVzb2x2ZXMgdG8gYHRlc3RfYml0KFBHX3dyaXRlYmFjaywgY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKWAsIHdoaWNoIGlzIGlkZW50aWNhbCB0byB3aGF0IGBURVNUUEFHRUZMQUcoV3JpdGViYWNrLCB3cml0ZWJhY2ssIFBGX05PX1RBSUwpYCBjcmVhdGVzLiBUaGUgc2FtZSBob2xkcyB0cnVlIGZvciBgZm9saW9fdGVzdF9zZXRfd3JpdGViYWNrYCBhbmQgYFRFU1RTRVRGTEFHYC4KClRoZXJlZm9yZSwgdGhlIHBhZ2UtYmFzZWQgaGVscGVycyBsaWtlIGBQYWdlV3JpdGViYWNrYCwgYFRlc3RTZXRQYWdlV3JpdGViYWNrYCwgZXRjLiBhcmUgYmVpbmcgcmVtb3ZlZCBiZWNhdXNlIHRoZXkgYXJlIG5vIGxvbmdlciBuZWVkZWQsIGJlY2F1c2UgdGhlIGZvbGlvIHZlcnNpb24gaXMgaWRlbnRpY2FsLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgZnV6emluZyBndWlkZWxpbmVzLiBXZSYjMzk7dmUgZ290IHRvIGJlIGNhcmVmdWwgYW5kIG5vdCBibGluZGx5IHRydXN0IGNsYWltcyBvZiAmIzM0O25vIGZ1bmN0aW9uYWwgY2hhbmdlJiMzNDsgb3IgJiMzNDtyZWZhY3RvcmluZy4mIzM0OyBUaGUgZ3VpZGVsaW5lcyBzYXkgYW55IHJlZmFjdG9yaW5nIG9mIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgbXVzdCBiZSBmdXp6ZWQuCgpMb29raW5nIGF0IHRoZSBuZWdhdGl2ZSBjcml0ZXJpYSwgZG9lcyB0aGlzIGZhbGwgaW50byBhbnkgb2YgdGhvc2UgY2F0ZWdvcmllcz8gSXQmIzM5O3Mgbm90IGRvY3VtZW50YXRpb24sIGEgdXNlci1zcGFjZSBjaGFuZ2UsIGRlY29yYXRpdmUgbG9nZ2luZywgb3IgYSBidWlsZCBzeXN0ZW0gY2hhbmdlIHRoYXQgZG9lc24mIzM5O3QgYWZmZWN0IEMgbG9naWMuIEl0JiMzOTtzIG5vdCB1bnJlYWNoYWJsZSBoYXJkd2FyZSBvciBjb2RlLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgcG9zaXRpdmUgY3JpdGVyaWEuIFRoaXMgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgKGBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaGApLCBpdCByZXN0cnVjdHVyZXMgZm9saW8gZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmbGFnIGFic3RyYWN0aW9ucy4gU28sIHRoaXMgZGVmaW5pdGVseSBmYWxscyBpbnRvIHRoZSBjYXRlZ29yeSBvZiAmIzM0O3JlZmFjdG9yaW5ncyBhbmQgY29kZSBjbGVhbnVwcyB0aGF0IHJlc3RydWN0dXJlIGRhdGEgc3RydWN0dXJlcy4mIzM0OyBUaGlzIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2UuCgpTbyBgV29ydGhGdXp6aW5nYCBtdXN0IGJlIGB0cnVlYC4KCk5vdyBsZXQmIzM5O3MgZGV0ZXJtaW5lIHRoZSBjb25maWd1cmF0aW9ucyBhbmQgZm9jdXMgc3ltYm9scy4gSXQmIzM5O3MgZXNzZW50aWFsIHRoYXQgd2UgZG8gdGhpcyByaWdodC4gSSBuZWVkIHRvIHN0YXJ0IGZpZ3VyaW5nIG91dCB3aGljaCBjb25maWd1cmF0aW9ucyBhcmUgbW9zdCByZWxldmFudCBhbmQgaWRlbnRpZnkgYW55IG5vbi11YmlxdWl0b3VzIGZ1bmN0aW9ucyB0aGF0IGFyZSBtb2RpZmllZC4gVG8gaGVscCB3aXRoIHRoYXQgSSBzaG91bGQgbG9vayBhdCBgZm9saW9fdGVzdF93cml0ZWJhY2tgIGNhbGxlcnMgYWNyb3NzIHRoZSBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZvbGlvX3Rlc3Rfd3JpdGViYWNrXFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9rZXJuZWwvdXYuYz0zMTY9aW50IF9fbWFrZV9mb2xpb19zZWN1cmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHV2X2NiX2hlYWRlciAqdXZjYilcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtMzE5LVxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjMyMDpcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtMzIxLVx0XHRyZXR1cm4gLUVCVVNZO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JhY2t1cC5jPTEwMz10dG1fYmFja3VwX2JhY2t1cF9mb2xpbyhzdHJ1Y3QgZmlsZSAqYmFja3VwLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JhY2t1cC5jLTE2My1cdFx0cmV0ID0gc2htZW1fd3JpdGVfZm9saW8odG9fZm9saW8pO1xuZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYmFja3VwLmM6MTY0Olx0XHRcdGlmICghZm9saW9fdGVzdF93cml0ZWJhY2sodG9fZm9saW8pKVxuZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYmFja3VwLmMtMTY1LVx0XHRcdFx0Zm9saW9fY2xlYXJfcmVjbGFpbSh0b19mb2xpbyk7XG4tLVxuZnMvYWlvLmM9NDYwPXN0YXRpYyBpbnQgYWlvX21pZ3JhdGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZHN0LFxuLS1cbmZzL2Fpby5jLTQ5Ny1cdC8qIFdyaXRlYmFjayBtdXN0IGJlIGNvbXBsZXRlICovXG5mcy9haW8uYzo0OTg6XHRCVUdfT04oZm9saW9fdGVzdF93cml0ZWJhY2soc3JjKSk7XG5mcy9haW8uYy00OTktXHRmb2xpb19nZXQoZHN0KTtcbi0tXG5mcy9idHJmcy9kaXNrLWlvLmM9NDg0PXN0YXRpYyBib29sIGJ0cmVlX3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwX2ZsYWdzKVxuZnMvYnRyZnMvZGlzay1pby5jLTQ4NS17XG5mcy9idHJmcy9kaXNrLWlvLmM6NDg2Olx0aWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSB8fCBmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSlcbmZzL2J0cmZzL2Rpc2staW8uYy00ODctXHRcdHJldHVybiBmYWxzZTtcbi0tXG5mcy9idHJmcy9leHRlbnRfaW8uYz05NzE9dm9pZCBjbGVhcl9mb2xpb19leHRlbnRfbWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuZnMvYnRyZnMvZXh0ZW50X2lvLmMtOTg1LVx0QVNTRVJUKCFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSk7XG5mcy9idHJmcy9leHRlbnRfaW8uYzo5ODY6XHRBU1NFUlQoIWZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSk7XG5mcy9idHJmcy9leHRlbnRfaW8uYy05ODctXG4tLVxuZnMvYnRyZnMvZXh0ZW50X2lvLmM9MTgxNz1zdGF0aWMgaW50IHN1Ym1pdF9vbmVfc2VjdG9yKHN0cnVjdCBidHJmc19pbm9kZSAqaW5vZGUsXG4tLVxuZnMvYnRyZnMvZXh0ZW50X2lvLmMtMTg5Mi1cdCAqL1xuZnMvYnRyZnMvZXh0ZW50X2lvLmM6MTg5MzpcdEFTU0VSVChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpO1xuZnMvYnRyZnMvZXh0ZW50X2lvLmMtMTg5NC1cbi0tXG5mcy9idHJmcy9leHRlbnRfaW8uYz0yNzE2PXN0YXRpYyBpbnQgZXh0ZW50X3dyaXRlX2NhY2hlX3BhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmZzL2J0cmZzL2V4dGVudF9pby5jLTI4MjktXHRcdFx0ICAgIGJ0cmZzX2lzX3N1YnBhZ2UoaW5vZGVfdG9fZnNfaW5mbyhpbm9kZSksIGZvbGlvKSkge1xuZnMvYnRyZnMvZXh0ZW50X2lvLmM6MjgzMDpcdFx0XHRcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpXG5mcy9idHJmcy9leHRlbnRfaW8uYy0yODMxLVx0XHRcdFx0XHRzdWJtaXRfd3JpdGVfYmlvKGJpb19jdHJsLCAwKTtcbi0tXG5mcy9idHJmcy9leHRlbnRfaW8uYy0yODM0LVxuZnMvYnRyZnMvZXh0ZW50X2lvLmM6MjgzNTpcdFx0XHRpZiAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pIHx8XG5mcy9idHJmcy9leHRlbnRfaW8uYy0yODM2LVx0XHRcdCAgICAhZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpIHtcbi0tXG5mcy9idHJmcy9leHRlbnRfaW8uYz0zMTY1PXN0YXRpYyB2b2lkIGRldGFjaF9leHRlbnRfYnVmZmVyX2ZvbGlvKGNvbnN0IHN0cnVjdCBleHRlbnRfYnVmZmVyICplYiwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5mcy9idHJmcy9leHRlbnRfaW8uYy0zMTkzLVx0XHRcdEJVR19PTihmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSk7XG5mcy9idHJmcy9leHRlbnRfaW8uYzozMTk0Olx0XHRcdEJVR19PTihmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpO1xuZnMvYnRyZnMvZXh0ZW50X2lvLmMtMzE5NS1cdFx0XHQvKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlbiYjMzk7dCBiZSBhdHRhY2hlZCB0byBhIG5ldyBlYi4gKi9cbi0tXG5mcy9idHJmcy9pbm9kZS5jPTc2NDc9c3RhdGljIGJvb2wgYnRyZnNfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnBfZmxhZ3MpXG5mcy9idHJmcy9pbm9kZS5jLTc2NDgte1xuZnMvYnRyZnMvaW5vZGUuYzo3NjQ5Olx0aWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSB8fCBmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSlcbmZzL2J0cmZzL2lub2RlLmMtNzY1MC1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmZzL2J0cmZzL3N1YnBhZ2UuYz00NTY9dm9pZCBidHJmc19zdWJwYWdlX3NldF93cml0ZWJhY2soY29uc3Qgc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmZzX2luZm8sXG4tLVxuZnMvYnRyZnMvc3VicGFnZS5jLTQ3NS1cdCAqL1xuZnMvYnRyZnMvc3VicGFnZS5jOjQ3NjpcdGlmICghZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKVxuZnMvYnRyZnMvc3VicGFnZS5jLTQ3Ny1cdFx0X19mb2xpb19zdGFydF93cml0ZWJhY2soZm9saW8sIHRydWUpO1xuLS1cbmZzL2J0cmZzL3N1YnBhZ2UuYz00ODM9dm9pZCBidHJmc19zdWJwYWdlX2NsZWFyX3dyaXRlYmFjayhjb25zdCBzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqZnNfaW5mbyxcbi0tXG5mcy9idHJmcy9zdWJwYWdlLmMtNDkzLVx0aWYgKHN1YnBhZ2VfdGVzdF9iaXRtYXBfYWxsX3plcm8oZnNfaW5mbywgZm9saW8sIHdyaXRlYmFjaykpIHtcbmZzL2J0cmZzL3N1YnBhZ2UuYzo0OTQ6XHRcdEFTU0VSVChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpO1xuZnMvYnRyZnMvc3VicGFnZS5jLTQ5NS1cdFx0Zm9saW9fZW5kX3dyaXRlYmFjayhmb2xpbyk7XG4tLVxuZnMvYnVmZmVyLmM9ODM9dm9pZCBidWZmZXJfY2hlY2tfZGlydHlfd3JpdGViYWNrKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxuZnMvYnVmZmVyLmMtOTUtXG5mcy9idWZmZXIuYzo5NjpcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpXG5mcy9idWZmZXIuYy05Ny1cdFx0KndyaXRlYmFjayA9IHRydWU7XG4tLVxuZnMvYnVmZmVyLmM9MTcyMT1pbnQgX19ibG9ja193cml0ZV9mdWxsX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxuZnMvYnVmZmVyLmMtMTgxMC1cdCAqL1xuZnMvYnVmZmVyLmM6MTgxMTpcdEJVR19PTihmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpO1xuZnMvYnVmZmVyLmMtMTgxMi1cdGZvbGlvX3N0YXJ0X3dyaXRlYmFjayhmb2xpbyk7XG4tLVxuZnMvYnVmZmVyLmMtMTg2NC1cdH0gd2hpbGUgKChiaCA9IGJoLVx1MDAzZWJfdGhpc19wYWdlKSAhPSBoZWFkKTtcbmZzL2J1ZmZlci5jOjE4NjU6XHRCVUdfT04oZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKTtcbmZzL2J1ZmZlci5jLTE4NjYtXHRtYXBwaW5nX3NldF9lcnJvcihmb2xpby1cdTAwM2VtYXBwaW5nLCBlcnIpO1xuLS1cbmZzL2J1ZmZlci5jPTI3ODQ9Ym9vbCB0cnlfdG9fZnJlZV9idWZmZXJzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuZnMvYnVmZmVyLmMtMjc5MC1cdEJVR19PTighZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pKTtcbmZzL2J1ZmZlci5jOjI3OTE6XHRpZiAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKVxuZnMvYnVmZmVyLmMtMjc5Mi1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmZzL2NlcGgvYWRkci5jPTEzMTE9dm9pZCBjZXBoX3Byb2Nlc3NfZm9saW9fYmF0Y2goc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvY2VwaC9hZGRyLmMtMTMyOS1cdFx0XHRcJiMzNDtmb2xpb190ZXN0X2RpcnR5ICUjeCwgZm9saW9fdGVzdF9sb2NrZWQgJSN4XFxuXCYjMzQ7LFxuZnMvY2VwaC9hZGRyLmM6MTMzMDpcdFx0XHRmb2xpbywgZm9saW8tXHUwMDNlaW5kZXgsIGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSxcbmZzL2NlcGgvYWRkci5jLTEzMzEtXHRcdFx0Zm9saW9fdGVzdF9kaXJ0eShmb2xpbyksXG4tLVxuZnMvY2VwaC9hZGRyLmMtMTMzMy1cbmZzL2NlcGgvYWRkci5jOjEzMzQ6XHRcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykgfHxcbmZzL2NlcGgvYWRkci5jLTEzMzUtXHRcdCAgICBmb2xpb190ZXN0X3ByaXZhdGVfMihmb2xpbykgLyogW0RFUFJFQ0FURURdICovKSB7XG4tLVxuZnMvZXh0NC9pbm9kZS5jPTE3MDY9c3RhdGljIHZvaWQgbXBhZ2VfcmVsZWFzZV91bnVzZWRfcGFnZXMoc3RydWN0IG1wYWdlX2RhX2RhdGEgKm1wZCxcbi0tXG5mcy9leHQ0L2lub2RlLmMtMTc0OC1cdFx0XHRCVUdfT04oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSk7XG5mcy9leHQ0L2lub2RlLmM6MTc0OTpcdFx0XHRCVUdfT04oZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKTtcbmZzL2V4dDQvaW5vZGUuYy0xNzUwLVx0XHRcdGlmIChpbnZhbGlkYXRlKSB7XG4tLVxuZnMvZXh0NC9pbm9kZS5jPTI2MDg9c3RhdGljIGludCBtcGFnZV9wcmVwYXJlX2V4dGVudF90b19tYXAoc3RydWN0IG1wYWdlX2RhX2RhdGEgKm1wZClcbi0tXG5mcy9leHQ0L2lub2RlLmMtMjY3NC1cdFx0XHQgKi9cbmZzL2V4dDQvaW5vZGUuYzoyNjc1Olx0XHRcdGlmICgoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pIFx1MDAyNlx1MDAyNlxuZnMvZXh0NC9pbm9kZS5jLTI2NzYtXHRcdFx0ICAgIG1wZC1cdTAwM2V3YmMtXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfTk9ORSkgfHxcbi0tXG5mcy9leHQ0L2lub2RlLmMtMjY4Ni1cdFx0XHRpZiAoIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKSB7XG5mcy9leHQ0L2lub2RlLmM6MjY4NzpcdFx0XHRcdGlmICghZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKSB7XG5mcy9leHQ0L2lub2RlLmMtMjY4OC1cdFx0XHRcdFx0X19mb2xpb19zdGFydF93cml0ZWJhY2soZm9saW8sIGZhbHNlKTtcbi0tXG5mcy9leHQ0L2lub2RlLmMtMjY5NS1cdFx0XHRmb2xpb193YWl0X3dyaXRlYmFjayhmb2xpbyk7XG5mcy9leHQ0L2lub2RlLmM6MjY5NjpcdFx0XHRCVUdfT04oZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKTtcbmZzL2V4dDQvaW5vZGUuYy0yNjk3LVxuLS1cbmZzL2V4dDQvbW92ZV9leHRlbnQuYz0xMTc9c3RhdGljIGludCBtZXh0X2ZvbGlvX21rdXB0b2RhdGUoc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IGZyb20sIHNpemVfdCB0bylcbi0tXG5mcy9leHQ0L21vdmVfZXh0ZW50LmMtMTI2LVx0QlVHX09OKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbykpO1xuZnMvZXh0NC9tb3ZlX2V4dGVudC5jOjEyNzpcdEJVR19PTihmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpO1xuZnMvZXh0NC9tb3ZlX2V4dGVudC5jLTEyOC1cbi0tXG5mcy9leHQ0L3BhZ2UtaW8uYz00NjI9dm9pZCBleHQ0X2Jpb193cml0ZV9mb2xpbyhzdHJ1Y3QgZXh0NF9pb19zdWJtaXQgKmlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmZzL2V4dDQvcGFnZS1pby5jLTQ3Mi1cdEJVR19PTighZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pKTtcbmZzL2V4dDQvcGFnZS1pby5jOjQ3MzpcdEJVR19PTihmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpO1xuZnMvZXh0NC9wYWdlLWlvLmMtNDc0LVxuLS1cbmZzL2YyZnMvY29tcHJlc3MuYz0xMDUyPXN0YXRpYyB2b2lkIGNhbmNlbF9jbHVzdGVyX3dyaXRlYmFjayhzdHJ1Y3QgY29tcHJlc3NfY3R4ICpjYyxcbi0tXG5mcy9mMmZzL2NvbXByZXNzLmMtMTA3MS1cdFx0Y2xlYXJfcGFnZV9wcml2YXRlX2djaW5nKGNjLVx1MDAzZXJwYWdlc1tpXSk7XG5mcy9mMmZzL2NvbXByZXNzLmM6MTA3MjpcdFx0aWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKHBhZ2VfZm9saW8oY2MtXHUwMDNlcnBhZ2VzW2ldKSkpXG5mcy9mMmZzL2NvbXByZXNzLmMtMTA3My1cdFx0XHRlbmRfcGFnZV93cml0ZWJhY2soY2MtXHUwMDNlcnBhZ2VzW2ldKTtcbi0tXG5mcy9mMmZzL2NvbXByZXNzLmM9MTQ5Nj1zdGF0aWMgaW50IGYyZnNfd3JpdGVfcmF3X3BhZ2VzKHN0cnVjdCBjb21wcmVzc19jdHggKmNjLFxuLS1cbmZzL2YyZnMvY29tcHJlc3MuYy0xNTQxLVxuZnMvZjJmcy9jb21wcmVzcy5jOjE1NDI6XHRcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpIHtcbmZzL2YyZnMvY29tcHJlc3MuYy0xNTQzLVx0XHRcdGlmICh3YmMtXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfTk9ORSlcbi0tXG5mcy9mMmZzL2RhdGEuYz0zMjI4PXN0YXRpYyBpbnQgZjJmc193cml0ZV9jYWNoZV9wYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9mMmZzL2RhdGEuYy0zNDA5LVxuZnMvZjJmcy9kYXRhLmM6MzQxMDpcdFx0XHRpZiAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKSB7XG5mcy9mMmZzL2RhdGEuYy0zNDExLVx0XHRcdFx0aWYgKHdiYy1cdTAwM2VzeW5jX21vZGUgPT0gV0JfU1lOQ19OT05FKVxuLS1cbmZzL2YyZnMvZjJmcy5oPTUxOTk9c3RhdGljIGlubGluZSB2b2lkIGYyZnNfdHJ1bmNhdGVfbWV0YV9pbm9kZV9wYWdlcyhzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmksXG4tLVxuZnMvZjJmcy9mMmZzLmgtNTIwOS1cdFx0aWYgKCFJU19FUlIoZm9saW8pKSB7XG5mcy9mMmZzL2YyZnMuaDo1MjEwOlx0XHRcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpXG5mcy9mMmZzL2YyZnMuaC01MjExLVx0XHRcdFx0bmVlZF9zdWJtaXQgPSB0cnVlO1xuLS1cbmZzL2YyZnMvZ2MuYz0xNTAzPXN0YXRpYyBpbnQgbW92ZV9kYXRhX3BhZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgYmxvY2tfdCBiaWR4LCBpbnQgZ2NfdHlwZSxcbi0tXG5mcy9mMmZzL2djLmMtMTUyMi1cdGlmIChnY190eXBlID09IEJHX0dDKSB7XG5mcy9mMmZzL2djLmM6MTUyMzpcdFx0aWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkge1xuZnMvZjJmcy9nYy5jLTE1MjQtXHRcdFx0ZXJyID0gLUVBR0FJTjtcbi0tXG5mcy9mMmZzL2lubGluZS5jPTE0Nj1pbnQgZjJmc19jb252ZXJ0X2lubGluZV9mb2xpbyhzdHJ1Y3QgZG5vZGVfb2ZfZGF0YSAqZG4sIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuZnMvZjJmcy9pbmxpbmUuYy0xODYtXG5mcy9mMmZzL2lubGluZS5jOjE4NzpcdGYyZnNfYnVnX29uKEYyRlNfRl9TQihmb2xpbyksIGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSk7XG5mcy9mMmZzL2lubGluZS5jLTE4OC1cbi0tXG5mcy9mMmZzL2lub2RlLmM9MTczPWJvb2wgZjJmc19pbm9kZV9jaGtzdW1fdmVyaWZ5KHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5mcy9mMmZzL2lub2RlLmMtMTg1LVx0XHRcdGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIHx8XG5mcy9mMmZzL2lub2RlLmM6MTg2Olx0XHRcdGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSlcbmZzL2YyZnMvaW5vZGUuYy0xODctI2VuZGlmXG4tLVxuZnMvZjJmcy9ub2RlLmM9MTg3MD1pbnQgZjJmc193cml0ZV9zaW5nbGVfbm9kZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKm5vZGVfZm9saW8sIGludCBzeW5jX21vZGUsXG4tLVxuZnMvZjJmcy9ub2RlLmMtMTg4MC1cdFx0Lyogc2V0IHBhZ2UgZGlydHkgYW5kIHdyaXRlIGl0ICovXG5mcy9mMmZzL25vZGUuYzoxODgxOlx0XHRpZiAoIWZvbGlvX3Rlc3Rfd3JpdGViYWNrKG5vZGVfZm9saW8pKVxuZnMvZjJmcy9ub2RlLmMtMTg4Mi1cdFx0XHRmb2xpb19tYXJrX2RpcnR5KG5vZGVfZm9saW8pO1xuLS1cbmZzL2YyZnMvc2VnbWVudC5jPTQzNTI9dm9pZCBmMmZzX2ZvbGlvX3dhaXRfd3JpdGViYWNrKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gcGFnZV90eXBlIHR5cGUsXG4tLVxuZnMvZjJmcy9zZWdtZW50LmMtNDM1NC17XG5mcy9mMmZzL3NlZ21lbnQuYzo0MzU1Olx0aWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkge1xuZnMvZjJmcy9zZWdtZW50LmMtNDM1Ni1cdFx0c3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpID0gRjJGU19GX1NCKGZvbGlvKTtcbi0tXG5mcy9mMmZzL3NlZ21lbnQuYy00MzYzLVx0XHRcdGZvbGlvX3dhaXRfd3JpdGViYWNrKGZvbGlvKTtcbmZzL2YyZnMvc2VnbWVudC5jOjQzNjQ6XHRcdFx0ZjJmc19idWdfb24oc2JpLCBsb2NrZWQgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSk7XG5mcy9mMmZzL3NlZ21lbnQuYy00MzY1LVx0XHR9IGVsc2Uge1xuLS1cbmZzL2ZzLXdyaXRlYmFjay5jPTQwNT1zdGF0aWMgYm9vbCBpbm9kZV9kb19zd2l0Y2hfd2JzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZnMtd3JpdGViYWNrLmMtNDQ1LVx0XHRsb25nIG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuZnMvZnMtd3JpdGViYWNrLmM6NDQ2Olx0XHRXQVJOX09OX09OQ0UoIWZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSk7XG5mcy9mcy13cml0ZWJhY2suYy00NDctXHRcdHdiX3N0YXRfbW9kKG9sZF93YiwgV0JfV1JJVEVCQUNLLCAtbnIpO1xuLS1cbmZzL2Z1c2UvZGV2LmM9MTEyMz1zdGF0aWMgaW50IGZ1c2VfdHJ5X21vdmVfZm9saW8oc3RydWN0IGZ1c2VfY29weV9zdGF0ZSAqY3MsIHN0cnVjdCBmb2xpbyAqKmZvbGlvcClcbi0tXG5mcy9mdXNlL2Rldi5jLTExNzItXHRpZiAoV0FSTl9PTihmb2xpb190ZXN0X2RpcnR5KG9sZGZvbGlvKSB8fFxuZnMvZnVzZS9kZXYuYzoxMTczOlx0XHRcdFx0Zm9saW9fdGVzdF93cml0ZWJhY2sob2xkZm9saW8pKSlcbmZzL2Z1c2UvZGV2LmMtMTE3NC1cdFx0Z290byBvdXRfZmFsbGJhY2tfdW5sb2NrO1xuLS1cbmZzL2dmczIvYW9wcy5jPTE5MT1zdGF0aWMgaW50IGdmczJfd3JpdGVfamRhdGFfYmF0Y2goc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvZ2ZzMi9hb3BzLmMtMjI5LVxuZnMvZ2ZzMi9hb3BzLmM6MjMwOlx0XHRpZiAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKSB7XG5mcy9nZnMyL2FvcHMuYy0yMzEtXHRcdFx0aWYgKHdiYy1cdTAwM2VzeW5jX21vZGUgIT0gV0JfU1lOQ19OT05FKVxuLS1cbmZzL2dmczIvYW9wcy5jLTIzNi1cbmZzL2dmczIvYW9wcy5jOjIzNzpcdFx0QlVHX09OKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSk7XG5mcy9nZnMyL2FvcHMuYy0yMzgtXHRcdGlmICghZm9saW9fY2xlYXJfZGlydHlfZm9yX2lvKGZvbGlvKSlcbi0tXG5mcy9nZnMyL21ldGFfaW8uYz0zMz1zdGF0aWMgdm9pZCBnZnMyX2FzcGFjZV93cml0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmZzL2dmczIvbWV0YV9pby5jLTcxLVx0ICovXG5mcy9nZnMyL21ldGFfaW8uYzo3MjpcdEJVR19PTihmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpO1xuZnMvZ2ZzMi9tZXRhX2lvLmMtNzMtXHRmb2xpb19zdGFydF93cml0ZWJhY2soZm9saW8pO1xuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9ODMxPXZvaWQgaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuKVxuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtODQwLVx0aWYgKG9mZnNldCA9PSAwIFx1MDAyNlx1MDAyNiBsZW4gPT0gZm9saW9fc2l6ZShmb2xpbykpIHtcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6ODQxOlx0XHRXQVJOX09OX09OQ0UoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKTtcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtODQyLVx0XHRmb2xpb19jYW5jZWxfZGlydHkoZm9saW8pO1xuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9MTk4MD1pbnQgaW9tYXBfd3JpdGViYWNrX2ZvbGlvKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xOTkzLVx0V0FSTl9PTl9PTkNFKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKTtcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MTk5NDpcdFdBUk5fT05fT05DRShmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpO1xuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xOTk1LVxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYz00MjQ9c3RhdGljIGludCBtZXRhcGFnZV93cml0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy00NDYtXHRCVUdfT04oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSk7XG5mcy9qZnMvamZzX21ldGFwYWdlLmM6NDQ3Olx0QlVHX09OKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSk7XG5mcy9qZnMvamZzX21ldGFwYWdlLmMtNDQ4LVx0Zm9saW9fc3RhcnRfd3JpdGViYWNrKGZvbGlvKTtcbi0tXG5mcy9qZnMvamZzX21ldGFwYWdlLmM9NjY1PXN0YXRpYyB2b2lkIG1ldGFwYWdlX2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCxcbi0tXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtNjY5LVxuZnMvamZzL2pmc19tZXRhcGFnZS5jOjY3MDpcdEJVR19PTihmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpO1xuZnMvamZzL2pmc19tZXRhcGFnZS5jLTY3MS1cbi0tXG5mcy9tcGFnZS5jPTQ1Mz1zdGF0aWMgaW50IG1wYWdlX3dyaXRlX2ZvbGlvKHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmZzL21wYWdlLmMtNjE4LVxuZnMvbXBhZ2UuYzo2MTk6XHRCVUdfT04oZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKTtcbmZzL21wYWdlLmMtNjIwLVx0Zm9saW9fc3RhcnRfd3JpdGViYWNrKGZvbGlvKTtcbi0tXG5mcy9uZXRmcy93cml0ZV9jb2xsZWN0LmM9MTE0PXN0YXRpYyB2b2lkIG5ldGZzX3dyaXRlYmFja191bmxvY2tfZm9saW9zKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLFxuLS1cbmZzL25ldGZzL3dyaXRlX2NvbGxlY3QuYy0xNDYtXHRcdGZvbGlvID0gZm9saW9xX2ZvbGlvKGZvbGlvcSwgc2xvdCk7XG5mcy9uZXRmcy93cml0ZV9jb2xsZWN0LmM6MTQ3Olx0XHRpZiAoV0FSTl9PTkNFKCFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksXG5mcy9uZXRmcy93cml0ZV9jb2xsZWN0LmMtMTQ4LVx0XHRcdCAgICAgIFwmIzM0O1I9JTA4eDogZm9saW8gJWx4IGlzIG5vdCB1bmRlciB3cml0ZWJhY2tcXG5cJiMzNDssXG4tLVxuZnMvbmZzL3dyaXRlLmM9MjA0NT1pbnQgbmZzX3diX2ZvbGlvX3JlY2xhaW0oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5mcy9uZnMvd3JpdGUuYy0yMDU3LVxuZnMvbmZzL3dyaXRlLmM6MjA1ODpcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpXG5mcy9uZnMvd3JpdGUuYy0yMDU5LVx0XHRyZXR1cm4gLUVCVVNZO1xuLS1cbmZzL25pbGZzMi9wYWdlLmM9MTk2PXN0YXRpYyB2b2lkIG5pbGZzX2NvcHlfZm9saW8oc3RydWN0IGZvbGlvICpkc3QsIHN0cnVjdCBmb2xpbyAqc3JjLFxuLS1cbmZzL25pbGZzMi9wYWdlLmMtMjAxLVxuZnMvbmlsZnMyL3BhZ2UuYzoyMDI6XHRCVUdfT04oZm9saW9fdGVzdF93cml0ZWJhY2soZHN0KSk7XG5mcy9uaWxmczIvcGFnZS5jLTIwMy1cbi0tXG5mcy9uaWxmczIvc2VnbWVudC5jPTE2ODY9c3RhdGljIHZvaWQgbmlsZnNfYmVnaW5fZm9saW9faW8oc3RydWN0IGZvbGlvICpmb2xpbylcbmZzL25pbGZzMi9zZWdtZW50LmMtMTY4Ny17XG5mcy9uaWxmczIvc2VnbWVudC5jOjE2ODg6XHRpZiAoIWZvbGlvIHx8IGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSlcbmZzL25pbGZzMi9zZWdtZW50LmMtMTY4OS1cdFx0Lypcbi0tXG5mcy9uaWxmczIvc2VnbWVudC5jPTE3ODc9c3RhdGljIHZvaWQgbmlsZnNfZW5kX2ZvbGlvX2lvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBlcnIpXG4tLVxuZnMvbmlsZnMyL3NlZ21lbnQuYy0xNzkyLVx0aWYgKGJ1ZmZlcl9uaWxmc19ub2RlKGZvbGlvX2J1ZmZlcnMoZm9saW8pKSBcdTAwMjZcdTAwMjZcbmZzL25pbGZzMi9zZWdtZW50LmM6MTc5MzpcdFx0XHQhZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKSB7XG5mcy9uaWxmczIvc2VnbWVudC5jLTE3OTQtXHRcdC8qXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jPTMyNjA9c3RhdGljIHZvaWQgZ2F0aGVyX3N0YXRzKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbnVtYV9tYXBzICptZCwgaW50IHB0ZV9kaXJ0eSxcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzI4MC1cbmZzL3Byb2MvdGFza19tbXUuYzozMjgxOlx0aWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSlcbmZzL3Byb2MvdGFza19tbXUuYy0zMjgyLVx0XHRtZC1cdTAwM2V3cml0ZWJhY2sgJiM0Mzs9IG5yX3BhZ2VzO1xuLS1cbmZzL3ViaWZzL2ZpbGUuYz0xNDU4PXN0YXRpYyBib29sIHViaWZzX3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgdW51c2VkX2dmcF9mbGFncylcbi0tXG5mcy91Ymlmcy9maWxlLmMtMTQ2Mi1cbmZzL3ViaWZzL2ZpbGUuYzoxNDYzOlx0aWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSlcbmZzL3ViaWZzL2ZpbGUuYy0xNDY0LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD0yMjE9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydV9nZW5fZm9saW9fc2VxKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTI0Ni1cdFx0IChmb2xpb190ZXN0X3JlY2xhaW0oZm9saW8pIFx1MDAyNlx1MDAyNlxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDoyNDc6XHRcdCAgKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIHx8IGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkpKVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0yNDgtXHRcdGdlbiA9IE1JTl9OUl9HRU5TO1xuLS1cbm1tL2NvbXBhY3Rpb24uYz04NTU9aXNvbGF0ZV9taWdyYXRlcGFnZXNfYmxvY2soc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHVuc2lnbmVkIGxvbmcgbG93X3Bmbixcbi0tXG5tbS9jb21wYWN0aW9uLmMtMTEyNy1cdFx0ICovXG5tbS9jb21wYWN0aW9uLmM6MTEyODpcdFx0aWYgKChtb2RlIFx1MDAyNiBJU09MQVRFX0FTWU5DX01JR1JBVEUpIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpXG5tbS9jb21wYWN0aW9uLmMtMTEyOS1cdFx0XHRnb3RvIGlzb2xhdGVfZmFpbF9wdXQ7XG4tLVxubW0vZmlsZW1hcC5jPTYzNz1ib29sIGZpbGVtYXBfcmFuZ2VfaGFzX3dyaXRlYmFjayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9maWxlbWFwLmMtNjUzLVx0XHRpZiAoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgfHwgZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pIHx8XG5tbS9maWxlbWFwLmM6NjU0Olx0XHRcdFx0Zm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKVxubW0vZmlsZW1hcC5jLTY1NS1cdFx0XHRicmVhaztcbi0tXG5tbS9maWxlbWFwLmM9MTYwOT1zdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZmlsZW1hcC5jLTE2MTQtXG5tbS9maWxlbWFwLmM6MTYxNTpcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykgfHwgZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpXG5tbS9maWxlbWFwLmMtMTYxNi1cdFx0cmV0dXJuO1xuLS1cbm1tL2ZpbGVtYXAuYz0xNjU2PXZvaWQgZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9maWxlbWFwLmMtMTY1Ny17XG5tbS9maWxlbWFwLmM6MTY1ODpcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pLCBmb2xpbyk7XG5tbS9maWxlbWFwLmMtMTY1OS1cbi0tXG5tbS9maWxlbWFwLmM9MTY4Nz12b2lkIGZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL2ZpbGVtYXAuYy0xNjg4LXtcbm1tL2ZpbGVtYXAuYzoxNjg5Olx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksIGZvbGlvKTtcbm1tL2ZpbGVtYXAuYy0xNjkwLVxuLS1cbm1tL2ZpbGVtYXAuYz0yMTgyPXVuc2lnbmVkIGZpbmRfbG9ja19lbnRyaWVzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90ICpzdGFydCxcbi0tXG5tbS9maWxlbWFwLmMtMjIwNC1cdFx0XHRpZiAoZm9saW8tXHUwMDNlbWFwcGluZyAhPSBtYXBwaW5nIHx8XG5tbS9maWxlbWFwLmM6MjIwNTpcdFx0XHQgICAgZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKVxubW0vZmlsZW1hcC5jLTIyMDYtXHRcdFx0XHRnb3RvIHVubG9jaztcbi0tXG5tbS9maWxlbWFwLmM9MjQwMD11bnNpZ25lZCBmaWxlbWFwX2dldF9mb2xpb3NfZGlydHkoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgKnN0YXJ0LFxuLS1cbm1tL2ZpbGVtYXAuYy0yNDExLVx0XHRcdGJvb2wgY2xlYW4gPSAhZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgXHUwMDI2XHUwMDI2XG5tbS9maWxlbWFwLmM6MjQxMjpcdFx0XHRcdCAgICAgIWZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKTtcbm1tL2ZpbGVtYXAuYy0yNDEzLVx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4tLVxubW0vZmlsZW1hcC5jPTI3NjI9c3RhdGljIHZvaWQgZmlsZW1hcF9lbmRfZHJvcGJlaGluZF9yZWFkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZmlsZW1hcC5jLTI3NjUtXHRcdHJldHVybjtcbm1tL2ZpbGVtYXAuYzoyNzY2Olx0aWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSB8fCBmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSlcbm1tL2ZpbGVtYXAuYy0yNzY3LVx0XHRyZXR1cm47XG4tLVxubW0vZmlsZW1hcC5jPTQ1NDM9Ym9vbCBmaWxlbWFwX3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKVxuLS1cbm1tL2ZpbGVtYXAuYy00NTQ5LVx0XHRyZXR1cm4gdHJ1ZTtcbm1tL2ZpbGVtYXAuYzo0NTUwOlx0aWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSlcbm1tL2ZpbGVtYXAuYy00NTUxLVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vZm9saW8uYz01MzI9c3RhdGljIHZvaWQgbHJ1X2RlYWN0aXZhdGVfZmlsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZm9saW8uYy01NDctXG5tbS9mb2xpby5jOjU0ODpcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykgfHwgZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpIHtcbm1tL2ZvbGlvLmMtNTQ5LVx0XHQvKlxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MzkyOT1pbnQgZm9saW9fY2hlY2tfc3BsaXR0YWJsZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzk2MC1cbm1tL2h1Z2VfbWVtb3J5LmM6Mzk2MTpcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpXG5tbS9odWdlX21lbW9yeS5jLTM5NjItXHRcdHJldHVybiAtRUJVU1k7XG4tLVxubW0va2h1Z2VwYWdlZC5jPTIyNjA9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yMzg0LVx0XHRcdFx0Z290byB4YV91bmxvY2tlZDtcbm1tL2todWdlcGFnZWQuYzoyMzg1Olx0XHRcdH0gZWxzZSBpZiAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKSB7XG5tbS9raHVnZXBhZ2VkLmMtMjM4Ni1cdFx0XHRcdHhhc191bmxvY2tfaXJxKFx1MDAyNnhhcyk7XG4tLVxubW0va2h1Z2VwYWdlZC5jLTI0MjUtXHRcdGlmICghaXNfc2htZW0gXHUwMDI2XHUwMDI2IChmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSB8fFxubW0va2h1Z2VwYWdlZC5jOjI0MjY6XHRcdFx0XHQgIGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkpIHtcbm1tL2todWdlcGFnZWQuYy0yNDI3LVx0XHRcdC8qXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMzg2PWludCBtZW1vcnlfZmFpbHVyZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjU4MS1cdCAqL1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyNTgyOlx0aWYgKCFmb2xpb190ZXN0X2xydShmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI1ODMtXHRcdGdvdG8gaWRlbnRpZnlfcGFnZV9zdGF0ZTtcbi0tXG5tbS9tZW1vcnkuYz00ODQ0PXZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTUwOTgtXHRcdFx0ZXhjbHVzaXZlID0gdHJ1ZTtcbm1tL21lbW9yeS5jOjUwOTk6XHRcdH0gZWxzZSBpZiAoZXhjbHVzaXZlIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykgXHUwMDI2XHUwMDI2XG5tbS9tZW1vcnkuYy01MTAwLVx0XHRcdCAgZGF0YV9yYWNlKHNpLVx1MDAzZWZsYWdzIFx1MDAyNiBTV1BfU1RBQkxFX1dSSVRFUykpIHtcbi0tXG5tbS9taWdyYXRlLmM9Nzc1PXZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL21pZ3JhdGUuYy04NDctXHQgKi9cbm1tL21pZ3JhdGUuYzo4NDg6XHRpZiAoZm9saW9fdGVzdF93cml0ZWJhY2sobmV3Zm9saW8pKVxubW0vbWlncmF0ZS5jLTg0OS1cdFx0Zm9saW9fZW5kX3dyaXRlYmFjayhuZXdmb2xpbyk7XG4tLVxubW0vbWlncmF0ZS5jPTkwNz1pbnQgbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpkc3QsXG4tLVxubW0vbWlncmF0ZS5jLTkwOS17XG5tbS9taWdyYXRlLmM6OTEwOlx0QlVHX09OKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKHNyYykpO1x0LyogV3JpdGViYWNrIG11c3QgYmUgY29tcGxldGUgKi9cbm1tL21pZ3JhdGUuYy05MTEtXHRyZXR1cm4gX19taWdyYXRlX2ZvbGlvKG1hcHBpbmcsIGRzdCwgc3JjLCBOVUxMLCBtb2RlKTtcbi0tXG5tbS9taWdyYXRlLmM9MTIxMz1zdGF0aWMgaW50IG1pZ3JhdGVfZm9saW9fdW5tYXAobmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbi0tXG5tbS9taWdyYXRlLmMtMTI2NS1cbm1tL21pZ3JhdGUuYzoxMjY2Olx0aWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKHNyYykpIHtcbm1tL21pZ3JhdGUuYy0xMjY3LVx0XHQvKlxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTEwOT1zdGF0aWMgdm9pZCBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTIzMy1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTIzNDpcdFx0QlVHX09OKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSk7XG5tbS9taWdyYXRlX2RldmljZS5jLTEyMzUtXG4tLVxubW0vcGFnZS13cml0ZWJhY2suYz0yMzY3PXN0YXRpYyBib29sIGZvbGlvX3ByZXBhcmVfd3JpdGViYWNrKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjM4NS1cbm1tL3BhZ2Utd3JpdGViYWNrLmM6MjM4NjpcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpIHtcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjM4Ny1cdFx0aWYgKHdiYy1cdTAwM2VzeW5jX21vZGUgPT0gV0JfU1lOQ19OT05FKVxuLS1cbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjM5MC1cdH1cbm1tL3BhZ2Utd3JpdGViYWNrLmM6MjM5MTpcdEJVR19PTihmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpO1xubW0vcGFnZS13cml0ZWJhY2suYy0yMzkyLVxuLS1cbm1tL3BhZ2Utd3JpdGViYWNrLmM9Mjk4OT12b2lkIF9fZm9saW9fc3RhcnRfd3JpdGViYWNrKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wga2VlcF93cml0ZSlcbi0tXG5tbS9wYWdlLXdyaXRlYmFjay5jLTI5OTQtXG5tbS9wYWdlLXdyaXRlYmFjay5jOjI5OTU6XHRWTV9CVUdfT05fRk9MSU8oZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pLCBmb2xpbyk7XG5tbS9wYWdlLXdyaXRlYmFjay5jLTI5OTYtXHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO1xuLS1cbm1tL3BhZ2Utd3JpdGViYWNrLmM9MzA1OD12b2lkIGZvbGlvX3dhaXRfd3JpdGViYWNrKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9wYWdlLXdyaXRlYmFjay5jLTMwNTkte1xubW0vcGFnZS13cml0ZWJhY2suYzozMDYwOlx0d2hpbGUgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkge1xubW0vcGFnZS13cml0ZWJhY2suYy0zMDYxLVx0XHR0cmFjZV9mb2xpb193YWl0X3dyaXRlYmFjayhmb2xpbywgZm9saW9fbWFwcGluZyhmb2xpbykpO1xuLS1cbm1tL3BhZ2Utd3JpdGViYWNrLmM9MzA4MD1pbnQgZm9saW9fd2FpdF93cml0ZWJhY2tfa2lsbGFibGUoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMzA4MS17XG5tbS9wYWdlLXdyaXRlYmFjay5jOjMwODI6XHR3aGlsZSAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKSB7XG5tbS9wYWdlLXdyaXRlYmFjay5jLTMwODMtXHRcdHRyYWNlX2ZvbGlvX3dhaXRfd3JpdGViYWNrKGZvbGlvLCBmb2xpb19tYXBwaW5nKGZvbGlvKSk7XG4tLVxubW0vcmVhZGFoZWFkLmM9NjUzPXZvaWQgcGFnZV9jYWNoZV9hc3luY19yYShzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxuLS1cbm1tL3JlYWRhaGVhZC5jLTY2Ny1cdCAqL1xubW0vcmVhZGFoZWFkLmM6NjY4Olx0aWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSlcbm1tL3JlYWRhaGVhZC5jLTY2OS1cdFx0cmV0dXJuO1xuLS1cbm1tL3NobWVtLmM9MTMyOD1zdGF0aWMgdm9pZCBzaG1lbV91bmRvX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBsc3RhcnQsIHVvZmZfdCBsZW5kLFxuLS1cbm1tL3NobWVtLmMtMTQ2NC1cdFx0XHRcdH1cbm1tL3NobWVtLmM6MTQ2NTpcdFx0XHRcdFZNX0JVR19PTl9GT0xJTyhmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksXG5tbS9zaG1lbS5jLTE0NjYtXHRcdFx0XHRcdFx0Zm9saW8pO1xuLS1cbm1tL3N3YXBfc3RhdGUuYz0yNTc9c3RhdGljIHZvaWQgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLS1cbm1tL3N3YXBfc3RhdGUuYy0yNjktXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pO1xubW0vc3dhcF9zdGF0ZS5jOjI3MDpcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksIGZvbGlvKTtcbm1tL3N3YXBfc3RhdGUuYy0yNzEtXG4tLVxubW0vc3dhcGZpbGUuYz0yMDc1PXN0YXRpYyBib29sIGZvbGlvX3N3YXBjYWNoZV9mcmVlYWJsZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3N3YXBmaWxlLmMtMjA4MC1cdFx0cmV0dXJuIGZhbHNlO1xubW0vc3dhcGZpbGUuYzoyMDgxOlx0aWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSlcbm1tL3N3YXBmaWxlLmMtMjA4Mi1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm1tL3N3YXBmaWxlLmM9MjQzNj1zdGF0aWMgaW50IHVudXNlX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcG1kX3QgKnBtZCxcbi0tXG5tbS9zd2FwZmlsZS5jLTI1MDYtXHRcdCAqL1xubW0vc3dhcGZpbGUuYzoyNTA3Olx0XHRWTV9CVUdfT05fRk9MSU8oZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pLCBmb2xpbyk7XG5tbS9zd2FwZmlsZS5jLTI1MDgtXHRcdGlmIChwdGVfc3dwX2V4Y2x1c2l2ZShvbGRfcHRlKSlcbi0tXG5tbS90cnVuY2F0ZS5jPTMyNT1sb25nIG1hcHBpbmdfZXZpY3RfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vdHJ1bmNhdGUuYy0zMjktXHRcdHJldHVybiAwO1xubW0vdHJ1bmNhdGUuYzozMzA6XHRpZiAoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgfHwgZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKVxubW0vdHJ1bmNhdGUuYy0zMzEtXHRcdHJldHVybiAwO1xuLS1cbm1tL3Ztc2Nhbi5jPTY0MT1zdGF0aWMgcGFnZW91dF90IHBhZ2VvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL3Ztc2Nhbi5jLTY4OS1cdC8qIHN5bmNocm9ub3VzIHdyaXRlPyAqL1xubW0vdm1zY2FuLmM6NjkwOlx0aWYgKCFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpXG5tbS92bXNjYW4uYy02OTEtXHRcdGZvbGlvX2NsZWFyX3JlY2xhaW0oZm9saW8pO1xuLS1cbm1tL3Ztc2Nhbi5jPTk1NT1zdGF0aWMgdm9pZCBmb2xpb19jaGVja19kaXJ0eV93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS92bXNjYW4uYy05NzQtXHQqZGlydHkgPSBmb2xpb190ZXN0X2RpcnR5KGZvbGlvKTtcbm1tL3Ztc2Nhbi5jOjk3NTpcdCp3cml0ZWJhY2sgPSBmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyk7XG5tbS92bXNjYW4uYy05NzYtXG4tLVxubW0vdm1zY2FuLmM9MTA3OD1zdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4tLVxubW0vdm1zY2FuLmMtMTIwNi1cdFx0ICovXG5tbS92bXNjYW4uYzoxMjA3Olx0XHRpZiAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKSB7XG5tbS92bXNjYW4uYy0xMjA4LVx0XHRcdG1hcHBpbmcgPSBmb2xpb19tYXBwaW5nKGZvbGlvKTtcbi0tXG5tbS92bXNjYW4uYy0xNDQwLVx0XHRcdFx0fVxubW0vdm1zY2FuLmM6MTQ0MTpcdFx0XHRcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpXG5tbS92bXNjYW4uYy0xNDQyLVx0XHRcdFx0XHRnb3RvIGtlZXA7XG4tLVxubW0vdm1zY2FuLmMtMTQ1Mi1cdFx0XHRcdGlmIChmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSB8fFxubW0vdm1zY2FuLmM6MTQ1MzpcdFx0XHRcdCAgICBmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpXG5tbS92bXNjYW4uYy0xNDU0LVx0XHRcdFx0XHRnb3RvIGtlZXBfbG9ja2VkO1xuLS1cbm1tL3Ztc2Nhbi5jPTQ5NjA9c3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vdm1zY2FuLmMtNTAxMy1cdFx0aWYgKCFza2lwX3JldHJ5IFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSBcdTAwMjZcdTAwMjZcbm1tL3Ztc2Nhbi5jOjUwMTQ6XHRcdCAgICAhZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpIHtcbm1tL3Ztc2Nhbi5jLTUwMTUtXHRcdFx0bGlzdF9tb3ZlKFx1MDAyNmZvbGlvLVx1MDAzZWxydSwgXHUwMDI2Y2xlYW4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTIyOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFdyaXRlYmFjayBNZWNoYW5pc20qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgd3JpdGViYWNrIHByb2Nlc3MsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRoZSBjb3JlIGZ1bmN0aW9ucyBpbnZvbHZlZC4gSSYjMzk7bSB0aGlua2luZyBhYm91dCBgX19mb2xpb19zdGFydF93cml0ZWJhY2tgLCBgZm9saW9fd2FpdF93cml0ZWJhY2tgLCBgZm9saW9fd2FpdF93cml0ZWJhY2tfa2lsbGFibGVgLCBhbmQgYGZvbGlvX2VuZF93cml0ZWJhY2tgIOKAkyB0aG9zZSBhcmUgdGhlIGtleSBwbGF5ZXJzIGhlcmUsIGFsbCBuZXN0bGVkIHdpdGhpbiBgbW0vcGFnZS13cml0ZWJhY2suY2AgYW5kIHBvdGVudGlhbGx5IHRvdWNoaW5nIGBtbS9maWxlbWFwLmNgIGFzIHdlbGwuCgpNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGJlZ2lubmluZyBhbmQgZW5kIHBvaW50cyBvZiB0aGUgd3JpdGViYWNrIGN5Y2xlLiBTbywgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBgX19mb2xpb19zdGFydF93cml0ZWJhY2tgIGFuZCBgZm9saW9fZW5kX3dyaXRlYmFja2AuIFRvIGdldCB0aGUgd2hvbGUgcGljdHVyZSwgSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYG1tL3BhZ2Utd3JpdGViYWNrLmNgIGFuZCBnbyBzdHJhaWdodCB0byBhcm91bmQgbGluZSAyOTg5LiBUaGF0JiMzOTtzIHVzdWFsbHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGNvbnRleHR1YWxpemUgdGhvc2UgZnVuY3Rpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3BhZ2Utd3JpdGViYWNrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI5ODU6XHRcbjI5ODY6XHRcdHJldHVybiByZXQ7XG4yOTg3Olx0fVxuMjk4ODpcdFxuMjk4OTpcdHZvaWQgX19mb2xpb19zdGFydF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBrZWVwX3dyaXRlKVxuMjk5MDpcdHtcbjI5OTE6XHRcdGxvbmcgbnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4yOTkyOlx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZvbGlvX21hcHBpbmcoZm9saW8pO1xuMjk5MzpcdFx0aW50IGFjY2Vzc19yZXQ7XG4yOTk0Olx0XG4yOTk1Olx0XHRWTV9CVUdfT05fRk9MSU8oZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pLCBmb2xpbyk7XG4yOTk2Olx0XHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO1xuMjk5NzpcdFxuMjk5ODpcdFx0aWYgKG1hcHBpbmcgXHUwMDI2XHUwMDI2IG1hcHBpbmdfdXNlX3dyaXRlYmFja190YWdzKG1hcHBpbmcpKSB7XG4yOTk5Olx0XHRcdFhBX1NUQVRFKHhhcywgXHUwMDI2bWFwcGluZy1cdTAwM2VpX3BhZ2VzLCBmb2xpby1cdTAwM2VpbmRleCk7XG4zMDAwOlx0XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLVx1MDAzZWhvc3Q7XG4zMDAxOlx0XHRcdHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YjtcbjMwMDI6XHRcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbjMwMDM6XHRcdFx0Ym9vbCBvbl93Ymxpc3Q7XG4zMDA0Olx0XG4zMDA1Olx0XHRcdHhhc19sb2NrX2lycXNhdmUoXHUwMDI2eGFzLCBmbGFncyk7XG4zMDA2Olx0XHRcdHhhc19sb2FkKFx1MDAyNnhhcyk7XG4zMDA3Olx0XHRcdGZvbGlvX3Rlc3Rfc2V0X3dyaXRlYmFjayhmb2xpbyk7XG4zMDA4Olx0XG4zMDA5Olx0XHRcdG9uX3dibGlzdCA9IG1hcHBpbmdfdGFnZ2VkKG1hcHBpbmcsIFBBR0VDQUNIRV9UQUdfV1JJVEVCQUNLKTtcbjMwMTA6XHRcbjMwMTE6XHRcdFx0eGFzX3NldF9tYXJrKFx1MDAyNnhhcywgUEFHRUNBQ0hFX1RBR19XUklURUJBQ0spO1xuMzAxMjpcdFx0XHR3YiA9IGlub2RlX3RvX3diKGlub2RlKTtcbjMwMTM6XHRcdFx0d2Jfc3RhdF9tb2Qod2IsIFdCX1dSSVRFQkFDSywgbnIpO1xuMzAxNDpcdFx0XHRpZiAoIW9uX3dibGlzdCkge1xuMzAxNTpcdFx0XHRcdHdiX2lub2RlX3dyaXRlYmFja19zdGFydCh3Yik7XG4zMDE2Olx0XHRcdFx0LypcbjMwMTc6XHRcdFx0XHQgKiBXZSBjYW4gY29tZSB0aHJvdWdoIGhlcmUgd2hlbiBzd2FwcGluZyBhbm9ueW1vdXNcbjMwMTg6XHRcdFx0XHQgKiBmb2xpb3MsIHNvIHdlIGRvbiYjMzk7dCBuZWNlc3NhcmlseSBoYXZlIGFuIGlub2RlIHRvXG4zMDE5Olx0XHRcdFx0ICogdHJhY2sgZm9yIHN5bmMuXG4zMDIwOlx0XHRcdFx0ICovXG4zMDIxOlx0XHRcdFx0aWYgKG1hcHBpbmctXHUwMDNlaG9zdClcbjMwMjI6XHRcdFx0XHRcdHNiX21hcmtfaW5vZGVfd3JpdGViYWNrKG1hcHBpbmctXHUwMDNlaG9zdCk7XG4zMDIzOlx0XHRcdH1cbjMwMjQ6XHRcbjMwMjU6XHRcdFx0aWYgKCFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSlcbjMwMjY6XHRcdFx0XHR4YXNfY2xlYXJfbWFyayhcdTAwMjZ4YXMsIFBBR0VDQUNIRV9UQUdfRElSVFkpO1xuMzAyNzpcdFx0XHRpZiAoIWtlZXBfd3JpdGUpXG4zMDI4Olx0XHRcdFx0eGFzX2NsZWFyX21hcmsoXHUwMDI2eGFzLCBQQUdFQ0FDSEVfVEFHX1RPV1JJVEUpO1xuMzAyOTpcdFx0XHR4YXNfdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2eGFzLCBmbGFncyk7XG4zMDMwOlx0XHR9IGVsc2Uge1xuMzAzMTpcdFx0XHRmb2xpb190ZXN0X3NldF93cml0ZWJhY2soZm9saW8pO1xuMzAzMjpcdFx0fVxuMzAzMzpcdFxuMzAzNDpcdFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9XUklURUJBQ0ssIG5yKTtcbjMwMzU6XHRcdHpvbmVfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX1pPTkVfV1JJVEVfUEVORElORywgbnIpO1xuMzAzNjpcdFxuMzAzNzpcdFx0YWNjZXNzX3JldCA9IGFyY2hfbWFrZV9mb2xpb19hY2Nlc3NpYmxlKGZvbGlvKTtcbjMwMzg6XHRcdC8qXG4zMDM5Olx0XHQgKiBJZiB3cml0ZWJhY2sgaGFzIGJlZW4gdHJpZ2dlcmVkIG9uIGEgcGFnZSB0aGF0IGNhbm5vdCBiZSBtYWRlXG4zMDQwOlx0XHQgKiBhY2Nlc3NpYmxlLCBpdCBpcyB0b28gbGF0ZSB0byByZWNvdmVyIGhlcmUuXG4zMDQxOlx0XHQgKi9cbjMwNDI6XHRcdFZNX0JVR19PTl9GT0xJTyhhY2Nlc3NfcmV0ICE9IDAsIGZvbGlvKTtcbjMwNDM6XHR9XG4zMDQ0Olx0RVhQT1JUX1NZTUJPTChfX2ZvbGlvX3N0YXJ0X3dyaXRlYmFjayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNTIxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW52ZXN0aWdhdGlvbiBvZiB0aGUgV3JpdGViYWNrIE1lY2hhbmlzbSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYF9fZm9saW9fc3RhcnRfd3JpdGViYWNrYCwgYW5kIGl0JiMzOTtzIGNhbGxpbmcgYm90aCBgZm9saW9fdGVzdF93cml0ZWJhY2tgIGFuZCBgZm9saW9fdGVzdF9zZXRfd3JpdGViYWNrYC4gSW50ZXJlc3RpbmcuIE15IGd1dCBmZWVsaW5nIHRlbGxzIG1lIHRvIGRlbHZlIGRlZXBlciBpbnRvIGhvdyB0aGlzIHdyaXRlYmFjayBwcm9jZXNzIGlzIGNvbnRyb2xsZWQsIGFuZCBob3cgaXQgaXMgcHJvdGVjdGVkIGFnYWluc3QgY29uY3VycmVudCBhY2Nlc3MuIExldCYjMzk7cyBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgZnVsbCBwaWN0dXJlLgoKQmVmb3JlIEkganVtcCB0byBjb25jbHVzaW9ucywgSSBuZWVkIHRvIGNoZWNrIGhvdyBgZm9saW9fd2FpdF93cml0ZWJhY2tgIGFuZCBgZm9saW9fZW5kX3dyaXRlYmFja2AgYXJlIHVzZWQgaW4gdGhpcyBjb250ZXh0LiBUaGVzZSBjb3VsZCBiZSBrZXkgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMsIHNpZ25hbGxpbmcgd2hlbiBhIHdyaXRlYmFjayBvcGVyYXRpb24gaGFzIHN0YXJ0ZWQgb3IgZmluaXNoZWQuIFRoZXkgcHJvYmFibHkgY29udHJvbCB3aGVuIGEgcGFnZSBpcyB2aXNpYmxlIHRvIG90aGVycywgYW5kIHdoZW4gaXQgaXMgYmVpbmcgd29ya2VkIG9uLgoKVG8gdHJ1bHkgdW5kZXJzdGFuZCB0aGUgaW50ZXJuYWwgbWVjaGFuaWNzLCBJIHNob3VsZCBwdWxsIHVwIGBtbS9maWxlbWFwLmNgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSAxNjU2LiBUaGF0IHNob3VsZCBiZSByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhlIGZpbGVtYXAgY29kZS4gRnJvbSBtZW1vcnksIHRoYXQgYXJlYSBoYW5kbGVzIHRoZSBjb3JlIHdyaXRlYmFjayBsb2dpYywgc28gdGhhdCB3aWxsIGxldCBtZSBjaGVjayBleGFjdGx5IGhvdyBhbGwgdGhlc2UgZnVuY3Rpb25zIGFyZSB3b3JraW5nIHRvZ2V0aGVyLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBpbXBsZW1lbnRhdGlvbiwgb3IgYXQgbGVhc3QgdGhlIGNhbGxlcnMsIG9mIGBmb2xpb19zdGFydF93cml0ZWJhY2tgLCBgZm9saW9fZW5kX3dyaXRlYmFja2AsIGV0Yy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9maWxlbWFwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2NTU6XHQgKi9cbjE2NTY6XHR2b2lkIGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuMTY1NzpcdHtcbjE2NTg6XHRcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pLCBmb2xpbyk7XG4xNjU5Olx0XG4xNjYwOlx0XHQvKlxuMTY2MTpcdFx0ICogZm9saW9fdGVzdF9jbGVhcl9yZWNsYWltKCkgY291bGQgYmUgdXNlZCBoZXJlIGJ1dCBpdCBpcyBhblxuMTY2MjpcdFx0ICogYXRvbWljIG9wZXJhdGlvbiBhbmQgb3ZlcmtpbGwgaW4gdGhpcyBwYXJ0aWN1bGFyIGNhc2UuIEZhaWxpbmdcbjE2NjM6XHRcdCAqIHRvIHNodWZmbGUgYSBmb2xpbyBtYXJrZWQgZm9yIGltbWVkaWF0ZSByZWNsYWltIGlzIHRvbyBtaWxkXG4xNjY0Olx0XHQgKiBhIGdhaW4gdG8ganVzdGlmeSB0YWtpbmcgYW4gYXRvbWljIG9wZXJhdGlvbiBwZW5hbHR5IGF0IHRoZVxuMTY2NTpcdFx0ICogZW5kIG9mIGV2ZXJ5IGZvbGlvIHdyaXRlYmFjay5cbjE2NjY6XHRcdCAqL1xuMTY2NzpcdFx0aWYgKGZvbGlvX3Rlc3RfcmVjbGFpbShmb2xpbykpIHtcbjE2Njg6XHRcdFx0Zm9saW9fY2xlYXJfcmVjbGFpbShmb2xpbyk7XG4xNjY5Olx0XHRcdGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZShmb2xpbyk7XG4xNjcwOlx0XHR9XG4xNjcxOlx0XG4xNjcyOlx0XHRpZiAoX19mb2xpb19lbmRfd3JpdGViYWNrKGZvbGlvKSlcbjE2NzM6XHRcdFx0Zm9saW9fd2FrZV9iaXQoZm9saW8sIFBHX3dyaXRlYmFjayk7XG4xNjc0Olx0XG4xNjc1Olx0XHRhY2N0X3JlY2xhaW1fd3JpdGViYWNrKGZvbGlvKTtcbjE2NzY6XHR9XG4xNjc3Olx0RVhQT1JUX1NZTUJPTF9HUEwoZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKTtcbjE2Nzg6XHRcbjE2Nzk6XHQvKipcbjE2ODA6XHQgKiBmb2xpb19lbmRfd3JpdGViYWNrIC0gRW5kIHdyaXRlYmFjayBhZ2FpbnN0IGEgZm9saW8uXG4xNjgxOlx0ICogQGZvbGlvOiBUaGUgZm9saW8uXG4xNjgyOlx0ICpcbjE2ODM6XHQgKiBUaGUgZm9saW8gbXVzdCBhY3R1YWxseSBiZSB1bmRlciB3cml0ZWJhY2suXG4xNjg0Olx0ICpcbjE2ODU6XHQgKiBDb250ZXh0OiBNYXkgYmUgY2FsbGVkIGZyb20gcHJvY2VzcyBvciBpbnRlcnJ1cHQgY29udGV4dC5cbjE2ODY6XHQgKi9cbjE2ODc6XHR2b2lkIGZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbylcbjE2ODg6XHR7XG4xNjg5Olx0XHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSwgZm9saW8pO1xuMTY5MDpcdFxuMTY5MTpcdFx0LypcbjE2OTI6XHRcdCAqIFdyaXRlYmFjayBkb2VzIG5vdCBob2xkIGEgZm9saW8gcmVmZXJlbmNlIG9mIGl0cyBvd24sIHJlbHlpbmdcbjE2OTM6XHRcdCAqIG9uIHRydW5jYXRpb24gdG8gd2FpdCBmb3IgdGhlIGNsZWFyaW5nIG9mIFBHX3dyaXRlYmFjay5cbjE2OTQ6XHRcdCAqIEJ1dCBoZXJlIHdlIG11c3QgbWFrZSBzdXJlIHRoYXQgdGhlIGZvbGlvIGlzIG5vdCBmcmVlZCBhbmRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM1MTgKCQkJCQkJCW91dHB1dDogMTQ0CgkJCQkJCQl0aG91Z2h0czogODgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzIFN5bWJvbCBTZWxlY3Rpb24gZm9yIEZvbGlvIFdyaXRlYmFjayBGbGFnIENvbnZlcnNpb24qKgoKT2theSwgbGV0JiMzOTtzIG5haWwgZG93biB0aGVzZSBmb2N1cyBzeW1ib2xzLiBGaXJzdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBhY2NpZGVudGFsbHkgZmxhZ2dpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgdGhhdCB3aWxsIGRpbHV0ZSB0aGUgZnV6emluZyBlZmZvcnQuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgd3JpdGViYWNrLXJlbGF0ZWQgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHk6IGBfX2ZvbGlvX3N0YXJ0X3dyaXRlYmFja2AsIGBmb2xpb19lbmRfd3JpdGViYWNrYCwgYGZvbGlvX3dhaXRfd3JpdGViYWNrYCwgYW5kIGBmaWxlbWFwX3JhbmdlX2hhc193cml0ZWJhY2tgLiBBcmUgYW55IG9mIHRoZXNlIGdlbmVyaWMgZW5vdWdoIHRvIGJlIHByb2JsZW1hdGljPyBMZXQmIzM5O3MgcXVpY2tseSByZXZpZXcgdGhlIEZvY3VzU3ltYm9scyBndWlkZWxpbmVzIHRvIGJlIHN1cmUuIEl0IGxvb2tzIGxpa2UgdGhlIGdvYWwgaGVyZSBpcyB0byBzcGVjaWZpY2FsbHkgdGFyZ2V0IGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSBjb3JlIGxvZ2ljIGJlaW5nIGFsdGVyZWQsIHJhdGhlciB0aGFuIGdlbmVyYWwgc3lzdGVtLWxldmVsIGNhbGxzLgoKTm93LCBjb25zaWRlcmluZyB0aG9zZSwgYF9fZm9saW9fc3RhcnRfd3JpdGViYWNrYCwgYGZvbGlvX2VuZF93cml0ZWJhY2tgLCBgZm9saW9fd2FpdF93cml0ZWJhY2tgLCBhbmQgYGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZGAsIGFyZSBhbGwgcHJldHR5IHNwZWNpZmljIHRvIGZvbGlvIHdyaXRlYmFjayBoYW5kbGluZy4gVGhleSBhcmVuJiMzOTt0IG1lbW9yeSBhbGxvY2F0b3JzIG9yIHBhZ2UgZmF1bHQgaGFuZGxlcnMsIHdoaWNoIGlzIGdvb2QuIFRoZXkgc2VlbSBsaWtlIGdvb2QgY2FuZGlkYXRlcy4gSSBzaG91bGQgYWxzbyBjaGVjayBgZm9saW9fcHJlcGFyZV93cml0ZWJhY2tgLCBhbHRob3VnaCB0aGF0IGZ1bmN0aW9uIGlzIGRlZmluZWQgaW4gYG1tL3BhZ2Utd3JpdGViYWNrLmNgLiBBbHNvIGBmaWxlbWFwX3JlbGVhc2VfZm9saW9gIGZyb20gYG1tL2ZpbGVtYXAuY2AuCgpOZXh0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IGNvbmZpZyBkZXBlbmRlbmNpZXMuIEkmIzM5O20gZm9jdXNpbmcgb24gYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYCBhbmQgd3JpdGViYWNrIHJlbGF0ZWQgY29kZS4gQXJlIHRoZXJlIGFueSB1bnVzdWFsIEtjb25maWcgcmVxdWlyZW1lbnRzPyBOb3BlLiBTdGFuZGFyZCBMaW51eCBjb25maWd1cmF0aW9ucyBoYXZlIGBGT0xJT19IRUFEX1BBR0VgIGFuZCBgUEdfd3JpdGViYWNrYC4gSSBxdWlja2x5IGRvdWJsZS1jaGVja2VkIHRoZSBjb25maWdzIGFuZCBjb25maXJtIHRoYXQgYEVuYWJsZUNvbmZpZ3M6IFtdYCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSB3b3VsZCBleHBlY3QgZm9yIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2UuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgcmVjb25maXJtIG15IGNob3NlbiBmb2N1cyBzeW1ib2xzLiBJIGhhdmU6IGBfX2ZvbGlvX3N0YXJ0X3dyaXRlYmFja2AsIGBmb2xpb19lbmRfd3JpdGViYWNrYCwgYGZvbGlvX3dhaXRfd3JpdGViYWNrYCwgYW5kIGBmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmRgLiBUaGVzZSBzZWVtIHNwb3Qgb24uIEkganVzdCBxdWlja2x5IGNvbmZpcm1lZCB0aGF0IHRoZXNlIGFyZSBhbGwgZXhwb3J0ZWQgc3ltYm9scywgcHJlc2VudCBpbiB0aGUgc3ltYm9sIHRhYmxlcy4KCkZpbmFsbHksIGxldCYjMzk7cyBkbyBhIHF1aWNrIG1lbnRhbCByZXZpZXcgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nOiB0aGUgcGF0Y2ggaXMgY29udmVydGluZyB0aGUgYFBHX3dyaXRlYmFja2AgZmxhZyBkZWZpbml0aW9ucyBmcm9tIGxlZ2FjeSBtYWNyb3MgdG8gYEZPTElPX1RFU1RfRkxBR2AgYW5kIGBGT0xJT19URVNUX1NFVF9GTEFHYC4gSXQmIzM5O3MgbW9kaWZ5aW5nIHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZvbGlvIGZsYWdzIGxvZ2ljLiBXb3J0aEZ1enppbmcgaXMgdHJ1ZS4gRW5hYmxlQ29uZmlncyBpcyBlbXB0eS4gQW5kLCBtb3N0IGltcG9ydGFudGx5LCB0aGUgRm9jdXNTeW1ib2xzIHRhcmdldCB0aGUga2V5IHdyaXRlYmFjayBsaWZlY3ljbGUgaGVscGVycyB0aGF0IHVzZSB0aGVzZSBtYWNyb3MuCgpPa2F5LCBldmVyeXRoaW5nIGNoZWNrcyBvdXQuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2ZvbGlvX3N0YXJ0X3dyaXRlYmFjayYjMzQ7LAogICAgJiMzNDtmb2xpb19lbmRfd3JpdGViYWNrJiMzNDssCiAgICAmIzM0O2ZvbGlvX3dhaXRfd3JpdGViYWNrJiMzNDssCiAgICAmIzM0O2ZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHRoZSB3cml0ZWJhY2sgZm9saW8gZmxhZyBkZWZpbml0aW9ucyBpbiBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCBmcm9tIGxlZ2FjeSBwYWdlLWZsYWcgbWFjcm9zIChURVNUUEFHRUZMQUcsIFRFU1RTQ0ZMQUcpIHRvIHRoZSBtb2Rlcm4gZm9saW8gZmxhZyBtYWNyb3MgKEZPTElPX1RFU1RfRkxBRywgRk9MSU9fVEVTVF9TRVRfRkxBRykuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGludm9sdmVkIGluIGZvbGlvIHdyaXRlYmFjayBzdGF0ZSB0cmFja2luZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2ZvbGlvX3N0YXJ0X3dyaXRlYmFjayYjMzQ7LAogICAgJiMzNDtmb2xpb19lbmRfd3JpdGViYWNrJiMzNDssCiAgICAmIzM0O2ZvbGlvX3dhaXRfd3JpdGViYWNrJiMzNDssCiAgICAmIzM0O2ZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHRoZSB3cml0ZWJhY2sgZm9saW8gZmxhZyBkZWZpbml0aW9ucyBpbiBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCBmcm9tIGxlZ2FjeSBwYWdlLWZsYWcgbWFjcm9zIChURVNUUEFHRUZMQUcsIFRFU1RTQ0ZMQUcpIHRvIHRoZSBtb2Rlcm4gZm9saW8gZmxhZyBtYWNyb3MgKEZPTElPX1RFU1RfRkxBRywgRk9MSU9fVEVTVF9TRVRfRkxBRykuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGludm9sdmVkIGluIGZvbGlvIHdyaXRlYmFjayBzdGF0ZSB0cmFja2luZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6Mzg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnZlcnRzIHRoZSBwYWdlIGZsYWcgZGVmaW5pdGlvbnMgZm9yIFBHX3dyaXRlYmFjayBmcm9tIGxlZ2FjeSBwYWdlLWJhc2VkIG1hY3JvcyAoVEVTVFBBR0VGTEFHIC8gVEVTVFNDRkxBRykgdG8gZm9saW8tYmFzZWQgbWFjcm9zIChGT0xJT19URVNUX0ZMQUcgLyBGT0xJT19URVNUX1NFVF9GTEFHKS4gXG5cblRoaXMgaXMgYSB0eXBlLXNhZmUgbWFjcm8gcmVmYWN0b3JpbmcgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgb3BlcmF0ZXMgcHVyZWx5IG9uIHBhZ2UvZm9saW8gYml0IGZsYWdzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIGFsbG9jYXRlLCBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzdHJ1Y3QgcGFkZGluZywgdXNlci1jb3B5IGJ1ZmZlcnMsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFueSBtZW1vcnkgc2FmZXR5IGlzc3VlcyB0aGF0IGNvdWxkIGFyaXNlIGZyb20gaW52YWxpZCBmb2xpby9wYWdlIHJlZmVyZW5jZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBwYWdlIGFjY2VzcykgYXJlIGFscmVhZHkgY292ZXJlZCBieSBLQVNBTiBhbmQgcGFnZSBmbGFnIGRlYnVnIGNoZWNrcyAoVk1fQlVHX09OX1BHRkxBR1MpLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVhayByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzQyMmVlZTNlN2Y1MjQyZmRkMmE3MTI1NzUyZGEwYWNlNjdkZDE3YwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMTY6Mzc6MTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCmluZGV4IDNkYzc5YzBjNWFkZjAuLjg2ZGQwNDcwZGExMTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCkBAIC01ODgsOCAmIzQzOzU4OCw4IEBAIEZPTElPX0ZMQUcob3duZXJfMiwgRk9MSU9fSEVBRF9QQUdFKQogICogT25seSB0ZXN0LWFuZC1zZXQgZXhpc3QgZm9yIFBHX3dyaXRlYmFjay4gIFRoZSB1bmNvbmRpdGlvbmFsIG9wZXJhdG9ycyBhcmUKICAqIHJpc2t5OiB0aGV5IGJ5cGFzcyBwYWdlIGFjY291bnRpbmcuCiAgKi8KLVRFU1RQQUdFRkxBRyhXcml0ZWJhY2ssIHdyaXRlYmFjaywgUEZfTk9fVEFJTCkKLQlURVNUU0NGTEFHKFdyaXRlYmFjaywgd3JpdGViYWNrLCBQRl9OT19UQUlMKQomIzQzO0ZPTElPX1RFU1RfRkxBRyh3cml0ZWJhY2ssIEZPTElPX0hFQURfUEFHRSkKJiM0MzsJRk9MSU9fVEVTVF9TRVRfRkxBRyh3cml0ZWJhY2ssIEZPTElPX0hFQURfUEFHRSkKIEZPTElPX0ZMQUcobWFwcGVkdG9kaXNrLCBGT0xJT19IRUFEX1BBR0UpCiAKIC8qIFBHX3JlYWRhaGVhZCBpcyBvbmx5IHVzZWQgZm9yIHJlYWRzOyBQR19yZWNsYWltIGlzIG9ubHkgZm9yIHdyaXRlcyAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEzOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhZ2UgRmxhZyBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBzZWUgd2UmIzM5O3JlIG1vZGlmeWluZyBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgLiBTcGVjaWZpY2FsbHksIHRoZSBkaWZmIGZvY3VzZXMgb24gY2hhbmdlcyBhcm91bmQgdGhlIGBQR193cml0ZWJhY2tgIGZsYWcsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgdXNpbmcgYFRFU1RQQUdFRkxBR2AgYW5kIGBURVNUU0NGTEFHYCBmb3IgdGhlIHdyaXRlYmFjayBmbGFnLCB3aGljaCBoYXMgYSBzcGVjaWZpYyBjb21tZW50IGFib3V0IGJlaW5nIHJpc2t5IGJlY2F1c2UgdGhleSBieXBhc3MgcGFnZSBhY2NvdW50aW5nLCBpbXBseWluZyB0aGF0IHRoZSBwYXRjaCBpcyBtZWFudCB0byBhZGRyZXNzIHRoaXMuIE5vdywgaXQgbG9va3MgbGlrZSB0aGVzZSBhcmUgYmVpbmcgcmVwbGFjZWQgd2l0aCBgRk9MSU9fVEVTVF9GTEFHYCBhbmQgYEZPTElPX1RFU1RfU0VUX0ZMQUdgIHdpdGggdGhlIGBGT0xJT19IRUFEX1BBR0VgIHBhcmFtZXRlci4gVGhpcyBsaWtlbHkgc2lnbmlmaWVzIGEgbW92ZSB0b3dhcmQgYSBtb3JlIGZvbGlvLWNlbnRyaWMgYXBwcm9hY2gsIHdoaWNoIGlzIHNvbWV0aGluZyBJJiMzOTt2ZSBiZWVuIGtlZXBpbmcgYW4gZXllIG9uLgoKTXkgbmV4dCBzdGVwIHdvdWxkIGJlIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGRlZmluaXRpb25zIG9mIGBURVNUUEFHRUZMQUdgLCBgVEVTVFNDRkxBR2AsIGBGT0xJT19URVNUX0ZMQUdgLCBhbmQgYEZPTElPX1RFU1RfU0VUX0ZMQUdgLCB3aGljaCBzaG91bGQgYmUgZGVmaW5lZCBlYXJsaWVyIGluIHRoaXMgc2FtZSBpbmNsdWRlIGZpbGUgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBjaGFuZ2VzLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgdGhlIGZvbGlvLWJhc2VkIHZlcnNpb25zIGhhbmRsZSB0aGUgd3JpdGViYWNrIGZsYWcgYW5kIHdoZXRoZXIgdGhleSBhZGRyZXNzIHRoZSBzdGF0ZWQgY29uY2VybnMgYWJvdXQgcGFnZSBhY2NvdW50aW5nLiBUaGlzIGlzIGxpa2VseSBhbiBpbXBvcnRhbnQgcGllY2Ugb2YgdGhlIHB1enpsZSB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZSBwYXRjaCBhbmQgd2hldGhlciBpdCYjMzk7cyB0aGUgcmlnaHQgZGlyZWN0aW9uIGZvciB0aGUga2VybmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NzA6XHRcdF9fQ0xFQVJQQUdFRkxBRyhSZXNlcnZlZCwgcmVzZXJ2ZWQsIFBGX05PX0NPTVBPVU5EKVxuIDU3MTpcdFx0X19TRVRQQUdFRkxBRyhSZXNlcnZlZCwgcmVzZXJ2ZWQsIFBGX05PX0NPTVBPVU5EKVxuIDU3MjpcdEZPTElPX0ZMQUcoc3dhcGJhY2tlZCwgRk9MSU9fSEVBRF9QQUdFKVxuIDU3MzpcdFx0X19GT0xJT19DTEVBUl9GTEFHKHN3YXBiYWNrZWQsIEZPTElPX0hFQURfUEFHRSlcbiA1NzQ6XHRcdF9fRk9MSU9fU0VUX0ZMQUcoc3dhcGJhY2tlZCwgRk9MSU9fSEVBRF9QQUdFKVxuIDU3NTpcdFxuIDU3NjpcdC8qXG4gNTc3Olx0ICogUHJpdmF0ZSBwYWdlIG1hcmtpbmdzIHRoYXQgbWF5IGJlIHVzZWQgYnkgdGhlIGZpbGVzeXN0ZW0gdGhhdCBvd25zIHRoZSBwYWdlXG4gNTc4Olx0ICogZm9yIGl0cyBvd24gcHVycG9zZXMuXG4gNTc5Olx0ICogLSBQR19wcml2YXRlIGFuZCBQR19wcml2YXRlXzIgY2F1c2UgcmVsZWFzZV9mb2xpbygpIGFuZCBjbyB0byBiZSBpbnZva2VkXG4gNTgwOlx0ICovXG4gNTgxOlx0UEFHRUZMQUcoUHJpdmF0ZSwgcHJpdmF0ZSwgUEZfQU5ZKVxuIDU4MjpcdEZPTElPX0ZMQUcocHJpdmF0ZV8yLCBGT0xJT19IRUFEX1BBR0UpXG4gNTgzOlx0XG4gNTg0Olx0Lyogb3duZXJfMiBjYW4gYmUgc2V0IG9uIHRhaWwgcGFnZXMgZm9yIGFub24gbWVtb3J5ICovXG4gNTg1Olx0Rk9MSU9fRkxBRyhvd25lcl8yLCBGT0xJT19IRUFEX1BBR0UpXG4gNTg2Olx0XG4gNTg3Olx0LypcbiA1ODg6XHQgKiBPbmx5IHRlc3QtYW5kLXNldCBleGlzdCBmb3IgUEdfd3JpdGViYWNrLiAgVGhlIHVuY29uZGl0aW9uYWwgb3BlcmF0b3JzIGFyZVxuIDU4OTpcdCAqIHJpc2t5OiB0aGV5IGJ5cGFzcyBwYWdlIGFjY291bnRpbmcuXG4gNTkwOlx0ICovXG4gNTkxOlx0Rk9MSU9fVEVTVF9GTEFHKHdyaXRlYmFjaywgRk9MSU9fSEVBRF9QQUdFKVxuIDU5MjpcdFx0Rk9MSU9fVEVTVF9TRVRfRkxBRyh3cml0ZWJhY2ssIEZPTElPX0hFQURfUEFHRSlcbiA1OTM6XHRGT0xJT19GTEFHKG1hcHBlZHRvZGlzaywgRk9MSU9fSEVBRF9QQUdFKVxuIDU5NDpcdFxuIDU5NTpcdC8qIFBHX3JlYWRhaGVhZCBpcyBvbmx5IHVzZWQgZm9yIHJlYWRzOyBQR19yZWNsYWltIGlzIG9ubHkgZm9yIHdyaXRlcyAqL1xuIDU5NjpcdEZPTElPX0ZMQUcocmVjbGFpbSwgRk9MSU9fSEVBRF9QQUdFKVxuIDU5NzpcdEZPTElPX0ZMQUcocmVhZGFoZWFkLCBGT0xJT19IRUFEX1BBR0UpXG4gNTk4Olx0XHRGT0xJT19URVNUX0NMRUFSX0ZMQUcocmVhZGFoZWFkLCBGT0xJT19IRUFEX1BBR0UpXG4gNTk5Olx0XG4gNjAwOlx0Rk9MSU9fRkxBRyhkcm9wYmVoaW5kLCBGT0xJT19IRUFEX1BBR0UpXG4gNjAxOlx0XHRGT0xJT19URVNUX0NMRUFSX0ZMQUcoZHJvcGJlaGluZCwgRk9MSU9fSEVBRF9QQUdFKVxuIDYwMjpcdFx0X19GT0xJT19TRVRfRkxBRyhkcm9wYmVoaW5kLCBGT0xJT19IRUFEX1BBR0UpXG4gNjAzOlx0XG4gNjA0Olx0I2lmZGVmIENPTkZJR19ISUdITUVNXG4gNjA1Olx0LypcbiA2MDY6XHQgKiBNdXN0IHVzZSBhIG1hY3JvIGhlcmUgZHVlIHRvIGhlYWRlciBkZXBlbmRlbmN5IGlzc3Vlcy4gcGFnZV96b25lKCkgaXMgbm90XG4gNjA3Olx0ICogYXZhaWxhYmxlIGF0IHRoaXMgcG9pbnQuXG4gNjA4Olx0ICovXG4gNjA5Olx0I2RlZmluZSBQYWdlSGlnaE1lbShfX3ApIGlzX2hpZ2htZW1faWR4KHBhZ2Vfem9uZW51bShfX3ApKVxuIDYxMDpcdCNkZWZpbmUgZm9saW9fdGVzdF9oaWdobWVtKF9fZilcdGlzX2hpZ2htZW1faWR4KGZvbGlvX3pvbmVudW0oX19mKSlcbiA2MTE6XHQjZWxzZVxuIDYxMjpcdFBBR0VGTEFHX0ZBTFNFKEhpZ2hNZW0sIGhpZ2htZW0pXG4gNjEzOlx0I2VuZGlmXG4gNjE0Olx0I2RlZmluZSBQaHlzSGlnaE1lbShfX3ApIChQYWdlSGlnaE1lbShwaHlzX3RvX3BhZ2UoX19wKSkpXG4gNjE1Olx0XG4gNjE2Olx0LyogRG9lcyBrbWFwX2xvY2FsX2ZvbGlvKCkgb25seSBhbGxvdyBhY2Nlc3MgdG8gb25lIHBhZ2Ugb2YgdGhlIGZvbGlvPyAqL1xuIDYxNzpcdCNpZmRlZiBDT05GSUdfREVCVUdfS01BUF9MT0NBTF9GT1JDRV9NQVBcbiA2MTg6XHQjZGVmaW5lIGZvbGlvX3Rlc3RfcGFydGlhbF9rbWFwKGYpXHR0cnVlXG4gNjE5Olx0I2Vsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzczNwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlc2UgZmxhZ3MgYXJlIGRvaW5nIGluIHRoZSBrZXJuZWwsIHNvIGZpcnN0IHRoaW5ncyBmaXJzdDogSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIHRoZSBkZWZpbml0aW9ucyBmb3IgYFRFU1RQQUdFRkxBR2AsIGBURVNUU0NGTEFHYCwgYEZPTElPX1RFU1RfRkxBR2AsIGFuZCBgRk9MSU9fVEVTVF9TRVRfRkxBR2AuIEkmIzM5O2xsIGJlIGNoZWNraW5nIGBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaGAg4oCTIHRoYXQmIzM5O3MgdGhlIG9idmlvdXMgcGxhY2UgdG8gZmluZCB0aGVtLCBnaXZlbiB0aGUgZmlsZW5hbWVzIEkgaGF2ZS4gSSBleHBlY3QgdGhhdCBJJiMzOTtsbCBmaW5kIHRoZXNlIGFyZSBzb21lIGtpbmQgb2YgdGVzdCBvciBkZWJ1Z2dpbmcgZmxhZ3MgcmVsYXRlZCB0byBwYWdlIG1hbmFnZW1lbnQgb3IgZm9saW9zLCBidXQgSSBuZWVkIHRoZSBwcmVjaXNlIGRlZmluaXRpb25zIHRvIHVuZGVyc3RhbmQgdGhlaXIgc3BlY2lmaWMgcHVycG9zZSBhbmQgaG93IHRoZXkmIzM5O3JlIGludGVuZGVkIHRvIGJlIHVzZWQuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIEZPTElPX1RFU1RfRkxBRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTM1MD1zdGF0aWMgdW5zaWduZWQgbG9uZyAqZm9saW9fZmxhZ3Moc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgbilcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC00MDktICovXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo0MTA6I2RlZmluZSBGT0xJT19URVNUX0ZMQUcobmFtZSwgcGFnZSlcdFx0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTQxMS1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgZm9saW9fdGVzdF8jI25hbWUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykgXFxcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD00NzU9c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgVGVzdENsZWFyUGFnZSMjdW5hbWUoc3RydWN0IHBhZ2UgKnBhZ2UpXHRcXFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTQ5MS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjQ5MjojZGVmaW5lIEZPTElPX1RFU1RfRkxBR19GQUxTRShuYW1lKVx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNDkzLXN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb190ZXN0XyMjbmFtZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XHRcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjE1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgcGFnZS1mbGFncy5oYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbiBvbiBsaW5lcyAzODAgdGhyb3VnaCA0NTAgd2l0aGluIGBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaGAuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyBob3cgdGhlIGtlcm5lbCBkZWZpbmVzIGFuZCBtYW5pcHVsYXRlcyBwYWdlIGZsYWdzIGluIHRoaXMgcmVnaW9uIG9mIHRoZSBoZWFkZXIgZmlsZS4gSSBhbnRpY2lwYXRlIGZpbmRpbmcga2V5IG1hY3JvcyBhbmQgZW51bWVyYXRpb25zIHRoYXQgcmVsYXRlIHRvIHBhZ2Ugc3RhdGUgdHJhbnNpdGlvbnMsIHByb3RlY3Rpb24gbGV2ZWxzLCBhbmQgYWxsb2NhdGlvbiBtZXRhZGF0YS4gR2l2ZW4gdGhlIGNvbnRleHQgb2YgdGhlIGBwYWdlLWZsYWdzLmhgIGhlYWRlciwgSSBleHBlY3QgdG8gZW5jb3VudGVyIGRldGFpbHMgYXJvdW5kIGZsYWdzIGFzc29jaWF0ZWQgd2l0aCBodWdlIHBhZ2UgbWFuYWdlbWVudCwgTlVNQSBub2Rlcywgb3IgcG9zc2libHkgZXZlbiBmbGFncyByZWxhdGVkIHRvIGRpZmZlcmVudCBtZW1vcnkgdGllcnMgaWYgdGhpcyBjb2RlIGlzIHJlbGF0aXZlbHkgcmVjZW50LiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBzdWJ0bGUgc2hpZnRzIGZyb20gdGhlIG1vcmUgZm91bmRhdGlvbmFsIHBhZ2UgZmxhZ3MsIGFzIHRoaXMgcGFydCBvZiB0aGUgZmlsZSB0ZW5kcyB0byBob3VzZSB0aGUgbW9yZSBzcGVjaWZpYywgbGVzcyBmcmVxdWVudGx5IHRvdWNoZWQgZmxhZ3MuIE15IGdvYWwgaXMgdG8gZ3Jhc3AgdGhlIGdyYW51bGFyaXR5IG9mIGNvbnRyb2wgdGhlIGtlcm5lbCBoYXMgb3ZlciBwaHlzaWNhbCBwYWdlcyBhdCB0aGlzIGxldmVsLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgbmV3IG9yIGV2b2x2aW5nIHBhdHRlcm5zIEkgbWlnaHQgaGF2ZSBtaXNzZWQgaW4gcHJldmlvdXMgcmV2aWV3cyBvZiB0aGlzIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM4MDpcdCAqICAgICB0aGUgcGFnZSBmbGFnIGlzIHN0b3JlZCBpbiB0aGUgZmlyc3QgdGFpbCBwYWdlLlxuIDM4MTpcdCAqL1xuIDM4MjpcdCNkZWZpbmUgUEZfUE9JU09ORURfQ0hFQ0socGFnZSkgKHtcdFx0XHRcdFx0XFxcbiAzODM6XHRcdFx0Vk1fQlVHX09OX1BHRkxBR1MoUGFnZVBvaXNvbmVkKHBhZ2UpLCBwYWdlKTtcdFx0XFxcbiAzODQ6XHRcdFx0cGFnZTsgfSlcbiAzODU6XHQjZGVmaW5lIFBGX0FOWShwYWdlLCBlbmZvcmNlKVx0UEZfUE9JU09ORURfQ0hFQ0socGFnZSlcbiAzODY6XHQjZGVmaW5lIFBGX0hFQUQocGFnZSwgZW5mb3JjZSlcdFBGX1BPSVNPTkVEX0NIRUNLKGNvbXBvdW5kX2hlYWQocGFnZSkpXG4gMzg3Olx0I2RlZmluZSBQRl9OT19UQUlMKHBhZ2UsIGVuZm9yY2UpICh7XHRcdFx0XHRcdFxcXG4gMzg4Olx0XHRcdFZNX0JVR19PTl9QR0ZMQUdTKGVuZm9yY2UgXHUwMDI2XHUwMDI2IFBhZ2VUYWlsKHBhZ2UpLCBwYWdlKTtcdFxcXG4gMzg5Olx0XHRcdFBGX1BPSVNPTkVEX0NIRUNLKGNvbXBvdW5kX2hlYWQocGFnZSkpOyB9KVxuIDM5MDpcdCNkZWZpbmUgUEZfTk9fQ09NUE9VTkQocGFnZSwgZW5mb3JjZSkgKHtcdFx0XHRcdFxcXG4gMzkxOlx0XHRcdFZNX0JVR19PTl9QR0ZMQUdTKGVuZm9yY2UgXHUwMDI2XHUwMDI2IFBhZ2VDb21wb3VuZChwYWdlKSwgcGFnZSk7XHRcXFxuIDM5MjpcdFx0XHRQRl9QT0lTT05FRF9DSEVDSyhwYWdlKTsgfSlcbiAzOTM6XHQjZGVmaW5lIFBGX1NFQ09ORChwYWdlLCBlbmZvcmNlKSAoe1x0XHRcdFx0XHRcXFxuIDM5NDpcdFx0XHRWTV9CVUdfT05fUEdGTEFHUyghUGFnZUhlYWQocGFnZSksIHBhZ2UpO1x0XHRcXFxuIDM5NTpcdFx0XHRQRl9QT0lTT05FRF9DSEVDSyhcdTAwMjZwYWdlWzFdKTsgfSlcbiAzOTY6XHRcbiAzOTc6XHQvKiBXaGljaCBwYWdlIGlzIHRoZSBmbGFnIHN0b3JlZCBpbiAqL1xuIDM5ODpcdCNkZWZpbmUgRk9MSU9fUEZfQU5ZXHRcdDBcbiAzOTk6XHQjZGVmaW5lIEZPTElPX1BGX0hFQURcdFx0MFxuIDQwMDpcdCNkZWZpbmUgRk9MSU9fUEZfTk9fVEFJTFx0MFxuIDQwMTpcdCNkZWZpbmUgRk9MSU9fUEZfTk9fQ09NUE9VTkRcdDBcbiA0MDI6XHQjZGVmaW5lIEZPTElPX1BGX1NFQ09ORFx0XHQxXG4gNDAzOlx0XG4gNDA0Olx0I2RlZmluZSBGT0xJT19IRUFEX1BBR0VcdFx0MFxuIDQwNTpcdCNkZWZpbmUgRk9MSU9fU0VDT05EX1BBR0VcdDFcbiA0MDY6XHRcbiA0MDc6XHQvKlxuIDQwODpcdCAqIE1hY3JvcyB0byBjcmVhdGUgZnVuY3Rpb24gZGVmaW5pdGlvbnMgZm9yIHBhZ2UgZmxhZ3NcbiA0MDk6XHQgKi9cbiA0MTA6XHQjZGVmaW5lIEZPTElPX1RFU1RfRkxBRyhuYW1lLCBwYWdlKVx0XHRcdFx0XHRcXFxuIDQxMTpcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBmb2xpb190ZXN0XyMjbmFtZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKSBcXFxuIDQxMjpcdHsgcmV0dXJuIHRlc3RfYml0KFBHXyMjbmFtZSwgY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIHBhZ2UpKTsgfVxuIDQxMzpcdFxuIDQxNDpcdCNkZWZpbmUgRk9MSU9fU0VUX0ZMQUcobmFtZSwgcGFnZSlcdFx0XHRcdFx0XFxcbiA0MTU6XHRzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgZm9saW9fc2V0XyMjbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XFxcbiA0MTY6XHR7IHNldF9iaXQoUEdfIyNuYW1lLCBmb2xpb19mbGFncyhmb2xpbywgcGFnZSkpOyB9XG4gNDE3Olx0XG4gNDE4Olx0I2RlZmluZSBGT0xJT19DTEVBUl9GTEFHKG5hbWUsIHBhZ2UpXHRcdFx0XHRcdFxcXG4gNDE5Olx0c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGZvbGlvX2NsZWFyXyMjbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XFxcbiA0MjA6XHR7IGNsZWFyX2JpdChQR18jI25hbWUsIGZvbGlvX2ZsYWdzKGZvbGlvLCBwYWdlKSk7IH1cbiA0MjE6XHRcbiA0MjI6XHQjZGVmaW5lIF9fRk9MSU9fU0VUX0ZMQUcobmFtZSwgcGFnZSlcdFx0XHRcdFx0XFxcbiA0MjM6XHRzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19mb2xpb19zZXRfIyNuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXHRcXFxuIDQyNDpcdHsgX19zZXRfYml0KFBHXyMjbmFtZSwgZm9saW9fZmxhZ3MoZm9saW8sIHBhZ2UpKTsgfVxuIDQyNTpcdFxuIDQyNjpcdCNkZWZpbmUgX19GT0xJT19DTEVBUl9GTEFHKG5hbWUsIHBhZ2UpXHRcdFx0XHRcdFxcXG4gNDI3Olx0c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fZm9saW9fY2xlYXJfIyNuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXHRcXFxuIDQyODpcdHsgX19jbGVhcl9iaXQoUEdfIyNuYW1lLCBmb2xpb19mbGFncyhmb2xpbywgcGFnZSkpOyB9XG4gNDI5Olx0XG4gNDMwOlx0I2RlZmluZSBGT0xJT19URVNUX1NFVF9GTEFHKG5hbWUsIHBhZ2UpXHRcdFx0XHRcdFxcXG4gNDMxOlx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGZvbGlvX3Rlc3Rfc2V0XyMjbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XFxcbiA0MzI6XHR7IHJldHVybiB0ZXN0X2FuZF9zZXRfYml0KFBHXyMjbmFtZSwgZm9saW9fZmxhZ3MoZm9saW8sIHBhZ2UpKTsgfVxuIDQzMzpcdFxuIDQzNDpcdCNkZWZpbmUgRk9MSU9fVEVTVF9DTEVBUl9GTEFHKG5hbWUsIHBhZ2UpXHRcdFx0XHRcXFxuIDQzNTpcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBmb2xpb190ZXN0X2NsZWFyXyMjbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKSBcXFxuIDQzNjpcdHsgcmV0dXJuIHRlc3RfYW5kX2NsZWFyX2JpdChQR18jI25hbWUsIGZvbGlvX2ZsYWdzKGZvbGlvLCBwYWdlKSk7IH1cbiA0Mzc6XHRcbiA0Mzg6XHQjZGVmaW5lIEZPTElPX0ZMQUcobmFtZSwgcGFnZSlcdFx0XHRcdFx0XHRcXFxuIDQzOTpcdEZPTElPX1RFU1RfRkxBRyhuYW1lLCBwYWdlKVx0XHRcdFx0XHRcdFxcXG4gNDQwOlx0Rk9MSU9fU0VUX0ZMQUcobmFtZSwgcGFnZSlcdFx0XHRcdFx0XHRcXFxuIDQ0MTpcdEZPTElPX0NMRUFSX0ZMQUcobmFtZSwgcGFnZSlcbiA0NDI6XHRcbiA0NDM6XHQjZGVmaW5lIFRFU1RQQUdFRkxBRyh1bmFtZSwgbG5hbWUsIHBvbGljeSlcdFx0XHRcdFxcXG4gNDQ0Olx0Rk9MSU9fVEVTVF9GTEFHKGxuYW1lLCBGT0xJT18jI3BvbGljeSlcdFx0XHRcdFx0XFxcbiA0NDU6XHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBQYWdlIyN1bmFtZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcdFx0XFxcbiA0NDY6XHR7IHJldHVybiB0ZXN0X2JpdChQR18jI2xuYW1lLCBcdTAwMjZwb2xpY3kocGFnZSwgMCktXHUwMDNlZmxhZ3MuZik7IH1cbiA0NDc6XHRcbiA0NDg6XHQjZGVmaW5lIFNFVFBBR0VGTEFHKHVuYW1lLCBsbmFtZSwgcG9saWN5KVx0XHRcdFx0XFxcbiA0NDk6XHRGT0xJT19TRVRfRkxBRyhsbmFtZSwgRk9MSU9fIyNwb2xpY3kpXHRcdFx0XHRcdFxcXG4gNDUwOlx0c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIFNldFBhZ2UjI3VuYW1lKHN0cnVjdCBwYWdlICpwYWdlKVx0XHRcXFxuIDQ1MTpcdHsgc2V0X2JpdChQR18jI2xuYW1lLCBcdTAwMjZwb2xpY3kocGFnZSwgMSktXHUwMDNlZmxhZ3MuZik7IH1cbiA0NTI6XHRcbiA0NTM6XHQjZGVmaW5lIENMRUFSUEFHRUZMQUcodW5hbWUsIGxuYW1lLCBwb2xpY3kpXHRcdFx0XHRcXFxuIDQ1NDpcdEZPTElPX0NMRUFSX0ZMQUcobG5hbWUsIEZPTElPXyMjcG9saWN5KVx0XHRcdFx0XHRcXFxuIDQ1NTpcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBDbGVhclBhZ2UjI3VuYW1lKHN0cnVjdCBwYWdlICpwYWdlKVx0XHRcXFxuIDQ1NjpcdHsgY2xlYXJfYml0KFBHXyMjbG5hbWUsIFx1MDAyNnBvbGljeShwYWdlLCAxKS1cdTAwM2VmbGFncy5mKTsgfVxuIDQ1NzpcdFxuIDQ1ODpcdCNkZWZpbmUgX19TRVRQQUdFRkxBRyh1bmFtZSwgbG5hbWUsIHBvbGljeSlcdFx0XHRcdFxcXG4gNDU5Olx0X19GT0xJT19TRVRfRkxBRyhsbmFtZSwgRk9MSU9fIyNwb2xpY3kpXHRcdFx0XHRcdFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxMjcKCQkJCQkJCW91dHB1dDogMjA0CgkJCQkJCQl0aG91Z2h0czogNjMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmFjdG9yaW5nIFBhZ2UvRm9saW8gV3JpdGViYWNrIEZsYWdzOiBBIEtNU0FOIFBlcnNwZWN0aXZlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFByZXZpb3VzbHksIHdlIGhhZCBgVEVTVFBBR0VGTEFHYCBhbmQgYFRFU1RTQ0ZMQUdgIG1hY3JvcyB0aGF0LCBpbiB0aGUgY29udGV4dCBvZiB0aGUgYHdyaXRlYmFja2AgZmxhZywgZXNzZW50aWFsbHkgbWFwcGVkIHRvIGBQYWdlV3JpdGViYWNrYCBhbmQgYFRlc3RTZXRQYWdlV3JpdGViYWNrYCBmdW5jdGlvbnMgb3BlcmF0aW5nIG9uIHBhZ2Ugc3RydWN0dXJlcy4gVGhpcyBzZWVtcyBzdHJhaWdodGZvcndhcmQsIGJ1dCBub3cgd2UmIzM5O3JlIG1vZGVybml6aW5nIHRoaXMuIFRoZSBjb2RlIGlzIGJlaW5nIHVwZGF0ZWQgdG8gdXNlIGBGT0xJT19URVNUX0ZMQUdgIGFuZCBgRk9MSU9fVEVTVF9TRVRfRkxBR2Agd2l0aCBgRk9MSU9fSEVBRF9QQUdFYCwgd2hpY2gsIGF0IGEgaGlnaCBsZXZlbCwgaXMgcmVwbGFjaW5nIHRoZSBvbGQgcGFnZS1jZW50cmljIGhlbHBlcnMgd2l0aCBmb2xpby1jZW50cmljIGhlbHBlcnMgZm9yIHdyaXRlYmFjayBtYW5hZ2VtZW50LgoKU3BlY2lmaWNhbGx5LCB0aGUgb2xkIG1hY3JvcyB3ZXJlIGVmZmVjdGl2ZWx5IGNhbGxpbmcgYGZvbGlvX3Rlc3Rfd3JpdGViYWNrYCBhbmQgYGZvbGlvX3Rlc3Rfc2V0X3dyaXRlYmFja2AgZnVuY3Rpb25zIHdoaWNoIEkgc2hvdWxkIG5vdGUsIGFyZSBkZWZpbmVkIHdpdGggYEZPTElPX1BGX05PX1RBSUxgLgoKVGhpcyB0cmFuc2l0aW9uIGVmZmVjdGl2ZWx5IHJlbW92ZXMsIG9yIGF0IGxlYXN0IHJlbG9jYXRlcywgdGhlIGBQYWdlV3JpdGViYWNrYCwgYFRlc3RTZXRQYWdlV3JpdGViYWNrYCwgYW5kIGBUZXN0Q2xlYXJQYWdlV3JpdGViYWNrYCBoZWxwZXJzLCBub3cgdXNpbmcgZXF1aXZhbGVudCBmb2xpbyBoZWxwZXJzLCB3aXRoIGBmb2xpb190ZXN0X3dyaXRlYmFja2AsIGBmb2xpb190ZXN0X3NldF93cml0ZWJhY2tgLCBhbmQgYGZvbGlvX3Rlc3RfY2xlYXJfd3JpdGViYWNrYC4KClRoaXMgaXMgYSBwcmV0dHkgY2xlYW4gcmVmYWN0b3Jpbmc7IGl0JiMzOTtzIGEgbWFjcm8gcmVwbGFjZW1lbnQgYW5kIGZsYWcgaGVscGVyIGNoYW5nZSBwcmltYXJpbHkgZm9yIHRoZSBgd3JpdGViYWNrYCBmbGFnLiBTbywgdGhlIGtleSBxdWVzdGlvbiBpczogZG9lcyB0aGlzIGNoYW5nZSBleHBvc2UgYW55IG5ldywgcHJldmlvdXNseSB1bmFkZHJlc3NlZCwgS01TQU4tcmVsZXZhbnQgbWVtb3J5IGlzc3Vlcz8gTGV0JiMzOTtzIGFuYWx5emUuCgpJJiMzOTt2ZSBnb3QgdG8gY29uc2lkZXIgcG90ZW50aWFsIHJpc2tzOiBrZXJuZWwgc3RydWN0dXJlcyBiZWluZyBjb3BpZWQgdG8gdXNlcnNwYWNlLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMgb3IgcGFkZGluZywgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbGxvY2F0aW9ucyBvciBidWZmZXJzIHdpdGhvdXQgemVyb2luZywgYW5kIGFueSBhbHRlcmF0aW9uIG9mIGxlbmd0aCBvciBib3VuZHMgY2hlY2tzIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gTm9uZSBvZiB0aGVzZSBzY2VuYXJpb3Mgc2VlbSB0byBiZSBwcmVzZW50IGhlcmUuCgpHaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2UgYW5kIHRoZSBhYnNlbmNlIG9mIGFueSBvYnZpb3VzIG5ldyB2dWxuZXJhYmlsaXRpZXMsIEkmIzM5O20gY29uZmlkZW50IHRoaXMgcmVmYWN0b3JpbmcgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvcm1hdGlvbiBsZWFrIHJpc2tzIHRoYXQgd291bGQgc3BlY2lmaWNhbGx5IHdhcnJhbnQgS01TQU4uIEtBU0FOIGFuZCBzdGFuZGFyZCBzYW5pdGl6ZXJzIGhhbmRsZSBhbnkgbWVtb3J5IGlzc3VlcyBpZiBjYWxsZXJzIHBhc3MgYmFkIHBhZ2UvZm9saW8gcG9pbnRlcnMsIHdoaWNoIHRoaXMgY2hhbmdlIGl0c2VsZiBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UuCgpUaGVyZWZvcmUsIHRoZSBgTmVlZHNLTVNBTmAgZmxhZyBjYW4gYmUgc2V0IHRvIGBmYWxzZWAuIFRpbWUgdG8gbW92ZSBmb3J3YXJkIHdpdGggdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgcHJlcGFyZSBhIGNvbmNpc2UgZmluYWwgcmVwbHkgdGhhdCBoaWdobGlnaHRzIHRoZSBjb250cmFzdCBiZXR3ZWVuIEtBU0FOIGFuZCBLTVNBTiBhcHBsaWNhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb252ZXJ0cyB0aGUgcGFnZSBmbGFnIGRlZmluaXRpb25zIGZvciBQR193cml0ZWJhY2sgZnJvbSBsZWdhY3kgcGFnZS1iYXNlZCBtYWNyb3MgKFRFU1RQQUdFRkxBRyAvIFRFU1RTQ0ZMQUcpIHRvIGZvbGlvLWJhc2VkIG1hY3JvcyAoRk9MSU9fVEVTVF9GTEFHIC8gRk9MSU9fVEVTVF9TRVRfRkxBRykuIFxuXG5UaGlzIGlzIGEgdHlwZS1zYWZlIG1hY3JvIHJlZmFjdG9yaW5nIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IG9wZXJhdGVzIHB1cmVseSBvbiBwYWdlL2ZvbGlvIGJpdCBmbGFncy4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBhbGxvY2F0ZSwgb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgc3RydWN0IHBhZGRpbmcsIHVzZXItY29weSBidWZmZXJzLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBBbnkgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgdGhhdCBjb3VsZCBhcmlzZSBmcm9tIGludmFsaWQgZm9saW8vcGFnZSByZWZlcmVuY2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgcGFnZSBhY2Nlc3MpIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIHBhZ2UgZmxhZyBkZWJ1ZyBjaGVja3MgKFZNX0JVR19PTl9QR0ZMQUdTKS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9ybWF0aW9uIGxlYWsgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnZlcnRzIHRoZSBwYWdlIGZsYWcgZGVmaW5pdGlvbnMgZm9yIFBHX3dyaXRlYmFjayBmcm9tIGxlZ2FjeSBwYWdlLWJhc2VkIG1hY3JvcyAoVEVTVFBBR0VGTEFHIC8gVEVTVFNDRkxBRykgdG8gZm9saW8tYmFzZWQgbWFjcm9zIChGT0xJT19URVNUX0ZMQUcgLyBGT0xJT19URVNUX1NFVF9GTEFHKS4gXG5cblRoaXMgaXMgYSB0eXBlLXNhZmUgbWFjcm8gcmVmYWN0b3JpbmcgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgb3BlcmF0ZXMgcHVyZWx5IG9uIHBhZ2UvZm9saW8gYml0IGZsYWdzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIGFsbG9jYXRlLCBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzdHJ1Y3QgcGFkZGluZywgdXNlci1jb3B5IGJ1ZmZlcnMsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFueSBtZW1vcnkgc2FmZXR5IGlzc3VlcyB0aGF0IGNvdWxkIGFyaXNlIGZyb20gaW52YWxpZCBmb2xpby9wYWdlIHJlZmVyZW5jZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBwYWdlIGFjY2VzcykgYXJlIGFscmVhZHkgY292ZXJlZCBieSBLQVNBTiBhbmQgcGFnZSBmbGFnIGRlYnVnIGNoZWNrcyAoVk1fQlVHX09OX1BHRkxBR1MpLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVhayByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjozNzoyMS4wNDY1MjY4ODRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjA4MjQxMDAzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2ZvbGlvX3N0YXJ0X3dyaXRlYmFja1wiLFxuICAgIFwiZm9saW9fZW5kX3dyaXRlYmFja1wiLFxuICAgIFwiZm9saW9fd2FpdF93cml0ZWJhY2tcIixcbiAgICBcImZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29udmVydHMgdGhlIHBhZ2UgZmxhZyBkZWZpbml0aW9ucyBmb3IgUEdfd3JpdGViYWNrIGZyb20gbGVnYWN5IHBhZ2UtYmFzZWQgbWFjcm9zIChURVNUUEFHRUZMQUcgLyBURVNUU0NGTEFHKSB0byBmb2xpby1iYXNlZCBtYWNyb3MgKEZPTElPX1RFU1RfRkxBRyAvIEZPTElPX1RFU1RfU0VUX0ZMQUcpLiBcXG5cXG5UaGlzIGlzIGEgdHlwZS1zYWZlIG1hY3JvIHJlZmFjdG9yaW5nIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IG9wZXJhdGVzIHB1cmVseSBvbiBwYWdlL2ZvbGlvIGJpdCBmbGFncy4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBhbGxvY2F0ZSwgb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgc3RydWN0IHBhZGRpbmcsIHVzZXItY29weSBidWZmZXJzLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBBbnkgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgdGhhdCBjb3VsZCBhcmlzZSBmcm9tIGludmFsaWQgZm9saW8vcGFnZSByZWZlcmVuY2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgcGFnZSBhY2Nlc3MpIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIHBhZ2UgZmxhZyBkZWJ1ZyBjaGVja3MgKFZNX0JVR19PTl9QR0ZMQUdTKS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9ybWF0aW9uIGxlYWsgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIHRoZSB3cml0ZWJhY2sgZm9saW8gZmxhZyBkZWZpbml0aW9ucyBpbiBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCBmcm9tIGxlZ2FjeSBwYWdlLWZsYWcgbWFjcm9zIChURVNUUEFHRUZMQUcsIFRFU1RTQ0ZMQUcpIHRvIHRoZSBtb2Rlcm4gZm9saW8gZmxhZyBtYWNyb3MgKEZPTElPX1RFU1RfRkxBRywgRk9MSU9fVEVTVF9TRVRfRkxBRykuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGludm9sdmVkIGluIGZvbGlvIHdyaXRlYmFjayBzdGF0ZSB0cmFja2luZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzc6MjEuMDQ2NTMyNjA0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTM2NTQ3NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3NDIyZWVlM2U3ZjUyNDJmZGQyYTcxMjU3NTJkYTBhY2U2N2RkMTdjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gU2VwIDYgMTY6Mzc6MTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxcbmluZGV4IDNkYzc5YzBjNWFkZjAuLjg2ZGQwNDcwZGExMTcgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxcbkBAIC01ODgsOCArNTg4LDggQEAgRk9MSU9fRkxBRyhvd25lcl8yLCBGT0xJT19IRUFEX1BBR0UpXFxuICAqIE9ubHkgdGVzdC1hbmQtc2V0IGV4aXN0IGZvciBQR193cml0ZWJhY2suICBUaGUgdW5jb25kaXRpb25hbCBvcGVyYXRvcnMgYXJlXFxuICAqIHJpc2t5OiB0aGV5IGJ5cGFzcyBwYWdlIGFjY291bnRpbmcuXFxuICAqL1xcbi1URVNUUEFHRUZMQUcoV3JpdGViYWNrLCB3cml0ZWJhY2ssIFBGX05PX1RBSUwpXFxuLVxcdFRFU1RTQ0ZMQUcoV3JpdGViYWNrLCB3cml0ZWJhY2ssIFBGX05PX1RBSUwpXFxuK0ZPTElPX1RFU1RfRkxBRyh3cml0ZWJhY2ssIEZPTElPX0hFQURfUEFHRSlcXG4rXFx0Rk9MSU9fVEVTVF9TRVRfRkxBRyh3cml0ZWJhY2ssIEZPTElPX0hFQURfUEFHRSlcXG4gRk9MSU9fRkxBRyhtYXBwZWR0b2Rpc2ssIEZPTElPX0hFQURfUEFHRSlcXG4gXFxuIC8qIFBHX3JlYWRhaGVhZCBpcyBvbmx5IHVzZWQgZm9yIHJlYWRzOyBQR19yZWNsYWltIGlzIG9ubHkgZm9yIHdyaXRlcyAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjozNzoyMS43NDEwNjU4NDJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjY0NTY5MjA3NDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fZm9saW9fc3RhcnRfd3JpdGViYWNrXCIsXG4gICAgXCJmb2xpb19lbmRfd3JpdGViYWNrXCIsXG4gICAgXCJmb2xpb193YWl0X3dyaXRlYmFja1wiLFxuICAgIFwiZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgd3JpdGViYWNrIGZvbGlvIGZsYWcgZGVmaW5pdGlvbnMgaW4gaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggZnJvbSBsZWdhY3kgcGFnZS1mbGFnIG1hY3JvcyAoVEVTVFBBR0VGTEFHLCBURVNUU0NGTEFHKSB0byB0aGUgbW9kZXJuIGZvbGlvIGZsYWcgbWFjcm9zIChGT0xJT19URVNUX0ZMQUcsIEZPTElPX1RFU1RfU0VUX0ZMQUcpLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbnZvbHZlZCBpbiBmb2xpbyB3cml0ZWJhY2sgc3RhdGUgdHJhY2tpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzQyMmVlZTNlN2Y1MjQyZmRkMmE3MTI1NzUyZGEwYWNlNjdkZDE3Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTY6Mzc6MTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXG5pbmRleCAzZGM3OWMwYzVhZGYwLi44NmRkMDQ3MGRhMTE3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXG5AQCAtNTg4LDggKzU4OCw4IEBAIEZPTElPX0ZMQUcob3duZXJfMiwgRk9MSU9fSEVBRF9QQUdFKVxuICAqIE9ubHkgdGVzdC1hbmQtc2V0IGV4aXN0IGZvciBQR193cml0ZWJhY2suICBUaGUgdW5jb25kaXRpb25hbCBvcGVyYXRvcnMgYXJlXG4gICogcmlza3k6IHRoZXkgYnlwYXNzIHBhZ2UgYWNjb3VudGluZy5cbiAgKi9cbi1URVNUUEFHRUZMQUcoV3JpdGViYWNrLCB3cml0ZWJhY2ssIFBGX05PX1RBSUwpXG4tXHRURVNUU0NGTEFHKFdyaXRlYmFjaywgd3JpdGViYWNrLCBQRl9OT19UQUlMKVxuK0ZPTElPX1RFU1RfRkxBRyh3cml0ZWJhY2ssIEZPTElPX0hFQURfUEFHRSlcbitcdEZPTElPX1RFU1RfU0VUX0ZMQUcod3JpdGViYWNrLCBGT0xJT19IRUFEX1BBR0UpXG4gRk9MSU9fRkxBRyhtYXBwZWR0b2Rpc2ssIEZPTElPX0hFQURfUEFHRSlcbiBcbiAvKiBQR19yZWFkYWhlYWQgaXMgb25seSB1c2VkIGZvciByZWFkczsgUEdfcmVjbGFpbSBpcyBvbmx5IGZvciB3cml0ZXMgKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM3OjIxLjc0MTA2ODI2MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc3Njc0NzQ5NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogVW5yYXZlbGluZyBQYWdlLUZsYWcgTWVjaGFuaWNzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHRoZSBhc3NvY2lhdGVkIGluc3RydWN0aW9ucy4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY29yZSBvZiB0aGUgY2hhbmdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG1vZGlmaWNhdGlvbiBpbXBhY3RzIHRoZSBwYWdlLWZsYWdzIG1hY3Jvcy4gVG8gZG8gdGhpcyBlZmZlY3RpdmVseSwgSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGZvY3VzaW5nIG9uIHRoZSBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgIGZpbGUuIFNwZWNpZmljYWxseSwgSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIGNvZGUgYXJvdW5kIGxpbmUgNTg4IHRvIHNlZSBwcmVjaXNlbHkgd2hhdCdzIGJlZW4gYWx0ZXJlZC5cblxuSSdsbCBiZSBsZXZlcmFnaW5nIG15IHVzdWFsIHRvb2xzIGZvciB0aGlzIGtpbmQgb2YgaW52ZXN0aWdhdGlvbiDigJMgbGlrZWx5IGVpdGhlciBgcmVhZC1maWxlYCB0byBnZXQgYSBkaXJlY3QgdmlldyBvZiB0aGUgY2hhbmdlcywgb3IgYGdyZXBwZXJgIHRvIHNlYXJjaCBmb3Igc3BlY2lmaWMgdGVybXMgb3IgcGF0dGVybnMgdGhhdCB3aWxsIGlsbHVtaW5hdGUgdGhlIHJldmlzZWQgZnVuY3Rpb25hbGl0eSBvZiB0aG9zZSBwYWdlLWZsYWcgbWFjcm9zLiBUaGlzIGFwcHJvYWNoIHNob3VsZCBnaXZlIG1lIHRoZSBjbGVhciwgdGFyZ2V0ZWQgaW5mb3JtYXRpb24gSSBuZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTI3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjozNzoyOS41MDg1NDk4OTRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTk5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNTcwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTcwOlxcdFxcdF9fQ0xFQVJQQUdFRkxBRyhSZXNlcnZlZCwgcmVzZXJ2ZWQsIFBGX05PX0NPTVBPVU5EKVxcbiA1NzE6XFx0XFx0X19TRVRQQUdFRkxBRyhSZXNlcnZlZCwgcmVzZXJ2ZWQsIFBGX05PX0NPTVBPVU5EKVxcbiA1NzI6XFx0Rk9MSU9fRkxBRyhzd2FwYmFja2VkLCBGT0xJT19IRUFEX1BBR0UpXFxuIDU3MzpcXHRcXHRfX0ZPTElPX0NMRUFSX0ZMQUcoc3dhcGJhY2tlZCwgRk9MSU9fSEVBRF9QQUdFKVxcbiA1NzQ6XFx0XFx0X19GT0xJT19TRVRfRkxBRyhzd2FwYmFja2VkLCBGT0xJT19IRUFEX1BBR0UpXFxuIDU3NTpcXHRcXG4gNTc2OlxcdC8qXFxuIDU3NzpcXHQgKiBQcml2YXRlIHBhZ2UgbWFya2luZ3MgdGhhdCBtYXkgYmUgdXNlZCBieSB0aGUgZmlsZXN5c3RlbSB0aGF0IG93bnMgdGhlIHBhZ2VcXG4gNTc4OlxcdCAqIGZvciBpdHMgb3duIHB1cnBvc2VzLlxcbiA1Nzk6XFx0ICogLSBQR19wcml2YXRlIGFuZCBQR19wcml2YXRlXzIgY2F1c2UgcmVsZWFzZV9mb2xpbygpIGFuZCBjbyB0byBiZSBpbnZva2VkXFxuIDU4MDpcXHQgKi9cXG4gNTgxOlxcdFBBR0VGTEFHKFByaXZhdGUsIHByaXZhdGUsIFBGX0FOWSlcXG4gNTgyOlxcdEZPTElPX0ZMQUcocHJpdmF0ZV8yLCBGT0xJT19IRUFEX1BBR0UpXFxuIDU4MzpcXHRcXG4gNTg0OlxcdC8qIG93bmVyXzIgY2FuIGJlIHNldCBvbiB0YWlsIHBhZ2VzIGZvciBhbm9uIG1lbW9yeSAqL1xcbiA1ODU6XFx0Rk9MSU9fRkxBRyhvd25lcl8yLCBGT0xJT19IRUFEX1BBR0UpXFxuIDU4NjpcXHRcXG4gNTg3OlxcdC8qXFxuIDU4ODpcXHQgKiBPbmx5IHRlc3QtYW5kLXNldCBleGlzdCBmb3IgUEdfd3JpdGViYWNrLiAgVGhlIHVuY29uZGl0aW9uYWwgb3BlcmF0b3JzIGFyZVxcbiA1ODk6XFx0ICogcmlza3k6IHRoZXkgYnlwYXNzIHBhZ2UgYWNjb3VudGluZy5cXG4gNTkwOlxcdCAqL1xcbiA1OTE6XFx0Rk9MSU9fVEVTVF9GTEFHKHdyaXRlYmFjaywgRk9MSU9fSEVBRF9QQUdFKVxcbiA1OTI6XFx0XFx0Rk9MSU9fVEVTVF9TRVRfRkxBRyh3cml0ZWJhY2ssIEZPTElPX0hFQURfUEFHRSlcXG4gNTkzOlxcdEZPTElPX0ZMQUcobWFwcGVkdG9kaXNrLCBGT0xJT19IRUFEX1BBR0UpXFxuIDU5NDpcXHRcXG4gNTk1OlxcdC8qIFBHX3JlYWRhaGVhZCBpcyBvbmx5IHVzZWQgZm9yIHJlYWRzOyBQR19yZWNsYWltIGlzIG9ubHkgZm9yIHdyaXRlcyAqL1xcbiA1OTY6XFx0Rk9MSU9fRkxBRyhyZWNsYWltLCBGT0xJT19IRUFEX1BBR0UpXFxuIDU5NzpcXHRGT0xJT19GTEFHKHJlYWRhaGVhZCwgRk9MSU9fSEVBRF9QQUdFKVxcbiA1OTg6XFx0XFx0Rk9MSU9fVEVTVF9DTEVBUl9GTEFHKHJlYWRhaGVhZCwgRk9MSU9fSEVBRF9QQUdFKVxcbiA1OTk6XFx0XFxuIDYwMDpcXHRGT0xJT19GTEFHKGRyb3BiZWhpbmQsIEZPTElPX0hFQURfUEFHRSlcXG4gNjAxOlxcdFxcdEZPTElPX1RFU1RfQ0xFQVJfRkxBRyhkcm9wYmVoaW5kLCBGT0xJT19IRUFEX1BBR0UpXFxuIDYwMjpcXHRcXHRfX0ZPTElPX1NFVF9GTEFHKGRyb3BiZWhpbmQsIEZPTElPX0hFQURfUEFHRSlcXG4gNjAzOlxcdFxcbiA2MDQ6XFx0I2lmZGVmIENPTkZJR19ISUdITUVNXFxuIDYwNTpcXHQvKlxcbiA2MDY6XFx0ICogTXVzdCB1c2UgYSBtYWNybyBoZXJlIGR1ZSB0byBoZWFkZXIgZGVwZW5kZW5jeSBpc3N1ZXMuIHBhZ2Vfem9uZSgpIGlzIG5vdFxcbiA2MDc6XFx0ICogYXZhaWxhYmxlIGF0IHRoaXMgcG9pbnQuXFxuIDYwODpcXHQgKi9cXG4gNjA5OlxcdCNkZWZpbmUgUGFnZUhpZ2hNZW0oX19wKSBpc19oaWdobWVtX2lkeChwYWdlX3pvbmVudW0oX19wKSlcXG4gNjEwOlxcdCNkZWZpbmUgZm9saW9fdGVzdF9oaWdobWVtKF9fZilcXHRpc19oaWdobWVtX2lkeChmb2xpb196b25lbnVtKF9fZikpXFxuIDYxMTpcXHQjZWxzZVxcbiA2MTI6XFx0UEFHRUZMQUdfRkFMU0UoSGlnaE1lbSwgaGlnaG1lbSlcXG4gNjEzOlxcdCNlbmRpZlxcbiA2MTQ6XFx0I2RlZmluZSBQaHlzSGlnaE1lbShfX3ApIChQYWdlSGlnaE1lbShwaHlzX3RvX3BhZ2UoX19wKSkpXFxuIDYxNTpcXHRcXG4gNjE2OlxcdC8qIERvZXMga21hcF9sb2NhbF9mb2xpbygpIG9ubHkgYWxsb3cgYWNjZXNzIHRvIG9uZSBwYWdlIG9mIHRoZSBmb2xpbz8gKi9cXG4gNjE3OlxcdCNpZmRlZiBDT05GSUdfREVCVUdfS01BUF9MT0NBTF9GT1JDRV9NQVBcXG4gNjE4OlxcdCNkZWZpbmUgZm9saW9fdGVzdF9wYXJ0aWFsX2ttYXAoZilcXHR0cnVlXFxuIDYxOTpcXHQjZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjozNzoyOS41MDg5MTU3MzRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzE4MzAyNTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcnksIGZyYW1lZCBhcyBteSBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBMaW51eCBQYWdlIEZsYWdzKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGVzZSBmbGFncy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgYFRFU1RQQUdFRkxBR2AsIGBURVNUU0NGTEFHYCwgYEZPTElPX1RFU1RfRkxBR2AsIGFuZCBgRk9MSU9fVEVTVF9TRVRfRkxBR2AuIFRoZXkncmUgcHJvYmFibHkgZGVmaW5lZCBzb21ld2hlcmUgaW4gYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYCwgc28gbGV0J3MgaGVhZCBvdmVyIHRoZXJlIGFuZCB0YWtlIGEgbG9vay4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSByZWxhdGUgdG8sIHlvdSBrbm93LCB0aGUgcGFnZSBhbGxvY2F0aW9uIGFuZCBtYW5hZ2VtZW50IHdpdGhpbiB0aGUga2VybmVsLiBXaGF0IGFyZSB0aGV5IHRlc3Rpbmc/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgaWYgb25lIG9mIHRoZW0gaXMgc2V0IG9yIG5vdD8gSG9wZWZ1bGx5IHRoZSBjb21tZW50cyBhcmUgZ29vZCBpbiB0aGVyZSBzbyBJIGRvbid0IGhhdmUgdG8gdHJhY2UgaXQgYWxsIGJhY2sgZnJvbSB0aGUgdXNhZ2UhIFRpbWUgdG8gZGl2ZSBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEyNCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzc6MzEuODI3MjI3MjQyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNDk1Mzk1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIEZPTElPX1RFU1RfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTM1MD1zdGF0aWMgdW5zaWduZWQgbG9uZyAqZm9saW9fZmxhZ3Moc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgbilcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTQwOS0gKi9cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo0MTA6I2RlZmluZSBGT0xJT19URVNUX0ZMQUcobmFtZSwgcGFnZSlcXHRcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNDExLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBmb2xpb190ZXN0XyMjbmFtZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKSBcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD00Mjc9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fZm9saW9fY2xlYXJfIyNuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXFx0XFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNDI5LVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjQzMDojZGVmaW5lIEZPTElPX1RFU1RfU0VUX0ZMQUcobmFtZSwgcGFnZSlcXHRcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNDMxLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBmb2xpb190ZXN0X3NldF8jI25hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC00MzMtXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6NDM0OiNkZWZpbmUgRk9MSU9fVEVTVF9DTEVBUl9GTEFHKG5hbWUsIHBhZ2UpXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTQzNS1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgZm9saW9fdGVzdF9jbGVhcl8jI25hbWUoc3RydWN0IGZvbGlvICpmb2xpbykgXFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9NDc1PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IFRlc3RDbGVhclBhZ2UjI3VuYW1lKHN0cnVjdCBwYWdlICpwYWdlKVxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTQ5MS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo0OTI6I2RlZmluZSBGT0xJT19URVNUX0ZMQUdfRkFMU0UobmFtZSlcXHRcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNDkzLXN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb190ZXN0XyMjbmFtZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTUwMj1zdGF0aWMgaW5saW5lIHZvaWQgX19mb2xpb19jbGVhcl8jI25hbWUoc3RydWN0IGZvbGlvICpmb2xpbykgeyB9XFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6NTAzOiNkZWZpbmUgRk9MSU9fVEVTVF9TRVRfRkxBR19GQUxTRShuYW1lKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC01MDQtc3RhdGljIGlubGluZSBib29sIGZvbGlvX3Rlc3Rfc2V0XyMjbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC01MDUteyByZXR1cm4gZmFsc2U7IH1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo1MDY6I2RlZmluZSBGT0xJT19URVNUX0NMRUFSX0ZMQUdfRkFMU0UobmFtZSlcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNTA3LXN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb190ZXN0X2NsZWFyXyMjbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcdFxcdFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzc6MzIuMDMyMTg2NjU5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQyNTcyNTk1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgbWFjcm9zLCBhcyBpZiB0aGV5IHdlcmUgbXkgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaGAgLSBMaW5lcyA0MDAtNDgwKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHBhZ2UtZmxhZ3MuaGAgaGVhZGVyIGZpbGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGdldCBteSBoZWFkIGFyb3VuZCB0aGUgbWFjcm8gZGVmaW5pdGlvbnMga2lja2luZyBhcm91bmQgbGluZXMgNDAwIHRvIDQ4MC4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIGJlIHdoZXJlIHRoZSBjb3JlIGJpdCBtYW5pcHVsYXRpb24gaGFwcGVucyBmb3IgdGhlIHBhZ2UgZmxhZ3MsIHNvIHVuZGVyc3RhbmRpbmcgdGhpcyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgbWVtb3J5IG1hbmFnZW1lbnQgaXMgd29ya2luZyB1bmRlciB0aGUgaG9vZC4gSSBhbnRpY2lwYXRlIHRoZXNlIG1hY3JvcyB3aWxsIGhhbmRsZSBvcGVyYXRpb25zIGxpa2Ugc2V0dGluZywgY2xlYXJpbmcsIHRlc3RpbmcsIGFuZCBwcm9iYWJseSBldmVuIGF0b21pYyBtb2RpZmljYXRpb24gb2YgdGhvc2UgcGFnZSBmbGFncy4gSSdtIGhvcGluZyB0byBzZWUgc29tZSB3ZWxsLWRlZmluZWQgYml0IGZpZWxkcywgcG9zc2libHkgdXNpbmcgYF9fQklUKG4pYCBvciBzaW1pbGFyIGNvbnN0cnVjdHMuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBjb250ZXh0IGluIHdoaWNoIHRoZXNlIGFyZSB1c2VkIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGF0b21pYyBndWFyYW50ZWVzIG1hZGUgZm9yIGNvbmN1cnJlbmN5LiBHaXZlbiB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSBrZXJuZWwsIEknbGwgYmUgbG9va2luZyBmb3IgcG9zc2libGUgY29tcGlsZXIgYmFycmllcnMsIHZvbGF0aWxlIHF1YWxpZmllcnMsIG9yIG90aGVyIG1lbW9yeSBvcmRlcmluZyBwcmltaXRpdmVzLCBhbGwgdG8gbWFpbnRhaW4gZGF0YSBpbnRlZ3JpdHkgd2hlbiBtYW55IHByb2Nlc3NvcnMgYWNjZXNzIHRoZSBzYW1lIG1lbW9yeSBsb2NhdGlvbnMuIEknbSByZWFkeSB0byBjYXJlZnVsbHkgY29uc2lkZXIgZWFjaCBtYWNybydzIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDEzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzc6MzQuNDU3OTE3MzE1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2MjExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwMCxcbiAgXCJMaW5lQ291bnRcIjogODVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQwMDpcXHQjZGVmaW5lIEZPTElPX1BGX05PX1RBSUxcXHQwXFxuIDQwMTpcXHQjZGVmaW5lIEZPTElPX1BGX05PX0NPTVBPVU5EXFx0MFxcbiA0MDI6XFx0I2RlZmluZSBGT0xJT19QRl9TRUNPTkRcXHRcXHQxXFxuIDQwMzpcXHRcXG4gNDA0OlxcdCNkZWZpbmUgRk9MSU9fSEVBRF9QQUdFXFx0XFx0MFxcbiA0MDU6XFx0I2RlZmluZSBGT0xJT19TRUNPTkRfUEFHRVxcdDFcXG4gNDA2OlxcdFxcbiA0MDc6XFx0LypcXG4gNDA4OlxcdCAqIE1hY3JvcyB0byBjcmVhdGUgZnVuY3Rpb24gZGVmaW5pdGlvbnMgZm9yIHBhZ2UgZmxhZ3NcXG4gNDA5OlxcdCAqL1xcbiA0MTA6XFx0I2RlZmluZSBGT0xJT19URVNUX0ZMQUcobmFtZSwgcGFnZSlcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDQxMTpcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgZm9saW9fdGVzdF8jI25hbWUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykgXFxcXFxcbiA0MTI6XFx0eyByZXR1cm4gdGVzdF9iaXQoUEdfIyNuYW1lLCBjb25zdF9mb2xpb19mbGFncyhmb2xpbywgcGFnZSkpOyB9XFxuIDQxMzpcXHRcXG4gNDE0OlxcdCNkZWZpbmUgRk9MSU9fU0VUX0ZMQUcobmFtZSwgcGFnZSlcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDQxNTpcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgZm9saW9fc2V0XyMjbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcdFxcXFxcXG4gNDE2OlxcdHsgc2V0X2JpdChQR18jI25hbWUsIGZvbGlvX2ZsYWdzKGZvbGlvLCBwYWdlKSk7IH1cXG4gNDE3OlxcdFxcbiA0MTg6XFx0I2RlZmluZSBGT0xJT19DTEVBUl9GTEFHKG5hbWUsIHBhZ2UpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA0MTk6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGZvbGlvX2NsZWFyXyMjbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcdFxcXFxcXG4gNDIwOlxcdHsgY2xlYXJfYml0KFBHXyMjbmFtZSwgZm9saW9fZmxhZ3MoZm9saW8sIHBhZ2UpKTsgfVxcbiA0MjE6XFx0XFxuIDQyMjpcXHQjZGVmaW5lIF9fRk9MSU9fU0VUX0ZMQUcobmFtZSwgcGFnZSlcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDQyMzpcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19mb2xpb19zZXRfIyNuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXFx0XFxcXFxcbiA0MjQ6XFx0eyBfX3NldF9iaXQoUEdfIyNuYW1lLCBmb2xpb19mbGFncyhmb2xpbywgcGFnZSkpOyB9XFxuIDQyNTpcXHRcXG4gNDI2OlxcdCNkZWZpbmUgX19GT0xJT19DTEVBUl9GTEFHKG5hbWUsIHBhZ2UpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA0Mjc6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fZm9saW9fY2xlYXJfIyNuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXFx0XFxcXFxcbiA0Mjg6XFx0eyBfX2NsZWFyX2JpdChQR18jI25hbWUsIGZvbGlvX2ZsYWdzKGZvbGlvLCBwYWdlKSk7IH1cXG4gNDI5OlxcdFxcbiA0MzA6XFx0I2RlZmluZSBGT0xJT19URVNUX1NFVF9GTEFHKG5hbWUsIHBhZ2UpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA0MzE6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGZvbGlvX3Rlc3Rfc2V0XyMjbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcdFxcXFxcXG4gNDMyOlxcdHsgcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoUEdfIyNuYW1lLCBmb2xpb19mbGFncyhmb2xpbywgcGFnZSkpOyB9XFxuIDQzMzpcXHRcXG4gNDM0OlxcdCNkZWZpbmUgRk9MSU9fVEVTVF9DTEVBUl9GTEFHKG5hbWUsIHBhZ2UpXFx0XFx0XFx0XFx0XFxcXFxcbiA0MzU6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGZvbGlvX3Rlc3RfY2xlYXJfIyNuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pIFxcXFxcXG4gNDM2OlxcdHsgcmV0dXJuIHRlc3RfYW5kX2NsZWFyX2JpdChQR18jI25hbWUsIGZvbGlvX2ZsYWdzKGZvbGlvLCBwYWdlKSk7IH1cXG4gNDM3OlxcdFxcbiA0Mzg6XFx0I2RlZmluZSBGT0xJT19GTEFHKG5hbWUsIHBhZ2UpXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA0Mzk6XFx0Rk9MSU9fVEVTVF9GTEFHKG5hbWUsIHBhZ2UpXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA0NDA6XFx0Rk9MSU9fU0VUX0ZMQUcobmFtZSwgcGFnZSlcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDQ0MTpcXHRGT0xJT19DTEVBUl9GTEFHKG5hbWUsIHBhZ2UpXFxuIDQ0MjpcXHRcXG4gNDQzOlxcdCNkZWZpbmUgVEVTVFBBR0VGTEFHKHVuYW1lLCBsbmFtZSwgcG9saWN5KVxcdFxcdFxcdFxcdFxcXFxcXG4gNDQ0OlxcdEZPTElPX1RFU1RfRkxBRyhsbmFtZSwgRk9MSU9fIyNwb2xpY3kpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA0NDU6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgUGFnZSMjdW5hbWUoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFx0XFx0XFxcXFxcbiA0NDY6XFx0eyByZXR1cm4gdGVzdF9iaXQoUEdfIyNsbmFtZSwgXFx1MDAyNnBvbGljeShwYWdlLCAwKS1cXHUwMDNlZmxhZ3MuZik7IH1cXG4gNDQ3OlxcdFxcbiA0NDg6XFx0I2RlZmluZSBTRVRQQUdFRkxBRyh1bmFtZSwgbG5hbWUsIHBvbGljeSlcXHRcXHRcXHRcXHRcXFxcXFxuIDQ0OTpcXHRGT0xJT19TRVRfRkxBRyhsbmFtZSwgRk9MSU9fIyNwb2xpY3kpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA0NTA6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIFNldFBhZ2UjI3VuYW1lKHN0cnVjdCBwYWdlICpwYWdlKVxcdFxcdFxcXFxcXG4gNDUxOlxcdHsgc2V0X2JpdChQR18jI2xuYW1lLCBcXHUwMDI2cG9saWN5KHBhZ2UsIDEpLVxcdTAwM2VmbGFncy5mKTsgfVxcbiA0NTI6XFx0XFxuIDQ1MzpcXHQjZGVmaW5lIENMRUFSUEFHRUZMQUcodW5hbWUsIGxuYW1lLCBwb2xpY3kpXFx0XFx0XFx0XFx0XFxcXFxcbiA0NTQ6XFx0Rk9MSU9fQ0xFQVJfRkxBRyhsbmFtZSwgRk9MSU9fIyNwb2xpY3kpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA0NTU6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIENsZWFyUGFnZSMjdW5hbWUoc3RydWN0IHBhZ2UgKnBhZ2UpXFx0XFx0XFxcXFxcbiA0NTY6XFx0eyBjbGVhcl9iaXQoUEdfIyNsbmFtZSwgXFx1MDAyNnBvbGljeShwYWdlLCAxKS1cXHUwMDNlZmxhZ3MuZik7IH1cXG4gNDU3OlxcdFxcbiA0NTg6XFx0I2RlZmluZSBfX1NFVFBBR0VGTEFHKHVuYW1lLCBsbmFtZSwgcG9saWN5KVxcdFxcdFxcdFxcdFxcXFxcXG4gNDU5OlxcdF9fRk9MSU9fU0VUX0ZMQUcobG5hbWUsIEZPTElPXyMjcG9saWN5KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gNDYwOlxcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX1NldFBhZ2UjI3VuYW1lKHN0cnVjdCBwYWdlICpwYWdlKVxcdFxcdFxcXFxcXG4gNDYxOlxcdHsgX19zZXRfYml0KFBHXyMjbG5hbWUsIFxcdTAwMjZwb2xpY3kocGFnZSwgMSktXFx1MDAzZWZsYWdzLmYpOyB9XFxuIDQ2MjpcXHRcXG4gNDYzOlxcdCNkZWZpbmUgX19DTEVBUlBBR0VGTEFHKHVuYW1lLCBsbmFtZSwgcG9saWN5KVxcdFxcdFxcdFxcdFxcXFxcXG4gNDY0OlxcdF9fRk9MSU9fQ0xFQVJfRkxBRyhsbmFtZSwgRk9MSU9fIyNwb2xpY3kpXFx0XFx0XFx0XFx0XFxcXFxcbiA0NjU6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fQ2xlYXJQYWdlIyN1bmFtZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXHRcXFxcXFxuIDQ2NjpcXHR7IF9fY2xlYXJfYml0KFBHXyMjbG5hbWUsIFxcdTAwMjZwb2xpY3kocGFnZSwgMSktXFx1MDAzZWZsYWdzLmYpOyB9XFxuIDQ2NzpcXHRcXG4gNDY4OlxcdCNkZWZpbmUgVEVTVFNFVEZMQUcodW5hbWUsIGxuYW1lLCBwb2xpY3kpXFx0XFx0XFx0XFx0XFxcXFxcbiA0Njk6XFx0Rk9MSU9fVEVTVF9TRVRfRkxBRyhsbmFtZSwgRk9MSU9fIyNwb2xpY3kpXFx0XFx0XFx0XFx0XFxcXFxcbiA0NzA6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgVGVzdFNldFBhZ2UjI3VuYW1lKHN0cnVjdCBwYWdlICpwYWdlKVxcdFxcXFxcXG4gNDcxOlxcdHsgcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoUEdfIyNsbmFtZSwgXFx1MDAyNnBvbGljeShwYWdlLCAxKS1cXHUwMDNlZmxhZ3MuZik7IH1cXG4gNDcyOlxcdFxcbiA0NzM6XFx0I2RlZmluZSBURVNUQ0xFQVJGTEFHKHVuYW1lLCBsbmFtZSwgcG9saWN5KVxcdFxcdFxcdFxcdFxcXFxcXG4gNDc0OlxcdEZPTElPX1RFU1RfQ0xFQVJfRkxBRyhsbmFtZSwgRk9MSU9fIyNwb2xpY3kpXFx0XFx0XFx0XFx0XFxcXFxcbiA0NzU6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgVGVzdENsZWFyUGFnZSMjdW5hbWUoc3RydWN0IHBhZ2UgKnBhZ2UpXFx0XFxcXFxcbiA0NzY6XFx0eyByZXR1cm4gdGVzdF9hbmRfY2xlYXJfYml0KFBHXyMjbG5hbWUsIFxcdTAwMjZwb2xpY3kocGFnZSwgMSktXFx1MDAzZWZsYWdzLmYpOyB9XFxuIDQ3NzpcXHRcXG4gNDc4OlxcdCNkZWZpbmUgUEFHRUZMQUcodW5hbWUsIGxuYW1lLCBwb2xpY3kpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA0Nzk6XFx0XFx0VEVTVFBBR0VGTEFHKHVuYW1lLCBsbmFtZSwgcG9saWN5KVxcdFxcdFxcdFxcdFxcXFxcXG4gNDgwOlxcdFxcdFNFVFBBR0VGTEFHKHVuYW1lLCBsbmFtZSwgcG9saWN5KVxcdFxcdFxcdFxcdFxcXFxcXG4gNDgxOlxcdFxcdENMRUFSUEFHRUZMQUcodW5hbWUsIGxuYW1lLCBwb2xpY3kpXFxuIDQ4MjpcXHRcXG4gNDgzOlxcdCNkZWZpbmUgX19QQUdFRkxBRyh1bmFtZSwgbG5hbWUsIHBvbGljeSlcXHRcXHRcXHRcXHRcXFxcXFxuIDQ4NDpcXHRcXHRURVNUUEFHRUZMQUcodW5hbWUsIGxuYW1lLCBwb2xpY3kpXFx0XFx0XFx0XFx0XFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjozNzozNC40NTgwODU0NTVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTc0NTAzNTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29kZSBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGRpZmYgYW5kIGltbWVkaWF0ZWx5IG15IGJyYWluIGZsYWdzIHRoZSBjaGFuZ2UuIFNwZWNpZmljYWxseSwgSSdtIHplcm9pbmcgaW4gb24gdGhlIHNoaWZ0IGZyb20gYFRFU1RQQUdFRkxBR2AgYW5kIGBURVNUU0NGTEFHYCB0byBgRk9MSU9fVEVTVF9GTEFHYCBhbmQgYEZPTElPX1RFU1RfU0VUX0ZMQUdgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRoaXMgbWVhbnMsIGVzcGVjaWFsbHkgYmVjYXVzZSBvZiB0aGUgcmVtb3ZhbCBvZiBQRl9OT19UQUlMLiBJIHJlY29nbml6ZSBgUEZfTk9fVEFJTGAgYXMgYSBmYW1pbGlhciBmbGFnLCBidXQgSSdtIG1vbWVudGFyaWx5IHN0dW1wZWQgb24gYFRFU1RTQ0ZMQUdgLiBNeSByZWZsZXggaXMgdG8ganVtcCBpbnRvIHRoZSBoZWFkZXJzOyBJJ20gcHJldHR5IHN1cmUgSSdsbCBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIGBURVNUU0NGTEFHYCBpbiBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgIG9yIHNvbWV0aGluZyBzaW1pbGFybHkgbmFtZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgRk9MSU9gLWJhc2VkIGFwcHJvYWNoIGlzIHJlYWxseSBkb2luZyB0byB0aGUgcGFnZSBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gdGhlIG9sZGVyIHBhZ2UtZmxhZyBtZWNoYW5pc21zIHRvIGFjY3VyYXRlbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9uIHRoZSB3cml0ZWJhY2sgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA2NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM3OjM2LjYzMjU5MzA0N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2NzgzOTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlRFU1RTQ0ZMQUdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9NDc1PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IFRlc3RDbGVhclBhZ2UjI3VuYW1lKHN0cnVjdCBwYWdlICpwYWdlKVxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTQ4Ny1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo0ODg6I2RlZmluZSBURVNUU0NGTEFHKHVuYW1lLCBsbmFtZSwgcG9saWN5KVxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC00ODktXFx0VEVTVFNFVEZMQUcodW5hbWUsIGxuYW1lLCBwb2xpY3kpXFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9NTM3PXN0YXRpYyBpbmxpbmUgaW50IFRlc3RDbGVhclBhZ2UjI3VuYW1lKHN0cnVjdCBwYWdlICpwYWdlKSB7IHJldHVybiAwOyB9XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC01NDEtXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6NTQyOiNkZWZpbmUgVEVTVFNDRkxBR19GQUxTRSh1bmFtZSwgbG5hbWUpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTU0My1cXHRURVNUU0VURkxBR19GQUxTRSh1bmFtZSwgbG5hbWUpIFRFU1RDTEVBUkZMQUdfRkFMU0UodW5hbWUsIGxuYW1lKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9NTQ3PUZPTElPX0ZMQUcocmVmZXJlbmNlZCwgRk9MSU9fSEVBRF9QQUdFKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNTQ5LVxcdF9fRk9MSU9fU0VUX0ZMQUcocmVmZXJlbmNlZCwgRk9MSU9fSEVBRF9QQUdFKVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjU1MDpQQUdFRkxBRyhEaXJ0eSwgZGlydHksIFBGX0hFQUQpIFRFU1RTQ0ZMQUcoRGlydHksIGRpcnR5LCBQRl9IRUFEKVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTU1MS1cXHRfX0NMRUFSUEFHRUZMQUcoRGlydHksIGRpcnR5LCBQRl9IRUFEKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9NTYyPVBBR0VGTEFHKFBpbm5lZCwgcGlubmVkLCBQRl9OT19DT01QT1VORClcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo1NjM6XFx0VEVTVFNDRkxBRyhQaW5uZWQsIHBpbm5lZCwgUEZfTk9fQ09NUE9VTkQpXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNTY0LVBBR0VGTEFHKFNhdmVQaW5uZWQsIHNhdmVwaW5uZWQsIFBGX05PX0NPTVBPVU5EKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTY1Mz1QQUdFRkxBRyhIV1BvaXNvbiwgaHdwb2lzb24sIFBGX0FOWSlcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo2NTQ6VEVTVFNDRkxBRyhIV1BvaXNvbiwgaHdwb2lzb24sIFBGX0FOWSlcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC02NTUtI2RlZmluZSBfX1BHX0hXUE9JU09OICgxVUwgXFx1MDAzY1xcdTAwM2MgUEdfaHdwb2lzb24pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD02NTc9UEFHRUZMQUdfRkFMU0UoSFdQb2lzb24sIGh3cG9pc29uKVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjY1ODpURVNUU0NGTEFHX0ZBTFNFKEhXUG9pc29uLCBod3BvaXNvbilcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC02NTktI2RlZmluZSBfX1BHX0hXUE9JU09OIDBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzc6MzYuODA5MzkwNTk0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1ODAxNDc5MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGbGFnIE1hY3JvcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSBgVEVTVFNDRkxBRyh1bmFtZSwgbG5hbWUsIHBvbGljeSlgIGV4cGFuZHMgaW50byBhIGBURVNUU0VURkxBR2AgYW5kIGEgYFRFU1RDTEVBUkZMQUdgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gU28sIGBURVNUU0VURkxBR2AgZ2VuZXJhdGVzIGBGT0xJT19URVNUX1NFVF9GTEFHKGxuYW1lLCBGT0xJT18jI3BvbGljeSlgIGFuZCBgVGVzdFNldFBhZ2UjI3VuYW1lKHN0cnVjdCBwYWdlICpwYWdlKWAsIGFuZCBgVEVTVENMRUFSRkxBR2AgZ2VuZXJhdGVzIGBGT0xJT19URVNUX0NMRUFSX0ZMQUcobG5hbWUsIEZPTElPXyMjcG9saWN5KWAgYWxvbmcgd2l0aCBgVGVzdENsZWFyUGFnZSMjdW5hbWUoc3RydWN0IHBhZ2UgKnBhZ2UpYC4gV2UgYWxzbyBoYXZlIGBURVNUUEFHRUZMQUdgLCB3aGljaCBkZWZpbmVzIGBGT0xJT19URVNUX0ZMQUcobG5hbWUsIEZPTElPXyMjcG9saWN5KWAgYW5kIGBQYWdlIyN1bmFtZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlgLlxuXG5Ob3csIHdpdGggdGhpcyBzcGVjaWZpYyBwYXRjaCwgaXQgbG9va3MgbGlrZSB0aGV5J3ZlIHJlcGxhY2VkIGBURVNUUEFHRUZMQUcoV3JpdGViYWNrLCB3cml0ZWJhY2ssIFBGX05PX1RBSUwpYCBhbmQgYFRFU1RTQ0ZMQUcoV3JpdGViYWNrLCB3cml0ZWJhY2ssIFBGX05PX1RBSUwpYCB3aXRoIGBGT0xJT19URVNUX0ZMQUcod3JpdGViYWNrLCBGT0xJT19IRUFEX1BBR0UpYCBhbmQgYEZPTElPX1RFU1RfU0VUX0ZMQUcod3JpdGViYWNrLCBGT0xJT19IRUFEX1BBR0UpYC4gSG1tLCB0aGF0J3MgYSBzaWduaWZpY2FudCBjaGFuZ2UuXG5cbldoYXQgd2FzIHJlbW92ZWQ/IFdlbGwsIGNsZWFybHkgd2UgbG9zdCBgUGFnZVdyaXRlYmFjayhwYWdlKWAsIGBUZXN0U2V0UGFnZVdyaXRlYmFjayhwYWdlKWAsIGBUZXN0Q2xlYXJQYWdlV3JpdGViYWNrKHBhZ2UpYCBhbmQgYWxzbyBgZm9saW9fdGVzdF9jbGVhcl93cml0ZWJhY2soZm9saW8pYC4gQnV0IHdoeT8gR2l2ZW4gdGhhdCBgVEVTVFNDRkxBR2AgaW5jbHVkZWQgYSBgVEVTVENMRUFSRkxBR2AsIHRoYXQgZnVuY3Rpb24gd2FzIHJlbW92ZWQgd2hlbiBpdCB3YXMgbm8gbG9uZ2VyIHVzZWQuIFRoaXMgbWVhbnMgdGhhdCB0aGVzZSBvbGRlciBmdW5jdGlvbnMgbWlnaHQgaGF2ZSBiZWVuIGNvbXBsZXRlbHkgZWxpbWluYXRlZCBiZWNhdXNlIHRoZXkgYXJlIG5vIGxvbmdlciBuZWNlc3NhcnksIG9yIG1vcmUgbGlrZWx5LCBiZWNhdXNlIHRoZXkgYXJlIG1hZGUgcmVkdW5kYW50IGJ5IGRpcmVjdCBhY2Nlc3MgdG8gdGhlIGBmb2xpb2Agb2JqZWN0LlxuXG5UbyBmdWxseSB1bmRlcnN0YW5kIHRoZSAqd2h5KiwgSSByZWFsbHkgbmVlZCB0byBjaGVjayB0aGUgY29tbWl0IGxvZy4gSSBzaG91bGQgZ28gbG9vayBmb3IgdGhlIGNvbW1pdCBtZXNzYWdlIGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4gSXQncyBsaWtlbHkgdGhlIGFuc3dlciBpcyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA2OCwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjozNzo0MC4zODk1NTE3NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc2MzMzNTk1MywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUGFnZVdyaXRlYmFja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzc6NDQuMTUyODk5OTIzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyOTkyNzQwMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqRmluZGluZyB0aGUgV3JpdGViYWNrIEZsYWcncyBGb290cHJpbnQqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSB0aGUgd3JpdGViYWNrIG1lY2hhbmlzbSwgYW5kIEkndmUgaGl0IGEgc25hZy4gVGhlIGZ1bmN0aW9uIGBQYWdlV3JpdGViYWNrYOKAlHRoZSBvbmUgdGhhdCdzIHN1cHBvc2VkIHRvIGhhbmRsZSwgb3IgYXQgbGVhc3Qgc2lnbmFsLCB0aGUgd3JpdGViYWNrIHN0YXRl4oCUaXNuJ3Qgc2hvd2luZyB1cCBpbiBhbnkgb2YgdGhlIHN5bWJvbCB0YWJsZXMuIFRoYXQncyBpbW1lZGlhdGVseSBzdXNwaWNpb3VzLiBUaGlzIGxpa2VseSBtZWFucyBpdCBpc24ndCBhIGRpcmVjdCBleHBvcnRlZCBmdW5jdGlvbiwgb3IgaXQgbWlnaHQgYmUgcmVuYW1lZCBhdCBjb21waWxlIHRpbWUsIG9yIEknbSBzaW1wbHkgbG9va2luZyBpbiB0aGUgd3JvbmcgcGxhY2UuXG5cbkdpdmVuIHRoYXQgYFBhZ2VXcml0ZWJhY2tgIGlzIGEgZnVuZGFtZW50YWwgY29uY2VwdCwgSSBzaG91bGQgaGF2ZSBzZWVuIHNvbWV0aGluZy4gT2theSwgbGV0J3MgYmFjayB1cCBhIHN0ZXAuIENvdWxkIGl0IGJlIGEgcmVsYXRlZCBmdW5jdGlvbiBvciBhIG1hY3JvPyBMZXQncyB0cnkgbG9va2luZyBmb3IgZnVuY3Rpb24gbmFtZXMgdGhhdCBzZWVtIHJlbGF0ZWQgdG8gdGhlIHdyaXRlYmFjayBmdW5jdGlvbmFsaXR5LCBuYW1lcyB0aGF0IGNvdWxkIGludGVyYWN0IHdpdGggdGhlIHdyaXRlYmFjayBmbGFnLiBgVGVzdFNldFBhZ2VXcml0ZWJhY2tgIGFuZCBgVGVzdENsZWFyUGFnZVdyaXRlYmFja2AgaW1tZWRpYXRlbHkgY29tZSB0byBtaW5kLiBUaGVzZSBmdW5jdGlvbnMgd291bGQgYmUgdGhlIG9wZXJhdGlvbnMgcmVsYXRlZCB0byBxdWVyeWluZyBhbmQgdXBkYXRpbmcgYSBmbGFnLiBJdCdzIGxpa2VseSB0aGF0IGBQYWdlV3JpdGViYWNrYCdzIHdvcmsgaXMgaGFuZGxlZCBieSB0aGVzZS4gSXQgbWlnaHQgYmUgYSBtYWNybywgb3Igc29tZXRoaW5nIHRoYXQgaXMgaW5saW5lZCwgb3Igc29tZSBvdGhlciBwaWVjZSBvZiBtYWdpYyB0aGUga2VybmVsIGNhbiBkbyEgTGV0J3MgZm9sbG93IHRob3NlIGJyZWFkY3J1bWJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODcyLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzc6NDYuNDUyMTc3MjYyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDkzMzQyODk3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJUZXN0KFNldHxDbGVhcilQYWdlV3JpdGViYWNrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjozNzo1MC41NDU1Mjk0MzlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA0MjI3NDc3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gV3JpdGViYWNrIFRlc3RzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHdyaXRlYmFjayBmdW5jdGlvbmFsaXR5LCBzcGVjaWZpY2FsbHkgaW4gdGhlIGNvbnRleHQgb2Ygb3VyIGZvbGlvIHN5c3RlbS4gSSdtIGhpdHRpbmcgYSBzbmFnIG9yIG5lZWQgdG8gY2xhcmlmeSBzb21ldGhpbmcuIE15IG1pbmQgaXMgaW1tZWRpYXRlbHkgZHJhd24gdG8gdGhvc2UgdGVzdCBmdW5jdGlvbnM6IGBmb2xpb190ZXN0X3dyaXRlYmFja2AgYW5kIGBmb2xpb190ZXN0X3NldF93cml0ZWJhY2tgLiBJdCdzIGxpa2VseSB0aGV5J3JlIGNyaXRpY2FsIGZvciB2YWxpZGF0aW5nIHRoZSB3cml0ZWJhY2sgbWVjaGFuaXNtLCBidXQgdGhlIGV4YWN0IGZsb3cgYW5kIGludGVyYWN0aW9ucyB0aGVzZSBmdW5jdGlvbnMgcmVwcmVzZW50IG5lZWQgZnVydGhlciBpbnZlc3RpZ2F0aW9uLCBzcGVjaWZpY2FsbHkgaG93IHRoZXkgYXJlIHVzZWQsIHdoYXQgdGhleSB0ZXN0LCBhbmQgaG93IHRoZSByZXN1bHRzIGNhbiBiZSB2ZXJpZmllZCBhbmQgaW50ZXJwcmV0ZWQuIFVuZGVyc3RhbmRpbmcgdGhlIG51YW5jZXMgb2YgdGhlc2UgZnVuY3Rpb25zIGlzIGtleSB0byBncmFzcGluZyB0aGUgaW50ZWdyaXR5IG9mIHRoZSB3cml0ZWJhY2sgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTIzMywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM3OjUyLjU4NzgwOTQyM1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM1OTQ0NTAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmb2xpb190ZXN0X3NldF93cml0ZWJhY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZS13cml0ZWJhY2suYz0yOTg5PXZvaWQgX19mb2xpb19zdGFydF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBrZWVwX3dyaXRlKVxcbi0tXFxubW0vcGFnZS13cml0ZWJhY2suYy0zMDA2LVxcdFxcdHhhc19sb2FkKFxcdTAwMjZ4YXMpO1xcbm1tL3BhZ2Utd3JpdGViYWNrLmM6MzAwNzpcXHRcXHRmb2xpb190ZXN0X3NldF93cml0ZWJhY2soZm9saW8pO1xcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMzAwOC1cXG4tLVxcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMzAzMC1cXHR9IGVsc2Uge1xcbm1tL3BhZ2Utd3JpdGViYWNrLmM6MzAzMTpcXHRcXHRmb2xpb190ZXN0X3NldF93cml0ZWJhY2soZm9saW8pO1xcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMzAzMi1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM3OjU1Ljk0NzI2MjY2M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTU4MDY0NTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgZm9saW9fdGVzdF9jbGVhcl93cml0ZWJhY2tgKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gaXQuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHdpdGggYGZvbGlvX3Rlc3RfY2xlYXJfd3JpdGViYWNrYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbmFsaXR5IGluc2lkZSBhbmQgb3V0LiBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIHRob3JvdWdoIGNoZWNrIOKAkyBkaXNzZWN0IHRoZSBjb2RlLCBpZGVudGlmeSB0aGUgcHVycG9zZSBvZiB0aGlzIGNvbXBvbmVudCwgYW5kIGRldGVybWluZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4gSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgaXNzdWVzLCBib3R0bGVuZWNrcywgb3IgYXJlYXMgd2hlcmUgb3B0aW1pemF0aW9uIGNvdWxkIGJlIGJlbmVmaWNpYWwuIE15IGdvYWwgaXMgdG8gYWNoaWV2ZSBhIGRlZXAgYW5kIG51YW5jZWQgdW5kZXJzdGFuZGluZyBvZiBpdHMgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2MDksIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjozNzo1OC4xMDUzMzExMzVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMDQ0NDk3ODMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX3Rlc3RfY2xlYXJfd3JpdGViYWNrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjozODowMS4zMDk3OTU1MThaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzQzMjQ1MjQ3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBLZXJuZWwgUGFnZSBGbGFnIEFic3RyYWN0aW9uIFJlZmFjdG9yaW5nKipcblxuT2theSwgc28gYGZvbGlvX3Rlc3RfY2xlYXJfd3JpdGViYWNrYCB3YXMgdW51c2VkLCB0aGF0J3MgZ29vZCB0byBrbm93LiBOb3csIGxvb2tpbmcgYXQgYGZvbGlvX3Rlc3Rfd3JpdGViYWNrYCBhbmQgYGZvbGlvX3Rlc3Rfc2V0X3dyaXRlYmFja2AsIHRob3NlIGFyZSBkaXJlY3QgZm9saW8gaGVscGVycyBmb3IgdGVzdGluZyBhbmQgc2V0dGluZyB0aGUgYFBHX3dyaXRlYmFja2AgZmxhZy4gSW50ZXJlc3RpbmdseSwgYEZPTElPX1RFU1RfRkxBRyh3cml0ZWJhY2ssIEZPTElPX0hFQURfUEFHRSlgIGFuZCBgRk9MSU9fVEVTVF9TRVRfRkxBRyh3cml0ZWJhY2ssIEZPTElPX0hFQURfUEFHRSlgIHNlZW0gdG8gbWlycm9yIGBURVNUUEFHRUZMQUcoV3JpdGViYWNrLCB3cml0ZWJhY2ssIFBGX05PX1RBSUwpYCBhbmQgYFRFU1RTQ0ZMQUcoV3JpdGViYWNrLCB3cml0ZWJhY2ssIFBGX05PX1RBSUwpYC5cblxuTGV0IG1lIGNoZWNrIGhvdyBgVEVTVFBBR0VGTEFHYCBleHBhbmRzLiBJdCdzIGVzc2VudGlhbGx5IGNhbGxpbmcgYEZPTElPX1RFU1RfRkxBR2AsIGFuZCB0aGVuIGNhbGxpbmcgYSBzdGF0aWMgZnVuY3Rpb24gd2l0aCBgdGVzdF9iaXRgIG9uIHRoZSByZWxldmFudCBmbGFnLiBgRk9MSU9fUEZfTk9fVEFJTGAgaXMgZGVmaW5lZCBhcyAwLCBhbmQgYEZPTElPX0hFQURfUEFHRWAgaXMgYWxzbyAwLlxuXG5TbywgYEZPTElPX1RFU1RfRkxBRyh3cml0ZWJhY2ssIEZPTElPX0hFQURfUEFHRSlgIHJlc29sdmVzIHRvIGB0ZXN0X2JpdChQR193cml0ZWJhY2ssIGNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSlgLCB3aGljaCBpcyBpZGVudGljYWwgdG8gd2hhdCBgVEVTVFBBR0VGTEFHKFdyaXRlYmFjaywgd3JpdGViYWNrLCBQRl9OT19UQUlMKWAgY3JlYXRlcy4gVGhlIHNhbWUgaG9sZHMgdHJ1ZSBmb3IgYGZvbGlvX3Rlc3Rfc2V0X3dyaXRlYmFja2AgYW5kIGBURVNUU0VURkxBR2AuXG5cblRoZXJlZm9yZSwgdGhlIHBhZ2UtYmFzZWQgaGVscGVycyBsaWtlIGBQYWdlV3JpdGViYWNrYCwgYFRlc3RTZXRQYWdlV3JpdGViYWNrYCwgZXRjLiBhcmUgYmVpbmcgcmVtb3ZlZCBiZWNhdXNlIHRoZXkgYXJlIG5vIGxvbmdlciBuZWVkZWQsIGJlY2F1c2UgdGhlIGZvbGlvIHZlcnNpb24gaXMgaWRlbnRpY2FsLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIGZ1enppbmcgZ3VpZGVsaW5lcy4gV2UndmUgZ290IHRvIGJlIGNhcmVmdWwgYW5kIG5vdCBibGluZGx5IHRydXN0IGNsYWltcyBvZiBcIm5vIGZ1bmN0aW9uYWwgY2hhbmdlXCIgb3IgXCJyZWZhY3RvcmluZy5cIiBUaGUgZ3VpZGVsaW5lcyBzYXkgYW55IHJlZmFjdG9yaW5nIG9mIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgbXVzdCBiZSBmdXp6ZWQuXG5cbkxvb2tpbmcgYXQgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhLCBkb2VzIHRoaXMgZmFsbCBpbnRvIGFueSBvZiB0aG9zZSBjYXRlZ29yaWVzPyBJdCdzIG5vdCBkb2N1bWVudGF0aW9uLCBhIHVzZXItc3BhY2UgY2hhbmdlLCBkZWNvcmF0aXZlIGxvZ2dpbmcsIG9yIGEgYnVpbGQgc3lzdGVtIGNoYW5nZSB0aGF0IGRvZXNuJ3QgYWZmZWN0IEMgbG9naWMuIEl0J3Mgbm90IHVucmVhY2hhYmxlIGhhcmR3YXJlIG9yIGNvZGUuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgcG9zaXRpdmUgY3JpdGVyaWEuIFRoaXMgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgKGBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaGApLCBpdCByZXN0cnVjdHVyZXMgZm9saW8gZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmbGFnIGFic3RyYWN0aW9ucy4gU28sIHRoaXMgZGVmaW5pdGVseSBmYWxscyBpbnRvIHRoZSBjYXRlZ29yeSBvZiBcInJlZmFjdG9yaW5ncyBhbmQgY29kZSBjbGVhbnVwcyB0aGF0IHJlc3RydWN0dXJlIGRhdGEgc3RydWN0dXJlcy5cIiBUaGlzIGlzIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2UuXG5cblNvIGBXb3J0aEZ1enppbmdgIG11c3QgYmUgYHRydWVgLlxuXG5Ob3cgbGV0J3MgZGV0ZXJtaW5lIHRoZSBjb25maWd1cmF0aW9ucyBhbmQgZm9jdXMgc3ltYm9scy4gSXQncyBlc3NlbnRpYWwgdGhhdCB3ZSBkbyB0aGlzIHJpZ2h0LiBJIG5lZWQgdG8gc3RhcnQgZmlndXJpbmcgb3V0IHdoaWNoIGNvbmZpZ3VyYXRpb25zIGFyZSBtb3N0IHJlbGV2YW50IGFuZCBpZGVudGlmeSBhbnkgbm9uLXViaXF1aXRvdXMgZnVuY3Rpb25zIHRoYXQgYXJlIG1vZGlmaWVkLiBUbyBoZWxwIHdpdGggdGhhdCBJIHNob3VsZCBsb29rIGF0IGBmb2xpb190ZXN0X3dyaXRlYmFja2AgY2FsbGVycyBhY3Jvc3MgdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTgwNSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzg6MDguNzQyMjUxNzQ1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTE3MDMxMjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX3Rlc3Rfd3JpdGViYWNrXFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL2tlcm5lbC91di5jPTMxNj1pbnQgX19tYWtlX2ZvbGlvX3NlY3VyZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgdXZfY2JfaGVhZGVyICp1dmNiKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTMxOS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6MzIwOlxcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTMyMS1cXHRcXHRyZXR1cm4gLUVCVVNZO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYmFja3VwLmM9MTAzPXR0bV9iYWNrdXBfYmFja3VwX2ZvbGlvKHN0cnVjdCBmaWxlICpiYWNrdXAsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iYWNrdXAuYy0xNjMtXFx0XFx0cmV0ID0gc2htZW1fd3JpdGVfZm9saW8odG9fZm9saW8pO1xcbmRyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JhY2t1cC5jOjE2NDpcXHRcXHRcXHRpZiAoIWZvbGlvX3Rlc3Rfd3JpdGViYWNrKHRvX2ZvbGlvKSlcXG5kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iYWNrdXAuYy0xNjUtXFx0XFx0XFx0XFx0Zm9saW9fY2xlYXJfcmVjbGFpbSh0b19mb2xpbyk7XFxuLS1cXG5mcy9haW8uYz00NjA9c3RhdGljIGludCBhaW9fbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpkc3QsXFxuLS1cXG5mcy9haW8uYy00OTctXFx0LyogV3JpdGViYWNrIG11c3QgYmUgY29tcGxldGUgKi9cXG5mcy9haW8uYzo0OTg6XFx0QlVHX09OKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKHNyYykpO1xcbmZzL2Fpby5jLTQ5OS1cXHRmb2xpb19nZXQoZHN0KTtcXG4tLVxcbmZzL2J0cmZzL2Rpc2staW8uYz00ODQ9c3RhdGljIGJvb2wgYnRyZWVfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnBfZmxhZ3MpXFxuZnMvYnRyZnMvZGlzay1pby5jLTQ4NS17XFxuZnMvYnRyZnMvZGlzay1pby5jOjQ4NjpcXHRpZiAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pIHx8IGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKVxcbmZzL2J0cmZzL2Rpc2staW8uYy00ODctXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuZnMvYnRyZnMvZXh0ZW50X2lvLmM9OTcxPXZvaWQgY2xlYXJfZm9saW9fZXh0ZW50X21hcHBlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuZnMvYnRyZnMvZXh0ZW50X2lvLmMtOTg1LVxcdEFTU0VSVCghZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpO1xcbmZzL2J0cmZzL2V4dGVudF9pby5jOjk4NjpcXHRBU1NFUlQoIWZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSk7XFxuZnMvYnRyZnMvZXh0ZW50X2lvLmMtOTg3LVxcbi0tXFxuZnMvYnRyZnMvZXh0ZW50X2lvLmM9MTgxNz1zdGF0aWMgaW50IHN1Ym1pdF9vbmVfc2VjdG9yKHN0cnVjdCBidHJmc19pbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9idHJmcy9leHRlbnRfaW8uYy0xODkyLVxcdCAqL1xcbmZzL2J0cmZzL2V4dGVudF9pby5jOjE4OTM6XFx0QVNTRVJUKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSk7XFxuZnMvYnRyZnMvZXh0ZW50X2lvLmMtMTg5NC1cXG4tLVxcbmZzL2J0cmZzL2V4dGVudF9pby5jPTI3MTY9c3RhdGljIGludCBleHRlbnRfd3JpdGVfY2FjaGVfcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5mcy9idHJmcy9leHRlbnRfaW8uYy0yODI5LVxcdFxcdFxcdCAgICBidHJmc19pc19zdWJwYWdlKGlub2RlX3RvX2ZzX2luZm8oaW5vZGUpLCBmb2xpbykpIHtcXG5mcy9idHJmcy9leHRlbnRfaW8uYzoyODMwOlxcdFxcdFxcdFxcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpXFxuZnMvYnRyZnMvZXh0ZW50X2lvLmMtMjgzMS1cXHRcXHRcXHRcXHRcXHRzdWJtaXRfd3JpdGVfYmlvKGJpb19jdHJsLCAwKTtcXG4tLVxcbmZzL2J0cmZzL2V4dGVudF9pby5jLTI4MzQtXFxuZnMvYnRyZnMvZXh0ZW50X2lvLmM6MjgzNTpcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pIHx8XFxuZnMvYnRyZnMvZXh0ZW50X2lvLmMtMjgzNi1cXHRcXHRcXHQgICAgIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKSB7XFxuLS1cXG5mcy9idHJmcy9leHRlbnRfaW8uYz0zMTY1PXN0YXRpYyB2b2lkIGRldGFjaF9leHRlbnRfYnVmZmVyX2ZvbGlvKGNvbnN0IHN0cnVjdCBleHRlbnRfYnVmZmVyICplYiwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmZzL2J0cmZzL2V4dGVudF9pby5jLTMxOTMtXFx0XFx0XFx0QlVHX09OKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKTtcXG5mcy9idHJmcy9leHRlbnRfaW8uYzozMTk0OlxcdFxcdFxcdEJVR19PTihmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpO1xcbmZzL2J0cmZzL2V4dGVudF9pby5jLTMxOTUtXFx0XFx0XFx0LyogV2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgaGF2ZW4ndCBiZSBhdHRhY2hlZCB0byBhIG5ldyBlYi4gKi9cXG4tLVxcbmZzL2J0cmZzL2lub2RlLmM9NzY0Nz1zdGF0aWMgYm9vbCBidHJmc19yZWxlYXNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcF9mbGFncylcXG5mcy9idHJmcy9pbm9kZS5jLTc2NDgte1xcbmZzL2J0cmZzL2lub2RlLmM6NzY0OTpcXHRpZiAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pIHx8IGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKVxcbmZzL2J0cmZzL2lub2RlLmMtNzY1MC1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5mcy9idHJmcy9zdWJwYWdlLmM9NDU2PXZvaWQgYnRyZnNfc3VicGFnZV9zZXRfd3JpdGViYWNrKGNvbnN0IHN0cnVjdCBidHJmc19mc19pbmZvICpmc19pbmZvLFxcbi0tXFxuZnMvYnRyZnMvc3VicGFnZS5jLTQ3NS1cXHQgKi9cXG5mcy9idHJmcy9zdWJwYWdlLmM6NDc2OlxcdGlmICghZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKVxcbmZzL2J0cmZzL3N1YnBhZ2UuYy00NzctXFx0XFx0X19mb2xpb19zdGFydF93cml0ZWJhY2soZm9saW8sIHRydWUpO1xcbi0tXFxuZnMvYnRyZnMvc3VicGFnZS5jPTQ4Mz12b2lkIGJ0cmZzX3N1YnBhZ2VfY2xlYXJfd3JpdGViYWNrKGNvbnN0IHN0cnVjdCBidHJmc19mc19pbmZvICpmc19pbmZvLFxcbi0tXFxuZnMvYnRyZnMvc3VicGFnZS5jLTQ5My1cXHRpZiAoc3VicGFnZV90ZXN0X2JpdG1hcF9hbGxfemVybyhmc19pbmZvLCBmb2xpbywgd3JpdGViYWNrKSkge1xcbmZzL2J0cmZzL3N1YnBhZ2UuYzo0OTQ6XFx0XFx0QVNTRVJUKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSk7XFxuZnMvYnRyZnMvc3VicGFnZS5jLTQ5NS1cXHRcXHRmb2xpb19lbmRfd3JpdGViYWNrKGZvbGlvKTtcXG4tLVxcbmZzL2J1ZmZlci5jPTgzPXZvaWQgYnVmZmVyX2NoZWNrX2RpcnR5X3dyaXRlYmFjayhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxuZnMvYnVmZmVyLmMtOTUtXFxuZnMvYnVmZmVyLmM6OTY6XFx0aWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSlcXG5mcy9idWZmZXIuYy05Ny1cXHRcXHQqd3JpdGViYWNrID0gdHJ1ZTtcXG4tLVxcbmZzL2J1ZmZlci5jPTE3MjE9aW50IF9fYmxvY2tfd3JpdGVfZnVsbF9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxuZnMvYnVmZmVyLmMtMTgxMC1cXHQgKi9cXG5mcy9idWZmZXIuYzoxODExOlxcdEJVR19PTihmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpO1xcbmZzL2J1ZmZlci5jLTE4MTItXFx0Zm9saW9fc3RhcnRfd3JpdGViYWNrKGZvbGlvKTtcXG4tLVxcbmZzL2J1ZmZlci5jLTE4NjQtXFx0fSB3aGlsZSAoKGJoID0gYmgtXFx1MDAzZWJfdGhpc19wYWdlKSAhPSBoZWFkKTtcXG5mcy9idWZmZXIuYzoxODY1OlxcdEJVR19PTihmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpO1xcbmZzL2J1ZmZlci5jLTE4NjYtXFx0bWFwcGluZ19zZXRfZXJyb3IoZm9saW8tXFx1MDAzZW1hcHBpbmcsIGVycik7XFxuLS1cXG5mcy9idWZmZXIuYz0yNzg0PWJvb2wgdHJ5X3RvX2ZyZWVfYnVmZmVycyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuZnMvYnVmZmVyLmMtMjc5MC1cXHRCVUdfT04oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSk7XFxuZnMvYnVmZmVyLmM6Mjc5MTpcXHRpZiAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKVxcbmZzL2J1ZmZlci5jLTI3OTItXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuZnMvY2VwaC9hZGRyLmM9MTMxMT12b2lkIGNlcGhfcHJvY2Vzc19mb2xpb19iYXRjaChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL2NlcGgvYWRkci5jLTEzMjktXFx0XFx0XFx0XFxcImZvbGlvX3Rlc3RfZGlydHkgJSN4LCBmb2xpb190ZXN0X2xvY2tlZCAlI3hcXFxcblxcXCIsXFxuZnMvY2VwaC9hZGRyLmM6MTMzMDpcXHRcXHRcXHRmb2xpbywgZm9saW8tXFx1MDAzZWluZGV4LCBmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksXFxuZnMvY2VwaC9hZGRyLmMtMTMzMS1cXHRcXHRcXHRmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSxcXG4tLVxcbmZzL2NlcGgvYWRkci5jLTEzMzMtXFxuZnMvY2VwaC9hZGRyLmM6MTMzNDpcXHRcXHRpZiAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pIHx8XFxuZnMvY2VwaC9hZGRyLmMtMTMzNS1cXHRcXHQgICAgZm9saW9fdGVzdF9wcml2YXRlXzIoZm9saW8pIC8qIFtERVBSRUNBVEVEXSAqLykge1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTE3MDY9c3RhdGljIHZvaWQgbXBhZ2VfcmVsZWFzZV91bnVzZWRfcGFnZXMoc3RydWN0IG1wYWdlX2RhX2RhdGEgKm1wZCxcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy0xNzQ4LVxcdFxcdFxcdEJVR19PTighZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pKTtcXG5mcy9leHQ0L2lub2RlLmM6MTc0OTpcXHRcXHRcXHRCVUdfT04oZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKTtcXG5mcy9leHQ0L2lub2RlLmMtMTc1MC1cXHRcXHRcXHRpZiAoaW52YWxpZGF0ZSkge1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTI2MDg9c3RhdGljIGludCBtcGFnZV9wcmVwYXJlX2V4dGVudF90b19tYXAoc3RydWN0IG1wYWdlX2RhX2RhdGEgKm1wZClcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy0yNjc0LVxcdFxcdFxcdCAqL1xcbmZzL2V4dDQvaW5vZGUuYzoyNjc1OlxcdFxcdFxcdGlmICgoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuZnMvZXh0NC9pbm9kZS5jLTI2NzYtXFx0XFx0XFx0ICAgIG1wZC1cXHUwMDNld2JjLVxcdTAwM2VzeW5jX21vZGUgPT0gV0JfU1lOQ19OT05FKSB8fFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTI2ODYtXFx0XFx0XFx0aWYgKCFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSkge1xcbmZzL2V4dDQvaW5vZGUuYzoyNjg3OlxcdFxcdFxcdFxcdGlmICghZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKSB7XFxuZnMvZXh0NC9pbm9kZS5jLTI2ODgtXFx0XFx0XFx0XFx0XFx0X19mb2xpb19zdGFydF93cml0ZWJhY2soZm9saW8sIGZhbHNlKTtcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy0yNjk1LVxcdFxcdFxcdGZvbGlvX3dhaXRfd3JpdGViYWNrKGZvbGlvKTtcXG5mcy9leHQ0L2lub2RlLmM6MjY5NjpcXHRcXHRcXHRCVUdfT04oZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKTtcXG5mcy9leHQ0L2lub2RlLmMtMjY5Ny1cXG4tLVxcbmZzL2V4dDQvbW92ZV9leHRlbnQuYz0xMTc9c3RhdGljIGludCBtZXh0X2ZvbGlvX21rdXB0b2RhdGUoc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IGZyb20sIHNpemVfdCB0bylcXG4tLVxcbmZzL2V4dDQvbW92ZV9leHRlbnQuYy0xMjYtXFx0QlVHX09OKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbykpO1xcbmZzL2V4dDQvbW92ZV9leHRlbnQuYzoxMjc6XFx0QlVHX09OKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSk7XFxuZnMvZXh0NC9tb3ZlX2V4dGVudC5jLTEyOC1cXG4tLVxcbmZzL2V4dDQvcGFnZS1pby5jPTQ2Mj12b2lkIGV4dDRfYmlvX3dyaXRlX2ZvbGlvKHN0cnVjdCBleHQ0X2lvX3N1Ym1pdCAqaW8sIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5mcy9leHQ0L3BhZ2UtaW8uYy00NzItXFx0QlVHX09OKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbykpO1xcbmZzL2V4dDQvcGFnZS1pby5jOjQ3MzpcXHRCVUdfT04oZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKTtcXG5mcy9leHQ0L3BhZ2UtaW8uYy00NzQtXFxuLS1cXG5mcy9mMmZzL2NvbXByZXNzLmM9MTA1Mj1zdGF0aWMgdm9pZCBjYW5jZWxfY2x1c3Rlcl93cml0ZWJhY2soc3RydWN0IGNvbXByZXNzX2N0eCAqY2MsXFxuLS1cXG5mcy9mMmZzL2NvbXByZXNzLmMtMTA3MS1cXHRcXHRjbGVhcl9wYWdlX3ByaXZhdGVfZ2NpbmcoY2MtXFx1MDAzZXJwYWdlc1tpXSk7XFxuZnMvZjJmcy9jb21wcmVzcy5jOjEwNzI6XFx0XFx0aWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKHBhZ2VfZm9saW8oY2MtXFx1MDAzZXJwYWdlc1tpXSkpKVxcbmZzL2YyZnMvY29tcHJlc3MuYy0xMDczLVxcdFxcdFxcdGVuZF9wYWdlX3dyaXRlYmFjayhjYy1cXHUwMDNlcnBhZ2VzW2ldKTtcXG4tLVxcbmZzL2YyZnMvY29tcHJlc3MuYz0xNDk2PXN0YXRpYyBpbnQgZjJmc193cml0ZV9yYXdfcGFnZXMoc3RydWN0IGNvbXByZXNzX2N0eCAqY2MsXFxuLS1cXG5mcy9mMmZzL2NvbXByZXNzLmMtMTU0MS1cXG5mcy9mMmZzL2NvbXByZXNzLmM6MTU0MjpcXHRcXHRpZiAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKSB7XFxuZnMvZjJmcy9jb21wcmVzcy5jLTE1NDMtXFx0XFx0XFx0aWYgKHdiYy1cXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfTk9ORSlcXG4tLVxcbmZzL2YyZnMvZGF0YS5jPTMyMjg9c3RhdGljIGludCBmMmZzX3dyaXRlX2NhY2hlX3BhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvZjJmcy9kYXRhLmMtMzQwOS1cXG5mcy9mMmZzL2RhdGEuYzozNDEwOlxcdFxcdFxcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpIHtcXG5mcy9mMmZzL2RhdGEuYy0zNDExLVxcdFxcdFxcdFxcdGlmICh3YmMtXFx1MDAzZXN5bmNfbW9kZSA9PSBXQl9TWU5DX05PTkUpXFxuLS1cXG5mcy9mMmZzL2YyZnMuaD01MTk5PXN0YXRpYyBpbmxpbmUgdm9pZCBmMmZzX3RydW5jYXRlX21ldGFfaW5vZGVfcGFnZXMoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpLFxcbi0tXFxuZnMvZjJmcy9mMmZzLmgtNTIwOS1cXHRcXHRpZiAoIUlTX0VSUihmb2xpbykpIHtcXG5mcy9mMmZzL2YyZnMuaDo1MjEwOlxcdFxcdFxcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpXFxuZnMvZjJmcy9mMmZzLmgtNTIxMS1cXHRcXHRcXHRcXHRuZWVkX3N1Ym1pdCA9IHRydWU7XFxuLS1cXG5mcy9mMmZzL2djLmM9MTUwMz1zdGF0aWMgaW50IG1vdmVfZGF0YV9wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJsb2NrX3QgYmlkeCwgaW50IGdjX3R5cGUsXFxuLS1cXG5mcy9mMmZzL2djLmMtMTUyMi1cXHRpZiAoZ2NfdHlwZSA9PSBCR19HQykge1xcbmZzL2YyZnMvZ2MuYzoxNTIzOlxcdFxcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpIHtcXG5mcy9mMmZzL2djLmMtMTUyNC1cXHRcXHRcXHRlcnIgPSAtRUFHQUlOO1xcbi0tXFxuZnMvZjJmcy9pbmxpbmUuYz0xNDY9aW50IGYyZnNfY29udmVydF9pbmxpbmVfZm9saW8oc3RydWN0IGRub2RlX29mX2RhdGEgKmRuLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuZnMvZjJmcy9pbmxpbmUuYy0xODYtXFxuZnMvZjJmcy9pbmxpbmUuYzoxODc6XFx0ZjJmc19idWdfb24oRjJGU19GX1NCKGZvbGlvKSwgZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKTtcXG5mcy9mMmZzL2lubGluZS5jLTE4OC1cXG4tLVxcbmZzL2YyZnMvaW5vZGUuYz0xNzM9Ym9vbCBmMmZzX2lub2RlX2Noa3N1bV92ZXJpZnkoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuZnMvZjJmcy9pbm9kZS5jLTE4NS1cXHRcXHRcXHRmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSB8fFxcbmZzL2YyZnMvaW5vZGUuYzoxODY6XFx0XFx0XFx0Zm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKVxcbmZzL2YyZnMvaW5vZGUuYy0xODctI2VuZGlmXFxuLS1cXG5mcy9mMmZzL25vZGUuYz0xODcwPWludCBmMmZzX3dyaXRlX3NpbmdsZV9ub2RlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqbm9kZV9mb2xpbywgaW50IHN5bmNfbW9kZSxcXG4tLVxcbmZzL2YyZnMvbm9kZS5jLTE4ODAtXFx0XFx0Lyogc2V0IHBhZ2UgZGlydHkgYW5kIHdyaXRlIGl0ICovXFxuZnMvZjJmcy9ub2RlLmM6MTg4MTpcXHRcXHRpZiAoIWZvbGlvX3Rlc3Rfd3JpdGViYWNrKG5vZGVfZm9saW8pKVxcbmZzL2YyZnMvbm9kZS5jLTE4ODItXFx0XFx0XFx0Zm9saW9fbWFya19kaXJ0eShub2RlX2ZvbGlvKTtcXG4tLVxcbmZzL2YyZnMvc2VnbWVudC5jPTQzNTI9dm9pZCBmMmZzX2ZvbGlvX3dhaXRfd3JpdGViYWNrKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gcGFnZV90eXBlIHR5cGUsXFxuLS1cXG5mcy9mMmZzL3NlZ21lbnQuYy00MzU0LXtcXG5mcy9mMmZzL3NlZ21lbnQuYzo0MzU1OlxcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpIHtcXG5mcy9mMmZzL3NlZ21lbnQuYy00MzU2LVxcdFxcdHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSA9IEYyRlNfRl9TQihmb2xpbyk7XFxuLS1cXG5mcy9mMmZzL3NlZ21lbnQuYy00MzYzLVxcdFxcdFxcdGZvbGlvX3dhaXRfd3JpdGViYWNrKGZvbGlvKTtcXG5mcy9mMmZzL3NlZ21lbnQuYzo0MzY0OlxcdFxcdFxcdGYyZnNfYnVnX29uKHNiaSwgbG9ja2VkIFxcdTAwMjZcXHUwMDI2IGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSk7XFxuZnMvZjJmcy9zZWdtZW50LmMtNDM2NS1cXHRcXHR9IGVsc2Uge1xcbi0tXFxuZnMvZnMtd3JpdGViYWNrLmM9NDA1PXN0YXRpYyBib29sIGlub2RlX2RvX3N3aXRjaF93YnMoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2ZzLXdyaXRlYmFjay5jLTQ0NS1cXHRcXHRsb25nIG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbmZzL2ZzLXdyaXRlYmFjay5jOjQ0NjpcXHRcXHRXQVJOX09OX09OQ0UoIWZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSk7XFxuZnMvZnMtd3JpdGViYWNrLmMtNDQ3LVxcdFxcdHdiX3N0YXRfbW9kKG9sZF93YiwgV0JfV1JJVEVCQUNLLCAtbnIpO1xcbi0tXFxuZnMvZnVzZS9kZXYuYz0xMTIzPXN0YXRpYyBpbnQgZnVzZV90cnlfbW92ZV9mb2xpbyhzdHJ1Y3QgZnVzZV9jb3B5X3N0YXRlICpjcywgc3RydWN0IGZvbGlvICoqZm9saW9wKVxcbi0tXFxuZnMvZnVzZS9kZXYuYy0xMTcyLVxcdGlmIChXQVJOX09OKGZvbGlvX3Rlc3RfZGlydHkob2xkZm9saW8pIHx8XFxuZnMvZnVzZS9kZXYuYzoxMTczOlxcdFxcdFxcdFxcdGZvbGlvX3Rlc3Rfd3JpdGViYWNrKG9sZGZvbGlvKSkpXFxuZnMvZnVzZS9kZXYuYy0xMTc0LVxcdFxcdGdvdG8gb3V0X2ZhbGxiYWNrX3VubG9jaztcXG4tLVxcbmZzL2dmczIvYW9wcy5jPTE5MT1zdGF0aWMgaW50IGdmczJfd3JpdGVfamRhdGFfYmF0Y2goc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5mcy9nZnMyL2FvcHMuYy0yMjktXFxuZnMvZ2ZzMi9hb3BzLmM6MjMwOlxcdFxcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpIHtcXG5mcy9nZnMyL2FvcHMuYy0yMzEtXFx0XFx0XFx0aWYgKHdiYy1cXHUwMDNlc3luY19tb2RlICE9IFdCX1NZTkNfTk9ORSlcXG4tLVxcbmZzL2dmczIvYW9wcy5jLTIzNi1cXG5mcy9nZnMyL2FvcHMuYzoyMzc6XFx0XFx0QlVHX09OKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSk7XFxuZnMvZ2ZzMi9hb3BzLmMtMjM4LVxcdFxcdGlmICghZm9saW9fY2xlYXJfZGlydHlfZm9yX2lvKGZvbGlvKSlcXG4tLVxcbmZzL2dmczIvbWV0YV9pby5jPTMzPXN0YXRpYyB2b2lkIGdmczJfYXNwYWNlX3dyaXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5mcy9nZnMyL21ldGFfaW8uYy03MS1cXHQgKi9cXG5mcy9nZnMyL21ldGFfaW8uYzo3MjpcXHRCVUdfT04oZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKTtcXG5mcy9nZnMyL21ldGFfaW8uYy03My1cXHRmb2xpb19zdGFydF93cml0ZWJhY2soZm9saW8pO1xcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz04MzE9dm9pZCBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW4pXFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTg0MC1cXHRpZiAob2Zmc2V0ID09IDAgXFx1MDAyNlxcdTAwMjYgbGVuID09IGZvbGlvX3NpemUoZm9saW8pKSB7XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzo4NDE6XFx0XFx0V0FSTl9PTl9PTkNFKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSk7XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy04NDItXFx0XFx0Zm9saW9fY2FuY2VsX2RpcnR5KGZvbGlvKTtcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9MTk4MD1pbnQgaW9tYXBfd3JpdGViYWNrX2ZvbGlvKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE5OTMtXFx0V0FSTl9PTl9PTkNFKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKTtcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjE5OTQ6XFx0V0FSTl9PTl9PTkNFKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSk7XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xOTk1LVxcbi0tXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jPTQyND1zdGF0aWMgaW50IG1ldGFwYWdlX3dyaXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmMtNDQ2LVxcdEJVR19PTighZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pKTtcXG5mcy9qZnMvamZzX21ldGFwYWdlLmM6NDQ3OlxcdEJVR19PTihmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpO1xcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy00NDgtXFx0Zm9saW9fc3RhcnRfd3JpdGViYWNrKGZvbGlvKTtcXG4tLVxcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYz02NjU9c3RhdGljIHZvaWQgbWV0YXBhZ2VfaW52YWxpZGF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LFxcbi0tXFxuZnMvamZzL2pmc19tZXRhcGFnZS5jLTY2OS1cXG5mcy9qZnMvamZzX21ldGFwYWdlLmM6NjcwOlxcdEJVR19PTihmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpO1xcbmZzL2pmcy9qZnNfbWV0YXBhZ2UuYy02NzEtXFxuLS1cXG5mcy9tcGFnZS5jPTQ1Mz1zdGF0aWMgaW50IG1wYWdlX3dyaXRlX2ZvbGlvKHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxuZnMvbXBhZ2UuYy02MTgtXFxuZnMvbXBhZ2UuYzo2MTk6XFx0QlVHX09OKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSk7XFxuZnMvbXBhZ2UuYy02MjAtXFx0Zm9saW9fc3RhcnRfd3JpdGViYWNrKGZvbGlvKTtcXG4tLVxcbmZzL25ldGZzL3dyaXRlX2NvbGxlY3QuYz0xMTQ9c3RhdGljIHZvaWQgbmV0ZnNfd3JpdGViYWNrX3VubG9ja19mb2xpb3Moc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEsXFxuLS1cXG5mcy9uZXRmcy93cml0ZV9jb2xsZWN0LmMtMTQ2LVxcdFxcdGZvbGlvID0gZm9saW9xX2ZvbGlvKGZvbGlvcSwgc2xvdCk7XFxuZnMvbmV0ZnMvd3JpdGVfY29sbGVjdC5jOjE0NzpcXHRcXHRpZiAoV0FSTl9PTkNFKCFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksXFxuZnMvbmV0ZnMvd3JpdGVfY29sbGVjdC5jLTE0OC1cXHRcXHRcXHQgICAgICBcXFwiUj0lMDh4OiBmb2xpbyAlbHggaXMgbm90IHVuZGVyIHdyaXRlYmFja1xcXFxuXFxcIixcXG4tLVxcbmZzL25mcy93cml0ZS5jPTIwNDU9aW50IG5mc193Yl9mb2xpb19yZWNsYWltKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5mcy9uZnMvd3JpdGUuYy0yMDU3LVxcbmZzL25mcy93cml0ZS5jOjIwNTg6XFx0aWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSlcXG5mcy9uZnMvd3JpdGUuYy0yMDU5LVxcdFxcdHJldHVybiAtRUJVU1k7XFxuLS1cXG5mcy9uaWxmczIvcGFnZS5jPTE5Nj1zdGF0aWMgdm9pZCBuaWxmc19jb3B5X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZHN0LCBzdHJ1Y3QgZm9saW8gKnNyYyxcXG4tLVxcbmZzL25pbGZzMi9wYWdlLmMtMjAxLVxcbmZzL25pbGZzMi9wYWdlLmM6MjAyOlxcdEJVR19PTihmb2xpb190ZXN0X3dyaXRlYmFjayhkc3QpKTtcXG5mcy9uaWxmczIvcGFnZS5jLTIwMy1cXG4tLVxcbmZzL25pbGZzMi9zZWdtZW50LmM9MTY4Nj1zdGF0aWMgdm9pZCBuaWxmc19iZWdpbl9mb2xpb19pbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbmZzL25pbGZzMi9zZWdtZW50LmMtMTY4Ny17XFxuZnMvbmlsZnMyL3NlZ21lbnQuYzoxNjg4OlxcdGlmICghZm9saW8gfHwgZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKVxcbmZzL25pbGZzMi9zZWdtZW50LmMtMTY4OS1cXHRcXHQvKlxcbi0tXFxuZnMvbmlsZnMyL3NlZ21lbnQuYz0xNzg3PXN0YXRpYyB2b2lkIG5pbGZzX2VuZF9mb2xpb19pbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZXJyKVxcbi0tXFxuZnMvbmlsZnMyL3NlZ21lbnQuYy0xNzkyLVxcdGlmIChidWZmZXJfbmlsZnNfbm9kZShmb2xpb19idWZmZXJzKGZvbGlvKSkgXFx1MDAyNlxcdTAwMjZcXG5mcy9uaWxmczIvc2VnbWVudC5jOjE3OTM6XFx0XFx0XFx0IWZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkge1xcbmZzL25pbGZzMi9zZWdtZW50LmMtMTc5NC1cXHRcXHQvKlxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jPTMyNjA9c3RhdGljIHZvaWQgZ2F0aGVyX3N0YXRzKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbnVtYV9tYXBzICptZCwgaW50IHB0ZV9kaXJ0eSxcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0zMjgwLVxcbmZzL3Byb2MvdGFza19tbXUuYzozMjgxOlxcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpXFxuZnMvcHJvYy90YXNrX21tdS5jLTMyODItXFx0XFx0bWQtXFx1MDAzZXdyaXRlYmFjayArPSBucl9wYWdlcztcXG4tLVxcbmZzL3ViaWZzL2ZpbGUuYz0xNDU4PXN0YXRpYyBib29sIHViaWZzX3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgdW51c2VkX2dmcF9mbGFncylcXG4tLVxcbmZzL3ViaWZzL2ZpbGUuYy0xNDYyLVxcbmZzL3ViaWZzL2ZpbGUuYzoxNDYzOlxcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpXFxuZnMvdWJpZnMvZmlsZS5jLTE0NjQtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD0yMjE9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydV9nZW5fZm9saW9fc2VxKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMjQ2LVxcdFxcdCAoZm9saW9fdGVzdF9yZWNsYWltKGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6MjQ3OlxcdFxcdCAgKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIHx8IGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkpKVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMjQ4LVxcdFxcdGdlbiA9IE1JTl9OUl9HRU5TO1xcbi0tXFxubW0vY29tcGFjdGlvbi5jPTg1NT1pc29sYXRlX21pZ3JhdGVwYWdlc19ibG9jayhzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYywgdW5zaWduZWQgbG9uZyBsb3dfcGZuLFxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTExMjctXFx0XFx0ICovXFxubW0vY29tcGFjdGlvbi5jOjExMjg6XFx0XFx0aWYgKChtb2RlIFxcdTAwMjYgSVNPTEFURV9BU1lOQ19NSUdSQVRFKSBcXHUwMDI2XFx1MDAyNiBmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpXFxubW0vY29tcGFjdGlvbi5jLTExMjktXFx0XFx0XFx0Z290byBpc29sYXRlX2ZhaWxfcHV0O1xcbi0tXFxubW0vZmlsZW1hcC5jPTYzNz1ib29sIGZpbGVtYXBfcmFuZ2VfaGFzX3dyaXRlYmFjayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbm1tL2ZpbGVtYXAuYy02NTMtXFx0XFx0aWYgKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIHx8IGZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSB8fFxcbm1tL2ZpbGVtYXAuYzo2NTQ6XFx0XFx0XFx0XFx0Zm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKVxcbm1tL2ZpbGVtYXAuYy02NTUtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9maWxlbWFwLmM9MTYwOT1zdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9maWxlbWFwLmMtMTYxNC1cXG5tbS9maWxlbWFwLmM6MTYxNTpcXHRpZiAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pIHx8IGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKVxcbm1tL2ZpbGVtYXAuYy0xNjE2LVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL2ZpbGVtYXAuYz0xNjU2PXZvaWQgZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vZmlsZW1hcC5jLTE2NTcte1xcbm1tL2ZpbGVtYXAuYzoxNjU4OlxcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pLCBmb2xpbyk7XFxubW0vZmlsZW1hcC5jLTE2NTktXFxuLS1cXG5tbS9maWxlbWFwLmM9MTY4Nz12b2lkIGZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9maWxlbWFwLmMtMTY4OC17XFxubW0vZmlsZW1hcC5jOjE2ODk6XFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksIGZvbGlvKTtcXG5tbS9maWxlbWFwLmMtMTY5MC1cXG4tLVxcbm1tL2ZpbGVtYXAuYz0yMTgyPXVuc2lnbmVkIGZpbmRfbG9ja19lbnRyaWVzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90ICpzdGFydCxcXG4tLVxcbm1tL2ZpbGVtYXAuYy0yMjA0LVxcdFxcdFxcdGlmIChmb2xpby1cXHUwMDNlbWFwcGluZyAhPSBtYXBwaW5nIHx8XFxubW0vZmlsZW1hcC5jOjIyMDU6XFx0XFx0XFx0ICAgIGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSlcXG5tbS9maWxlbWFwLmMtMjIwNi1cXHRcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4tLVxcbm1tL2ZpbGVtYXAuYz0yNDAwPXVuc2lnbmVkIGZpbGVtYXBfZ2V0X2ZvbGlvc19kaXJ0eShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCAqc3RhcnQsXFxuLS1cXG5tbS9maWxlbWFwLmMtMjQxMS1cXHRcXHRcXHRib29sIGNsZWFuID0gIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxubW0vZmlsZW1hcC5jOjI0MTI6XFx0XFx0XFx0XFx0ICAgICAhZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pO1xcbm1tL2ZpbGVtYXAuYy0yNDEzLVxcdFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuLS1cXG5tbS9maWxlbWFwLmM9Mjc2Mj1zdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kX3JlYWQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2ZpbGVtYXAuYy0yNzY1LVxcdFxcdHJldHVybjtcXG5tbS9maWxlbWFwLmM6Mjc2NjpcXHRpZiAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pIHx8IGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKVxcbm1tL2ZpbGVtYXAuYy0yNzY3LVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL2ZpbGVtYXAuYz00NTQzPWJvb2wgZmlsZW1hcF9yZWxlYXNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcXG4tLVxcbm1tL2ZpbGVtYXAuYy00NTQ5LVxcdFxcdHJldHVybiB0cnVlO1xcbm1tL2ZpbGVtYXAuYzo0NTUwOlxcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpXFxubW0vZmlsZW1hcC5jLTQ1NTEtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubW0vZm9saW8uYz01MzI9c3RhdGljIHZvaWQgbHJ1X2RlYWN0aXZhdGVfZmlsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9mb2xpby5jLTU0Ny1cXG5tbS9mb2xpby5jOjU0ODpcXHRpZiAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pIHx8IGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKSB7XFxubW0vZm9saW8uYy01NDktXFx0XFx0LypcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MzkyOT1pbnQgZm9saW9fY2hlY2tfc3BsaXR0YWJsZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgbmV3X29yZGVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zOTYwLVxcbm1tL2h1Z2VfbWVtb3J5LmM6Mzk2MTpcXHRpZiAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzk2Mi1cXHRcXHRyZXR1cm4gLUVCVVNZO1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTIyNjA9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTIzODQtXFx0XFx0XFx0XFx0Z290byB4YV91bmxvY2tlZDtcXG5tbS9raHVnZXBhZ2VkLmM6MjM4NTpcXHRcXHRcXHR9IGVsc2UgaWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkge1xcbm1tL2todWdlcGFnZWQuYy0yMzg2LVxcdFxcdFxcdFxcdHhhc191bmxvY2tfaXJxKFxcdTAwMjZ4YXMpO1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI0MjUtXFx0XFx0aWYgKCFpc19zaG1lbSBcXHUwMDI2XFx1MDAyNiAoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgfHxcXG5tbS9raHVnZXBhZ2VkLmM6MjQyNjpcXHRcXHRcXHRcXHQgIGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkpIHtcXG5tbS9raHVnZXBhZ2VkLmMtMjQyNy1cXHRcXHRcXHQvKlxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMzg2PWludCBtZW1vcnlfZmFpbHVyZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNTgxLVxcdCAqL1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjU4MjpcXHRpZiAoIWZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjU4My1cXHRcXHRnb3RvIGlkZW50aWZ5X3BhZ2Vfc3RhdGU7XFxuLS1cXG5tbS9tZW1vcnkuYz00ODQ0PXZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNTA5OC1cXHRcXHRcXHRleGNsdXNpdmUgPSB0cnVlO1xcbm1tL21lbW9yeS5jOjUwOTk6XFx0XFx0fSBlbHNlIGlmIChleGNsdXNpdmUgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxubW0vbWVtb3J5LmMtNTEwMC1cXHRcXHRcXHQgIGRhdGFfcmFjZShzaS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTV1BfU1RBQkxFX1dSSVRFUykpIHtcXG4tLVxcbm1tL21pZ3JhdGUuYz03NzU9dm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9taWdyYXRlLmMtODQ3LVxcdCAqL1xcbm1tL21pZ3JhdGUuYzo4NDg6XFx0aWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKG5ld2ZvbGlvKSlcXG5tbS9taWdyYXRlLmMtODQ5LVxcdFxcdGZvbGlvX2VuZF93cml0ZWJhY2sobmV3Zm9saW8pO1xcbi0tXFxubW0vbWlncmF0ZS5jPTkwNz1pbnQgbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpkc3QsXFxuLS1cXG5tbS9taWdyYXRlLmMtOTA5LXtcXG5tbS9taWdyYXRlLmM6OTEwOlxcdEJVR19PTihmb2xpb190ZXN0X3dyaXRlYmFjayhzcmMpKTtcXHQvKiBXcml0ZWJhY2sgbXVzdCBiZSBjb21wbGV0ZSAqL1xcbm1tL21pZ3JhdGUuYy05MTEtXFx0cmV0dXJuIF9fbWlncmF0ZV9mb2xpbyhtYXBwaW5nLCBkc3QsIHNyYywgTlVMTCwgbW9kZSk7XFxuLS1cXG5tbS9taWdyYXRlLmM9MTIxMz1zdGF0aWMgaW50IG1pZ3JhdGVfZm9saW9fdW5tYXAobmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcXG4tLVxcbm1tL21pZ3JhdGUuYy0xMjY1LVxcbm1tL21pZ3JhdGUuYzoxMjY2OlxcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhzcmMpKSB7XFxubW0vbWlncmF0ZS5jLTEyNjctXFx0XFx0LypcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTEwOT1zdGF0aWMgdm9pZCBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjMzLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTIzNDpcXHRcXHRCVUdfT04oZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTEyMzUtXFxuLS1cXG5tbS9wYWdlLXdyaXRlYmFjay5jPTIzNjc9c3RhdGljIGJvb2wgZm9saW9fcHJlcGFyZV93cml0ZWJhY2soc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS9wYWdlLXdyaXRlYmFjay5jLTIzODUtXFxubW0vcGFnZS13cml0ZWJhY2suYzoyMzg2OlxcdGlmIChmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpIHtcXG5tbS9wYWdlLXdyaXRlYmFjay5jLTIzODctXFx0XFx0aWYgKHdiYy1cXHUwMDNlc3luY19tb2RlID09IFdCX1NZTkNfTk9ORSlcXG4tLVxcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjM5MC1cXHR9XFxubW0vcGFnZS13cml0ZWJhY2suYzoyMzkxOlxcdEJVR19PTihmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpO1xcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjM5Mi1cXG4tLVxcbm1tL3BhZ2Utd3JpdGViYWNrLmM9Mjk4OT12b2lkIF9fZm9saW9fc3RhcnRfd3JpdGViYWNrKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wga2VlcF93cml0ZSlcXG4tLVxcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjk5NC1cXG5tbS9wYWdlLXdyaXRlYmFjay5jOjI5OTU6XFx0Vk1fQlVHX09OX0ZPTElPKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSwgZm9saW8pO1xcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMjk5Ni1cXHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO1xcbi0tXFxubW0vcGFnZS13cml0ZWJhY2suYz0zMDU4PXZvaWQgZm9saW9fd2FpdF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9wYWdlLXdyaXRlYmFjay5jLTMwNTkte1xcbm1tL3BhZ2Utd3JpdGViYWNrLmM6MzA2MDpcXHR3aGlsZSAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKSB7XFxubW0vcGFnZS13cml0ZWJhY2suYy0zMDYxLVxcdFxcdHRyYWNlX2ZvbGlvX3dhaXRfd3JpdGViYWNrKGZvbGlvLCBmb2xpb19tYXBwaW5nKGZvbGlvKSk7XFxuLS1cXG5tbS9wYWdlLXdyaXRlYmFjay5jPTMwODA9aW50IGZvbGlvX3dhaXRfd3JpdGViYWNrX2tpbGxhYmxlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vcGFnZS13cml0ZWJhY2suYy0zMDgxLXtcXG5tbS9wYWdlLXdyaXRlYmFjay5jOjMwODI6XFx0d2hpbGUgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkge1xcbm1tL3BhZ2Utd3JpdGViYWNrLmMtMzA4My1cXHRcXHR0cmFjZV9mb2xpb193YWl0X3dyaXRlYmFjayhmb2xpbywgZm9saW9fbWFwcGluZyhmb2xpbykpO1xcbi0tXFxubW0vcmVhZGFoZWFkLmM9NjUzPXZvaWQgcGFnZV9jYWNoZV9hc3luY19yYShzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxcbi0tXFxubW0vcmVhZGFoZWFkLmMtNjY3LVxcdCAqL1xcbm1tL3JlYWRhaGVhZC5jOjY2ODpcXHRpZiAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKVxcbm1tL3JlYWRhaGVhZC5jLTY2OS1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS9zaG1lbS5jPTEzMjg9c3RhdGljIHZvaWQgc2htZW1fdW5kb19yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgbHN0YXJ0LCB1b2ZmX3QgbGVuZCxcXG4tLVxcbm1tL3NobWVtLmMtMTQ2NC1cXHRcXHRcXHRcXHR9XFxubW0vc2htZW0uYzoxNDY1OlxcdFxcdFxcdFxcdFZNX0JVR19PTl9GT0xJTyhmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksXFxubW0vc2htZW0uYy0xNDY2LVxcdFxcdFxcdFxcdFxcdFxcdGZvbGlvKTtcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYz0yNTc9c3RhdGljIHZvaWQgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTI2OS1cXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pO1xcbm1tL3N3YXBfc3RhdGUuYzoyNzA6XFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSwgZm9saW8pO1xcbm1tL3N3YXBfc3RhdGUuYy0yNzEtXFxuLS1cXG5tbS9zd2FwZmlsZS5jPTIwNzU9c3RhdGljIGJvb2wgZm9saW9fc3dhcGNhY2hlX2ZyZWVhYmxlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTIwODAtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbm1tL3N3YXBmaWxlLmM6MjA4MTpcXHRpZiAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKVxcbm1tL3N3YXBmaWxlLmMtMjA4Mi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTI0MzY9c3RhdGljIGludCB1bnVzZV9wdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTI1MDYtXFx0XFx0ICovXFxubW0vc3dhcGZpbGUuYzoyNTA3OlxcdFxcdFZNX0JVR19PTl9GT0xJTyhmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksIGZvbGlvKTtcXG5tbS9zd2FwZmlsZS5jLTI1MDgtXFx0XFx0aWYgKHB0ZV9zd3BfZXhjbHVzaXZlKG9sZF9wdGUpKVxcbi0tXFxubW0vdHJ1bmNhdGUuYz0zMjU9bG9uZyBtYXBwaW5nX2V2aWN0X2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vdHJ1bmNhdGUuYy0zMjktXFx0XFx0cmV0dXJuIDA7XFxubW0vdHJ1bmNhdGUuYzozMzA6XFx0aWYgKGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIHx8IGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSlcXG5tbS90cnVuY2F0ZS5jLTMzMS1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY0MT1zdGF0aWMgcGFnZW91dF90IHBhZ2VvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxubW0vdm1zY2FuLmMtNjg5LVxcdC8qIHN5bmNocm9ub3VzIHdyaXRlPyAqL1xcbm1tL3Ztc2Nhbi5jOjY5MDpcXHRpZiAoIWZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSlcXG5tbS92bXNjYW4uYy02OTEtXFx0XFx0Zm9saW9fY2xlYXJfcmVjbGFpbShmb2xpbyk7XFxuLS1cXG5tbS92bXNjYW4uYz05NTU9c3RhdGljIHZvaWQgZm9saW9fY2hlY2tfZGlydHlfd3JpdGViYWNrKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS92bXNjYW4uYy05NzQtXFx0KmRpcnR5ID0gZm9saW9fdGVzdF9kaXJ0eShmb2xpbyk7XFxubW0vdm1zY2FuLmM6OTc1OlxcdCp3cml0ZWJhY2sgPSBmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyk7XFxubW0vdm1zY2FuLmMtOTc2LVxcbi0tXFxubW0vdm1zY2FuLmM9MTA3OD1zdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXFxuLS1cXG5tbS92bXNjYW4uYy0xMjA2LVxcdFxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjEyMDc6XFx0XFx0aWYgKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkge1xcbm1tL3Ztc2Nhbi5jLTEyMDgtXFx0XFx0XFx0bWFwcGluZyA9IGZvbGlvX21hcHBpbmcoZm9saW8pO1xcbi0tXFxubW0vdm1zY2FuLmMtMTQ0MC1cXHRcXHRcXHRcXHR9XFxubW0vdm1zY2FuLmM6MTQ0MTpcXHRcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKVxcbm1tL3Ztc2Nhbi5jLTE0NDItXFx0XFx0XFx0XFx0XFx0Z290byBrZWVwO1xcbi0tXFxubW0vdm1zY2FuLmMtMTQ1Mi1cXHRcXHRcXHRcXHRpZiAoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgfHxcXG5tbS92bXNjYW4uYzoxNDUzOlxcdFxcdFxcdFxcdCAgICBmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpXFxubW0vdm1zY2FuLmMtMTQ1NC1cXHRcXHRcXHRcXHRcXHRnb3RvIGtlZXBfbG9ja2VkO1xcbi0tXFxubW0vdm1zY2FuLmM9NDk2MD1zdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUwMTMtXFx0XFx0aWYgKCFza2lwX3JldHJ5IFxcdTAwMjZcXHUwMDI2ICFmb2xpb190ZXN0X2FjdGl2ZShmb2xpbykgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX21hcHBlZChmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG5tbS92bXNjYW4uYzo1MDE0OlxcdFxcdCAgICAhZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkge1xcbm1tL3Ztc2Nhbi5jLTUwMTUtXFx0XFx0XFx0bGlzdF9tb3ZlKFxcdTAwMjZmb2xpby1cXHUwMDNlbHJ1LCBcXHUwMDI2Y2xlYW4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjozODoxMi44NTkyOTIwMjJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ1NDAzOTMzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFdyaXRlYmFjayBNZWNoYW5pc20qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIHdyaXRlYmFjayBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGUgY29yZSBmdW5jdGlvbnMgaW52b2x2ZWQuIEknbSB0aGlua2luZyBhYm91dCBgX19mb2xpb19zdGFydF93cml0ZWJhY2tgLCBgZm9saW9fd2FpdF93cml0ZWJhY2tgLCBgZm9saW9fd2FpdF93cml0ZWJhY2tfa2lsbGFibGVgLCBhbmQgYGZvbGlvX2VuZF93cml0ZWJhY2tgIOKAkyB0aG9zZSBhcmUgdGhlIGtleSBwbGF5ZXJzIGhlcmUsIGFsbCBuZXN0bGVkIHdpdGhpbiBgbW0vcGFnZS13cml0ZWJhY2suY2AgYW5kIHBvdGVudGlhbGx5IHRvdWNoaW5nIGBtbS9maWxlbWFwLmNgIGFzIHdlbGwuXG5cbk15IGluaXRpYWwgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgcG9pbnRzIG9mIHRoZSB3cml0ZWJhY2sgY3ljbGUuIFNvLCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGBfX2ZvbGlvX3N0YXJ0X3dyaXRlYmFja2AgYW5kIGBmb2xpb19lbmRfd3JpdGViYWNrYC4gVG8gZ2V0IHRoZSB3aG9sZSBwaWN0dXJlLCBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIGBtbS9wYWdlLXdyaXRlYmFjay5jYCBhbmQgZ28gc3RyYWlnaHQgdG8gYXJvdW5kIGxpbmUgMjk4OS4gVGhhdCdzIHVzdWFsbHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGNvbnRleHR1YWxpemUgdGhvc2UgZnVuY3Rpb25zLiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEyMjksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzg6MTUuMzEzMzM1ODA4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0Nzg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlLXdyaXRlYmFjay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5ODUsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI5ODU6XFx0XFxuMjk4NjpcXHRcXHRyZXR1cm4gcmV0O1xcbjI5ODc6XFx0fVxcbjI5ODg6XFx0XFxuMjk4OTpcXHR2b2lkIF9fZm9saW9fc3RhcnRfd3JpdGViYWNrKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wga2VlcF93cml0ZSlcXG4yOTkwOlxcdHtcXG4yOTkxOlxcdFxcdGxvbmcgbnIgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuMjk5MjpcXHRcXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZvbGlvX21hcHBpbmcoZm9saW8pO1xcbjI5OTM6XFx0XFx0aW50IGFjY2Vzc19yZXQ7XFxuMjk5NDpcXHRcXG4yOTk1OlxcdFxcdFZNX0JVR19PTl9GT0xJTyhmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksIGZvbGlvKTtcXG4yOTk2OlxcdFxcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7XFxuMjk5NzpcXHRcXG4yOTk4OlxcdFxcdGlmIChtYXBwaW5nIFxcdTAwMjZcXHUwMDI2IG1hcHBpbmdfdXNlX3dyaXRlYmFja190YWdzKG1hcHBpbmcpKSB7XFxuMjk5OTpcXHRcXHRcXHRYQV9TVEFURSh4YXMsIFxcdTAwMjZtYXBwaW5nLVxcdTAwM2VpX3BhZ2VzLCBmb2xpby1cXHUwMDNlaW5kZXgpO1xcbjMwMDA6XFx0XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctXFx1MDAzZWhvc3Q7XFxuMzAwMTpcXHRcXHRcXHRzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2I7XFxuMzAwMjpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbjMwMDM6XFx0XFx0XFx0Ym9vbCBvbl93Ymxpc3Q7XFxuMzAwNDpcXHRcXG4zMDA1OlxcdFxcdFxcdHhhc19sb2NrX2lycXNhdmUoXFx1MDAyNnhhcywgZmxhZ3MpO1xcbjMwMDY6XFx0XFx0XFx0eGFzX2xvYWQoXFx1MDAyNnhhcyk7XFxuMzAwNzpcXHRcXHRcXHRmb2xpb190ZXN0X3NldF93cml0ZWJhY2soZm9saW8pO1xcbjMwMDg6XFx0XFxuMzAwOTpcXHRcXHRcXHRvbl93Ymxpc3QgPSBtYXBwaW5nX3RhZ2dlZChtYXBwaW5nLCBQQUdFQ0FDSEVfVEFHX1dSSVRFQkFDSyk7XFxuMzAxMDpcXHRcXG4zMDExOlxcdFxcdFxcdHhhc19zZXRfbWFyayhcXHUwMDI2eGFzLCBQQUdFQ0FDSEVfVEFHX1dSSVRFQkFDSyk7XFxuMzAxMjpcXHRcXHRcXHR3YiA9IGlub2RlX3RvX3diKGlub2RlKTtcXG4zMDEzOlxcdFxcdFxcdHdiX3N0YXRfbW9kKHdiLCBXQl9XUklURUJBQ0ssIG5yKTtcXG4zMDE0OlxcdFxcdFxcdGlmICghb25fd2JsaXN0KSB7XFxuMzAxNTpcXHRcXHRcXHRcXHR3Yl9pbm9kZV93cml0ZWJhY2tfc3RhcnQod2IpO1xcbjMwMTY6XFx0XFx0XFx0XFx0LypcXG4zMDE3OlxcdFxcdFxcdFxcdCAqIFdlIGNhbiBjb21lIHRocm91Z2ggaGVyZSB3aGVuIHN3YXBwaW5nIGFub255bW91c1xcbjMwMTg6XFx0XFx0XFx0XFx0ICogZm9saW9zLCBzbyB3ZSBkb24ndCBuZWNlc3NhcmlseSBoYXZlIGFuIGlub2RlIHRvXFxuMzAxOTpcXHRcXHRcXHRcXHQgKiB0cmFjayBmb3Igc3luYy5cXG4zMDIwOlxcdFxcdFxcdFxcdCAqL1xcbjMwMjE6XFx0XFx0XFx0XFx0aWYgKG1hcHBpbmctXFx1MDAzZWhvc3QpXFxuMzAyMjpcXHRcXHRcXHRcXHRcXHRzYl9tYXJrX2lub2RlX3dyaXRlYmFjayhtYXBwaW5nLVxcdTAwM2Vob3N0KTtcXG4zMDIzOlxcdFxcdFxcdH1cXG4zMDI0OlxcdFxcbjMwMjU6XFx0XFx0XFx0aWYgKCFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSlcXG4zMDI2OlxcdFxcdFxcdFxcdHhhc19jbGVhcl9tYXJrKFxcdTAwMjZ4YXMsIFBBR0VDQUNIRV9UQUdfRElSVFkpO1xcbjMwMjc6XFx0XFx0XFx0aWYgKCFrZWVwX3dyaXRlKVxcbjMwMjg6XFx0XFx0XFx0XFx0eGFzX2NsZWFyX21hcmsoXFx1MDAyNnhhcywgUEFHRUNBQ0hFX1RBR19UT1dSSVRFKTtcXG4zMDI5OlxcdFxcdFxcdHhhc191bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2eGFzLCBmbGFncyk7XFxuMzAzMDpcXHRcXHR9IGVsc2Uge1xcbjMwMzE6XFx0XFx0XFx0Zm9saW9fdGVzdF9zZXRfd3JpdGViYWNrKGZvbGlvKTtcXG4zMDMyOlxcdFxcdH1cXG4zMDMzOlxcdFxcbjMwMzQ6XFx0XFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9XUklURUJBQ0ssIG5yKTtcXG4zMDM1OlxcdFxcdHpvbmVfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX1pPTkVfV1JJVEVfUEVORElORywgbnIpO1xcbjMwMzY6XFx0XFxuMzAzNzpcXHRcXHRhY2Nlc3NfcmV0ID0gYXJjaF9tYWtlX2ZvbGlvX2FjY2Vzc2libGUoZm9saW8pO1xcbjMwMzg6XFx0XFx0LypcXG4zMDM5OlxcdFxcdCAqIElmIHdyaXRlYmFjayBoYXMgYmVlbiB0cmlnZ2VyZWQgb24gYSBwYWdlIHRoYXQgY2Fubm90IGJlIG1hZGVcXG4zMDQwOlxcdFxcdCAqIGFjY2Vzc2libGUsIGl0IGlzIHRvbyBsYXRlIHRvIHJlY292ZXIgaGVyZS5cXG4zMDQxOlxcdFxcdCAqL1xcbjMwNDI6XFx0XFx0Vk1fQlVHX09OX0ZPTElPKGFjY2Vzc19yZXQgIT0gMCwgZm9saW8pO1xcbjMwNDM6XFx0fVxcbjMwNDQ6XFx0RVhQT1JUX1NZTUJPTChfX2ZvbGlvX3N0YXJ0X3dyaXRlYmFjayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM4OjE1LjMxMzY4ODE1OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDI1MDAwNDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEludmVzdGlnYXRpb24gb2YgdGhlIFdyaXRlYmFjayBNZWNoYW5pc20qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgX19mb2xpb19zdGFydF93cml0ZWJhY2tgLCBhbmQgaXQncyBjYWxsaW5nIGJvdGggYGZvbGlvX3Rlc3Rfd3JpdGViYWNrYCBhbmQgYGZvbGlvX3Rlc3Rfc2V0X3dyaXRlYmFja2AuIEludGVyZXN0aW5nLiBNeSBndXQgZmVlbGluZyB0ZWxscyBtZSB0byBkZWx2ZSBkZWVwZXIgaW50byBob3cgdGhpcyB3cml0ZWJhY2sgcHJvY2VzcyBpcyBjb250cm9sbGVkLCBhbmQgaG93IGl0IGlzIHByb3RlY3RlZCBhZ2FpbnN0IGNvbmN1cnJlbnQgYWNjZXNzLiBMZXQncyBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgZnVsbCBwaWN0dXJlLlxuXG5CZWZvcmUgSSBqdW1wIHRvIGNvbmNsdXNpb25zLCBJIG5lZWQgdG8gY2hlY2sgaG93IGBmb2xpb193YWl0X3dyaXRlYmFja2AgYW5kIGBmb2xpb19lbmRfd3JpdGViYWNrYCBhcmUgdXNlZCBpbiB0aGlzIGNvbnRleHQuIFRoZXNlIGNvdWxkIGJlIGtleSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcywgc2lnbmFsbGluZyB3aGVuIGEgd3JpdGViYWNrIG9wZXJhdGlvbiBoYXMgc3RhcnRlZCBvciBmaW5pc2hlZC4gVGhleSBwcm9iYWJseSBjb250cm9sIHdoZW4gYSBwYWdlIGlzIHZpc2libGUgdG8gb3RoZXJzLCBhbmQgd2hlbiBpdCBpcyBiZWluZyB3b3JrZWQgb24uXG5cblRvIHRydWx5IHVuZGVyc3RhbmQgdGhlIGludGVybmFsIG1lY2hhbmljcywgSSBzaG91bGQgcHVsbCB1cCBgbW0vZmlsZW1hcC5jYCBhbmQgdGFrZSBhIGxvb2sgYXJvdW5kIGxpbmUgMTY1Ni4gVGhhdCBzaG91bGQgYmUgcmlnaHQgaW4gdGhlIGhlYXJ0IG9mIHRoZSBmaWxlbWFwIGNvZGUuIEZyb20gbWVtb3J5LCB0aGF0IGFyZWEgaGFuZGxlcyB0aGUgY29yZSB3cml0ZWJhY2sgbG9naWMsIHNvIHRoYXQgd2lsbCBsZXQgbWUgY2hlY2sgZXhhY3RseSBob3cgYWxsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgd29ya2luZyB0b2dldGhlci4gSSBleHBlY3QgdG8gZmluZCB0aGUgaW1wbGVtZW50YXRpb24sIG9yIGF0IGxlYXN0IHRoZSBjYWxsZXJzLCBvZiBgZm9saW9fc3RhcnRfd3JpdGViYWNrYCwgYGZvbGlvX2VuZF93cml0ZWJhY2tgLCBldGMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNTIxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjozODoxOS43Mzg2OTI3NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDI0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZmlsZW1hcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2NTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2NTU6XFx0ICovXFxuMTY1NjpcXHR2b2lkIGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbjE2NTc6XFx0e1xcbjE2NTg6XFx0XFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksIGZvbGlvKTtcXG4xNjU5OlxcdFxcbjE2NjA6XFx0XFx0LypcXG4xNjYxOlxcdFxcdCAqIGZvbGlvX3Rlc3RfY2xlYXJfcmVjbGFpbSgpIGNvdWxkIGJlIHVzZWQgaGVyZSBidXQgaXQgaXMgYW5cXG4xNjYyOlxcdFxcdCAqIGF0b21pYyBvcGVyYXRpb24gYW5kIG92ZXJraWxsIGluIHRoaXMgcGFydGljdWxhciBjYXNlLiBGYWlsaW5nXFxuMTY2MzpcXHRcXHQgKiB0byBzaHVmZmxlIGEgZm9saW8gbWFya2VkIGZvciBpbW1lZGlhdGUgcmVjbGFpbSBpcyB0b28gbWlsZFxcbjE2NjQ6XFx0XFx0ICogYSBnYWluIHRvIGp1c3RpZnkgdGFraW5nIGFuIGF0b21pYyBvcGVyYXRpb24gcGVuYWx0eSBhdCB0aGVcXG4xNjY1OlxcdFxcdCAqIGVuZCBvZiBldmVyeSBmb2xpbyB3cml0ZWJhY2suXFxuMTY2NjpcXHRcXHQgKi9cXG4xNjY3OlxcdFxcdGlmIChmb2xpb190ZXN0X3JlY2xhaW0oZm9saW8pKSB7XFxuMTY2ODpcXHRcXHRcXHRmb2xpb19jbGVhcl9yZWNsYWltKGZvbGlvKTtcXG4xNjY5OlxcdFxcdFxcdGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZShmb2xpbyk7XFxuMTY3MDpcXHRcXHR9XFxuMTY3MTpcXHRcXG4xNjcyOlxcdFxcdGlmIChfX2ZvbGlvX2VuZF93cml0ZWJhY2soZm9saW8pKVxcbjE2NzM6XFx0XFx0XFx0Zm9saW9fd2FrZV9iaXQoZm9saW8sIFBHX3dyaXRlYmFjayk7XFxuMTY3NDpcXHRcXG4xNjc1OlxcdFxcdGFjY3RfcmVjbGFpbV93cml0ZWJhY2soZm9saW8pO1xcbjE2NzY6XFx0fVxcbjE2Nzc6XFx0RVhQT1JUX1NZTUJPTF9HUEwoZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKTtcXG4xNjc4OlxcdFxcbjE2Nzk6XFx0LyoqXFxuMTY4MDpcXHQgKiBmb2xpb19lbmRfd3JpdGViYWNrIC0gRW5kIHdyaXRlYmFjayBhZ2FpbnN0IGEgZm9saW8uXFxuMTY4MTpcXHQgKiBAZm9saW86IFRoZSBmb2xpby5cXG4xNjgyOlxcdCAqXFxuMTY4MzpcXHQgKiBUaGUgZm9saW8gbXVzdCBhY3R1YWxseSBiZSB1bmRlciB3cml0ZWJhY2suXFxuMTY4NDpcXHQgKlxcbjE2ODU6XFx0ICogQ29udGV4dDogTWF5IGJlIGNhbGxlZCBmcm9tIHByb2Nlc3Mgb3IgaW50ZXJydXB0IGNvbnRleHQuXFxuMTY4NjpcXHQgKi9cXG4xNjg3OlxcdHZvaWQgZm9saW9fZW5kX3dyaXRlYmFjayhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbjE2ODg6XFx0e1xcbjE2ODk6XFx0XFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksIGZvbGlvKTtcXG4xNjkwOlxcdFxcbjE2OTE6XFx0XFx0LypcXG4xNjkyOlxcdFxcdCAqIFdyaXRlYmFjayBkb2VzIG5vdCBob2xkIGEgZm9saW8gcmVmZXJlbmNlIG9mIGl0cyBvd24sIHJlbHlpbmdcXG4xNjkzOlxcdFxcdCAqIG9uIHRydW5jYXRpb24gdG8gd2FpdCBmb3IgdGhlIGNsZWFyaW5nIG9mIFBHX3dyaXRlYmFjay5cXG4xNjk0OlxcdFxcdCAqIEJ1dCBoZXJlIHdlIG11c3QgbWFrZSBzdXJlIHRoYXQgdGhlIGZvbGlvIGlzIG5vdCBmcmVlZCBhbmRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzg6MTkuNzM4OTk3NjJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjU3MTE5NTE4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1cyBTeW1ib2wgU2VsZWN0aW9uIGZvciBGb2xpbyBXcml0ZWJhY2sgRmxhZyBDb252ZXJzaW9uKipcblxuT2theSwgbGV0J3MgbmFpbCBkb3duIHRoZXNlIGZvY3VzIHN5bWJvbHMuIEZpcnN0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgYWNjaWRlbnRhbGx5IGZsYWdnaW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIHRoYXQgd2lsbCBkaWx1dGUgdGhlIGZ1enppbmcgZWZmb3J0LiBJJ20gdGhpbmtpbmcgYWJvdXQgd3JpdGViYWNrLXJlbGF0ZWQgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHk6IGBfX2ZvbGlvX3N0YXJ0X3dyaXRlYmFja2AsIGBmb2xpb19lbmRfd3JpdGViYWNrYCwgYGZvbGlvX3dhaXRfd3JpdGViYWNrYCwgYW5kIGBmaWxlbWFwX3JhbmdlX2hhc193cml0ZWJhY2tgLiBBcmUgYW55IG9mIHRoZXNlIGdlbmVyaWMgZW5vdWdoIHRvIGJlIHByb2JsZW1hdGljPyBMZXQncyBxdWlja2x5IHJldmlldyB0aGUgRm9jdXNTeW1ib2xzIGd1aWRlbGluZXMgdG8gYmUgc3VyZS4gSXQgbG9va3MgbGlrZSB0aGUgZ29hbCBoZXJlIGlzIHRvIHNwZWNpZmljYWxseSB0YXJnZXQgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhlIGNvcmUgbG9naWMgYmVpbmcgYWx0ZXJlZCwgcmF0aGVyIHRoYW4gZ2VuZXJhbCBzeXN0ZW0tbGV2ZWwgY2FsbHMuXG5cbk5vdywgY29uc2lkZXJpbmcgdGhvc2UsIGBfX2ZvbGlvX3N0YXJ0X3dyaXRlYmFja2AsIGBmb2xpb19lbmRfd3JpdGViYWNrYCwgYGZvbGlvX3dhaXRfd3JpdGViYWNrYCwgYW5kIGBmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmRgLCBhcmUgYWxsIHByZXR0eSBzcGVjaWZpYyB0byBmb2xpbyB3cml0ZWJhY2sgaGFuZGxpbmcuIFRoZXkgYXJlbid0IG1lbW9yeSBhbGxvY2F0b3JzIG9yIHBhZ2UgZmF1bHQgaGFuZGxlcnMsIHdoaWNoIGlzIGdvb2QuIFRoZXkgc2VlbSBsaWtlIGdvb2QgY2FuZGlkYXRlcy4gSSBzaG91bGQgYWxzbyBjaGVjayBgZm9saW9fcHJlcGFyZV93cml0ZWJhY2tgLCBhbHRob3VnaCB0aGF0IGZ1bmN0aW9uIGlzIGRlZmluZWQgaW4gYG1tL3BhZ2Utd3JpdGViYWNrLmNgLiBBbHNvIGBmaWxlbWFwX3JlbGVhc2VfZm9saW9gIGZyb20gYG1tL2ZpbGVtYXAuY2AuXG5cbk5leHQsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueSBjb25maWcgZGVwZW5kZW5jaWVzLiBJJ20gZm9jdXNpbmcgb24gYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYCBhbmQgd3JpdGViYWNrIHJlbGF0ZWQgY29kZS4gQXJlIHRoZXJlIGFueSB1bnVzdWFsIEtjb25maWcgcmVxdWlyZW1lbnRzPyBOb3BlLiBTdGFuZGFyZCBMaW51eCBjb25maWd1cmF0aW9ucyBoYXZlIGBGT0xJT19IRUFEX1BBR0VgIGFuZCBgUEdfd3JpdGViYWNrYC4gSSBxdWlja2x5IGRvdWJsZS1jaGVja2VkIHRoZSBjb25maWdzIGFuZCBjb25maXJtIHRoYXQgYEVuYWJsZUNvbmZpZ3M6IFtdYCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSB3b3VsZCBleHBlY3QgZm9yIGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2UuXG5cbkFscmlnaHQsIGxldCdzIHJlY29uZmlybSBteSBjaG9zZW4gZm9jdXMgc3ltYm9scy4gSSBoYXZlOiBgX19mb2xpb19zdGFydF93cml0ZWJhY2tgLCBgZm9saW9fZW5kX3dyaXRlYmFja2AsIGBmb2xpb193YWl0X3dyaXRlYmFja2AsIGFuZCBgZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kYC4gVGhlc2Ugc2VlbSBzcG90IG9uLiBJIGp1c3QgcXVpY2tseSBjb25maXJtZWQgdGhhdCB0aGVzZSBhcmUgYWxsIGV4cG9ydGVkIHN5bWJvbHMsIHByZXNlbnQgaW4gdGhlIHN5bWJvbCB0YWJsZXMuXG5cbkZpbmFsbHksIGxldCdzIGRvIGEgcXVpY2sgbWVudGFsIHJldmlldyB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZzogdGhlIHBhdGNoIGlzIGNvbnZlcnRpbmcgdGhlIGBQR193cml0ZWJhY2tgIGZsYWcgZGVmaW5pdGlvbnMgZnJvbSBsZWdhY3kgbWFjcm9zIHRvIGBGT0xJT19URVNUX0ZMQUdgIGFuZCBgRk9MSU9fVEVTVF9TRVRfRkxBR2AuIEl0J3MgbW9kaWZ5aW5nIHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZvbGlvIGZsYWdzIGxvZ2ljLiBXb3J0aEZ1enppbmcgaXMgdHJ1ZS4gRW5hYmxlQ29uZmlncyBpcyBlbXB0eS4gQW5kLCBtb3N0IGltcG9ydGFudGx5LCB0aGUgRm9jdXNTeW1ib2xzIHRhcmdldCB0aGUga2V5IHdyaXRlYmFjayBsaWZlY3ljbGUgaGVscGVycyB0aGF0IHVzZSB0aGVzZSBtYWNyb3MuXG5cbk9rYXksIGV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzUxOCwiT3V0cHV0VG9rZW5zIjoxNDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4ODEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjozODoyNi4zMTAxOTY5NzNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzQyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fZm9saW9fc3RhcnRfd3JpdGViYWNrXCIsXG4gICAgXCJmb2xpb19lbmRfd3JpdGViYWNrXCIsXG4gICAgXCJmb2xpb193YWl0X3dyaXRlYmFja1wiLFxuICAgIFwiZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgd3JpdGViYWNrIGZvbGlvIGZsYWcgZGVmaW5pdGlvbnMgaW4gaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggZnJvbSBsZWdhY3kgcGFnZS1mbGFnIG1hY3JvcyAoVEVTVFBBR0VGTEFHLCBURVNUU0NGTEFHKSB0byB0aGUgbW9kZXJuIGZvbGlvIGZsYWcgbWFjcm9zIChGT0xJT19URVNUX0ZMQUcsIEZPTElPX1RFU1RfU0VUX0ZMQUcpLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbnZvbHZlZCBpbiBmb2xpbyB3cml0ZWJhY2sgc3RhdGUgdHJhY2tpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19mb2xpb19zdGFydF93cml0ZWJhY2tcIixcbiAgICBcImZvbGlvX2VuZF93cml0ZWJhY2tcIixcbiAgICBcImZvbGlvX3dhaXRfd3JpdGViYWNrXCIsXG4gICAgXCJmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIHRoZSB3cml0ZWJhY2sgZm9saW8gZmxhZyBkZWZpbml0aW9ucyBpbiBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCBmcm9tIGxlZ2FjeSBwYWdlLWZsYWcgbWFjcm9zIChURVNUUEFHRUZMQUcsIFRFU1RTQ0ZMQUcpIHRvIHRoZSBtb2Rlcm4gZm9saW8gZmxhZyBtYWNyb3MgKEZPTElPX1RFU1RfRkxBRywgRk9MSU9fVEVTVF9TRVRfRkxBRykuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGludm9sdmVkIGluIGZvbGlvIHdyaXRlYmFjayBzdGF0ZSB0cmFja2luZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzg6MjYuMzEwMjc2ODczWiIsIlNlcSI6MjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjgxODYzOTY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM4OjI2LjMxMTMwOTI5M1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE2ODE3NTk5MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb252ZXJ0cyB0aGUgcGFnZSBmbGFnIGRlZmluaXRpb25zIGZvciBQR193cml0ZWJhY2sgZnJvbSBsZWdhY3kgcGFnZS1iYXNlZCBtYWNyb3MgKFRFU1RQQUdFRkxBRyAvIFRFU1RTQ0ZMQUcpIHRvIGZvbGlvLWJhc2VkIG1hY3JvcyAoRk9MSU9fVEVTVF9GTEFHIC8gRk9MSU9fVEVTVF9TRVRfRkxBRykuIFxcblxcblRoaXMgaXMgYSB0eXBlLXNhZmUgbWFjcm8gcmVmYWN0b3JpbmcgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgb3BlcmF0ZXMgcHVyZWx5IG9uIHBhZ2UvZm9saW8gYml0IGZsYWdzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIGFsbG9jYXRlLCBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzdHJ1Y3QgcGFkZGluZywgdXNlci1jb3B5IGJ1ZmZlcnMsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFueSBtZW1vcnkgc2FmZXR5IGlzc3VlcyB0aGF0IGNvdWxkIGFyaXNlIGZyb20gaW52YWxpZCBmb2xpby9wYWdlIHJlZmVyZW5jZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBwYWdlIGFjY2VzcykgYXJlIGFscmVhZHkgY292ZXJlZCBieSBLQVNBTiBhbmQgcGFnZSBmbGFnIGRlYnVnIGNoZWNrcyAoVk1fQlVHX09OX1BHRkxBR1MpLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVhayByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc0MjJlZWUzZTdmNTI0MmZkZDJhNzEyNTc1MmRhMGFjZTY3ZGQxN2NcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDE2OjM3OjE5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuaW5kZXggM2RjNzljMGM1YWRmMC4uODZkZDA0NzBkYTExNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuQEAgLTU4OCw4ICs1ODgsOCBAQCBGT0xJT19GTEFHKG93bmVyXzIsIEZPTElPX0hFQURfUEFHRSlcbiAgKiBPbmx5IHRlc3QtYW5kLXNldCBleGlzdCBmb3IgUEdfd3JpdGViYWNrLiAgVGhlIHVuY29uZGl0aW9uYWwgb3BlcmF0b3JzIGFyZVxuICAqIHJpc2t5OiB0aGV5IGJ5cGFzcyBwYWdlIGFjY291bnRpbmcuXG4gICovXG4tVEVTVFBBR0VGTEFHKFdyaXRlYmFjaywgd3JpdGViYWNrLCBQRl9OT19UQUlMKVxuLVx0VEVTVFNDRkxBRyhXcml0ZWJhY2ssIHdyaXRlYmFjaywgUEZfTk9fVEFJTClcbitGT0xJT19URVNUX0ZMQUcod3JpdGViYWNrLCBGT0xJT19IRUFEX1BBR0UpXG4rXHRGT0xJT19URVNUX1NFVF9GTEFHKHdyaXRlYmFjaywgRk9MSU9fSEVBRF9QQUdFKVxuIEZPTElPX0ZMQUcobWFwcGVkdG9kaXNrLCBGT0xJT19IRUFEX1BBR0UpXG4gXG4gLyogUEdfcmVhZGFoZWFkIGlzIG9ubHkgdXNlZCBmb3IgcmVhZHM7IFBHX3JlY2xhaW0gaXMgb25seSBmb3Igd3JpdGVzICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjozODoyNi4zMTEzMTM5MDNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzg3MzQxNjIyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhZ2UgRmxhZyBDaGFuZ2VzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEkgc2VlIHdlJ3JlIG1vZGlmeWluZyBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgLiBTcGVjaWZpY2FsbHksIHRoZSBkaWZmIGZvY3VzZXMgb24gY2hhbmdlcyBhcm91bmQgdGhlIGBQR193cml0ZWJhY2tgIGZsYWcsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgdXNpbmcgYFRFU1RQQUdFRkxBR2AgYW5kIGBURVNUU0NGTEFHYCBmb3IgdGhlIHdyaXRlYmFjayBmbGFnLCB3aGljaCBoYXMgYSBzcGVjaWZpYyBjb21tZW50IGFib3V0IGJlaW5nIHJpc2t5IGJlY2F1c2UgdGhleSBieXBhc3MgcGFnZSBhY2NvdW50aW5nLCBpbXBseWluZyB0aGF0IHRoZSBwYXRjaCBpcyBtZWFudCB0byBhZGRyZXNzIHRoaXMuIE5vdywgaXQgbG9va3MgbGlrZSB0aGVzZSBhcmUgYmVpbmcgcmVwbGFjZWQgd2l0aCBgRk9MSU9fVEVTVF9GTEFHYCBhbmQgYEZPTElPX1RFU1RfU0VUX0ZMQUdgIHdpdGggdGhlIGBGT0xJT19IRUFEX1BBR0VgIHBhcmFtZXRlci4gVGhpcyBsaWtlbHkgc2lnbmlmaWVzIGEgbW92ZSB0b3dhcmQgYSBtb3JlIGZvbGlvLWNlbnRyaWMgYXBwcm9hY2gsIHdoaWNoIGlzIHNvbWV0aGluZyBJJ3ZlIGJlZW4ga2VlcGluZyBhbiBleWUgb24uXG5cbk15IG5leHQgc3RlcCB3b3VsZCBiZSB0byBxdWlja2x5IGNoZWNrIHRoZSBkZWZpbml0aW9ucyBvZiBgVEVTVFBBR0VGTEFHYCwgYFRFU1RTQ0ZMQUdgLCBgRk9MSU9fVEVTVF9GTEFHYCwgYW5kIGBGT0xJT19URVNUX1NFVF9GTEFHYCwgd2hpY2ggc2hvdWxkIGJlIGRlZmluZWQgZWFybGllciBpbiB0aGlzIHNhbWUgaW5jbHVkZSBmaWxlIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGUgY2hhbmdlcy4gSSdsbCBuZWVkIHRvIHNlZSBob3cgdGhlIGZvbGlvLWJhc2VkIHZlcnNpb25zIGhhbmRsZSB0aGUgd3JpdGViYWNrIGZsYWcgYW5kIHdoZXRoZXIgdGhleSBhZGRyZXNzIHRoZSBzdGF0ZWQgY29uY2VybnMgYWJvdXQgcGFnZSBhY2NvdW50aW5nLiBUaGlzIGlzIGxpa2VseSBhbiBpbXBvcnRhbnQgcGllY2Ugb2YgdGhlIHB1enpsZSB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZSBwYXRjaCBhbmQgd2hldGhlciBpdCdzIHRoZSByaWdodCBkaXJlY3Rpb24gZm9yIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMzksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjozODozMC4xODQ3MzQyMjVaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwOTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU3MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU3MDpcXHRcXHRfX0NMRUFSUEFHRUZMQUcoUmVzZXJ2ZWQsIHJlc2VydmVkLCBQRl9OT19DT01QT1VORClcXG4gNTcxOlxcdFxcdF9fU0VUUEFHRUZMQUcoUmVzZXJ2ZWQsIHJlc2VydmVkLCBQRl9OT19DT01QT1VORClcXG4gNTcyOlxcdEZPTElPX0ZMQUcoc3dhcGJhY2tlZCwgRk9MSU9fSEVBRF9QQUdFKVxcbiA1NzM6XFx0XFx0X19GT0xJT19DTEVBUl9GTEFHKHN3YXBiYWNrZWQsIEZPTElPX0hFQURfUEFHRSlcXG4gNTc0OlxcdFxcdF9fRk9MSU9fU0VUX0ZMQUcoc3dhcGJhY2tlZCwgRk9MSU9fSEVBRF9QQUdFKVxcbiA1NzU6XFx0XFxuIDU3NjpcXHQvKlxcbiA1Nzc6XFx0ICogUHJpdmF0ZSBwYWdlIG1hcmtpbmdzIHRoYXQgbWF5IGJlIHVzZWQgYnkgdGhlIGZpbGVzeXN0ZW0gdGhhdCBvd25zIHRoZSBwYWdlXFxuIDU3ODpcXHQgKiBmb3IgaXRzIG93biBwdXJwb3Nlcy5cXG4gNTc5OlxcdCAqIC0gUEdfcHJpdmF0ZSBhbmQgUEdfcHJpdmF0ZV8yIGNhdXNlIHJlbGVhc2VfZm9saW8oKSBhbmQgY28gdG8gYmUgaW52b2tlZFxcbiA1ODA6XFx0ICovXFxuIDU4MTpcXHRQQUdFRkxBRyhQcml2YXRlLCBwcml2YXRlLCBQRl9BTlkpXFxuIDU4MjpcXHRGT0xJT19GTEFHKHByaXZhdGVfMiwgRk9MSU9fSEVBRF9QQUdFKVxcbiA1ODM6XFx0XFxuIDU4NDpcXHQvKiBvd25lcl8yIGNhbiBiZSBzZXQgb24gdGFpbCBwYWdlcyBmb3IgYW5vbiBtZW1vcnkgKi9cXG4gNTg1OlxcdEZPTElPX0ZMQUcob3duZXJfMiwgRk9MSU9fSEVBRF9QQUdFKVxcbiA1ODY6XFx0XFxuIDU4NzpcXHQvKlxcbiA1ODg6XFx0ICogT25seSB0ZXN0LWFuZC1zZXQgZXhpc3QgZm9yIFBHX3dyaXRlYmFjay4gIFRoZSB1bmNvbmRpdGlvbmFsIG9wZXJhdG9ycyBhcmVcXG4gNTg5OlxcdCAqIHJpc2t5OiB0aGV5IGJ5cGFzcyBwYWdlIGFjY291bnRpbmcuXFxuIDU5MDpcXHQgKi9cXG4gNTkxOlxcdEZPTElPX1RFU1RfRkxBRyh3cml0ZWJhY2ssIEZPTElPX0hFQURfUEFHRSlcXG4gNTkyOlxcdFxcdEZPTElPX1RFU1RfU0VUX0ZMQUcod3JpdGViYWNrLCBGT0xJT19IRUFEX1BBR0UpXFxuIDU5MzpcXHRGT0xJT19GTEFHKG1hcHBlZHRvZGlzaywgRk9MSU9fSEVBRF9QQUdFKVxcbiA1OTQ6XFx0XFxuIDU5NTpcXHQvKiBQR19yZWFkYWhlYWQgaXMgb25seSB1c2VkIGZvciByZWFkczsgUEdfcmVjbGFpbSBpcyBvbmx5IGZvciB3cml0ZXMgKi9cXG4gNTk2OlxcdEZPTElPX0ZMQUcocmVjbGFpbSwgRk9MSU9fSEVBRF9QQUdFKVxcbiA1OTc6XFx0Rk9MSU9fRkxBRyhyZWFkYWhlYWQsIEZPTElPX0hFQURfUEFHRSlcXG4gNTk4OlxcdFxcdEZPTElPX1RFU1RfQ0xFQVJfRkxBRyhyZWFkYWhlYWQsIEZPTElPX0hFQURfUEFHRSlcXG4gNTk5OlxcdFxcbiA2MDA6XFx0Rk9MSU9fRkxBRyhkcm9wYmVoaW5kLCBGT0xJT19IRUFEX1BBR0UpXFxuIDYwMTpcXHRcXHRGT0xJT19URVNUX0NMRUFSX0ZMQUcoZHJvcGJlaGluZCwgRk9MSU9fSEVBRF9QQUdFKVxcbiA2MDI6XFx0XFx0X19GT0xJT19TRVRfRkxBRyhkcm9wYmVoaW5kLCBGT0xJT19IRUFEX1BBR0UpXFxuIDYwMzpcXHRcXG4gNjA0OlxcdCNpZmRlZiBDT05GSUdfSElHSE1FTVxcbiA2MDU6XFx0LypcXG4gNjA2OlxcdCAqIE11c3QgdXNlIGEgbWFjcm8gaGVyZSBkdWUgdG8gaGVhZGVyIGRlcGVuZGVuY3kgaXNzdWVzLiBwYWdlX3pvbmUoKSBpcyBub3RcXG4gNjA3OlxcdCAqIGF2YWlsYWJsZSBhdCB0aGlzIHBvaW50LlxcbiA2MDg6XFx0ICovXFxuIDYwOTpcXHQjZGVmaW5lIFBhZ2VIaWdoTWVtKF9fcCkgaXNfaGlnaG1lbV9pZHgocGFnZV96b25lbnVtKF9fcCkpXFxuIDYxMDpcXHQjZGVmaW5lIGZvbGlvX3Rlc3RfaGlnaG1lbShfX2YpXFx0aXNfaGlnaG1lbV9pZHgoZm9saW9fem9uZW51bShfX2YpKVxcbiA2MTE6XFx0I2Vsc2VcXG4gNjEyOlxcdFBBR0VGTEFHX0ZBTFNFKEhpZ2hNZW0sIGhpZ2htZW0pXFxuIDYxMzpcXHQjZW5kaWZcXG4gNjE0OlxcdCNkZWZpbmUgUGh5c0hpZ2hNZW0oX19wKSAoUGFnZUhpZ2hNZW0ocGh5c190b19wYWdlKF9fcCkpKVxcbiA2MTU6XFx0XFxuIDYxNjpcXHQvKiBEb2VzIGttYXBfbG9jYWxfZm9saW8oKSBvbmx5IGFsbG93IGFjY2VzcyB0byBvbmUgcGFnZSBvZiB0aGUgZm9saW8/ICovXFxuIDYxNzpcXHQjaWZkZWYgQ09ORklHX0RFQlVHX0tNQVBfTE9DQUxfRk9SQ0VfTUFQXFxuIDYxODpcXHQjZGVmaW5lIGZvbGlvX3Rlc3RfcGFydGlhbF9rbWFwKGYpXFx0dHJ1ZVxcbiA2MTk6XFx0I2Vsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzg6MzAuMTg0OTE5MzY1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzMjkwNTI1OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZXNlIGZsYWdzIGFyZSBkb2luZyBpbiB0aGUga2VybmVsLCBzbyBmaXJzdCB0aGluZ3MgZmlyc3Q6IEknbSBnb2luZyB0byBwdWxsIHVwIHRoZSBkZWZpbml0aW9ucyBmb3IgYFRFU1RQQUdFRkxBR2AsIGBURVNUU0NGTEFHYCwgYEZPTElPX1RFU1RfRkxBR2AsIGFuZCBgRk9MSU9fVEVTVF9TRVRfRkxBR2AuIEknbGwgYmUgY2hlY2tpbmcgYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYCDigJMgdGhhdCdzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIGZpbmQgdGhlbSwgZ2l2ZW4gdGhlIGZpbGVuYW1lcyBJIGhhdmUuIEkgZXhwZWN0IHRoYXQgSSdsbCBmaW5kIHRoZXNlIGFyZSBzb21lIGtpbmQgb2YgdGVzdCBvciBkZWJ1Z2dpbmcgZmxhZ3MgcmVsYXRlZCB0byBwYWdlIG1hbmFnZW1lbnQgb3IgZm9saW9zLCBidXQgSSBuZWVkIHRoZSBwcmVjaXNlIGRlZmluaXRpb25zIHRvIHVuZGVyc3RhbmQgdGhlaXIgc3BlY2lmaWMgcHVycG9zZSBhbmQgaG93IHRoZXkncmUgaW50ZW5kZWQgdG8gYmUgdXNlZC4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzczNywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzg6MzMuNTEzOTc2MDU2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjI4OTgxMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2RlZmluZSBGT0xJT19URVNUX0ZMQUdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9MzUwPXN0YXRpYyB1bnNpZ25lZCBsb25nICpmb2xpb19mbGFncyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBuKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNDA5LSAqL1xcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjQxMDojZGVmaW5lIEZPTElPX1RFU1RfRkxBRyhuYW1lLCBwYWdlKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC00MTEtc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGZvbGlvX3Rlc3RfIyNuYW1lKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pIFxcXFxcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTQ3NT1zdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBUZXN0Q2xlYXJQYWdlIyN1bmFtZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC00OTEtXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6NDkyOiNkZWZpbmUgRk9MSU9fVEVTVF9GTEFHX0ZBTFNFKG5hbWUpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTQ5My1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fdGVzdF8jI25hbWUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXHRcXHRcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjM4OjM0LjIzNjg4MjI2M1oiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzk1ODY1Mjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBwYWdlLWZsYWdzLmhgKipcblxuQWxyaWdodCwgbGV0J3MgemVybyBpbiBvbiBsaW5lcyAzODAgdGhyb3VnaCA0NTAgd2l0aGluIGBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaGAuIEknbSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGUga2VybmVsIGRlZmluZXMgYW5kIG1hbmlwdWxhdGVzIHBhZ2UgZmxhZ3MgaW4gdGhpcyByZWdpb24gb2YgdGhlIGhlYWRlciBmaWxlLiBJIGFudGljaXBhdGUgZmluZGluZyBrZXkgbWFjcm9zIGFuZCBlbnVtZXJhdGlvbnMgdGhhdCByZWxhdGUgdG8gcGFnZSBzdGF0ZSB0cmFuc2l0aW9ucywgcHJvdGVjdGlvbiBsZXZlbHMsIGFuZCBhbGxvY2F0aW9uIG1ldGFkYXRhLiBHaXZlbiB0aGUgY29udGV4dCBvZiB0aGUgYHBhZ2UtZmxhZ3MuaGAgaGVhZGVyLCBJIGV4cGVjdCB0byBlbmNvdW50ZXIgZGV0YWlscyBhcm91bmQgZmxhZ3MgYXNzb2NpYXRlZCB3aXRoIGh1Z2UgcGFnZSBtYW5hZ2VtZW50LCBOVU1BIG5vZGVzLCBvciBwb3NzaWJseSBldmVuIGZsYWdzIHJlbGF0ZWQgdG8gZGlmZmVyZW50IG1lbW9yeSB0aWVycyBpZiB0aGlzIGNvZGUgaXMgcmVsYXRpdmVseSByZWNlbnQuIEknbSBnb2luZyB0byBsb29rIGZvciBhbnkgc3VidGxlIHNoaWZ0cyBmcm9tIHRoZSBtb3JlIGZvdW5kYXRpb25hbCBwYWdlIGZsYWdzLCBhcyB0aGlzIHBhcnQgb2YgdGhlIGZpbGUgdGVuZHMgdG8gaG91c2UgdGhlIG1vcmUgc3BlY2lmaWMsIGxlc3MgZnJlcXVlbnRseSB0b3VjaGVkIGZsYWdzLiBNeSBnb2FsIGlzIHRvIGdyYXNwIHRoZSBncmFudWxhcml0eSBvZiBjb250cm9sIHRoZSBrZXJuZWwgaGFzIG92ZXIgcGh5c2ljYWwgcGFnZXMgYXQgdGhpcyBsZXZlbC4gTGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgbmV3IG9yIGV2b2x2aW5nIHBhdHRlcm5zIEkgbWlnaHQgaGF2ZSBtaXNzZWQgaW4gcHJldmlvdXMgcmV2aWV3cyBvZiB0aGlzIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyMTUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjozODozNi42MzI3NTE1MjhaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE0NjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM4MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM4MDpcXHQgKiAgICAgdGhlIHBhZ2UgZmxhZyBpcyBzdG9yZWQgaW4gdGhlIGZpcnN0IHRhaWwgcGFnZS5cXG4gMzgxOlxcdCAqL1xcbiAzODI6XFx0I2RlZmluZSBQRl9QT0lTT05FRF9DSEVDSyhwYWdlKSAoe1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMzgzOlxcdFxcdFxcdFZNX0JVR19PTl9QR0ZMQUdTKFBhZ2VQb2lzb25lZChwYWdlKSwgcGFnZSk7XFx0XFx0XFxcXFxcbiAzODQ6XFx0XFx0XFx0cGFnZTsgfSlcXG4gMzg1OlxcdCNkZWZpbmUgUEZfQU5ZKHBhZ2UsIGVuZm9yY2UpXFx0UEZfUE9JU09ORURfQ0hFQ0socGFnZSlcXG4gMzg2OlxcdCNkZWZpbmUgUEZfSEVBRChwYWdlLCBlbmZvcmNlKVxcdFBGX1BPSVNPTkVEX0NIRUNLKGNvbXBvdW5kX2hlYWQocGFnZSkpXFxuIDM4NzpcXHQjZGVmaW5lIFBGX05PX1RBSUwocGFnZSwgZW5mb3JjZSkgKHtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDM4ODpcXHRcXHRcXHRWTV9CVUdfT05fUEdGTEFHUyhlbmZvcmNlIFxcdTAwMjZcXHUwMDI2IFBhZ2VUYWlsKHBhZ2UpLCBwYWdlKTtcXHRcXFxcXFxuIDM4OTpcXHRcXHRcXHRQRl9QT0lTT05FRF9DSEVDSyhjb21wb3VuZF9oZWFkKHBhZ2UpKTsgfSlcXG4gMzkwOlxcdCNkZWZpbmUgUEZfTk9fQ09NUE9VTkQocGFnZSwgZW5mb3JjZSkgKHtcXHRcXHRcXHRcXHRcXFxcXFxuIDM5MTpcXHRcXHRcXHRWTV9CVUdfT05fUEdGTEFHUyhlbmZvcmNlIFxcdTAwMjZcXHUwMDI2IFBhZ2VDb21wb3VuZChwYWdlKSwgcGFnZSk7XFx0XFxcXFxcbiAzOTI6XFx0XFx0XFx0UEZfUE9JU09ORURfQ0hFQ0socGFnZSk7IH0pXFxuIDM5MzpcXHQjZGVmaW5lIFBGX1NFQ09ORChwYWdlLCBlbmZvcmNlKSAoe1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMzk0OlxcdFxcdFxcdFZNX0JVR19PTl9QR0ZMQUdTKCFQYWdlSGVhZChwYWdlKSwgcGFnZSk7XFx0XFx0XFxcXFxcbiAzOTU6XFx0XFx0XFx0UEZfUE9JU09ORURfQ0hFQ0soXFx1MDAyNnBhZ2VbMV0pOyB9KVxcbiAzOTY6XFx0XFxuIDM5NzpcXHQvKiBXaGljaCBwYWdlIGlzIHRoZSBmbGFnIHN0b3JlZCBpbiAqL1xcbiAzOTg6XFx0I2RlZmluZSBGT0xJT19QRl9BTllcXHRcXHQwXFxuIDM5OTpcXHQjZGVmaW5lIEZPTElPX1BGX0hFQURcXHRcXHQwXFxuIDQwMDpcXHQjZGVmaW5lIEZPTElPX1BGX05PX1RBSUxcXHQwXFxuIDQwMTpcXHQjZGVmaW5lIEZPTElPX1BGX05PX0NPTVBPVU5EXFx0MFxcbiA0MDI6XFx0I2RlZmluZSBGT0xJT19QRl9TRUNPTkRcXHRcXHQxXFxuIDQwMzpcXHRcXG4gNDA0OlxcdCNkZWZpbmUgRk9MSU9fSEVBRF9QQUdFXFx0XFx0MFxcbiA0MDU6XFx0I2RlZmluZSBGT0xJT19TRUNPTkRfUEFHRVxcdDFcXG4gNDA2OlxcdFxcbiA0MDc6XFx0LypcXG4gNDA4OlxcdCAqIE1hY3JvcyB0byBjcmVhdGUgZnVuY3Rpb24gZGVmaW5pdGlvbnMgZm9yIHBhZ2UgZmxhZ3NcXG4gNDA5OlxcdCAqL1xcbiA0MTA6XFx0I2RlZmluZSBGT0xJT19URVNUX0ZMQUcobmFtZSwgcGFnZSlcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDQxMTpcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgZm9saW9fdGVzdF8jI25hbWUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykgXFxcXFxcbiA0MTI6XFx0eyByZXR1cm4gdGVzdF9iaXQoUEdfIyNuYW1lLCBjb25zdF9mb2xpb19mbGFncyhmb2xpbywgcGFnZSkpOyB9XFxuIDQxMzpcXHRcXG4gNDE0OlxcdCNkZWZpbmUgRk9MSU9fU0VUX0ZMQUcobmFtZSwgcGFnZSlcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDQxNTpcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgZm9saW9fc2V0XyMjbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcdFxcXFxcXG4gNDE2OlxcdHsgc2V0X2JpdChQR18jI25hbWUsIGZvbGlvX2ZsYWdzKGZvbGlvLCBwYWdlKSk7IH1cXG4gNDE3OlxcdFxcbiA0MTg6XFx0I2RlZmluZSBGT0xJT19DTEVBUl9GTEFHKG5hbWUsIHBhZ2UpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA0MTk6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGZvbGlvX2NsZWFyXyMjbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcdFxcXFxcXG4gNDIwOlxcdHsgY2xlYXJfYml0KFBHXyMjbmFtZSwgZm9saW9fZmxhZ3MoZm9saW8sIHBhZ2UpKTsgfVxcbiA0MjE6XFx0XFxuIDQyMjpcXHQjZGVmaW5lIF9fRk9MSU9fU0VUX0ZMQUcobmFtZSwgcGFnZSlcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDQyMzpcXHRzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19mb2xpb19zZXRfIyNuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXFx0XFxcXFxcbiA0MjQ6XFx0eyBfX3NldF9iaXQoUEdfIyNuYW1lLCBmb2xpb19mbGFncyhmb2xpbywgcGFnZSkpOyB9XFxuIDQyNTpcXHRcXG4gNDI2OlxcdCNkZWZpbmUgX19GT0xJT19DTEVBUl9GTEFHKG5hbWUsIHBhZ2UpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA0Mjc6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fZm9saW9fY2xlYXJfIyNuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXFx0XFxcXFxcbiA0Mjg6XFx0eyBfX2NsZWFyX2JpdChQR18jI25hbWUsIGZvbGlvX2ZsYWdzKGZvbGlvLCBwYWdlKSk7IH1cXG4gNDI5OlxcdFxcbiA0MzA6XFx0I2RlZmluZSBGT0xJT19URVNUX1NFVF9GTEFHKG5hbWUsIHBhZ2UpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA0MzE6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGZvbGlvX3Rlc3Rfc2V0XyMjbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcdFxcXFxcXG4gNDMyOlxcdHsgcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoUEdfIyNuYW1lLCBmb2xpb19mbGFncyhmb2xpbywgcGFnZSkpOyB9XFxuIDQzMzpcXHRcXG4gNDM0OlxcdCNkZWZpbmUgRk9MSU9fVEVTVF9DTEVBUl9GTEFHKG5hbWUsIHBhZ2UpXFx0XFx0XFx0XFx0XFxcXFxcbiA0MzU6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGZvbGlvX3Rlc3RfY2xlYXJfIyNuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pIFxcXFxcXG4gNDM2OlxcdHsgcmV0dXJuIHRlc3RfYW5kX2NsZWFyX2JpdChQR18jI25hbWUsIGZvbGlvX2ZsYWdzKGZvbGlvLCBwYWdlKSk7IH1cXG4gNDM3OlxcdFxcbiA0Mzg6XFx0I2RlZmluZSBGT0xJT19GTEFHKG5hbWUsIHBhZ2UpXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA0Mzk6XFx0Rk9MSU9fVEVTVF9GTEFHKG5hbWUsIHBhZ2UpXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA0NDA6XFx0Rk9MSU9fU0VUX0ZMQUcobmFtZSwgcGFnZSlcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDQ0MTpcXHRGT0xJT19DTEVBUl9GTEFHKG5hbWUsIHBhZ2UpXFxuIDQ0MjpcXHRcXG4gNDQzOlxcdCNkZWZpbmUgVEVTVFBBR0VGTEFHKHVuYW1lLCBsbmFtZSwgcG9saWN5KVxcdFxcdFxcdFxcdFxcXFxcXG4gNDQ0OlxcdEZPTElPX1RFU1RfRkxBRyhsbmFtZSwgRk9MSU9fIyNwb2xpY3kpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA0NDU6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgUGFnZSMjdW5hbWUoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFx0XFx0XFxcXFxcbiA0NDY6XFx0eyByZXR1cm4gdGVzdF9iaXQoUEdfIyNsbmFtZSwgXFx1MDAyNnBvbGljeShwYWdlLCAwKS1cXHUwMDNlZmxhZ3MuZik7IH1cXG4gNDQ3OlxcdFxcbiA0NDg6XFx0I2RlZmluZSBTRVRQQUdFRkxBRyh1bmFtZSwgbG5hbWUsIHBvbGljeSlcXHRcXHRcXHRcXHRcXFxcXFxuIDQ0OTpcXHRGT0xJT19TRVRfRkxBRyhsbmFtZSwgRk9MSU9fIyNwb2xpY3kpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA0NTA6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIFNldFBhZ2UjI3VuYW1lKHN0cnVjdCBwYWdlICpwYWdlKVxcdFxcdFxcXFxcXG4gNDUxOlxcdHsgc2V0X2JpdChQR18jI2xuYW1lLCBcXHUwMDI2cG9saWN5KHBhZ2UsIDEpLVxcdTAwM2VmbGFncy5mKTsgfVxcbiA0NTI6XFx0XFxuIDQ1MzpcXHQjZGVmaW5lIENMRUFSUEFHRUZMQUcodW5hbWUsIGxuYW1lLCBwb2xpY3kpXFx0XFx0XFx0XFx0XFxcXFxcbiA0NTQ6XFx0Rk9MSU9fQ0xFQVJfRkxBRyhsbmFtZSwgRk9MSU9fIyNwb2xpY3kpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiA0NTU6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIENsZWFyUGFnZSMjdW5hbWUoc3RydWN0IHBhZ2UgKnBhZ2UpXFx0XFx0XFxcXFxcbiA0NTY6XFx0eyBjbGVhcl9iaXQoUEdfIyNsbmFtZSwgXFx1MDAyNnBvbGljeShwYWdlLCAxKS1cXHUwMDNlZmxhZ3MuZik7IH1cXG4gNDU3OlxcdFxcbiA0NTg6XFx0I2RlZmluZSBfX1NFVFBBR0VGTEFHKHVuYW1lLCBsbmFtZSwgcG9saWN5KVxcdFxcdFxcdFxcdFxcXFxcXG4gNDU5OlxcdF9fRk9MSU9fU0VUX0ZMQUcobG5hbWUsIEZPTElPXyMjcG9saWN5KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzg6MzYuNjMzMDY4ODg4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY0OTU3OTU4NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmYWN0b3JpbmcgUGFnZS9Gb2xpbyBXcml0ZWJhY2sgRmxhZ3M6IEEgS01TQU4gUGVyc3BlY3RpdmUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFByZXZpb3VzbHksIHdlIGhhZCBgVEVTVFBBR0VGTEFHYCBhbmQgYFRFU1RTQ0ZMQUdgIG1hY3JvcyB0aGF0LCBpbiB0aGUgY29udGV4dCBvZiB0aGUgYHdyaXRlYmFja2AgZmxhZywgZXNzZW50aWFsbHkgbWFwcGVkIHRvIGBQYWdlV3JpdGViYWNrYCBhbmQgYFRlc3RTZXRQYWdlV3JpdGViYWNrYCBmdW5jdGlvbnMgb3BlcmF0aW5nIG9uIHBhZ2Ugc3RydWN0dXJlcy4gVGhpcyBzZWVtcyBzdHJhaWdodGZvcndhcmQsIGJ1dCBub3cgd2UncmUgbW9kZXJuaXppbmcgdGhpcy4gVGhlIGNvZGUgaXMgYmVpbmcgdXBkYXRlZCB0byB1c2UgYEZPTElPX1RFU1RfRkxBR2AgYW5kIGBGT0xJT19URVNUX1NFVF9GTEFHYCB3aXRoIGBGT0xJT19IRUFEX1BBR0VgLCB3aGljaCwgYXQgYSBoaWdoIGxldmVsLCBpcyByZXBsYWNpbmcgdGhlIG9sZCBwYWdlLWNlbnRyaWMgaGVscGVycyB3aXRoIGZvbGlvLWNlbnRyaWMgaGVscGVycyBmb3Igd3JpdGViYWNrIG1hbmFnZW1lbnQuXG5cblNwZWNpZmljYWxseSwgdGhlIG9sZCBtYWNyb3Mgd2VyZSBlZmZlY3RpdmVseSBjYWxsaW5nIGBmb2xpb190ZXN0X3dyaXRlYmFja2AgYW5kIGBmb2xpb190ZXN0X3NldF93cml0ZWJhY2tgIGZ1bmN0aW9ucyB3aGljaCBJIHNob3VsZCBub3RlLCBhcmUgZGVmaW5lZCB3aXRoIGBGT0xJT19QRl9OT19UQUlMYC5cblxuVGhpcyB0cmFuc2l0aW9uIGVmZmVjdGl2ZWx5IHJlbW92ZXMsIG9yIGF0IGxlYXN0IHJlbG9jYXRlcywgdGhlIGBQYWdlV3JpdGViYWNrYCwgYFRlc3RTZXRQYWdlV3JpdGViYWNrYCwgYW5kIGBUZXN0Q2xlYXJQYWdlV3JpdGViYWNrYCBoZWxwZXJzLCBub3cgdXNpbmcgZXF1aXZhbGVudCBmb2xpbyBoZWxwZXJzLCB3aXRoIGBmb2xpb190ZXN0X3dyaXRlYmFja2AsIGBmb2xpb190ZXN0X3NldF93cml0ZWJhY2tgLCBhbmQgYGZvbGlvX3Rlc3RfY2xlYXJfd3JpdGViYWNrYC5cblxuVGhpcyBpcyBhIHByZXR0eSBjbGVhbiByZWZhY3RvcmluZzsgaXQncyBhIG1hY3JvIHJlcGxhY2VtZW50IGFuZCBmbGFnIGhlbHBlciBjaGFuZ2UgcHJpbWFyaWx5IGZvciB0aGUgYHdyaXRlYmFja2AgZmxhZy4gU28sIHRoZSBrZXkgcXVlc3Rpb24gaXM6IGRvZXMgdGhpcyBjaGFuZ2UgZXhwb3NlIGFueSBuZXcsIHByZXZpb3VzbHkgdW5hZGRyZXNzZWQsIEtNU0FOLXJlbGV2YW50IG1lbW9yeSBpc3N1ZXM/IExldCdzIGFuYWx5emUuXG5cbkkndmUgZ290IHRvIGNvbnNpZGVyIHBvdGVudGlhbCByaXNrczoga2VybmVsIHN0cnVjdHVyZXMgYmVpbmcgY29waWVkIHRvIHVzZXJzcGFjZSwgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzIG9yIHBhZGRpbmcsIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSwgYWxsb2NhdGlvbnMgb3IgYnVmZmVycyB3aXRob3V0IHplcm9pbmcsIGFuZCBhbnkgYWx0ZXJhdGlvbiBvZiBsZW5ndGggb3IgYm91bmRzIGNoZWNrcyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIE5vbmUgb2YgdGhlc2Ugc2NlbmFyaW9zIHNlZW0gdG8gYmUgcHJlc2VudCBoZXJlLlxuXG5HaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2UgYW5kIHRoZSBhYnNlbmNlIG9mIGFueSBvYnZpb3VzIG5ldyB2dWxuZXJhYmlsaXRpZXMsIEknbSBjb25maWRlbnQgdGhpcyByZWZhY3RvcmluZyBkb2Vzbid0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVhayByaXNrcyB0aGF0IHdvdWxkIHNwZWNpZmljYWxseSB3YXJyYW50IEtNU0FOLiBLQVNBTiBhbmQgc3RhbmRhcmQgc2FuaXRpemVycyBoYW5kbGUgYW55IG1lbW9yeSBpc3N1ZXMgaWYgY2FsbGVycyBwYXNzIGJhZCBwYWdlL2ZvbGlvIHBvaW50ZXJzLCB3aGljaCB0aGlzIGNoYW5nZSBpdHNlbGYgZG9lc24ndCBpbnRyb2R1Y2UuXG5cblRoZXJlZm9yZSwgdGhlIGBOZWVkc0tNU0FOYCBmbGFnIGNhbiBiZSBzZXQgdG8gYGZhbHNlYC4gVGltZSB0byBtb3ZlIGZvcndhcmQgd2l0aCB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGFuZCBwcmVwYXJlIGEgY29uY2lzZSBmaW5hbCByZXBseSB0aGF0IGhpZ2hsaWdodHMgdGhlIGNvbnRyYXN0IGJldHdlZW4gS0FTQU4gYW5kIEtNU0FOIGFwcGxpY2FiaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMjcsIk91dHB1dFRva2VucyI6MjA0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6Mzg6NDMuMTI4ODcxMTIzWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzEwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb252ZXJ0cyB0aGUgcGFnZSBmbGFnIGRlZmluaXRpb25zIGZvciBQR193cml0ZWJhY2sgZnJvbSBsZWdhY3kgcGFnZS1iYXNlZCBtYWNyb3MgKFRFU1RQQUdFRkxBRyAvIFRFU1RTQ0ZMQUcpIHRvIGZvbGlvLWJhc2VkIG1hY3JvcyAoRk9MSU9fVEVTVF9GTEFHIC8gRk9MSU9fVEVTVF9TRVRfRkxBRykuIFxcblxcblRoaXMgaXMgYSB0eXBlLXNhZmUgbWFjcm8gcmVmYWN0b3JpbmcgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgb3BlcmF0ZXMgcHVyZWx5IG9uIHBhZ2UvZm9saW8gYml0IGZsYWdzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIGFsbG9jYXRlLCBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzdHJ1Y3QgcGFkZGluZywgdXNlci1jb3B5IGJ1ZmZlcnMsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFueSBtZW1vcnkgc2FmZXR5IGlzc3VlcyB0aGF0IGNvdWxkIGFyaXNlIGZyb20gaW52YWxpZCBmb2xpby9wYWdlIHJlZmVyZW5jZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3Igb3V0LW9mLWJvdW5kcyBwYWdlIGFjY2VzcykgYXJlIGFscmVhZHkgY292ZXJlZCBieSBLQVNBTiBhbmQgcGFnZSBmbGFnIGRlYnVnIGNoZWNrcyAoVk1fQlVHX09OX1BHRkxBR1MpLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mb3JtYXRpb24gbGVhayByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnZlcnRzIHRoZSBwYWdlIGZsYWcgZGVmaW5pdGlvbnMgZm9yIFBHX3dyaXRlYmFjayBmcm9tIGxlZ2FjeSBwYWdlLWJhc2VkIG1hY3JvcyAoVEVTVFBBR0VGTEFHIC8gVEVTVFNDRkxBRykgdG8gZm9saW8tYmFzZWQgbWFjcm9zIChGT0xJT19URVNUX0ZMQUcgLyBGT0xJT19URVNUX1NFVF9GTEFHKS4gXFxuXFxuVGhpcyBpcyBhIHR5cGUtc2FmZSBtYWNybyByZWZhY3RvcmluZyBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBvcGVyYXRlcyBwdXJlbHkgb24gcGFnZS9mb2xpbyBiaXQgZmxhZ3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgYWxsb2NhdGUsIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIHN0cnVjdCBwYWRkaW5nLCB1c2VyLWNvcHkgYnVmZmVycywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQW55IG1lbW9yeSBzYWZldHkgaXNzdWVzIHRoYXQgY291bGQgYXJpc2UgZnJvbSBpbnZhbGlkIGZvbGlvL3BhZ2UgcmVmZXJlbmNlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIHBhZ2UgYWNjZXNzKSBhcmUgYWxyZWFkeSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBwYWdlIGZsYWcgZGVidWcgY2hlY2tzIChWTV9CVUdfT05fUEdGTEFHUykuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvcm1hdGlvbiBsZWFrIHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbpz6r[1] Phase: Succeeded StartedAt: 2026-09-06 16:38:53 +0000 UTC FinishedAt: 2026-09-06 16:38:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbpz6r[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-06 16:38:53 +0000 UTC FinishedAt: 2026-09-06 16:38:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbpz6r[2] Phase: Succeeded StartedAt: 2026-09-06 16:38:53 +0000 UTC FinishedAt: 2026-09-06 20:28:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbpz6r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_start_writeback","folio_end_writeback","folio_wait_writeback","folio_end_writeback_no_dropbehind"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"3bc64f8e-3527-41a3-85a4-2700cf1ff8bf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-06 16:38:53 +0000 UTC FinishedAt: 2026-09-06 20:28:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_start_writeback","folio_end_writeback","folio_wait_writeback","folio_end_writeback_no_dropbehind"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"3bc64f8e-3527-41a3-85a4-2700cf1ff8bf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowbpz6r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_start_writeback","folio_end_writeback","folio_wait_writeback","folio_end_writeback_no_dropbehind"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"3bc64f8e-3527-41a3-85a4-2700cf1ff8bf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-06 16:38:53 +0000 UTC FinishedAt: 2026-09-06 16:39:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbpz6r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_start_writeback","folio_end_writeback","folio_wait_writeback","folio_end_writeback_no_dropbehind"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"3bc64f8e-3527-41a3-85a4-2700cf1ff8bf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-06 16:38:53 +0000 UTC FinishedAt: 2026-09-06 16:39:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbpz6r/series-workflowbpz6r-convert-artifact-1462271686/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbpz6r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_start_writeback","folio_end_writeback","folio_wait_writeback","folio_end_writeback_no_dropbehind"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"3bc64f8e-3527-41a3-85a4-2700cf1ff8bf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-06 16:39:04 +0000 UTC FinishedAt: 2026-09-06 17:00:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbpz6r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_start_writeback","folio_end_writeback","folio_wait_writeback","folio_end_writeback_no_dropbehind"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"3bc64f8e-3527-41a3-85a4-2700cf1ff8bf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-06 16:39:04 +0000 UTC FinishedAt: 2026-09-06 17:00:21 +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:*e30f2bdb-f001-4582-9bb6-26c925bb55fe,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-workflowbpz6r/series-workflowbpz6r-convert-artifact-1462271686/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": "ba8bb880-19fe-469d-a614-a8ee0ee94894", "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-workflowbpz6r/series-workflowbpz6r-build-action-2736082012/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbpz6r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_start_writeback","folio_end_writeback","folio_wait_writeback","folio_end_writeback_no_dropbehind"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"3bc64f8e-3527-41a3-85a4-2700cf1ff8bf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-06 16:39:04 +0000 UTC FinishedAt: 2026-09-06 17:00:11 +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:*e30f2bdb-f001-4582-9bb6-26c925bb55fe,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-workflowbpz6r/series-workflowbpz6r-convert-artifact-1462271686/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": "ba8bb880-19fe-469d-a614-a8ee0ee94894", "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-workflowbpz6r/series-workflowbpz6r-build-action-2736082012/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbpz6r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_start_writeback","folio_end_writeback","folio_wait_writeback","folio_end_writeback_no_dropbehind"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"3bc64f8e-3527-41a3-85a4-2700cf1ff8bf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-06 17:00:21 +0000 UTC FinishedAt: 2026-09-06 17:00:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbpz6r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_start_writeback","folio_end_writeback","folio_wait_writeback","folio_end_writeback_no_dropbehind"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"3bc64f8e-3527-41a3-85a4-2700cf1ff8bf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-06 17:00:21 +0000 UTC FinishedAt: 2026-09-06 17:00:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbpz6r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_start_writeback","folio_end_writeback","folio_wait_writeback","folio_end_writeback_no_dropbehind"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"3bc64f8e-3527-41a3-85a4-2700cf1ff8bf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-06 17:00:21 +0000 UTC FinishedAt: 2026-09-06 17:00:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbpz6r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_start_writeback","folio_end_writeback","folio_wait_writeback","folio_end_writeback_no_dropbehind"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"3bc64f8e-3527-41a3-85a4-2700cf1ff8bf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-06 17:00:21 +0000 UTC FinishedAt: 2026-09-06 17:00:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"3bc64f8e-3527-41a3-85a4-2700cf1ff8bf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbpz6r/series-workflowbpz6r-convert-artifact-3446192921/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbpz6r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_start_writeback","folio_end_writeback","folio_wait_writeback","folio_end_writeback_no_dropbehind"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"3bc64f8e-3527-41a3-85a4-2700cf1ff8bf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-06 17:00:31 +0000 UTC FinishedAt: 2026-09-06 17:02:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbpz6r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_start_writeback","folio_end_writeback","folio_wait_writeback","folio_end_writeback_no_dropbehind"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"3bc64f8e-3527-41a3-85a4-2700cf1ff8bf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-06 17:00:31 +0000 UTC FinishedAt: 2026-09-06 17:02:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ba8bb880-19fe-469d-a614-a8ee0ee94894,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-workflowbpz6r/series-workflowbpz6r-build-action-2736082012/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-workflowbpz6r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_start_writeback","folio_end_writeback","folio_wait_writeback","folio_end_writeback_no_dropbehind"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"3bc64f8e-3527-41a3-85a4-2700cf1ff8bf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-06 17:02:12 +0000 UTC FinishedAt: 2026-09-06 17:02:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbpz6r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_start_writeback","folio_end_writeback","folio_wait_writeback","folio_end_writeback_no_dropbehind"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"3bc64f8e-3527-41a3-85a4-2700cf1ff8bf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-06 17:02:12 +0000 UTC FinishedAt: 2026-09-06 17:02:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbpz6r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_start_writeback","folio_end_writeback","folio_wait_writeback","folio_end_writeback_no_dropbehind"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"3bc64f8e-3527-41a3-85a4-2700cf1ff8bf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-06 17:02:12 +0000 UTC FinishedAt: 2026-09-06 17:23:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbpz6r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_start_writeback","folio_end_writeback","folio_wait_writeback","folio_end_writeback_no_dropbehind"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"3bc64f8e-3527-41a3-85a4-2700cf1ff8bf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-06 17:02:12 +0000 UTC FinishedAt: 2026-09-06 17:23:15 +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:*e30f2bdb-f001-4582-9bb6-26c925bb55fe,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-workflowbpz6r/series-workflowbpz6r-convert-artifact-3446192921/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": "77c2a9e0-f11e-47d4-8a6f-dfc1414c0c32", "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-workflowbpz6r/series-workflowbpz6r-build-action-1095944821/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbpz6r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_start_writeback","folio_end_writeback","folio_wait_writeback","folio_end_writeback_no_dropbehind"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"3bc64f8e-3527-41a3-85a4-2700cf1ff8bf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-06 17:02:12 +0000 UTC FinishedAt: 2026-09-06 17:23:05 +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:*e30f2bdb-f001-4582-9bb6-26c925bb55fe,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-workflowbpz6r/series-workflowbpz6r-convert-artifact-3446192921/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": "77c2a9e0-f11e-47d4-8a6f-dfc1414c0c32", "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-workflowbpz6r/series-workflowbpz6r-build-action-1095944821/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbpz6r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_start_writeback","folio_end_writeback","folio_wait_writeback","folio_end_writeback_no_dropbehind"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"3bc64f8e-3527-41a3-85a4-2700cf1ff8bf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-06 17:23:15 +0000 UTC FinishedAt: 2026-09-06 17:23:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbpz6r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_start_writeback","folio_end_writeback","folio_wait_writeback","folio_end_writeback_no_dropbehind"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"3bc64f8e-3527-41a3-85a4-2700cf1ff8bf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-06 17:23:15 +0000 UTC FinishedAt: 2026-09-06 17:23:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbpz6r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_start_writeback","folio_end_writeback","folio_wait_writeback","folio_end_writeback_no_dropbehind"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"3bc64f8e-3527-41a3-85a4-2700cf1ff8bf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-06 17:23:15 +0000 UTC FinishedAt: 2026-09-06 17:24:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbpz6r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_start_writeback","folio_end_writeback","folio_wait_writeback","folio_end_writeback_no_dropbehind"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"3bc64f8e-3527-41a3-85a4-2700cf1ff8bf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-06 17:23:15 +0000 UTC FinishedAt: 2026-09-06 17:24:47 +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:*77c2a9e0-f11e-47d4-8a6f-dfc1414c0c32,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-workflowbpz6r/series-workflowbpz6r-build-action-1095944821/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-workflowbpz6r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_start_writeback","folio_end_writeback","folio_wait_writeback","folio_end_writeback_no_dropbehind"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"3bc64f8e-3527-41a3-85a4-2700cf1ff8bf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-06 17:24:57 +0000 UTC FinishedAt: 2026-09-06 20:28:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbpz6r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_start_writeback","folio_end_writeback","folio_wait_writeback","folio_end_writeback_no_dropbehind"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"3bc64f8e-3527-41a3-85a4-2700cf1ff8bf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-06 17:24:57 +0000 UTC FinishedAt: 2026-09-06 20:28:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_start_writeback","folio_end_writeback","folio_wait_writeback","folio_end_writeback_no_dropbehind"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*ba8bb880-19fe-469d-a614-a8ee0ee94894,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*77c2a9e0-f11e-47d4-8a6f-dfc1414c0c32,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-workflowbpz6r/series-workflowbpz6r-build-action-2736082012/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-workflowbpz6r/series-workflowbpz6r-build-action-1095944821/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowbpz6r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_start_writeback","folio_end_writeback","folio_wait_writeback","folio_end_writeback_no_dropbehind"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"3bc64f8e-3527-41a3-85a4-2700cf1ff8bf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-06 17:24:57 +0000 UTC FinishedAt: 2026-09-06 17:25:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbpz6r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_start_writeback","folio_end_writeback","folio_wait_writeback","folio_end_writeback_no_dropbehind"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"3bc64f8e-3527-41a3-85a4-2700cf1ff8bf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-06 17:24:57 +0000 UTC FinishedAt: 2026-09-06 17:25:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_start_writeback","folio_end_writeback","folio_wait_writeback","folio_end_writeback_no_dropbehind"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbpz6r/series-workflowbpz6r-convert-artifact-2656198670/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbpz6r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_start_writeback","folio_end_writeback","folio_wait_writeback","folio_end_writeback_no_dropbehind"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"3bc64f8e-3527-41a3-85a4-2700cf1ff8bf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-06 17:24:57 +0000 UTC FinishedAt: 2026-09-06 17:24:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbpz6r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_start_writeback","folio_end_writeback","folio_wait_writeback","folio_end_writeback_no_dropbehind"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"3bc64f8e-3527-41a3-85a4-2700cf1ff8bf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-06 17:24:57 +0000 UTC FinishedAt: 2026-09-06 17:24:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbpz6r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_start_writeback","folio_end_writeback","folio_wait_writeback","folio_end_writeback_no_dropbehind"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"3bc64f8e-3527-41a3-85a4-2700cf1ff8bf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-06 17:24:57 +0000 UTC FinishedAt: 2026-09-06 17:24:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbpz6r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_start_writeback","folio_end_writeback","folio_wait_writeback","folio_end_writeback_no_dropbehind"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"3bc64f8e-3527-41a3-85a4-2700cf1ff8bf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-06 17:25:07 +0000 UTC FinishedAt: 2026-09-06 20:28:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbpz6r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_start_writeback","folio_end_writeback","folio_wait_writeback","folio_end_writeback_no_dropbehind"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4e1b4014532112df280540d958895383b791d6d5","config_name":"upstream-apparmor-kasan.config","series_id":"3bc64f8e-3527-41a3-85a4-2700cf1ff8bf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-06 17:25:07 +0000 UTC FinishedAt: 2026-09-06 20:28:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ba8bb880-19fe-469d-a614-a8ee0ee94894,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*77c2a9e0-f11e-47d4-8a6f-dfc1414c0c32,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-workflowbpz6r/series-workflowbpz6r-build-action-2736082012/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-workflowbpz6r/series-workflowbpz6r-build-action-1095944821/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-workflowbpz6r/series-workflowbpz6r-convert-artifact-2656198670/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,}