Name: series-workflow7gvnm Phase: Succeeded StartedAt: 2026-08-31 02:39:06 +0000 UTC FinishedAt: 2026-08-31 06:33:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gvnm[0] Phase: Succeeded StartedAt: 2026-08-31 02:39:06 +0000 UTC FinishedAt: 2026-08-31 02:54:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gvnm[0].run-triage Phase: Succeeded StartedAt: 2026-08-31 02:39:06 +0000 UTC FinishedAt: 2026-08-31 02:54:22 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "8d6f7de2-01b7-4ca9-9c74-7f1fd932955f" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_convert_inline_data", "ext4_try_add_inline_entry" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEmIzM0OywKICAgICYjMzQ7ZXh0NF90cnlfYWRkX2lubGluZV9lbnRyeSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrYCBhbmQgaW50cm9kdWNlcyBgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2tgIHRvIHJlZmFjdG9yIGhvdyBpbmxpbmUgZGF0YSBpcyBjb252ZXJ0ZWQgdG8gYSByZWd1bGFyIGV4dGVudCBvciBibG9jayBwb2ludGVyIGluIGV4dDQuXG5cbkFuYWx5c2lzIG9mIG1lbW9yeSBoYW5kbGluZzpcbjEuIEhlYXAgYnVmZmVyczpcbiAgIC0gYGJ1ZmAgaXMgcG9wdWxhdGVkIGJ5IGBleHQ0X3JlYWRfaW5saW5lX2RhdGEoKWAgYmVmb3JlIGJlaW5nIHJlYWQuXG4gICAtIGBpX2Jsb2NrX2J1ZmAgYW5kIGB4YXR0cl9idWZgIGFyZSBhbGxvY2F0ZWQgd2l0aCBga21hbGxvYygpYCBhbmQgaW1tZWRpYXRlbHkgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGBtZW1jcHkoKWAgZnJvbSBgcmF3X2lub2RlLVx1MDAzZWlfYmxvY2tgIGFuZCBgaGVhZGVyYCByZXNwZWN0aXZlbHkuXG4gICAtIFRoZSBuZXdseSBhbGxvY2F0ZWQgYmxvY2sgYnVmZmVyIGBiaC1cdTAwM2ViX2RhdGFgIGlzIGNsZWFyZWQgdXNpbmcgYG1lbXNldChiaC1cdTAwM2ViX2RhdGEsIDAsIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUpYCBiZWZvcmUgZGF0YSBvciBkaXJlY3RvcnkgZW50cmllcyBhcmUgY29waWVkIGludG8gaXQuXG4yLiBTdGFjayBzdHJ1Y3R1cmVzOlxuICAgLSBgc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9yZXF1ZXN0IGFyYCBpcyBjbGVhcmVkIHdpdGggYG1lbXNldChcdTAwMjZhciwgMCwgc2l6ZW9mKGFyKSlgLlxuICAgLSBgc3RydWN0IGV4dDRfZXh0ZW50IG5ld2V4YCBoYXMgYWxsIGZvdXIgZmllbGRzIChgZWVfYmxvY2tgLCBgZWVfbGVuYCwgYGVlX3N0YXJ0X2xvYCwgYGVlX3N0YXJ0X2hpYCkgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cbiAgIC0gYHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQgaXNgIGFuZCBgc3RydWN0IGV4dDRfeGF0dHJfaW5mbyBpYCBhcmUgc3RhdGljYWxseSBpbml0aWFsaXplZCB3aXRoIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLlxuMy4gTm8gZGF0YSBvciBzdHJ1Y3R1cmUgd2l0aCB1bmluaXRpYWxpemVkIHBhZGRpbmcgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjb250cm9sIGZsb3cgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy5cblxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyBleHRlbnQgdHJlZSBjb3JydXB0aW9uLCBsb2NrIG9yZGVyIHZpb2xhdGlvbnMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIHNhbml0aXplcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGV4dDQgaW5saW5lIGRhdGEgY29udmVyc2lvbiBsb2dpYyBpbiBmcy9leHQ0L2lubGluZS5jLCByZXBsYWNpbmcgdGhlIGlubGluZSBkYXRhIHJlc3RvcmF0aW9uIGZsb3cgd2l0aCBhIG5ldyBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9jayBmdW5jdGlvbiBhbmQgcmVmYWN0b3JpbmcgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jay4gVGhlc2UgY2hhbmdlcyBhbHRlciBob3cgZXh0NCBjb252ZXJ0cyBpbmxpbmUgZGlyZWN0b3J5L2ZpbGUgZGF0YSBpbnRvIGV4dGVudC9ibG9jayBhbGxvY2F0aW9ucyBhbmQgYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjo1MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDM5ZmZmMzI0OGZhN2NkN2NiZjJkNDRhNmNjNTQ0NGViZjE3N2Q4MzZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAwMjo1MzowMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lubGluZS5jIGIvZnMvZXh0NC9pbmxpbmUuY1xuaW5kZXggODA0NWU0ZmYyNzBjNy4uOTM5YzZiZjIwYjViNyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvaW5saW5lLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvaW5saW5lLmNcbkBAIC0xNCw2ICYjNDM7MTQsNyBAQFxuICNpbmNsdWRlIFwmIzM0O2V4dDQuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3hhdHRyLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt0cnVuY2F0ZS5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2V4dDRfZXh0ZW50cy5oXCYjMzQ7XG4gXG4gI2RlZmluZSBFWFQ0X1hBVFRSX1NZU1RFTV9EQVRBXHRcJiMzNDtkYXRhXCYjMzQ7XG4gI2RlZmluZSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFXHQoKHNpemVvZihfX2xlMzIpICogRVhUNF9OX0JMT0NLUykpXG5AQCAtMTA3MCwyMSAmIzQzOzEwNzEsMTI1IEBAIHN0YXRpYyBpbnQgZXh0NF91cGRhdGVfaW5saW5lX2RpcihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBleHQ0X3Jlc3RvcmVfaW5saW5lX2RhdGEoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi1cdFx0XHRcdCAgICAgc3RydWN0IGV4dDRfaWxvYyAqaWxvYyxcbi1cdFx0XHRcdCAgICAgdm9pZCAqYnVmLCBpbnQgaW5saW5lX3NpemUpXG4mIzQzO3N0YXRpYyBpbnQgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9mc2Jsa190IGJsb2NrLFxuJiM0MztcdFx0XHRcdFx0dW5zaWduZWQgaW50IGxlbiwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbiB7XG4tXHRpbnQgcmV0O1xuJiM0MztcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gRVhUNF9JKGlub2RlKTtcbiYjNDM7XHRzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9maW5kIGlzID0ge1xuJiM0MztcdFx0LnMgPSB7IC5ub3RfZm91bmQgPSAwLCB9LFxuJiM0MztcdH07XG4mIzQzO1x0c3RydWN0IGV4dDRfeGF0dHJfaW5mbyBpID0ge1xuJiM0MztcdFx0Lm5hbWVfaW5kZXggPSBFWFQ0X1hBVFRSX0lOREVYX1NZU1RFTSxcbiYjNDM7XHRcdC5uYW1lID0gRVhUNF9YQVRUUl9TWVNURU1fREFUQSxcbiYjNDM7XHRcdC52YWx1ZSA9IE5VTEwsXG4mIzQzO1x0XHQudmFsdWVfbGVuID0gMCxcbiYjNDM7XHR9O1xuJiM0MztcdGludCBlcnJvcjtcbiYjNDM7XHR2b2lkICppX2Jsb2NrX2J1ZiA9IE5VTEw7XG4mIzQzO1x0dm9pZCAqeGF0dHJfYnVmID0gTlVMTDtcbiYjNDM7XHR2b2lkICpoZWFkZXIgPSBOVUxMO1xuJiM0MztcdHZvaWQgKnRhaWwgPSBOVUxMO1xuJiM0MztcdGludCB4YXR0cl9zaXplO1xuJiM0MztcdHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGU7XG4gXG4tXHRyZXQgPSBleHQ0X2NyZWF0ZV9pbmxpbmVfZGF0YShoYW5kbGUsIGlub2RlLCBpbmxpbmVfc2l6ZSk7XG4tXHRpZiAocmV0KSB7XG4tXHRcdGV4dDRfbXNnKGlub2RlLVx1MDAzZWlfc2IsIEtFUk5fRU1FUkcsXG4tXHRcdFx0XCYjMzQ7ZXJyb3IgcmVzdG9yaW5nIGlubGluZV9kYXRhIGZvciBpbm9kZSAtLSBwb3RlbnRpYWwgZGF0YSBsb3NzISAoaW5vZGUgJWxsdSwgZXJyb3IgJWQpXCYjMzQ7LFxuLVx0XHRcdGlub2RlLVx1MDAzZWlfaW5vLCByZXQpO1xuLVx0XHRyZXR1cm47XG4mIzQzO1x0aV9ibG9ja19idWYgPSBrbWFsbG9jKEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUsIEdGUF9OT0ZTKTtcbiYjNDM7XHRpZiAoIWlfYmxvY2tfYnVmKSB7XG4mIzQzO1x0XHRlcnJvciA9IC1FTk9NRU07XG4mIzQzO1x0XHRkb3duX3dyaXRlKFx1MDAyNmVpLVx1MDAzZWlfZGF0YV9zZW0pO1xuJiM0MztcdFx0Z290byBlcnJvcjtcbiBcdH1cbi1cdGV4dDRfd3JpdGVfaW5saW5lX2RhdGEoaW5vZGUsIGlsb2MsIGJ1ZiwgMCwgaW5saW5lX3NpemUpO1xuLVx0ZXh0NF9zZXRfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTtcbiYjNDM7XHRkb3duX3dyaXRlKFx1MDAyNmVpLVx1MDAzZWlfZGF0YV9zZW0pO1xuJiM0MztcdGVycm9yID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcdTAwMjZpcy5pbG9jKTtcbiYjNDM7XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRnb3RvIGVycm9yO1xuJiM0MztcdHJhd19pbm9kZSA9IGV4dDRfcmF3X2lub2RlKFx1MDAyNmlzLmlsb2MpO1xuJiM0MztcdGhlYWRlciA9IElIRFIoaW5vZGUsIHJhd19pbm9kZSk7XG4mIzQzO1x0dGFpbCA9IElUQUlMKGlub2RlLCByYXdfaW5vZGUpO1xuJiM0MztcdHhhdHRyX3NpemUgPSB0YWlsIC0gaGVhZGVyO1xuJiM0MztcdHhhdHRyX2J1ZiA9IGttYWxsb2MoeGF0dHJfc2l6ZSwgR0ZQX05PRlMpO1xuJiM0MztcdGlmICgheGF0dHJfYnVmKSB7XG4mIzQzO1x0XHRlcnJvciA9IC1FTk9NRU07XG4mIzQzO1x0XHRnb3RvIGVycm9yO1xuJiM0MztcdH1cbiYjNDM7XHRCVUZGRVJfVFJBQ0UoaXMuaWxvYy5iaCwgXCYjMzQ7Z2V0X3dyaXRlX2FjY2Vzc1wmIzM0Oyk7XG4mIzQzO1x0ZXJyb3IgPSBleHQ0X2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGUsIGlub2RlLVx1MDAzZWlfc2IsIGlzLmlsb2MuYmgsIEVYVDRfSlRSX05PTkUpO1xuJiM0MztcdGlmIChlcnJvcikge1xuJiM0MztcdFx0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIGJsb2NrKTtcbiYjNDM7XHRcdGV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7XG4mIzQzO1x0XHRleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIGJsb2NrLCBsZW4sIDApO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcdG1lbWNweShpX2Jsb2NrX2J1ZiwgKHZvaWQgKilyYXdfaW5vZGUtXHUwMDNlaV9ibG9jaywgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XG4mIzQzO1x0bWVtc2V0KCh2b2lkICopcmF3X2lub2RlLVx1MDAzZWlfYmxvY2ssIDAsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuJiM0MztcdG1lbXNldChlaS1cdTAwM2VpX2RhdGEsIDAsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuJiM0MztcdG1lbWNweSh4YXR0cl9idWYsIGhlYWRlciwgeGF0dHJfc2l6ZSk7XG4mIzQzO1x0aWYgKGV4dDRfaGFzX2ZlYXR1cmVfZXh0ZW50cyhpbm9kZS1cdTAwM2VpX3NiKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkgfHwgU19JU1JFRyhpbm9kZS1cdTAwM2VpX21vZGUpIHx8IFNfSVNMTksoaW5vZGUtXHUwMDNlaV9tb2RlKSkpIHtcbiYjNDM7XHRcdGV4dDRfc2V0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUyk7XG4mIzQzO1x0XHRleHQ0X2V4dF90cmVlX2luaXQoaGFuZGxlLCBpbm9kZSk7XG4mIzQzO1x0XHRzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIDAsIE5VTEwsIDApO1xuJiM0MztcbiYjNDM7XHRcdGlmIChJU19FUlIocGF0aCkpIHtcbiYjNDM7XHRcdFx0ZXJyb3IgPSBQVFJfRVJSKHBhdGgpO1xuJiM0MztcdFx0XHRnb3RvIHJlY292ZXJ5O1xuJiM0MztcdFx0fVxuJiM0MztcdFx0c3RydWN0IGV4dDRfZXh0ZW50IG5ld2V4O1xuJiM0MztcbiYjNDM7XHRcdG5ld2V4LmVlX2Jsb2NrID0gY3B1X3RvX2xlMzIoMCk7XG4mIzQzO1x0XHRuZXdleC5lZV9sZW4gPSBjcHVfdG9fbGUxNigxKTtcbiYjNDM7XHRcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhcdTAwMjZuZXdleCwgYmxvY2spO1xuJiM0MztcdFx0cGF0aCA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgXHUwMDI2bmV3ZXgsIDApO1xuJiM0MztcdFx0aWYgKElTX0VSUihwYXRoKSkge1xuJiM0MztcdFx0XHRlcnJvciA9IFBUUl9FUlIocGF0aCk7XG4mIzQzO1x0XHRcdGlmIChlcnJvciA9PSAtRURRVU9UIHx8IGVycm9yID09IC1FTk9TUEMpXG4mIzQzO1x0XHRcdFx0Z290byByZWNvdmVyeTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGV4dDRfZnJlZV9leHRfcGF0aChwYXRoKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0RVhUNF9JKGlub2RlKS1cdTAwM2VpX2RhdGFbMF0gPSBjcHVfdG9fbGUzMihibG9jayk7XG4mIzQzO1x0fVxuJiM0MztcdGVycm9yID0gZXh0NF94YXR0cl9pYm9keV9maW5kKGlub2RlLCBcdTAwMjZpLCBcdTAwMjZpcyk7XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0Z290byByZWNvdmVyeTtcbiYjNDM7XHRpZiAoIWlzLnMubm90X2ZvdW5kKVxuJiM0MztcdFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGUsIGlub2RlLCBcdTAwMjZpLCBcdTAwMjZpcyk7XG4mIzQzO3JlY292ZXJ5OlxuJiM0MztcdGlmIChlcnJvcikge1xuJiM0MztcdFx0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIGJsb2NrKTtcbiYjNDM7XHRcdGV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7XG4mIzQzO1x0XHRleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIGJsb2NrLCBsZW4sIDApO1xuJiM0MztcdFx0bWVtY3B5KCh2b2lkICopcmF3X2lub2RlLVx1MDAzZWlfYmxvY2ssIGlfYmxvY2tfYnVmLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcbiYjNDM7XHRcdG1lbWNweShlaS1cdTAwM2VpX2RhdGEsIHJhd19pbm9kZS1cdTAwM2VpX2Jsb2NrLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcbiYjNDM7XHRcdG1lbWNweShoZWFkZXIsIHhhdHRyX2J1ZiwgeGF0dHJfc2l6ZSk7XG4mIzQzO1x0XHRleHQ0X2NsZWFyX2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUyk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGV4dDRfY2xlYXJfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9JTkxJTkVfREFUQSk7XG4mIzQzO1x0XHRpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4mIzQzO1x0XHRcdGlfc2l6ZV93cml0ZShpbm9kZSwgaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZSk7XG4mIzQzO1x0XHRcdEVYVDRfSShpbm9kZSktXHUwMDNlaV9kaXNrc2l6ZSA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRnZXRfYmgoaXMuaWxvYy5iaCk7XG4mIzQzO1x0XHRlcnJvciA9IGV4dDRfbWFya19pbG9jX2RpcnR5KGhhbmRsZSwgaW5vZGUsIFx1MDAyNmlzLmlsb2MpO1xuJiM0MztcdFx0RVhUNF9JKGlub2RlKS1cdTAwM2VpX2lubGluZV9vZmYgPSAwO1xuJiM0MztcdFx0RVhUNF9JKGlub2RlKS1cdTAwM2VpX2lubGluZV9zaXplID0gMDtcbiYjNDM7XHRcdGV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTtcbiYjNDM7XHRcdGJyZWxzZShiaCk7XG4mIzQzO1x0fVxuJiM0MztvdXQ6XG4mIzQzO1x0YnJlbHNlKGlzLmlsb2MuYmgpO1xuJiM0MztcdHVwX3dyaXRlKFx1MDAyNmVpLVx1MDAzZWlfZGF0YV9zZW0pO1xuJiM0MztcdGtmcmVlKGlfYmxvY2tfYnVmKTtcbiYjNDM7XHRrZnJlZSh4YXR0cl9idWYpO1xuJiM0MztcdHJldHVybiBlcnJvcjtcbiYjNDM7ZXJyb3I6XG4mIzQzO1x0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIGJsb2NrKTtcbiYjNDM7XHRleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpO1xuJiM0MztcdGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgYmxvY2ssIGxlbiwgMCk7XG4mIzQzO1x0dXBfd3JpdGUoXHUwMDI2ZWktXHUwMDNlaV9kYXRhX3NlbSk7XG4mIzQzO1x0a2ZyZWUoaV9ibG9ja19idWYpO1xuJiM0MztcdGtmcmVlKHhhdHRyX2J1Zik7XG4mIzQzO1x0cmV0dXJuIGVycm9yO1xuIH1cbiBcbiBzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSxcbkBAIC0xMDkzLDkgJiM0MzsxMTk4LDEyIEBAIHN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxuIHtcbiBcdGludCBlcnJvcjtcbiBcdHZvaWQgKmJ1ZiA9IE5VTEw7XG4tXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRhdGFfYmggPSBOVUxMO1xuLVx0c3RydWN0IGV4dDRfbWFwX2Jsb2NrcyBtYXA7XG4mIzQzO1x0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7XG4gXHRpbnQgaW5saW5lX3NpemU7XG4mIzQzO1x0ZXh0NF9mc2Jsa190IG5ld2Jsb2NrID0gMDtcbiYjNDM7XHRzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX3JlcXVlc3QgYXI7XG4mIzQzO1x0c3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgYWxsb2NhdGVkX2Jsb2NrO1xuIFxuIFx0aW5saW5lX3NpemUgPSBleHQ0X2dldF9pbmxpbmVfc2l6ZShpbm9kZSk7XG4gXHRidWYgPSBrbWFsbG9jKGlubGluZV9zaXplLCBHRlBfTk9GUyk7XG5AQCAtMTEyMCw2MyAmIzQzOzEyMjgsNjIgQEAgc3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHRlcnJvciA9IGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlLCBpbm9kZSk7XG4tXHRpZiAoZXJyb3IpXG4tXHRcdGdvdG8gb3V0O1xuLVxuLVx0bWFwLm1fbGJsayA9IDA7XG4tXHRtYXAubV9sZW4gPSAxO1xuLVx0bWFwLm1fZmxhZ3MgPSAwO1xuLVx0ZXJyb3IgPSBleHQ0X21hcF9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgXHUwMDI2bWFwLCBFWFQ0X0dFVF9CTE9DS1NfQ1JFQVRFKTtcbiYjNDM7XHRtZW1zZXQoXHUwMDI2YXIsIDAsIHNpemVvZihhcikpO1xuJiM0MztcdGFyLmlub2RlID0gaW5vZGU7XG4mIzQzO1x0YXIubG9naWNhbCA9IDA7XG4mIzQzO1x0YXIubGVuID0gMTtcbiYjNDM7XHRpZiAoU19JU1JFRyhpbm9kZS1cdTAwM2VpX21vZGUpKVxuJiM0MztcdFx0YXIuZmxhZ3MgPSBFWFQ0X01CX0hJTlRfREFUQTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRhci5mbGFncyA9IDA7XG4mIzQzO1x0bmV3YmxvY2sgPSBleHQ0X21iX25ld19ibG9ja3MoaGFuZGxlLCBcdTAwMjZhciwgXHUwMDI2ZXJyb3IpO1xuIFx0aWYgKGVycm9yIFx1MDAzYyAwKVxuLVx0XHRnb3RvIG91dF9yZXN0b3JlO1xuLVx0aWYgKCEobWFwLm1fZmxhZ3MgXHUwMDI2IEVYVDRfTUFQX01BUFBFRCkpIHtcbi1cdFx0ZXJyb3IgPSAtRUlPO1xuLVx0XHRnb3RvIG91dF9yZXN0b3JlO1xuLVx0fVxuLVxuLVx0ZGF0YV9iaCA9IHNiX2dldGJsayhpbm9kZS1cdTAwM2VpX3NiLCBtYXAubV9wYmxrKTtcbi1cdGlmICghZGF0YV9iaCkge1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0YWxsb2NhdGVkX2Jsb2NrID0gRVhUNF9DMkIoc2JpLCBhci5sZW4pO1xuJiM0MztcdGJoID0gc2JfZ2V0YmxrKGlub2RlLVx1MDAzZWlfc2IsIG5ld2Jsb2NrKTtcbiYjNDM7XHRpZiAoIWJoKSB7XG4gXHRcdGVycm9yID0gLUVOT01FTTtcbi1cdFx0Z290byBvdXRfcmVzdG9yZTtcbiYjNDM7XHRcdGdvdG8gb3V0X2JoO1xuIFx0fVxuIFxuLVx0bG9ja19idWZmZXIoZGF0YV9iaCk7XG4tXHRlcnJvciA9IGV4dDRfam91cm5hbF9nZXRfY3JlYXRlX2FjY2VzcyhoYW5kbGUsIGlub2RlLVx1MDAzZWlfc2IsIGRhdGFfYmgsXG4mIzQzO1x0bG9ja19idWZmZXIoYmgpO1xuJiM0MztcdGVycm9yID0gZXh0NF9qb3VybmFsX2dldF9jcmVhdGVfYWNjZXNzKGhhbmRsZSwgaW5vZGUtXHUwMDNlaV9zYiwgYmgsXG4gXHRcdFx0XHRcdCAgICAgICBFWFQ0X0pUUl9OT05FKTtcbiBcdGlmIChlcnJvcikge1xuLVx0XHR1bmxvY2tfYnVmZmVyKGRhdGFfYmgpO1xuJiM0MztcdFx0dW5sb2NrX2J1ZmZlcihiaCk7XG4gXHRcdGVycm9yID0gLUVJTztcbi1cdFx0Z290byBvdXRfcmVzdG9yZTtcbiYjNDM7XHRcdGdvdG8gb3V0X2JoO1xuIFx0fVxuLVx0bWVtc2V0KGRhdGFfYmgtXHUwMDNlYl9kYXRhLCAwLCBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplKTtcbiYjNDM7XHRtZW1zZXQoYmgtXHUwMDNlYl9kYXRhLCAwLCBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplKTtcbiBcbiBcdGlmICghU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4tXHRcdG1lbWNweShkYXRhX2JoLVx1MDAzZWJfZGF0YSwgYnVmLCBpbmxpbmVfc2l6ZSk7XG4tXHRcdHNldF9idWZmZXJfdXB0b2RhdGUoZGF0YV9iaCk7XG4tXHRcdHVubG9ja19idWZmZXIoZGF0YV9iaCk7XG4mIzQzO1x0XHRtZW1jcHkoYmgtXHUwMDNlYl9kYXRhLCBidWYsIGlubGluZV9zaXplKTtcbiYjNDM7XHRcdHNldF9idWZmZXJfdXB0b2RhdGUoYmgpO1xuJiM0MztcdFx0dW5sb2NrX2J1ZmZlcihiaCk7XG4gXHRcdGVycm9yID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLFxuLVx0XHRcdFx0XHRcdCAgIGlub2RlLCBkYXRhX2JoKTtcbiYjNDM7XHRcdFx0XHRcdFx0ICAgaW5vZGUsIGJoKTtcbiBcdH0gZWxzZSB7XG4tXHRcdHVubG9ja19idWZmZXIoZGF0YV9iaCk7XG4tXHRcdGlub2RlLVx1MDAzZWlfc2l6ZSA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemU7XG4tXHRcdGlfc2l6ZV93cml0ZShpbm9kZSwgaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZSk7XG4tXHRcdEVYVDRfSShpbm9kZSktXHUwMDNlaV9kaXNrc2l6ZSA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemU7XG4tXG4tXHRcdGVycm9yID0gZXh0NF9pbml0X2RpcmJsb2NrKGhhbmRsZSwgaW5vZGUsIGRhdGFfYmgsXG4mIzQzO1x0XHR1bmxvY2tfYnVmZmVyKGJoKTtcbiYjNDM7XHRcdGVycm9yID0gZXh0NF9pbml0X2RpcmJsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLFxuIFx0XHRcdCAgbGUzMl90b19jcHUoKChzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqKWJ1ZiktXHUwMDNlaW5vZGUpLFxuIFx0XHRcdCAgYnVmICYjNDM7IEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFLFxuIFx0XHRcdCAgaW5saW5lX3NpemUgLSBFWFQ0X0lOTElORV9ET1RET1RfU0laRSk7XG4tXHRcdGlmICghZXJyb3IpXG4tXHRcdFx0ZXJyb3IgPSBleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7XG4gXHR9XG4mIzQzO291dF9iaDpcbiYjNDM7XHRpZiAoZXJyb3IpIHtcbiYjNDM7XHRcdGlmIChiaClcbiYjNDM7XHRcdFx0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIG5ld2Jsb2NrKTtcbiYjNDM7XHRcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gRVhUNF9JKGlub2RlKTtcbiBcbi1vdXRfcmVzdG9yZTpcbi1cdGlmIChlcnJvcilcbi1cdFx0ZXh0NF9yZXN0b3JlX2lubGluZV9kYXRhKGhhbmRsZSwgaW5vZGUsIGlsb2MsIGJ1ZiwgaW5saW5lX3NpemUpO1xuLVxuJiM0MztcdFx0ZG93bl93cml0ZShcdTAwMjZlaS1cdTAwM2VpX2RhdGFfc2VtKTtcbiYjNDM7XHRcdGV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7XG4mIzQzO1x0XHRleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIG5ld2Jsb2NrLCBhbGxvY2F0ZWRfYmxvY2ssIDApO1xuJiM0MztcdFx0dXBfd3JpdGUoXHUwMDI2ZWktXHUwMDNlaV9kYXRhX3NlbSk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGVycm9yID0gZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2soaGFuZGxlLCBpbm9kZSxcbiYjNDM7XHRcdFx0XHRuZXdibG9jaywgYWxsb2NhdGVkX2Jsb2NrLCBiaCk7XG4mIzQzO1x0fVxuIG91dDpcbi1cdGJyZWxzZShkYXRhX2JoKTtcbiBcdGtmcmVlKGJ1Zik7XG4gXHRyZXR1cm4gZXJyb3I7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjUzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEmIzM0OywKICAgICYjMzQ7ZXh0NF90cnlfYWRkX2lubGluZV9lbnRyeSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBleHQ0IGlubGluZSBkYXRhIGNvbnZlcnNpb24gbG9naWMgaW4gZnMvZXh0NC9pbmxpbmUuYywgcmVwbGFjaW5nIHRoZSBpbmxpbmUgZGF0YSByZXN0b3JhdGlvbiBmbG93IHdpdGggYSBuZXcgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2sgZnVuY3Rpb24gYW5kIHJlZmFjdG9yaW5nIGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2suIFRoZXNlIGNoYW5nZXMgYWx0ZXIgaG93IGV4dDQgY29udmVydHMgaW5saW5lIGRpcmVjdG9yeS9maWxlIGRhdGEgaW50byBleHRlbnQvYmxvY2sgYWxsb2NhdGlvbnMgYW5kIGFyZSBmdWxseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzOWZmZjMyNDhmYTdjZDdjYmYyZDQ0YTZjYzU0NDRlYmYxNzdkODM2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMDI6NTM6MDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leHQ0L2lubGluZS5jIGIvZnMvZXh0NC9pbmxpbmUuYwppbmRleCA4MDQ1ZTRmZjI3MGM3Li45MzljNmJmMjBiNWI3IDEwMDY0NAotLS0gYS9mcy9leHQ0L2lubGluZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvaW5saW5lLmMKQEAgLTE0LDYgJiM0MzsxNCw3IEBACiAjaW5jbHVkZSAmIzM0O2V4dDQuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3hhdHRyLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt0cnVuY2F0ZS5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2V4dDRfZXh0ZW50cy5oJiMzNDsKIAogI2RlZmluZSBFWFQ0X1hBVFRSX1NZU1RFTV9EQVRBCSYjMzQ7ZGF0YSYjMzQ7CiAjZGVmaW5lIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUJKChzaXplb2YoX19sZTMyKSAqIEVYVDRfTl9CTE9DS1MpKQpAQCAtMTA3MCwyMSAmIzQzOzEwNzEsMTI1IEBAIHN0YXRpYyBpbnQgZXh0NF91cGRhdGVfaW5saW5lX2RpcihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZXh0NF9yZXN0b3JlX2lubGluZV9kYXRhKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJICAgICBzdHJ1Y3QgZXh0NF9pbG9jICppbG9jLAotCQkJCSAgICAgdm9pZCAqYnVmLCBpbnQgaW5saW5lX3NpemUpCiYjNDM7c3RhdGljIGludCBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2ZzYmxrX3QgYmxvY2ssCiYjNDM7CQkJCQl1bnNpZ25lZCBpbnQgbGVuLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQogewotCWludCByZXQ7CiYjNDM7CXN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gRVhUNF9JKGlub2RlKTsKJiM0MzsJc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCBpcyA9IHsKJiM0MzsJCS5zID0geyAubm90X2ZvdW5kID0gMCwgfSwKJiM0MzsJfTsKJiM0MzsJc3RydWN0IGV4dDRfeGF0dHJfaW5mbyBpID0gewomIzQzOwkJLm5hbWVfaW5kZXggPSBFWFQ0X1hBVFRSX0lOREVYX1NZU1RFTSwKJiM0MzsJCS5uYW1lID0gRVhUNF9YQVRUUl9TWVNURU1fREFUQSwKJiM0MzsJCS52YWx1ZSA9IE5VTEwsCiYjNDM7CQkudmFsdWVfbGVuID0gMCwKJiM0MzsJfTsKJiM0MzsJaW50IGVycm9yOwomIzQzOwl2b2lkICppX2Jsb2NrX2J1ZiA9IE5VTEw7CiYjNDM7CXZvaWQgKnhhdHRyX2J1ZiA9IE5VTEw7CiYjNDM7CXZvaWQgKmhlYWRlciA9IE5VTEw7CiYjNDM7CXZvaWQgKnRhaWwgPSBOVUxMOwomIzQzOwlpbnQgeGF0dHJfc2l6ZTsKJiM0MzsJc3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZTsKIAotCXJldCA9IGV4dDRfY3JlYXRlX2lubGluZV9kYXRhKGhhbmRsZSwgaW5vZGUsIGlubGluZV9zaXplKTsKLQlpZiAocmV0KSB7Ci0JCWV4dDRfbXNnKGlub2RlLSZndDtpX3NiLCBLRVJOX0VNRVJHLAotCQkJJiMzNDtlcnJvciByZXN0b3JpbmcgaW5saW5lX2RhdGEgZm9yIGlub2RlIC0tIHBvdGVudGlhbCBkYXRhIGxvc3MhIChpbm9kZSAlbGx1LCBlcnJvciAlZCkmIzM0OywKLQkJCWlub2RlLSZndDtpX2lubywgcmV0KTsKLQkJcmV0dXJuOwomIzQzOwlpX2Jsb2NrX2J1ZiA9IGttYWxsb2MoRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSwgR0ZQX05PRlMpOwomIzQzOwlpZiAoIWlfYmxvY2tfYnVmKSB7CiYjNDM7CQllcnJvciA9IC1FTk9NRU07CiYjNDM7CQlkb3duX3dyaXRlKCZhbXA7ZWktJmd0O2lfZGF0YV9zZW0pOwomIzQzOwkJZ290byBlcnJvcjsKIAl9Ci0JZXh0NF93cml0ZV9pbmxpbmVfZGF0YShpbm9kZSwgaWxvYywgYnVmLCAwLCBpbmxpbmVfc2l6ZSk7Ci0JZXh0NF9zZXRfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTsKJiM0MzsJZG93bl93cml0ZSgmYW1wO2VpLSZndDtpX2RhdGFfc2VtKTsKJiM0MzsJZXJyb3IgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsICZhbXA7aXMuaWxvYyk7CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCWdvdG8gZXJyb3I7CiYjNDM7CXJhd19pbm9kZSA9IGV4dDRfcmF3X2lub2RlKCZhbXA7aXMuaWxvYyk7CiYjNDM7CWhlYWRlciA9IElIRFIoaW5vZGUsIHJhd19pbm9kZSk7CiYjNDM7CXRhaWwgPSBJVEFJTChpbm9kZSwgcmF3X2lub2RlKTsKJiM0MzsJeGF0dHJfc2l6ZSA9IHRhaWwgLSBoZWFkZXI7CiYjNDM7CXhhdHRyX2J1ZiA9IGttYWxsb2MoeGF0dHJfc2l6ZSwgR0ZQX05PRlMpOwomIzQzOwlpZiAoIXhhdHRyX2J1ZikgewomIzQzOwkJZXJyb3IgPSAtRU5PTUVNOwomIzQzOwkJZ290byBlcnJvcjsKJiM0MzsJfQomIzQzOwlCVUZGRVJfVFJBQ0UoaXMuaWxvYy5iaCwgJiMzNDtnZXRfd3JpdGVfYWNjZXNzJiMzNDspOwomIzQzOwllcnJvciA9IGV4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgaW5vZGUtJmd0O2lfc2IsIGlzLmlsb2MuYmgsIEVYVDRfSlRSX05PTkUpOwomIzQzOwlpZiAoZXJyb3IpIHsKJiM0MzsJCWV4dDRfZm9yZ2V0KGhhbmRsZSwgMCwgaW5vZGUsIGJoLCBibG9jayk7CiYjNDM7CQlleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpOwomIzQzOwkJZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBOVUxMLCBibG9jaywgbGVuLCAwKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CW1lbWNweShpX2Jsb2NrX2J1ZiwgKHZvaWQgKilyYXdfaW5vZGUtJmd0O2lfYmxvY2ssIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpOwomIzQzOwltZW1zZXQoKHZvaWQgKilyYXdfaW5vZGUtJmd0O2lfYmxvY2ssIDAsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpOwomIzQzOwltZW1zZXQoZWktJmd0O2lfZGF0YSwgMCwgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7CiYjNDM7CW1lbWNweSh4YXR0cl9idWYsIGhlYWRlciwgeGF0dHJfc2l6ZSk7CiYjNDM7CWlmIChleHQ0X2hhc19mZWF0dXJlX2V4dGVudHMoaW5vZGUtJmd0O2lfc2IpICZhbXA7JmFtcDsKJiM0MzsJCShTX0lTRElSKGlub2RlLSZndDtpX21vZGUpIHx8IFNfSVNSRUcoaW5vZGUtJmd0O2lfbW9kZSkgfHwgU19JU0xOSyhpbm9kZS0mZ3Q7aV9tb2RlKSkpIHsKJiM0MzsJCWV4dDRfc2V0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUyk7CiYjNDM7CQlleHQ0X2V4dF90cmVlX2luaXQoaGFuZGxlLCBpbm9kZSk7CiYjNDM7CQlzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIDAsIE5VTEwsIDApOwomIzQzOwomIzQzOwkJaWYgKElTX0VSUihwYXRoKSkgewomIzQzOwkJCWVycm9yID0gUFRSX0VSUihwYXRoKTsKJiM0MzsJCQlnb3RvIHJlY292ZXJ5OwomIzQzOwkJfQomIzQzOwkJc3RydWN0IGV4dDRfZXh0ZW50IG5ld2V4OwomIzQzOwomIzQzOwkJbmV3ZXguZWVfYmxvY2sgPSBjcHVfdG9fbGUzMigwKTsKJiM0MzsJCW5ld2V4LmVlX2xlbiA9IGNwdV90b19sZTE2KDEpOwomIzQzOwkJZXh0NF9leHRfc3RvcmVfcGJsb2NrKCZhbXA7bmV3ZXgsIGJsb2NrKTsKJiM0MzsJCXBhdGggPSBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgaW5vZGUsIHBhdGgsICZhbXA7bmV3ZXgsIDApOwomIzQzOwkJaWYgKElTX0VSUihwYXRoKSkgewomIzQzOwkJCWVycm9yID0gUFRSX0VSUihwYXRoKTsKJiM0MzsJCQlpZiAoZXJyb3IgPT0gLUVEUVVPVCB8fCBlcnJvciA9PSAtRU5PU1BDKQomIzQzOwkJCQlnb3RvIHJlY292ZXJ5OwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlleHQ0X2ZyZWVfZXh0X3BhdGgocGF0aCk7CiYjNDM7CQl9CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlFWFQ0X0koaW5vZGUpLSZndDtpX2RhdGFbMF0gPSBjcHVfdG9fbGUzMihibG9jayk7CiYjNDM7CX0KJiM0MzsJZXJyb3IgPSBleHQ0X3hhdHRyX2lib2R5X2ZpbmQoaW5vZGUsICZhbXA7aSwgJmFtcDtpcyk7CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCWdvdG8gcmVjb3Zlcnk7CiYjNDM7CWlmICghaXMucy5ub3RfZm91bmQpCiYjNDM7CQllcnJvciA9IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZSwgaW5vZGUsICZhbXA7aSwgJmFtcDtpcyk7CiYjNDM7cmVjb3Zlcnk6CiYjNDM7CWlmIChlcnJvcikgewomIzQzOwkJZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIGJsb2NrKTsKJiM0MzsJCWV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7CiYjNDM7CQlleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIGJsb2NrLCBsZW4sIDApOwomIzQzOwkJbWVtY3B5KCh2b2lkICopcmF3X2lub2RlLSZndDtpX2Jsb2NrLCBpX2Jsb2NrX2J1ZiwgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7CiYjNDM7CQltZW1jcHkoZWktJmd0O2lfZGF0YSwgcmF3X2lub2RlLSZndDtpX2Jsb2NrLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTsKJiM0MzsJCW1lbWNweShoZWFkZXIsIHhhdHRyX2J1ZiwgeGF0dHJfc2l6ZSk7CiYjNDM7CQlleHQ0X2NsZWFyX2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUyk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlleHQ0X2NsZWFyX2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpOwomIzQzOwkJaWYgKFNfSVNESVIoaW5vZGUtJmd0O2lfbW9kZSkpIHsKJiM0MzsJCQlpX3NpemVfd3JpdGUoaW5vZGUsIGlub2RlLSZndDtpX3NiLSZndDtzX2Jsb2Nrc2l6ZSk7CiYjNDM7CQkJRVhUNF9JKGlub2RlKS0mZ3Q7aV9kaXNrc2l6ZSA9IGlub2RlLSZndDtpX3NiLSZndDtzX2Jsb2Nrc2l6ZTsKJiM0MzsJCX0KJiM0MzsJCWdldF9iaChpcy5pbG9jLmJoKTsKJiM0MzsJCWVycm9yID0gZXh0NF9tYXJrX2lsb2NfZGlydHkoaGFuZGxlLCBpbm9kZSwgJmFtcDtpcy5pbG9jKTsKJiM0MzsJCUVYVDRfSShpbm9kZSktJmd0O2lfaW5saW5lX29mZiA9IDA7CiYjNDM7CQlFWFQ0X0koaW5vZGUpLSZndDtpX2lubGluZV9zaXplID0gMDsKJiM0MzsJCWV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTsKJiM0MzsJCWJyZWxzZShiaCk7CiYjNDM7CX0KJiM0MztvdXQ6CiYjNDM7CWJyZWxzZShpcy5pbG9jLmJoKTsKJiM0MzsJdXBfd3JpdGUoJmFtcDtlaS0mZ3Q7aV9kYXRhX3NlbSk7CiYjNDM7CWtmcmVlKGlfYmxvY2tfYnVmKTsKJiM0MzsJa2ZyZWUoeGF0dHJfYnVmKTsKJiM0MzsJcmV0dXJuIGVycm9yOwomIzQzO2Vycm9yOgomIzQzOwlleHQ0X2ZvcmdldChoYW5kbGUsIDAsIGlub2RlLCBiaCwgYmxvY2spOwomIzQzOwlleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpOwomIzQzOwlleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIGJsb2NrLCBsZW4sIDApOwomIzQzOwl1cF93cml0ZSgmYW1wO2VpLSZndDtpX2RhdGFfc2VtKTsKJiM0MzsJa2ZyZWUoaV9ibG9ja19idWYpOwomIzQzOwlrZnJlZSh4YXR0cl9idWYpOwomIzQzOwlyZXR1cm4gZXJyb3I7CiB9CiAKIHN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLApAQCAtMTA5Myw5ICYjNDM7MTE5OCwxMiBAQCBzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSwKIHsKIAlpbnQgZXJyb3I7CiAJdm9pZCAqYnVmID0gTlVMTDsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRhdGFfYmggPSBOVUxMOwotCXN0cnVjdCBleHQ0X21hcF9ibG9ja3MgbWFwOwomIzQzOwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsKIAlpbnQgaW5saW5lX3NpemU7CiYjNDM7CWV4dDRfZnNibGtfdCBuZXdibG9jayA9IDA7CiYjNDM7CXN0cnVjdCBleHQ0X2FsbG9jYXRpb25fcmVxdWVzdCBhcjsKJiM0MzsJc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihpbm9kZS0mZ3Q7aV9zYik7CiYjNDM7CXVuc2lnbmVkIGludCBhbGxvY2F0ZWRfYmxvY2s7CiAKIAlpbmxpbmVfc2l6ZSA9IGV4dDRfZ2V0X2lubGluZV9zaXplKGlub2RlKTsKIAlidWYgPSBrbWFsbG9jKGlubGluZV9zaXplLCBHRlBfTk9GUyk7CkBAIC0xMTIwLDYzICYjNDM7MTIyOCw2MiBAQCBzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSwKIAkJCWdvdG8gb3V0OwogCX0KIAotCWVycm9yID0gZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGUsIGlub2RlKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0OwotCi0JbWFwLm1fbGJsayA9IDA7Ci0JbWFwLm1fbGVuID0gMTsKLQltYXAubV9mbGFncyA9IDA7Ci0JZXJyb3IgPSBleHQ0X21hcF9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgJmFtcDttYXAsIEVYVDRfR0VUX0JMT0NLU19DUkVBVEUpOwomIzQzOwltZW1zZXQoJmFtcDthciwgMCwgc2l6ZW9mKGFyKSk7CiYjNDM7CWFyLmlub2RlID0gaW5vZGU7CiYjNDM7CWFyLmxvZ2ljYWwgPSAwOwomIzQzOwlhci5sZW4gPSAxOwomIzQzOwlpZiAoU19JU1JFRyhpbm9kZS0mZ3Q7aV9tb2RlKSkKJiM0MzsJCWFyLmZsYWdzID0gRVhUNF9NQl9ISU5UX0RBVEE7CiYjNDM7CWVsc2UKJiM0MzsJCWFyLmZsYWdzID0gMDsKJiM0MzsJbmV3YmxvY2sgPSBleHQ0X21iX25ld19ibG9ja3MoaGFuZGxlLCAmYW1wO2FyLCAmYW1wO2Vycm9yKTsKIAlpZiAoZXJyb3IgJmx0OyAwKQotCQlnb3RvIG91dF9yZXN0b3JlOwotCWlmICghKG1hcC5tX2ZsYWdzICZhbXA7IEVYVDRfTUFQX01BUFBFRCkpIHsKLQkJZXJyb3IgPSAtRUlPOwotCQlnb3RvIG91dF9yZXN0b3JlOwotCX0KLQotCWRhdGFfYmggPSBzYl9nZXRibGsoaW5vZGUtJmd0O2lfc2IsIG1hcC5tX3BibGspOwotCWlmICghZGF0YV9iaCkgewomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWFsbG9jYXRlZF9ibG9jayA9IEVYVDRfQzJCKHNiaSwgYXIubGVuKTsKJiM0MzsJYmggPSBzYl9nZXRibGsoaW5vZGUtJmd0O2lfc2IsIG5ld2Jsb2NrKTsKJiM0MzsJaWYgKCFiaCkgewogCQllcnJvciA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0X3Jlc3RvcmU7CiYjNDM7CQlnb3RvIG91dF9iaDsKIAl9CiAKLQlsb2NrX2J1ZmZlcihkYXRhX2JoKTsKLQllcnJvciA9IGV4dDRfam91cm5hbF9nZXRfY3JlYXRlX2FjY2VzcyhoYW5kbGUsIGlub2RlLSZndDtpX3NiLCBkYXRhX2JoLAomIzQzOwlsb2NrX2J1ZmZlcihiaCk7CiYjNDM7CWVycm9yID0gZXh0NF9qb3VybmFsX2dldF9jcmVhdGVfYWNjZXNzKGhhbmRsZSwgaW5vZGUtJmd0O2lfc2IsIGJoLAogCQkJCQkgICAgICAgRVhUNF9KVFJfTk9ORSk7CiAJaWYgKGVycm9yKSB7Ci0JCXVubG9ja19idWZmZXIoZGF0YV9iaCk7CiYjNDM7CQl1bmxvY2tfYnVmZmVyKGJoKTsKIAkJZXJyb3IgPSAtRUlPOwotCQlnb3RvIG91dF9yZXN0b3JlOwomIzQzOwkJZ290byBvdXRfYmg7CiAJfQotCW1lbXNldChkYXRhX2JoLSZndDtiX2RhdGEsIDAsIGlub2RlLSZndDtpX3NiLSZndDtzX2Jsb2Nrc2l6ZSk7CiYjNDM7CW1lbXNldChiaC0mZ3Q7Yl9kYXRhLCAwLCBpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19ibG9ja3NpemUpOwogCiAJaWYgKCFTX0lTRElSKGlub2RlLSZndDtpX21vZGUpKSB7Ci0JCW1lbWNweShkYXRhX2JoLSZndDtiX2RhdGEsIGJ1ZiwgaW5saW5lX3NpemUpOwotCQlzZXRfYnVmZmVyX3VwdG9kYXRlKGRhdGFfYmgpOwotCQl1bmxvY2tfYnVmZmVyKGRhdGFfYmgpOwomIzQzOwkJbWVtY3B5KGJoLSZndDtiX2RhdGEsIGJ1ZiwgaW5saW5lX3NpemUpOwomIzQzOwkJc2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7CiYjNDM7CQl1bmxvY2tfYnVmZmVyKGJoKTsKIAkJZXJyb3IgPSBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsCi0JCQkJCQkgICBpbm9kZSwgZGF0YV9iaCk7CiYjNDM7CQkJCQkJICAgaW5vZGUsIGJoKTsKIAl9IGVsc2UgewotCQl1bmxvY2tfYnVmZmVyKGRhdGFfYmgpOwotCQlpbm9kZS0mZ3Q7aV9zaXplID0gaW5vZGUtJmd0O2lfc2ItJmd0O3NfYmxvY2tzaXplOwotCQlpX3NpemVfd3JpdGUoaW5vZGUsIGlub2RlLSZndDtpX3NiLSZndDtzX2Jsb2Nrc2l6ZSk7Ci0JCUVYVDRfSShpbm9kZSktJmd0O2lfZGlza3NpemUgPSBpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19ibG9ja3NpemU7Ci0KLQkJZXJyb3IgPSBleHQ0X2luaXRfZGlyYmxvY2soaGFuZGxlLCBpbm9kZSwgZGF0YV9iaCwKJiM0MzsJCXVubG9ja19idWZmZXIoYmgpOwomIzQzOwkJZXJyb3IgPSBleHQ0X2luaXRfZGlyYmxvY2soaGFuZGxlLCBpbm9kZSwgYmgsCiAJCQkgIGxlMzJfdG9fY3B1KCgoc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKilidWYpLSZndDtpbm9kZSksCiAJCQkgIGJ1ZiAmIzQzOyBFWFQ0X0lOTElORV9ET1RET1RfU0laRSwKIAkJCSAgaW5saW5lX3NpemUgLSBFWFQ0X0lOTElORV9ET1RET1RfU0laRSk7Ci0JCWlmICghZXJyb3IpCi0JCQllcnJvciA9IGV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTsKIAl9CiYjNDM7b3V0X2JoOgomIzQzOwlpZiAoZXJyb3IpIHsKJiM0MzsJCWlmIChiaCkKJiM0MzsJCQlleHQ0X2ZvcmdldChoYW5kbGUsIDAsIGlub2RlLCBiaCwgbmV3YmxvY2spOwomIzQzOwkJc3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpOwogCi1vdXRfcmVzdG9yZToKLQlpZiAoZXJyb3IpCi0JCWV4dDRfcmVzdG9yZV9pbmxpbmVfZGF0YShoYW5kbGUsIGlub2RlLCBpbG9jLCBidWYsIGlubGluZV9zaXplKTsKLQomIzQzOwkJZG93bl93cml0ZSgmYW1wO2VpLSZndDtpX2RhdGFfc2VtKTsKJiM0MzsJCWV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7CiYjNDM7CQlleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIG5ld2Jsb2NrLCBhbGxvY2F0ZWRfYmxvY2ssIDApOwomIzQzOwkJdXBfd3JpdGUoJmFtcDtlaS0mZ3Q7aV9kYXRhX3NlbSk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQllcnJvciA9IGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrKGhhbmRsZSwgaW5vZGUsCiYjNDM7CQkJCW5ld2Jsb2NrLCBhbGxvY2F0ZWRfYmxvY2ssIGJoKTsKJiM0MzsJfQogb3V0OgotCWJyZWxzZShkYXRhX2JoKTsKIAlrZnJlZShidWYpOwogCXJldHVybiBlcnJvcjsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUwMwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGV4dDQgSW5saW5lIERhdGEgQ29udmVyc2lvbiBQYXRjaCoqCgpPa2F5LCBzbyB0aGUgcGF0Y2ggaXMgcmlnaHQgaW4gYGZzL2V4dDQvaW5saW5lLmNgLiBMZXQmIzM5O3MgZGlnIGluLiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIHRocnVzdCBpcyByZXdyaXRpbmcgcGFydHMgb2YgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2tgLiBUaGV5JiMzOTtyZSBhbHNvIHJlcGxhY2luZyBgZXh0NF9yZXN0b3JlX2lubGluZV9kYXRhYCB3aXRoIGBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9ja2AuIFRoaXMgaW5zdGFudGx5IHNjcmVhbXMgJiMzNDtpbmxpbmUgZGF0YSBjb252ZXJzaW9uIGluIGV4dDQuJiMzNDsgV2UmIzM5O3JlIHRhbGtpbmcgY29yZSBmaWxlc3lzdGVtIGxvZ2ljIGhlcmUsIHRoZSBzdHVmZiB0aGF0IGtpY2tzIGluIHdoZW4gYSBmaWxlJiMzOTtzIGlubGluZSBkYXRhIG5lZWRzIHRvIGJlIHNoaWZ0ZWQgdG8gYSBtb3JlIHRyYWRpdGlvbmFsIGV4dGVudC9ibG9jay1iYXNlZCByZXByZXNlbnRhdGlvbiBiZWNhdXNlIGl0JiMzOTtzIGdyb3duIHRvbyBsYXJnZSBvciBzb21lIG90aGVyIGNvbmRpdGlvbiB0cmlnZ2VycyB0aGUgY2hhbmdlLgoKTXkgbmV4dCBzdGVwLCBhbmQgdGhpcyBpcyBjcnVjaWFsLCBpcyB0byBjaGVjayB0aGUgY2FsbGVycyBvZiBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja2AsIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFgLCBhbmQgZXNzZW50aWFsbHkgYW55IGZ1bmN0aW9uIGRlYWxpbmcgd2l0aCBpbmxpbmUgZGF0YSBpbiBleHQ0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGNoYW5nZSBpcyBoYXBwZW5pbmcgYW5kIHRoZSBpbXBhY3QgaXQgY291bGQgaGF2ZS4gSSB3YW50IHRvIHNlZSB0aGlzIHdpdGhpbiB0aGUgbGFyZ2VyIHBpY3R1cmUgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaG93IGl0IGFmZmVjdHMgdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvY3J5cHRvLmM9MTMyPXN0YXRpYyBpbnQgZXh0NF9zZXRfY29udGV4dChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB2b2lkICpjdHgsIHNpemVfdCBsZW4sXG4tLVxuZnMvZXh0NC9jcnlwdG8uYy0xNTItXG5mcy9leHQ0L2NyeXB0by5jOjE1MzpcdHJlcyA9IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YShpbm9kZSk7XG5mcy9leHQ0L2NyeXB0by5jLTE1NC1cdGlmIChyZXMpXG4tLVxuZnMvZXh0NC9leHQ0Lmg9Mzc4ND1leHRlcm4gaW50IGV4dDRfaW5saW5lX2RhdGFfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50ICpoYXNfaW5saW5lKTtcbmZzL2V4dDQvZXh0NC5oLTM3ODUtXG5mcy9leHQ0L2V4dDQuaDozNzg2OmV4dGVybiBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuZnMvZXh0NC9leHQ0LmgtMzc4Ny1cbi0tXG5mcy9leHQ0L2V4dGVudHMuYz00ODU0PWxvbmcgZXh0NF9mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTQ4ODMtXHRpbm9kZV9sb2NrKGlub2RlKTtcbmZzL2V4dDQvZXh0ZW50cy5jOjQ4ODQ6XHRyZXQgPSBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoaW5vZGUpO1xuZnMvZXh0NC9leHRlbnRzLmMtNDg4NS1cdGlmIChyZXQpXG4tLVxuZnMvZXh0NC9pbmxpbmUuYz01NDY9aW50IGV4dDRfcmVhZHBhZ2VfaW5saW5lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy01NzItXG5mcy9leHQ0L2lubGluZS5jOjU3MzpzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV90b19leHRlbnQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG5mcy9leHQ0L2lubGluZS5jLTU3NC1cdFx0XHRcdFx0ICAgICAgc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L2lubGluZS5jPTY5Nz1pbnQgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmZzL2V4dDQvaW5saW5lLmMtNzI4LVx0XHRcdC8qIFJldHJ5IGluc2lkZSAqL1xuZnMvZXh0NC9pbmxpbmUuYzo3Mjk6XHRcdFx0cmV0dXJuIGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV90b19leHRlbnQobWFwcGluZywgaW5vZGUpO1xuZnMvZXh0NC9pbmxpbmUuYy03MzAtXHRcdH1cbi0tXG5mcy9leHQ0L2lubGluZS5jPTc4ND1pbnQgZXh0NF90cnlfdG9fd3JpdGVfaW5saW5lX2RhdGEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy03ODktXHRpZiAocG9zICYjNDM7IGxlbiBcdTAwM2UgZXh0NF9nZXRfbWF4X2lubGluZV9zaXplKGlub2RlKSlcbmZzL2V4dDQvaW5saW5lLmM6NzkwOlx0XHRyZXR1cm4gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudChtYXBwaW5nLCBpbm9kZSk7XG5mcy9leHQ0L2lubGluZS5jLTc5MS1cdHJldHVybiBleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGEobWFwcGluZywgaW5vZGUsIHBvcywgbGVuLFxuLS1cbmZzL2V4dDQvaW5saW5lLmM9MTA3ND1zdGF0aWMgaW50IGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfZnNibGtfdCBibG9jayxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTExOTQtXG5mcy9leHQ0L2lubGluZS5jOjExOTU6c3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXG5mcy9leHQ0L2lubGluZS5jLTExOTYtXHRcdFx0XHRcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9pbmxpbmUuYz0xMjk2PWludCBleHQ0X3RyeV9hZGRfaW5saW5lX2VudHJ5KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBleHQ0X2ZpbGVuYW1lICpmbmFtZSxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTEzNDgtXHQgKi9cbmZzL2V4dDQvaW5saW5lLmM6MTM0OTpcdHJldCA9IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlLCBkaXIsIFx1MDAyNmlsb2MpO1xuZnMvZXh0NC9pbmxpbmUuYy0xMzUwLVxuLS1cbmZzL2V4dDQvaW5saW5lLmM9MTk1MT1pbnQgZXh0NF9pbmxpbmVfZGF0YV90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgKmhhc19pbmxpbmUpXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0yMDYyLVxuZnMvZXh0NC9pbmxpbmUuYzoyMDYzOmludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2V4dDQvaW5saW5lLmMtMjA2NC17XG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0yMTAwLVx0aWYgKGV4dDRfaGFzX2lubGluZV9kYXRhKGlub2RlKSlcbmZzL2V4dDQvaW5saW5lLmM6MjEwMTpcdFx0ZXJyb3IgPSBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZSwgaW5vZGUsIFx1MDAyNmlsb2MpO1xuZnMvZXh0NC9pbmxpbmUuYy0yMTAyLVx0ZXh0NF93cml0ZV91bmxvY2tfeGF0dHIoaW5vZGUsIFx1MDAyNm5vX2V4cGFuZCk7XG4tLVxuZnMvZXh0NC9pbm9kZS5jPTU5MzQ9aW50IGV4dDRfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL2V4dDQvaW5vZGUuYy02MDMxLVx0XHQgICAgYXR0ci1cdTAwM2VpYV9zaXplIFx1MDAzZSBFWFQ0X0koaW5vZGUpLVx1MDAzZWlfaW5saW5lX3NpemUpIHtcbmZzL2V4dDQvaW5vZGUuYzo2MDMyOlx0XHRcdGVycm9yID0gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKGlub2RlKTtcbmZzL2V4dDQvaW5vZGUuYy02MDMzLVx0XHRcdGlmIChlcnJvcilcbi0tXG5mcy9leHQ0L2lub2RlLmM9Njc4Nz12bV9mYXVsdF90IGV4dDRfcGFnZV9ta3dyaXRlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbmZzL2V4dDQvaW5vZGUuYy02ODA4LVxuZnMvZXh0NC9pbm9kZS5jOjY4MDk6XHRlcnIgPSBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoaW5vZGUpO1xuZnMvZXh0NC9pbm9kZS5jLTY4MTAtXHRpZiAoZXJyKVxuLS1cbmZzL2V4dDQvdmVyaXR5LmM9MTAyPXN0YXRpYyBpbnQgZXh0NF9iZWdpbl9lbmFibGVfdmVyaXR5KHN0cnVjdCBmaWxlICpmaWxwKVxuLS1cbmZzL2V4dDQvdmVyaXR5LmMtMTI4LVxuZnMvZXh0NC92ZXJpdHkuYzoxMjk6XHRlcnIgPSBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoaW5vZGUpO1xuZnMvZXh0NC92ZXJpdHkuYy0xMzAtXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczOTcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgZXh0NCBJbmxpbmUgRGF0YSBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBzdHJhaWdodCBpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgZm9yIGV4dDQgYW5kLCBzcGVjaWZpY2FsbHksIGhvdyBpdCBoYW5kbGVzIGlubGluZSBkYXRhLiBUaW1lIHRvIHB1bGwgdXAgYGZzL2V4dDQvS2NvbmZpZ2AuIEkga25vdyB0aGUgYmFzaWNzLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoZSBleGFjdCBkZXBlbmRlbmNpZXMgYW5kIGFueSBwb3RlbnRpYWxseSB0cmlja3kgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIGlubGluZSBkYXRhIHN1cHBvcnQgYW5kIG90aGVyIGV4dDQgZmVhdHVyZXMuIEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgY3JpdGljYWwsIHBhcnRpY3VsYXJseSBhbnkgc3VidGxlIGludGVycGxheSB3aXRoIGZlYXR1cmVzIGxpa2UgcXVvdGFzLCBlbmNyeXB0aW9uLCBvciBqb3VybmFsIHNldHRpbmdzLiBJdOKAmXMgYWx3YXlzIGJlc3QgdG8gYmUgdGhvcm91Z2gsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggY29yZSBmaWxlc3lzdGVtIGNvbXBvbmVudHMuIFRoaXMgaXMganVzdCBhIHF1aWNrIGNoZWNrIHRvIGVuc3VyZSBJIGhhdmUgYSBjb21wbGV0ZSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19FWFQ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0Ly5rdW5pdGNvbmZpZz0xPUNPTkZJR19LVU5JVD15XG5mcy9leHQ0Ly5rdW5pdGNvbmZpZzoyOkNPTkZJR19FWFQ0X0ZTPXlcbmZzL2V4dDQvLmt1bml0Y29uZmlnOjM6Q09ORklHX0VYVDRfS1VOSVRfVEVTVFM9eVxuLS1cbmZzL2V4dDQvTWFrZWZpbGUtNS1cbmZzL2V4dDQvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfRVhUNF9GUykgJiM0Mzs9IGV4dDQub1xuZnMvZXh0NC9NYWtlZmlsZS03LVxuZnMvZXh0NC9NYWtlZmlsZT04PWV4dDQteVx0Oj0gYmFsbG9jLm8gYml0bWFwLm8gYmxvY2tfdmFsaWRpdHkubyBkaXIubyBleHQ0X2piZDIubyBleHRlbnRzLm8gXFxcbi0tXG5mcy9leHQ0L01ha2VmaWxlLTE0LVxuZnMvZXh0NC9NYWtlZmlsZToxNTpleHQ0LSQoQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMKVx0JiM0Mzs9IGFjbC5vXG5mcy9leHQ0L01ha2VmaWxlOjE2OmV4dDQtJChDT05GSUdfRVhUNF9GU19TRUNVUklUWSlcdFx0JiM0Mzs9IHhhdHRyX3NlY3VyaXR5Lm9cbmZzL2V4dDQvTWFrZWZpbGUtMTctZXh0NC10ZXN0LW9ianNcdFx0XHRcdCYjNDM7PSBpbm9kZS10ZXN0Lm8gbWJhbGxvYy10ZXN0Lm8gXFxcbmZzL2V4dDQvTWFrZWZpbGUtMTgtXHRcdFx0XHRcdCAgIGV4dGVudHMtdGVzdC5vIGhhc2gtdGVzdC5vXG5mcy9leHQ0L01ha2VmaWxlOjE5Om9iai0kKENPTkZJR19FWFQ0X0tVTklUX1RFU1RTKVx0XHQmIzQzOz0gZXh0NC10ZXN0Lm9cbmZzL2V4dDQvTWFrZWZpbGUtMjAtZXh0NC0kKENPTkZJR19GU19WRVJJVFkpXHRcdCYjNDM7PSB2ZXJpdHkub1xuLS1cbmZzL2V4dDQvYWNsLmg9Mzk9c3RhdGljIGlubGluZSBpbnQgZXh0NF9hY2xfY291bnQoc2l6ZV90IHNpemUpXG4tLVxuZnMvZXh0NC9hY2wuaC01NC1cbmZzL2V4dDQvYWNsLmg6NTU6I2lmZGVmIENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTFxuZnMvZXh0NC9hY2wuaC01Ni1cbi0tXG5mcy9leHQ0L2FjbC5oPTYxPWV4dGVybiBpbnQgZXh0NF9pbml0X2FjbChoYW5kbGVfdCAqLCBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGlub2RlICopO1xuZnMvZXh0NC9hY2wuaC02Mi1cbmZzL2V4dDQvYWNsLmg6NjM6I2Vsc2UgIC8qIENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTCAqL1xuZnMvZXh0NC9hY2wuaC02NC0jaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG4tLVxuZnMvZXh0NC9hY2wuaD02OT1leHQ0X2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyKVxuLS1cbmZzL2V4dDQvYWNsLmgtNzItfVxuZnMvZXh0NC9hY2wuaDo3MzojZW5kaWYgIC8qIENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTCAqL1xuZnMvZXh0NC9hY2wuaC03NC1cbi0tXG5mcy9leHQ0L2V4dDQuaC05MS0gKi9cbmZzL2V4dDQvZXh0NC5oOjkyOiNpZmRlZiBDT05GSUdfRVhUNF9ERUJVR1xuZnMvZXh0NC9leHQ0LmgtOTMtI2RlZmluZSBleHRfZGVidWcoaW5vLCBmbXQsIC4uLilcdFx0XHRcdFx0XFxcbi0tXG5mcy9leHQ0L2V4dDQuaD0xNTg2PXN0cnVjdCBleHQ0X3NiX2luZm8ge1xuLS1cbmZzL2V4dDQvZXh0NC5oLTE3OTUtXHR1NjQgc19kYXhfcGFydF9vZmY7XG5mcy9leHQ0L2V4dDQuaDoxNzk2OiNpZmRlZiBDT05GSUdfRVhUNF9ERUJVR1xuZnMvZXh0NC9leHQ0LmgtMTc5Ny1cdHVuc2lnbmVkIGxvbmcgc19zaW11bGF0ZV9mYWlsO1xuLS1cbmZzL2V4dDQvZXh0NC5oLTE4NTgtXHR0aWRfdCBzX2ZjX2luZWxpZ2libGVfdGlkO1xuZnMvZXh0NC9leHQ0Lmg6MTg1OTojaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcbmZzL2V4dDQvZXh0NC5oLTE4NjAtXHRpbnQgc19mY19kZWJ1Z19tYXhfcmVwbGF5O1xuLS1cbmZzL2V4dDQvZXh0NC5oPTE5ODM9c3RhdGljIGlubGluZSBib29sIGV4dDRfc2ltdWxhdGVfZmFpbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvZXh0NC5oLTE5ODUte1xuZnMvZXh0NC9leHQ0Lmg6MTk4NjojaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcbmZzL2V4dDQvZXh0NC5oLTE5ODctXHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKHNiKTtcbi0tXG5mcy9leHQ0L2V4dDQuaD00MDMxPWV4dGVybiBpbnQgZXh0NF9ibG9ja193cml0ZV9iZWdpbihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmZzL2V4dDQvZXh0NC5oLTQwMzQtXG5mcy9leHQ0L2V4dDQuaDo0MDM1OiNpZiBJU19FTkFCTEVEKENPTkZJR19FWFQ0X0tVTklUX1RFU1RTKVxuZnMvZXh0NC9leHQ0LmgtNDAzNi0jZGVmaW5lIEVYUE9SVF9TWU1CT0xfRk9SX0VYVDRfVEVTVChzeW0pIFxcXG4tLVxuZnMvZXh0NC9leHQ0X2V4dGVudHMuaD0yNzA9ZXh0ZXJuIGludCBleHQ0X2V4dF96ZXJvb3V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHQ0X2V4dGVudCAqZXgpO1xuZnMvZXh0NC9leHQ0X2V4dGVudHMuaDoyNzE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0VYVDRfS1VOSVRfVEVTVFMpXG5mcy9leHQ0L2V4dDRfZXh0ZW50cy5oLTI3Mi1leHRlcm4gaW50IGV4dDRfZXh0X3NwYWNlX3Jvb3RfaWR4X3Rlc3Qoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGNoZWNrKTtcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz02MjI3PWludCBleHQ0X2V4dF9jbGVhcl9iYihzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTYyNzgtXG5mcy9leHQ0L2V4dGVudHMuYzo2Mjc5OiNpZiBJU19FTkFCTEVEKENPTkZJR19FWFQ0X0tVTklUX1RFU1RTKVxuZnMvZXh0NC9leHRlbnRzLmMtNjI4MC1pbnQgZXh0NF9leHRfc3BhY2Vfcm9vdF9pZHhfdGVzdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgY2hlY2spXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTI1ODE9c3RhdGljIGludCBleHQ0X2ZjX3JlcGxheShqb3VybmFsX3QgKmpvdXJuYWwsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2MDYtXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjYwNzojaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjA4LVx0aWYgKHNiaS1cdTAwM2VzX2ZjX2RlYnVnX21heF9yZXBsYXkgXHUwMDI2XHUwMDI2IG9mZiBcdTAwM2U9IHNiaS1cdTAwM2VzX2ZjX2RlYnVnX21heF9yZXBsYXkpIHtcbi0tXG5mcy9leHQ0L2hhc2guYz0zMTQ9aW50IGV4dDRmc19kaXJoYXNoKGNvbnN0IHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLFxuLS1cbmZzL2V4dDQvaGFzaC5jLTM0NC1cbmZzL2V4dDQvaGFzaC5jOjM0NTojaWYgSVNfRU5BQkxFRChDT05GSUdfRVhUNF9LVU5JVF9URVNUUylcbmZzL2V4dDQvaGFzaC5jLTM0Ni1FWFBPUlRfU1lNQk9MX0ZPUl9FWFQ0X1RFU1QoZXh0NGZzX2Rpcmhhc2gpO1xuLS1cbmZzL2V4dDQvaWFsbG9jLmM9ODc2PXN0YXRpYyBpbnQgZXh0NF94YXR0cl9jcmVkaXRzX2Zvcl9uZXdfaW5vZGUoc3RydWN0IGlub2RlICpkaXIsIG1vZGVfdCBtb2RlLFxuLS1cbmZzL2V4dDQvaWFsbG9jLmMtODgwLVx0aW50IG5ibG9ja3MgPSAwO1xuZnMvZXh0NC9pYWxsb2MuYzo4ODE6I2lmZGVmIENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTFxuZnMvZXh0NC9pYWxsb2MuYy04ODItXHRzdHJ1Y3QgcG9zaXhfYWNsICpwID0gZ2V0X2lub2RlX2FjbChkaXIsIEFDTF9UWVBFX0RFRkFVTFQpO1xuLS1cbmZzL2V4dDQvaW5vZGUuYz00MTI9aW50IGV4dDRfaXNzdWVfemVyb291dChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBsYmxrLCBleHQ0X2ZzYmxrX3QgcGJsayxcbi0tXG5mcy9leHQ0L2lub2RlLmMtNDM2LSAqL1xuZnMvZXh0NC9pbm9kZS5jOjQzNzojaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcbmZzL2V4dDQvaW5vZGUuYy00Mzgtdm9pZCBleHQ0X2NoZWNrX21hcF9leHRlbnRzX2VudihzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jPTU3Mjg9c3RhdGljIHZvaWQgZXh0NF9tYl9wYV9wdXRfZnJlZShzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX2NvbnRleHQgKmFjKVxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jLTU3NDMtXG5mcy9leHQ0L21iYWxsb2MuYzo1NzQ0OiNpZmRlZiBDT05GSUdfRVhUNF9ERUJVR1xuZnMvZXh0NC9tYmFsbG9jLmMtNTc0NS1zdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9tYl9zaG93X3BhKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmM9NzEyOT1leHQ0X21iYWxsb2NfcXVlcnlfcmFuZ2UoXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmMtNzE4NC1cbmZzL2V4dDQvbWJhbGxvYy5jOjcxODU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0VYVDRfS1VOSVRfVEVTVFMpXG5mcy9leHQ0L21iYWxsb2MuYy03MTg2LXZvaWQgbWJfY2xlYXJfYml0c190ZXN0KHZvaWQgKmJtLCBpbnQgY3VyLCBpbnQgbGVuKVxuLS1cbmZzL2V4dDQvbWJhbGxvYy5oLTI4LSAqL1xuZnMvZXh0NC9tYmFsbG9jLmg6Mjk6I2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXG5mcy9leHQ0L21iYWxsb2MuaC0zMC0jZGVmaW5lIG1iX2RlYnVnKHNiLCBmbXQsIC4uLilcdFx0XHRcdFx0XHRcXFxuLS1cbmZzL2V4dDQvbWJhbGxvYy5oPTI3Mz1leHRlcm4gaW50IGV4dDRfbWJfbWFya19jb250ZXh0KGhhbmRsZV90ICpoYW5kbGUsXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmgtMjc3LVx0XHRleHQ0X2dycGJsa190ICpyZXRfY2hhbmdlZCk7XG5mcy9leHQ0L21iYWxsb2MuaDoyNzg6I2lmIElTX0VOQUJMRUQoQ09ORklHX0VYVDRfS1VOSVRfVEVTVFMpXG5mcy9leHQ0L21iYWxsb2MuaC0yNzktZXh0ZXJuIHZvaWQgbWJfY2xlYXJfYml0c190ZXN0KHZvaWQgKmJtLCBpbnQgY3VyLCBpbnQgbGVuKTtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9MTI1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIGV4dDRfY29udGV4dF9vcHMgPSB7XG4tLVxuZnMvZXh0NC9zdXBlci5jLTEzMi1cbmZzL2V4dDQvc3VwZXIuYzoxMzM6I2lmICFkZWZpbmVkKENPTkZJR19FWFQyX0ZTKSBcdTAwMjZcdTAwMjYgIWRlZmluZWQoQ09ORklHX0VYVDJfRlNfTU9EVUxFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfRVhUNF9VU0VfRk9SX0VYVDIpXG5mcy9leHQ0L3N1cGVyLmMtMTM0LXN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBleHQyX2ZzX3R5cGUgPSB7XG4tLVxuZnMvZXh0NC9zdXBlci5jPTE2OTI9ZW51bSB7XG4tLVxuZnMvZXh0NC9zdXBlci5jLTE3MTUtXHRPcHRfZXJyb3JzLCBPcHRfZGF0YSwgT3B0X2RhdGFfZXJyLCBPcHRfanFmbXQsIE9wdF9kYXhfdHlwZSxcbmZzL2V4dDQvc3VwZXIuYzoxNzE2OiNpZmRlZiBDT05GSUdfRVhUNF9ERUJVR1xuZnMvZXh0NC9zdXBlci5jLTE3MTctXHRPcHRfZmNfZGVidWdfbWF4X3JlcGxheSwgT3B0X2ZjX2RlYnVnX2ZvcmNlXG4tLVxuZnMvZXh0NC9zdXBlci5jPTE3NjI9c3RhdGljIGNvbnN0IHN0cnVjdCBmc19wYXJhbWV0ZXJfc3BlYyBleHQ0X3BhcmFtX3NwZWNzW10gPSB7XG4tLVxuZnMvZXh0NC9zdXBlci5jLTE4MzUtXHRmc3BhcmFtX2ZsYWdcdChcJiMzNDtub2luaXRfaXRhYmxlXCYjMzQ7LFx0T3B0X25vaW5pdF9pdGFibGUpLFxuZnMvZXh0NC9zdXBlci5jOjE4MzY6I2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXG5mcy9leHQ0L3N1cGVyLmMtMTgzNy1cdGZzcGFyYW1fZmxhZ1x0KFwmIzM0O2ZjX2RlYnVnX2ZvcmNlXCYjMzQ7LFx0T3B0X2ZjX2RlYnVnX2ZvcmNlKSxcbi0tXG5mcy9leHQ0L3N1cGVyLmM9MTg3OT1zdGF0aWMgY29uc3Qgc3RydWN0IG1vdW50X29wdHMge1xuLS1cbmZzL2V4dDQvc3VwZXIuYy0xOTIyLVx0e09wdF91c2VyX3hhdHRyLCBFWFQ0X01PVU5UX1hBVFRSX1VTRVIsIE1PUFRfU0VUfSxcbmZzL2V4dDQvc3VwZXIuYzoxOTIzOiNpZmRlZiBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0xcbmZzL2V4dDQvc3VwZXIuYy0xOTI0LVx0e09wdF9hY2wsIEVYVDRfTU9VTlRfUE9TSVhfQUNMLCBNT1BUX1NFVH0sXG4tLVxuZnMvZXh0NC9zdXBlci5jLTE5NDUtXHQgTU9QVF9TRVR9LFxuZnMvZXh0NC9zdXBlci5jOjE5NDY6I2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXG5mcy9leHQ0L3N1cGVyLmMtMTk0Ny1cdHtPcHRfZmNfZGVidWdfZm9yY2UsIEVYVDRfTU9VTlQyX0pPVVJOQUxfRkFTVF9DT01NSVQsXG4tLVxuZnMvZXh0NC9zdXBlci5jPTE5OTc9c3RydWN0IGV4dDRfZnNfY29udGV4dCB7XG4tLVxuZnMvZXh0NC9zdXBlci5jLTIwMDAtXHRpbnRcdFx0c19qcXVvdGFfZm10O1x0LyogRm9ybWF0IG9mIHF1b3RhIHRvIHVzZSAqL1xuZnMvZXh0NC9zdXBlci5jOjIwMDE6I2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXG5mcy9leHQ0L3N1cGVyLmMtMjAwMi1cdGludCBzX2ZjX2RlYnVnX21heF9yZXBsYXk7XG4tLVxuZnMvZXh0NC9zdXBlci5jPTIxNzE9c3RhdGljIGludCBleHQ0X3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pXG4tLVxuZnMvZXh0NC9zdXBlci5jLTIzMDYtXHRcdHJldHVybiAwO1xuZnMvZXh0NC9zdXBlci5jOjIzMDc6I2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXG5mcy9leHQ0L3N1cGVyLmMtMjMwOC1cdGNhc2UgT3B0X2ZjX2RlYnVnX21heF9yZXBsYXk6XG4tLVxuZnMvZXh0NC9zdXBlci5jPTI4NTU9c3RhdGljIHZvaWQgZXh0NF9hcHBseV9vcHRpb25zKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMjg3OC1cbmZzL2V4dDQvc3VwZXIuYzoyODc5OiNpZmRlZiBDT05GSUdfRVhUNF9ERUJVR1xuZnMvZXh0NC9zdXBlci5jLTI4ODAtXHRBUFBMWShzX2ZjX2RlYnVnX21heF9yZXBsYXkpO1xuLS1cbmZzL2V4dDQvc3VwZXIuYz00Mzg4PXN0YXRpYyB2b2lkIGV4dDRfc2V0X2RlZl9vcHRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXh0NC9zdXBlci5jLTQ0MDMtXHRzZXRfb3B0KHNiLCBYQVRUUl9VU0VSKTtcbmZzL2V4dDQvc3VwZXIuYzo0NDA0OiNpZmRlZiBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0xcbmZzL2V4dDQvc3VwZXIuYy00NDA1LVx0c2V0X29wdChzYiwgUE9TSVhfQUNMKTtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9NzM3Nz1zdGF0aWMgc3NpemVfdCBleHQ0X3F1b3RhX3dyaXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLFxuLS1cbmZzL2V4dDQvc3VwZXIuYy03NDM3LVxuZnMvZXh0NC9zdXBlci5jOjc0Mzg6I2lmICFkZWZpbmVkKENPTkZJR19FWFQyX0ZTKSBcdTAwMjZcdTAwMjYgIWRlZmluZWQoQ09ORklHX0VYVDJfRlNfTU9EVUxFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfRVhUNF9VU0VfRk9SX0VYVDIpXG5mcy9leHQ0L3N1cGVyLmMtNzQzOS1zdGF0aWMgaW5saW5lIHZvaWQgcmVnaXN0ZXJfYXNfZXh0Mih2b2lkKVxuLS1cbmZzL2V4dDQvc3lzZnMuYz0yNjY9RVhUNF9SV19BVFRSX1NCSV9QSShtc2dfcmF0ZWxpbWl0X2J1cnN0LCBzX21zZ19yYXRlbGltaXRfc3RhdGUuYnVyc3QpO1xuZnMvZXh0NC9zeXNmcy5jOjI2NzojaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcbmZzL2V4dDQvc3lzZnMuYy0yNjgtRVhUNF9SV19BVFRSX1NCSV9VTChzaW11bGF0ZV9mYWlsLCBzX3NpbXVsYXRlX2ZhaWwpO1xuLS1cbmZzL2V4dDQvc3lzZnMuYz0yOTU9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmV4dDRfYXR0cnNbXSA9IHtcbi0tXG5mcy9leHQ0L3N5c2ZzLmMtMzM1LVx0QVRUUl9MSVNUKGpvdXJuYWxfdGFzayksXG5mcy9leHQ0L3N5c2ZzLmM6MzM2OiNpZmRlZiBDT05GSUdfRVhUNF9ERUJVR1xuZnMvZXh0NC9zeXNmcy5jLTMzNy1cdEFUVFJfTElTVChzaW11bGF0ZV9mYWlsKSxcbi0tXG5mcy9leHQ0L3hhdHRyLmM9ODg9c3RhdGljIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICogY29uc3QgZXh0NF94YXR0cl9oYW5kbGVyX21hcFtdID0ge1xuZnMvZXh0NC94YXR0ci5jLTg5LVx0W0VYVDRfWEFUVFJfSU5ERVhfVVNFUl1cdFx0ICAgICA9IFx1MDAyNmV4dDRfeGF0dHJfdXNlcl9oYW5kbGVyLFxuZnMvZXh0NC94YXR0ci5jOjkwOiNpZmRlZiBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0xcbmZzL2V4dDQveGF0dHIuYy05MS1cdFtFWFQ0X1hBVFRSX0lOREVYX1BPU0lYX0FDTF9BQ0NFU1NdICA9IFx1MDAyNm5vcF9wb3NpeF9hY2xfYWNjZXNzLFxuLS1cbmZzL2V4dDQveGF0dHIuYy05NC1cdFtFWFQ0X1hBVFRSX0lOREVYX1RSVVNURURdXHQgICAgID0gXHUwMDI2ZXh0NF94YXR0cl90cnVzdGVkX2hhbmRsZXIsXG5mcy9leHQ0L3hhdHRyLmM6OTU6I2lmZGVmIENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZXG5mcy9leHQ0L3hhdHRyLmMtOTYtXHRbRVhUNF9YQVRUUl9JTkRFWF9TRUNVUklUWV1cdCAgICAgPSBcdTAwMjZleHQ0X3hhdHRyX3NlY3VyaXR5X2hhbmRsZXIsXG4tLVxuZnMvZXh0NC94YXR0ci5jPTEwMT1jb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqIGNvbnN0IGV4dDRfeGF0dHJfaGFuZGxlcnNbXSA9IHtcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTAzLVx0XHUwMDI2ZXh0NF94YXR0cl90cnVzdGVkX2hhbmRsZXIsXG5mcy9leHQ0L3hhdHRyLmM6MTA0OiNpZmRlZiBDT05GSUdfRVhUNF9GU19TRUNVUklUWVxuZnMvZXh0NC94YXR0ci5jLTEwNS1cdFx1MDAyNmV4dDRfeGF0dHJfc2VjdXJpdHlfaGFuZGxlcixcbi0tXG5mcy9leHQ0L3hhdHRyLmg9MjEzPV9feGF0dHJfY2hlY2tfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfaGVhZGVyICpoZWFkZXIsXG4tLVxuZnMvZXh0NC94YXR0ci5oLTIxOC1cbmZzL2V4dDQveGF0dHIuaDoyMTk6I2lmZGVmIENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZXG5mcy9leHQ0L3hhdHRyLmgtMjIwLWV4dGVybiBpbnQgZXh0NF9pbml0X3NlY3VyaXR5KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3NzAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyB0aGUgZXh0NCBLY29uZmlnKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGRpdmUgaW50byB0aGUgaGVhcnQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhhdCBtZWFucyBgZnMvZXh0NC9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBmZWF0dXJlIGZsYWdzIGFyZSBkZWZpbmVkLCBkZXBlbmRlbmNpZXMgYXJlIGxhaWQgb3V0LCBhbmQgdGhlIGJ1aWxkIHN5c3RlbSBrbm93cyBob3cgdG8gaGFuZGxlIHRoZSBleHQ0LXNwZWNpZmljIGNvbXBvbmVudHMuIEkmIzM5O20gaG9waW5nIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4gVW5kZXJzdGFuZGluZyB0aGUgS2NvbmZpZyBmaWxlIGdpdmVzIG1lIHRoZSBsb3ctbGV2ZWwgYnVpbGRpbmcgYmxvY2tzIGZvciB3aGF0JiMzOTtzIHBvc3NpYmxlLCBhbmQgd2hlcmUgdG8gbG9vayB3aGVuIHNvbWV0aGluZyBpc24mIzM5O3Qgd29ya2luZyBhcyBleHBlY3RlZC4gVGhpcyBhbGxvd3MgbWUgdG8gc2VlIHRoZSBjb25maWd1cmF0aW9uIGFuZCBhbGwgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBFWFQ0X0ZTXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVwmIzM0O1xuICAgNDpcdFx0c2VsZWN0IEJVRkZFUl9IRUFEXG4gICA1Olx0XHRzZWxlY3QgSkJEMlxuICAgNjpcdFx0c2VsZWN0IENSQzE2XG4gICA3Olx0XHRzZWxlY3QgQ1JDMzJcbiAgIDg6XHRcdHNlbGVjdCBGU19JT01BUFxuICAgOTpcdFx0c2VsZWN0IEZTX0VOQ1JZUFRJT05fQUxHUyBpZiBGU19FTkNSWVBUSU9OXG4gIDEwOlx0XHRoZWxwXG4gIDExOlx0XHQgIFRoaXMgaXMgdGhlIG5leHQgZ2VuZXJhdGlvbiBvZiB0aGUgZXh0MyBmaWxlc3lzdGVtLlxuICAxMjpcdFxuICAxMzpcdFx0ICBVbmxpa2UgdGhlIGNoYW5nZSBmcm9tIGV4dDIgZmlsZXN5c3RlbSB0byBleHQzIGZpbGVzeXN0ZW0sXG4gIDE0Olx0XHQgIHRoZSBvbi1kaXNrIGZvcm1hdCBvZiBleHQ0IGlzIG5vdCBmb3J3YXJkcyBjb21wYXRpYmxlIHdpdGhcbiAgMTU6XHRcdCAgZXh0MzsgaXQgaXMgYmFzZWQgb24gZXh0ZW50IG1hcHMgYW5kIGl0IHN1cHBvcnRzIDQ4LWJpdFxuICAxNjpcdFx0ICBwaHlzaWNhbCBibG9jayBudW1iZXJzLiAgVGhlIGV4dDQgZmlsZXN5c3RlbSBhbHNvIHN1cHBvcnRzIGRlbGF5ZWRcbiAgMTc6XHRcdCAgYWxsb2NhdGlvbiwgcGVyc2lzdGVudCBwcmVhbGxvY2F0aW9uLCBoaWdoIHJlc29sdXRpb24gdGltZSBzdGFtcHMsXG4gIDE4Olx0XHQgIGFuZCBhIG51bWJlciBvZiBvdGhlciBmZWF0dXJlcyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIGFuZCBzcGVlZFxuICAxOTpcdFx0ICB1cCBmc2NrIHRpbWUuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHNlZSB0aGUgd2ViIHBhZ2VzIGF0XG4gIDIwOlx0XHQgIGh0dHA6Ly9leHQ0Lndpa2kua2VybmVsLm9yZy5cbiAgMjE6XHRcbiAgMjI6XHRcdCAgVGhlIGV4dDQgZmlsZXN5c3RlbSBzdXBwb3J0cyBtb3VudGluZyBhbiBleHQzIGZpbGVzeXN0ZW07IHdoaWxlIHRoZXJlXG4gIDIzOlx0XHQgIGFyZSBzb21lIHBlcmZvcm1hbmNlIGdhaW5zIGZyb20gdGhlIGRlbGF5ZWQgYWxsb2NhdGlvbiBhbmQgaW5vZGVcbiAgMjQ6XHRcdCAgdGFibGUgcmVhZGFoZWFkLCB0aGUgYmVzdCBwZXJmb3JtYW5jZSBnYWlucyByZXF1aXJlIGVuYWJsaW5nIGV4dDRcbiAgMjU6XHRcdCAgZmVhdHVyZXMgaW4gdGhlIGZpbGVzeXN0ZW0gdXNpbmcgdHVuZTJmcywgb3IgZm9ybWF0dGluZyBhIG5ld1xuICAyNjpcdFx0ICBmaWxlc3lzdGVtIGFzIGFuIGV4dDQgZmlsZXN5c3RlbSBpbml0aWFsbHkuIFdpdGhvdXQgZXhwbGljaXQgZW5hYmxpbmdcbiAgMjc6XHRcdCAgb2YgZXh0NCBmZWF0dXJlcywgdGhlIG9uIGRpc2sgZmlsZXN5c3RlbSBmb3JtYXQgc3RheXMgZnVsbHkgYmFja3dhcmRcbiAgMjg6XHRcdCAgY29tcGF0aWJsZS5cbiAgMjk6XHRcbiAgMzA6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGZpbGUgc3lzdGVtIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZVxuICAzMTpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZXh0NC5cbiAgMzI6XHRcbiAgMzM6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMzQ6XHRcbiAgMzU6XHRjb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcbiAgMzY6XHRcdGJvb2wgXCYjMzQ7VXNlIGV4dDQgZm9yIGV4dDIgZmlsZSBzeXN0ZW1zXCYjMzQ7XG4gIDM3Olx0XHRkZXBlbmRzIG9uIEVYVDRfRlNcbiAgMzg6XHRcdGRlcGVuZHMgb24gRVhUMl9GUz1uXG4gIDM5Olx0XHRkZWZhdWx0IHlcbiAgNDA6XHRcdGhlbHBcbiAgNDE6XHRcdCAgQWxsb3cgdGhlIGV4dDQgZmlsZSBzeXN0ZW0gZHJpdmVyIGNvZGUgdG8gYmUgdXNlZCBmb3IgZXh0MlxuICA0MjpcdFx0ICBmaWxlIHN5c3RlbSBtb3VudHMuICBUaGlzIGFsbG93cyB1c2VycyB0byByZWR1Y2UgdGhlaXJcbiAgNDM6XHRcdCAgY29tcGlsZWQga2VybmVsIHNpemUgYnkgdXNpbmcgb25lIGZpbGUgc3lzdGVtIGRyaXZlciBmb3JcbiAgNDQ6XHRcdCAgZXh0MiwgZXh0MywgYW5kIGV4dDQgZmlsZSBzeXN0ZW1zLlxuICA0NTpcdFxuICA0NjpcdGNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxuICA0NzpcdFx0Ym9vbCBcJiMzNDtFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4gIDQ4Olx0XHRkZXBlbmRzIG9uIEVYVDRfRlNcbiAgNDk6XHRcdHNlbGVjdCBGU19QT1NJWF9BQ0xcbiAgNTA6XHRcdGhlbHBcbiAgNTE6XHRcdCAgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHMgKEFDTHMpIHN1cHBvcnQgcGVybWlzc2lvbnMgZm9yIHVzZXJzIGFuZFxuICA1MjpcdFx0ICBncm91cHMgYmV5b25kIHRoZSBvd25lci9ncm91cC93b3JsZCBzY2hlbWUuXG4gIDUzOlx0XG4gIDU0Olx0XHQgIElmIHlvdSBkb24mIzM5O3Qga25vdyB3aGF0IEFjY2VzcyBDb250cm9sIExpc3RzIGFyZSwgc2F5IE5cbiAgNTU6XHRcbiAgNTY6XHRjb25maWcgRVhUNF9GU19TRUNVUklUWVxuICA1NzpcdFx0Ym9vbCBcJiMzNDtFeHQ0IFNlY3VyaXR5IExhYmVsc1wmIzM0O1xuICA1ODpcdFx0ZGVwZW5kcyBvbiBFWFQ0X0ZTXG4gIDU5Olx0XHRoZWxwXG4gIDYwOlx0XHQgIFNlY3VyaXR5IGxhYmVscyBzdXBwb3J0IGFsdGVybmF0aXZlIGFjY2VzcyBjb250cm9sIG1vZGVsc1xuICA2MTpcdFx0ICBpbXBsZW1lbnRlZCBieSBzZWN1cml0eSBtb2R1bGVzIGxpa2UgU0VMaW51eC4gIFRoaXMgb3B0aW9uXG4gIDYyOlx0XHQgIGVuYWJsZXMgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIGhhbmRsZXIgZm9yIGZpbGUgc2VjdXJpdHlcbiAgNjM6XHRcdCAgbGFiZWxzIGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0uXG4gIDY0Olx0XG4gIDY1Olx0XHQgIElmIHlvdSBhcmUgbm90IHVzaW5nIGEgc2VjdXJpdHkgbW9kdWxlIHRoYXQgcmVxdWlyZXMgdXNpbmdcbiAgNjY6XHRcdCAgZXh0ZW5kZWQgYXR0cmlidXRlcyBmb3IgZmlsZSBzZWN1cml0eSBsYWJlbHMsIHNheSBOLlxuICA2NzpcdFxuICA2ODpcdGNvbmZpZyBFWFQ0X0RFQlVHXG4gIDY5Olx0XHRib29sIFwmIzM0O0V4dDQgZGVidWdnaW5nIHN1cHBvcnRcJiMzNDtcbiAgNzA6XHRcdGRlcGVuZHMgb24gRVhUNF9GU1xuICA3MTpcdFx0aGVscFxuICA3MjpcdFx0ICBFbmFibGVzIHJ1bi10aW1lIGRlYnVnZ2luZyBzdXBwb3J0IGZvciB0aGUgZXh0NCBmaWxlc3lzdGVtLlxuICA3MzpcdFxuICA3NDpcdFx0ICBJZiB5b3Ugc2VsZWN0IFkgaGVyZSwgdGhlbiB5b3Ugd2lsbCBiZSBhYmxlIHRvIHR1cm4gb24gZGVidWdnaW5nXG4gIDc1Olx0XHQgIHVzaW5nIGR5bmFtaWMgZGVidWcgY29udHJvbCBmb3IgbWJfZGVidWcoKSAvIGV4dF9kZWJ1ZygpIG1zZ3MuXG4gIDc2Olx0XG4gIDc3Olx0Y29uZmlnIEVYVDRfS1VOSVRfVEVTVFNcbiAgNzg6XHRcdHRyaXN0YXRlIFwmIzM0O0tVbml0IHRlc3RzIGZvciBleHQ0XCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgNzk6XHRcdGRlcGVuZHMgb24gRVhUNF9GUyBcdTAwMjZcdTAwMjYgS1VOSVRcbiAgODA6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDgxOlx0XHRoZWxwXG4gIDgyOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBleHQ0IEtVbml0IHRlc3RzLlxuICA4MzpcdFxuICA4NDpcdFx0ICBLVW5pdCB0ZXN0cyBydW4gZHVyaW5nIGJvb3QgYW5kIG91dHB1dCB0aGUgcmVzdWx0cyB0byB0aGUgZGVidWcgbG9nXG4gIDg1Olx0XHQgIGluIFRBUCBmb3JtYXQgKGh0dHBzOi8vdGVzdGFueXRoaW5nLm9yZy8pLiBPbmx5IHVzZWZ1bCBmb3Iga2VybmVsIGRldnNcbiAgODY6XHRcdCAgcnVubmluZyBLVW5pdCB0ZXN0IGhhcm5lc3MgYW5kIGFyZSBub3QgZm9yIGluY2x1c2lvbiBpbnRvIGEgcHJvZHVjdGlvblxuICA4NzpcdFx0ICBidWlsZC5cbiAgODg6XHRcbiAgODk6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCBwbGVhc2UgcmVmZXJcbiAgOTA6XHRcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24gaW4gRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva3VuaXQvLlxuICA5MTpcdFxuICA5MjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjkxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgYGZzL2V4dDQvaW5saW5lLmNgLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gZXh0NCBJbmxpbmUgQ29udmVyc2lvbiBpbiBgaW5saW5lLmNgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXNzZWN0IGBmcy9leHQ0L2lubGluZS5jYC4gTXkgcHJpbWFyeSBpbnRlcmVzdCBoZXJlIGxpZXMgaW4gdW5kZXJzdGFuZGluZyB0aGUgbWVjaGFuaWNzIG9mIGlubGluZSBjb252ZXJzaW9uIHdpdGhpbiB0aGUgZXh0NCBmaWxlc3lzdGVtLiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIHRyaWdnZXJzIGZvciB0aGlzIGNvbnZlcnNpb24gcHJvY2VzcywgYW5kIHRoZW4gSSB3YW50IHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHRoZSBub24tc3RhdGljIGVudHJ5IHBvaW50cyDigJMgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBlZmZlY3RpdmVseSB0aGUgZm9jdXMgc3ltYm9scywgdGhlIGludGVyZmFjZSBpbnRvIHRoaXMgZnVuY3Rpb25hbGl0eS4gV2hhdCBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIGFyZSAqZXhwb3NlZCogYW5kIGFyZSByZXNwb25zaWJsZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGluIHRoaXMgZmlsZSB0aGF0IEkgY2FuIGFjdHVhbGx5IGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX10uKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvaW5saW5lLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9pbmxpbmUuYy0yNC1cbmZzL2V4dDQvaW5saW5lLmM6MjU6c3RhdGljIGludCBleHQ0X2RhX2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuZnMvZXh0NC9pbmxpbmUuYy0yNi1cdFx0XHRcdFx0XHQgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTI4LVxuZnMvZXh0NC9pbmxpbmUuYzoyOTpzdGF0aWMgaW50IGV4dDRfZ2V0X2lubGluZV9zaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9leHQ0L2lubGluZS5jLTMwLXtcbi0tXG5mcy9leHQ0L2lubGluZS5jLTM2LVxuZnMvZXh0NC9pbmxpbmUuYzozNzpzdGF0aWMgaW50IGdldF9tYXhfaW5saW5lX3hhdHRyX3ZhbHVlX3NpemUoc3RydWN0IGlub2RlICppbm9kZSxcbmZzL2V4dDQvaW5saW5lLmMtMzgtXHRcdFx0XHRcdCAgIHN0cnVjdCBleHQ0X2lsb2MgKmlsb2MpXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xMTEtICovXG5mcy9leHQ0L2lubGluZS5jOjExMjppbnQgZXh0NF9nZXRfbWF4X2lubGluZV9zaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9leHQ0L2lubGluZS5jLTExMy17XG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xNDQtICovXG5mcy9leHQ0L2lubGluZS5jOjE0NTppbnQgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvZXh0NC9pbmxpbmUuYy0xNDYte1xuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTgzLVxuZnMvZXh0NC9pbmxpbmUuYzoxODQ6c3RhdGljIGludCBleHQ0X3JlYWRfaW5saW5lX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqYnVmZmVyLFxuZnMvZXh0NC9pbmxpbmUuYy0xODUtXHRcdFx0XHQgdW5zaWduZWQgaW50IGxlbixcbi0tXG5mcy9leHQ0L2lubGluZS5jLTIyOC0gKi9cbmZzL2V4dDQvaW5saW5lLmM6MjI5OnN0YXRpYyB2b2lkIGV4dDRfd3JpdGVfaW5saW5lX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfaWxvYyAqaWxvYyxcbmZzL2V4dDQvaW5saW5lLmMtMjMwLVx0XHRcdFx0ICAgdm9pZCAqYnVmZmVyLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBpbnQgbGVuKVxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMjY3LVxuZnMvZXh0NC9pbmxpbmUuYzoyNjg6c3RhdGljIGludCBleHQ0X2NyZWF0ZV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLFxuZnMvZXh0NC9pbmxpbmUuYy0yNjktXHRcdFx0XHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBsZW4pXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0zMzYtXG5mcy9leHQ0L2lubGluZS5jOjMzNzpzdGF0aWMgaW50IGV4dDRfdXBkYXRlX2lubGluZV9kYXRhKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9leHQ0L2lubGluZS5jLTMzOC1cdFx0XHRcdCAgIHVuc2lnbmVkIGludCBsZW4pXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy00MDctXG5mcy9leHQ0L2lubGluZS5jOjQwODpzdGF0aWMgaW50IGV4dDRfcHJlcGFyZV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuZnMvZXh0NC9pbmxpbmUuYy00MDktXHRcdFx0XHQgICAgbG9mZl90IGxlbilcbi0tXG5mcy9leHQ0L2lubGluZS5jLTQzNi1cbmZzL2V4dDQvaW5saW5lLmM6NDM3OnN0YXRpYyBpbnQgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxuZnMvZXh0NC9pbmxpbmUuYy00MzgtXHRcdFx0XHRcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy01MDMtXG5mcy9leHQ0L2lubGluZS5jOjUwNDpzdGF0aWMgaW50IGV4dDRfcmVhZF9pbmxpbmVfZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbylcbmZzL2V4dDQvaW5saW5lLmMtNTA1LXtcbi0tXG5mcy9leHQ0L2lubGluZS5jLTU0NS1cbmZzL2V4dDQvaW5saW5lLmM6NTQ2OmludCBleHQ0X3JlYWRwYWdlX2lubGluZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuZnMvZXh0NC9pbmxpbmUuYy01NDcte1xuLS1cbmZzL2V4dDQvaW5saW5lLmMtNTcyLVxuZnMvZXh0NC9pbmxpbmUuYzo1NzM6c3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuZnMvZXh0NC9pbmxpbmUuYy01NzQtXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy02OTYtICovXG5mcy9leHQ0L2lubGluZS5jOjY5NzppbnQgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuZnMvZXh0NC9pbmxpbmUuYy02OTgtXHRcdFx0XHRcdCAgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTc4My0gKi9cbmZzL2V4dDQvaW5saW5lLmM6Nzg0OmludCBleHQ0X3RyeV90b193cml0ZV9pbmxpbmVfZGF0YShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbmZzL2V4dDQvaW5saW5lLmMtNzg1LVx0XHRcdFx0ICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvaW5saW5lLmMtNzk0LVxuZnMvZXh0NC9pbmxpbmUuYzo3OTU6aW50IGV4dDRfd3JpdGVfaW5saW5lX2RhdGFfZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbixcbmZzL2V4dDQvaW5saW5lLmMtNzk2LVx0XHRcdCAgICAgICB1bnNpZ25lZCBjb3BpZWQsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy04ODUtICovXG5mcy9leHQ0L2lubGluZS5jOjg4NjpzdGF0aWMgaW50IGV4dDRfZGFfY29udmVydF9pbmxpbmVfZGF0YV90b19leHRlbnQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG5mcy9leHQ0L2lubGluZS5jLTg4Ny1cdFx0XHRcdFx0XHQgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTkzNy0jaWZkZWYgSU5MSU5FX0RJUl9ERUJVR1xuZnMvZXh0NC9pbmxpbmUuYzo5Mzg6dm9pZCBleHQ0X3Nob3dfaW5saW5lX2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcbmZzL2V4dDQvaW5saW5lLmMtOTM5LVx0XHRcdCAgdm9pZCAqaW5saW5lX3N0YXJ0LCBpbnQgaW5saW5lX3NpemUpXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy05NjktICovXG5mcy9leHQ0L2lubGluZS5jOjk3MDpzdGF0aWMgaW50IGV4dDRfYWRkX2RpcmVudF90b19pbmxpbmUoaGFuZGxlX3QgKmhhbmRsZSxcbmZzL2V4dDQvaW5saW5lLmMtOTcxLVx0XHRcdFx0ICAgICBzdHJ1Y3QgZXh0NF9maWxlbmFtZSAqZm5hbWUsXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xMDEwLVxuZnMvZXh0NC9pbmxpbmUuYzoxMDExOnN0YXRpYyB2b2lkICpleHQ0X2dldF9pbmxpbmVfeGF0dHJfcG9zKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9leHQ0L2lubGluZS5jLTEwMTItXHRcdFx0XHQgICAgICAgc3RydWN0IGV4dDRfaWxvYyAqaWxvYylcbi0tXG5mcy9leHQ0L2lubGluZS5jLTEwMjYtLyogU2V0IHRoZSBmaW5hbCBkZSB0byBjb3ZlciB0aGUgd2hvbGUgYmxvY2suICovXG5mcy9leHQ0L2lubGluZS5jOjEwMjc6dm9pZCBleHQ0X3VwZGF0ZV9maW5hbF9kZSh2b2lkICpkZV9idWYsIGludCBvbGRfc2l6ZSwgaW50IG5ld19zaXplKVxuZnMvZXh0NC9pbmxpbmUuYy0xMDI4LXtcbi0tXG5mcy9leHQ0L2lubGluZS5jLTEwNTEtXG5mcy9leHQ0L2lubGluZS5jOjEwNTI6c3RhdGljIGludCBleHQ0X3VwZGF0ZV9pbmxpbmVfZGlyKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuZnMvZXh0NC9pbmxpbmUuYy0xMDUzLVx0XHRcdFx0ICBzdHJ1Y3QgZXh0NF9pbG9jICppbG9jKVxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTA3My1cbmZzL2V4dDQvaW5saW5lLmM6MTA3NDpzdGF0aWMgaW50IGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfZnNibGtfdCBibG9jayxcbmZzL2V4dDQvaW5saW5lLmMtMTA3NS1cdFx0XHRcdFx0dW5zaWduZWQgaW50IGxlbiwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbi0tXG5mcy9leHQ0L2lubGluZS5jLTExOTQtXG5mcy9leHQ0L2lubGluZS5jOjExOTU6c3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXG5mcy9leHQ0L2lubGluZS5jLTExOTYtXHRcdFx0XHRcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xMjk1LSAqL1xuZnMvZXh0NC9pbmxpbmUuYzoxMjk2OmludCBleHQ0X3RyeV9hZGRfaW5saW5lX2VudHJ5KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBleHQ0X2ZpbGVuYW1lICpmbmFtZSxcbmZzL2V4dDQvaW5saW5lLmMtMTI5Ny1cdFx0XHQgICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L2lubGluZS5jLTEzNjQtICovXG5mcy9leHQ0L2lubGluZS5jOjEzNjU6aW50IGV4dDRfaW5saW5lZGlyX3RvX3RyZWUoc3RydWN0IGZpbGUgKmRpcl9maWxlLFxuZnMvZXh0NC9pbmxpbmUuYy0xMzY2LVx0XHRcdCAgIHN0cnVjdCBpbm9kZSAqZGlyLCBleHQ0X2xibGtfdCBibG9jayxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTE0ODUtICovXG5mcy9leHQ0L2lubGluZS5jOjE0ODY6aW50IGV4dDRfcmVhZF9pbmxpbmVfZGlyKHN0cnVjdCBmaWxlICpmaWxlLFxuZnMvZXh0NC9pbmxpbmUuYy0xNDg3LVx0XHRcdCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eCxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTE2MTYtXG5mcy9leHQ0L2lubGluZS5jOjE2MTc6dm9pZCAqZXh0NF9yZWFkX2lubGluZV9saW5rKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9leHQ0L2lubGluZS5jLTE2MTgte1xuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTY0NS1cbmZzL2V4dDQvaW5saW5lLmM6MTY0NjpzdHJ1Y3QgYnVmZmVyX2hlYWQgKmV4dDRfZ2V0X2ZpcnN0X2lubGluZV9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuZnMvZXh0NC9pbmxpbmUuYy0xNjQ3LVx0XHRcdFx0XHRzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqKnBhcmVudF9kZSxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTE2NjUtICovXG5mcy9leHQ0L2lubGluZS5jOjE2NjY6aW50IGV4dDRfdHJ5X2NyZWF0ZV9pbmxpbmVfZGlyKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuZnMvZXh0NC9pbmxpbmUuYy0xNjY3LVx0XHRcdCAgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTY5OC1cbmZzL2V4dDQvaW5saW5lLmM6MTY5OTpzdHJ1Y3QgYnVmZmVyX2hlYWQgKmV4dDRfZmluZF9pbmxpbmVfZW50cnkoc3RydWN0IGlub2RlICpkaXIsXG5mcy9leHQ0L2lubGluZS5jLTE3MDAtXHRcdFx0XHRcdHN0cnVjdCBleHQ0X2ZpbGVuYW1lICpmbmFtZSxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTE3NjEtXG5mcy9leHQ0L2lubGluZS5jOjE3NjI6aW50IGV4dDRfZGVsZXRlX2lubGluZV9lbnRyeShoYW5kbGVfdCAqaGFuZGxlLFxuZnMvZXh0NC9pbmxpbmUuYy0xNzYzLVx0XHRcdCAgICAgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvZXh0NC9pbmxpbmUuYz0xODE5PXN0YXRpYyBpbmxpbmUgc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKlxuZnMvZXh0NC9pbmxpbmUuYzoxODIwOmV4dDRfZ2V0X2lubGluZV9lbnRyeShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuZnMvZXh0NC9pbmxpbmUuYy0xODIxLVx0XHQgICAgICBzdHJ1Y3QgZXh0NF9pbG9jICppbG9jLFxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTg0NC1cbmZzL2V4dDQvaW5saW5lLmM6MTg0NTpib29sIGVtcHR5X2lubGluZV9kaXIoc3RydWN0IGlub2RlICpkaXIsIGludCAqaGFzX2lubGluZV9kYXRhKVxuZnMvZXh0NC9pbmxpbmUuYy0xODQ2LXtcbi0tXG5mcy9leHQ0L2lubGluZS5jLTE5MDctXG5mcy9leHQ0L2lubGluZS5jOjE5MDg6aW50IGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvZXh0NC9pbmxpbmUuYy0xOTA5LXtcbi0tXG5mcy9leHQ0L2lubGluZS5jLTE5MTgtXG5mcy9leHQ0L2lubGluZS5jOjE5MTk6aW50IGV4dDRfaW5saW5lX2RhdGFfaW9tYXAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlvbWFwICppb21hcClcbmZzL2V4dDQvaW5saW5lLmMtMTkyMC17XG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xOTUwLVxuZnMvZXh0NC9pbmxpbmUuYzoxOTUxOmludCBleHQ0X2lubGluZV9kYXRhX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCAqaGFzX2lubGluZSlcbmZzL2V4dDQvaW5saW5lLmMtMTk1Mi17XG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0yMDYyLVxuZnMvZXh0NC9pbmxpbmUuYzoyMDYzOmludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2V4dDQvaW5saW5lLmMtMjA2NC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDA1CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBFeHQ0IElubGluZSBEYXRhIENvbnZlcnNpb24gQ29kZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSYjMzk7bSBleGFtaW5pbmcgdGhlIGZ1bmN0aW9uIGNhbGxzIHJlbGF0ZWQgdG8gYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YWAuICBJIHNlZSB0aGF0IGl0JiMzOTtzIGFuIGV4cG9ydGVkIGZ1bmN0aW9uLCBtZWFuaW5nIGl0JiMzOTtzIGFjY2Vzc2libGUgb3V0c2lkZSBpdHMgb3duIG1vZHVsZSwgYW5kIGl0IHJlc2lkZXMgaW4gYGZzL2V4dDQvaW5saW5lLmNgLiAgYGV4dDRfdHJ5X2FkZF9pbmxpbmVfZW50cnlgIGNhbGxzIGl0LCBhbmQgaXQgYWxzbyBjYWxscyBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja2AuIEludGVyZXN0aW5nIHRoYXQgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YWAgaXMgY2FsbGluZyBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja2AuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhvc2UuCgpOb3csIGxldCYjMzk7cyBmaWd1cmUgb3V0IHdoYXQgZWxzZSBpcyBjYWxsaW5nIGludG8gdGhpcyBhcmVhIG9mIGNvZGUuIFNjYW5uaW5nIHRoZSBjb2RlYmFzZSwgSSBmaW5kIHRoYXQsIGJleW9uZCBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhYCBpdHNlbGYsIHdlIGFsc28gaGF2ZSBgZXh0NF90cnlfYWRkX2lubGluZV9lbnRyeWAsIGBleHQ0X2ZhbGxvY2F0ZWAgaW4gdGhlIGV4dGVudHMgY29kZSwgYGV4dDRfc2V0YXR0cmAgaW4gdGhlIGlub2RlIGNvZGUsIGFuZCBgZXh0NF9wYWdlX21rd3JpdGVgLCBhbHNvIGluIHRoZSBpbm9kZSBjb2RlLCBhbGwgdG91Y2hpbmcgdGhpcyBpbmxpbmUgZGF0YSBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGVjb3N5c3RlbS4KClRoZSBnb29kIG5ld3MgaXMgdGhhdCB0aGlzIGlzIGRlZmluaXRlbHkgZnV6emFibGU6ICBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIGNvcmUgZmlsZXN5c3RlbSBjb2RlLCBzcGVjaWZpY2FsbHkgZXh0NCBpbmxpbmUgZGF0YSBjb252ZXJzaW9uLiBJdCYjMzk7cyByZWFkaWx5IGFjY2Vzc2libGUgaW4gYSBRRU1VIGVudmlyb25tZW50LCBhbmQgd2UgY2FuIHRyaWdnZXIgaXQgdGhyb3VnaCBzdGFuZGFyZCBvcGVyYXRpb25zIGxpa2UgbW91bnRpbmcgaW1hZ2VzIHdpdGggdGhlIGBpbmxpbmVfZGF0YWAgb3B0aW9uLCB1c2luZyB4YXR0cnMsIG1hbmlwdWxhdGluZyBpbmxpbmUgZGlyZWN0b3J5IGVudHJpZXMsIG9yIHVzaW5nIGBmYWxsb2NhdGVgIG9yIGBzZXRhdHRyYC4gIEZ1cnRoZXJtb3JlLCB0aGUgcHJlc2VuY2Ugb2YgcmVmYWN0b3JlZCBjb2RlIGxpa2UgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2tgIGFuZCB0aGUgbmV3IGBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9ja2AgaW5kaWNhdGVzIGEgbm9uLXRyaXZpYWwgZnVuY3Rpb25hbCBjaGFuZ2UsIG1ha2luZyB0aGlzIGFuIGV2ZW4gbW9yZSBjb21wZWxsaW5nIHRhcmdldCBmb3IgZnV6emluZy4KCkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIGBDT05GSUdfRVhUNF9GU2AgKG9yIGp1c3QgYEVYVDRfRlNgKSBpcyB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGlubGluZSBkYXRhIGRvZXNuJiMzOTt0IHJlcXVpcmUgYW55ICpzcGVjaWFsKiBjb25maWcgb3B0aW9ucyBiZXlvbmQgdGhlIGJhc2UgZXh0NCBzdXBwb3J0LiBJJiMzOTtsbCBzZWFyY2ggdGhlIGBmcy9leHQ0L01ha2VmaWxlYCBmb3IgYGlubGluZS5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25kaXRpb25hbCBjb21waWxhdGlvbiBmbGFncyBiZWluZyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbmxpbmVcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L01ha2VmaWxlPTg9ZXh0NC15XHQ6PSBiYWxsb2MubyBiaXRtYXAubyBibG9ja192YWxpZGl0eS5vIGRpci5vIGV4dDRfamJkMi5vIGV4dGVudHMubyBcXFxuZnMvZXh0NC9NYWtlZmlsZS05LVx0XHRleHRlbnRzX3N0YXR1cy5vIGZpbGUubyBmc21hcC5vIGZzeW5jLm8gaGFzaC5vIGlhbGxvYy5vIFxcXG5mcy9leHQ0L01ha2VmaWxlOjEwOlx0XHRpbmRpcmVjdC5vIGlubGluZS5vIGlub2RlLm8gaW9jdGwubyBtYmFsbG9jLm8gbWlncmF0ZS5vIFxcXG5mcy9leHQ0L01ha2VmaWxlLTExLVx0XHRtbXAubyBtb3ZlX2V4dGVudC5vIG5hbWVpLm8gcGFnZS1pby5vIHJlYWRwYWdlLm8gcmVzaXplLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0NjUKCQkJCQkJCW91dHB1dDogMTQyCgkJCQkJCQl0aG91Z2h0czogNDAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGV4dDQgSW5saW5lIERhdGEgQ29udmVyc2lvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGlubGluZSBkYXRhIGNvbnZlcnNpb24gaW4gZXh0NCBpcyBoYW5kbGVkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgaW5saW5lLm9gIGlzIGFsd2F5cyBidWlsdCBpbnRvIGBleHQ0LXlgIHdoZW4gYENPTkZJR19FWFQ0X0ZTYCBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhlIHJlYWwgcXVlc3Rpb24gaXMsIGFyZSB0aGVyZSAqb3RoZXIqIGNvbmZpZyBmbGFncyB0aGF0IGFyZSBhbHNvIHJlcXVpcmVkIG9yIHNob3VsZCBiZSBjb25zaWRlcmVkPwoKYEVYVDRfRlNgIHNlZW1zIHRvIHB1bGwgaW4gYSBsb3Qgb2YgZGVwZW5kZW5jaWVzOiBgQlVGRkVSX0hFQURgLCBgSkJEMmAsIGBDUkMxNmAsIGBDUkMzMmAsIGFuZCBgRlNfSU9NQVBgLiBTbywgYEVYVDRfRlNgIGlzIGRlZmluaXRlbHkgdGhlICptYWluKiByZXF1aXJlbWVudC4KCk5vdywgbGV0JiMzOTtzIGRyaWxsIGRvd24gaW50byB0aGUga2V5IGZ1bmN0aW9ucy4gTXkgRm9jdXNTeW1ib2xzIGFyZSBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhYCBhbmQgYGV4dDRfdHJ5X2FkZF9pbmxpbmVfZW50cnlgLiBJIG5lZWQgdG8gY29uZmlybSB0aGVzZSBhcmUgdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzIHRvIGZvY3VzIG9uLiBUaGV5IGFyZSBub24tc3RhdGljIGFuZCBub24taW5saW5lZCwgc28gZ29vZCB0YXJnZXRzLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGVudGlyZSBjb250ZXh0IG9mIHRoZXNlIGZ1bmN0aW9ucy4gTGV0IG1lIHNlZSB3aGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgcmVsZXZhbnQuIEkmIzM5O20gbm90aW5nIHRoYXQgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2tgIGNhbGxzIHNldmVyYWwgb3RoZXIgZnVuY3Rpb25zIGxpa2UgYGV4dDRfbWJfbmV3X2Jsb2Nrc2AsIGBleHQ0X2luaXRfZGlyYmxvY2tgLCBhbmQgYGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrYC4gQW5kIGBleHQ0X3RyeV9hZGRfaW5saW5lX2VudHJ5YCBhbmQgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YWAgYXJlIHRoZSBjYWxsZXJzIG9mIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrYC4KClRoZW4sIEkgc2VlIHRoZSBjYWxsZXJzIG9mIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFgOiBgZXh0NF9mYWxsb2NhdGVgLCBgZXh0NF9zZXRhdHRyYCwgYGV4dDRfcGFnZV9ta3dyaXRlYCwgYGV4dDRfc2V0X2NvbnRleHRgLCBhbmQgYGV4dDRfYmVnaW5fZW5hYmxlX3Zlcml0eWAuIFRoaXMgZ2l2ZXMgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBmdWxsIHNldCBvZiBjb250ZXh0cyB0aGUgY29udmVyc2lvbiBpcyB1c2VkIHdpdGhpbi4KCkdpdmVuIHdoYXQgSSYjMzk7dmUgZm91bmQsIG15IGZpbmFsIHNldC1yZXN1bHRzIGFyZToKKiAgIGBFbmFibGVDb25maWdzYDogYFsmIzM0O0VYVDRfRlMmIzM0O11gCiogICBgRm9jdXNTeW1ib2xzYDogYFsmIzM0O2V4dDRfY29udmVydF9pbmxpbmVfZGF0YSYjMzQ7LCAmIzM0O2V4dDRfdHJ5X2FkZF9pbmxpbmVfZW50cnkmIzM0O11gCiogICBgUmVhc29uaW5nYDogQ29uY2lzZSBleHBsYW5hdGlvbgoqICAgYFdvcnRoRnV6emluZ2A6IGB0cnVlYAoKSSYjMzk7bSBjb25maWRlbnQgaW4gdGhlc2UgZmluZGluZ3MsIHNvIEkmIzM5O2xsIGdvIGFoZWFkIGFuZCBjYWxsIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfY29udmVydF9pbmxpbmVfZGF0YSYjMzQ7LAogICAgJiMzNDtleHQ0X3RyeV9hZGRfaW5saW5lX2VudHJ5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGV4dDQgaW5saW5lIGRhdGEgY29udmVyc2lvbiBsb2dpYyBpbiBmcy9leHQ0L2lubGluZS5jLCByZXBsYWNpbmcgdGhlIGlubGluZSBkYXRhIHJlc3RvcmF0aW9uIGZsb3cgd2l0aCBhIG5ldyBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9jayBmdW5jdGlvbiBhbmQgcmVmYWN0b3JpbmcgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jay4gVGhlc2UgY2hhbmdlcyBhbHRlciBob3cgZXh0NCBjb252ZXJ0cyBpbmxpbmUgZGlyZWN0b3J5L2ZpbGUgZGF0YSBpbnRvIGV4dGVudC9ibG9jayBhbGxvY2F0aW9ucyBhbmQgYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfY29udmVydF9pbmxpbmVfZGF0YSYjMzQ7LAogICAgJiMzNDtleHQ0X3RyeV9hZGRfaW5saW5lX2VudHJ5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGV4dDQgaW5saW5lIGRhdGEgY29udmVyc2lvbiBsb2dpYyBpbiBmcy9leHQ0L2lubGluZS5jLCByZXBsYWNpbmcgdGhlIGlubGluZSBkYXRhIHJlc3RvcmF0aW9uIGZsb3cgd2l0aCBhIG5ldyBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9jayBmdW5jdGlvbiBhbmQgcmVmYWN0b3JpbmcgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jay4gVGhlc2UgY2hhbmdlcyBhbHRlciBob3cgZXh0NCBjb252ZXJ0cyBpbmxpbmUgZGlyZWN0b3J5L2ZpbGUgZGF0YSBpbnRvIGV4dGVudC9ibG9jayBhbGxvY2F0aW9ucyBhbmQgYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6NTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjo1MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrYCBhbmQgaW50cm9kdWNlcyBgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2tgIHRvIHJlZmFjdG9yIGhvdyBpbmxpbmUgZGF0YSBpcyBjb252ZXJ0ZWQgdG8gYSByZWd1bGFyIGV4dGVudCBvciBibG9jayBwb2ludGVyIGluIGV4dDQuXG5cbkFuYWx5c2lzIG9mIG1lbW9yeSBoYW5kbGluZzpcbjEuIEhlYXAgYnVmZmVyczpcbiAgIC0gYGJ1ZmAgaXMgcG9wdWxhdGVkIGJ5IGBleHQ0X3JlYWRfaW5saW5lX2RhdGEoKWAgYmVmb3JlIGJlaW5nIHJlYWQuXG4gICAtIGBpX2Jsb2NrX2J1ZmAgYW5kIGB4YXR0cl9idWZgIGFyZSBhbGxvY2F0ZWQgd2l0aCBga21hbGxvYygpYCBhbmQgaW1tZWRpYXRlbHkgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGBtZW1jcHkoKWAgZnJvbSBgcmF3X2lub2RlLVx1MDAzZWlfYmxvY2tgIGFuZCBgaGVhZGVyYCByZXNwZWN0aXZlbHkuXG4gICAtIFRoZSBuZXdseSBhbGxvY2F0ZWQgYmxvY2sgYnVmZmVyIGBiaC1cdTAwM2ViX2RhdGFgIGlzIGNsZWFyZWQgdXNpbmcgYG1lbXNldChiaC1cdTAwM2ViX2RhdGEsIDAsIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUpYCBiZWZvcmUgZGF0YSBvciBkaXJlY3RvcnkgZW50cmllcyBhcmUgY29waWVkIGludG8gaXQuXG4yLiBTdGFjayBzdHJ1Y3R1cmVzOlxuICAgLSBgc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9yZXF1ZXN0IGFyYCBpcyBjbGVhcmVkIHdpdGggYG1lbXNldChcdTAwMjZhciwgMCwgc2l6ZW9mKGFyKSlgLlxuICAgLSBgc3RydWN0IGV4dDRfZXh0ZW50IG5ld2V4YCBoYXMgYWxsIGZvdXIgZmllbGRzIChgZWVfYmxvY2tgLCBgZWVfbGVuYCwgYGVlX3N0YXJ0X2xvYCwgYGVlX3N0YXJ0X2hpYCkgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cbiAgIC0gYHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQgaXNgIGFuZCBgc3RydWN0IGV4dDRfeGF0dHJfaW5mbyBpYCBhcmUgc3RhdGljYWxseSBpbml0aWFsaXplZCB3aXRoIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLlxuMy4gTm8gZGF0YSBvciBzdHJ1Y3R1cmUgd2l0aCB1bmluaXRpYWxpemVkIHBhZGRpbmcgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjb250cm9sIGZsb3cgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy5cblxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyBleHRlbnQgdHJlZSBjb3JydXB0aW9uLCBsb2NrIG9yZGVyIHZpb2xhdGlvbnMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIHNhbml0aXplcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM5ZmZmMzI0OGZhN2NkN2NiZjJkNDRhNmNjNTQ0NGViZjE3N2Q4MzYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAwMjo1MzowMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5saW5lLmMgYi9mcy9leHQ0L2lubGluZS5jCmluZGV4IDgwNDVlNGZmMjcwYzcuLjkzOWM2YmYyMGI1YjcgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvaW5saW5lLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9pbmxpbmUuYwpAQCAtMTQsNiAmIzQzOzE0LDcgQEAKICNpbmNsdWRlICYjMzQ7ZXh0NC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7eGF0dHIuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3RydW5jYXRlLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7ZXh0NF9leHRlbnRzLmgmIzM0OwogCiAjZGVmaW5lIEVYVDRfWEFUVFJfU1lTVEVNX0RBVEEJJiMzNDtkYXRhJiMzNDsKICNkZWZpbmUgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRQkoKHNpemVvZihfX2xlMzIpICogRVhUNF9OX0JMT0NLUykpCkBAIC0xMDcwLDIxICYjNDM7MTA3MSwxMjUgQEAgc3RhdGljIGludCBleHQ0X3VwZGF0ZV9pbmxpbmVfZGlyKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqZGlyLAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBleHQ0X3Jlc3RvcmVfaW5saW5lX2RhdGEoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkgICAgIHN0cnVjdCBleHQ0X2lsb2MgKmlsb2MsCi0JCQkJICAgICB2b2lkICpidWYsIGludCBpbmxpbmVfc2l6ZSkKJiM0MztzdGF0aWMgaW50IGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfZnNibGtfdCBibG9jaywKJiM0MzsJCQkJCXVuc2lnbmVkIGludCBsZW4sIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCiB7Ci0JaW50IHJldDsKJiM0MzsJc3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpOwomIzQzOwlzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9maW5kIGlzID0gewomIzQzOwkJLnMgPSB7IC5ub3RfZm91bmQgPSAwLCB9LAomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvIGkgPSB7CiYjNDM7CQkubmFtZV9pbmRleCA9IEVYVDRfWEFUVFJfSU5ERVhfU1lTVEVNLAomIzQzOwkJLm5hbWUgPSBFWFQ0X1hBVFRSX1NZU1RFTV9EQVRBLAomIzQzOwkJLnZhbHVlID0gTlVMTCwKJiM0MzsJCS52YWx1ZV9sZW4gPSAwLAomIzQzOwl9OwomIzQzOwlpbnQgZXJyb3I7CiYjNDM7CXZvaWQgKmlfYmxvY2tfYnVmID0gTlVMTDsKJiM0MzsJdm9pZCAqeGF0dHJfYnVmID0gTlVMTDsKJiM0MzsJdm9pZCAqaGVhZGVyID0gTlVMTDsKJiM0MzsJdm9pZCAqdGFpbCA9IE5VTEw7CiYjNDM7CWludCB4YXR0cl9zaXplOwomIzQzOwlzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlOwogCi0JcmV0ID0gZXh0NF9jcmVhdGVfaW5saW5lX2RhdGEoaGFuZGxlLCBpbm9kZSwgaW5saW5lX3NpemUpOwotCWlmIChyZXQpIHsKLQkJZXh0NF9tc2coaW5vZGUtJmd0O2lfc2IsIEtFUk5fRU1FUkcsCi0JCQkmIzM0O2Vycm9yIHJlc3RvcmluZyBpbmxpbmVfZGF0YSBmb3IgaW5vZGUgLS0gcG90ZW50aWFsIGRhdGEgbG9zcyEgKGlub2RlICVsbHUsIGVycm9yICVkKSYjMzQ7LAotCQkJaW5vZGUtJmd0O2lfaW5vLCByZXQpOwotCQlyZXR1cm47CiYjNDM7CWlfYmxvY2tfYnVmID0ga21hbGxvYyhFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFLCBHRlBfTk9GUyk7CiYjNDM7CWlmICghaV9ibG9ja19idWYpIHsKJiM0MzsJCWVycm9yID0gLUVOT01FTTsKJiM0MzsJCWRvd25fd3JpdGUoJmFtcDtlaS0mZ3Q7aV9kYXRhX3NlbSk7CiYjNDM7CQlnb3RvIGVycm9yOwogCX0KLQlleHQ0X3dyaXRlX2lubGluZV9kYXRhKGlub2RlLCBpbG9jLCBidWYsIDAsIGlubGluZV9zaXplKTsKLQlleHQ0X3NldF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpOwomIzQzOwlkb3duX3dyaXRlKCZhbXA7ZWktJmd0O2lfZGF0YV9zZW0pOwomIzQzOwllcnJvciA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgJmFtcDtpcy5pbG9jKTsKJiM0MzsJaWYgKGVycm9yKQomIzQzOwkJZ290byBlcnJvcjsKJiM0MzsJcmF3X2lub2RlID0gZXh0NF9yYXdfaW5vZGUoJmFtcDtpcy5pbG9jKTsKJiM0MzsJaGVhZGVyID0gSUhEUihpbm9kZSwgcmF3X2lub2RlKTsKJiM0MzsJdGFpbCA9IElUQUlMKGlub2RlLCByYXdfaW5vZGUpOwomIzQzOwl4YXR0cl9zaXplID0gdGFpbCAtIGhlYWRlcjsKJiM0MzsJeGF0dHJfYnVmID0ga21hbGxvYyh4YXR0cl9zaXplLCBHRlBfTk9GUyk7CiYjNDM7CWlmICgheGF0dHJfYnVmKSB7CiYjNDM7CQllcnJvciA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIGVycm9yOwomIzQzOwl9CiYjNDM7CUJVRkZFUl9UUkFDRShpcy5pbG9jLmJoLCAmIzM0O2dldF93cml0ZV9hY2Nlc3MmIzM0Oyk7CiYjNDM7CWVycm9yID0gZXh0NF9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLCBpbm9kZS0mZ3Q7aV9zYiwgaXMuaWxvYy5iaCwgRVhUNF9KVFJfTk9ORSk7CiYjNDM7CWlmIChlcnJvcikgewomIzQzOwkJZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIGJsb2NrKTsKJiM0MzsJCWV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7CiYjNDM7CQlleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIGJsb2NrLCBsZW4sIDApOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsJbWVtY3B5KGlfYmxvY2tfYnVmLCAodm9pZCAqKXJhd19pbm9kZS0mZ3Q7aV9ibG9jaywgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7CiYjNDM7CW1lbXNldCgodm9pZCAqKXJhd19pbm9kZS0mZ3Q7aV9ibG9jaywgMCwgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7CiYjNDM7CW1lbXNldChlaS0mZ3Q7aV9kYXRhLCAwLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTsKJiM0MzsJbWVtY3B5KHhhdHRyX2J1ZiwgaGVhZGVyLCB4YXR0cl9zaXplKTsKJiM0MzsJaWYgKGV4dDRfaGFzX2ZlYXR1cmVfZXh0ZW50cyhpbm9kZS0mZ3Q7aV9zYikgJmFtcDsmYW1wOwomIzQzOwkJKFNfSVNESVIoaW5vZGUtJmd0O2lfbW9kZSkgfHwgU19JU1JFRyhpbm9kZS0mZ3Q7aV9tb2RlKSB8fCBTX0lTTE5LKGlub2RlLSZndDtpX21vZGUpKSkgewomIzQzOwkJZXh0NF9zZXRfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKTsKJiM0MzsJCWV4dDRfZXh0X3RyZWVfaW5pdChoYW5kbGUsIGlub2RlKTsKJiM0MzsJCXN0cnVjdCBleHQ0X2V4dF9wYXRoICpwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgMCwgTlVMTCwgMCk7CiYjNDM7CiYjNDM7CQlpZiAoSVNfRVJSKHBhdGgpKSB7CiYjNDM7CQkJZXJyb3IgPSBQVFJfRVJSKHBhdGgpOwomIzQzOwkJCWdvdG8gcmVjb3Zlcnk7CiYjNDM7CQl9CiYjNDM7CQlzdHJ1Y3QgZXh0NF9leHRlbnQgbmV3ZXg7CiYjNDM7CiYjNDM7CQluZXdleC5lZV9ibG9jayA9IGNwdV90b19sZTMyKDApOwomIzQzOwkJbmV3ZXguZWVfbGVuID0gY3B1X3RvX2xlMTYoMSk7CiYjNDM7CQlleHQ0X2V4dF9zdG9yZV9wYmxvY2soJmFtcDtuZXdleCwgYmxvY2spOwomIzQzOwkJcGF0aCA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgJmFtcDtuZXdleCwgMCk7CiYjNDM7CQlpZiAoSVNfRVJSKHBhdGgpKSB7CiYjNDM7CQkJZXJyb3IgPSBQVFJfRVJSKHBhdGgpOwomIzQzOwkJCWlmIChlcnJvciA9PSAtRURRVU9UIHx8IGVycm9yID09IC1FTk9TUEMpCiYjNDM7CQkJCWdvdG8gcmVjb3Zlcnk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWV4dDRfZnJlZV9leHRfcGF0aChwYXRoKTsKJiM0MzsJCX0KJiM0MzsJfSBlbHNlIHsKJiM0MzsJCUVYVDRfSShpbm9kZSktJmd0O2lfZGF0YVswXSA9IGNwdV90b19sZTMyKGJsb2NrKTsKJiM0MzsJfQomIzQzOwllcnJvciA9IGV4dDRfeGF0dHJfaWJvZHlfZmluZChpbm9kZSwgJmFtcDtpLCAmYW1wO2lzKTsKJiM0MzsJaWYgKGVycm9yKQomIzQzOwkJZ290byByZWNvdmVyeTsKJiM0MzsJaWYgKCFpcy5zLm5vdF9mb3VuZCkKJiM0MzsJCWVycm9yID0gZXh0NF94YXR0cl9pYm9keV9zZXQoaGFuZGxlLCBpbm9kZSwgJmFtcDtpLCAmYW1wO2lzKTsKJiM0MztyZWNvdmVyeToKJiM0MzsJaWYgKGVycm9yKSB7CiYjNDM7CQlleHQ0X2ZvcmdldChoYW5kbGUsIDAsIGlub2RlLCBiaCwgYmxvY2spOwomIzQzOwkJZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTsKJiM0MzsJCWV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgYmxvY2ssIGxlbiwgMCk7CiYjNDM7CQltZW1jcHkoKHZvaWQgKilyYXdfaW5vZGUtJmd0O2lfYmxvY2ssIGlfYmxvY2tfYnVmLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTsKJiM0MzsJCW1lbWNweShlaS0mZ3Q7aV9kYXRhLCByYXdfaW5vZGUtJmd0O2lfYmxvY2ssIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpOwomIzQzOwkJbWVtY3B5KGhlYWRlciwgeGF0dHJfYnVmLCB4YXR0cl9zaXplKTsKJiM0MzsJCWV4dDRfY2xlYXJfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWV4dDRfY2xlYXJfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9JTkxJTkVfREFUQSk7CiYjNDM7CQlpZiAoU19JU0RJUihpbm9kZS0mZ3Q7aV9tb2RlKSkgewomIzQzOwkJCWlfc2l6ZV93cml0ZShpbm9kZSwgaW5vZGUtJmd0O2lfc2ItJmd0O3NfYmxvY2tzaXplKTsKJiM0MzsJCQlFWFQ0X0koaW5vZGUpLSZndDtpX2Rpc2tzaXplID0gaW5vZGUtJmd0O2lfc2ItJmd0O3NfYmxvY2tzaXplOwomIzQzOwkJfQomIzQzOwkJZ2V0X2JoKGlzLmlsb2MuYmgpOwomIzQzOwkJZXJyb3IgPSBleHQ0X21hcmtfaWxvY19kaXJ0eShoYW5kbGUsIGlub2RlLCAmYW1wO2lzLmlsb2MpOwomIzQzOwkJRVhUNF9JKGlub2RlKS0mZ3Q7aV9pbmxpbmVfb2ZmID0gMDsKJiM0MzsJCUVYVDRfSShpbm9kZSktJmd0O2lfaW5saW5lX3NpemUgPSAwOwomIzQzOwkJZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpOwomIzQzOwkJYnJlbHNlKGJoKTsKJiM0MzsJfQomIzQzO291dDoKJiM0MzsJYnJlbHNlKGlzLmlsb2MuYmgpOwomIzQzOwl1cF93cml0ZSgmYW1wO2VpLSZndDtpX2RhdGFfc2VtKTsKJiM0MzsJa2ZyZWUoaV9ibG9ja19idWYpOwomIzQzOwlrZnJlZSh4YXR0cl9idWYpOwomIzQzOwlyZXR1cm4gZXJyb3I7CiYjNDM7ZXJyb3I6CiYjNDM7CWV4dDRfZm9yZ2V0KGhhbmRsZSwgMCwgaW5vZGUsIGJoLCBibG9jayk7CiYjNDM7CWV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7CiYjNDM7CWV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgYmxvY2ssIGxlbiwgMCk7CiYjNDM7CXVwX3dyaXRlKCZhbXA7ZWktJmd0O2lfZGF0YV9zZW0pOwomIzQzOwlrZnJlZShpX2Jsb2NrX2J1Zik7CiYjNDM7CWtmcmVlKHhhdHRyX2J1Zik7CiYjNDM7CXJldHVybiBlcnJvcjsKIH0KIAogc3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsCkBAIC0xMDkzLDkgJiM0MzsxMTk4LDEyIEBAIHN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLAogewogCWludCBlcnJvcjsKIAl2b2lkICpidWYgPSBOVUxMOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqZGF0YV9iaCA9IE5VTEw7Ci0Jc3RydWN0IGV4dDRfbWFwX2Jsb2NrcyBtYXA7CiYjNDM7CXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMOwogCWludCBpbmxpbmVfc2l6ZTsKJiM0MzsJZXh0NF9mc2Jsa190IG5ld2Jsb2NrID0gMDsKJiM0MzsJc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9yZXF1ZXN0IGFyOwomIzQzOwlzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKGlub2RlLSZndDtpX3NiKTsKJiM0MzsJdW5zaWduZWQgaW50IGFsbG9jYXRlZF9ibG9jazsKIAogCWlubGluZV9zaXplID0gZXh0NF9nZXRfaW5saW5lX3NpemUoaW5vZGUpOwogCWJ1ZiA9IGttYWxsb2MoaW5saW5lX3NpemUsIEdGUF9OT0ZTKTsKQEAgLTExMjAsNjMgJiM0MzsxMjI4LDYyIEBAIHN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLAogCQkJZ290byBvdXQ7CiAJfQogCi0JZXJyb3IgPSBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZSwgaW5vZGUpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXQ7Ci0KLQltYXAubV9sYmxrID0gMDsKLQltYXAubV9sZW4gPSAxOwotCW1hcC5tX2ZsYWdzID0gMDsKLQllcnJvciA9IGV4dDRfbWFwX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCAmYW1wO21hcCwgRVhUNF9HRVRfQkxPQ0tTX0NSRUFURSk7CiYjNDM7CW1lbXNldCgmYW1wO2FyLCAwLCBzaXplb2YoYXIpKTsKJiM0MzsJYXIuaW5vZGUgPSBpbm9kZTsKJiM0MzsJYXIubG9naWNhbCA9IDA7CiYjNDM7CWFyLmxlbiA9IDE7CiYjNDM7CWlmIChTX0lTUkVHKGlub2RlLSZndDtpX21vZGUpKQomIzQzOwkJYXIuZmxhZ3MgPSBFWFQ0X01CX0hJTlRfREFUQTsKJiM0MzsJZWxzZQomIzQzOwkJYXIuZmxhZ3MgPSAwOwomIzQzOwluZXdibG9jayA9IGV4dDRfbWJfbmV3X2Jsb2NrcyhoYW5kbGUsICZhbXA7YXIsICZhbXA7ZXJyb3IpOwogCWlmIChlcnJvciAmbHQ7IDApCi0JCWdvdG8gb3V0X3Jlc3RvcmU7Ci0JaWYgKCEobWFwLm1fZmxhZ3MgJmFtcDsgRVhUNF9NQVBfTUFQUEVEKSkgewotCQllcnJvciA9IC1FSU87Ci0JCWdvdG8gb3V0X3Jlc3RvcmU7Ci0JfQotCi0JZGF0YV9iaCA9IHNiX2dldGJsayhpbm9kZS0mZ3Q7aV9zYiwgbWFwLm1fcGJsayk7Ci0JaWYgKCFkYXRhX2JoKSB7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJYWxsb2NhdGVkX2Jsb2NrID0gRVhUNF9DMkIoc2JpLCBhci5sZW4pOwomIzQzOwliaCA9IHNiX2dldGJsayhpbm9kZS0mZ3Q7aV9zYiwgbmV3YmxvY2spOwomIzQzOwlpZiAoIWJoKSB7CiAJCWVycm9yID0gLUVOT01FTTsKLQkJZ290byBvdXRfcmVzdG9yZTsKJiM0MzsJCWdvdG8gb3V0X2JoOwogCX0KIAotCWxvY2tfYnVmZmVyKGRhdGFfYmgpOwotCWVycm9yID0gZXh0NF9qb3VybmFsX2dldF9jcmVhdGVfYWNjZXNzKGhhbmRsZSwgaW5vZGUtJmd0O2lfc2IsIGRhdGFfYmgsCiYjNDM7CWxvY2tfYnVmZmVyKGJoKTsKJiM0MzsJZXJyb3IgPSBleHQ0X2pvdXJuYWxfZ2V0X2NyZWF0ZV9hY2Nlc3MoaGFuZGxlLCBpbm9kZS0mZ3Q7aV9zYiwgYmgsCiAJCQkJCSAgICAgICBFWFQ0X0pUUl9OT05FKTsKIAlpZiAoZXJyb3IpIHsKLQkJdW5sb2NrX2J1ZmZlcihkYXRhX2JoKTsKJiM0MzsJCXVubG9ja19idWZmZXIoYmgpOwogCQllcnJvciA9IC1FSU87Ci0JCWdvdG8gb3V0X3Jlc3RvcmU7CiYjNDM7CQlnb3RvIG91dF9iaDsKIAl9Ci0JbWVtc2V0KGRhdGFfYmgtJmd0O2JfZGF0YSwgMCwgaW5vZGUtJmd0O2lfc2ItJmd0O3NfYmxvY2tzaXplKTsKJiM0MzsJbWVtc2V0KGJoLSZndDtiX2RhdGEsIDAsIGlub2RlLSZndDtpX3NiLSZndDtzX2Jsb2Nrc2l6ZSk7CiAKIAlpZiAoIVNfSVNESVIoaW5vZGUtJmd0O2lfbW9kZSkpIHsKLQkJbWVtY3B5KGRhdGFfYmgtJmd0O2JfZGF0YSwgYnVmLCBpbmxpbmVfc2l6ZSk7Ci0JCXNldF9idWZmZXJfdXB0b2RhdGUoZGF0YV9iaCk7Ci0JCXVubG9ja19idWZmZXIoZGF0YV9iaCk7CiYjNDM7CQltZW1jcHkoYmgtJmd0O2JfZGF0YSwgYnVmLCBpbmxpbmVfc2l6ZSk7CiYjNDM7CQlzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTsKJiM0MzsJCXVubG9ja19idWZmZXIoYmgpOwogCQllcnJvciA9IGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwKLQkJCQkJCSAgIGlub2RlLCBkYXRhX2JoKTsKJiM0MzsJCQkJCQkgICBpbm9kZSwgYmgpOwogCX0gZWxzZSB7Ci0JCXVubG9ja19idWZmZXIoZGF0YV9iaCk7Ci0JCWlub2RlLSZndDtpX3NpemUgPSBpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19ibG9ja3NpemU7Ci0JCWlfc2l6ZV93cml0ZShpbm9kZSwgaW5vZGUtJmd0O2lfc2ItJmd0O3NfYmxvY2tzaXplKTsKLQkJRVhUNF9JKGlub2RlKS0mZ3Q7aV9kaXNrc2l6ZSA9IGlub2RlLSZndDtpX3NiLSZndDtzX2Jsb2Nrc2l6ZTsKLQotCQllcnJvciA9IGV4dDRfaW5pdF9kaXJibG9jayhoYW5kbGUsIGlub2RlLCBkYXRhX2JoLAomIzQzOwkJdW5sb2NrX2J1ZmZlcihiaCk7CiYjNDM7CQllcnJvciA9IGV4dDRfaW5pdF9kaXJibG9jayhoYW5kbGUsIGlub2RlLCBiaCwKIAkJCSAgbGUzMl90b19jcHUoKChzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqKWJ1ZiktJmd0O2lub2RlKSwKIAkJCSAgYnVmICYjNDM7IEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFLAogCQkJICBpbmxpbmVfc2l6ZSAtIEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFKTsKLQkJaWYgKCFlcnJvcikKLQkJCWVycm9yID0gZXh0NF9tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgaW5vZGUpOwogCX0KJiM0MztvdXRfYmg6CiYjNDM7CWlmIChlcnJvcikgewomIzQzOwkJaWYgKGJoKQomIzQzOwkJCWV4dDRfZm9yZ2V0KGhhbmRsZSwgMCwgaW5vZGUsIGJoLCBuZXdibG9jayk7CiYjNDM7CQlzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7CiAKLW91dF9yZXN0b3JlOgotCWlmIChlcnJvcikKLQkJZXh0NF9yZXN0b3JlX2lubGluZV9kYXRhKGhhbmRsZSwgaW5vZGUsIGlsb2MsIGJ1ZiwgaW5saW5lX3NpemUpOwotCiYjNDM7CQlkb3duX3dyaXRlKCZhbXA7ZWktJmd0O2lfZGF0YV9zZW0pOwomIzQzOwkJZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTsKJiM0MzsJCWV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgbmV3YmxvY2ssIGFsbG9jYXRlZF9ibG9jaywgMCk7CiYjNDM7CQl1cF93cml0ZSgmYW1wO2VpLSZndDtpX2RhdGFfc2VtKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWVycm9yID0gZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2soaGFuZGxlLCBpbm9kZSwKJiM0MzsJCQkJbmV3YmxvY2ssIGFsbG9jYXRlZF9ibG9jaywgYmgpOwomIzQzOwl9CiBvdXQ6Ci0JYnJlbHNlKGRhdGFfYmgpOwogCWtmcmVlKGJ1Zik7CiAJcmV0dXJuIGVycm9yOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUwMAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipLTVNBTiBGdXp6aW5nIERldGVybWluYXRpb24qKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIHRoaXMgcGF0Y2gg4oCTIGRvZXMgaXQgd2FycmFudCBpdHMgb3duIEtNU0FOIGZ1enppbmcgc2Vzc2lvbj8gQmVmb3JlIEkgY29tbWl0IHRvIHRoYXQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCYjMzk7cyBhY3R1YWxseSBjaGFuZ2VkLiBDb250ZXh0IGlzIGtleSwgc28gSSYjMzk7bGwgc3RhcnQgYnkgdW5kZXJzdGFuZGluZyB0aGUgcGF0Y2gmIzM5O3MgcHVycG9zZSBhbmQgdGhlIG92ZXJhbGwgbW9kaWZpY2F0aW9ucyBpdCBtYWtlcy4KClNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHNlZSB3aGF0JiMzOTtzIHRvdWNoZWQgaW4gYGZzL2V4dDQvaW5saW5lLmNgLiBUaGF0IGZpbGUgaXMgd2hlcmUgSSBleHBlY3QgdGhlIGNvcmUgb2YgdGhpcyBpbnRlcmFjdGlvbiB0byBiZS4gTm93LCBsZXQmIzM5O3MgemVybyBpbiBvbiBgZnMvZXh0NC9pbmxpbmUuY2AgYW5kIHNwZWNpZmljYWxseSBmb2N1cyBvbiBhbmQgcmVhZCBhcm91bmQgdGhlIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrYCBmdW5jdGlvbi4gVGhhdCYjMzk7cyBhIGNyaXRpY2FsIHBvaW50IGZvciBpbmxpbmUgZGF0YSBhbmQgaXMgd2hlcmUgSSBleHBlY3QgdGhlIGhlYXJ0IG9mIGFueSBwb3RlbnRpYWwgS01TQU4gaXNzdWVzIHRvIHJlc2lkZS4gT25jZSBJIHVuZGVyc3RhbmQgdGhlIGNvZGUgdGhhdCBpcyB0aGVyZSwgSSBjYW4gZGVjaWRlIG9uIHRoZSBuZWVkIGZvciBkZWRpY2F0ZWQgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L2lubGluZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDYwOlx0XHRcdHJldHVybiAtRU5PU1BDO1xuMTA2MTpcdFxuMTA2MjpcdFx0cmV0ID0gZXh0NF91cGRhdGVfaW5saW5lX2RhdGEoaGFuZGxlLCBkaXIsXG4xMDYzOlx0XHRcdFx0XHQgICAgICBuZXdfc2l6ZSAmIzQzOyBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcbjEwNjQ6XHRcdGlmIChyZXQpXG4xMDY1Olx0XHRcdHJldHVybiByZXQ7XG4xMDY2Olx0XG4xMDY3Olx0XHRleHQ0X3VwZGF0ZV9maW5hbF9kZShleHQ0X2dldF9pbmxpbmVfeGF0dHJfcG9zKGRpciwgaWxvYyksIG9sZF9zaXplLFxuMTA2ODpcdFx0XHRcdCAgICAgRVhUNF9JKGRpciktXHUwMDNlaV9pbmxpbmVfc2l6ZSAtXG4xMDY5Olx0XHRcdFx0XHRcdFx0RVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XG4xMDcwOlx0XHRkaXItXHUwMDNlaV9zaXplID0gRVhUNF9JKGRpciktXHUwMDNlaV9kaXNrc2l6ZSA9IEVYVDRfSShkaXIpLVx1MDAzZWlfaW5saW5lX3NpemU7XG4xMDcxOlx0XHRyZXR1cm4gMDtcbjEwNzI6XHR9XG4xMDczOlx0XG4xMDc0Olx0c3RhdGljIGludCBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2ZzYmxrX3QgYmxvY2ssXG4xMDc1Olx0XHRcdFx0XHRcdHVuc2lnbmVkIGludCBsZW4sIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXG4xMDc2Olx0e1xuMTA3NzpcdFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpO1xuMTA3ODpcdFx0c3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCBpcyA9IHtcbjEwNzk6XHRcdFx0LnMgPSB7IC5ub3RfZm91bmQgPSAwLCB9LFxuMTA4MDpcdFx0fTtcbjEwODE6XHRcdHN0cnVjdCBleHQ0X3hhdHRyX2luZm8gaSA9IHtcbjEwODI6XHRcdFx0Lm5hbWVfaW5kZXggPSBFWFQ0X1hBVFRSX0lOREVYX1NZU1RFTSxcbjEwODM6XHRcdFx0Lm5hbWUgPSBFWFQ0X1hBVFRSX1NZU1RFTV9EQVRBLFxuMTA4NDpcdFx0XHQudmFsdWUgPSBOVUxMLFxuMTA4NTpcdFx0XHQudmFsdWVfbGVuID0gMCxcbjEwODY6XHRcdH07XG4xMDg3Olx0XHRpbnQgZXJyb3I7XG4xMDg4Olx0XHR2b2lkICppX2Jsb2NrX2J1ZiA9IE5VTEw7XG4xMDg5Olx0XHR2b2lkICp4YXR0cl9idWYgPSBOVUxMO1xuMTA5MDpcdFx0dm9pZCAqaGVhZGVyID0gTlVMTDtcbjEwOTE6XHRcdHZvaWQgKnRhaWwgPSBOVUxMO1xuMTA5MjpcdFx0aW50IHhhdHRyX3NpemU7XG4xMDkzOlx0XHRzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlO1xuMTA5NDpcdFxuMTA5NTpcdFx0aV9ibG9ja19idWYgPSBrbWFsbG9jKEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUsIEdGUF9OT0ZTKTtcbjEwOTY6XHRcdGlmICghaV9ibG9ja19idWYpIHtcbjEwOTc6XHRcdFx0ZXJyb3IgPSAtRU5PTUVNO1xuMTA5ODpcdFx0XHRkb3duX3dyaXRlKFx1MDAyNmVpLVx1MDAzZWlfZGF0YV9zZW0pO1xuMTA5OTpcdFx0XHRnb3RvIGVycm9yO1xuMTEwMDpcdFx0fVxuMTEwMTpcdFx0ZG93bl93cml0ZShcdTAwMjZlaS1cdTAwM2VpX2RhdGFfc2VtKTtcbjExMDI6XHRcdGVycm9yID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcdTAwMjZpcy5pbG9jKTtcbjExMDM6XHRcdGlmIChlcnJvcilcbjExMDQ6XHRcdFx0Z290byBlcnJvcjtcbjExMDU6XHRcdHJhd19pbm9kZSA9IGV4dDRfcmF3X2lub2RlKFx1MDAyNmlzLmlsb2MpO1xuMTEwNjpcdFx0aGVhZGVyID0gSUhEUihpbm9kZSwgcmF3X2lub2RlKTtcbjExMDc6XHRcdHRhaWwgPSBJVEFJTChpbm9kZSwgcmF3X2lub2RlKTtcbjExMDg6XHRcdHhhdHRyX3NpemUgPSB0YWlsIC0gaGVhZGVyO1xuMTEwOTpcdFx0eGF0dHJfYnVmID0ga21hbGxvYyh4YXR0cl9zaXplLCBHRlBfTk9GUyk7XG4xMTEwOlx0XHRpZiAoIXhhdHRyX2J1Zikge1xuMTExMTpcdFx0XHRlcnJvciA9IC1FTk9NRU07XG4xMTEyOlx0XHRcdGdvdG8gZXJyb3I7XG4xMTEzOlx0XHR9XG4xMTE0Olx0XHRCVUZGRVJfVFJBQ0UoaXMuaWxvYy5iaCwgXCYjMzQ7Z2V0X3dyaXRlX2FjY2Vzc1wmIzM0Oyk7XG4xMTE1Olx0XHRlcnJvciA9IGV4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgaW5vZGUtXHUwMDNlaV9zYiwgaXMuaWxvYy5iaCwgRVhUNF9KVFJfTk9ORSk7XG4xMTE2Olx0XHRpZiAoZXJyb3IpIHtcbjExMTc6XHRcdFx0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIGJsb2NrKTtcbjExMTg6XHRcdFx0ZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTtcbjExMTk6XHRcdFx0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBOVUxMLCBibG9jaywgbGVuLCAwKTtcbjExMjA6XHRcdFx0Z290byBvdXQ7XG4xMTIxOlx0XHR9XG4xMTIyOlx0XHRtZW1jcHkoaV9ibG9ja19idWYsICh2b2lkICopcmF3X2lub2RlLVx1MDAzZWlfYmxvY2ssIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuMTEyMzpcdFx0bWVtc2V0KCh2b2lkICopcmF3X2lub2RlLVx1MDAzZWlfYmxvY2ssIDAsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuMTEyNDpcdFx0bWVtc2V0KGVpLVx1MDAzZWlfZGF0YSwgMCwgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XG4xMTI1Olx0XHRtZW1jcHkoeGF0dHJfYnVmLCBoZWFkZXIsIHhhdHRyX3NpemUpO1xuMTEyNjpcdFx0aWYgKGV4dDRfaGFzX2ZlYXR1cmVfZXh0ZW50cyhpbm9kZS1cdTAwM2VpX3NiKSBcdTAwMjZcdTAwMjZcbjExMjc6XHRcdFx0KFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSB8fCBTX0lTUkVHKGlub2RlLVx1MDAzZWlfbW9kZSkgfHwgU19JU0xOSyhpbm9kZS1cdTAwM2VpX21vZGUpKSkge1xuMTEyODpcdFx0XHRleHQ0X3NldF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpO1xuMTEyOTpcdFx0XHRleHQ0X2V4dF90cmVlX2luaXQoaGFuZGxlLCBpbm9kZSk7XG4xMTMwOlx0XHRcdHN0cnVjdCBleHQ0X2V4dF9wYXRoICpwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgMCwgTlVMTCwgMCk7XG4xMTMxOlx0XG4xMTMyOlx0XHRcdGlmIChJU19FUlIocGF0aCkpIHtcbjExMzM6XHRcdFx0XHRlcnJvciA9IFBUUl9FUlIocGF0aCk7XG4xMTM0Olx0XHRcdFx0Z290byByZWNvdmVyeTtcbjExMzU6XHRcdFx0fVxuMTEzNjpcdFx0XHRzdHJ1Y3QgZXh0NF9leHRlbnQgbmV3ZXg7XG4xMTM3Olx0XG4xMTM4Olx0XHRcdG5ld2V4LmVlX2Jsb2NrID0gY3B1X3RvX2xlMzIoMCk7XG4xMTM5Olx0XHRcdG5ld2V4LmVlX2xlbiA9IGNwdV90b19sZTE2KDEpO1xuMTE0MDpcdFx0XHRleHQ0X2V4dF9zdG9yZV9wYmxvY2soXHUwMDI2bmV3ZXgsIGJsb2NrKTtcbjExNDE6XHRcdFx0cGF0aCA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgXHUwMDI2bmV3ZXgsIDApO1xuMTE0MjpcdFx0XHRpZiAoSVNfRVJSKHBhdGgpKSB7XG4xMTQzOlx0XHRcdFx0ZXJyb3IgPSBQVFJfRVJSKHBhdGgpO1xuMTE0NDpcdFx0XHRcdGlmIChlcnJvciA9PSAtRURRVU9UIHx8IGVycm9yID09IC1FTk9TUEMpXG4xMTQ1Olx0XHRcdFx0XHRnb3RvIHJlY292ZXJ5O1xuMTE0NjpcdFx0XHR9IGVsc2Uge1xuMTE0NzpcdFx0XHRcdGV4dDRfZnJlZV9leHRfcGF0aChwYXRoKTtcbjExNDg6XHRcdFx0fVxuMTE0OTpcdFx0fSBlbHNlIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQ2NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBEYXRhIFN0cmVhbTogQSBUYXJnZXRlZCBSZXZpZXcqKgoKT2theSwgdGhlIGluaXRpYWwgc2NhbiBzdWdnZXN0cyBhIHBvdGVudGlhbCBhcmVhIG9mIGludGVyZXN0IHdpdGhpbiB0aGUgYnJvYWRlciBkYXRhc2V0LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGRlZXBlciBpbnRvIGEgc3BlY2lmaWMsIHBvdGVudGlhbGx5IHJlbGV2YW50IHNlZ21lbnQuIFJhdGhlciB0aGFuIHJlbHlpbmcgc29sZWx5IG9uIHRoZSBoaWdoLWxldmVsIHN1bW1hcmllcyBvciBzdGF0aXN0aWNhbCBvdmVydmlld3MgSSYjMzk7dmUgYWxyZWFkeSBnZW5lcmF0ZWQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIHRoZSBkYXRhIGluIG1vcmUgZGV0YWlsLiBMZXQmIzM5O3MgcGlucG9pbnQgbGluZXMgMTE1MCB0aHJvdWdoIDEyNTAuIFRoaXMgdGFyZ2V0ZWQgYXBwcm9hY2ggYWxsb3dzIG1lIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGlzIHBhcnRpY3VsYXIgcmVnaW9uLCBsb29raW5nIGZvciBzdWJ0bGUgcGF0dGVybnMsIG91dGxpZXJzLCBvciBhbm9tYWxpZXMgdGhhdCBhIGJyb2FkZXIgc3dlZXAgbWlnaHQgaGF2ZSBtaXNzZWQuIEV4YW1pbmluZyB0aGlzIHN1YnNldCBkaXJlY3RseSB3aWxsIHByb3ZpZGUgYSBtb3JlIGdyYW51bGFyIHZpZXcgdG8gaW5mb3JtIHRoZSBuZXh0IHN0YWdlIG9mIG15IGFuYWx5c2lzLiBUaGUgY29udGV4dCBvZiB0aGVzZSBsaW5lcyBtaWdodCBiZSBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHdoYXRldmVyIEkgYW0gdHJ5aW5nIHRvIHVuZGVyc3RhbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9pbmxpbmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogOTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE1MDpcdFx0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZGF0YVswXSA9IGNwdV90b19sZTMyKGJsb2NrKTtcbjExNTE6XHRcdH1cbjExNTI6XHRcdGVycm9yID0gZXh0NF94YXR0cl9pYm9keV9maW5kKGlub2RlLCBcdTAwMjZpLCBcdTAwMjZpcyk7XG4xMTUzOlx0XHRpZiAoZXJyb3IpXG4xMTU0Olx0XHRcdGdvdG8gcmVjb3Zlcnk7XG4xMTU1Olx0XHRpZiAoIWlzLnMubm90X2ZvdW5kKVxuMTE1NjpcdFx0XHRlcnJvciA9IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZSwgaW5vZGUsIFx1MDAyNmksIFx1MDAyNmlzKTtcbjExNTc6XHRyZWNvdmVyeTpcbjExNTg6XHRcdGlmIChlcnJvcikge1xuMTE1OTpcdFx0XHRleHQ0X2ZvcmdldChoYW5kbGUsIDAsIGlub2RlLCBiaCwgYmxvY2spO1xuMTE2MDpcdFx0XHRleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpO1xuMTE2MTpcdFx0XHRleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIGJsb2NrLCBsZW4sIDApO1xuMTE2MjpcdFx0XHRtZW1jcHkoKHZvaWQgKilyYXdfaW5vZGUtXHUwMDNlaV9ibG9jaywgaV9ibG9ja19idWYsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuMTE2MzpcdFx0XHRtZW1jcHkoZWktXHUwMDNlaV9kYXRhLCByYXdfaW5vZGUtXHUwMDNlaV9ibG9jaywgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XG4xMTY0Olx0XHRcdG1lbWNweShoZWFkZXIsIHhhdHRyX2J1ZiwgeGF0dHJfc2l6ZSk7XG4xMTY1Olx0XHRcdGV4dDRfY2xlYXJfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKTtcbjExNjY6XHRcdH0gZWxzZSB7XG4xMTY3Olx0XHRcdGV4dDRfY2xlYXJfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9JTkxJTkVfREFUQSk7XG4xMTY4Olx0XHRcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbjExNjk6XHRcdFx0XHRpX3NpemVfd3JpdGUoaW5vZGUsIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUpO1xuMTE3MDpcdFx0XHRcdEVYVDRfSShpbm9kZSktXHUwMDNlaV9kaXNrc2l6ZSA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemU7XG4xMTcxOlx0XHRcdH1cbjExNzI6XHRcdFx0Z2V0X2JoKGlzLmlsb2MuYmgpO1xuMTE3MzpcdFx0XHRlcnJvciA9IGV4dDRfbWFya19pbG9jX2RpcnR5KGhhbmRsZSwgaW5vZGUsIFx1MDAyNmlzLmlsb2MpO1xuMTE3NDpcdFx0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfaW5saW5lX29mZiA9IDA7XG4xMTc1Olx0XHRcdEVYVDRfSShpbm9kZSktXHUwMDNlaV9pbmxpbmVfc2l6ZSA9IDA7XG4xMTc2Olx0XHRcdGV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTtcbjExNzc6XHRcdFx0YnJlbHNlKGJoKTtcbjExNzg6XHRcdH1cbjExNzk6XHRvdXQ6XG4xMTgwOlx0XHRicmVsc2UoaXMuaWxvYy5iaCk7XG4xMTgxOlx0XHR1cF93cml0ZShcdTAwMjZlaS1cdTAwM2VpX2RhdGFfc2VtKTtcbjExODI6XHRcdGtmcmVlKGlfYmxvY2tfYnVmKTtcbjExODM6XHRcdGtmcmVlKHhhdHRyX2J1Zik7XG4xMTg0Olx0XHRyZXR1cm4gZXJyb3I7XG4xMTg1Olx0ZXJyb3I6XG4xMTg2Olx0XHRleHQ0X2ZvcmdldChoYW5kbGUsIDAsIGlub2RlLCBiaCwgYmxvY2spO1xuMTE4NzpcdFx0ZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTtcbjExODg6XHRcdGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgYmxvY2ssIGxlbiwgMCk7XG4xMTg5Olx0XHR1cF93cml0ZShcdTAwMjZlaS1cdTAwM2VpX2RhdGFfc2VtKTtcbjExOTA6XHRcdGtmcmVlKGlfYmxvY2tfYnVmKTtcbjExOTE6XHRcdGtmcmVlKHhhdHRyX2J1Zik7XG4xMTkyOlx0XHRyZXR1cm4gZXJyb3I7XG4xMTkzOlx0fVxuMTE5NDpcdFxuMTE5NTpcdHN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxuMTE5NjpcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuMTE5NzpcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgZXh0NF9pbG9jICppbG9jKVxuMTE5ODpcdHtcbjExOTk6XHRcdGludCBlcnJvcjtcbjEyMDA6XHRcdHZvaWQgKmJ1ZiA9IE5VTEw7XG4xMjAxOlx0XHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDtcbjEyMDI6XHRcdGludCBpbmxpbmVfc2l6ZTtcbjEyMDM6XHRcdGV4dDRfZnNibGtfdCBuZXdibG9jayA9IDA7XG4xMjA0Olx0XHRzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX3JlcXVlc3QgYXI7XG4xMjA1Olx0XHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuMTIwNjpcdFx0dW5zaWduZWQgaW50IGFsbG9jYXRlZF9ibG9jaztcbjEyMDc6XHRcbjEyMDg6XHRcdGlubGluZV9zaXplID0gZXh0NF9nZXRfaW5saW5lX3NpemUoaW5vZGUpO1xuMTIwOTpcdFx0YnVmID0ga21hbGxvYyhpbmxpbmVfc2l6ZSwgR0ZQX05PRlMpO1xuMTIxMDpcdFx0aWYgKCFidWYpIHtcbjEyMTE6XHRcdFx0ZXJyb3IgPSAtRU5PTUVNO1xuMTIxMjpcdFx0XHRnb3RvIG91dDtcbjEyMTM6XHRcdH1cbjEyMTQ6XHRcbjEyMTU6XHRcdGVycm9yID0gZXh0NF9yZWFkX2lubGluZV9kYXRhKGlub2RlLCBidWYsIGlubGluZV9zaXplLCBpbG9jKTtcbjEyMTY6XHRcdGlmIChlcnJvciBcdTAwM2MgMClcbjEyMTc6XHRcdFx0Z290byBvdXQ7XG4xMjE4Olx0XG4xMjE5Olx0XHQvKlxuMTIyMDpcdFx0ICogTWFrZSBzdXJlIHRoZSBpbmxpbmUgZGlyZWN0b3J5IGVudHJpZXMgcGFzcyBjaGVja3MgYmVmb3JlIHdlIHRyeSB0b1xuMTIyMTpcdFx0ICogY29udmVydCB0aGVtLCBzbyB0aGF0IHdlIGF2b2lkIHRvdWNoaW5nIHN0dWZmIHRoYXQgbmVlZHMgZnNjay5cbjEyMjI6XHRcdCAqL1xuMTIyMzpcdFx0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuMTIyNDpcdFx0XHRlcnJvciA9IGV4dDRfY2hlY2tfYWxsX2RlKGlub2RlLCBpbG9jLVx1MDAzZWJoLFxuMTIyNTpcdFx0XHRcdFx0XHRidWYgJiM0MzsgRVhUNF9JTkxJTkVfRE9URE9UX1NJWkUsXG4xMjI2Olx0XHRcdFx0XHRcdGlubGluZV9zaXplIC0gRVhUNF9JTkxJTkVfRE9URE9UX1NJWkUpO1xuMTIyNzpcdFx0XHRpZiAoZXJyb3IpXG4xMjI4Olx0XHRcdFx0Z290byBvdXQ7XG4xMjI5Olx0XHR9XG4xMjMwOlx0XG4xMjMxOlx0XHRtZW1zZXQoXHUwMDI2YXIsIDAsIHNpemVvZihhcikpO1xuMTIzMjpcdFx0YXIuaW5vZGUgPSBpbm9kZTtcbjEyMzM6XHRcdGFyLmxvZ2ljYWwgPSAwO1xuMTIzNDpcdFx0YXIubGVuID0gMTtcbjEyMzU6XHRcdGlmIChTX0lTUkVHKGlub2RlLVx1MDAzZWlfbW9kZSkpXG4xMjM2Olx0XHRcdGFyLmZsYWdzID0gRVhUNF9NQl9ISU5UX0RBVEE7XG4xMjM3Olx0XHRlbHNlXG4xMjM4Olx0XHRcdGFyLmZsYWdzID0gMDtcbjEyMzk6XHRcdG5ld2Jsb2NrID0gZXh0NF9tYl9uZXdfYmxvY2tzKGhhbmRsZSwgXHUwMDI2YXIsIFx1MDAyNmVycm9yKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI0NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIEJhY2sgaW50byBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKioKCkFscmlnaHQsIGxldCYjMzk7cyBjaXJjbGUgYmFjayB0byBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja2AuIEkmIzM5O3ZlIGJlZW4gZm9jdXNpbmcgb24gdGhlIGJyb2FkZXIgcGljdHVyZSwgYnV0IG5vdyBpdCYjMzk7cyB0aW1lIHRvIGRyaWxsIGRvd24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgY3J1Y2lhbCBpbiB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uLiBJJiMzOTt2ZSBnb3QgYSBnb29kIG1lbnRhbCBtb2RlbCBvZiBob3cgaW5saW5lIGRhdGEgd29ya3Mgd2l0aGluIGV4dDQsIGJ1dCB0aGlzIGZ1bmN0aW9uIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgKnByZWNpc2VseSogaG93IGl0IGhhbmRsZXMgdGhlIGNvbnZlcnNpb24gcHJvY2VzcyB3aXRob3V0IHJlc29ydGluZyB0byBsb2NraW5nLiBXaGF0IGFyZSB0aGUgc3VidGxlIHJhY2UgY29uZGl0aW9ucz8gV2hhdCBhcmUgdGhlIGtleSBhc3N1bXB0aW9ucyBpdCBtYWtlcyBhYm91dCB0aGUgc3RhdGUgb2YgdGhlIGlub2RlIGFuZCBibG9jayBncm91cD8gV2hhdCBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZXMgYW5kIGZpZWxkcyBhcmUgYmVpbmcgbWFuaXB1bGF0ZWQ/IEkgbmVlZCB0byBtZXRpY3Vsb3VzbHkgdHJhY2UgdGhlIGNvbnRyb2wgZmxvdywgcGF5aW5nIGF0dGVudGlvbiB0byBlZGdlIGNhc2VzLiBJJiMzOTttIGxvb2tpbmcgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIGFyZWFzIHdoZXJlIGEgY29uY3VycmVudCBtb2RpZmljYXRpb24gY291bGQgbGVhZCB0byBkYXRhIGNvcnJ1cHRpb24gb3IgaW5jb25zaXN0ZW5jeS4gSXMgdGhlIHVzZSBvZiB0aGUgYGlfbXV0ZXhgIHN1ZmZpY2llbnQgaW4gdGhpcyBjb250ZXh0LCBvciBpcyB0aGVyZSBhbm90aGVyIHJhY2UgY29uZGl0aW9uPyBBcmUgdGhlcmUgZGF0YSBpbnRlZ3JpdHkgY2hlY2tzIHRoYXQgSSBtaWdodCBiZSBvdmVybG9va2luZz8gQW55IGludGVyYWN0aW9ucyB3aXRoIHRoZSBqb3VybmFsIHRoYXQgbmVlZCBzY3J1dGlueT8gT2theSwgbGV0JiMzOTtzIHN0ZXAgdGhyb3VnaCBpdCBsaW5lIGJ5IGxpbmUsIGtlZXBpbmcgYSBrZWVuIGV5ZSBvbiB0aGUgYXRvbWljIG9wZXJhdGlvbnMgYW5kIG1lbW9yeSBiYXJyaWVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L2lubGluZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjQwOlx0XHRpZiAoZXJyb3IgXHUwMDNjIDApXG4xMjQxOlx0XHRcdGdvdG8gb3V0O1xuMTI0MjpcdFx0YWxsb2NhdGVkX2Jsb2NrID0gRVhUNF9DMkIoc2JpLCBhci5sZW4pO1xuMTI0MzpcdFx0YmggPSBzYl9nZXRibGsoaW5vZGUtXHUwMDNlaV9zYiwgbmV3YmxvY2spO1xuMTI0NDpcdFx0aWYgKCFiaCkge1xuMTI0NTpcdFx0XHRlcnJvciA9IC1FTk9NRU07XG4xMjQ2Olx0XHRcdGdvdG8gb3V0X2JoO1xuMTI0NzpcdFx0fVxuMTI0ODpcdFxuMTI0OTpcdFx0bG9ja19idWZmZXIoYmgpO1xuMTI1MDpcdFx0ZXJyb3IgPSBleHQ0X2pvdXJuYWxfZ2V0X2NyZWF0ZV9hY2Nlc3MoaGFuZGxlLCBpbm9kZS1cdTAwM2VpX3NiLCBiaCxcbjEyNTE6XHRcdFx0XHRcdFx0ICAgICAgIEVYVDRfSlRSX05PTkUpO1xuMTI1MjpcdFx0aWYgKGVycm9yKSB7XG4xMjUzOlx0XHRcdHVubG9ja19idWZmZXIoYmgpO1xuMTI1NDpcdFx0XHRlcnJvciA9IC1FSU87XG4xMjU1Olx0XHRcdGdvdG8gb3V0X2JoO1xuMTI1NjpcdFx0fVxuMTI1NzpcdFx0bWVtc2V0KGJoLVx1MDAzZWJfZGF0YSwgMCwgaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZSk7XG4xMjU4Olx0XG4xMjU5Olx0XHRpZiAoIVNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuMTI2MDpcdFx0XHRtZW1jcHkoYmgtXHUwMDNlYl9kYXRhLCBidWYsIGlubGluZV9zaXplKTtcbjEyNjE6XHRcdFx0c2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7XG4xMjYyOlx0XHRcdHVubG9ja19idWZmZXIoYmgpO1xuMTI2MzpcdFx0XHRlcnJvciA9IGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSxcbjEyNjQ6XHRcdFx0XHRcdFx0XHQgICBpbm9kZSwgYmgpO1xuMTI2NTpcdFx0fSBlbHNlIHtcbjEyNjY6XHRcdFx0dW5sb2NrX2J1ZmZlcihiaCk7XG4xMjY3Olx0XHRcdGVycm9yID0gZXh0NF9pbml0X2RpcmJsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLFxuMTI2ODpcdFx0XHRcdCAgbGUzMl90b19jcHUoKChzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqKWJ1ZiktXHUwMDNlaW5vZGUpLFxuMTI2OTpcdFx0XHRcdCAgYnVmICYjNDM7IEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFLFxuMTI3MDpcdFx0XHRcdCAgaW5saW5lX3NpemUgLSBFWFQ0X0lOTElORV9ET1RET1RfU0laRSk7XG4xMjcxOlx0XHR9XG4xMjcyOlx0b3V0X2JoOlxuMTI3MzpcdFx0aWYgKGVycm9yKSB7XG4xMjc0Olx0XHRcdGlmIChiaClcbjEyNzU6XHRcdFx0XHRleHQ0X2ZvcmdldChoYW5kbGUsIDAsIGlub2RlLCBiaCwgbmV3YmxvY2spO1xuMTI3NjpcdFx0XHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7XG4xMjc3Olx0XG4xMjc4Olx0XHRcdGRvd25fd3JpdGUoXHUwMDI2ZWktXHUwMDNlaV9kYXRhX3NlbSk7XG4xMjc5Olx0XHRcdGV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7XG4xMjgwOlx0XHRcdGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgbmV3YmxvY2ssIGFsbG9jYXRlZF9ibG9jaywgMCk7XG4xMjgxOlx0XHRcdHVwX3dyaXRlKFx1MDAyNmVpLVx1MDAzZWlfZGF0YV9zZW0pO1xuMTI4MjpcdFx0fSBlbHNlIHtcbjEyODM6XHRcdFx0ZXJyb3IgPSBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9jayhoYW5kbGUsIGlub2RlLFxuMTI4NDpcdFx0XHRcdFx0bmV3YmxvY2ssIGFsbG9jYXRlZF9ibG9jaywgYmgpO1xuMTI4NTpcdFx0fVxuMTI4NjpcdG91dDpcbjEyODc6XHRcdGtmcmVlKGJ1Zik7XG4xMjg4Olx0XHRyZXR1cm4gZXJyb3I7XG4xMjg5Olx0fVxuMTI5MDpcdFxuMTI5MTpcdC8qXG4xMjkyOlx0ICogVHJ5IHRvIGFkZCB0aGUgbmV3IGVudHJ5IHRvIHRoZSBpbmxpbmUgZGF0YS5cbjEyOTM6XHQgKiBJZiBzdWNjZWVkcywgcmV0dXJuIDAuIElmIG5vdCwgZXh0ZW5kZWQgdGhlIGlubGluZSBkaXIgYW5kIGNvcGllZCBkYXRhIHRvXG4xMjk0Olx0ICogdGhlIG5ldyBjcmVhdGVkIGJsb2NrLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQ1MgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDcxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElubGluZSBEYXRhIENvbnZlcnNpb24gUGF0Y2ggaW4gZXh0NCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duLiBJdCYjMzk7cyBmb2N1c2VkIG9uIHJlZmFjdG9yaW5nIHRoZSBpbmxpbmUgZGF0YSBjb252ZXJzaW9uIHByb2Nlc3Mgd2l0aGluIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrYC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBhIHNvbGlkIGltcHJvdmVtZW50LCBidXQgd2UgbmVlZCB0byBlbnN1cmUgdGhlIGRldGFpbHMgYXJlIHNvdW5kLgoKUHJldmlvdXNseSwgdGhlIGNvZGUgd291bGQgZGVzdHJveSB0aGUgaW5saW5lIGRhdGEsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYSBkYXRhIGxvc3MgaWYgYmxvY2sgYWxsb2NhdGlvbiBmYWlsZWQuIFRoaXMgcGF0Y2ggdGFrZXMgYSBtb3JlIHJlc2lsaWVudCBhcHByb2FjaC4gSXQgbm93IGFsbG9jYXRlcyB0aGUgYmxvY2sgdXAtZnJvbnQgdXNpbmcgYGV4dDRfbWJfbmV3X2Jsb2Nrc2AuIFRoZW4gaXQgd3JpdGVzIHRoZSBkYXRhIHRvIHRoZSBidWZmZXIgaGVhZCwgd2hpY2ggaXMgZ29vZCBiZWNhdXNlIGl0IGVsaW1pbmF0ZXMgdGhhdCBjcml0aWNhbCB3aW5kb3cuIFRoZSB1c2Ugb2YgYG1lbXNldGAgdG8gY2xlYXIgdGhlIGJ1ZmZlciBiZWZvcmUgY29weWluZyBpbmxpbmUgZGF0YSBzZWVtcyBzZW5zaWJsZS4gQW5kLCB0aGUgYGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrYCBmdW5jdGlvbiBsb29rcyBsaWtlIGEgY2xlYXIsIGF0b21pYyBvcGVyYXRpb24uIFRoZSBrZXkgcG9pbnQgaXMgdGhhdCBpdCBzYXZlcyB0aGUgaW5vZGUmIzM5O3MgaV9ibG9jayBhbmQgeGF0dHJzIGluIG1lbW9yeSBhbmQgcmV2ZXJ0cyB0aGVtIGlmIGFueSBlcnJvciBoYXBwZW5zLCB0aGlzIGFwcGVhcnMgdG8gYmUgYSBnb29kIHdheSB0byBoYW5kbGUgdGhlIGZhaWx1cmUgY2FzZS4KCk5vdywgZm9yIHRoZSBtZW1vcnkgc2FmZXR5IGNoZWNrOiBJIGFsd2F5cyBzY3J1dGluaXplIG1lbW9yeSBoYW5kbGluZyB3aXRoIGV4dHJlbWUgY2FyZS4KCjEuICBgaV9ibG9ja19idWZgOiBUaGUgYGttYWxsb2NgIGFuZCBgbWVtY3B5YCB1c2FnZSBpcyBnb29kLCBwcm9wZXJseSB3cml0aW5nIHRvIGBpX2Jsb2NrX2J1ZmAgYmVmb3JlIGFueSBwb3RlbnRpYWwgcmVhZHMuIFRoZSByZXN0b3JlIG1lY2hhbmlzbSBjb3JyZWN0bHkgdXNlcyBgbWVtY3B5YCBhbmQgYGtmcmVlYCBvbiByZWNvdmVyeS4gVGhpcyBsb29rcyBzYWZlLgoKMi4gIGB4YXR0cl9idWZgOiBTaW1pbGFyIHRvIGBpX2Jsb2NrX2J1ZmAsIHRoZSBhbGxvY2F0aW9uLCB3cml0ZSB3aXRoIGBtZW1jcHlgLCBhbmQgcmVjb3ZlcnkgbWVjaGFuaXNtIHNlZW0gY29ycmVjdC4gVGhlIHNpemUgY2FsY3VsYXRpb24gYHhhdHRyX3NpemUgPSB0YWlsIC0gaGVhZGVyYCBuZWVkcyBhIHF1aWNrIG1lbnRhbCB2ZXJpZmljYXRpb24sIGJ1dCBvbiB0aGUgc3VyZmFjZSwgaXQgbG9va3MgZmluZS4KCjMuICBgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZGAgYW5kIGBzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvYDogVGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZXNlIHN0cnVjdHMgaXMgc3RyYWlnaHRmb3J3YXJkIGFuZCBleHBlY3RlZC4KCjQuICBgc3RydWN0IGV4dDRfZXh0ZW50IG5ld2V4YDogVGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBleHRlbnQgc3RydWN0dXJlIHdpdGggYGVlX2Jsb2NrID0gY3B1X3RvX2xlMzIoMClgIGFuZCBgZWVfbGVuID0gY3B1X3RvX2xlMTYoMSlgIGlzIHN0YW5kYXJkIHByYWN0aWNlLiBOb3cgSSBzaG91bGQgdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBleHQ0X2V4dGVudGAgYW5kIGFsc28gYGV4dDRfZXh0X3N0b3JlX3BibG9ja2AuIEkgbmVlZCB0byBjb25maXJtIHRoZXJlIGFyZW4mIzM5O3QgYW55IHBvdGVudGlhbCBvdmVyZmxvd3Mgb3IgdW5leHBlY3RlZCBiZWhhdmlvciBpbiB0aG9zZSBmdW5jdGlvbnMgb3Igc3RydWN0dXJlcy4KCk92ZXJhbGwsIHRoZSBwYXRjaCBsb29rcyB3ZWxsLXN0cnVjdHVyZWQgYW5kIGZvY3VzZXMgb24gZGF0YSBpbnRlZ3JpdHksIHdoaWNoIGlzIGEgZ29vZCB0aGluZy4gV2l0aCB0aGUgcGxhbm5lZCBmb2xsb3cgdXAgb24gdGhlIGBzdHJ1Y3QgZXh0NF9leHRlbnRgIGFuZCBgZXh0NF9leHRfc3RvcmVfcGJsb2NrYCBkZXRhaWxzIEkgY2FuIHNpZ24gb2ZmIG9uIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJhZCBleHByZXNzaW9uOiBmYXRhbDogLWUgb3B0aW9uLCAmIzM5O3N0cnVjdCBleHQ0X2V4dGVudCB7JiMzOTs6IFVubWF0Y2hlZCBcezwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgZXh0NF9leHRlbnQgeyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O2JhZCBleHByZXNzaW9uOiBmYXRhbDogLWUgb3B0aW9uLCAmIzM5O3N0cnVjdCBleHQ0X2V4dGVudCB7JiMzOTs6IFVubWF0Y2hlZCBcXHsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzc3CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqR3JlcCBTdHJhdGVneSBmb3IgYHN0cnVjdCBleHQ0X2V4dGVudGAqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gd29yay4gSSBuZWVkIHRvIGZpbmQgYWxsIGluc3RhbmNlcyBvZiBgc3RydWN0IGV4dDRfZXh0ZW50YCBpbiB0aGUgY29kZWJhc2UuIEJ1dCwgYW5kIHRoaXMgaXMgY3J1Y2lhbCwgSSBuZWVkIHRvIGF2b2lkIGFueSBnb3RjaGFzIHdpdGggcmVnZXggZW5naW5lcyBhbmQgYnJhY2VzLCBhcyB0aG9zZSBhcmUgYWx3YXlzIGEgcGFpbi4gVGhlIHBvdGVudGlhbCBmb3IgbWlzaW50ZXJwcmV0YXRpb24gd2l0aCBicmFja2V0ZWQgcGF0dGVybnMgYW5kIHRoZSBsaWtlIGlzIHRvbyBoaWdoLiBTbywgSSYjMzk7bSBnb2luZyB0byBrZWVwIGl0IGNsZWFuIGFuZCBzaW1wbGUuIEkmIzM5O2xsIHN0aWNrIHRvIGEgZGlyZWN0IGBncmVwYCBmb3IgYHN0cnVjdCBleHQ0X2V4dGVudGAsIG5vIGZhbmN5IHJlZ2V4LCBubyBhdHRlbXB0aW5nIGNsZXZlciBzaG9ydGN1dHMuIFNvbWV0aW1lcyB0aGUgbW9zdCBzdHJhaWdodGZvcndhcmQgYXBwcm9hY2ggaXMgdGhlIG1vc3QgcmVsaWFibGUsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggcG90ZW50aWFsbHkgY29tcGxleCBjb2RlIGFuZCB0aGUgbnVhbmNlcyBvZiB2YXJpb3VzIGBncmVwYCBpbXBsZW1lbnRhdGlvbnMuIFNpbXBsaWNpdHkgdHJ1bXBzIGNsZXZlcm5lc3MgaGVyZTsgSSBuZWVkIGFjY3VyYWN5IGFib3ZlIGFsbCBlbHNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgZXh0NF9leHRlbnQgXFx7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0NF9leHRlbnRzLmg9NDg9c3RydWN0IGV4dDRfZXh0ZW50X3RhaWwge1xuLS1cbmZzL2V4dDQvZXh0NF9leHRlbnRzLmgtNTUtICovXG5mcy9leHQ0L2V4dDRfZXh0ZW50cy5oOjU2OnN0cnVjdCBleHQ0X2V4dGVudCB7XG5mcy9leHQ0L2V4dDRfZXh0ZW50cy5oLTU3LVx0X19sZTMyXHRlZV9ibG9jaztcdC8qIGZpcnN0IGxvZ2ljYWwgYmxvY2sgZXh0ZW50IGNvdmVycyAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjExMwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gRXh0ZW50cyBpbiBleHQ0KioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZXh0ZW50cyBhcmUgaW1wbGVtZW50ZWQgaW4gdGhlIGV4dDQgZmlsZXN5c3RlbSwgc3BlY2lmaWNhbGx5LiBUaGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGhlYWRlciBmaWxlLCB3aGljaCB1c3VhbGx5IGRlZmluZXMgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgYW5kIGNvbnN0YW50cy4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYGZzL2V4dDQvZXh0NF9leHRlbnRzLmhgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSA1Ni4gSSYjMzk7bSBob3BpbmcgdG8gZmluZCB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgdXNlZCB0byByZXByZXNlbnQgYW4gZXh0ZW50LCB3aGljaCB3aWxsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSByZXN0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QhIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZSB0aGUgYGV4dDRfZXh0ZW50X2hlYWRlcmAsIGBleHQ0X2V4dGVudGAsIGFuZCBwb3NzaWJseSBzb21lIHJlbGF0ZWQgc3RydWN0dXJlcyBmb3IgbWFuYWdpbmcgdGhlIGV4dGVudCB0cmVlLCBpZiB0aGV5JiMzOTtyZSB1c2luZyBvbmUuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBvbi1kaXNrIGZvcm1hdCBhbmQgaG93IHRoZSBsb2dpY2FsLXRvLXBoeXNpY2FsIG1hcHBpbmcgaXMgaGFuZGxlZC4gS25vd2luZyB0aGlzIHNob3VsZCBwcm92aWRlIGtleSBpbnNpZ2h0IGludG8gdW5kZXJzdGFuZGluZyBmaWxlIGFsbG9jYXRpb24gaW4gdGhpcyBmaWxlc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0NF9leHRlbnRzLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDUwOlx0fTtcbiAgNTE6XHRcbiAgNTI6XHQvKlxuICA1MzpcdCAqIFRoaXMgaXMgdGhlIGV4dGVudCBvbi1kaXNrIHN0cnVjdHVyZS5cbiAgNTQ6XHQgKiBJdCYjMzk7cyB1c2VkIGF0IHRoZSBib3R0b20gb2YgdGhlIHRyZWUuXG4gIDU1Olx0ICovXG4gIDU2Olx0c3RydWN0IGV4dDRfZXh0ZW50IHtcbiAgNTc6XHRcdF9fbGUzMlx0ZWVfYmxvY2s7XHQvKiBmaXJzdCBsb2dpY2FsIGJsb2NrIGV4dGVudCBjb3ZlcnMgKi9cbiAgNTg6XHRcdF9fbGUxNlx0ZWVfbGVuO1x0XHQvKiBudW1iZXIgb2YgYmxvY2tzIGNvdmVyZWQgYnkgZXh0ZW50ICovXG4gIDU5Olx0XHRfX2xlMTZcdGVlX3N0YXJ0X2hpO1x0LyogaGlnaCAxNiBiaXRzIG9mIHBoeXNpY2FsIGJsb2NrICovXG4gIDYwOlx0XHRfX2xlMzJcdGVlX3N0YXJ0X2xvO1x0LyogbG93IDMyIGJpdHMgb2YgcGh5c2ljYWwgYmxvY2sgKi9cbiAgNjE6XHR9O1xuICA2MjpcdFxuICA2MzpcdC8qXG4gIDY0Olx0ICogVGhpcyBpcyBpbmRleCBvbi1kaXNrIHN0cnVjdHVyZS5cbiAgNjU6XHQgKiBJdCYjMzk7cyB1c2VkIGF0IGFsbCB0aGUgbGV2ZWxzIGV4Y2VwdCB0aGUgYm90dG9tLlxuICA2NjpcdCAqL1xuICA2NzpcdHN0cnVjdCBleHQ0X2V4dGVudF9pZHgge1xuICA2ODpcdFx0X19sZTMyXHRlaV9ibG9jaztcdC8qIGluZGV4IGNvdmVycyBsb2dpY2FsIGJsb2NrcyBmcm9tICYjMzk7YmxvY2smIzM5OyAqL1xuICA2OTpcdFx0X19sZTMyXHRlaV9sZWFmX2xvO1x0LyogcG9pbnRlciB0byB0aGUgcGh5c2ljYWwgYmxvY2sgb2YgdGhlIG5leHQgKlxuICA3MDpcdFx0XHRcdFx0ICogbGV2ZWwuIGxlYWYgb3IgbmV4dCBpbmRleCBjb3VsZCBiZSB0aGVyZSAqL1xuICA3MTpcdFx0X19sZTE2XHRlaV9sZWFmX2hpO1x0LyogaGlnaCAxNiBiaXRzIG9mIHBoeXNpY2FsIGJsb2NrICovXG4gIDcyOlx0XHRfX3UxNlx0ZWlfdW51c2VkO1xuICA3MzpcdH07XG4gIDc0Olx0XG4gIDc1Olx0LypcbiAgNzY6XHQgKiBFYWNoIGJsb2NrIChsZWF2ZXMgYW5kIGluZGV4ZXMpLCBldmVuIGlub2RlLXN0b3JlZCBoYXMgaGVhZGVyLlxuICA3NzpcdCAqL1xuICA3ODpcdHN0cnVjdCBleHQ0X2V4dGVudF9oZWFkZXIge1xuICA3OTpcdFx0X19sZTE2XHRlaF9tYWdpYztcdC8qIHByb2JhYmx5IHdpbGwgc3VwcG9ydCBkaWZmZXJlbnQgZm9ybWF0cyAqL1xuICA4MDpcdFx0X19sZTE2XHRlaF9lbnRyaWVzO1x0LyogbnVtYmVyIG9mIHZhbGlkIGVudHJpZXMgKi9cbiAgODE6XHRcdF9fbGUxNlx0ZWhfbWF4O1x0XHQvKiBjYXBhY2l0eSBvZiBzdG9yZSBpbiBlbnRyaWVzICovXG4gIDgyOlx0XHRfX2xlMTZcdGVoX2RlcHRoO1x0LyogaGFzIHRyZWUgcmVhbCB1bmRlcmx5aW5nIGJsb2Nrcz8gKi9cbiAgODM6XHRcdF9fbGUzMlx0ZWhfZ2VuZXJhdGlvbjtcdC8qIGdlbmVyYXRpb24gb2YgdGhlIHRyZWUgKi9cbiAgODQ6XHR9O1xuICA4NTpcdFxuICA4NjpcdCNkZWZpbmUgRVhUNF9FWFRfTUFHSUNcdFx0Y3B1X3RvX2xlMTYoMHhmMzBhKVxuICA4NzpcdCNkZWZpbmUgRVhUNF9NQVhfRVhURU5UX0RFUFRIIDVcbiAgODg6XHRcbiAgODk6XHQjZGVmaW5lIEVYVDRfRVhURU5UX1RBSUxfT0ZGU0VUKGhkcikgXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwNDQKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gZXh0NF9leHRfc3RvcmVfcGJsb2NrKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gYGV4dDRfZXh0X3N0b3JlX3BibG9ja2AuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIHNjaGVtZSBvZiBleHRlbnQgbWFuYWdlbWVudCB3aXRoaW4gZXh0NC4gSSYjMzk7bSBhc3N1bWluZyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBhbGxvY2F0aW9uIG9yIGRlYWxsb2NhdGlvbiBvZiBwaHlzaWNhbCBibG9ja3MgcmVsYXRlZCB0byBhbiBleHRlbnQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIGV4dGVudCB0cmVlLiBMZXQmIzM5O3Mgc2VlLCB3aGF0IGFyZSB0aGUga2V5IHBhcmFtZXRlcnMgaXQgb3BlcmF0ZXMgb24/IEkmIzM5O2xsIGJldCBpdCYjMzk7cyBzb21ldGhpbmcgYWxvbmcgdGhlIGxpbmVzIG9mIHRoZSBpbm9kZSwgdGhlIGV4dGVudCBpdHNlbGYgKG9yIGEgcG9pbnRlciB0byBpdCksIGFuZCBwcm9iYWJseSB0aGUgbG9naWNhbCBibG9jayBudW1iZXIgYW5kIHRoZSBudW1iZXIgb2YgYmxvY2tzIHRvIGhhbmRsZS4gSSYjMzk7bSBhbHNvIGN1cmlvdXMgYWJvdXQgdGhlIGVycm9yIGhhbmRsaW5nIOKAkyBkb2VzIGl0IHJldHVybiBhbiBlcnJvciBjb2RlIG9yIHJlbHkgb24gYXNzZXJ0aW9ucz8gVGhlIHJldHVybiB2YWx1ZSBwcm9iYWJseSBpbmRpY2F0ZXMgdGhlIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZiB0aGUgb3BlcmF0aW9uLCBidXQgSSB3YW50IHRvIHVuZGVyc3RhbmQgKmhvdyogaXQgc2lnbmFscyB0aGF0IGZhaWx1cmUuIFNwZWNpZmljYWxseSwgSSYjMzk7ZCBuZWVkIHRvIHRyYWNlIHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IHJldHVybmVkIGVycm9ycy4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBpdCYjMzk7cyBjb3JyZWN0bHkgaGFuZGxpbmcgYm90aCBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gc2NlbmFyaW9zLiBJcyB0aGVyZSBhIGRpc3RpbmN0aW9uIGluIGhvdyBpdCBoYW5kbGVzIGRpcmVjdCwgaW5kaXJlY3QsIGFuZCBkb3VibHkgaW5kaXJlY3QgYmxvY2tzIGluIHRoZSBleHRlbnQgdHJlZT8gRmluYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbiYjMzk7cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBqb3VybmFsaW5nIGxheWVyLiBEb2VzIGl0IHV0aWxpemUgam91cm5hbF9zdGFydCwgam91cm5hbF9lbmQsIGV0Yz8gSXMgdGhlcmUgYW55IHBvdGVudGlhbCBmb3IgZGF0YSBsb3NzIG9yIGNvcnJ1cHRpb24gaWYgdGhlIGpvdXJuYWwgaXNuJiMzOTt0IHByb3Blcmx5IGhhbmRsZWQgaGVyZT8gTGV0JiMzOTtzIHRha2UgYSBsb29rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X2V4dF9zdG9yZV9wYmxvY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHQ0X2V4dGVudHMuaD0yMzI9c3RhdGljIGlubGluZSBleHQ0X2ZzYmxrX3QgZXh0NF9pZHhfcGJsb2NrKHN0cnVjdCBleHQ0X2V4dGVudF9pZHggKml4KVxuLS1cbmZzL2V4dDQvZXh0NF9leHRlbnRzLmgtMjQxLS8qXG5mcy9leHQ0L2V4dDRfZXh0ZW50cy5oOjI0MjogKiBleHQ0X2V4dF9zdG9yZV9wYmxvY2s6XG5mcy9leHQ0L2V4dDRfZXh0ZW50cy5oLTI0My0gKiBzdG9yZXMgYSBsYXJnZSBwaHlzaWNhbCBibG9jayBudW1iZXIgaW50byBhbiBleHRlbnQgc3RydWN0LFxuLS1cbmZzL2V4dDQvZXh0NF9leHRlbnRzLmgtMjQ1LSAqL1xuZnMvZXh0NC9leHQ0X2V4dGVudHMuaDoyNDY6c3RhdGljIGlubGluZSB2b2lkIGV4dDRfZXh0X3N0b3JlX3BibG9jayhzdHJ1Y3QgZXh0NF9leHRlbnQgKmV4LFxuZnMvZXh0NC9leHQ0X2V4dGVudHMuaC0yNDctXHRcdFx0XHRcdCBleHQ0X2ZzYmxrX3QgcGIpXG4tLVxuZnMvZXh0NC9leHRlbnRzLXRlc3QuYz0yMjc9c3RhdGljIGludCBleHRlbnRzX2t1bml0X2luaXQoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmMtMzE5LVx0RVhUX0ZJUlNUX0VYVEVOVChlaCktXHUwMDNlZWVfbGVuID0gY3B1X3RvX2xlMTYoRVhUX0RBVEFfTEVOKTtcbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmM6MzIwOlx0ZXh0NF9leHRfc3RvcmVfcGJsb2NrKEVYVF9GSVJTVF9FWFRFTlQoZWgpLCBFWFRfREFUQV9QQkxLKTtcbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmMtMzIxLVx0aWYgKCFwYXJhbSB8fCBwYXJhbS1cdTAwM2Vpc191bndyaXRfYXRfc3RhcnQpXG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9MTk5Mj1leHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtMjA4NS1cdFx0XHRleC1cdTAwM2VlZV9ibG9jayA9IG5ld2V4dC1cdTAwM2VlZV9ibG9jaztcbmZzL2V4dDQvZXh0ZW50cy5jOjIwODY6XHRcdFx0ZXh0NF9leHRfc3RvcmVfcGJsb2NrKGV4LCBleHQ0X2V4dF9wYmxvY2sobmV3ZXh0KSk7XG5mcy9leHQ0L2V4dGVudHMuYy0yMDg3LVx0XHRcdGV4LVx1MDAzZWVlX2xlbiA9IGNwdV90b19sZTE2KGV4dDRfZXh0X2dldF9hY3R1YWxfbGVuKGV4KVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTIxOTYtXHRuZWFyZXgtXHUwMDNlZWVfYmxvY2sgPSBuZXdleHQtXHUwMDNlZWVfYmxvY2s7XG5mcy9leHQ0L2V4dGVudHMuYzoyMTk3Olx0ZXh0NF9leHRfc3RvcmVfcGJsb2NrKG5lYXJleCwgZXh0NF9leHRfcGJsb2NrKG5ld2V4dCkpO1xuZnMvZXh0NC9leHRlbnRzLmMtMjE5OC1cdG5lYXJleC1cdTAwM2VlZV9sZW4gPSBuZXdleHQtXHUwMDNlZWVfbGVuO1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTI2MTQ9ZXh0NF9leHRfcm1fbGVhZihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTI3MzktXHRcdFx0LyogdGhpcyBleHRlbnQgaXMgcmVtb3ZlZDsgbWFyayBzbG90IGVudGlyZWx5IHVudXNlZCAqL1xuZnMvZXh0NC9leHRlbnRzLmM6Mjc0MDpcdFx0XHRleHQ0X2V4dF9zdG9yZV9wYmxvY2soZXgsIDApO1xuZnMvZXh0NC9leHRlbnRzLmMtMjc0MS1cbi0tXG5mcy9leHQ0L2V4dGVudHMuYz0zMTkxPXN0YXRpYyBzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqZXh0NF9zcGxpdF9leHRlbnRfYXQoaGFuZGxlX3QgKmhhbmRsZSxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy0zMjQ2LVx0ZXgyLVx1MDAzZWVlX2xlbiAgID0gY3B1X3RvX2xlMTYoZWVfbGVuIC0gKHNwbGl0IC0gZWVfYmxvY2spKTtcbmZzL2V4dDQvZXh0ZW50cy5jOjMyNDc6XHRleHQ0X2V4dF9zdG9yZV9wYmxvY2soZXgyLCBuZXdibG9jayk7XG5mcy9leHQ0L2V4dGVudHMuYy0zMjQ4LVx0aWYgKGlzX3Vud3JpdClcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz0zNTU3PWV4dDRfZXh0X2NvbnZlcnRfdG9faW5pdGlhbGl6ZWQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy0zNjQ1LVx0XHRcdGV4LVx1MDAzZWVlX2Jsb2NrID0gY3B1X3RvX2xlMzIoZWVfYmxvY2sgJiM0MzsgbWFwX2xlbik7XG5mcy9leHQ0L2V4dGVudHMuYzozNjQ2Olx0XHRcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhleCwgZWVfcGJsayAmIzQzOyBtYXBfbGVuKTtcbmZzL2V4dDQvZXh0ZW50cy5jLTM2NDctXHRcdFx0ZXgtXHUwMDNlZWVfbGVuID0gY3B1X3RvX2xlMTYoZWVfbGVuIC0gbWFwX2xlbik7XG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtMzY5MS1cdFx0XHRhYnV0X2V4LVx1MDAzZWVlX2Jsb2NrID0gY3B1X3RvX2xlMzIobmV4dF9sYmxrIC0gbWFwX2xlbik7XG5mcy9leHQ0L2V4dGVudHMuYzozNjkyOlx0XHRcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhhYnV0X2V4LCBuZXh0X3BibGsgLSBtYXBfbGVuKTtcbmZzL2V4dDQvZXh0ZW50cy5jLTM2OTMtXHRcdFx0ZXgtXHUwMDNlZWVfbGVuID0gY3B1X3RvX2xlMTYoZWVfbGVuIC0gbWFwX2xlbik7XG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtMzc0NS1cdFx0XHRcdGNwdV90b19sZTE2KCphbGxvY2F0ZWQgLSBzcGxpdF9tYXAubV9sZW4pO1xuZnMvZXh0NC9leHRlbnRzLmM6Mzc0NjpcdFx0XHRleHQ0X2V4dF9zdG9yZV9wYmxvY2soXHUwMDI2emVyb19leDEsXG5mcy9leHQ0L2V4dGVudHMuYy0zNzQ3LVx0XHRcdFx0ZXh0NF9leHRfcGJsb2NrKGV4KSAmIzQzOyBzcGxpdF9tYXAubV9sYmxrICYjNDM7XG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtMzc2MC1cdFx0XHRcdFx0XHRcdGVlX2Jsb2NrKTtcbmZzL2V4dDQvZXh0ZW50cy5jOjM3NjE6XHRcdFx0XHRleHQ0X2V4dF9zdG9yZV9wYmxvY2soXHUwMDI2emVyb19leDIsXG5mcy9leHQ0L2V4dGVudHMuYy0zNzYyLVx0XHRcdFx0XHRcdCAgICAgIGV4dDRfZXh0X3BibG9jayhleCkpO1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTQyNjk9aW50IGV4dDRfZXh0X21hcF9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy00NDczLVx0cGJsayA9IG5ld2Jsb2NrICYjNDM7IG9mZnNldDtcbmZzL2V4dDQvZXh0ZW50cy5jOjQ0NzQ6XHRleHQ0X2V4dF9zdG9yZV9wYmxvY2soXHUwMDI2bmV3ZXgsIHBibGspO1xuZnMvZXh0NC9leHRlbnRzLmMtNDQ3NS1cdG5ld2V4LmVlX2xlbiA9IGNwdV90b19sZTE2KGFyLmxlbik7XG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9NTc2Mz1leHQ0X3N3YXBfZXh0ZW50cyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlMSxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy01ODk3LVx0XHR0bXBfZXggPSAqZXgxO1xuZnMvZXh0NC9leHRlbnRzLmM6NTg5ODpcdFx0ZXh0NF9leHRfc3RvcmVfcGJsb2NrKGV4MSwgZXh0NF9leHRfcGJsb2NrKGV4MikpO1xuZnMvZXh0NC9leHRlbnRzLmM6NTg5OTpcdFx0ZXh0NF9leHRfc3RvcmVfcGJsb2NrKGV4MiwgZXh0NF9leHRfcGJsb2NrKFx1MDAyNnRtcF9leCkpO1xuZnMvZXh0NC9leHRlbnRzLmMtNTkwMC1cdFx0ZXgxLVx1MDAzZWVlX2xlbiA9IGNwdV90b19sZTE2KGUyX2xlbik7XG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9NjAyNz1pbnQgZXh0NF9leHRfcmVwbGF5X3VwZGF0ZV9leChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBzdGFydCxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy02MDgwLVx0XHRleHQ0X2V4dF9tYXJrX2luaXRpYWxpemVkKGV4KTtcbmZzL2V4dDQvZXh0ZW50cy5jOjYwODE6XHRleHQ0X2V4dF9zdG9yZV9wYmxvY2soZXgsIHBibGspO1xuZnMvZXh0NC9leHRlbnRzLmMtNjA4Mi1cdGRvd25fd3JpdGUoXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX2RhdGFfc2VtKTtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9OTMxPXN0YXRpYyBpbnQgZXh0NF9mY193cml0ZV9pbm9kZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiAqY3JjKVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy05NjEtXHRcdGV4LVx1MDAzZWVlX2xlbiA9IGNwdV90b19sZTE2KHJhbmdlLVx1MDAzZWxlbik7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6OTYyOlx0XHRleHQ0X2V4dF9zdG9yZV9wYmxvY2soZXgsIHJhbmdlLVx1MDAzZXBibGspO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTk2My1cdFx0aWYgKHJhbmdlLVx1MDAzZXVud3JpdHRlbilcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjE0OD1zdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X2FkZF9yYW5nZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1OCAqdmFsKVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMjAyLVx0XHRcdG5ld2V4LmVlX2Jsb2NrID0gY3B1X3RvX2xlMzIoY3VyKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMjAzOlx0XHRcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMjA0LVx0XHRcdFx0XHUwMDI2bmV3ZXgsIHN0YXJ0X3BibGsgJiM0MzsgY3VyIC0gc3RhcnQpO1xuLS1cbmZzL2V4dDQvaW5saW5lLmM9MTA3ND1zdGF0aWMgaW50IGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfZnNibGtfdCBibG9jayxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTExMzktXHRcdG5ld2V4LmVlX2xlbiA9IGNwdV90b19sZTE2KDEpO1xuZnMvZXh0NC9pbmxpbmUuYzoxMTQwOlx0XHRleHQ0X2V4dF9zdG9yZV9wYmxvY2soXHUwMDI2bmV3ZXgsIGJsb2NrKTtcbmZzL2V4dDQvaW5saW5lLmMtMTE0MS1cdFx0cGF0aCA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgXHUwMDI2bmV3ZXgsIDApO1xuLS1cbmZzL2V4dDQvbWlncmF0ZS5jPTIxPXN0YXRpYyBpbnQgZmluaXNoX3JhbmdlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9taWdyYXRlLmMtMzMtXHRuZXdleHQuZWVfbGVuICAgPSBjcHVfdG9fbGUxNihsYi1cdTAwM2VsYXN0X2Jsb2NrIC0gbGItXHUwMDNlZmlyc3RfYmxvY2sgJiM0MzsgMSk7XG5mcy9leHQ0L21pZ3JhdGUuYzozNDpcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhcdTAwMjZuZXdleHQsIGxiLVx1MDAzZWZpcnN0X3BibG9jayk7XG5mcy9leHQ0L21pZ3JhdGUuYy0zNS1cdC8qIExvY2tpbmcgb25seSBmb3IgY29udmVuaWVuY2Ugc2luY2Ugd2UgYXJlIG9wZXJhdGluZyBvbiB0ZW1wIGlub2RlICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODExCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFRoaXMgRXh0ZW50IEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGJpdCBvZiBjb2RlIGFuZCBpbW1lZGlhdGVseSByZWNvZ25pemUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhbiBgZXh0NF9leHRlbnRgIHN0cnVjdHVyZSwgc3BlY2lmaWNhbGx5IGluaXRpYWxpemluZyBhIG5ldyBvbmUsIGBuZXdleGAuICBJdCBzZWVtcyBsaWtlIHdlJiMzOTtyZSBzZXR0aW5nIHVwIGEgc2luZ2xlLWJsb2NrIGV4dGVudC4gIExldCYjMzk7cyBicmVhayBpdCBkb3duOiBgbmV3ZXguZWVfYmxvY2sgPSBjcHVfdG9fbGUzMigwKTtgIC0gUmlnaHQsIHplcm9pbmcgb3V0IHRoZSBsb2dpY2FsIGJsb2NrIG51bWJlciwgdGhhdCYjMzk7cyBleHBlY3RlZC4gYG5ld2V4LmVlX2xlbiA9IGNwdV90b19sZTE2KDEpO2AgLSBUaGVuIHNldHRpbmcgdGhlIGV4dGVudCBsZW5ndGggdG8gb25lIGJsb2NrOyBhZ2Fpbiwgc3RhbmRhcmQgcHJvY2VkdXJlLiAgV2UgYXJlIG1ha2luZyBpdCBsaXR0bGUgZW5kaWFuLCBvZiBjb3Vyc2UuCgpUaGUga2V5IHBhcnQgaGVyZSBpcyB0aGF0IHdlIGNhbGwgYGV4dDRfZXh0X3N0b3JlX3BibG9jaygmYW1wO25ld2V4LCBibG9jayk7YCAgSSBpbnN0YW50bHkgcmVjYWxsIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyB3aGVyZSB0aGUgKnBoeXNpY2FsKiBibG9jayBudW1iZXIgaXMgYWN0dWFsbHkgc3RvcmVkLiAgYGV4dDRfZXh0X3N0b3JlX3BibG9ja2AgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgYGVlX3N0YXJ0X2xvYCBhbmQgYGVlX3N0YXJ0X2hpYC4gU28gbm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzIGhvdyBkb2VzIGl0IHRyYW5zbGF0ZSB0aGUgJiMzOTtibG9jayYjMzk7IHZhcmlhYmxlIGludG8gdGhlIHR3byBmaWVsZHMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGV4YWN0IGRlZmluaXRpb24gb2YgdGhpcyBmdW5jdGlvbiB0byBmdWxseSB1bmRlcnN0YW5kIGhvdyB0aGUgcGh5c2ljYWwgYmxvY2sgYWRkcmVzcyBpcyBzdG9yZWQgaW4gdGhlIGV4dGVudCBoZWFkZXIuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGF0ICYjMzk7YmxvY2smIzM5OyByZXByZXNlbnRzIHRvIHVuZGVyc3RhbmQgdGhlIG1hcHBpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHQ0X2V4dGVudHMuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjQyOlx0ICogZXh0NF9leHRfc3RvcmVfcGJsb2NrOlxuIDI0MzpcdCAqIHN0b3JlcyBhIGxhcmdlIHBoeXNpY2FsIGJsb2NrIG51bWJlciBpbnRvIGFuIGV4dGVudCBzdHJ1Y3QsXG4gMjQ0Olx0ICogYnJlYWtpbmcgaXQgaW50byBwYXJ0c1xuIDI0NTpcdCAqL1xuIDI0NjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X2V4dF9zdG9yZV9wYmxvY2soc3RydWN0IGV4dDRfZXh0ZW50ICpleCxcbiAyNDc6XHRcdFx0XHRcdFx0IGV4dDRfZnNibGtfdCBwYilcbiAyNDg6XHR7XG4gMjQ5Olx0XHRleC1cdTAwM2VlZV9zdGFydF9sbyA9IGNwdV90b19sZTMyKCh1bnNpZ25lZCBsb25nKSAocGIgXHUwMDI2IDB4ZmZmZmZmZmYpKTtcbiAyNTA6XHRcdGV4LVx1MDAzZWVlX3N0YXJ0X2hpID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIGxvbmcpICgocGIgXHUwMDNlXHUwMDNlIDMxKSBcdTAwM2VcdTAwM2UgMSkgXHUwMDI2XG4gMjUxOlx0XHRcdFx0XHQgICAgICAweGZmZmYpO1xuIDI1MjpcdH1cbiAyNTM6XHRcbiAyNTQ6XHQvKlxuIDI1NTpcdCAqIGV4dDRfaWR4X3N0b3JlX3BibG9jazpcbiAyNTY6XHQgKiBzdG9yZXMgYSBsYXJnZSBwaHlzaWNhbCBibG9jayBudW1iZXIgaW50byBhbiBpbmRleCBzdHJ1Y3QsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NTIzCgkJCQkJCQlvdXRwdXQ6IDQwNgoJCQkJCQkJdGhvdWdodHM6IDU0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBDaGVjazogTm8gVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MgRGV0ZWN0ZWQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkmIzM5O20gbm90aW5nIHRoYXQgYGVlX2Jsb2NrYCwgYGVlX2xlbmAsIGBlZV9zdGFydF9sb2AsIGFuZCBgZWVfc3RhcnRfaGlgIHdpdGhpbiB0aGUgYGV4dDRfZXh0ZW50YCBzdHJ1Y3QgYXJlICpleHBsaWNpdGx5KiBpbml0aWFsaXplZC4gR29vZC4gV2UgaW5pdGlhbGl6ZSBgZXh0NF9hbGxvY2F0aW9uX3JlcXVlc3QgYXI7YCBhbmQgemVybyBpdCBvdXQgaW1tZWRpYXRlbHkgd2l0aCBgbWVtc2V0YC4gVGhpcyBpcyBzdGFuZGFyZCBwcmFjdGljZSwgYW5kIHdoYXQgSSYjMzk7ZCBleHBlY3QuIFNhbWUgd2l0aCB0aGUgYmxvY2sgZGF0YSBidWZmZXIgYGJoLSZndDtiX2RhdGFgIGFuZCB0aGUgaW5saW5lIGRhdGEgYnVmZmVyLiBXZSBlbnN1cmUgdGhleSYjMzk7cmUgZnVsbHkgemVyb2VkLgoKSSYjMzk7bSBzeXN0ZW1hdGljYWxseSBjaGVja2luZyBmb3IgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZXJlJiMzOTtzIG5vIHN0cnVjdCBjb3B5IHRvIHVzZXJzcGFjZSwgbm8gYnJhbmNoaW5nIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgbm8gdW5pbml0aWFsaXplZCBoZWFwIG9yIHN0YWNrIHZhcmlhYmxlcyBiZWluZyB1c2VkLiBUaGlzIGlzIHdoYXQgSSB3YXMgaG9waW5nIHRvIHNlZS4KCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIHRoZSBLQVNBTi9LTVNBTiBpbXBsaWNhdGlvbnMuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbW9kaWZpY2F0aW9ucyB0byBrZXJuZWwgZnMgYnVmZmVycywgZXh0NCBleHRlbnRzLCBpbm9kZXMsIGFuZCBidWZmZXIgaGVhZHMuIFRoZSBhbGxvY2F0ZWQgaGVhcCBidWZmZXJzIChgaV9ibG9ja19idWZgLCBgeGF0dHJfYnVmYCwgYGJ1ZmApIGFyZSBwb3B1bGF0ZWQgdmlhIGBtZW1jcHlgIG9yIGBleHQ0X3JlYWRfaW5saW5lX2RhdGFgLCBzbyB3ZSYjMzk7cmUgbm90IHJlbHlpbmcgb24gdW5pbml0aWFsaXplZCB2YWx1ZXMuIFN0YWNrIHZhcmlhYmxlcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBvciB6ZXJvZWQgb3V0LiBUaGUgYnVmZmVyIGhlYWQgZGF0YSBibG9jaywgYGJoLSZndDtiX2RhdGFgLCBpcyBtZW1zZXQgdG8gemVyby4KClRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyB0aGF0IHRoZXJlIGFyZSAqbm8qIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGhlcmUgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBLTVNBTi4gQW55IGlzc3VlcyB3b3VsZCBsaWtlbHkgYmUgcmVsYXRlZCB0byBleHRlbnQgbWFuaXB1bGF0aW9uIGVycm9ycywgYnVmZmVyIG92ZXJydW5zLCByZWZlcmVuY2UgY291bnRpbmcgcHJvYmxlbXMsIG9yIGxvY2tpbmcgaXNzdWVzLCBhbmQgdGhvc2Ugc2hvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBlcnJvciBkZXRlY3RvcnMuCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBsb2dpYy4gVGhlIEtNU0FOIHJ1bGUgaXMgY2xlYXI6IGl0JiMzOTtzIG5lZWRlZCBPTkxZIGlmIHRoZSBwYXRjaCAqaW50cm9kdWNlcyogb3IgbW9kaWZpZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFdlIGhhdmUgdG8gbG9vayBmb3IgY29weSB0byB1c2VyIHdpdGhvdXQgaW5pdCwgY29uZGl0aW9uYWwgbG9naWMgb24gdW5pbml0IHZhcnMsIGNvbXBsZXggdW5pbml0IGRhdGEgc3RydWN0dXJlcyByZWFkIGxhdGVyLCBvciBib3VuZHMgbG9naWMgYWNjZXNzaW5nIHVuaW5pdCBieXRlcy4gR2l2ZW4gdGhhdCBhbGwgaGVhcC9zdGFjayBzdHJ1Y3R1cmVzIGFyZSBpbml0aWFsaXplZC96ZXJvZWQgKmJlZm9yZSogdXNlLCBhbmQgdGhlcmUgYXJlIG5vIGluZm8gbGVha3MsIE5lZWRzS01TQU4gbXVzdCBiZSBgZmFsc2VgLgoKQWxyaWdodCwgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhpcy4gVGltZSB0byBwcmVwYXJlIHRoZSB0b29sIGNhbGwgdG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2tgIGFuZCBpbnRyb2R1Y2VzIGBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9ja2AgdG8gcmVmYWN0b3IgaG93IGlubGluZSBkYXRhIGlzIGNvbnZlcnRlZCB0byBhIHJlZ3VsYXIgZXh0ZW50IG9yIGJsb2NrIHBvaW50ZXIgaW4gZXh0NC5cblxuQW5hbHlzaXMgb2YgbWVtb3J5IGhhbmRsaW5nOlxuMS4gSGVhcCBidWZmZXJzOlxuICAgLSBgYnVmYCBpcyBwb3B1bGF0ZWQgYnkgYGV4dDRfcmVhZF9pbmxpbmVfZGF0YSgpYCBiZWZvcmUgYmVpbmcgcmVhZC5cbiAgIC0gYGlfYmxvY2tfYnVmYCBhbmQgYHhhdHRyX2J1ZmAgYXJlIGFsbG9jYXRlZCB3aXRoIGBrbWFsbG9jKClgIGFuZCBpbW1lZGlhdGVseSBmdWxseSBpbml0aWFsaXplZCB2aWEgYG1lbWNweSgpYCBmcm9tIGByYXdfaW5vZGUtXHUwMDNlaV9ibG9ja2AgYW5kIGBoZWFkZXJgIHJlc3BlY3RpdmVseS5cbiAgIC0gVGhlIG5ld2x5IGFsbG9jYXRlZCBibG9jayBidWZmZXIgYGJoLVx1MDAzZWJfZGF0YWAgaXMgY2xlYXJlZCB1c2luZyBgbWVtc2V0KGJoLVx1MDAzZWJfZGF0YSwgMCwgaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZSlgIGJlZm9yZSBkYXRhIG9yIGRpcmVjdG9yeSBlbnRyaWVzIGFyZSBjb3BpZWQgaW50byBpdC5cbjIuIFN0YWNrIHN0cnVjdHVyZXM6XG4gICAtIGBzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX3JlcXVlc3QgYXJgIGlzIGNsZWFyZWQgd2l0aCBgbWVtc2V0KFx1MDAyNmFyLCAwLCBzaXplb2YoYXIpKWAuXG4gICAtIGBzdHJ1Y3QgZXh0NF9leHRlbnQgbmV3ZXhgIGhhcyBhbGwgZm91ciBmaWVsZHMgKGBlZV9ibG9ja2AsIGBlZV9sZW5gLCBgZWVfc3RhcnRfbG9gLCBgZWVfc3RhcnRfaGlgKSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLlxuICAgLSBgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCBpc2AgYW5kIGBzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvIGlgIGFyZSBzdGF0aWNhbGx5IGluaXRpYWxpemVkIHdpdGggZGVzaWduYXRlZCBpbml0aWFsaXplcnMuXG4zLiBObyBkYXRhIG9yIHN0cnVjdHVyZSB3aXRoIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbnRyb2wgZmxvdyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLlxuXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIGV4dGVudCB0cmVlIGNvcnJ1cHRpb24sIGxvY2sgb3JkZXIgdmlvbGF0aW9ucywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrYCBhbmQgaW50cm9kdWNlcyBgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2tgIHRvIHJlZmFjdG9yIGhvdyBpbmxpbmUgZGF0YSBpcyBjb252ZXJ0ZWQgdG8gYSByZWd1bGFyIGV4dGVudCBvciBibG9jayBwb2ludGVyIGluIGV4dDQuXG5cbkFuYWx5c2lzIG9mIG1lbW9yeSBoYW5kbGluZzpcbjEuIEhlYXAgYnVmZmVyczpcbiAgIC0gYGJ1ZmAgaXMgcG9wdWxhdGVkIGJ5IGBleHQ0X3JlYWRfaW5saW5lX2RhdGEoKWAgYmVmb3JlIGJlaW5nIHJlYWQuXG4gICAtIGBpX2Jsb2NrX2J1ZmAgYW5kIGB4YXR0cl9idWZgIGFyZSBhbGxvY2F0ZWQgd2l0aCBga21hbGxvYygpYCBhbmQgaW1tZWRpYXRlbHkgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGBtZW1jcHkoKWAgZnJvbSBgcmF3X2lub2RlLVx1MDAzZWlfYmxvY2tgIGFuZCBgaGVhZGVyYCByZXNwZWN0aXZlbHkuXG4gICAtIFRoZSBuZXdseSBhbGxvY2F0ZWQgYmxvY2sgYnVmZmVyIGBiaC1cdTAwM2ViX2RhdGFgIGlzIGNsZWFyZWQgdXNpbmcgYG1lbXNldChiaC1cdTAwM2ViX2RhdGEsIDAsIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUpYCBiZWZvcmUgZGF0YSBvciBkaXJlY3RvcnkgZW50cmllcyBhcmUgY29waWVkIGludG8gaXQuXG4yLiBTdGFjayBzdHJ1Y3R1cmVzOlxuICAgLSBgc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9yZXF1ZXN0IGFyYCBpcyBjbGVhcmVkIHdpdGggYG1lbXNldChcdTAwMjZhciwgMCwgc2l6ZW9mKGFyKSlgLlxuICAgLSBgc3RydWN0IGV4dDRfZXh0ZW50IG5ld2V4YCBoYXMgYWxsIGZvdXIgZmllbGRzIChgZWVfYmxvY2tgLCBgZWVfbGVuYCwgYGVlX3N0YXJ0X2xvYCwgYGVlX3N0YXJ0X2hpYCkgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cbiAgIC0gYHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQgaXNgIGFuZCBgc3RydWN0IGV4dDRfeGF0dHJfaW5mbyBpYCBhcmUgc3RhdGljYWxseSBpbml0aWFsaXplZCB3aXRoIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLlxuMy4gTm8gZGF0YSBvciBzdHJ1Y3R1cmUgd2l0aCB1bmluaXRpYWxpemVkIHBhZGRpbmcgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjb250cm9sIGZsb3cgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy5cblxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyBleHRlbnQgdHJlZSBjb3JydXB0aW9uLCBsb2NrIG9yZGVyIHZpb2xhdGlvbnMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIHNhbml0aXplcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjUzOjAzLjg0MTk1MTQ4NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MjEwODM0MzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFcIixcbiAgICBcImV4dDRfdHJ5X2FkZF9pbmxpbmVfZW50cnlcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrYCBhbmQgaW50cm9kdWNlcyBgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2tgIHRvIHJlZmFjdG9yIGhvdyBpbmxpbmUgZGF0YSBpcyBjb252ZXJ0ZWQgdG8gYSByZWd1bGFyIGV4dGVudCBvciBibG9jayBwb2ludGVyIGluIGV4dDQuXFxuXFxuQW5hbHlzaXMgb2YgbWVtb3J5IGhhbmRsaW5nOlxcbjEuIEhlYXAgYnVmZmVyczpcXG4gICAtIGBidWZgIGlzIHBvcHVsYXRlZCBieSBgZXh0NF9yZWFkX2lubGluZV9kYXRhKClgIGJlZm9yZSBiZWluZyByZWFkLlxcbiAgIC0gYGlfYmxvY2tfYnVmYCBhbmQgYHhhdHRyX2J1ZmAgYXJlIGFsbG9jYXRlZCB3aXRoIGBrbWFsbG9jKClgIGFuZCBpbW1lZGlhdGVseSBmdWxseSBpbml0aWFsaXplZCB2aWEgYG1lbWNweSgpYCBmcm9tIGByYXdfaW5vZGUtXFx1MDAzZWlfYmxvY2tgIGFuZCBgaGVhZGVyYCByZXNwZWN0aXZlbHkuXFxuICAgLSBUaGUgbmV3bHkgYWxsb2NhdGVkIGJsb2NrIGJ1ZmZlciBgYmgtXFx1MDAzZWJfZGF0YWAgaXMgY2xlYXJlZCB1c2luZyBgbWVtc2V0KGJoLVxcdTAwM2ViX2RhdGEsIDAsIGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSlgIGJlZm9yZSBkYXRhIG9yIGRpcmVjdG9yeSBlbnRyaWVzIGFyZSBjb3BpZWQgaW50byBpdC5cXG4yLiBTdGFjayBzdHJ1Y3R1cmVzOlxcbiAgIC0gYHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fcmVxdWVzdCBhcmAgaXMgY2xlYXJlZCB3aXRoIGBtZW1zZXQoXFx1MDAyNmFyLCAwLCBzaXplb2YoYXIpKWAuXFxuICAgLSBgc3RydWN0IGV4dDRfZXh0ZW50IG5ld2V4YCBoYXMgYWxsIGZvdXIgZmllbGRzIChgZWVfYmxvY2tgLCBgZWVfbGVuYCwgYGVlX3N0YXJ0X2xvYCwgYGVlX3N0YXJ0X2hpYCkgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cXG4gICAtIGBzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9maW5kIGlzYCBhbmQgYHN0cnVjdCBleHQ0X3hhdHRyX2luZm8gaWAgYXJlIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQgd2l0aCBkZXNpZ25hdGVkIGluaXRpYWxpemVycy5cXG4zLiBObyBkYXRhIG9yIHN0cnVjdHVyZSB3aXRoIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbnRyb2wgZmxvdyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLlxcblxcbkFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgZXh0ZW50IHRyZWUgY29ycnVwdGlvbiwgbG9jayBvcmRlciB2aW9sYXRpb25zLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzcykgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBzYW5pdGl6ZXJzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGV4dDQgaW5saW5lIGRhdGEgY29udmVyc2lvbiBsb2dpYyBpbiBmcy9leHQ0L2lubGluZS5jLCByZXBsYWNpbmcgdGhlIGlubGluZSBkYXRhIHJlc3RvcmF0aW9uIGZsb3cgd2l0aCBhIG5ldyBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9jayBmdW5jdGlvbiBhbmQgcmVmYWN0b3JpbmcgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jay4gVGhlc2UgY2hhbmdlcyBhbHRlciBob3cgZXh0NCBjb252ZXJ0cyBpbmxpbmUgZGlyZWN0b3J5L2ZpbGUgZGF0YSBpbnRvIGV4dGVudC9ibG9jayBhbGxvY2F0aW9ucyBhbmQgYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6NTM6MDMuODQxOTU2NDA2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjIyODIwMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzOWZmZjMyNDhmYTdjZDdjYmYyZDQ0YTZjYzU0NDRlYmYxNzdkODM2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDMxIDAyOjUzOjAzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5saW5lLmMgYi9mcy9leHQ0L2lubGluZS5jXFxuaW5kZXggODA0NWU0ZmYyNzBjNy4uOTM5YzZiZjIwYjViNyAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L2lubGluZS5jXFxuKysrIGIvZnMvZXh0NC9pbmxpbmUuY1xcbkBAIC0xNCw2ICsxNCw3IEBAXFxuICNpbmNsdWRlIFxcXCJleHQ0LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ4YXR0ci5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidHJ1bmNhdGUuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImV4dDRfZXh0ZW50cy5oXFxcIlxcbiBcXG4gI2RlZmluZSBFWFQ0X1hBVFRSX1NZU1RFTV9EQVRBXFx0XFxcImRhdGFcXFwiXFxuICNkZWZpbmUgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRVxcdCgoc2l6ZW9mKF9fbGUzMikgKiBFWFQ0X05fQkxPQ0tTKSlcXG5AQCAtMTA3MCwyMSArMTA3MSwxMjUgQEAgc3RhdGljIGludCBleHQ0X3VwZGF0ZV9pbmxpbmVfZGlyKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgZXh0NF9yZXN0b3JlX2lubGluZV9kYXRhKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGV4dDRfaWxvYyAqaWxvYyxcXG4tXFx0XFx0XFx0XFx0ICAgICB2b2lkICpidWYsIGludCBpbmxpbmVfc2l6ZSlcXG4rc3RhdGljIGludCBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2ZzYmxrX3QgYmxvY2ssXFxuK1xcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBsZW4sIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXFxuIHtcXG4tXFx0aW50IHJldDtcXG4rXFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpO1xcbitcXHRzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9maW5kIGlzID0ge1xcbitcXHRcXHQucyA9IHsgLm5vdF9mb3VuZCA9IDAsIH0sXFxuK1xcdH07XFxuK1xcdHN0cnVjdCBleHQ0X3hhdHRyX2luZm8gaSA9IHtcXG4rXFx0XFx0Lm5hbWVfaW5kZXggPSBFWFQ0X1hBVFRSX0lOREVYX1NZU1RFTSxcXG4rXFx0XFx0Lm5hbWUgPSBFWFQ0X1hBVFRSX1NZU1RFTV9EQVRBLFxcbitcXHRcXHQudmFsdWUgPSBOVUxMLFxcbitcXHRcXHQudmFsdWVfbGVuID0gMCxcXG4rXFx0fTtcXG4rXFx0aW50IGVycm9yO1xcbitcXHR2b2lkICppX2Jsb2NrX2J1ZiA9IE5VTEw7XFxuK1xcdHZvaWQgKnhhdHRyX2J1ZiA9IE5VTEw7XFxuK1xcdHZvaWQgKmhlYWRlciA9IE5VTEw7XFxuK1xcdHZvaWQgKnRhaWwgPSBOVUxMO1xcbitcXHRpbnQgeGF0dHJfc2l6ZTtcXG4rXFx0c3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZTtcXG4gXFxuLVxcdHJldCA9IGV4dDRfY3JlYXRlX2lubGluZV9kYXRhKGhhbmRsZSwgaW5vZGUsIGlubGluZV9zaXplKTtcXG4tXFx0aWYgKHJldCkge1xcbi1cXHRcXHRleHQ0X21zZyhpbm9kZS1cXHUwMDNlaV9zYiwgS0VSTl9FTUVSRyxcXG4tXFx0XFx0XFx0XFxcImVycm9yIHJlc3RvcmluZyBpbmxpbmVfZGF0YSBmb3IgaW5vZGUgLS0gcG90ZW50aWFsIGRhdGEgbG9zcyEgKGlub2RlICVsbHUsIGVycm9yICVkKVxcXCIsXFxuLVxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX2lubywgcmV0KTtcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHRpX2Jsb2NrX2J1ZiA9IGttYWxsb2MoRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSwgR0ZQX05PRlMpO1xcbitcXHRpZiAoIWlfYmxvY2tfYnVmKSB7XFxuK1xcdFxcdGVycm9yID0gLUVOT01FTTtcXG4rXFx0XFx0ZG93bl93cml0ZShcXHUwMDI2ZWktXFx1MDAzZWlfZGF0YV9zZW0pO1xcbitcXHRcXHRnb3RvIGVycm9yO1xcbiBcXHR9XFxuLVxcdGV4dDRfd3JpdGVfaW5saW5lX2RhdGEoaW5vZGUsIGlsb2MsIGJ1ZiwgMCwgaW5saW5lX3NpemUpO1xcbi1cXHRleHQ0X3NldF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpO1xcbitcXHRkb3duX3dyaXRlKFxcdTAwMjZlaS1cXHUwMDNlaV9kYXRhX3NlbSk7XFxuK1xcdGVycm9yID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcXHUwMDI2aXMuaWxvYyk7XFxuK1xcdGlmIChlcnJvcilcXG4rXFx0XFx0Z290byBlcnJvcjtcXG4rXFx0cmF3X2lub2RlID0gZXh0NF9yYXdfaW5vZGUoXFx1MDAyNmlzLmlsb2MpO1xcbitcXHRoZWFkZXIgPSBJSERSKGlub2RlLCByYXdfaW5vZGUpO1xcbitcXHR0YWlsID0gSVRBSUwoaW5vZGUsIHJhd19pbm9kZSk7XFxuK1xcdHhhdHRyX3NpemUgPSB0YWlsIC0gaGVhZGVyO1xcbitcXHR4YXR0cl9idWYgPSBrbWFsbG9jKHhhdHRyX3NpemUsIEdGUF9OT0ZTKTtcXG4rXFx0aWYgKCF4YXR0cl9idWYpIHtcXG4rXFx0XFx0ZXJyb3IgPSAtRU5PTUVNO1xcbitcXHRcXHRnb3RvIGVycm9yO1xcbitcXHR9XFxuK1xcdEJVRkZFUl9UUkFDRShpcy5pbG9jLmJoLCBcXFwiZ2V0X3dyaXRlX2FjY2Vzc1xcXCIpO1xcbitcXHRlcnJvciA9IGV4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgaW5vZGUtXFx1MDAzZWlfc2IsIGlzLmlsb2MuYmgsIEVYVDRfSlRSX05PTkUpO1xcbitcXHRpZiAoZXJyb3IpIHtcXG4rXFx0XFx0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIGJsb2NrKTtcXG4rXFx0XFx0ZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTtcXG4rXFx0XFx0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBOVUxMLCBibG9jaywgbGVuLCAwKTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFx0bWVtY3B5KGlfYmxvY2tfYnVmLCAodm9pZCAqKXJhd19pbm9kZS1cXHUwMDNlaV9ibG9jaywgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XFxuK1xcdG1lbXNldCgodm9pZCAqKXJhd19pbm9kZS1cXHUwMDNlaV9ibG9jaywgMCwgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XFxuK1xcdG1lbXNldChlaS1cXHUwMDNlaV9kYXRhLCAwLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcXG4rXFx0bWVtY3B5KHhhdHRyX2J1ZiwgaGVhZGVyLCB4YXR0cl9zaXplKTtcXG4rXFx0aWYgKGV4dDRfaGFzX2ZlYXR1cmVfZXh0ZW50cyhpbm9kZS1cXHUwMDNlaV9zYikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0KFNfSVNESVIoaW5vZGUtXFx1MDAzZWlfbW9kZSkgfHwgU19JU1JFRyhpbm9kZS1cXHUwMDNlaV9tb2RlKSB8fCBTX0lTTE5LKGlub2RlLVxcdTAwM2VpX21vZGUpKSkge1xcbitcXHRcXHRleHQ0X3NldF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpO1xcbitcXHRcXHRleHQ0X2V4dF90cmVlX2luaXQoaGFuZGxlLCBpbm9kZSk7XFxuK1xcdFxcdHN0cnVjdCBleHQ0X2V4dF9wYXRoICpwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgMCwgTlVMTCwgMCk7XFxuK1xcbitcXHRcXHRpZiAoSVNfRVJSKHBhdGgpKSB7XFxuK1xcdFxcdFxcdGVycm9yID0gUFRSX0VSUihwYXRoKTtcXG4rXFx0XFx0XFx0Z290byByZWNvdmVyeTtcXG4rXFx0XFx0fVxcbitcXHRcXHRzdHJ1Y3QgZXh0NF9leHRlbnQgbmV3ZXg7XFxuK1xcbitcXHRcXHRuZXdleC5lZV9ibG9jayA9IGNwdV90b19sZTMyKDApO1xcbitcXHRcXHRuZXdleC5lZV9sZW4gPSBjcHVfdG9fbGUxNigxKTtcXG4rXFx0XFx0ZXh0NF9leHRfc3RvcmVfcGJsb2NrKFxcdTAwMjZuZXdleCwgYmxvY2spO1xcbitcXHRcXHRwYXRoID0gZXh0NF9leHRfaW5zZXJ0X2V4dGVudChoYW5kbGUsIGlub2RlLCBwYXRoLCBcXHUwMDI2bmV3ZXgsIDApO1xcbitcXHRcXHRpZiAoSVNfRVJSKHBhdGgpKSB7XFxuK1xcdFxcdFxcdGVycm9yID0gUFRSX0VSUihwYXRoKTtcXG4rXFx0XFx0XFx0aWYgKGVycm9yID09IC1FRFFVT1QgfHwgZXJyb3IgPT0gLUVOT1NQQylcXG4rXFx0XFx0XFx0XFx0Z290byByZWNvdmVyeTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0ZXh0NF9mcmVlX2V4dF9wYXRoKHBhdGgpO1xcbitcXHRcXHR9XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZGF0YVswXSA9IGNwdV90b19sZTMyKGJsb2NrKTtcXG4rXFx0fVxcbitcXHRlcnJvciA9IGV4dDRfeGF0dHJfaWJvZHlfZmluZChpbm9kZSwgXFx1MDAyNmksIFxcdTAwMjZpcyk7XFxuK1xcdGlmIChlcnJvcilcXG4rXFx0XFx0Z290byByZWNvdmVyeTtcXG4rXFx0aWYgKCFpcy5zLm5vdF9mb3VuZClcXG4rXFx0XFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGUsIGlub2RlLCBcXHUwMDI2aSwgXFx1MDAyNmlzKTtcXG4rcmVjb3Zlcnk6XFxuK1xcdGlmIChlcnJvcikge1xcbitcXHRcXHRleHQ0X2ZvcmdldChoYW5kbGUsIDAsIGlub2RlLCBiaCwgYmxvY2spO1xcbitcXHRcXHRleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpO1xcbitcXHRcXHRleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIGJsb2NrLCBsZW4sIDApO1xcbitcXHRcXHRtZW1jcHkoKHZvaWQgKilyYXdfaW5vZGUtXFx1MDAzZWlfYmxvY2ssIGlfYmxvY2tfYnVmLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcXG4rXFx0XFx0bWVtY3B5KGVpLVxcdTAwM2VpX2RhdGEsIHJhd19pbm9kZS1cXHUwMDNlaV9ibG9jaywgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XFxuK1xcdFxcdG1lbWNweShoZWFkZXIsIHhhdHRyX2J1ZiwgeGF0dHJfc2l6ZSk7XFxuK1xcdFxcdGV4dDRfY2xlYXJfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0ZXh0NF9jbGVhcl9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0lOTElORV9EQVRBKTtcXG4rXFx0XFx0aWYgKFNfSVNESVIoaW5vZGUtXFx1MDAzZWlfbW9kZSkpIHtcXG4rXFx0XFx0XFx0aV9zaXplX3dyaXRlKGlub2RlLCBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemUpO1xcbitcXHRcXHRcXHRFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2Rpc2tzaXplID0gaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmxvY2tzaXplO1xcbitcXHRcXHR9XFxuK1xcdFxcdGdldF9iaChpcy5pbG9jLmJoKTtcXG4rXFx0XFx0ZXJyb3IgPSBleHQ0X21hcmtfaWxvY19kaXJ0eShoYW5kbGUsIGlub2RlLCBcXHUwMDI2aXMuaWxvYyk7XFxuK1xcdFxcdEVYVDRfSShpbm9kZSktXFx1MDAzZWlfaW5saW5lX29mZiA9IDA7XFxuK1xcdFxcdEVYVDRfSShpbm9kZSktXFx1MDAzZWlfaW5saW5lX3NpemUgPSAwO1xcbitcXHRcXHRleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XFxuK1xcdFxcdGJyZWxzZShiaCk7XFxuK1xcdH1cXG4rb3V0OlxcbitcXHRicmVsc2UoaXMuaWxvYy5iaCk7XFxuK1xcdHVwX3dyaXRlKFxcdTAwMjZlaS1cXHUwMDNlaV9kYXRhX3NlbSk7XFxuK1xcdGtmcmVlKGlfYmxvY2tfYnVmKTtcXG4rXFx0a2ZyZWUoeGF0dHJfYnVmKTtcXG4rXFx0cmV0dXJuIGVycm9yO1xcbitlcnJvcjpcXG4rXFx0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIGJsb2NrKTtcXG4rXFx0ZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTtcXG4rXFx0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBOVUxMLCBibG9jaywgbGVuLCAwKTtcXG4rXFx0dXBfd3JpdGUoXFx1MDAyNmVpLVxcdTAwM2VpX2RhdGFfc2VtKTtcXG4rXFx0a2ZyZWUoaV9ibG9ja19idWYpO1xcbitcXHRrZnJlZSh4YXR0cl9idWYpO1xcbitcXHRyZXR1cm4gZXJyb3I7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxcbkBAIC0xMDkzLDkgKzExOTgsMTIgQEAgc3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXFxuIHtcXG4gXFx0aW50IGVycm9yO1xcbiBcXHR2b2lkICpidWYgPSBOVUxMO1xcbi1cXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRhdGFfYmggPSBOVUxMO1xcbi1cXHRzdHJ1Y3QgZXh0NF9tYXBfYmxvY2tzIG1hcDtcXG4rXFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7XFxuIFxcdGludCBpbmxpbmVfc2l6ZTtcXG4rXFx0ZXh0NF9mc2Jsa190IG5ld2Jsb2NrID0gMDtcXG4rXFx0c3RydWN0IGV4dDRfYWxsb2NhdGlvbl9yZXF1ZXN0IGFyO1xcbitcXHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4rXFx0dW5zaWduZWQgaW50IGFsbG9jYXRlZF9ibG9jaztcXG4gXFxuIFxcdGlubGluZV9zaXplID0gZXh0NF9nZXRfaW5saW5lX3NpemUoaW5vZGUpO1xcbiBcXHRidWYgPSBrbWFsbG9jKGlubGluZV9zaXplLCBHRlBfTk9GUyk7XFxuQEAgLTExMjAsNjMgKzEyMjgsNjIgQEAgc3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcbi1cXHRlcnJvciA9IGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlLCBpbm9kZSk7XFxuLVxcdGlmIChlcnJvcilcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcbi1cXHRtYXAubV9sYmxrID0gMDtcXG4tXFx0bWFwLm1fbGVuID0gMTtcXG4tXFx0bWFwLm1fZmxhZ3MgPSAwO1xcbi1cXHRlcnJvciA9IGV4dDRfbWFwX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBcXHUwMDI2bWFwLCBFWFQ0X0dFVF9CTE9DS1NfQ1JFQVRFKTtcXG4rXFx0bWVtc2V0KFxcdTAwMjZhciwgMCwgc2l6ZW9mKGFyKSk7XFxuK1xcdGFyLmlub2RlID0gaW5vZGU7XFxuK1xcdGFyLmxvZ2ljYWwgPSAwO1xcbitcXHRhci5sZW4gPSAxO1xcbitcXHRpZiAoU19JU1JFRyhpbm9kZS1cXHUwMDNlaV9tb2RlKSlcXG4rXFx0XFx0YXIuZmxhZ3MgPSBFWFQ0X01CX0hJTlRfREFUQTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRhci5mbGFncyA9IDA7XFxuK1xcdG5ld2Jsb2NrID0gZXh0NF9tYl9uZXdfYmxvY2tzKGhhbmRsZSwgXFx1MDAyNmFyLCBcXHUwMDI2ZXJyb3IpO1xcbiBcXHRpZiAoZXJyb3IgXFx1MDAzYyAwKVxcbi1cXHRcXHRnb3RvIG91dF9yZXN0b3JlO1xcbi1cXHRpZiAoIShtYXAubV9mbGFncyBcXHUwMDI2IEVYVDRfTUFQX01BUFBFRCkpIHtcXG4tXFx0XFx0ZXJyb3IgPSAtRUlPO1xcbi1cXHRcXHRnb3RvIG91dF9yZXN0b3JlO1xcbi1cXHR9XFxuLVxcbi1cXHRkYXRhX2JoID0gc2JfZ2V0YmxrKGlub2RlLVxcdTAwM2VpX3NiLCBtYXAubV9wYmxrKTtcXG4tXFx0aWYgKCFkYXRhX2JoKSB7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRhbGxvY2F0ZWRfYmxvY2sgPSBFWFQ0X0MyQihzYmksIGFyLmxlbik7XFxuK1xcdGJoID0gc2JfZ2V0YmxrKGlub2RlLVxcdTAwM2VpX3NiLCBuZXdibG9jayk7XFxuK1xcdGlmICghYmgpIHtcXG4gXFx0XFx0ZXJyb3IgPSAtRU5PTUVNO1xcbi1cXHRcXHRnb3RvIG91dF9yZXN0b3JlO1xcbitcXHRcXHRnb3RvIG91dF9iaDtcXG4gXFx0fVxcbiBcXG4tXFx0bG9ja19idWZmZXIoZGF0YV9iaCk7XFxuLVxcdGVycm9yID0gZXh0NF9qb3VybmFsX2dldF9jcmVhdGVfYWNjZXNzKGhhbmRsZSwgaW5vZGUtXFx1MDAzZWlfc2IsIGRhdGFfYmgsXFxuK1xcdGxvY2tfYnVmZmVyKGJoKTtcXG4rXFx0ZXJyb3IgPSBleHQ0X2pvdXJuYWxfZ2V0X2NyZWF0ZV9hY2Nlc3MoaGFuZGxlLCBpbm9kZS1cXHUwMDNlaV9zYiwgYmgsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBFWFQ0X0pUUl9OT05FKTtcXG4gXFx0aWYgKGVycm9yKSB7XFxuLVxcdFxcdHVubG9ja19idWZmZXIoZGF0YV9iaCk7XFxuK1xcdFxcdHVubG9ja19idWZmZXIoYmgpO1xcbiBcXHRcXHRlcnJvciA9IC1FSU87XFxuLVxcdFxcdGdvdG8gb3V0X3Jlc3RvcmU7XFxuK1xcdFxcdGdvdG8gb3V0X2JoO1xcbiBcXHR9XFxuLVxcdG1lbXNldChkYXRhX2JoLVxcdTAwM2ViX2RhdGEsIDAsIGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSk7XFxuK1xcdG1lbXNldChiaC1cXHUwMDNlYl9kYXRhLCAwLCBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemUpO1xcbiBcXG4gXFx0aWYgKCFTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuLVxcdFxcdG1lbWNweShkYXRhX2JoLVxcdTAwM2ViX2RhdGEsIGJ1ZiwgaW5saW5lX3NpemUpO1xcbi1cXHRcXHRzZXRfYnVmZmVyX3VwdG9kYXRlKGRhdGFfYmgpO1xcbi1cXHRcXHR1bmxvY2tfYnVmZmVyKGRhdGFfYmgpO1xcbitcXHRcXHRtZW1jcHkoYmgtXFx1MDAzZWJfZGF0YSwgYnVmLCBpbmxpbmVfc2l6ZSk7XFxuK1xcdFxcdHNldF9idWZmZXJfdXB0b2RhdGUoYmgpO1xcbitcXHRcXHR1bmxvY2tfYnVmZmVyKGJoKTtcXG4gXFx0XFx0ZXJyb3IgPSBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgIGlub2RlLCBkYXRhX2JoKTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgaW5vZGUsIGJoKTtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0dW5sb2NrX2J1ZmZlcihkYXRhX2JoKTtcXG4tXFx0XFx0aW5vZGUtXFx1MDAzZWlfc2l6ZSA9IGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZTtcXG4tXFx0XFx0aV9zaXplX3dyaXRlKGlub2RlLCBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemUpO1xcbi1cXHRcXHRFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2Rpc2tzaXplID0gaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmxvY2tzaXplO1xcbi1cXG4tXFx0XFx0ZXJyb3IgPSBleHQ0X2luaXRfZGlyYmxvY2soaGFuZGxlLCBpbm9kZSwgZGF0YV9iaCxcXG4rXFx0XFx0dW5sb2NrX2J1ZmZlcihiaCk7XFxuK1xcdFxcdGVycm9yID0gZXh0NF9pbml0X2RpcmJsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLFxcbiBcXHRcXHRcXHQgIGxlMzJfdG9fY3B1KCgoc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKilidWYpLVxcdTAwM2Vpbm9kZSksXFxuIFxcdFxcdFxcdCAgYnVmICsgRVhUNF9JTkxJTkVfRE9URE9UX1NJWkUsXFxuIFxcdFxcdFxcdCAgaW5saW5lX3NpemUgLSBFWFQ0X0lOTElORV9ET1RET1RfU0laRSk7XFxuLVxcdFxcdGlmICghZXJyb3IpXFxuLVxcdFxcdFxcdGVycm9yID0gZXh0NF9tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgaW5vZGUpO1xcbiBcXHR9XFxuK291dF9iaDpcXG4rXFx0aWYgKGVycm9yKSB7XFxuK1xcdFxcdGlmIChiaClcXG4rXFx0XFx0XFx0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIG5ld2Jsb2NrKTtcXG4rXFx0XFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpO1xcbiBcXG4tb3V0X3Jlc3RvcmU6XFxuLVxcdGlmIChlcnJvcilcXG4tXFx0XFx0ZXh0NF9yZXN0b3JlX2lubGluZV9kYXRhKGhhbmRsZSwgaW5vZGUsIGlsb2MsIGJ1ZiwgaW5saW5lX3NpemUpO1xcbi1cXG4rXFx0XFx0ZG93bl93cml0ZShcXHUwMDI2ZWktXFx1MDAzZWlfZGF0YV9zZW0pO1xcbitcXHRcXHRleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpO1xcbitcXHRcXHRleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIG5ld2Jsb2NrLCBhbGxvY2F0ZWRfYmxvY2ssIDApO1xcbitcXHRcXHR1cF93cml0ZShcXHUwMDI2ZWktXFx1MDAzZWlfZGF0YV9zZW0pO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRlcnJvciA9IGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrKGhhbmRsZSwgaW5vZGUsXFxuK1xcdFxcdFxcdFxcdG5ld2Jsb2NrLCBhbGxvY2F0ZWRfYmxvY2ssIGJoKTtcXG4rXFx0fVxcbiBvdXQ6XFxuLVxcdGJyZWxzZShkYXRhX2JoKTtcXG4gXFx0a2ZyZWUoYnVmKTtcXG4gXFx0cmV0dXJuIGVycm9yO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjUzOjA0LjIwNDg0ODQ5OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjM1MjgzNTk4MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfY29udmVydF9pbmxpbmVfZGF0YVwiLFxuICAgIFwiZXh0NF90cnlfYWRkX2lubGluZV9lbnRyeVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGV4dDQgaW5saW5lIGRhdGEgY29udmVyc2lvbiBsb2dpYyBpbiBmcy9leHQ0L2lubGluZS5jLCByZXBsYWNpbmcgdGhlIGlubGluZSBkYXRhIHJlc3RvcmF0aW9uIGZsb3cgd2l0aCBhIG5ldyBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9jayBmdW5jdGlvbiBhbmQgcmVmYWN0b3JpbmcgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jay4gVGhlc2UgY2hhbmdlcyBhbHRlciBob3cgZXh0NCBjb252ZXJ0cyBpbmxpbmUgZGlyZWN0b3J5L2ZpbGUgZGF0YSBpbnRvIGV4dGVudC9ibG9jayBhbGxvY2F0aW9ucyBhbmQgYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzlmZmYzMjQ4ZmE3Y2Q3Y2JmMmQ0NGE2Y2M1NDQ0ZWJmMTc3ZDgzNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDAyOjUzOjAzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbmxpbmUuYyBiL2ZzL2V4dDQvaW5saW5lLmNcbmluZGV4IDgwNDVlNGZmMjcwYzcuLjkzOWM2YmYyMGI1YjcgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2lubGluZS5jXG4rKysgYi9mcy9leHQ0L2lubGluZS5jXG5AQCAtMTQsNiArMTQsNyBAQFxuICNpbmNsdWRlIFwiZXh0NC5oXCJcbiAjaW5jbHVkZSBcInhhdHRyLmhcIlxuICNpbmNsdWRlIFwidHJ1bmNhdGUuaFwiXG4rI2luY2x1ZGUgXCJleHQ0X2V4dGVudHMuaFwiXG4gXG4gI2RlZmluZSBFWFQ0X1hBVFRSX1NZU1RFTV9EQVRBXHRcImRhdGFcIlxuICNkZWZpbmUgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRVx0KChzaXplb2YoX19sZTMyKSAqIEVYVDRfTl9CTE9DS1MpKVxuQEAgLTEwNzAsMjEgKzEwNzEsMTI1IEBAIHN0YXRpYyBpbnQgZXh0NF91cGRhdGVfaW5saW5lX2RpcihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBleHQ0X3Jlc3RvcmVfaW5saW5lX2RhdGEoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi1cdFx0XHRcdCAgICAgc3RydWN0IGV4dDRfaWxvYyAqaWxvYyxcbi1cdFx0XHRcdCAgICAgdm9pZCAqYnVmLCBpbnQgaW5saW5lX3NpemUpXG4rc3RhdGljIGludCBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2ZzYmxrX3QgYmxvY2ssXG4rXHRcdFx0XHRcdHVuc2lnbmVkIGludCBsZW4sIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXG4ge1xuLVx0aW50IHJldDtcbitcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gRVhUNF9JKGlub2RlKTtcbitcdHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQgaXMgPSB7XG4rXHRcdC5zID0geyAubm90X2ZvdW5kID0gMCwgfSxcbitcdH07XG4rXHRzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvIGkgPSB7XG4rXHRcdC5uYW1lX2luZGV4ID0gRVhUNF9YQVRUUl9JTkRFWF9TWVNURU0sXG4rXHRcdC5uYW1lID0gRVhUNF9YQVRUUl9TWVNURU1fREFUQSxcbitcdFx0LnZhbHVlID0gTlVMTCxcbitcdFx0LnZhbHVlX2xlbiA9IDAsXG4rXHR9O1xuK1x0aW50IGVycm9yO1xuK1x0dm9pZCAqaV9ibG9ja19idWYgPSBOVUxMO1xuK1x0dm9pZCAqeGF0dHJfYnVmID0gTlVMTDtcbitcdHZvaWQgKmhlYWRlciA9IE5VTEw7XG4rXHR2b2lkICp0YWlsID0gTlVMTDtcbitcdGludCB4YXR0cl9zaXplO1xuK1x0c3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZTtcbiBcbi1cdHJldCA9IGV4dDRfY3JlYXRlX2lubGluZV9kYXRhKGhhbmRsZSwgaW5vZGUsIGlubGluZV9zaXplKTtcbi1cdGlmIChyZXQpIHtcbi1cdFx0ZXh0NF9tc2coaW5vZGUtXHUwMDNlaV9zYiwgS0VSTl9FTUVSRyxcbi1cdFx0XHRcImVycm9yIHJlc3RvcmluZyBpbmxpbmVfZGF0YSBmb3IgaW5vZGUgLS0gcG90ZW50aWFsIGRhdGEgbG9zcyEgKGlub2RlICVsbHUsIGVycm9yICVkKVwiLFxuLVx0XHRcdGlub2RlLVx1MDAzZWlfaW5vLCByZXQpO1xuLVx0XHRyZXR1cm47XG4rXHRpX2Jsb2NrX2J1ZiA9IGttYWxsb2MoRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSwgR0ZQX05PRlMpO1xuK1x0aWYgKCFpX2Jsb2NrX2J1Zikge1xuK1x0XHRlcnJvciA9IC1FTk9NRU07XG4rXHRcdGRvd25fd3JpdGUoXHUwMDI2ZWktXHUwMDNlaV9kYXRhX3NlbSk7XG4rXHRcdGdvdG8gZXJyb3I7XG4gXHR9XG4tXHRleHQ0X3dyaXRlX2lubGluZV9kYXRhKGlub2RlLCBpbG9jLCBidWYsIDAsIGlubGluZV9zaXplKTtcbi1cdGV4dDRfc2V0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XG4rXHRkb3duX3dyaXRlKFx1MDAyNmVpLVx1MDAzZWlfZGF0YV9zZW0pO1xuK1x0ZXJyb3IgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFx1MDAyNmlzLmlsb2MpO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRnb3RvIGVycm9yO1xuK1x0cmF3X2lub2RlID0gZXh0NF9yYXdfaW5vZGUoXHUwMDI2aXMuaWxvYyk7XG4rXHRoZWFkZXIgPSBJSERSKGlub2RlLCByYXdfaW5vZGUpO1xuK1x0dGFpbCA9IElUQUlMKGlub2RlLCByYXdfaW5vZGUpO1xuK1x0eGF0dHJfc2l6ZSA9IHRhaWwgLSBoZWFkZXI7XG4rXHR4YXR0cl9idWYgPSBrbWFsbG9jKHhhdHRyX3NpemUsIEdGUF9OT0ZTKTtcbitcdGlmICgheGF0dHJfYnVmKSB7XG4rXHRcdGVycm9yID0gLUVOT01FTTtcbitcdFx0Z290byBlcnJvcjtcbitcdH1cbitcdEJVRkZFUl9UUkFDRShpcy5pbG9jLmJoLCBcImdldF93cml0ZV9hY2Nlc3NcIik7XG4rXHRlcnJvciA9IGV4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgaW5vZGUtXHUwMDNlaV9zYiwgaXMuaWxvYy5iaCwgRVhUNF9KVFJfTk9ORSk7XG4rXHRpZiAoZXJyb3IpIHtcbitcdFx0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIGJsb2NrKTtcbitcdFx0ZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTtcbitcdFx0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBOVUxMLCBibG9jaywgbGVuLCAwKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXHRtZW1jcHkoaV9ibG9ja19idWYsICh2b2lkICopcmF3X2lub2RlLVx1MDAzZWlfYmxvY2ssIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuK1x0bWVtc2V0KCh2b2lkICopcmF3X2lub2RlLVx1MDAzZWlfYmxvY2ssIDAsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuK1x0bWVtc2V0KGVpLVx1MDAzZWlfZGF0YSwgMCwgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XG4rXHRtZW1jcHkoeGF0dHJfYnVmLCBoZWFkZXIsIHhhdHRyX3NpemUpO1xuK1x0aWYgKGV4dDRfaGFzX2ZlYXR1cmVfZXh0ZW50cyhpbm9kZS1cdTAwM2VpX3NiKSBcdTAwMjZcdTAwMjZcbitcdFx0KFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSB8fCBTX0lTUkVHKGlub2RlLVx1MDAzZWlfbW9kZSkgfHwgU19JU0xOSyhpbm9kZS1cdTAwM2VpX21vZGUpKSkge1xuK1x0XHRleHQ0X3NldF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpO1xuK1x0XHRleHQ0X2V4dF90cmVlX2luaXQoaGFuZGxlLCBpbm9kZSk7XG4rXHRcdHN0cnVjdCBleHQ0X2V4dF9wYXRoICpwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgMCwgTlVMTCwgMCk7XG4rXG4rXHRcdGlmIChJU19FUlIocGF0aCkpIHtcbitcdFx0XHRlcnJvciA9IFBUUl9FUlIocGF0aCk7XG4rXHRcdFx0Z290byByZWNvdmVyeTtcbitcdFx0fVxuK1x0XHRzdHJ1Y3QgZXh0NF9leHRlbnQgbmV3ZXg7XG4rXG4rXHRcdG5ld2V4LmVlX2Jsb2NrID0gY3B1X3RvX2xlMzIoMCk7XG4rXHRcdG5ld2V4LmVlX2xlbiA9IGNwdV90b19sZTE2KDEpO1xuK1x0XHRleHQ0X2V4dF9zdG9yZV9wYmxvY2soXHUwMDI2bmV3ZXgsIGJsb2NrKTtcbitcdFx0cGF0aCA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgXHUwMDI2bmV3ZXgsIDApO1xuK1x0XHRpZiAoSVNfRVJSKHBhdGgpKSB7XG4rXHRcdFx0ZXJyb3IgPSBQVFJfRVJSKHBhdGgpO1xuK1x0XHRcdGlmIChlcnJvciA9PSAtRURRVU9UIHx8IGVycm9yID09IC1FTk9TUEMpXG4rXHRcdFx0XHRnb3RvIHJlY292ZXJ5O1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGV4dDRfZnJlZV9leHRfcGF0aChwYXRoKTtcbitcdFx0fVxuK1x0fSBlbHNlIHtcbitcdFx0RVhUNF9JKGlub2RlKS1cdTAwM2VpX2RhdGFbMF0gPSBjcHVfdG9fbGUzMihibG9jayk7XG4rXHR9XG4rXHRlcnJvciA9IGV4dDRfeGF0dHJfaWJvZHlfZmluZChpbm9kZSwgXHUwMDI2aSwgXHUwMDI2aXMpO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRnb3RvIHJlY292ZXJ5O1xuK1x0aWYgKCFpcy5zLm5vdF9mb3VuZClcbitcdFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGUsIGlub2RlLCBcdTAwMjZpLCBcdTAwMjZpcyk7XG4rcmVjb3Zlcnk6XG4rXHRpZiAoZXJyb3IpIHtcbitcdFx0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIGJsb2NrKTtcbitcdFx0ZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTtcbitcdFx0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBOVUxMLCBibG9jaywgbGVuLCAwKTtcbitcdFx0bWVtY3B5KCh2b2lkICopcmF3X2lub2RlLVx1MDAzZWlfYmxvY2ssIGlfYmxvY2tfYnVmLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcbitcdFx0bWVtY3B5KGVpLVx1MDAzZWlfZGF0YSwgcmF3X2lub2RlLVx1MDAzZWlfYmxvY2ssIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuK1x0XHRtZW1jcHkoaGVhZGVyLCB4YXR0cl9idWYsIHhhdHRyX3NpemUpO1xuK1x0XHRleHQ0X2NsZWFyX2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUyk7XG4rXHR9IGVsc2Uge1xuK1x0XHRleHQ0X2NsZWFyX2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpO1xuK1x0XHRpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4rXHRcdFx0aV9zaXplX3dyaXRlKGlub2RlLCBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplKTtcbitcdFx0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZGlza3NpemUgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplO1xuK1x0XHR9XG4rXHRcdGdldF9iaChpcy5pbG9jLmJoKTtcbitcdFx0ZXJyb3IgPSBleHQ0X21hcmtfaWxvY19kaXJ0eShoYW5kbGUsIGlub2RlLCBcdTAwMjZpcy5pbG9jKTtcbitcdFx0RVhUNF9JKGlub2RlKS1cdTAwM2VpX2lubGluZV9vZmYgPSAwO1xuK1x0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfaW5saW5lX3NpemUgPSAwO1xuK1x0XHRleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XG4rXHRcdGJyZWxzZShiaCk7XG4rXHR9XG4rb3V0OlxuK1x0YnJlbHNlKGlzLmlsb2MuYmgpO1xuK1x0dXBfd3JpdGUoXHUwMDI2ZWktXHUwMDNlaV9kYXRhX3NlbSk7XG4rXHRrZnJlZShpX2Jsb2NrX2J1Zik7XG4rXHRrZnJlZSh4YXR0cl9idWYpO1xuK1x0cmV0dXJuIGVycm9yO1xuK2Vycm9yOlxuK1x0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIGJsb2NrKTtcbitcdGV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7XG4rXHRleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIGJsb2NrLCBsZW4sIDApO1xuK1x0dXBfd3JpdGUoXHUwMDI2ZWktXHUwMDNlaV9kYXRhX3NlbSk7XG4rXHRrZnJlZShpX2Jsb2NrX2J1Zik7XG4rXHRrZnJlZSh4YXR0cl9idWYpO1xuK1x0cmV0dXJuIGVycm9yO1xuIH1cbiBcbiBzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSxcbkBAIC0xMDkzLDkgKzExOTgsMTIgQEAgc3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXG4ge1xuIFx0aW50IGVycm9yO1xuIFx0dm9pZCAqYnVmID0gTlVMTDtcbi1cdHN0cnVjdCBidWZmZXJfaGVhZCAqZGF0YV9iaCA9IE5VTEw7XG4tXHRzdHJ1Y3QgZXh0NF9tYXBfYmxvY2tzIG1hcDtcbitcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMO1xuIFx0aW50IGlubGluZV9zaXplO1xuK1x0ZXh0NF9mc2Jsa190IG5ld2Jsb2NrID0gMDtcbitcdHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fcmVxdWVzdCBhcjtcbitcdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4rXHR1bnNpZ25lZCBpbnQgYWxsb2NhdGVkX2Jsb2NrO1xuIFxuIFx0aW5saW5lX3NpemUgPSBleHQ0X2dldF9pbmxpbmVfc2l6ZShpbm9kZSk7XG4gXHRidWYgPSBrbWFsbG9jKGlubGluZV9zaXplLCBHRlBfTk9GUyk7XG5AQCAtMTEyMCw2MyArMTIyOCw2MiBAQCBzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSxcbiBcdFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdGVycm9yID0gZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGUsIGlub2RlKTtcbi1cdGlmIChlcnJvcilcbi1cdFx0Z290byBvdXQ7XG4tXG4tXHRtYXAubV9sYmxrID0gMDtcbi1cdG1hcC5tX2xlbiA9IDE7XG4tXHRtYXAubV9mbGFncyA9IDA7XG4tXHRlcnJvciA9IGV4dDRfbWFwX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBcdTAwMjZtYXAsIEVYVDRfR0VUX0JMT0NLU19DUkVBVEUpO1xuK1x0bWVtc2V0KFx1MDAyNmFyLCAwLCBzaXplb2YoYXIpKTtcbitcdGFyLmlub2RlID0gaW5vZGU7XG4rXHRhci5sb2dpY2FsID0gMDtcbitcdGFyLmxlbiA9IDE7XG4rXHRpZiAoU19JU1JFRyhpbm9kZS1cdTAwM2VpX21vZGUpKVxuK1x0XHRhci5mbGFncyA9IEVYVDRfTUJfSElOVF9EQVRBO1xuK1x0ZWxzZVxuK1x0XHRhci5mbGFncyA9IDA7XG4rXHRuZXdibG9jayA9IGV4dDRfbWJfbmV3X2Jsb2NrcyhoYW5kbGUsIFx1MDAyNmFyLCBcdTAwMjZlcnJvcik7XG4gXHRpZiAoZXJyb3IgXHUwMDNjIDApXG4tXHRcdGdvdG8gb3V0X3Jlc3RvcmU7XG4tXHRpZiAoIShtYXAubV9mbGFncyBcdTAwMjYgRVhUNF9NQVBfTUFQUEVEKSkge1xuLVx0XHRlcnJvciA9IC1FSU87XG4tXHRcdGdvdG8gb3V0X3Jlc3RvcmU7XG4tXHR9XG4tXG4tXHRkYXRhX2JoID0gc2JfZ2V0YmxrKGlub2RlLVx1MDAzZWlfc2IsIG1hcC5tX3BibGspO1xuLVx0aWYgKCFkYXRhX2JoKSB7XG4rXHRcdGdvdG8gb3V0O1xuK1x0YWxsb2NhdGVkX2Jsb2NrID0gRVhUNF9DMkIoc2JpLCBhci5sZW4pO1xuK1x0YmggPSBzYl9nZXRibGsoaW5vZGUtXHUwMDNlaV9zYiwgbmV3YmxvY2spO1xuK1x0aWYgKCFiaCkge1xuIFx0XHRlcnJvciA9IC1FTk9NRU07XG4tXHRcdGdvdG8gb3V0X3Jlc3RvcmU7XG4rXHRcdGdvdG8gb3V0X2JoO1xuIFx0fVxuIFxuLVx0bG9ja19idWZmZXIoZGF0YV9iaCk7XG4tXHRlcnJvciA9IGV4dDRfam91cm5hbF9nZXRfY3JlYXRlX2FjY2VzcyhoYW5kbGUsIGlub2RlLVx1MDAzZWlfc2IsIGRhdGFfYmgsXG4rXHRsb2NrX2J1ZmZlcihiaCk7XG4rXHRlcnJvciA9IGV4dDRfam91cm5hbF9nZXRfY3JlYXRlX2FjY2VzcyhoYW5kbGUsIGlub2RlLVx1MDAzZWlfc2IsIGJoLFxuIFx0XHRcdFx0XHQgICAgICAgRVhUNF9KVFJfTk9ORSk7XG4gXHRpZiAoZXJyb3IpIHtcbi1cdFx0dW5sb2NrX2J1ZmZlcihkYXRhX2JoKTtcbitcdFx0dW5sb2NrX2J1ZmZlcihiaCk7XG4gXHRcdGVycm9yID0gLUVJTztcbi1cdFx0Z290byBvdXRfcmVzdG9yZTtcbitcdFx0Z290byBvdXRfYmg7XG4gXHR9XG4tXHRtZW1zZXQoZGF0YV9iaC1cdTAwM2ViX2RhdGEsIDAsIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUpO1xuK1x0bWVtc2V0KGJoLVx1MDAzZWJfZGF0YSwgMCwgaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZSk7XG4gXG4gXHRpZiAoIVNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuLVx0XHRtZW1jcHkoZGF0YV9iaC1cdTAwM2ViX2RhdGEsIGJ1ZiwgaW5saW5lX3NpemUpO1xuLVx0XHRzZXRfYnVmZmVyX3VwdG9kYXRlKGRhdGFfYmgpO1xuLVx0XHR1bmxvY2tfYnVmZmVyKGRhdGFfYmgpO1xuK1x0XHRtZW1jcHkoYmgtXHUwMDNlYl9kYXRhLCBidWYsIGlubGluZV9zaXplKTtcbitcdFx0c2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7XG4rXHRcdHVubG9ja19idWZmZXIoYmgpO1xuIFx0XHRlcnJvciA9IGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSxcbi1cdFx0XHRcdFx0XHQgICBpbm9kZSwgZGF0YV9iaCk7XG4rXHRcdFx0XHRcdFx0ICAgaW5vZGUsIGJoKTtcbiBcdH0gZWxzZSB7XG4tXHRcdHVubG9ja19idWZmZXIoZGF0YV9iaCk7XG4tXHRcdGlub2RlLVx1MDAzZWlfc2l6ZSA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemU7XG4tXHRcdGlfc2l6ZV93cml0ZShpbm9kZSwgaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZSk7XG4tXHRcdEVYVDRfSShpbm9kZSktXHUwMDNlaV9kaXNrc2l6ZSA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemU7XG4tXG4tXHRcdGVycm9yID0gZXh0NF9pbml0X2RpcmJsb2NrKGhhbmRsZSwgaW5vZGUsIGRhdGFfYmgsXG4rXHRcdHVubG9ja19idWZmZXIoYmgpO1xuK1x0XHRlcnJvciA9IGV4dDRfaW5pdF9kaXJibG9jayhoYW5kbGUsIGlub2RlLCBiaCxcbiBcdFx0XHQgIGxlMzJfdG9fY3B1KCgoc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKilidWYpLVx1MDAzZWlub2RlKSxcbiBcdFx0XHQgIGJ1ZiArIEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFLFxuIFx0XHRcdCAgaW5saW5lX3NpemUgLSBFWFQ0X0lOTElORV9ET1RET1RfU0laRSk7XG4tXHRcdGlmICghZXJyb3IpXG4tXHRcdFx0ZXJyb3IgPSBleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7XG4gXHR9XG4rb3V0X2JoOlxuK1x0aWYgKGVycm9yKSB7XG4rXHRcdGlmIChiaClcbitcdFx0XHRleHQ0X2ZvcmdldChoYW5kbGUsIDAsIGlub2RlLCBiaCwgbmV3YmxvY2spO1xuK1x0XHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7XG4gXG4tb3V0X3Jlc3RvcmU6XG4tXHRpZiAoZXJyb3IpXG4tXHRcdGV4dDRfcmVzdG9yZV9pbmxpbmVfZGF0YShoYW5kbGUsIGlub2RlLCBpbG9jLCBidWYsIGlubGluZV9zaXplKTtcbi1cbitcdFx0ZG93bl93cml0ZShcdTAwMjZlaS1cdTAwM2VpX2RhdGFfc2VtKTtcbitcdFx0ZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTtcbitcdFx0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBOVUxMLCBuZXdibG9jaywgYWxsb2NhdGVkX2Jsb2NrLCAwKTtcbitcdFx0dXBfd3JpdGUoXHUwMDI2ZWktXHUwMDNlaV9kYXRhX3NlbSk7XG4rXHR9IGVsc2Uge1xuK1x0XHRlcnJvciA9IGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrKGhhbmRsZSwgaW5vZGUsXG4rXHRcdFx0XHRuZXdibG9jaywgYWxsb2NhdGVkX2Jsb2NrLCBiaCk7XG4rXHR9XG4gb3V0OlxuLVx0YnJlbHNlKGRhdGFfYmgpO1xuIFx0a2ZyZWUoYnVmKTtcbiBcdHJldHVybiBlcnJvcjtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjo1MzowNC4yMDQ4NDk2NTlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzg2MTEwNjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgZXh0NCBJbmxpbmUgRGF0YSBDb252ZXJzaW9uIFBhdGNoKipcblxuT2theSwgc28gdGhlIHBhdGNoIGlzIHJpZ2h0IGluIGBmcy9leHQ0L2lubGluZS5jYC4gTGV0J3MgZGlnIGluLiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIHRocnVzdCBpcyByZXdyaXRpbmcgcGFydHMgb2YgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2tgLiBUaGV5J3JlIGFsc28gcmVwbGFjaW5nIGBleHQ0X3Jlc3RvcmVfaW5saW5lX2RhdGFgIHdpdGggYGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrYC4gVGhpcyBpbnN0YW50bHkgc2NyZWFtcyBcImlubGluZSBkYXRhIGNvbnZlcnNpb24gaW4gZXh0NC5cIiBXZSdyZSB0YWxraW5nIGNvcmUgZmlsZXN5c3RlbSBsb2dpYyBoZXJlLCB0aGUgc3R1ZmYgdGhhdCBraWNrcyBpbiB3aGVuIGEgZmlsZSdzIGlubGluZSBkYXRhIG5lZWRzIHRvIGJlIHNoaWZ0ZWQgdG8gYSBtb3JlIHRyYWRpdGlvbmFsIGV4dGVudC9ibG9jay1iYXNlZCByZXByZXNlbnRhdGlvbiBiZWNhdXNlIGl0J3MgZ3Jvd24gdG9vIGxhcmdlIG9yIHNvbWUgb3RoZXIgY29uZGl0aW9uIHRyaWdnZXJzIHRoZSBjaGFuZ2UuXG5cbk15IG5leHQgc3RlcCwgYW5kIHRoaXMgaXMgY3J1Y2lhbCwgaXMgdG8gY2hlY2sgdGhlIGNhbGxlcnMgb2YgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2tgLCBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhYCwgYW5kIGVzc2VudGlhbGx5IGFueSBmdW5jdGlvbiBkZWFsaW5nIHdpdGggaW5saW5lIGRhdGEgaW4gZXh0NC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBjaGFuZ2UgaXMgaGFwcGVuaW5nIGFuZCB0aGUgaW1wYWN0IGl0IGNvdWxkIGhhdmUuIEkgd2FudCB0byBzZWUgdGhpcyB3aXRoaW4gdGhlIGxhcmdlciBwaWN0dXJlIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIGhvdyBpdCBhZmZlY3RzIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MDMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjo1MzowNy45OTA5NjI3NjVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5MzUyODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9jcnlwdG8uYz0xMzI9c3RhdGljIGludCBleHQ0X3NldF9jb250ZXh0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHZvaWQgKmN0eCwgc2l6ZV90IGxlbixcXG4tLVxcbmZzL2V4dDQvY3J5cHRvLmMtMTUyLVxcbmZzL2V4dDQvY3J5cHRvLmM6MTUzOlxcdHJlcyA9IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YShpbm9kZSk7XFxuZnMvZXh0NC9jcnlwdG8uYy0xNTQtXFx0aWYgKHJlcylcXG4tLVxcbmZzL2V4dDQvZXh0NC5oPTM3ODQ9ZXh0ZXJuIGludCBleHQ0X2lubGluZV9kYXRhX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCAqaGFzX2lubGluZSk7XFxuZnMvZXh0NC9leHQ0LmgtMzc4NS1cXG5mcy9leHQ0L2V4dDQuaDozNzg2OmV4dGVybiBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbmZzL2V4dDQvZXh0NC5oLTM3ODctXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz00ODU0PWxvbmcgZXh0NF9mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNDg4My1cXHRpbm9kZV9sb2NrKGlub2RlKTtcXG5mcy9leHQ0L2V4dGVudHMuYzo0ODg0OlxcdHJldCA9IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YShpbm9kZSk7XFxuZnMvZXh0NC9leHRlbnRzLmMtNDg4NS1cXHRpZiAocmV0KVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYz01NDY9aW50IGV4dDRfcmVhZHBhZ2VfaW5saW5lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTU3Mi1cXG5mcy9leHQ0L2lubGluZS5jOjU3MzpzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV90b19leHRlbnQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuZnMvZXh0NC9pbmxpbmUuYy01NzQtXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9Njk3PWludCBleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTcyOC1cXHRcXHRcXHQvKiBSZXRyeSBpbnNpZGUgKi9cXG5mcy9leHQ0L2lubGluZS5jOjcyOTpcXHRcXHRcXHRyZXR1cm4gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudChtYXBwaW5nLCBpbm9kZSk7XFxuZnMvZXh0NC9pbmxpbmUuYy03MzAtXFx0XFx0fVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYz03ODQ9aW50IGV4dDRfdHJ5X3RvX3dyaXRlX2lubGluZV9kYXRhKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy03ODktXFx0aWYgKHBvcyArIGxlbiBcXHUwMDNlIGV4dDRfZ2V0X21heF9pbmxpbmVfc2l6ZShpbm9kZSkpXFxuZnMvZXh0NC9pbmxpbmUuYzo3OTA6XFx0XFx0cmV0dXJuIGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV90b19leHRlbnQobWFwcGluZywgaW5vZGUpO1xcbmZzL2V4dDQvaW5saW5lLmMtNzkxLVxcdHJldHVybiBleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGEobWFwcGluZywgaW5vZGUsIHBvcywgbGVuLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYz0xMDc0PXN0YXRpYyBpbnQgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9mc2Jsa190IGJsb2NrLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xMTk0LVxcbmZzL2V4dDQvaW5saW5lLmM6MTE5NTpzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSxcXG5mcy9leHQ0L2lubGluZS5jLTExOTYtXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9MTI5Nj1pbnQgZXh0NF90cnlfYWRkX2lubGluZV9lbnRyeShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgZXh0NF9maWxlbmFtZSAqZm5hbWUsXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTEzNDgtXFx0ICovXFxuZnMvZXh0NC9pbmxpbmUuYzoxMzQ5OlxcdHJldCA9IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlLCBkaXIsIFxcdTAwMjZpbG9jKTtcXG5mcy9leHQ0L2lubGluZS5jLTEzNTAtXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTE5NTE9aW50IGV4dDRfaW5saW5lX2RhdGFfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50ICpoYXNfaW5saW5lKVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0yMDYyLVxcbmZzL2V4dDQvaW5saW5lLmM6MjA2MzppbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvZXh0NC9pbmxpbmUuYy0yMDY0LXtcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMjEwMC1cXHRpZiAoZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKVxcbmZzL2V4dDQvaW5saW5lLmM6MjEwMTpcXHRcXHRlcnJvciA9IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlLCBpbm9kZSwgXFx1MDAyNmlsb2MpO1xcbmZzL2V4dDQvaW5saW5lLmMtMjEwMi1cXHRleHQ0X3dyaXRlX3VubG9ja194YXR0cihpbm9kZSwgXFx1MDAyNm5vX2V4cGFuZCk7XFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9NTkzND1pbnQgZXh0NF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNjAzMS1cXHRcXHQgICAgYXR0ci1cXHUwMDNlaWFfc2l6ZSBcXHUwMDNlIEVYVDRfSShpbm9kZSktXFx1MDAzZWlfaW5saW5lX3NpemUpIHtcXG5mcy9leHQ0L2lub2RlLmM6NjAzMjpcXHRcXHRcXHRlcnJvciA9IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YShpbm9kZSk7XFxuZnMvZXh0NC9pbm9kZS5jLTYwMzMtXFx0XFx0XFx0aWYgKGVycm9yKVxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTY3ODc9dm1fZmF1bHRfdCBleHQ0X3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy02ODA4LVxcbmZzL2V4dDQvaW5vZGUuYzo2ODA5OlxcdGVyciA9IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YShpbm9kZSk7XFxuZnMvZXh0NC9pbm9kZS5jLTY4MTAtXFx0aWYgKGVycilcXG4tLVxcbmZzL2V4dDQvdmVyaXR5LmM9MTAyPXN0YXRpYyBpbnQgZXh0NF9iZWdpbl9lbmFibGVfdmVyaXR5KHN0cnVjdCBmaWxlICpmaWxwKVxcbi0tXFxuZnMvZXh0NC92ZXJpdHkuYy0xMjgtXFxuZnMvZXh0NC92ZXJpdHkuYzoxMjk6XFx0ZXJyID0gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKGlub2RlKTtcXG5mcy9leHQ0L3Zlcml0eS5jLTEzMC1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjo1MzowOC4wMzY5MDMwMTJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzQ2MjAxMTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgZXh0NCBJbmxpbmUgRGF0YSBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIGxldCdzIGRpdmUgc3RyYWlnaHQgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgZm9yIGV4dDQgYW5kLCBzcGVjaWZpY2FsbHksIGhvdyBpdCBoYW5kbGVzIGlubGluZSBkYXRhLiBUaW1lIHRvIHB1bGwgdXAgYGZzL2V4dDQvS2NvbmZpZ2AuIEkga25vdyB0aGUgYmFzaWNzLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoZSBleGFjdCBkZXBlbmRlbmNpZXMgYW5kIGFueSBwb3RlbnRpYWxseSB0cmlja3kgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIGlubGluZSBkYXRhIHN1cHBvcnQgYW5kIG90aGVyIGV4dDQgZmVhdHVyZXMuIEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBjcml0aWNhbCwgcGFydGljdWxhcmx5IGFueSBzdWJ0bGUgaW50ZXJwbGF5IHdpdGggZmVhdHVyZXMgbGlrZSBxdW90YXMsIGVuY3J5cHRpb24sIG9yIGpvdXJuYWwgc2V0dGluZ3MuIEl04oCZcyBhbHdheXMgYmVzdCB0byBiZSB0aG9yb3VnaCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBjb3JlIGZpbGVzeXN0ZW0gY29tcG9uZW50cy4gVGhpcyBpcyBqdXN0IGEgcXVpY2sgY2hlY2sgdG8gZW5zdXJlIEkgaGF2ZSBhIGNvbXBsZXRlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczOTcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjo1MzoxMC43ODMxMDU5NjhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI0OTE3MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0VYVDRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0Ly5rdW5pdGNvbmZpZz0xPUNPTkZJR19LVU5JVD15XFxuZnMvZXh0NC8ua3VuaXRjb25maWc6MjpDT05GSUdfRVhUNF9GUz15XFxuZnMvZXh0NC8ua3VuaXRjb25maWc6MzpDT05GSUdfRVhUNF9LVU5JVF9URVNUUz15XFxuLS1cXG5mcy9leHQ0L01ha2VmaWxlLTUtXFxuZnMvZXh0NC9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19FWFQ0X0ZTKSArPSBleHQ0Lm9cXG5mcy9leHQ0L01ha2VmaWxlLTctXFxuZnMvZXh0NC9NYWtlZmlsZT04PWV4dDQteVxcdDo9IGJhbGxvYy5vIGJpdG1hcC5vIGJsb2NrX3ZhbGlkaXR5Lm8gZGlyLm8gZXh0NF9qYmQyLm8gZXh0ZW50cy5vIFxcXFxcXG4tLVxcbmZzL2V4dDQvTWFrZWZpbGUtMTQtXFxuZnMvZXh0NC9NYWtlZmlsZToxNTpleHQ0LSQoQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMKVxcdCs9IGFjbC5vXFxuZnMvZXh0NC9NYWtlZmlsZToxNjpleHQ0LSQoQ09ORklHX0VYVDRfRlNfU0VDVVJJVFkpXFx0XFx0Kz0geGF0dHJfc2VjdXJpdHkub1xcbmZzL2V4dDQvTWFrZWZpbGUtMTctZXh0NC10ZXN0LW9ianNcXHRcXHRcXHRcXHQrPSBpbm9kZS10ZXN0Lm8gbWJhbGxvYy10ZXN0Lm8gXFxcXFxcbmZzL2V4dDQvTWFrZWZpbGUtMTgtXFx0XFx0XFx0XFx0XFx0ICAgZXh0ZW50cy10ZXN0Lm8gaGFzaC10ZXN0Lm9cXG5mcy9leHQ0L01ha2VmaWxlOjE5Om9iai0kKENPTkZJR19FWFQ0X0tVTklUX1RFU1RTKVxcdFxcdCs9IGV4dDQtdGVzdC5vXFxuZnMvZXh0NC9NYWtlZmlsZS0yMC1leHQ0LSQoQ09ORklHX0ZTX1ZFUklUWSlcXHRcXHQrPSB2ZXJpdHkub1xcbi0tXFxuZnMvZXh0NC9hY2wuaD0zOT1zdGF0aWMgaW5saW5lIGludCBleHQ0X2FjbF9jb3VudChzaXplX3Qgc2l6ZSlcXG4tLVxcbmZzL2V4dDQvYWNsLmgtNTQtXFxuZnMvZXh0NC9hY2wuaDo1NTojaWZkZWYgQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMXFxuZnMvZXh0NC9hY2wuaC01Ni1cXG4tLVxcbmZzL2V4dDQvYWNsLmg9NjE9ZXh0ZXJuIGludCBleHQ0X2luaXRfYWNsKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5vZGUgKik7XFxuZnMvZXh0NC9hY2wuaC02Mi1cXG5mcy9leHQ0L2FjbC5oOjYzOiNlbHNlICAvKiBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0wgKi9cXG5mcy9leHQ0L2FjbC5oLTY0LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC5oXFx1MDAzZVxcbi0tXFxuZnMvZXh0NC9hY2wuaD02OT1leHQ0X2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyKVxcbi0tXFxuZnMvZXh0NC9hY2wuaC03Mi19XFxuZnMvZXh0NC9hY2wuaDo3MzojZW5kaWYgIC8qIENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTCAqL1xcbmZzL2V4dDQvYWNsLmgtNzQtXFxuLS1cXG5mcy9leHQ0L2V4dDQuaC05MS0gKi9cXG5mcy9leHQ0L2V4dDQuaDo5MjojaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcXG5mcy9leHQ0L2V4dDQuaC05My0jZGVmaW5lIGV4dF9kZWJ1Zyhpbm8sIGZtdCwgLi4uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmZzL2V4dDQvZXh0NC5oPTE1ODY9c3RydWN0IGV4dDRfc2JfaW5mbyB7XFxuLS1cXG5mcy9leHQ0L2V4dDQuaC0xNzk1LVxcdHU2NCBzX2RheF9wYXJ0X29mZjtcXG5mcy9leHQ0L2V4dDQuaDoxNzk2OiNpZmRlZiBDT05GSUdfRVhUNF9ERUJVR1xcbmZzL2V4dDQvZXh0NC5oLTE3OTctXFx0dW5zaWduZWQgbG9uZyBzX3NpbXVsYXRlX2ZhaWw7XFxuLS1cXG5mcy9leHQ0L2V4dDQuaC0xODU4LVxcdHRpZF90IHNfZmNfaW5lbGlnaWJsZV90aWQ7XFxuZnMvZXh0NC9leHQ0Lmg6MTg1OTojaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcXG5mcy9leHQ0L2V4dDQuaC0xODYwLVxcdGludCBzX2ZjX2RlYnVnX21heF9yZXBsYXk7XFxuLS1cXG5mcy9leHQ0L2V4dDQuaD0xOTgzPXN0YXRpYyBpbmxpbmUgYm9vbCBleHQ0X3NpbXVsYXRlX2ZhaWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTE5ODUte1xcbmZzL2V4dDQvZXh0NC5oOjE5ODY6I2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXFxuZnMvZXh0NC9leHQ0LmgtMTk4Ny1cXHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKHNiKTtcXG4tLVxcbmZzL2V4dDQvZXh0NC5oPTQwMzE9ZXh0ZXJuIGludCBleHQ0X2Jsb2NrX3dyaXRlX2JlZ2luKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5mcy9leHQ0L2V4dDQuaC00MDM0LVxcbmZzL2V4dDQvZXh0NC5oOjQwMzU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0VYVDRfS1VOSVRfVEVTVFMpXFxuZnMvZXh0NC9leHQ0LmgtNDAzNi0jZGVmaW5lIEVYUE9SVF9TWU1CT0xfRk9SX0VYVDRfVEVTVChzeW0pIFxcXFxcXG4tLVxcbmZzL2V4dDQvZXh0NF9leHRlbnRzLmg9MjcwPWV4dGVybiBpbnQgZXh0NF9leHRfemVyb291dChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF9leHRlbnQgKmV4KTtcXG5mcy9leHQ0L2V4dDRfZXh0ZW50cy5oOjI3MTojaWYgSVNfRU5BQkxFRChDT05GSUdfRVhUNF9LVU5JVF9URVNUUylcXG5mcy9leHQ0L2V4dDRfZXh0ZW50cy5oLTI3Mi1leHRlcm4gaW50IGV4dDRfZXh0X3NwYWNlX3Jvb3RfaWR4X3Rlc3Qoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGNoZWNrKTtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTYyMjc9aW50IGV4dDRfZXh0X2NsZWFyX2JiKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy02Mjc4LVxcbmZzL2V4dDQvZXh0ZW50cy5jOjYyNzk6I2lmIElTX0VOQUJMRUQoQ09ORklHX0VYVDRfS1VOSVRfVEVTVFMpXFxuZnMvZXh0NC9leHRlbnRzLmMtNjI4MC1pbnQgZXh0NF9leHRfc3BhY2Vfcm9vdF9pZHhfdGVzdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgY2hlY2spXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjU4MT1zdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5KGpvdXJuYWxfdCAqam91cm5hbCwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjA2LVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjA3OiNpZmRlZiBDT05GSUdfRVhUNF9ERUJVR1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjA4LVxcdGlmIChzYmktXFx1MDAzZXNfZmNfZGVidWdfbWF4X3JlcGxheSBcXHUwMDI2XFx1MDAyNiBvZmYgXFx1MDAzZT0gc2JpLVxcdTAwM2VzX2ZjX2RlYnVnX21heF9yZXBsYXkpIHtcXG4tLVxcbmZzL2V4dDQvaGFzaC5jPTMxND1pbnQgZXh0NGZzX2Rpcmhhc2goY29uc3Qgc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4sXFxuLS1cXG5mcy9leHQ0L2hhc2guYy0zNDQtXFxuZnMvZXh0NC9oYXNoLmM6MzQ1OiNpZiBJU19FTkFCTEVEKENPTkZJR19FWFQ0X0tVTklUX1RFU1RTKVxcbmZzL2V4dDQvaGFzaC5jLTM0Ni1FWFBPUlRfU1lNQk9MX0ZPUl9FWFQ0X1RFU1QoZXh0NGZzX2Rpcmhhc2gpO1xcbi0tXFxuZnMvZXh0NC9pYWxsb2MuYz04NzY9c3RhdGljIGludCBleHQ0X3hhdHRyX2NyZWRpdHNfZm9yX25ld19pbm9kZShzdHJ1Y3QgaW5vZGUgKmRpciwgbW9kZV90IG1vZGUsXFxuLS1cXG5mcy9leHQ0L2lhbGxvYy5jLTg4MC1cXHRpbnQgbmJsb2NrcyA9IDA7XFxuZnMvZXh0NC9pYWxsb2MuYzo4ODE6I2lmZGVmIENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTFxcbmZzL2V4dDQvaWFsbG9jLmMtODgyLVxcdHN0cnVjdCBwb3NpeF9hY2wgKnAgPSBnZXRfaW5vZGVfYWNsKGRpciwgQUNMX1RZUEVfREVGQVVMVCk7XFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9NDEyPWludCBleHQ0X2lzc3VlX3plcm9vdXQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgbGJsaywgZXh0NF9mc2Jsa190IHBibGssXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNDM2LSAqL1xcbmZzL2V4dDQvaW5vZGUuYzo0Mzc6I2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXFxuZnMvZXh0NC9pbm9kZS5jLTQzOC12b2lkIGV4dDRfY2hlY2tfbWFwX2V4dGVudHNfZW52KHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYz01NzI4PXN0YXRpYyB2b2lkIGV4dDRfbWJfcGFfcHV0X2ZyZWUoc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYylcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jLTU3NDMtXFxuZnMvZXh0NC9tYmFsbG9jLmM6NTc0NDojaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcXG5mcy9leHQ0L21iYWxsb2MuYy01NzQ1LXN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X21iX3Nob3dfcGEoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTcxMjk9ZXh0NF9tYmFsbG9jX3F1ZXJ5X3JhbmdlKFxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtNzE4NC1cXG5mcy9leHQ0L21iYWxsb2MuYzo3MTg1OiNpZiBJU19FTkFCTEVEKENPTkZJR19FWFQ0X0tVTklUX1RFU1RTKVxcbmZzL2V4dDQvbWJhbGxvYy5jLTcxODYtdm9pZCBtYl9jbGVhcl9iaXRzX3Rlc3Qodm9pZCAqYm0sIGludCBjdXIsIGludCBsZW4pXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuaC0yOC0gKi9cXG5mcy9leHQ0L21iYWxsb2MuaDoyOTojaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcXG5mcy9leHQ0L21iYWxsb2MuaC0zMC0jZGVmaW5lIG1iX2RlYnVnKHNiLCBmbXQsIC4uLilcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuaD0yNzM9ZXh0ZXJuIGludCBleHQ0X21iX21hcmtfY29udGV4dChoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmgtMjc3LVxcdFxcdGV4dDRfZ3JwYmxrX3QgKnJldF9jaGFuZ2VkKTtcXG5mcy9leHQ0L21iYWxsb2MuaDoyNzg6I2lmIElTX0VOQUJMRUQoQ09ORklHX0VYVDRfS1VOSVRfVEVTVFMpXFxuZnMvZXh0NC9tYmFsbG9jLmgtMjc5LWV4dGVybiB2b2lkIG1iX2NsZWFyX2JpdHNfdGVzdCh2b2lkICpibSwgaW50IGN1ciwgaW50IGxlbik7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9MTI1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIGV4dDRfY29udGV4dF9vcHMgPSB7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTMyLVxcbmZzL2V4dDQvc3VwZXIuYzoxMzM6I2lmICFkZWZpbmVkKENPTkZJR19FWFQyX0ZTKSBcXHUwMDI2XFx1MDAyNiAhZGVmaW5lZChDT05GSUdfRVhUMl9GU19NT0RVTEUpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0VYVDRfVVNFX0ZPUl9FWFQyKVxcbmZzL2V4dDQvc3VwZXIuYy0xMzQtc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGV4dDJfZnNfdHlwZSA9IHtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz0xNjkyPWVudW0ge1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTE3MTUtXFx0T3B0X2Vycm9ycywgT3B0X2RhdGEsIE9wdF9kYXRhX2VyciwgT3B0X2pxZm10LCBPcHRfZGF4X3R5cGUsXFxuZnMvZXh0NC9zdXBlci5jOjE3MTY6I2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXFxuZnMvZXh0NC9zdXBlci5jLTE3MTctXFx0T3B0X2ZjX2RlYnVnX21heF9yZXBsYXksIE9wdF9mY19kZWJ1Z19mb3JjZVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTE3NjI9c3RhdGljIGNvbnN0IHN0cnVjdCBmc19wYXJhbWV0ZXJfc3BlYyBleHQ0X3BhcmFtX3NwZWNzW10gPSB7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTgzNS1cXHRmc3BhcmFtX2ZsYWdcXHQoXFxcIm5vaW5pdF9pdGFibGVcXFwiLFxcdE9wdF9ub2luaXRfaXRhYmxlKSxcXG5mcy9leHQ0L3N1cGVyLmM6MTgzNjojaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcXG5mcy9leHQ0L3N1cGVyLmMtMTgzNy1cXHRmc3BhcmFtX2ZsYWdcXHQoXFxcImZjX2RlYnVnX2ZvcmNlXFxcIixcXHRPcHRfZmNfZGVidWdfZm9yY2UpLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTE4Nzk9c3RhdGljIGNvbnN0IHN0cnVjdCBtb3VudF9vcHRzIHtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0xOTIyLVxcdHtPcHRfdXNlcl94YXR0ciwgRVhUNF9NT1VOVF9YQVRUUl9VU0VSLCBNT1BUX1NFVH0sXFxuZnMvZXh0NC9zdXBlci5jOjE5MjM6I2lmZGVmIENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTFxcbmZzL2V4dDQvc3VwZXIuYy0xOTI0LVxcdHtPcHRfYWNsLCBFWFQ0X01PVU5UX1BPU0lYX0FDTCwgTU9QVF9TRVR9LFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTE5NDUtXFx0IE1PUFRfU0VUfSxcXG5mcy9leHQ0L3N1cGVyLmM6MTk0NjojaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcXG5mcy9leHQ0L3N1cGVyLmMtMTk0Ny1cXHR7T3B0X2ZjX2RlYnVnX2ZvcmNlLCBFWFQ0X01PVU5UMl9KT1VSTkFMX0ZBU1RfQ09NTUlULFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTE5OTc9c3RydWN0IGV4dDRfZnNfY29udGV4dCB7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMjAwMC1cXHRpbnRcXHRcXHRzX2pxdW90YV9mbXQ7XFx0LyogRm9ybWF0IG9mIHF1b3RhIHRvIHVzZSAqL1xcbmZzL2V4dDQvc3VwZXIuYzoyMDAxOiNpZmRlZiBDT05GSUdfRVhUNF9ERUJVR1xcbmZzL2V4dDQvc3VwZXIuYy0yMDAyLVxcdGludCBzX2ZjX2RlYnVnX21heF9yZXBsYXk7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9MjE3MT1zdGF0aWMgaW50IGV4dDRfcGFyc2VfcGFyYW0oc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSlcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0yMzA2LVxcdFxcdHJldHVybiAwO1xcbmZzL2V4dDQvc3VwZXIuYzoyMzA3OiNpZmRlZiBDT05GSUdfRVhUNF9ERUJVR1xcbmZzL2V4dDQvc3VwZXIuYy0yMzA4LVxcdGNhc2UgT3B0X2ZjX2RlYnVnX21heF9yZXBsYXk6XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9Mjg1NT1zdGF0aWMgdm9pZCBleHQ0X2FwcGx5X29wdGlvbnMoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTI4NzgtXFxuZnMvZXh0NC9zdXBlci5jOjI4Nzk6I2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXFxuZnMvZXh0NC9zdXBlci5jLTI4ODAtXFx0QVBQTFkoc19mY19kZWJ1Z19tYXhfcmVwbGF5KTtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz00Mzg4PXN0YXRpYyB2b2lkIGV4dDRfc2V0X2RlZl9vcHRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNDQwMy1cXHRzZXRfb3B0KHNiLCBYQVRUUl9VU0VSKTtcXG5mcy9leHQ0L3N1cGVyLmM6NDQwNDojaWZkZWYgQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMXFxuZnMvZXh0NC9zdXBlci5jLTQ0MDUtXFx0c2V0X29wdChzYiwgUE9TSVhfQUNMKTtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz03Mzc3PXN0YXRpYyBzc2l6ZV90IGV4dDRfcXVvdGFfd3JpdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNzQzNy1cXG5mcy9leHQ0L3N1cGVyLmM6NzQzODojaWYgIWRlZmluZWQoQ09ORklHX0VYVDJfRlMpIFxcdTAwMjZcXHUwMDI2ICFkZWZpbmVkKENPTkZJR19FWFQyX0ZTX01PRFVMRSkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfRVhUNF9VU0VfRk9SX0VYVDIpXFxuZnMvZXh0NC9zdXBlci5jLTc0Mzktc3RhdGljIGlubGluZSB2b2lkIHJlZ2lzdGVyX2FzX2V4dDIodm9pZClcXG4tLVxcbmZzL2V4dDQvc3lzZnMuYz0yNjY9RVhUNF9SV19BVFRSX1NCSV9QSShtc2dfcmF0ZWxpbWl0X2J1cnN0LCBzX21zZ19yYXRlbGltaXRfc3RhdGUuYnVyc3QpO1xcbmZzL2V4dDQvc3lzZnMuYzoyNjc6I2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXFxuZnMvZXh0NC9zeXNmcy5jLTI2OC1FWFQ0X1JXX0FUVFJfU0JJX1VMKHNpbXVsYXRlX2ZhaWwsIHNfc2ltdWxhdGVfZmFpbCk7XFxuLS1cXG5mcy9leHQ0L3N5c2ZzLmM9Mjk1PXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpleHQ0X2F0dHJzW10gPSB7XFxuLS1cXG5mcy9leHQ0L3N5c2ZzLmMtMzM1LVxcdEFUVFJfTElTVChqb3VybmFsX3Rhc2spLFxcbmZzL2V4dDQvc3lzZnMuYzozMzY6I2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXFxuZnMvZXh0NC9zeXNmcy5jLTMzNy1cXHRBVFRSX0xJU1Qoc2ltdWxhdGVfZmFpbCksXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9ODg9c3RhdGljIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICogY29uc3QgZXh0NF94YXR0cl9oYW5kbGVyX21hcFtdID0ge1xcbmZzL2V4dDQveGF0dHIuYy04OS1cXHRbRVhUNF9YQVRUUl9JTkRFWF9VU0VSXVxcdFxcdCAgICAgPSBcXHUwMDI2ZXh0NF94YXR0cl91c2VyX2hhbmRsZXIsXFxuZnMvZXh0NC94YXR0ci5jOjkwOiNpZmRlZiBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0xcXG5mcy9leHQ0L3hhdHRyLmMtOTEtXFx0W0VYVDRfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0FDQ0VTU10gID0gXFx1MDAyNm5vcF9wb3NpeF9hY2xfYWNjZXNzLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTk0LVxcdFtFWFQ0X1hBVFRSX0lOREVYX1RSVVNURURdXFx0ICAgICA9IFxcdTAwMjZleHQ0X3hhdHRyX3RydXN0ZWRfaGFuZGxlcixcXG5mcy9leHQ0L3hhdHRyLmM6OTU6I2lmZGVmIENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZXFxuZnMvZXh0NC94YXR0ci5jLTk2LVxcdFtFWFQ0X1hBVFRSX0lOREVYX1NFQ1VSSVRZXVxcdCAgICAgPSBcXHUwMDI2ZXh0NF94YXR0cl9zZWN1cml0eV9oYW5kbGVyLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTEwMT1jb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqIGNvbnN0IGV4dDRfeGF0dHJfaGFuZGxlcnNbXSA9IHtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xMDMtXFx0XFx1MDAyNmV4dDRfeGF0dHJfdHJ1c3RlZF9oYW5kbGVyLFxcbmZzL2V4dDQveGF0dHIuYzoxMDQ6I2lmZGVmIENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZXFxuZnMvZXh0NC94YXR0ci5jLTEwNS1cXHRcXHUwMDI2ZXh0NF94YXR0cl9zZWN1cml0eV9oYW5kbGVyLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5oPTIxMz1fX3hhdHRyX2NoZWNrX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2hlYWRlciAqaGVhZGVyLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5oLTIxOC1cXG5mcy9leHQ0L3hhdHRyLmg6MjE5OiNpZmRlZiBDT05GSUdfRVhUNF9GU19TRUNVUklUWVxcbmZzL2V4dDQveGF0dHIuaC0yMjAtZXh0ZXJuIGludCBleHQ0X2luaXRfc2VjdXJpdHkoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6NTM6MTAuODQ1NjA2MDUzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQyNzYwNDA2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgdGhlIGV4dDQgS2NvbmZpZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGRpdmUgaW50byB0aGUgaGVhcnQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhhdCBtZWFucyBgZnMvZXh0NC9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBmZWF0dXJlIGZsYWdzIGFyZSBkZWZpbmVkLCBkZXBlbmRlbmNpZXMgYXJlIGxhaWQgb3V0LCBhbmQgdGhlIGJ1aWxkIHN5c3RlbSBrbm93cyBob3cgdG8gaGFuZGxlIHRoZSBleHQ0LXNwZWNpZmljIGNvbXBvbmVudHMuIEknbSBob3BpbmcgdG8gcXVpY2tseSBncmFzcCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLiBVbmRlcnN0YW5kaW5nIHRoZSBLY29uZmlnIGZpbGUgZ2l2ZXMgbWUgdGhlIGxvdy1sZXZlbCBidWlsZGluZyBibG9ja3MgZm9yIHdoYXQncyBwb3NzaWJsZSwgYW5kIHdoZXJlIHRvIGxvb2sgd2hlbiBzb21ldGhpbmcgaXNuJ3Qgd29ya2luZyBhcyBleHBlY3RlZC4gVGhpcyBhbGxvd3MgbWUgdG8gc2VlIHRoZSBjb25maWd1cmF0aW9uIGFuZCBhbGwgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTc3MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjUzOjEzLjI3MzIxMTkzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIEVYVDRfRlNcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVxcXCJcXG4gICA0OlxcdFxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbiAgIDU6XFx0XFx0c2VsZWN0IEpCRDJcXG4gICA2OlxcdFxcdHNlbGVjdCBDUkMxNlxcbiAgIDc6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAgODpcXHRcXHRzZWxlY3QgRlNfSU9NQVBcXG4gICA5OlxcdFxcdHNlbGVjdCBGU19FTkNSWVBUSU9OX0FMR1MgaWYgRlNfRU5DUllQVElPTlxcbiAgMTA6XFx0XFx0aGVscFxcbiAgMTE6XFx0XFx0ICBUaGlzIGlzIHRoZSBuZXh0IGdlbmVyYXRpb24gb2YgdGhlIGV4dDMgZmlsZXN5c3RlbS5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0XFx0ICBVbmxpa2UgdGhlIGNoYW5nZSBmcm9tIGV4dDIgZmlsZXN5c3RlbSB0byBleHQzIGZpbGVzeXN0ZW0sXFxuICAxNDpcXHRcXHQgIHRoZSBvbi1kaXNrIGZvcm1hdCBvZiBleHQ0IGlzIG5vdCBmb3J3YXJkcyBjb21wYXRpYmxlIHdpdGhcXG4gIDE1OlxcdFxcdCAgZXh0MzsgaXQgaXMgYmFzZWQgb24gZXh0ZW50IG1hcHMgYW5kIGl0IHN1cHBvcnRzIDQ4LWJpdFxcbiAgMTY6XFx0XFx0ICBwaHlzaWNhbCBibG9jayBudW1iZXJzLiAgVGhlIGV4dDQgZmlsZXN5c3RlbSBhbHNvIHN1cHBvcnRzIGRlbGF5ZWRcXG4gIDE3OlxcdFxcdCAgYWxsb2NhdGlvbiwgcGVyc2lzdGVudCBwcmVhbGxvY2F0aW9uLCBoaWdoIHJlc29sdXRpb24gdGltZSBzdGFtcHMsXFxuICAxODpcXHRcXHQgIGFuZCBhIG51bWJlciBvZiBvdGhlciBmZWF0dXJlcyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIGFuZCBzcGVlZFxcbiAgMTk6XFx0XFx0ICB1cCBmc2NrIHRpbWUuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHNlZSB0aGUgd2ViIHBhZ2VzIGF0XFxuICAyMDpcXHRcXHQgIGh0dHA6Ly9leHQ0Lndpa2kua2VybmVsLm9yZy5cXG4gIDIxOlxcdFxcbiAgMjI6XFx0XFx0ICBUaGUgZXh0NCBmaWxlc3lzdGVtIHN1cHBvcnRzIG1vdW50aW5nIGFuIGV4dDMgZmlsZXN5c3RlbTsgd2hpbGUgdGhlcmVcXG4gIDIzOlxcdFxcdCAgYXJlIHNvbWUgcGVyZm9ybWFuY2UgZ2FpbnMgZnJvbSB0aGUgZGVsYXllZCBhbGxvY2F0aW9uIGFuZCBpbm9kZVxcbiAgMjQ6XFx0XFx0ICB0YWJsZSByZWFkYWhlYWQsIHRoZSBiZXN0IHBlcmZvcm1hbmNlIGdhaW5zIHJlcXVpcmUgZW5hYmxpbmcgZXh0NFxcbiAgMjU6XFx0XFx0ICBmZWF0dXJlcyBpbiB0aGUgZmlsZXN5c3RlbSB1c2luZyB0dW5lMmZzLCBvciBmb3JtYXR0aW5nIGEgbmV3XFxuICAyNjpcXHRcXHQgIGZpbGVzeXN0ZW0gYXMgYW4gZXh0NCBmaWxlc3lzdGVtIGluaXRpYWxseS4gV2l0aG91dCBleHBsaWNpdCBlbmFibGluZ1xcbiAgMjc6XFx0XFx0ICBvZiBleHQ0IGZlYXR1cmVzLCB0aGUgb24gZGlzayBmaWxlc3lzdGVtIGZvcm1hdCBzdGF5cyBmdWxseSBiYWNrd2FyZFxcbiAgMjg6XFx0XFx0ICBjb21wYXRpYmxlLlxcbiAgMjk6XFx0XFxuICAzMDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBmaWxlIHN5c3RlbSBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGVcXG4gIDMxOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGV4dDQuXFxuICAzMjpcXHRcXG4gIDMzOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDM0OlxcdFxcbiAgMzU6XFx0Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXFxuICAzNjpcXHRcXHRib29sIFxcXCJVc2UgZXh0NCBmb3IgZXh0MiBmaWxlIHN5c3RlbXNcXFwiXFxuICAzNzpcXHRcXHRkZXBlbmRzIG9uIEVYVDRfRlNcXG4gIDM4OlxcdFxcdGRlcGVuZHMgb24gRVhUMl9GUz1uXFxuICAzOTpcXHRcXHRkZWZhdWx0IHlcXG4gIDQwOlxcdFxcdGhlbHBcXG4gIDQxOlxcdFxcdCAgQWxsb3cgdGhlIGV4dDQgZmlsZSBzeXN0ZW0gZHJpdmVyIGNvZGUgdG8gYmUgdXNlZCBmb3IgZXh0MlxcbiAgNDI6XFx0XFx0ICBmaWxlIHN5c3RlbSBtb3VudHMuICBUaGlzIGFsbG93cyB1c2VycyB0byByZWR1Y2UgdGhlaXJcXG4gIDQzOlxcdFxcdCAgY29tcGlsZWQga2VybmVsIHNpemUgYnkgdXNpbmcgb25lIGZpbGUgc3lzdGVtIGRyaXZlciBmb3JcXG4gIDQ0OlxcdFxcdCAgZXh0MiwgZXh0MywgYW5kIGV4dDQgZmlsZSBzeXN0ZW1zLlxcbiAgNDU6XFx0XFxuICA0NjpcXHRjb25maWcgRVhUNF9GU19QT1NJWF9BQ0xcXG4gIDQ3OlxcdFxcdGJvb2wgXFxcIkV4dDQgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcXFwiXFxuICA0ODpcXHRcXHRkZXBlbmRzIG9uIEVYVDRfRlNcXG4gIDQ5OlxcdFxcdHNlbGVjdCBGU19QT1NJWF9BQ0xcXG4gIDUwOlxcdFxcdGhlbHBcXG4gIDUxOlxcdFxcdCAgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHMgKEFDTHMpIHN1cHBvcnQgcGVybWlzc2lvbnMgZm9yIHVzZXJzIGFuZFxcbiAgNTI6XFx0XFx0ICBncm91cHMgYmV5b25kIHRoZSBvd25lci9ncm91cC93b3JsZCBzY2hlbWUuXFxuICA1MzpcXHRcXG4gIDU0OlxcdFxcdCAgSWYgeW91IGRvbid0IGtub3cgd2hhdCBBY2Nlc3MgQ29udHJvbCBMaXN0cyBhcmUsIHNheSBOXFxuICA1NTpcXHRcXG4gIDU2OlxcdGNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXFxuICA1NzpcXHRcXHRib29sIFxcXCJFeHQ0IFNlY3VyaXR5IExhYmVsc1xcXCJcXG4gIDU4OlxcdFxcdGRlcGVuZHMgb24gRVhUNF9GU1xcbiAgNTk6XFx0XFx0aGVscFxcbiAgNjA6XFx0XFx0ICBTZWN1cml0eSBsYWJlbHMgc3VwcG9ydCBhbHRlcm5hdGl2ZSBhY2Nlc3MgY29udHJvbCBtb2RlbHNcXG4gIDYxOlxcdFxcdCAgaW1wbGVtZW50ZWQgYnkgc2VjdXJpdHkgbW9kdWxlcyBsaWtlIFNFTGludXguICBUaGlzIG9wdGlvblxcbiAgNjI6XFx0XFx0ICBlbmFibGVzIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSBoYW5kbGVyIGZvciBmaWxlIHNlY3VyaXR5XFxuICA2MzpcXHRcXHQgIGxhYmVscyBpbiB0aGUgZXh0NCBmaWxlc3lzdGVtLlxcbiAgNjQ6XFx0XFxuICA2NTpcXHRcXHQgIElmIHlvdSBhcmUgbm90IHVzaW5nIGEgc2VjdXJpdHkgbW9kdWxlIHRoYXQgcmVxdWlyZXMgdXNpbmdcXG4gIDY2OlxcdFxcdCAgZXh0ZW5kZWQgYXR0cmlidXRlcyBmb3IgZmlsZSBzZWN1cml0eSBsYWJlbHMsIHNheSBOLlxcbiAgNjc6XFx0XFxuICA2ODpcXHRjb25maWcgRVhUNF9ERUJVR1xcbiAgNjk6XFx0XFx0Ym9vbCBcXFwiRXh0NCBkZWJ1Z2dpbmcgc3VwcG9ydFxcXCJcXG4gIDcwOlxcdFxcdGRlcGVuZHMgb24gRVhUNF9GU1xcbiAgNzE6XFx0XFx0aGVscFxcbiAgNzI6XFx0XFx0ICBFbmFibGVzIHJ1bi10aW1lIGRlYnVnZ2luZyBzdXBwb3J0IGZvciB0aGUgZXh0NCBmaWxlc3lzdGVtLlxcbiAgNzM6XFx0XFxuICA3NDpcXHRcXHQgIElmIHlvdSBzZWxlY3QgWSBoZXJlLCB0aGVuIHlvdSB3aWxsIGJlIGFibGUgdG8gdHVybiBvbiBkZWJ1Z2dpbmdcXG4gIDc1OlxcdFxcdCAgdXNpbmcgZHluYW1pYyBkZWJ1ZyBjb250cm9sIGZvciBtYl9kZWJ1ZygpIC8gZXh0X2RlYnVnKCkgbXNncy5cXG4gIDc2OlxcdFxcbiAgNzc6XFx0Y29uZmlnIEVYVDRfS1VOSVRfVEVTVFNcXG4gIDc4OlxcdFxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0cyBmb3IgZXh0NFxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgNzk6XFx0XFx0ZGVwZW5kcyBvbiBFWFQ0X0ZTIFxcdTAwMjZcXHUwMDI2IEtVTklUXFxuICA4MDpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgODE6XFx0XFx0aGVscFxcbiAgODI6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgZXh0NCBLVW5pdCB0ZXN0cy5cXG4gIDgzOlxcdFxcbiAgODQ6XFx0XFx0ICBLVW5pdCB0ZXN0cyBydW4gZHVyaW5nIGJvb3QgYW5kIG91dHB1dCB0aGUgcmVzdWx0cyB0byB0aGUgZGVidWcgbG9nXFxuICA4NTpcXHRcXHQgIGluIFRBUCBmb3JtYXQgKGh0dHBzOi8vdGVzdGFueXRoaW5nLm9yZy8pLiBPbmx5IHVzZWZ1bCBmb3Iga2VybmVsIGRldnNcXG4gIDg2OlxcdFxcdCAgcnVubmluZyBLVW5pdCB0ZXN0IGhhcm5lc3MgYW5kIGFyZSBub3QgZm9yIGluY2x1c2lvbiBpbnRvIGEgcHJvZHVjdGlvblxcbiAgODc6XFx0XFx0ICBidWlsZC5cXG4gIDg4OlxcdFxcbiAgODk6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsIHBsZWFzZSByZWZlclxcbiAgOTA6XFx0XFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbiBpbiBEb2N1bWVudGF0aW9uL2Rldi10b29scy9rdW5pdC8uXFxuICA5MTpcXHRcXG4gIDkyOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6NTM6MTMuMjczMjkwMjFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDg4NDg5NTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgYGZzL2V4dDQvaW5saW5lLmNgLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIGV4dDQgSW5saW5lIENvbnZlcnNpb24gaW4gYGlubGluZS5jYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpc3NlY3QgYGZzL2V4dDQvaW5saW5lLmNgLiBNeSBwcmltYXJ5IGludGVyZXN0IGhlcmUgbGllcyBpbiB1bmRlcnN0YW5kaW5nIHRoZSBtZWNoYW5pY3Mgb2YgaW5saW5lIGNvbnZlcnNpb24gd2l0aGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgdHJpZ2dlcnMgZm9yIHRoaXMgY29udmVyc2lvbiBwcm9jZXNzLCBhbmQgdGhlbiBJIHdhbnQgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgdGhlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIOKAkyB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIGVmZmVjdGl2ZWx5IHRoZSBmb2N1cyBzeW1ib2xzLCB0aGUgaW50ZXJmYWNlIGludG8gdGhpcyBmdW5jdGlvbmFsaXR5LiBXaGF0IGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUgYXJlICpleHBvc2VkKiBhbmQgYXJlIHJlc3BvbnNpYmxlIGZvciB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBpbiB0aGlzIGZpbGUgdGhhdCBJIGNhbiBhY3R1YWxseSBjYWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI5MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6NTM6MTUuMzYxNzgxNzk1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzU0MTE0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dLipcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L2lubGluZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvaW5saW5lLmMtMjQtXFxuZnMvZXh0NC9pbmxpbmUuYzoyNTpzdGF0aWMgaW50IGV4dDRfZGFfY29udmVydF9pbmxpbmVfZGF0YV90b19leHRlbnQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuZnMvZXh0NC9pbmxpbmUuYy0yNi1cXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMjgtXFxuZnMvZXh0NC9pbmxpbmUuYzoyOTpzdGF0aWMgaW50IGV4dDRfZ2V0X2lubGluZV9zaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvZXh0NC9pbmxpbmUuYy0zMC17XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTM2LVxcbmZzL2V4dDQvaW5saW5lLmM6Mzc6c3RhdGljIGludCBnZXRfbWF4X2lubGluZV94YXR0cl92YWx1ZV9zaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvZXh0NC9pbmxpbmUuYy0zOC1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZXh0NF9pbG9jICppbG9jKVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xMTEtICovXFxuZnMvZXh0NC9pbmxpbmUuYzoxMTI6aW50IGV4dDRfZ2V0X21heF9pbmxpbmVfc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2V4dDQvaW5saW5lLmMtMTEzLXtcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMTQ0LSAqL1xcbmZzL2V4dDQvaW5saW5lLmM6MTQ1OmludCBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvZXh0NC9pbmxpbmUuYy0xNDYte1xcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xODMtXFxuZnMvZXh0NC9pbmxpbmUuYzoxODQ6c3RhdGljIGludCBleHQ0X3JlYWRfaW5saW5lX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqYnVmZmVyLFxcbmZzL2V4dDQvaW5saW5lLmMtMTg1LVxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgbGVuLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0yMjgtICovXFxuZnMvZXh0NC9pbmxpbmUuYzoyMjk6c3RhdGljIHZvaWQgZXh0NF93cml0ZV9pbmxpbmVfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF9pbG9jICppbG9jLFxcbmZzL2V4dDQvaW5saW5lLmMtMjMwLVxcdFxcdFxcdFxcdCAgIHZvaWQgKmJ1ZmZlciwgbG9mZl90IHBvcywgdW5zaWduZWQgaW50IGxlbilcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMjY3LVxcbmZzL2V4dDQvaW5saW5lLmM6MjY4OnN0YXRpYyBpbnQgZXh0NF9jcmVhdGVfaW5saW5lX2RhdGEoaGFuZGxlX3QgKmhhbmRsZSxcXG5mcy9leHQ0L2lubGluZS5jLTI2OS1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBsZW4pXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTMzNi1cXG5mcy9leHQ0L2lubGluZS5jOjMzNzpzdGF0aWMgaW50IGV4dDRfdXBkYXRlX2lubGluZV9kYXRhKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvZXh0NC9pbmxpbmUuYy0zMzgtXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IGxlbilcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtNDA3LVxcbmZzL2V4dDQvaW5saW5lLmM6NDA4OnN0YXRpYyBpbnQgZXh0NF9wcmVwYXJlX2lubGluZV9kYXRhKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvZXh0NC9pbmxpbmUuYy00MDktXFx0XFx0XFx0XFx0ICAgIGxvZmZfdCBsZW4pXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTQzNi1cXG5mcy9leHQ0L2lubGluZS5jOjQzNzpzdGF0aWMgaW50IGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSxcXG5mcy9leHQ0L2lubGluZS5jLTQzOC1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy01MDMtXFxuZnMvZXh0NC9pbmxpbmUuYzo1MDQ6c3RhdGljIGludCBleHQ0X3JlYWRfaW5saW5lX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuZnMvZXh0NC9pbmxpbmUuYy01MDUte1xcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy01NDUtXFxuZnMvZXh0NC9pbmxpbmUuYzo1NDY6aW50IGV4dDRfcmVhZHBhZ2VfaW5saW5lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuZnMvZXh0NC9pbmxpbmUuYy01NDcte1xcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy01NzItXFxuZnMvZXh0NC9pbmxpbmUuYzo1NzM6c3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbmZzL2V4dDQvaW5saW5lLmMtNTc0LVxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTY5Ni0gKi9cXG5mcy9leHQ0L2lubGluZS5jOjY5NzppbnQgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbmZzL2V4dDQvaW5saW5lLmMtNjk4LVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtNzgzLSAqL1xcbmZzL2V4dDQvaW5saW5lLmM6Nzg0OmludCBleHQ0X3RyeV90b193cml0ZV9pbmxpbmVfZGF0YShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG5mcy9leHQ0L2lubGluZS5jLTc4NS1cXHRcXHRcXHRcXHQgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTc5NC1cXG5mcy9leHQ0L2lubGluZS5jOjc5NTppbnQgZXh0NF93cml0ZV9pbmxpbmVfZGF0YV9lbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLFxcbmZzL2V4dDQvaW5saW5lLmMtNzk2LVxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBjb3BpZWQsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTg4NS0gKi9cXG5mcy9leHQ0L2lubGluZS5jOjg4NjpzdGF0aWMgaW50IGV4dDRfZGFfY29udmVydF9pbmxpbmVfZGF0YV90b19leHRlbnQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuZnMvZXh0NC9pbmxpbmUuYy04ODctXFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTkzNy0jaWZkZWYgSU5MSU5FX0RJUl9ERUJVR1xcbmZzL2V4dDQvaW5saW5lLmM6OTM4OnZvaWQgZXh0NF9zaG93X2lubGluZV9kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXFxuZnMvZXh0NC9pbmxpbmUuYy05MzktXFx0XFx0XFx0ICB2b2lkICppbmxpbmVfc3RhcnQsIGludCBpbmxpbmVfc2l6ZSlcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtOTY5LSAqL1xcbmZzL2V4dDQvaW5saW5lLmM6OTcwOnN0YXRpYyBpbnQgZXh0NF9hZGRfZGlyZW50X3RvX2lubGluZShoYW5kbGVfdCAqaGFuZGxlLFxcbmZzL2V4dDQvaW5saW5lLmMtOTcxLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGV4dDRfZmlsZW5hbWUgKmZuYW1lLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xMDEwLVxcbmZzL2V4dDQvaW5saW5lLmM6MTAxMTpzdGF0aWMgdm9pZCAqZXh0NF9nZXRfaW5saW5lX3hhdHRyX3BvcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbmZzL2V4dDQvaW5saW5lLmMtMTAxMi1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGV4dDRfaWxvYyAqaWxvYylcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMTAyNi0vKiBTZXQgdGhlIGZpbmFsIGRlIHRvIGNvdmVyIHRoZSB3aG9sZSBibG9jay4gKi9cXG5mcy9leHQ0L2lubGluZS5jOjEwMjc6dm9pZCBleHQ0X3VwZGF0ZV9maW5hbF9kZSh2b2lkICpkZV9idWYsIGludCBvbGRfc2l6ZSwgaW50IG5ld19zaXplKVxcbmZzL2V4dDQvaW5saW5lLmMtMTAyOC17XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTEwNTEtXFxuZnMvZXh0NC9pbmxpbmUuYzoxMDUyOnN0YXRpYyBpbnQgZXh0NF91cGRhdGVfaW5saW5lX2RpcihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG5mcy9leHQ0L2lubGluZS5jLTEwNTMtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZXh0NF9pbG9jICppbG9jKVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xMDczLVxcbmZzL2V4dDQvaW5saW5lLmM6MTA3NDpzdGF0aWMgaW50IGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfZnNibGtfdCBibG9jayxcXG5mcy9leHQ0L2lubGluZS5jLTEwNzUtXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGxlbiwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMTE5NC1cXG5mcy9leHQ0L2lubGluZS5jOjExOTU6c3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXFxuZnMvZXh0NC9pbmxpbmUuYy0xMTk2LVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTEyOTUtICovXFxuZnMvZXh0NC9pbmxpbmUuYzoxMjk2OmludCBleHQ0X3RyeV9hZGRfaW5saW5lX2VudHJ5KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBleHQ0X2ZpbGVuYW1lICpmbmFtZSxcXG5mcy9leHQ0L2lubGluZS5jLTEyOTctXFx0XFx0XFx0ICAgICAgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTEzNjQtICovXFxuZnMvZXh0NC9pbmxpbmUuYzoxMzY1OmludCBleHQ0X2lubGluZWRpcl90b190cmVlKHN0cnVjdCBmaWxlICpkaXJfZmlsZSxcXG5mcy9leHQ0L2lubGluZS5jLTEzNjYtXFx0XFx0XFx0ICAgc3RydWN0IGlub2RlICpkaXIsIGV4dDRfbGJsa190IGJsb2NrLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xNDg1LSAqL1xcbmZzL2V4dDQvaW5saW5lLmM6MTQ4NjppbnQgZXh0NF9yZWFkX2lubGluZV9kaXIoc3RydWN0IGZpbGUgKmZpbGUsXFxuZnMvZXh0NC9pbmxpbmUuYy0xNDg3LVxcdFxcdFxcdCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eCxcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMTYxNi1cXG5mcy9leHQ0L2lubGluZS5jOjE2MTc6dm9pZCAqZXh0NF9yZWFkX2lubGluZV9saW5rKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvZXh0NC9pbmxpbmUuYy0xNjE4LXtcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMTY0NS1cXG5mcy9leHQ0L2lubGluZS5jOjE2NDY6c3RydWN0IGJ1ZmZlcl9oZWFkICpleHQ0X2dldF9maXJzdF9pbmxpbmVfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSxcXG5mcy9leHQ0L2lubGluZS5jLTE2NDctXFx0XFx0XFx0XFx0XFx0c3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKipwYXJlbnRfZGUsXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTE2NjUtICovXFxuZnMvZXh0NC9pbmxpbmUuYzoxNjY2OmludCBleHQ0X3RyeV9jcmVhdGVfaW5saW5lX2RpcihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG5mcy9leHQ0L2lubGluZS5jLTE2NjctXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTE2OTgtXFxuZnMvZXh0NC9pbmxpbmUuYzoxNjk5OnN0cnVjdCBidWZmZXJfaGVhZCAqZXh0NF9maW5kX2lubGluZV9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpcixcXG5mcy9leHQ0L2lubGluZS5jLTE3MDAtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGV4dDRfZmlsZW5hbWUgKmZuYW1lLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xNzYxLVxcbmZzL2V4dDQvaW5saW5lLmM6MTc2MjppbnQgZXh0NF9kZWxldGVfaW5saW5lX2VudHJ5KGhhbmRsZV90ICpoYW5kbGUsXFxuZnMvZXh0NC9pbmxpbmUuYy0xNzYzLVxcdFxcdFxcdCAgICAgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTE4MTk9c3RhdGljIGlubGluZSBzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqXFxuZnMvZXh0NC9pbmxpbmUuYzoxODIwOmV4dDRfZ2V0X2lubGluZV9lbnRyeShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbmZzL2V4dDQvaW5saW5lLmMtMTgyMS1cXHRcXHQgICAgICBzdHJ1Y3QgZXh0NF9pbG9jICppbG9jLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xODQ0LVxcbmZzL2V4dDQvaW5saW5lLmM6MTg0NTpib29sIGVtcHR5X2lubGluZV9kaXIoc3RydWN0IGlub2RlICpkaXIsIGludCAqaGFzX2lubGluZV9kYXRhKVxcbmZzL2V4dDQvaW5saW5lLmMtMTg0Ni17XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTE5MDctXFxuZnMvZXh0NC9pbmxpbmUuYzoxOTA4OmludCBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGEoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9leHQ0L2lubGluZS5jLTE5MDkte1xcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xOTE4LVxcbmZzL2V4dDQvaW5saW5lLmM6MTkxOTppbnQgZXh0NF9pbmxpbmVfZGF0YV9pb21hcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwKVxcbmZzL2V4dDQvaW5saW5lLmMtMTkyMC17XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTE5NTAtXFxuZnMvZXh0NC9pbmxpbmUuYzoxOTUxOmludCBleHQ0X2lubGluZV9kYXRhX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCAqaGFzX2lubGluZSlcXG5mcy9leHQ0L2lubGluZS5jLTE5NTIte1xcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0yMDYyLVxcbmZzL2V4dDQvaW5saW5lLmM6MjA2MzppbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvZXh0NC9pbmxpbmUuYy0yMDY0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6NTM6MTUuNDM5MzMwMDk5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzMTg5Njg0ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEV4dDQgSW5saW5lIERhdGEgQ29udmVyc2lvbiBDb2RlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSdtIGV4YW1pbmluZyB0aGUgZnVuY3Rpb24gY2FsbHMgcmVsYXRlZCB0byBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhYC4gIEkgc2VlIHRoYXQgaXQncyBhbiBleHBvcnRlZCBmdW5jdGlvbiwgbWVhbmluZyBpdCdzIGFjY2Vzc2libGUgb3V0c2lkZSBpdHMgb3duIG1vZHVsZSwgYW5kIGl0IHJlc2lkZXMgaW4gYGZzL2V4dDQvaW5saW5lLmNgLiAgYGV4dDRfdHJ5X2FkZF9pbmxpbmVfZW50cnlgIGNhbGxzIGl0LCBhbmQgaXQgYWxzbyBjYWxscyBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja2AuIEludGVyZXN0aW5nIHRoYXQgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YWAgaXMgY2FsbGluZyBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja2AuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhvc2UuXG5cbk5vdywgbGV0J3MgZmlndXJlIG91dCB3aGF0IGVsc2UgaXMgY2FsbGluZyBpbnRvIHRoaXMgYXJlYSBvZiBjb2RlLiBTY2FubmluZyB0aGUgY29kZWJhc2UsIEkgZmluZCB0aGF0LCBiZXlvbmQgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YWAgaXRzZWxmLCB3ZSBhbHNvIGhhdmUgYGV4dDRfdHJ5X2FkZF9pbmxpbmVfZW50cnlgLCBgZXh0NF9mYWxsb2NhdGVgIGluIHRoZSBleHRlbnRzIGNvZGUsIGBleHQ0X3NldGF0dHJgIGluIHRoZSBpbm9kZSBjb2RlLCBhbmQgYGV4dDRfcGFnZV9ta3dyaXRlYCwgYWxzbyBpbiB0aGUgaW5vZGUgY29kZSwgYWxsIHRvdWNoaW5nIHRoaXMgaW5saW5lIGRhdGEgZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBlY29zeXN0ZW0uXG5cblRoZSBnb29kIG5ld3MgaXMgdGhhdCB0aGlzIGlzIGRlZmluaXRlbHkgZnV6emFibGU6ICBXZSdyZSBkZWFsaW5nIHdpdGggY29yZSBmaWxlc3lzdGVtIGNvZGUsIHNwZWNpZmljYWxseSBleHQ0IGlubGluZSBkYXRhIGNvbnZlcnNpb24uIEl0J3MgcmVhZGlseSBhY2Nlc3NpYmxlIGluIGEgUUVNVSBlbnZpcm9ubWVudCwgYW5kIHdlIGNhbiB0cmlnZ2VyIGl0IHRocm91Z2ggc3RhbmRhcmQgb3BlcmF0aW9ucyBsaWtlIG1vdW50aW5nIGltYWdlcyB3aXRoIHRoZSBgaW5saW5lX2RhdGFgIG9wdGlvbiwgdXNpbmcgeGF0dHJzLCBtYW5pcHVsYXRpbmcgaW5saW5lIGRpcmVjdG9yeSBlbnRyaWVzLCBvciB1c2luZyBgZmFsbG9jYXRlYCBvciBgc2V0YXR0cmAuICBGdXJ0aGVybW9yZSwgdGhlIHByZXNlbmNlIG9mIHJlZmFjdG9yZWQgY29kZSBsaWtlIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrYCBhbmQgdGhlIG5ldyBgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2tgIGluZGljYXRlcyBhIG5vbi10cml2aWFsIGZ1bmN0aW9uYWwgY2hhbmdlLCBtYWtpbmcgdGhpcyBhbiBldmVuIG1vcmUgY29tcGVsbGluZyB0YXJnZXQgZm9yIGZ1enppbmcuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIGBDT05GSUdfRVhUNF9GU2AgKG9yIGp1c3QgYEVYVDRfRlNgKSBpcyB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGlubGluZSBkYXRhIGRvZXNuJ3QgcmVxdWlyZSBhbnkgKnNwZWNpYWwqIGNvbmZpZyBvcHRpb25zIGJleW9uZCB0aGUgYmFzZSBleHQ0IHN1cHBvcnQuIEknbGwgc2VhcmNoIHRoZSBgZnMvZXh0NC9NYWtlZmlsZWAgZm9yIGBpbmxpbmUuY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZmxhZ3MgYmVpbmcgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0MDUsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6NTM6MTkuNzU4MzA2NDM3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzQ5MDM5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbmxpbmVcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L01ha2VmaWxlPTg9ZXh0NC15XFx0Oj0gYmFsbG9jLm8gYml0bWFwLm8gYmxvY2tfdmFsaWRpdHkubyBkaXIubyBleHQ0X2piZDIubyBleHRlbnRzLm8gXFxcXFxcbmZzL2V4dDQvTWFrZWZpbGUtOS1cXHRcXHRleHRlbnRzX3N0YXR1cy5vIGZpbGUubyBmc21hcC5vIGZzeW5jLm8gaGFzaC5vIGlhbGxvYy5vIFxcXFxcXG5mcy9leHQ0L01ha2VmaWxlOjEwOlxcdFxcdGluZGlyZWN0Lm8gaW5saW5lLm8gaW5vZGUubyBpb2N0bC5vIG1iYWxsb2MubyBtaWdyYXRlLm8gXFxcXFxcbmZzL2V4dDQvTWFrZWZpbGUtMTEtXFx0XFx0bW1wLm8gbW92ZV9leHRlbnQubyBuYW1laS5vIHBhZ2UtaW8ubyByZWFkcGFnZS5vIHJlc2l6ZS5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6NTM6MTkuODAxODAxOTU0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc4NTYwODQyMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgZXh0NCBJbmxpbmUgRGF0YSBDb252ZXJzaW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGlubGluZSBkYXRhIGNvbnZlcnNpb24gaW4gZXh0NCBpcyBoYW5kbGVkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgaW5saW5lLm9gIGlzIGFsd2F5cyBidWlsdCBpbnRvIGBleHQ0LXlgIHdoZW4gYENPTkZJR19FWFQ0X0ZTYCBpcyBlbmFibGVkLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGUgcmVhbCBxdWVzdGlvbiBpcywgYXJlIHRoZXJlICpvdGhlciogY29uZmlnIGZsYWdzIHRoYXQgYXJlIGFsc28gcmVxdWlyZWQgb3Igc2hvdWxkIGJlIGNvbnNpZGVyZWQ/XG5cbmBFWFQ0X0ZTYCBzZWVtcyB0byBwdWxsIGluIGEgbG90IG9mIGRlcGVuZGVuY2llczogYEJVRkZFUl9IRUFEYCwgYEpCRDJgLCBgQ1JDMTZgLCBgQ1JDMzJgLCBhbmQgYEZTX0lPTUFQYC4gU28sIGBFWFQ0X0ZTYCBpcyBkZWZpbml0ZWx5IHRoZSAqbWFpbiogcmVxdWlyZW1lbnQuXG5cbk5vdywgbGV0J3MgZHJpbGwgZG93biBpbnRvIHRoZSBrZXkgZnVuY3Rpb25zLiBNeSBGb2N1c1N5bWJvbHMgYXJlIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFgIGFuZCBgZXh0NF90cnlfYWRkX2lubGluZV9lbnRyeWAuIEkgbmVlZCB0byBjb25maXJtIHRoZXNlIGFyZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMgdG8gZm9jdXMgb24uIFRoZXkgYXJlIG5vbi1zdGF0aWMgYW5kIG5vbi1pbmxpbmVkLCBzbyBnb29kIHRhcmdldHMuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBlbnRpcmUgY29udGV4dCBvZiB0aGVzZSBmdW5jdGlvbnMuIExldCBtZSBzZWUgd2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIHJlbGV2YW50LiBJJ20gbm90aW5nIHRoYXQgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2tgIGNhbGxzIHNldmVyYWwgb3RoZXIgZnVuY3Rpb25zIGxpa2UgYGV4dDRfbWJfbmV3X2Jsb2Nrc2AsIGBleHQ0X2luaXRfZGlyYmxvY2tgLCBhbmQgYGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrYC4gQW5kIGBleHQ0X3RyeV9hZGRfaW5saW5lX2VudHJ5YCBhbmQgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YWAgYXJlIHRoZSBjYWxsZXJzIG9mIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrYC5cblxuVGhlbiwgSSBzZWUgdGhlIGNhbGxlcnMgb2YgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YWA6IGBleHQ0X2ZhbGxvY2F0ZWAsIGBleHQ0X3NldGF0dHJgLCBgZXh0NF9wYWdlX21rd3JpdGVgLCBgZXh0NF9zZXRfY29udGV4dGAsIGFuZCBgZXh0NF9iZWdpbl9lbmFibGVfdmVyaXR5YC4gVGhpcyBnaXZlcyBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIGZ1bGwgc2V0IG9mIGNvbnRleHRzIHRoZSBjb252ZXJzaW9uIGlzIHVzZWQgd2l0aGluLlxuXG5HaXZlbiB3aGF0IEkndmUgZm91bmQsIG15IGZpbmFsIHNldC1yZXN1bHRzIGFyZTpcbiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXCJFWFQ0X0ZTXCJdYFxuKiAgIGBGb2N1c1N5bWJvbHNgOiBgW1wiZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhXCIsIFwiZXh0NF90cnlfYWRkX2lubGluZV9lbnRyeVwiXWBcbiogICBgUmVhc29uaW5nYDogQ29uY2lzZSBleHBsYW5hdGlvblxuKiAgIGBXb3J0aEZ1enppbmdgOiBgdHJ1ZWBcblxuSSdtIGNvbmZpZGVudCBpbiB0aGVzZSBmaW5kaW5ncywgc28gSSdsbCBnbyBhaGVhZCBhbmQgY2FsbCBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc0NjUsIk91dHB1dFRva2VucyI6MTQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjUzOjI3LjY1Nzg5MTM2NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MzE0MTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhXCIsXG4gICAgXCJleHQ0X3RyeV9hZGRfaW5saW5lX2VudHJ5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXh0NCBpbmxpbmUgZGF0YSBjb252ZXJzaW9uIGxvZ2ljIGluIGZzL2V4dDQvaW5saW5lLmMsIHJlcGxhY2luZyB0aGUgaW5saW5lIGRhdGEgcmVzdG9yYXRpb24gZmxvdyB3aXRoIGEgbmV3IGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrIGZ1bmN0aW9uIGFuZCByZWZhY3RvcmluZyBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIGhvdyBleHQ0IGNvbnZlcnRzIGlubGluZSBkaXJlY3RvcnkvZmlsZSBkYXRhIGludG8gZXh0ZW50L2Jsb2NrIGFsbG9jYXRpb25zIGFuZCBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFcIixcbiAgICBcImV4dDRfdHJ5X2FkZF9pbmxpbmVfZW50cnlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBleHQ0IGlubGluZSBkYXRhIGNvbnZlcnNpb24gbG9naWMgaW4gZnMvZXh0NC9pbmxpbmUuYywgcmVwbGFjaW5nIHRoZSBpbmxpbmUgZGF0YSByZXN0b3JhdGlvbiBmbG93IHdpdGggYSBuZXcgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2sgZnVuY3Rpb24gYW5kIHJlZmFjdG9yaW5nIGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2suIFRoZXNlIGNoYW5nZXMgYWx0ZXIgaG93IGV4dDQgY29udmVydHMgaW5saW5lIGRpcmVjdG9yeS9maWxlIGRhdGEgaW50byBleHRlbnQvYmxvY2sgYWxsb2NhdGlvbnMgYW5kIGFyZSBmdWxseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjUzOjI3LjczMzIxMTkxOFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMzMTk1NjM4NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjo1MzoyNy43MzM2NjQ0NjhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0MzMxOTEwNjQ0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2tgIGFuZCBpbnRyb2R1Y2VzIGBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9ja2AgdG8gcmVmYWN0b3IgaG93IGlubGluZSBkYXRhIGlzIGNvbnZlcnRlZCB0byBhIHJlZ3VsYXIgZXh0ZW50IG9yIGJsb2NrIHBvaW50ZXIgaW4gZXh0NC5cXG5cXG5BbmFseXNpcyBvZiBtZW1vcnkgaGFuZGxpbmc6XFxuMS4gSGVhcCBidWZmZXJzOlxcbiAgIC0gYGJ1ZmAgaXMgcG9wdWxhdGVkIGJ5IGBleHQ0X3JlYWRfaW5saW5lX2RhdGEoKWAgYmVmb3JlIGJlaW5nIHJlYWQuXFxuICAgLSBgaV9ibG9ja19idWZgIGFuZCBgeGF0dHJfYnVmYCBhcmUgYWxsb2NhdGVkIHdpdGggYGttYWxsb2MoKWAgYW5kIGltbWVkaWF0ZWx5IGZ1bGx5IGluaXRpYWxpemVkIHZpYSBgbWVtY3B5KClgIGZyb20gYHJhd19pbm9kZS1cXHUwMDNlaV9ibG9ja2AgYW5kIGBoZWFkZXJgIHJlc3BlY3RpdmVseS5cXG4gICAtIFRoZSBuZXdseSBhbGxvY2F0ZWQgYmxvY2sgYnVmZmVyIGBiaC1cXHUwMDNlYl9kYXRhYCBpcyBjbGVhcmVkIHVzaW5nIGBtZW1zZXQoYmgtXFx1MDAzZWJfZGF0YSwgMCwgaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmxvY2tzaXplKWAgYmVmb3JlIGRhdGEgb3IgZGlyZWN0b3J5IGVudHJpZXMgYXJlIGNvcGllZCBpbnRvIGl0LlxcbjIuIFN0YWNrIHN0cnVjdHVyZXM6XFxuICAgLSBgc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9yZXF1ZXN0IGFyYCBpcyBjbGVhcmVkIHdpdGggYG1lbXNldChcXHUwMDI2YXIsIDAsIHNpemVvZihhcikpYC5cXG4gICAtIGBzdHJ1Y3QgZXh0NF9leHRlbnQgbmV3ZXhgIGhhcyBhbGwgZm91ciBmaWVsZHMgKGBlZV9ibG9ja2AsIGBlZV9sZW5gLCBgZWVfc3RhcnRfbG9gLCBgZWVfc3RhcnRfaGlgKSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLlxcbiAgIC0gYHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQgaXNgIGFuZCBgc3RydWN0IGV4dDRfeGF0dHJfaW5mbyBpYCBhcmUgc3RhdGljYWxseSBpbml0aWFsaXplZCB3aXRoIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLlxcbjMuIE5vIGRhdGEgb3Igc3RydWN0dXJlIHdpdGggdW5pbml0aWFsaXplZCBwYWRkaW5nIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gY29udHJvbCBmbG93IGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuXFxuXFxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyBleHRlbnQgdHJlZSBjb3JydXB0aW9uLCBsb2NrIG9yZGVyIHZpb2xhdGlvbnMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIHNhbml0aXplcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzlmZmYzMjQ4ZmE3Y2Q3Y2JmMmQ0NGE2Y2M1NDQ0ZWJmMTc3ZDgzNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDAyOjUzOjAzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbmxpbmUuYyBiL2ZzL2V4dDQvaW5saW5lLmNcbmluZGV4IDgwNDVlNGZmMjcwYzcuLjkzOWM2YmYyMGI1YjcgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2lubGluZS5jXG4rKysgYi9mcy9leHQ0L2lubGluZS5jXG5AQCAtMTQsNiArMTQsNyBAQFxuICNpbmNsdWRlIFwiZXh0NC5oXCJcbiAjaW5jbHVkZSBcInhhdHRyLmhcIlxuICNpbmNsdWRlIFwidHJ1bmNhdGUuaFwiXG4rI2luY2x1ZGUgXCJleHQ0X2V4dGVudHMuaFwiXG4gXG4gI2RlZmluZSBFWFQ0X1hBVFRSX1NZU1RFTV9EQVRBXHRcImRhdGFcIlxuICNkZWZpbmUgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRVx0KChzaXplb2YoX19sZTMyKSAqIEVYVDRfTl9CTE9DS1MpKVxuQEAgLTEwNzAsMjEgKzEwNzEsMTI1IEBAIHN0YXRpYyBpbnQgZXh0NF91cGRhdGVfaW5saW5lX2RpcihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBleHQ0X3Jlc3RvcmVfaW5saW5lX2RhdGEoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi1cdFx0XHRcdCAgICAgc3RydWN0IGV4dDRfaWxvYyAqaWxvYyxcbi1cdFx0XHRcdCAgICAgdm9pZCAqYnVmLCBpbnQgaW5saW5lX3NpemUpXG4rc3RhdGljIGludCBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2ZzYmxrX3QgYmxvY2ssXG4rXHRcdFx0XHRcdHVuc2lnbmVkIGludCBsZW4sIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXG4ge1xuLVx0aW50IHJldDtcbitcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gRVhUNF9JKGlub2RlKTtcbitcdHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQgaXMgPSB7XG4rXHRcdC5zID0geyAubm90X2ZvdW5kID0gMCwgfSxcbitcdH07XG4rXHRzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvIGkgPSB7XG4rXHRcdC5uYW1lX2luZGV4ID0gRVhUNF9YQVRUUl9JTkRFWF9TWVNURU0sXG4rXHRcdC5uYW1lID0gRVhUNF9YQVRUUl9TWVNURU1fREFUQSxcbitcdFx0LnZhbHVlID0gTlVMTCxcbitcdFx0LnZhbHVlX2xlbiA9IDAsXG4rXHR9O1xuK1x0aW50IGVycm9yO1xuK1x0dm9pZCAqaV9ibG9ja19idWYgPSBOVUxMO1xuK1x0dm9pZCAqeGF0dHJfYnVmID0gTlVMTDtcbitcdHZvaWQgKmhlYWRlciA9IE5VTEw7XG4rXHR2b2lkICp0YWlsID0gTlVMTDtcbitcdGludCB4YXR0cl9zaXplO1xuK1x0c3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZTtcbiBcbi1cdHJldCA9IGV4dDRfY3JlYXRlX2lubGluZV9kYXRhKGhhbmRsZSwgaW5vZGUsIGlubGluZV9zaXplKTtcbi1cdGlmIChyZXQpIHtcbi1cdFx0ZXh0NF9tc2coaW5vZGUtXHUwMDNlaV9zYiwgS0VSTl9FTUVSRyxcbi1cdFx0XHRcImVycm9yIHJlc3RvcmluZyBpbmxpbmVfZGF0YSBmb3IgaW5vZGUgLS0gcG90ZW50aWFsIGRhdGEgbG9zcyEgKGlub2RlICVsbHUsIGVycm9yICVkKVwiLFxuLVx0XHRcdGlub2RlLVx1MDAzZWlfaW5vLCByZXQpO1xuLVx0XHRyZXR1cm47XG4rXHRpX2Jsb2NrX2J1ZiA9IGttYWxsb2MoRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSwgR0ZQX05PRlMpO1xuK1x0aWYgKCFpX2Jsb2NrX2J1Zikge1xuK1x0XHRlcnJvciA9IC1FTk9NRU07XG4rXHRcdGRvd25fd3JpdGUoXHUwMDI2ZWktXHUwMDNlaV9kYXRhX3NlbSk7XG4rXHRcdGdvdG8gZXJyb3I7XG4gXHR9XG4tXHRleHQ0X3dyaXRlX2lubGluZV9kYXRhKGlub2RlLCBpbG9jLCBidWYsIDAsIGlubGluZV9zaXplKTtcbi1cdGV4dDRfc2V0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XG4rXHRkb3duX3dyaXRlKFx1MDAyNmVpLVx1MDAzZWlfZGF0YV9zZW0pO1xuK1x0ZXJyb3IgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFx1MDAyNmlzLmlsb2MpO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRnb3RvIGVycm9yO1xuK1x0cmF3X2lub2RlID0gZXh0NF9yYXdfaW5vZGUoXHUwMDI2aXMuaWxvYyk7XG4rXHRoZWFkZXIgPSBJSERSKGlub2RlLCByYXdfaW5vZGUpO1xuK1x0dGFpbCA9IElUQUlMKGlub2RlLCByYXdfaW5vZGUpO1xuK1x0eGF0dHJfc2l6ZSA9IHRhaWwgLSBoZWFkZXI7XG4rXHR4YXR0cl9idWYgPSBrbWFsbG9jKHhhdHRyX3NpemUsIEdGUF9OT0ZTKTtcbitcdGlmICgheGF0dHJfYnVmKSB7XG4rXHRcdGVycm9yID0gLUVOT01FTTtcbitcdFx0Z290byBlcnJvcjtcbitcdH1cbitcdEJVRkZFUl9UUkFDRShpcy5pbG9jLmJoLCBcImdldF93cml0ZV9hY2Nlc3NcIik7XG4rXHRlcnJvciA9IGV4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgaW5vZGUtXHUwMDNlaV9zYiwgaXMuaWxvYy5iaCwgRVhUNF9KVFJfTk9ORSk7XG4rXHRpZiAoZXJyb3IpIHtcbitcdFx0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIGJsb2NrKTtcbitcdFx0ZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTtcbitcdFx0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBOVUxMLCBibG9jaywgbGVuLCAwKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXHRtZW1jcHkoaV9ibG9ja19idWYsICh2b2lkICopcmF3X2lub2RlLVx1MDAzZWlfYmxvY2ssIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuK1x0bWVtc2V0KCh2b2lkICopcmF3X2lub2RlLVx1MDAzZWlfYmxvY2ssIDAsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuK1x0bWVtc2V0KGVpLVx1MDAzZWlfZGF0YSwgMCwgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XG4rXHRtZW1jcHkoeGF0dHJfYnVmLCBoZWFkZXIsIHhhdHRyX3NpemUpO1xuK1x0aWYgKGV4dDRfaGFzX2ZlYXR1cmVfZXh0ZW50cyhpbm9kZS1cdTAwM2VpX3NiKSBcdTAwMjZcdTAwMjZcbitcdFx0KFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSB8fCBTX0lTUkVHKGlub2RlLVx1MDAzZWlfbW9kZSkgfHwgU19JU0xOSyhpbm9kZS1cdTAwM2VpX21vZGUpKSkge1xuK1x0XHRleHQ0X3NldF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpO1xuK1x0XHRleHQ0X2V4dF90cmVlX2luaXQoaGFuZGxlLCBpbm9kZSk7XG4rXHRcdHN0cnVjdCBleHQ0X2V4dF9wYXRoICpwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgMCwgTlVMTCwgMCk7XG4rXG4rXHRcdGlmIChJU19FUlIocGF0aCkpIHtcbitcdFx0XHRlcnJvciA9IFBUUl9FUlIocGF0aCk7XG4rXHRcdFx0Z290byByZWNvdmVyeTtcbitcdFx0fVxuK1x0XHRzdHJ1Y3QgZXh0NF9leHRlbnQgbmV3ZXg7XG4rXG4rXHRcdG5ld2V4LmVlX2Jsb2NrID0gY3B1X3RvX2xlMzIoMCk7XG4rXHRcdG5ld2V4LmVlX2xlbiA9IGNwdV90b19sZTE2KDEpO1xuK1x0XHRleHQ0X2V4dF9zdG9yZV9wYmxvY2soXHUwMDI2bmV3ZXgsIGJsb2NrKTtcbitcdFx0cGF0aCA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgXHUwMDI2bmV3ZXgsIDApO1xuK1x0XHRpZiAoSVNfRVJSKHBhdGgpKSB7XG4rXHRcdFx0ZXJyb3IgPSBQVFJfRVJSKHBhdGgpO1xuK1x0XHRcdGlmIChlcnJvciA9PSAtRURRVU9UIHx8IGVycm9yID09IC1FTk9TUEMpXG4rXHRcdFx0XHRnb3RvIHJlY292ZXJ5O1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGV4dDRfZnJlZV9leHRfcGF0aChwYXRoKTtcbitcdFx0fVxuK1x0fSBlbHNlIHtcbitcdFx0RVhUNF9JKGlub2RlKS1cdTAwM2VpX2RhdGFbMF0gPSBjcHVfdG9fbGUzMihibG9jayk7XG4rXHR9XG4rXHRlcnJvciA9IGV4dDRfeGF0dHJfaWJvZHlfZmluZChpbm9kZSwgXHUwMDI2aSwgXHUwMDI2aXMpO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRnb3RvIHJlY292ZXJ5O1xuK1x0aWYgKCFpcy5zLm5vdF9mb3VuZClcbitcdFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGUsIGlub2RlLCBcdTAwMjZpLCBcdTAwMjZpcyk7XG4rcmVjb3Zlcnk6XG4rXHRpZiAoZXJyb3IpIHtcbitcdFx0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIGJsb2NrKTtcbitcdFx0ZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTtcbitcdFx0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBOVUxMLCBibG9jaywgbGVuLCAwKTtcbitcdFx0bWVtY3B5KCh2b2lkICopcmF3X2lub2RlLVx1MDAzZWlfYmxvY2ssIGlfYmxvY2tfYnVmLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcbitcdFx0bWVtY3B5KGVpLVx1MDAzZWlfZGF0YSwgcmF3X2lub2RlLVx1MDAzZWlfYmxvY2ssIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuK1x0XHRtZW1jcHkoaGVhZGVyLCB4YXR0cl9idWYsIHhhdHRyX3NpemUpO1xuK1x0XHRleHQ0X2NsZWFyX2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUyk7XG4rXHR9IGVsc2Uge1xuK1x0XHRleHQ0X2NsZWFyX2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpO1xuK1x0XHRpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4rXHRcdFx0aV9zaXplX3dyaXRlKGlub2RlLCBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplKTtcbitcdFx0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZGlza3NpemUgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplO1xuK1x0XHR9XG4rXHRcdGdldF9iaChpcy5pbG9jLmJoKTtcbitcdFx0ZXJyb3IgPSBleHQ0X21hcmtfaWxvY19kaXJ0eShoYW5kbGUsIGlub2RlLCBcdTAwMjZpcy5pbG9jKTtcbitcdFx0RVhUNF9JKGlub2RlKS1cdTAwM2VpX2lubGluZV9vZmYgPSAwO1xuK1x0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfaW5saW5lX3NpemUgPSAwO1xuK1x0XHRleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XG4rXHRcdGJyZWxzZShiaCk7XG4rXHR9XG4rb3V0OlxuK1x0YnJlbHNlKGlzLmlsb2MuYmgpO1xuK1x0dXBfd3JpdGUoXHUwMDI2ZWktXHUwMDNlaV9kYXRhX3NlbSk7XG4rXHRrZnJlZShpX2Jsb2NrX2J1Zik7XG4rXHRrZnJlZSh4YXR0cl9idWYpO1xuK1x0cmV0dXJuIGVycm9yO1xuK2Vycm9yOlxuK1x0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIGJsb2NrKTtcbitcdGV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7XG4rXHRleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIGJsb2NrLCBsZW4sIDApO1xuK1x0dXBfd3JpdGUoXHUwMDI2ZWktXHUwMDNlaV9kYXRhX3NlbSk7XG4rXHRrZnJlZShpX2Jsb2NrX2J1Zik7XG4rXHRrZnJlZSh4YXR0cl9idWYpO1xuK1x0cmV0dXJuIGVycm9yO1xuIH1cbiBcbiBzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSxcbkBAIC0xMDkzLDkgKzExOTgsMTIgQEAgc3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXG4ge1xuIFx0aW50IGVycm9yO1xuIFx0dm9pZCAqYnVmID0gTlVMTDtcbi1cdHN0cnVjdCBidWZmZXJfaGVhZCAqZGF0YV9iaCA9IE5VTEw7XG4tXHRzdHJ1Y3QgZXh0NF9tYXBfYmxvY2tzIG1hcDtcbitcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMO1xuIFx0aW50IGlubGluZV9zaXplO1xuK1x0ZXh0NF9mc2Jsa190IG5ld2Jsb2NrID0gMDtcbitcdHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fcmVxdWVzdCBhcjtcbitcdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4rXHR1bnNpZ25lZCBpbnQgYWxsb2NhdGVkX2Jsb2NrO1xuIFxuIFx0aW5saW5lX3NpemUgPSBleHQ0X2dldF9pbmxpbmVfc2l6ZShpbm9kZSk7XG4gXHRidWYgPSBrbWFsbG9jKGlubGluZV9zaXplLCBHRlBfTk9GUyk7XG5AQCAtMTEyMCw2MyArMTIyOCw2MiBAQCBzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSxcbiBcdFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdGVycm9yID0gZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGUsIGlub2RlKTtcbi1cdGlmIChlcnJvcilcbi1cdFx0Z290byBvdXQ7XG4tXG4tXHRtYXAubV9sYmxrID0gMDtcbi1cdG1hcC5tX2xlbiA9IDE7XG4tXHRtYXAubV9mbGFncyA9IDA7XG4tXHRlcnJvciA9IGV4dDRfbWFwX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBcdTAwMjZtYXAsIEVYVDRfR0VUX0JMT0NLU19DUkVBVEUpO1xuK1x0bWVtc2V0KFx1MDAyNmFyLCAwLCBzaXplb2YoYXIpKTtcbitcdGFyLmlub2RlID0gaW5vZGU7XG4rXHRhci5sb2dpY2FsID0gMDtcbitcdGFyLmxlbiA9IDE7XG4rXHRpZiAoU19JU1JFRyhpbm9kZS1cdTAwM2VpX21vZGUpKVxuK1x0XHRhci5mbGFncyA9IEVYVDRfTUJfSElOVF9EQVRBO1xuK1x0ZWxzZVxuK1x0XHRhci5mbGFncyA9IDA7XG4rXHRuZXdibG9jayA9IGV4dDRfbWJfbmV3X2Jsb2NrcyhoYW5kbGUsIFx1MDAyNmFyLCBcdTAwMjZlcnJvcik7XG4gXHRpZiAoZXJyb3IgXHUwMDNjIDApXG4tXHRcdGdvdG8gb3V0X3Jlc3RvcmU7XG4tXHRpZiAoIShtYXAubV9mbGFncyBcdTAwMjYgRVhUNF9NQVBfTUFQUEVEKSkge1xuLVx0XHRlcnJvciA9IC1FSU87XG4tXHRcdGdvdG8gb3V0X3Jlc3RvcmU7XG4tXHR9XG4tXG4tXHRkYXRhX2JoID0gc2JfZ2V0YmxrKGlub2RlLVx1MDAzZWlfc2IsIG1hcC5tX3BibGspO1xuLVx0aWYgKCFkYXRhX2JoKSB7XG4rXHRcdGdvdG8gb3V0O1xuK1x0YWxsb2NhdGVkX2Jsb2NrID0gRVhUNF9DMkIoc2JpLCBhci5sZW4pO1xuK1x0YmggPSBzYl9nZXRibGsoaW5vZGUtXHUwMDNlaV9zYiwgbmV3YmxvY2spO1xuK1x0aWYgKCFiaCkge1xuIFx0XHRlcnJvciA9IC1FTk9NRU07XG4tXHRcdGdvdG8gb3V0X3Jlc3RvcmU7XG4rXHRcdGdvdG8gb3V0X2JoO1xuIFx0fVxuIFxuLVx0bG9ja19idWZmZXIoZGF0YV9iaCk7XG4tXHRlcnJvciA9IGV4dDRfam91cm5hbF9nZXRfY3JlYXRlX2FjY2VzcyhoYW5kbGUsIGlub2RlLVx1MDAzZWlfc2IsIGRhdGFfYmgsXG4rXHRsb2NrX2J1ZmZlcihiaCk7XG4rXHRlcnJvciA9IGV4dDRfam91cm5hbF9nZXRfY3JlYXRlX2FjY2VzcyhoYW5kbGUsIGlub2RlLVx1MDAzZWlfc2IsIGJoLFxuIFx0XHRcdFx0XHQgICAgICAgRVhUNF9KVFJfTk9ORSk7XG4gXHRpZiAoZXJyb3IpIHtcbi1cdFx0dW5sb2NrX2J1ZmZlcihkYXRhX2JoKTtcbitcdFx0dW5sb2NrX2J1ZmZlcihiaCk7XG4gXHRcdGVycm9yID0gLUVJTztcbi1cdFx0Z290byBvdXRfcmVzdG9yZTtcbitcdFx0Z290byBvdXRfYmg7XG4gXHR9XG4tXHRtZW1zZXQoZGF0YV9iaC1cdTAwM2ViX2RhdGEsIDAsIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUpO1xuK1x0bWVtc2V0KGJoLVx1MDAzZWJfZGF0YSwgMCwgaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZSk7XG4gXG4gXHRpZiAoIVNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuLVx0XHRtZW1jcHkoZGF0YV9iaC1cdTAwM2ViX2RhdGEsIGJ1ZiwgaW5saW5lX3NpemUpO1xuLVx0XHRzZXRfYnVmZmVyX3VwdG9kYXRlKGRhdGFfYmgpO1xuLVx0XHR1bmxvY2tfYnVmZmVyKGRhdGFfYmgpO1xuK1x0XHRtZW1jcHkoYmgtXHUwMDNlYl9kYXRhLCBidWYsIGlubGluZV9zaXplKTtcbitcdFx0c2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7XG4rXHRcdHVubG9ja19idWZmZXIoYmgpO1xuIFx0XHRlcnJvciA9IGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSxcbi1cdFx0XHRcdFx0XHQgICBpbm9kZSwgZGF0YV9iaCk7XG4rXHRcdFx0XHRcdFx0ICAgaW5vZGUsIGJoKTtcbiBcdH0gZWxzZSB7XG4tXHRcdHVubG9ja19idWZmZXIoZGF0YV9iaCk7XG4tXHRcdGlub2RlLVx1MDAzZWlfc2l6ZSA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemU7XG4tXHRcdGlfc2l6ZV93cml0ZShpbm9kZSwgaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZSk7XG4tXHRcdEVYVDRfSShpbm9kZSktXHUwMDNlaV9kaXNrc2l6ZSA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemU7XG4tXG4tXHRcdGVycm9yID0gZXh0NF9pbml0X2RpcmJsb2NrKGhhbmRsZSwgaW5vZGUsIGRhdGFfYmgsXG4rXHRcdHVubG9ja19idWZmZXIoYmgpO1xuK1x0XHRlcnJvciA9IGV4dDRfaW5pdF9kaXJibG9jayhoYW5kbGUsIGlub2RlLCBiaCxcbiBcdFx0XHQgIGxlMzJfdG9fY3B1KCgoc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKilidWYpLVx1MDAzZWlub2RlKSxcbiBcdFx0XHQgIGJ1ZiArIEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFLFxuIFx0XHRcdCAgaW5saW5lX3NpemUgLSBFWFQ0X0lOTElORV9ET1RET1RfU0laRSk7XG4tXHRcdGlmICghZXJyb3IpXG4tXHRcdFx0ZXJyb3IgPSBleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7XG4gXHR9XG4rb3V0X2JoOlxuK1x0aWYgKGVycm9yKSB7XG4rXHRcdGlmIChiaClcbitcdFx0XHRleHQ0X2ZvcmdldChoYW5kbGUsIDAsIGlub2RlLCBiaCwgbmV3YmxvY2spO1xuK1x0XHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7XG4gXG4tb3V0X3Jlc3RvcmU6XG4tXHRpZiAoZXJyb3IpXG4tXHRcdGV4dDRfcmVzdG9yZV9pbmxpbmVfZGF0YShoYW5kbGUsIGlub2RlLCBpbG9jLCBidWYsIGlubGluZV9zaXplKTtcbi1cbitcdFx0ZG93bl93cml0ZShcdTAwMjZlaS1cdTAwM2VpX2RhdGFfc2VtKTtcbitcdFx0ZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTtcbitcdFx0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBOVUxMLCBuZXdibG9jaywgYWxsb2NhdGVkX2Jsb2NrLCAwKTtcbitcdFx0dXBfd3JpdGUoXHUwMDI2ZWktXHUwMDNlaV9kYXRhX3NlbSk7XG4rXHR9IGVsc2Uge1xuK1x0XHRlcnJvciA9IGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrKGhhbmRsZSwgaW5vZGUsXG4rXHRcdFx0XHRuZXdibG9jaywgYWxsb2NhdGVkX2Jsb2NrLCBiaCk7XG4rXHR9XG4gb3V0OlxuLVx0YnJlbHNlKGRhdGFfYmgpO1xuIFx0a2ZyZWUoYnVmKTtcbiBcdHJldHVybiBlcnJvcjtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjo1MzoyNy43MzM2NjU1MjhaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTEyMTQzMzQ1OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipLTVNBTiBGdXp6aW5nIERldGVybWluYXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhc3Nlc3MgdGhpcyBwYXRjaCDigJMgZG9lcyBpdCB3YXJyYW50IGl0cyBvd24gS01TQU4gZnV6emluZyBzZXNzaW9uPyBCZWZvcmUgSSBjb21taXQgdG8gdGhhdCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgYWN0dWFsbHkgY2hhbmdlZC4gQ29udGV4dCBpcyBrZXksIHNvIEknbGwgc3RhcnQgYnkgdW5kZXJzdGFuZGluZyB0aGUgcGF0Y2gncyBwdXJwb3NlIGFuZCB0aGUgb3ZlcmFsbCBtb2RpZmljYXRpb25zIGl0IG1ha2VzLlxuXG5TcGVjaWZpY2FsbHksIEkgbmVlZCB0byBzZWUgd2hhdCdzIHRvdWNoZWQgaW4gYGZzL2V4dDQvaW5saW5lLmNgLiBUaGF0IGZpbGUgaXMgd2hlcmUgSSBleHBlY3QgdGhlIGNvcmUgb2YgdGhpcyBpbnRlcmFjdGlvbiB0byBiZS4gTm93LCBsZXQncyB6ZXJvIGluIG9uIGBmcy9leHQ0L2lubGluZS5jYCBhbmQgc3BlY2lmaWNhbGx5IGZvY3VzIG9uIGFuZCByZWFkIGFyb3VuZCB0aGUgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2tgIGZ1bmN0aW9uLiBUaGF0J3MgYSBjcml0aWNhbCBwb2ludCBmb3IgaW5saW5lIGRhdGEgYW5kIGlzIHdoZXJlIEkgZXhwZWN0IHRoZSBoZWFydCBvZiBhbnkgcG90ZW50aWFsIEtNU0FOIGlzc3VlcyB0byByZXNpZGUuIE9uY2UgSSB1bmRlcnN0YW5kIHRoZSBjb2RlIHRoYXQgaXMgdGhlcmUsIEkgY2FuIGRlY2lkZSBvbiB0aGUgbmVlZCBmb3IgZGVkaWNhdGVkIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MDAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjUzOjM4Ljk0ODAwMjg4NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDI4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC9pbmxpbmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDYwLFxuICBcIkxpbmVDb3VudFwiOiA5MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDYwOlxcdFxcdFxcdHJldHVybiAtRU5PU1BDO1xcbjEwNjE6XFx0XFxuMTA2MjpcXHRcXHRyZXQgPSBleHQ0X3VwZGF0ZV9pbmxpbmVfZGF0YShoYW5kbGUsIGRpcixcXG4xMDYzOlxcdFxcdFxcdFxcdFxcdCAgICAgIG5ld19zaXplICsgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XFxuMTA2NDpcXHRcXHRpZiAocmV0KVxcbjEwNjU6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xMDY2OlxcdFxcbjEwNjc6XFx0XFx0ZXh0NF91cGRhdGVfZmluYWxfZGUoZXh0NF9nZXRfaW5saW5lX3hhdHRyX3BvcyhkaXIsIGlsb2MpLCBvbGRfc2l6ZSxcXG4xMDY4OlxcdFxcdFxcdFxcdCAgICAgRVhUNF9JKGRpciktXFx1MDAzZWlfaW5saW5lX3NpemUgLVxcbjEwNjk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0RVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XFxuMTA3MDpcXHRcXHRkaXItXFx1MDAzZWlfc2l6ZSA9IEVYVDRfSShkaXIpLVxcdTAwM2VpX2Rpc2tzaXplID0gRVhUNF9JKGRpciktXFx1MDAzZWlfaW5saW5lX3NpemU7XFxuMTA3MTpcXHRcXHRyZXR1cm4gMDtcXG4xMDcyOlxcdH1cXG4xMDczOlxcdFxcbjEwNzQ6XFx0c3RhdGljIGludCBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2ZzYmxrX3QgYmxvY2ssXFxuMTA3NTpcXHRcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgbGVuLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxcbjEwNzY6XFx0e1xcbjEwNzc6XFx0XFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpO1xcbjEwNzg6XFx0XFx0c3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCBpcyA9IHtcXG4xMDc5OlxcdFxcdFxcdC5zID0geyAubm90X2ZvdW5kID0gMCwgfSxcXG4xMDgwOlxcdFxcdH07XFxuMTA4MTpcXHRcXHRzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvIGkgPSB7XFxuMTA4MjpcXHRcXHRcXHQubmFtZV9pbmRleCA9IEVYVDRfWEFUVFJfSU5ERVhfU1lTVEVNLFxcbjEwODM6XFx0XFx0XFx0Lm5hbWUgPSBFWFQ0X1hBVFRSX1NZU1RFTV9EQVRBLFxcbjEwODQ6XFx0XFx0XFx0LnZhbHVlID0gTlVMTCxcXG4xMDg1OlxcdFxcdFxcdC52YWx1ZV9sZW4gPSAwLFxcbjEwODY6XFx0XFx0fTtcXG4xMDg3OlxcdFxcdGludCBlcnJvcjtcXG4xMDg4OlxcdFxcdHZvaWQgKmlfYmxvY2tfYnVmID0gTlVMTDtcXG4xMDg5OlxcdFxcdHZvaWQgKnhhdHRyX2J1ZiA9IE5VTEw7XFxuMTA5MDpcXHRcXHR2b2lkICpoZWFkZXIgPSBOVUxMO1xcbjEwOTE6XFx0XFx0dm9pZCAqdGFpbCA9IE5VTEw7XFxuMTA5MjpcXHRcXHRpbnQgeGF0dHJfc2l6ZTtcXG4xMDkzOlxcdFxcdHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGU7XFxuMTA5NDpcXHRcXG4xMDk1OlxcdFxcdGlfYmxvY2tfYnVmID0ga21hbGxvYyhFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFLCBHRlBfTk9GUyk7XFxuMTA5NjpcXHRcXHRpZiAoIWlfYmxvY2tfYnVmKSB7XFxuMTA5NzpcXHRcXHRcXHRlcnJvciA9IC1FTk9NRU07XFxuMTA5ODpcXHRcXHRcXHRkb3duX3dyaXRlKFxcdTAwMjZlaS1cXHUwMDNlaV9kYXRhX3NlbSk7XFxuMTA5OTpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjExMDA6XFx0XFx0fVxcbjExMDE6XFx0XFx0ZG93bl93cml0ZShcXHUwMDI2ZWktXFx1MDAzZWlfZGF0YV9zZW0pO1xcbjExMDI6XFx0XFx0ZXJyb3IgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFxcdTAwMjZpcy5pbG9jKTtcXG4xMTAzOlxcdFxcdGlmIChlcnJvcilcXG4xMTA0OlxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuMTEwNTpcXHRcXHRyYXdfaW5vZGUgPSBleHQ0X3Jhd19pbm9kZShcXHUwMDI2aXMuaWxvYyk7XFxuMTEwNjpcXHRcXHRoZWFkZXIgPSBJSERSKGlub2RlLCByYXdfaW5vZGUpO1xcbjExMDc6XFx0XFx0dGFpbCA9IElUQUlMKGlub2RlLCByYXdfaW5vZGUpO1xcbjExMDg6XFx0XFx0eGF0dHJfc2l6ZSA9IHRhaWwgLSBoZWFkZXI7XFxuMTEwOTpcXHRcXHR4YXR0cl9idWYgPSBrbWFsbG9jKHhhdHRyX3NpemUsIEdGUF9OT0ZTKTtcXG4xMTEwOlxcdFxcdGlmICgheGF0dHJfYnVmKSB7XFxuMTExMTpcXHRcXHRcXHRlcnJvciA9IC1FTk9NRU07XFxuMTExMjpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjExMTM6XFx0XFx0fVxcbjExMTQ6XFx0XFx0QlVGRkVSX1RSQUNFKGlzLmlsb2MuYmgsIFxcXCJnZXRfd3JpdGVfYWNjZXNzXFxcIik7XFxuMTExNTpcXHRcXHRlcnJvciA9IGV4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgaW5vZGUtXFx1MDAzZWlfc2IsIGlzLmlsb2MuYmgsIEVYVDRfSlRSX05PTkUpO1xcbjExMTY6XFx0XFx0aWYgKGVycm9yKSB7XFxuMTExNzpcXHRcXHRcXHRleHQ0X2ZvcmdldChoYW5kbGUsIDAsIGlub2RlLCBiaCwgYmxvY2spO1xcbjExMTg6XFx0XFx0XFx0ZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTtcXG4xMTE5OlxcdFxcdFxcdGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgYmxvY2ssIGxlbiwgMCk7XFxuMTEyMDpcXHRcXHRcXHRnb3RvIG91dDtcXG4xMTIxOlxcdFxcdH1cXG4xMTIyOlxcdFxcdG1lbWNweShpX2Jsb2NrX2J1ZiwgKHZvaWQgKilyYXdfaW5vZGUtXFx1MDAzZWlfYmxvY2ssIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xcbjExMjM6XFx0XFx0bWVtc2V0KCh2b2lkICopcmF3X2lub2RlLVxcdTAwM2VpX2Jsb2NrLCAwLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcXG4xMTI0OlxcdFxcdG1lbXNldChlaS1cXHUwMDNlaV9kYXRhLCAwLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcXG4xMTI1OlxcdFxcdG1lbWNweSh4YXR0cl9idWYsIGhlYWRlciwgeGF0dHJfc2l6ZSk7XFxuMTEyNjpcXHRcXHRpZiAoZXh0NF9oYXNfZmVhdHVyZV9leHRlbnRzKGlub2RlLVxcdTAwM2VpX3NiKSBcXHUwMDI2XFx1MDAyNlxcbjExMjc6XFx0XFx0XFx0KFNfSVNESVIoaW5vZGUtXFx1MDAzZWlfbW9kZSkgfHwgU19JU1JFRyhpbm9kZS1cXHUwMDNlaV9tb2RlKSB8fCBTX0lTTE5LKGlub2RlLVxcdTAwM2VpX21vZGUpKSkge1xcbjExMjg6XFx0XFx0XFx0ZXh0NF9zZXRfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKTtcXG4xMTI5OlxcdFxcdFxcdGV4dDRfZXh0X3RyZWVfaW5pdChoYW5kbGUsIGlub2RlKTtcXG4xMTMwOlxcdFxcdFxcdHN0cnVjdCBleHQ0X2V4dF9wYXRoICpwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgMCwgTlVMTCwgMCk7XFxuMTEzMTpcXHRcXG4xMTMyOlxcdFxcdFxcdGlmIChJU19FUlIocGF0aCkpIHtcXG4xMTMzOlxcdFxcdFxcdFxcdGVycm9yID0gUFRSX0VSUihwYXRoKTtcXG4xMTM0OlxcdFxcdFxcdFxcdGdvdG8gcmVjb3Zlcnk7XFxuMTEzNTpcXHRcXHRcXHR9XFxuMTEzNjpcXHRcXHRcXHRzdHJ1Y3QgZXh0NF9leHRlbnQgbmV3ZXg7XFxuMTEzNzpcXHRcXG4xMTM4OlxcdFxcdFxcdG5ld2V4LmVlX2Jsb2NrID0gY3B1X3RvX2xlMzIoMCk7XFxuMTEzOTpcXHRcXHRcXHRuZXdleC5lZV9sZW4gPSBjcHVfdG9fbGUxNigxKTtcXG4xMTQwOlxcdFxcdFxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhcXHUwMDI2bmV3ZXgsIGJsb2NrKTtcXG4xMTQxOlxcdFxcdFxcdHBhdGggPSBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgaW5vZGUsIHBhdGgsIFxcdTAwMjZuZXdleCwgMCk7XFxuMTE0MjpcXHRcXHRcXHRpZiAoSVNfRVJSKHBhdGgpKSB7XFxuMTE0MzpcXHRcXHRcXHRcXHRlcnJvciA9IFBUUl9FUlIocGF0aCk7XFxuMTE0NDpcXHRcXHRcXHRcXHRpZiAoZXJyb3IgPT0gLUVEUVVPVCB8fCBlcnJvciA9PSAtRU5PU1BDKVxcbjExNDU6XFx0XFx0XFx0XFx0XFx0Z290byByZWNvdmVyeTtcXG4xMTQ2OlxcdFxcdFxcdH0gZWxzZSB7XFxuMTE0NzpcXHRcXHRcXHRcXHRleHQ0X2ZyZWVfZXh0X3BhdGgocGF0aCk7XFxuMTE0ODpcXHRcXHRcXHR9XFxuMTE0OTpcXHRcXHR9IGVsc2Uge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjo1MzozOC45NDgzNTIwMzVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk5Nzc4MDMyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIERhdGEgU3RyZWFtOiBBIFRhcmdldGVkIFJldmlldyoqXG5cbk9rYXksIHRoZSBpbml0aWFsIHNjYW4gc3VnZ2VzdHMgYSBwb3RlbnRpYWwgYXJlYSBvZiBpbnRlcmVzdCB3aXRoaW4gdGhlIGJyb2FkZXIgZGF0YXNldC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBkZWVwZXIgaW50byBhIHNwZWNpZmljLCBwb3RlbnRpYWxseSByZWxldmFudCBzZWdtZW50LiBSYXRoZXIgdGhhbiByZWx5aW5nIHNvbGVseSBvbiB0aGUgaGlnaC1sZXZlbCBzdW1tYXJpZXMgb3Igc3RhdGlzdGljYWwgb3ZlcnZpZXdzIEkndmUgYWxyZWFkeSBnZW5lcmF0ZWQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIHRoZSBkYXRhIGluIG1vcmUgZGV0YWlsLiBMZXQncyBwaW5wb2ludCBsaW5lcyAxMTUwIHRocm91Z2ggMTI1MC4gVGhpcyB0YXJnZXRlZCBhcHByb2FjaCBhbGxvd3MgbWUgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoaXMgcGFydGljdWxhciByZWdpb24sIGxvb2tpbmcgZm9yIHN1YnRsZSBwYXR0ZXJucywgb3V0bGllcnMsIG9yIGFub21hbGllcyB0aGF0IGEgYnJvYWRlciBzd2VlcCBtaWdodCBoYXZlIG1pc3NlZC4gRXhhbWluaW5nIHRoaXMgc3Vic2V0IGRpcmVjdGx5IHdpbGwgcHJvdmlkZSBhIG1vcmUgZ3JhbnVsYXIgdmlldyB0byBpbmZvcm0gdGhlIG5leHQgc3RhZ2Ugb2YgbXkgYW5hbHlzaXMuIFRoZSBjb250ZXh0IG9mIHRoZXNlIGxpbmVzIG1pZ2h0IGJlIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgd2hhdGV2ZXIgSSBhbSB0cnlpbmcgdG8gdW5kZXJzdGFuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ2NCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6NTM6NDAuOTQ2MTM1NjI0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L2lubGluZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNTAsXG4gIFwiTGluZUNvdW50XCI6IDkwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNTA6XFx0XFx0XFx0RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9kYXRhWzBdID0gY3B1X3RvX2xlMzIoYmxvY2spO1xcbjExNTE6XFx0XFx0fVxcbjExNTI6XFx0XFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2lib2R5X2ZpbmQoaW5vZGUsIFxcdTAwMjZpLCBcXHUwMDI2aXMpO1xcbjExNTM6XFx0XFx0aWYgKGVycm9yKVxcbjExNTQ6XFx0XFx0XFx0Z290byByZWNvdmVyeTtcXG4xMTU1OlxcdFxcdGlmICghaXMucy5ub3RfZm91bmQpXFxuMTE1NjpcXHRcXHRcXHRlcnJvciA9IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZSwgaW5vZGUsIFxcdTAwMjZpLCBcXHUwMDI2aXMpO1xcbjExNTc6XFx0cmVjb3Zlcnk6XFxuMTE1ODpcXHRcXHRpZiAoZXJyb3IpIHtcXG4xMTU5OlxcdFxcdFxcdGV4dDRfZm9yZ2V0KGhhbmRsZSwgMCwgaW5vZGUsIGJoLCBibG9jayk7XFxuMTE2MDpcXHRcXHRcXHRleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpO1xcbjExNjE6XFx0XFx0XFx0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBOVUxMLCBibG9jaywgbGVuLCAwKTtcXG4xMTYyOlxcdFxcdFxcdG1lbWNweSgodm9pZCAqKXJhd19pbm9kZS1cXHUwMDNlaV9ibG9jaywgaV9ibG9ja19idWYsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xcbjExNjM6XFx0XFx0XFx0bWVtY3B5KGVpLVxcdTAwM2VpX2RhdGEsIHJhd19pbm9kZS1cXHUwMDNlaV9ibG9jaywgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XFxuMTE2NDpcXHRcXHRcXHRtZW1jcHkoaGVhZGVyLCB4YXR0cl9idWYsIHhhdHRyX3NpemUpO1xcbjExNjU6XFx0XFx0XFx0ZXh0NF9jbGVhcl9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpO1xcbjExNjY6XFx0XFx0fSBlbHNlIHtcXG4xMTY3OlxcdFxcdFxcdGV4dDRfY2xlYXJfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9JTkxJTkVfREFUQSk7XFxuMTE2ODpcXHRcXHRcXHRpZiAoU19JU0RJUihpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbjExNjk6XFx0XFx0XFx0XFx0aV9zaXplX3dyaXRlKGlub2RlLCBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemUpO1xcbjExNzA6XFx0XFx0XFx0XFx0RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9kaXNrc2l6ZSA9IGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZTtcXG4xMTcxOlxcdFxcdFxcdH1cXG4xMTcyOlxcdFxcdFxcdGdldF9iaChpcy5pbG9jLmJoKTtcXG4xMTczOlxcdFxcdFxcdGVycm9yID0gZXh0NF9tYXJrX2lsb2NfZGlydHkoaGFuZGxlLCBpbm9kZSwgXFx1MDAyNmlzLmlsb2MpO1xcbjExNzQ6XFx0XFx0XFx0RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9pbmxpbmVfb2ZmID0gMDtcXG4xMTc1OlxcdFxcdFxcdEVYVDRfSShpbm9kZSktXFx1MDAzZWlfaW5saW5lX3NpemUgPSAwO1xcbjExNzY6XFx0XFx0XFx0ZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpO1xcbjExNzc6XFx0XFx0XFx0YnJlbHNlKGJoKTtcXG4xMTc4OlxcdFxcdH1cXG4xMTc5OlxcdG91dDpcXG4xMTgwOlxcdFxcdGJyZWxzZShpcy5pbG9jLmJoKTtcXG4xMTgxOlxcdFxcdHVwX3dyaXRlKFxcdTAwMjZlaS1cXHUwMDNlaV9kYXRhX3NlbSk7XFxuMTE4MjpcXHRcXHRrZnJlZShpX2Jsb2NrX2J1Zik7XFxuMTE4MzpcXHRcXHRrZnJlZSh4YXR0cl9idWYpO1xcbjExODQ6XFx0XFx0cmV0dXJuIGVycm9yO1xcbjExODU6XFx0ZXJyb3I6XFxuMTE4NjpcXHRcXHRleHQ0X2ZvcmdldChoYW5kbGUsIDAsIGlub2RlLCBiaCwgYmxvY2spO1xcbjExODc6XFx0XFx0ZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTtcXG4xMTg4OlxcdFxcdGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgYmxvY2ssIGxlbiwgMCk7XFxuMTE4OTpcXHRcXHR1cF93cml0ZShcXHUwMDI2ZWktXFx1MDAzZWlfZGF0YV9zZW0pO1xcbjExOTA6XFx0XFx0a2ZyZWUoaV9ibG9ja19idWYpO1xcbjExOTE6XFx0XFx0a2ZyZWUoeGF0dHJfYnVmKTtcXG4xMTkyOlxcdFxcdHJldHVybiBlcnJvcjtcXG4xMTkzOlxcdH1cXG4xMTk0OlxcdFxcbjExOTU6XFx0c3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXFxuMTE5NjpcXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbjExOTc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGV4dDRfaWxvYyAqaWxvYylcXG4xMTk4OlxcdHtcXG4xMTk5OlxcdFxcdGludCBlcnJvcjtcXG4xMjAwOlxcdFxcdHZvaWQgKmJ1ZiA9IE5VTEw7XFxuMTIwMTpcXHRcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDtcXG4xMjAyOlxcdFxcdGludCBpbmxpbmVfc2l6ZTtcXG4xMjAzOlxcdFxcdGV4dDRfZnNibGtfdCBuZXdibG9jayA9IDA7XFxuMTIwNDpcXHRcXHRzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX3JlcXVlc3QgYXI7XFxuMTIwNTpcXHRcXHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4xMjA2OlxcdFxcdHVuc2lnbmVkIGludCBhbGxvY2F0ZWRfYmxvY2s7XFxuMTIwNzpcXHRcXG4xMjA4OlxcdFxcdGlubGluZV9zaXplID0gZXh0NF9nZXRfaW5saW5lX3NpemUoaW5vZGUpO1xcbjEyMDk6XFx0XFx0YnVmID0ga21hbGxvYyhpbmxpbmVfc2l6ZSwgR0ZQX05PRlMpO1xcbjEyMTA6XFx0XFx0aWYgKCFidWYpIHtcXG4xMjExOlxcdFxcdFxcdGVycm9yID0gLUVOT01FTTtcXG4xMjEyOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjEyMTM6XFx0XFx0fVxcbjEyMTQ6XFx0XFxuMTIxNTpcXHRcXHRlcnJvciA9IGV4dDRfcmVhZF9pbmxpbmVfZGF0YShpbm9kZSwgYnVmLCBpbmxpbmVfc2l6ZSwgaWxvYyk7XFxuMTIxNjpcXHRcXHRpZiAoZXJyb3IgXFx1MDAzYyAwKVxcbjEyMTc6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTIxODpcXHRcXG4xMjE5OlxcdFxcdC8qXFxuMTIyMDpcXHRcXHQgKiBNYWtlIHN1cmUgdGhlIGlubGluZSBkaXJlY3RvcnkgZW50cmllcyBwYXNzIGNoZWNrcyBiZWZvcmUgd2UgdHJ5IHRvXFxuMTIyMTpcXHRcXHQgKiBjb252ZXJ0IHRoZW0sIHNvIHRoYXQgd2UgYXZvaWQgdG91Y2hpbmcgc3R1ZmYgdGhhdCBuZWVkcyBmc2NrLlxcbjEyMjI6XFx0XFx0ICovXFxuMTIyMzpcXHRcXHRpZiAoU19JU0RJUihpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbjEyMjQ6XFx0XFx0XFx0ZXJyb3IgPSBleHQ0X2NoZWNrX2FsbF9kZShpbm9kZSwgaWxvYy1cXHUwMDNlYmgsXFxuMTIyNTpcXHRcXHRcXHRcXHRcXHRcXHRidWYgKyBFWFQ0X0lOTElORV9ET1RET1RfU0laRSxcXG4xMjI2OlxcdFxcdFxcdFxcdFxcdFxcdGlubGluZV9zaXplIC0gRVhUNF9JTkxJTkVfRE9URE9UX1NJWkUpO1xcbjEyMjc6XFx0XFx0XFx0aWYgKGVycm9yKVxcbjEyMjg6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTIyOTpcXHRcXHR9XFxuMTIzMDpcXHRcXG4xMjMxOlxcdFxcdG1lbXNldChcXHUwMDI2YXIsIDAsIHNpemVvZihhcikpO1xcbjEyMzI6XFx0XFx0YXIuaW5vZGUgPSBpbm9kZTtcXG4xMjMzOlxcdFxcdGFyLmxvZ2ljYWwgPSAwO1xcbjEyMzQ6XFx0XFx0YXIubGVuID0gMTtcXG4xMjM1OlxcdFxcdGlmIChTX0lTUkVHKGlub2RlLVxcdTAwM2VpX21vZGUpKVxcbjEyMzY6XFx0XFx0XFx0YXIuZmxhZ3MgPSBFWFQ0X01CX0hJTlRfREFUQTtcXG4xMjM3OlxcdFxcdGVsc2VcXG4xMjM4OlxcdFxcdFxcdGFyLmZsYWdzID0gMDtcXG4xMjM5OlxcdFxcdG5ld2Jsb2NrID0gZXh0NF9tYl9uZXdfYmxvY2tzKGhhbmRsZSwgXFx1MDAyNmFyLCBcXHUwMDI2ZXJyb3IpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjo1Mzo0MC45NDYyODI0MjRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMyNTgzNDcxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgQmFjayBpbnRvIGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2sqKlxuXG5BbHJpZ2h0LCBsZXQncyBjaXJjbGUgYmFjayB0byBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja2AuIEkndmUgYmVlbiBmb2N1c2luZyBvbiB0aGUgYnJvYWRlciBwaWN0dXJlLCBidXQgbm93IGl0J3MgdGltZSB0byBkcmlsbCBkb3duLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgY3J1Y2lhbCBpbiB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uLiBJJ3ZlIGdvdCBhIGdvb2QgbWVudGFsIG1vZGVsIG9mIGhvdyBpbmxpbmUgZGF0YSB3b3JrcyB3aXRoaW4gZXh0NCwgYnV0IHRoaXMgZnVuY3Rpb24gaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiAqcHJlY2lzZWx5KiBob3cgaXQgaGFuZGxlcyB0aGUgY29udmVyc2lvbiBwcm9jZXNzIHdpdGhvdXQgcmVzb3J0aW5nIHRvIGxvY2tpbmcuIFdoYXQgYXJlIHRoZSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zPyBXaGF0IGFyZSB0aGUga2V5IGFzc3VtcHRpb25zIGl0IG1ha2VzIGFib3V0IHRoZSBzdGF0ZSBvZiB0aGUgaW5vZGUgYW5kIGJsb2NrIGdyb3VwPyBXaGF0IHNwZWNpZmljIGRhdGEgc3RydWN0dXJlcyBhbmQgZmllbGRzIGFyZSBiZWluZyBtYW5pcHVsYXRlZD8gSSBuZWVkIHRvIG1ldGljdWxvdXNseSB0cmFjZSB0aGUgY29udHJvbCBmbG93LCBwYXlpbmcgYXR0ZW50aW9uIHRvIGVkZ2UgY2FzZXMuIEknbSBsb29raW5nIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBhcmVhcyB3aGVyZSBhIGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9uIGNvdWxkIGxlYWQgdG8gZGF0YSBjb3JydXB0aW9uIG9yIGluY29uc2lzdGVuY3kuIElzIHRoZSB1c2Ugb2YgdGhlIGBpX211dGV4YCBzdWZmaWNpZW50IGluIHRoaXMgY29udGV4dCwgb3IgaXMgdGhlcmUgYW5vdGhlciByYWNlIGNvbmRpdGlvbj8gQXJlIHRoZXJlIGRhdGEgaW50ZWdyaXR5IGNoZWNrcyB0aGF0IEkgbWlnaHQgYmUgb3Zlcmxvb2tpbmc/IEFueSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgam91cm5hbCB0aGF0IG5lZWQgc2NydXRpbnk/IE9rYXksIGxldCdzIHN0ZXAgdGhyb3VnaCBpdCBsaW5lIGJ5IGxpbmUsIGtlZXBpbmcgYSBrZWVuIGV5ZSBvbiB0aGUgYXRvbWljIG9wZXJhdGlvbnMgYW5kIG1lbW9yeSBiYXJyaWVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI0NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6NTM6NDMuMjcyMTE5OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE1ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC9pbmxpbmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjQwLFxuICBcIkxpbmVDb3VudFwiOiA1NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjQwOlxcdFxcdGlmIChlcnJvciBcXHUwMDNjIDApXFxuMTI0MTpcXHRcXHRcXHRnb3RvIG91dDtcXG4xMjQyOlxcdFxcdGFsbG9jYXRlZF9ibG9jayA9IEVYVDRfQzJCKHNiaSwgYXIubGVuKTtcXG4xMjQzOlxcdFxcdGJoID0gc2JfZ2V0YmxrKGlub2RlLVxcdTAwM2VpX3NiLCBuZXdibG9jayk7XFxuMTI0NDpcXHRcXHRpZiAoIWJoKSB7XFxuMTI0NTpcXHRcXHRcXHRlcnJvciA9IC1FTk9NRU07XFxuMTI0NjpcXHRcXHRcXHRnb3RvIG91dF9iaDtcXG4xMjQ3OlxcdFxcdH1cXG4xMjQ4OlxcdFxcbjEyNDk6XFx0XFx0bG9ja19idWZmZXIoYmgpO1xcbjEyNTA6XFx0XFx0ZXJyb3IgPSBleHQ0X2pvdXJuYWxfZ2V0X2NyZWF0ZV9hY2Nlc3MoaGFuZGxlLCBpbm9kZS1cXHUwMDNlaV9zYiwgYmgsXFxuMTI1MTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgRVhUNF9KVFJfTk9ORSk7XFxuMTI1MjpcXHRcXHRpZiAoZXJyb3IpIHtcXG4xMjUzOlxcdFxcdFxcdHVubG9ja19idWZmZXIoYmgpO1xcbjEyNTQ6XFx0XFx0XFx0ZXJyb3IgPSAtRUlPO1xcbjEyNTU6XFx0XFx0XFx0Z290byBvdXRfYmg7XFxuMTI1NjpcXHRcXHR9XFxuMTI1NzpcXHRcXHRtZW1zZXQoYmgtXFx1MDAzZWJfZGF0YSwgMCwgaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmxvY2tzaXplKTtcXG4xMjU4OlxcdFxcbjEyNTk6XFx0XFx0aWYgKCFTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuMTI2MDpcXHRcXHRcXHRtZW1jcHkoYmgtXFx1MDAzZWJfZGF0YSwgYnVmLCBpbmxpbmVfc2l6ZSk7XFxuMTI2MTpcXHRcXHRcXHRzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTtcXG4xMjYyOlxcdFxcdFxcdHVubG9ja19idWZmZXIoYmgpO1xcbjEyNjM6XFx0XFx0XFx0ZXJyb3IgPSBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsXFxuMTI2NDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBpbm9kZSwgYmgpO1xcbjEyNjU6XFx0XFx0fSBlbHNlIHtcXG4xMjY2OlxcdFxcdFxcdHVubG9ja19idWZmZXIoYmgpO1xcbjEyNjc6XFx0XFx0XFx0ZXJyb3IgPSBleHQ0X2luaXRfZGlyYmxvY2soaGFuZGxlLCBpbm9kZSwgYmgsXFxuMTI2ODpcXHRcXHRcXHRcXHQgIGxlMzJfdG9fY3B1KCgoc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKilidWYpLVxcdTAwM2Vpbm9kZSksXFxuMTI2OTpcXHRcXHRcXHRcXHQgIGJ1ZiArIEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFLFxcbjEyNzA6XFx0XFx0XFx0XFx0ICBpbmxpbmVfc2l6ZSAtIEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFKTtcXG4xMjcxOlxcdFxcdH1cXG4xMjcyOlxcdG91dF9iaDpcXG4xMjczOlxcdFxcdGlmIChlcnJvcikge1xcbjEyNzQ6XFx0XFx0XFx0aWYgKGJoKVxcbjEyNzU6XFx0XFx0XFx0XFx0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIG5ld2Jsb2NrKTtcXG4xMjc2OlxcdFxcdFxcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gRVhUNF9JKGlub2RlKTtcXG4xMjc3OlxcdFxcbjEyNzg6XFx0XFx0XFx0ZG93bl93cml0ZShcXHUwMDI2ZWktXFx1MDAzZWlfZGF0YV9zZW0pO1xcbjEyNzk6XFx0XFx0XFx0ZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTtcXG4xMjgwOlxcdFxcdFxcdGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgbmV3YmxvY2ssIGFsbG9jYXRlZF9ibG9jaywgMCk7XFxuMTI4MTpcXHRcXHRcXHR1cF93cml0ZShcXHUwMDI2ZWktXFx1MDAzZWlfZGF0YV9zZW0pO1xcbjEyODI6XFx0XFx0fSBlbHNlIHtcXG4xMjgzOlxcdFxcdFxcdGVycm9yID0gZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2soaGFuZGxlLCBpbm9kZSxcXG4xMjg0OlxcdFxcdFxcdFxcdFxcdG5ld2Jsb2NrLCBhbGxvY2F0ZWRfYmxvY2ssIGJoKTtcXG4xMjg1OlxcdFxcdH1cXG4xMjg2OlxcdG91dDpcXG4xMjg3OlxcdFxcdGtmcmVlKGJ1Zik7XFxuMTI4ODpcXHRcXHRyZXR1cm4gZXJyb3I7XFxuMTI4OTpcXHR9XFxuMTI5MDpcXHRcXG4xMjkxOlxcdC8qXFxuMTI5MjpcXHQgKiBUcnkgdG8gYWRkIHRoZSBuZXcgZW50cnkgdG8gdGhlIGlubGluZSBkYXRhLlxcbjEyOTM6XFx0ICogSWYgc3VjY2VlZHMsIHJldHVybiAwLiBJZiBub3QsIGV4dGVuZGVkIHRoZSBpbmxpbmUgZGlyIGFuZCBjb3BpZWQgZGF0YSB0b1xcbjEyOTQ6XFx0ICogdGhlIG5ldyBjcmVhdGVkIGJsb2NrLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjo1Mzo0My4yNzIyNjM3MloiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NzE3ODA0NjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW5saW5lIERhdGEgQ29udmVyc2lvbiBQYXRjaCBpbiBleHQ0KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duLiBJdCdzIGZvY3VzZWQgb24gcmVmYWN0b3JpbmcgdGhlIGlubGluZSBkYXRhIGNvbnZlcnNpb24gcHJvY2VzcyB3aXRoaW4gYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2tgLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIGEgc29saWQgaW1wcm92ZW1lbnQsIGJ1dCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGUgZGV0YWlscyBhcmUgc291bmQuXG5cblByZXZpb3VzbHksIHRoZSBjb2RlIHdvdWxkIGRlc3Ryb3kgdGhlIGlubGluZSBkYXRhLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGEgZGF0YSBsb3NzIGlmIGJsb2NrIGFsbG9jYXRpb24gZmFpbGVkLiBUaGlzIHBhdGNoIHRha2VzIGEgbW9yZSByZXNpbGllbnQgYXBwcm9hY2guIEl0IG5vdyBhbGxvY2F0ZXMgdGhlIGJsb2NrIHVwLWZyb250IHVzaW5nIGBleHQ0X21iX25ld19ibG9ja3NgLiBUaGVuIGl0IHdyaXRlcyB0aGUgZGF0YSB0byB0aGUgYnVmZmVyIGhlYWQsIHdoaWNoIGlzIGdvb2QgYmVjYXVzZSBpdCBlbGltaW5hdGVzIHRoYXQgY3JpdGljYWwgd2luZG93LiBUaGUgdXNlIG9mIGBtZW1zZXRgIHRvIGNsZWFyIHRoZSBidWZmZXIgYmVmb3JlIGNvcHlpbmcgaW5saW5lIGRhdGEgc2VlbXMgc2Vuc2libGUuIEFuZCwgdGhlIGBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9ja2AgZnVuY3Rpb24gbG9va3MgbGlrZSBhIGNsZWFyLCBhdG9taWMgb3BlcmF0aW9uLiBUaGUga2V5IHBvaW50IGlzIHRoYXQgaXQgc2F2ZXMgdGhlIGlub2RlJ3MgaV9ibG9jayBhbmQgeGF0dHJzIGluIG1lbW9yeSBhbmQgcmV2ZXJ0cyB0aGVtIGlmIGFueSBlcnJvciBoYXBwZW5zLCB0aGlzIGFwcGVhcnMgdG8gYmUgYSBnb29kIHdheSB0byBoYW5kbGUgdGhlIGZhaWx1cmUgY2FzZS5cblxuTm93LCBmb3IgdGhlIG1lbW9yeSBzYWZldHkgY2hlY2s6IEkgYWx3YXlzIHNjcnV0aW5pemUgbWVtb3J5IGhhbmRsaW5nIHdpdGggZXh0cmVtZSBjYXJlLlxuXG4xLiAgYGlfYmxvY2tfYnVmYDogVGhlIGBrbWFsbG9jYCBhbmQgYG1lbWNweWAgdXNhZ2UgaXMgZ29vZCwgcHJvcGVybHkgd3JpdGluZyB0byBgaV9ibG9ja19idWZgIGJlZm9yZSBhbnkgcG90ZW50aWFsIHJlYWRzLiBUaGUgcmVzdG9yZSBtZWNoYW5pc20gY29ycmVjdGx5IHVzZXMgYG1lbWNweWAgYW5kIGBrZnJlZWAgb24gcmVjb3ZlcnkuIFRoaXMgbG9va3Mgc2FmZS5cblxuMi4gIGB4YXR0cl9idWZgOiBTaW1pbGFyIHRvIGBpX2Jsb2NrX2J1ZmAsIHRoZSBhbGxvY2F0aW9uLCB3cml0ZSB3aXRoIGBtZW1jcHlgLCBhbmQgcmVjb3ZlcnkgbWVjaGFuaXNtIHNlZW0gY29ycmVjdC4gVGhlIHNpemUgY2FsY3VsYXRpb24gYHhhdHRyX3NpemUgPSB0YWlsIC0gaGVhZGVyYCBuZWVkcyBhIHF1aWNrIG1lbnRhbCB2ZXJpZmljYXRpb24sIGJ1dCBvbiB0aGUgc3VyZmFjZSwgaXQgbG9va3MgZmluZS5cblxuMy4gIGBzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9maW5kYCBhbmQgYHN0cnVjdCBleHQ0X3hhdHRyX2luZm9gOiBUaGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlc2Ugc3RydWN0cyBpcyBzdHJhaWdodGZvcndhcmQgYW5kIGV4cGVjdGVkLlxuXG40LiAgYHN0cnVjdCBleHQ0X2V4dGVudCBuZXdleGA6IFRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgZXh0ZW50IHN0cnVjdHVyZSB3aXRoIGBlZV9ibG9jayA9IGNwdV90b19sZTMyKDApYCBhbmQgYGVlX2xlbiA9IGNwdV90b19sZTE2KDEpYCBpcyBzdGFuZGFyZCBwcmFjdGljZS4gTm93IEkgc2hvdWxkIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgZXh0NF9leHRlbnRgIGFuZCBhbHNvIGBleHQ0X2V4dF9zdG9yZV9wYmxvY2tgLiBJIG5lZWQgdG8gY29uZmlybSB0aGVyZSBhcmVuJ3QgYW55IHBvdGVudGlhbCBvdmVyZmxvd3Mgb3IgdW5leHBlY3RlZCBiZWhhdmlvciBpbiB0aG9zZSBmdW5jdGlvbnMgb3Igc3RydWN0dXJlcy5cblxuT3ZlcmFsbCwgdGhlIHBhdGNoIGxvb2tzIHdlbGwtc3RydWN0dXJlZCBhbmQgZm9jdXNlcyBvbiBkYXRhIGludGVncml0eSwgd2hpY2ggaXMgYSBnb29kIHRoaW5nLiBXaXRoIHRoZSBwbGFubmVkIGZvbGxvdyB1cCBvbiB0aGUgYHN0cnVjdCBleHQ0X2V4dGVudGAgYW5kIGBleHQ0X2V4dF9zdG9yZV9wYmxvY2tgIGRldGFpbHMgSSBjYW4gc2lnbiBvZmYgb24gdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0NTIsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjo1Mzo0OS45OTAwNzE4MDNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMTgzMTE0LCJFcnJvciI6ImJhZCBleHByZXNzaW9uOiBmYXRhbDogLWUgb3B0aW9uLCAnc3RydWN0IGV4dDRfZXh0ZW50IHsnOiBVbm1hdGNoZWQgXFx7IiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGV4dDRfZXh0ZW50IHtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJiYWQgZXhwcmVzc2lvbjogZmF0YWw6IC1lIG9wdGlvbiwgJ3N0cnVjdCBleHQ0X2V4dGVudCB7JzogVW5tYXRjaGVkIFxcXFx7XCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjUzOjUwLjA3MTI2NTA5N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTQ1Mjc0ODM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipHcmVwIFN0cmF0ZWd5IGZvciBgc3RydWN0IGV4dDRfZXh0ZW50YCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHdvcmsuIEkgbmVlZCB0byBmaW5kIGFsbCBpbnN0YW5jZXMgb2YgYHN0cnVjdCBleHQ0X2V4dGVudGAgaW4gdGhlIGNvZGViYXNlLiBCdXQsIGFuZCB0aGlzIGlzIGNydWNpYWwsIEkgbmVlZCB0byBhdm9pZCBhbnkgZ290Y2hhcyB3aXRoIHJlZ2V4IGVuZ2luZXMgYW5kIGJyYWNlcywgYXMgdGhvc2UgYXJlIGFsd2F5cyBhIHBhaW4uIFRoZSBwb3RlbnRpYWwgZm9yIG1pc2ludGVycHJldGF0aW9uIHdpdGggYnJhY2tldGVkIHBhdHRlcm5zIGFuZCB0aGUgbGlrZSBpcyB0b28gaGlnaC4gU28sIEknbSBnb2luZyB0byBrZWVwIGl0IGNsZWFuIGFuZCBzaW1wbGUuIEknbGwgc3RpY2sgdG8gYSBkaXJlY3QgYGdyZXBgIGZvciBgc3RydWN0IGV4dDRfZXh0ZW50YCwgbm8gZmFuY3kgcmVnZXgsIG5vIGF0dGVtcHRpbmcgY2xldmVyIHNob3J0Y3V0cy4gU29tZXRpbWVzIHRoZSBtb3N0IHN0cmFpZ2h0Zm9yd2FyZCBhcHByb2FjaCBpcyB0aGUgbW9zdCByZWxpYWJsZSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBjb21wbGV4IGNvZGUgYW5kIHRoZSBudWFuY2VzIG9mIHZhcmlvdXMgYGdyZXBgIGltcGxlbWVudGF0aW9ucy4gU2ltcGxpY2l0eSB0cnVtcHMgY2xldmVybmVzcyBoZXJlOyBJIG5lZWQgYWNjdXJhY3kgYWJvdmUgYWxsIGVsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzc3LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6NTM6NTIuMDE2NTQyMDMxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDg5MDY0NTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBleHQ0X2V4dGVudCBcXFxce1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2V4dDRfZXh0ZW50cy5oPTQ4PXN0cnVjdCBleHQ0X2V4dGVudF90YWlsIHtcXG4tLVxcbmZzL2V4dDQvZXh0NF9leHRlbnRzLmgtNTUtICovXFxuZnMvZXh0NC9leHQ0X2V4dGVudHMuaDo1NjpzdHJ1Y3QgZXh0NF9leHRlbnQge1xcbmZzL2V4dDQvZXh0NF9leHRlbnRzLmgtNTctXFx0X19sZTMyXFx0ZWVfYmxvY2s7XFx0LyogZmlyc3QgbG9naWNhbCBibG9jayBleHRlbnQgY292ZXJzICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjUzOjU0LjUwNTYxMzYwNVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTA4OTYxMzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIEV4dGVudHMgaW4gZXh0NCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZXh0ZW50cyBhcmUgaW1wbGVtZW50ZWQgaW4gdGhlIGV4dDQgZmlsZXN5c3RlbSwgc3BlY2lmaWNhbGx5LiBUaGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGhlYWRlciBmaWxlLCB3aGljaCB1c3VhbGx5IGRlZmluZXMgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgYW5kIGNvbnN0YW50cy4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgZnMvZXh0NC9leHQ0X2V4dGVudHMuaGAgYW5kIHRha2UgYSBsb29rIGFyb3VuZCBsaW5lIDU2LiBJJ20gaG9waW5nIHRvIGZpbmQgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgdG8gcmVwcmVzZW50IGFuIGV4dGVudCwgd2hpY2ggd2lsbCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgcmVzdCBvZiB0aGUgaW1wbGVtZW50YXRpb24uIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdCEgSSdtIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2UgdGhlIGBleHQ0X2V4dGVudF9oZWFkZXJgLCBgZXh0NF9leHRlbnRgLCBhbmQgcG9zc2libHkgc29tZSByZWxhdGVkIHN0cnVjdHVyZXMgZm9yIG1hbmFnaW5nIHRoZSBleHRlbnQgdHJlZSwgaWYgdGhleSdyZSB1c2luZyBvbmUuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBvbi1kaXNrIGZvcm1hdCBhbmQgaG93IHRoZSBsb2dpY2FsLXRvLXBoeXNpY2FsIG1hcHBpbmcgaXMgaGFuZGxlZC4gS25vd2luZyB0aGlzIHNob3VsZCBwcm92aWRlIGtleSBpbnNpZ2h0IGludG8gdW5kZXJzdGFuZGluZyBmaWxlIGFsbG9jYXRpb24gaW4gdGhpcyBmaWxlc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjExMywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjUzOjU2LjYxNDU3NzA4NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDc5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L2V4dDRfZXh0ZW50cy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDUwOlxcdH07XFxuICA1MTpcXHRcXG4gIDUyOlxcdC8qXFxuICA1MzpcXHQgKiBUaGlzIGlzIHRoZSBleHRlbnQgb24tZGlzayBzdHJ1Y3R1cmUuXFxuICA1NDpcXHQgKiBJdCdzIHVzZWQgYXQgdGhlIGJvdHRvbSBvZiB0aGUgdHJlZS5cXG4gIDU1OlxcdCAqL1xcbiAgNTY6XFx0c3RydWN0IGV4dDRfZXh0ZW50IHtcXG4gIDU3OlxcdFxcdF9fbGUzMlxcdGVlX2Jsb2NrO1xcdC8qIGZpcnN0IGxvZ2ljYWwgYmxvY2sgZXh0ZW50IGNvdmVycyAqL1xcbiAgNTg6XFx0XFx0X19sZTE2XFx0ZWVfbGVuO1xcdFxcdC8qIG51bWJlciBvZiBibG9ja3MgY292ZXJlZCBieSBleHRlbnQgKi9cXG4gIDU5OlxcdFxcdF9fbGUxNlxcdGVlX3N0YXJ0X2hpO1xcdC8qIGhpZ2ggMTYgYml0cyBvZiBwaHlzaWNhbCBibG9jayAqL1xcbiAgNjA6XFx0XFx0X19sZTMyXFx0ZWVfc3RhcnRfbG87XFx0LyogbG93IDMyIGJpdHMgb2YgcGh5c2ljYWwgYmxvY2sgKi9cXG4gIDYxOlxcdH07XFxuICA2MjpcXHRcXG4gIDYzOlxcdC8qXFxuICA2NDpcXHQgKiBUaGlzIGlzIGluZGV4IG9uLWRpc2sgc3RydWN0dXJlLlxcbiAgNjU6XFx0ICogSXQncyB1c2VkIGF0IGFsbCB0aGUgbGV2ZWxzIGV4Y2VwdCB0aGUgYm90dG9tLlxcbiAgNjY6XFx0ICovXFxuICA2NzpcXHRzdHJ1Y3QgZXh0NF9leHRlbnRfaWR4IHtcXG4gIDY4OlxcdFxcdF9fbGUzMlxcdGVpX2Jsb2NrO1xcdC8qIGluZGV4IGNvdmVycyBsb2dpY2FsIGJsb2NrcyBmcm9tICdibG9jaycgKi9cXG4gIDY5OlxcdFxcdF9fbGUzMlxcdGVpX2xlYWZfbG87XFx0LyogcG9pbnRlciB0byB0aGUgcGh5c2ljYWwgYmxvY2sgb2YgdGhlIG5leHQgKlxcbiAgNzA6XFx0XFx0XFx0XFx0XFx0ICogbGV2ZWwuIGxlYWYgb3IgbmV4dCBpbmRleCBjb3VsZCBiZSB0aGVyZSAqL1xcbiAgNzE6XFx0XFx0X19sZTE2XFx0ZWlfbGVhZl9oaTtcXHQvKiBoaWdoIDE2IGJpdHMgb2YgcGh5c2ljYWwgYmxvY2sgKi9cXG4gIDcyOlxcdFxcdF9fdTE2XFx0ZWlfdW51c2VkO1xcbiAgNzM6XFx0fTtcXG4gIDc0OlxcdFxcbiAgNzU6XFx0LypcXG4gIDc2OlxcdCAqIEVhY2ggYmxvY2sgKGxlYXZlcyBhbmQgaW5kZXhlcyksIGV2ZW4gaW5vZGUtc3RvcmVkIGhhcyBoZWFkZXIuXFxuICA3NzpcXHQgKi9cXG4gIDc4OlxcdHN0cnVjdCBleHQ0X2V4dGVudF9oZWFkZXIge1xcbiAgNzk6XFx0XFx0X19sZTE2XFx0ZWhfbWFnaWM7XFx0LyogcHJvYmFibHkgd2lsbCBzdXBwb3J0IGRpZmZlcmVudCBmb3JtYXRzICovXFxuICA4MDpcXHRcXHRfX2xlMTZcXHRlaF9lbnRyaWVzO1xcdC8qIG51bWJlciBvZiB2YWxpZCBlbnRyaWVzICovXFxuICA4MTpcXHRcXHRfX2xlMTZcXHRlaF9tYXg7XFx0XFx0LyogY2FwYWNpdHkgb2Ygc3RvcmUgaW4gZW50cmllcyAqL1xcbiAgODI6XFx0XFx0X19sZTE2XFx0ZWhfZGVwdGg7XFx0LyogaGFzIHRyZWUgcmVhbCB1bmRlcmx5aW5nIGJsb2Nrcz8gKi9cXG4gIDgzOlxcdFxcdF9fbGUzMlxcdGVoX2dlbmVyYXRpb247XFx0LyogZ2VuZXJhdGlvbiBvZiB0aGUgdHJlZSAqL1xcbiAgODQ6XFx0fTtcXG4gIDg1OlxcdFxcbiAgODY6XFx0I2RlZmluZSBFWFQ0X0VYVF9NQUdJQ1xcdFxcdGNwdV90b19sZTE2KDB4ZjMwYSlcXG4gIDg3OlxcdCNkZWZpbmUgRVhUNF9NQVhfRVhURU5UX0RFUFRIIDVcXG4gIDg4OlxcdFxcbiAgODk6XFx0I2RlZmluZSBFWFQ0X0VYVEVOVF9UQUlMX09GRlNFVChoZHIpIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6NTM6NTYuNjE0NjUzNTQ1WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1OTI0MzEzMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBleHQ0X2V4dF9zdG9yZV9wYmxvY2sqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBleHQ0X2V4dF9zdG9yZV9wYmxvY2tgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBzY2hlbWUgb2YgZXh0ZW50IG1hbmFnZW1lbnQgd2l0aGluIGV4dDQuIEknbSBhc3N1bWluZyB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGFsbG9jYXRpb24gb3IgZGVhbGxvY2F0aW9uIG9mIHBoeXNpY2FsIGJsb2NrcyByZWxhdGVkIHRvIGFuIGV4dGVudCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgZXh0ZW50IHRyZWUuIExldCdzIHNlZSwgd2hhdCBhcmUgdGhlIGtleSBwYXJhbWV0ZXJzIGl0IG9wZXJhdGVzIG9uPyBJJ2xsIGJldCBpdCdzIHNvbWV0aGluZyBhbG9uZyB0aGUgbGluZXMgb2YgdGhlIGlub2RlLCB0aGUgZXh0ZW50IGl0c2VsZiAob3IgYSBwb2ludGVyIHRvIGl0KSwgYW5kIHByb2JhYmx5IHRoZSBsb2dpY2FsIGJsb2NrIG51bWJlciBhbmQgdGhlIG51bWJlciBvZiBibG9ja3MgdG8gaGFuZGxlLiBJJ20gYWxzbyBjdXJpb3VzIGFib3V0IHRoZSBlcnJvciBoYW5kbGluZyDigJMgZG9lcyBpdCByZXR1cm4gYW4gZXJyb3IgY29kZSBvciByZWx5IG9uIGFzc2VydGlvbnM/IFRoZSByZXR1cm4gdmFsdWUgcHJvYmFibHkgaW5kaWNhdGVzIHRoZSBzdWNjZXNzIG9yIGZhaWx1cmUgb2YgdGhlIG9wZXJhdGlvbiwgYnV0IEkgd2FudCB0byB1bmRlcnN0YW5kICpob3cqIGl0IHNpZ25hbHMgdGhhdCBmYWlsdXJlLiBTcGVjaWZpY2FsbHksIEknZCBuZWVkIHRvIHRyYWNlIHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IHJldHVybmVkIGVycm9ycy4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBpdCdzIGNvcnJlY3RseSBoYW5kbGluZyBib3RoIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBzY2VuYXJpb3MuIElzIHRoZXJlIGEgZGlzdGluY3Rpb24gaW4gaG93IGl0IGhhbmRsZXMgZGlyZWN0LCBpbmRpcmVjdCwgYW5kIGRvdWJseSBpbmRpcmVjdCBibG9ja3MgaW4gdGhlIGV4dGVudCB0cmVlPyBGaW5hbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uJ3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgam91cm5hbGluZyBsYXllci4gRG9lcyBpdCB1dGlsaXplIGpvdXJuYWxfc3RhcnQsIGpvdXJuYWxfZW5kLCBldGM/IElzIHRoZXJlIGFueSBwb3RlbnRpYWwgZm9yIGRhdGEgbG9zcyBvciBjb3JydXB0aW9uIGlmIHRoZSBqb3VybmFsIGlzbid0IHByb3Blcmx5IGhhbmRsZWQgaGVyZT8gTGV0J3MgdGFrZSBhIGxvb2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDQ0LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjo1Mzo1OS4yMDcwODgxNTlaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODg3NDcwMjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9leHRfc3RvcmVfcGJsb2NrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZXh0NF9leHRlbnRzLmg9MjMyPXN0YXRpYyBpbmxpbmUgZXh0NF9mc2Jsa190IGV4dDRfaWR4X3BibG9jayhzdHJ1Y3QgZXh0NF9leHRlbnRfaWR4ICppeClcXG4tLVxcbmZzL2V4dDQvZXh0NF9leHRlbnRzLmgtMjQxLS8qXFxuZnMvZXh0NC9leHQ0X2V4dGVudHMuaDoyNDI6ICogZXh0NF9leHRfc3RvcmVfcGJsb2NrOlxcbmZzL2V4dDQvZXh0NF9leHRlbnRzLmgtMjQzLSAqIHN0b3JlcyBhIGxhcmdlIHBoeXNpY2FsIGJsb2NrIG51bWJlciBpbnRvIGFuIGV4dGVudCBzdHJ1Y3QsXFxuLS1cXG5mcy9leHQ0L2V4dDRfZXh0ZW50cy5oLTI0NS0gKi9cXG5mcy9leHQ0L2V4dDRfZXh0ZW50cy5oOjI0NjpzdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9leHRfc3RvcmVfcGJsb2NrKHN0cnVjdCBleHQ0X2V4dGVudCAqZXgsXFxuZnMvZXh0NC9leHQ0X2V4dGVudHMuaC0yNDctXFx0XFx0XFx0XFx0XFx0IGV4dDRfZnNibGtfdCBwYilcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmM9MjI3PXN0YXRpYyBpbnQgZXh0ZW50c19rdW5pdF9pbml0KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmMtMzE5LVxcdEVYVF9GSVJTVF9FWFRFTlQoZWgpLVxcdTAwM2VlZV9sZW4gPSBjcHVfdG9fbGUxNihFWFRfREFUQV9MRU4pO1xcbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmM6MzIwOlxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhFWFRfRklSU1RfRVhURU5UKGVoKSwgRVhUX0RBVEFfUEJMSyk7XFxuZnMvZXh0NC9leHRlbnRzLXRlc3QuYy0zMjEtXFx0aWYgKCFwYXJhbSB8fCBwYXJhbS1cXHUwMDNlaXNfdW53cml0X2F0X3N0YXJ0KVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9MTk5Mj1leHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy0yMDg1LVxcdFxcdFxcdGV4LVxcdTAwM2VlZV9ibG9jayA9IG5ld2V4dC1cXHUwMDNlZWVfYmxvY2s7XFxuZnMvZXh0NC9leHRlbnRzLmM6MjA4NjpcXHRcXHRcXHRleHQ0X2V4dF9zdG9yZV9wYmxvY2soZXgsIGV4dDRfZXh0X3BibG9jayhuZXdleHQpKTtcXG5mcy9leHQ0L2V4dGVudHMuYy0yMDg3LVxcdFxcdFxcdGV4LVxcdTAwM2VlZV9sZW4gPSBjcHVfdG9fbGUxNihleHQ0X2V4dF9nZXRfYWN0dWFsX2xlbihleClcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTIxOTYtXFx0bmVhcmV4LVxcdTAwM2VlZV9ibG9jayA9IG5ld2V4dC1cXHUwMDNlZWVfYmxvY2s7XFxuZnMvZXh0NC9leHRlbnRzLmM6MjE5NzpcXHRleHQ0X2V4dF9zdG9yZV9wYmxvY2sobmVhcmV4LCBleHQ0X2V4dF9wYmxvY2sobmV3ZXh0KSk7XFxuZnMvZXh0NC9leHRlbnRzLmMtMjE5OC1cXHRuZWFyZXgtXFx1MDAzZWVlX2xlbiA9IG5ld2V4dC1cXHUwMDNlZWVfbGVuO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9MjYxND1leHQ0X2V4dF9ybV9sZWFmKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy0yNzM5LVxcdFxcdFxcdC8qIHRoaXMgZXh0ZW50IGlzIHJlbW92ZWQ7IG1hcmsgc2xvdCBlbnRpcmVseSB1bnVzZWQgKi9cXG5mcy9leHQ0L2V4dGVudHMuYzoyNzQwOlxcdFxcdFxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhleCwgMCk7XFxuZnMvZXh0NC9leHRlbnRzLmMtMjc0MS1cXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTMxOTE9c3RhdGljIHN0cnVjdCBleHQ0X2V4dF9wYXRoICpleHQ0X3NwbGl0X2V4dGVudF9hdChoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtMzI0Ni1cXHRleDItXFx1MDAzZWVlX2xlbiAgID0gY3B1X3RvX2xlMTYoZWVfbGVuIC0gKHNwbGl0IC0gZWVfYmxvY2spKTtcXG5mcy9leHQ0L2V4dGVudHMuYzozMjQ3OlxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhleDIsIG5ld2Jsb2NrKTtcXG5mcy9leHQ0L2V4dGVudHMuYy0zMjQ4LVxcdGlmIChpc191bndyaXQpXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz0zNTU3PWV4dDRfZXh0X2NvbnZlcnRfdG9faW5pdGlhbGl6ZWQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTM2NDUtXFx0XFx0XFx0ZXgtXFx1MDAzZWVlX2Jsb2NrID0gY3B1X3RvX2xlMzIoZWVfYmxvY2sgKyBtYXBfbGVuKTtcXG5mcy9leHQ0L2V4dGVudHMuYzozNjQ2OlxcdFxcdFxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhleCwgZWVfcGJsayArIG1hcF9sZW4pO1xcbmZzL2V4dDQvZXh0ZW50cy5jLTM2NDctXFx0XFx0XFx0ZXgtXFx1MDAzZWVlX2xlbiA9IGNwdV90b19sZTE2KGVlX2xlbiAtIG1hcF9sZW4pO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtMzY5MS1cXHRcXHRcXHRhYnV0X2V4LVxcdTAwM2VlZV9ibG9jayA9IGNwdV90b19sZTMyKG5leHRfbGJsayAtIG1hcF9sZW4pO1xcbmZzL2V4dDQvZXh0ZW50cy5jOjM2OTI6XFx0XFx0XFx0ZXh0NF9leHRfc3RvcmVfcGJsb2NrKGFidXRfZXgsIG5leHRfcGJsayAtIG1hcF9sZW4pO1xcbmZzL2V4dDQvZXh0ZW50cy5jLTM2OTMtXFx0XFx0XFx0ZXgtXFx1MDAzZWVlX2xlbiA9IGNwdV90b19sZTE2KGVlX2xlbiAtIG1hcF9sZW4pO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtMzc0NS1cXHRcXHRcXHRcXHRjcHVfdG9fbGUxNigqYWxsb2NhdGVkIC0gc3BsaXRfbWFwLm1fbGVuKTtcXG5mcy9leHQ0L2V4dGVudHMuYzozNzQ2OlxcdFxcdFxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhcXHUwMDI2emVyb19leDEsXFxuZnMvZXh0NC9leHRlbnRzLmMtMzc0Ny1cXHRcXHRcXHRcXHRleHQ0X2V4dF9wYmxvY2soZXgpICsgc3BsaXRfbWFwLm1fbGJsayArXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy0zNzYwLVxcdFxcdFxcdFxcdFxcdFxcdFxcdGVlX2Jsb2NrKTtcXG5mcy9leHQ0L2V4dGVudHMuYzozNzYxOlxcdFxcdFxcdFxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhcXHUwMDI2emVyb19leDIsXFxuZnMvZXh0NC9leHRlbnRzLmMtMzc2Mi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBleHQ0X2V4dF9wYmxvY2soZXgpKTtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTQyNjk9aW50IGV4dDRfZXh0X21hcF9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ0NzMtXFx0cGJsayA9IG5ld2Jsb2NrICsgb2Zmc2V0O1xcbmZzL2V4dDQvZXh0ZW50cy5jOjQ0NzQ6XFx0ZXh0NF9leHRfc3RvcmVfcGJsb2NrKFxcdTAwMjZuZXdleCwgcGJsayk7XFxuZnMvZXh0NC9leHRlbnRzLmMtNDQ3NS1cXHRuZXdleC5lZV9sZW4gPSBjcHVfdG9fbGUxNihhci5sZW4pO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9NTc2Mz1leHQ0X3N3YXBfZXh0ZW50cyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlMSxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTU4OTctXFx0XFx0dG1wX2V4ID0gKmV4MTtcXG5mcy9leHQ0L2V4dGVudHMuYzo1ODk4OlxcdFxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhleDEsIGV4dDRfZXh0X3BibG9jayhleDIpKTtcXG5mcy9leHQ0L2V4dGVudHMuYzo1ODk5OlxcdFxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhleDIsIGV4dDRfZXh0X3BibG9jayhcXHUwMDI2dG1wX2V4KSk7XFxuZnMvZXh0NC9leHRlbnRzLmMtNTkwMC1cXHRcXHRleDEtXFx1MDAzZWVlX2xlbiA9IGNwdV90b19sZTE2KGUyX2xlbik7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz02MDI3PWludCBleHQ0X2V4dF9yZXBsYXlfdXBkYXRlX2V4KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IHN0YXJ0LFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNjA4MC1cXHRcXHRleHQ0X2V4dF9tYXJrX2luaXRpYWxpemVkKGV4KTtcXG5mcy9leHQ0L2V4dGVudHMuYzo2MDgxOlxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhleCwgcGJsayk7XFxuZnMvZXh0NC9leHRlbnRzLmMtNjA4Mi1cXHRkb3duX3dyaXRlKFxcdTAwMjZFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2RhdGFfc2VtKTtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz05MzE9c3RhdGljIGludCBleHQ0X2ZjX3dyaXRlX2lub2RlX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSwgdTMyICpjcmMpXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtOTYxLVxcdFxcdGV4LVxcdTAwM2VlZV9sZW4gPSBjcHVfdG9fbGUxNihyYW5nZS1cXHUwMDNlbGVuKTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6OTYyOlxcdFxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhleCwgcmFuZ2UtXFx1MDAzZXBibGspO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy05NjMtXFx0XFx0aWYgKHJhbmdlLVxcdTAwM2V1bndyaXR0ZW4pXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjE0OD1zdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X2FkZF9yYW5nZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1OCAqdmFsKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIyMDItXFx0XFx0XFx0bmV3ZXguZWVfYmxvY2sgPSBjcHVfdG9fbGUzMihjdXIpO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMjAzOlxcdFxcdFxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjIwNC1cXHRcXHRcXHRcXHRcXHUwMDI2bmV3ZXgsIHN0YXJ0X3BibGsgKyBjdXIgLSBzdGFydCk7XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTEwNzQ9c3RhdGljIGludCBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2ZzYmxrX3QgYmxvY2ssXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTExMzktXFx0XFx0bmV3ZXguZWVfbGVuID0gY3B1X3RvX2xlMTYoMSk7XFxuZnMvZXh0NC9pbmxpbmUuYzoxMTQwOlxcdFxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhcXHUwMDI2bmV3ZXgsIGJsb2NrKTtcXG5mcy9leHQ0L2lubGluZS5jLTExNDEtXFx0XFx0cGF0aCA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgXFx1MDAyNm5ld2V4LCAwKTtcXG4tLVxcbmZzL2V4dDQvbWlncmF0ZS5jPTIxPXN0YXRpYyBpbnQgZmluaXNoX3JhbmdlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L21pZ3JhdGUuYy0zMy1cXHRuZXdleHQuZWVfbGVuICAgPSBjcHVfdG9fbGUxNihsYi1cXHUwMDNlbGFzdF9ibG9jayAtIGxiLVxcdTAwM2VmaXJzdF9ibG9jayArIDEpO1xcbmZzL2V4dDQvbWlncmF0ZS5jOjM0OlxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhcXHUwMDI2bmV3ZXh0LCBsYi1cXHUwMDNlZmlyc3RfcGJsb2NrKTtcXG5mcy9leHQ0L21pZ3JhdGUuYy0zNS1cXHQvKiBMb2NraW5nIG9ubHkgZm9yIGNvbnZlbmllbmNlIHNpbmNlIHdlIGFyZSBvcGVyYXRpbmcgb24gdGVtcCBpbm9kZSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjo1NDowMS4xOTU4NDg2NDFaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzgwNTk1NjQyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBUaGlzIEV4dGVudCBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYml0IG9mIGNvZGUgYW5kIGltbWVkaWF0ZWx5IHJlY29nbml6ZSB3ZSdyZSBkZWFsaW5nIHdpdGggYW4gYGV4dDRfZXh0ZW50YCBzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSBpbml0aWFsaXppbmcgYSBuZXcgb25lLCBgbmV3ZXhgLiAgSXQgc2VlbXMgbGlrZSB3ZSdyZSBzZXR0aW5nIHVwIGEgc2luZ2xlLWJsb2NrIGV4dGVudC4gIExldCdzIGJyZWFrIGl0IGRvd246IGBuZXdleC5lZV9ibG9jayA9IGNwdV90b19sZTMyKDApO2AgLSBSaWdodCwgemVyb2luZyBvdXQgdGhlIGxvZ2ljYWwgYmxvY2sgbnVtYmVyLCB0aGF0J3MgZXhwZWN0ZWQuIGBuZXdleC5lZV9sZW4gPSBjcHVfdG9fbGUxNigxKTtgIC0gVGhlbiBzZXR0aW5nIHRoZSBleHRlbnQgbGVuZ3RoIHRvIG9uZSBibG9jazsgYWdhaW4sIHN0YW5kYXJkIHByb2NlZHVyZS4gIFdlIGFyZSBtYWtpbmcgaXQgbGl0dGxlIGVuZGlhbiwgb2YgY291cnNlLlxuXG5UaGUga2V5IHBhcnQgaGVyZSBpcyB0aGF0IHdlIGNhbGwgYGV4dDRfZXh0X3N0b3JlX3BibG9jayhcdTAwMjZuZXdleCwgYmxvY2spO2AgIEkgaW5zdGFudGx5IHJlY2FsbCB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgd2hlcmUgdGhlICpwaHlzaWNhbCogYmxvY2sgbnVtYmVyIGlzIGFjdHVhbGx5IHN0b3JlZC4gIGBleHQ0X2V4dF9zdG9yZV9wYmxvY2tgIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIGBlZV9zdGFydF9sb2AgYW5kIGBlZV9zdGFydF9oaWAuIFNvIG5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpcyBob3cgZG9lcyBpdCB0cmFuc2xhdGUgdGhlICdibG9jaycgdmFyaWFibGUgaW50byB0aGUgdHdvIGZpZWxkcy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBleGFjdCBkZWZpbml0aW9uIG9mIHRoaXMgZnVuY3Rpb24gdG8gZnVsbHkgdW5kZXJzdGFuZCBob3cgdGhlIHBoeXNpY2FsIGJsb2NrIGFkZHJlc3MgaXMgc3RvcmVkIGluIHRoZSBleHRlbnQgaGVhZGVyLiBJJ2xsIG5lZWQgdG8ga25vdyB3aGF0ICdibG9jaycgcmVwcmVzZW50cyB0byB1bmRlcnN0YW5kIHRoZSBtYXBwaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTgxMSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjo1NDowNS4wMDE4MDc0NzdaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwNDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQvZXh0NF9leHRlbnRzLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMjQyLFxuICBcIkxpbmVDb3VudFwiOiAxNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjQyOlxcdCAqIGV4dDRfZXh0X3N0b3JlX3BibG9jazpcXG4gMjQzOlxcdCAqIHN0b3JlcyBhIGxhcmdlIHBoeXNpY2FsIGJsb2NrIG51bWJlciBpbnRvIGFuIGV4dGVudCBzdHJ1Y3QsXFxuIDI0NDpcXHQgKiBicmVha2luZyBpdCBpbnRvIHBhcnRzXFxuIDI0NTpcXHQgKi9cXG4gMjQ2OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X2V4dF9zdG9yZV9wYmxvY2soc3RydWN0IGV4dDRfZXh0ZW50ICpleCxcXG4gMjQ3OlxcdFxcdFxcdFxcdFxcdFxcdCBleHQ0X2ZzYmxrX3QgcGIpXFxuIDI0ODpcXHR7XFxuIDI0OTpcXHRcXHRleC1cXHUwMDNlZWVfc3RhcnRfbG8gPSBjcHVfdG9fbGUzMigodW5zaWduZWQgbG9uZykgKHBiIFxcdTAwMjYgMHhmZmZmZmZmZikpO1xcbiAyNTA6XFx0XFx0ZXgtXFx1MDAzZWVlX3N0YXJ0X2hpID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIGxvbmcpICgocGIgXFx1MDAzZVxcdTAwM2UgMzEpIFxcdTAwM2VcXHUwMDNlIDEpIFxcdTAwMjZcXG4gMjUxOlxcdFxcdFxcdFxcdFxcdCAgICAgIDB4ZmZmZik7XFxuIDI1MjpcXHR9XFxuIDI1MzpcXHRcXG4gMjU0OlxcdC8qXFxuIDI1NTpcXHQgKiBleHQ0X2lkeF9zdG9yZV9wYmxvY2s6XFxuIDI1NjpcXHQgKiBzdG9yZXMgYSBsYXJnZSBwaHlzaWNhbCBibG9jayBudW1iZXIgaW50byBhbiBpbmRleCBzdHJ1Y3QsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjU0OjA1LjAwMTkzMDczN1oiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MDUwODE4MjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIENoZWNrOiBObyBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyBEZXRlY3RlZCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEknbSBub3RpbmcgdGhhdCBgZWVfYmxvY2tgLCBgZWVfbGVuYCwgYGVlX3N0YXJ0X2xvYCwgYW5kIGBlZV9zdGFydF9oaWAgd2l0aGluIHRoZSBgZXh0NF9leHRlbnRgIHN0cnVjdCBhcmUgKmV4cGxpY2l0bHkqIGluaXRpYWxpemVkLiBHb29kLiBXZSBpbml0aWFsaXplIGBleHQ0X2FsbG9jYXRpb25fcmVxdWVzdCBhcjtgIGFuZCB6ZXJvIGl0IG91dCBpbW1lZGlhdGVseSB3aXRoIGBtZW1zZXRgLiBUaGlzIGlzIHN0YW5kYXJkIHByYWN0aWNlLCBhbmQgd2hhdCBJJ2QgZXhwZWN0LiBTYW1lIHdpdGggdGhlIGJsb2NrIGRhdGEgYnVmZmVyIGBiaC1cdTAwM2ViX2RhdGFgIGFuZCB0aGUgaW5saW5lIGRhdGEgYnVmZmVyLiBXZSBlbnN1cmUgdGhleSdyZSBmdWxseSB6ZXJvZWQuXG5cbkknbSBzeXN0ZW1hdGljYWxseSBjaGVja2luZyBmb3IgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZXJlJ3Mgbm8gc3RydWN0IGNvcHkgdG8gdXNlcnNwYWNlLCBubyBicmFuY2hpbmcgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBubyB1bmluaXRpYWxpemVkIGhlYXAgb3Igc3RhY2sgdmFyaWFibGVzIGJlaW5nIHVzZWQuIFRoaXMgaXMgd2hhdCBJIHdhcyBob3BpbmcgdG8gc2VlLlxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIHRoZSBLQVNBTi9LTVNBTiBpbXBsaWNhdGlvbnMuIFdlJ3JlIGRlYWxpbmcgd2l0aCBtb2RpZmljYXRpb25zIHRvIGtlcm5lbCBmcyBidWZmZXJzLCBleHQ0IGV4dGVudHMsIGlub2RlcywgYW5kIGJ1ZmZlciBoZWFkcy4gVGhlIGFsbG9jYXRlZCBoZWFwIGJ1ZmZlcnMgKGBpX2Jsb2NrX2J1ZmAsIGB4YXR0cl9idWZgLCBgYnVmYCkgYXJlIHBvcHVsYXRlZCB2aWEgYG1lbWNweWAgb3IgYGV4dDRfcmVhZF9pbmxpbmVfZGF0YWAsIHNvIHdlJ3JlIG5vdCByZWx5aW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBTdGFjayB2YXJpYWJsZXMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgb3IgemVyb2VkIG91dC4gVGhlIGJ1ZmZlciBoZWFkIGRhdGEgYmxvY2ssIGBiaC1cdTAwM2ViX2RhdGFgLCBpcyBtZW1zZXQgdG8gemVyby5cblxuVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgdGhlcmUgYXJlICpubyogdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgaGVyZSB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIEtNU0FOLiBBbnkgaXNzdWVzIHdvdWxkIGxpa2VseSBiZSByZWxhdGVkIHRvIGV4dGVudCBtYW5pcHVsYXRpb24gZXJyb3JzLCBidWZmZXIgb3ZlcnJ1bnMsIHJlZmVyZW5jZSBjb3VudGluZyBwcm9ibGVtcywgb3IgbG9ja2luZyBpc3N1ZXMsIGFuZCB0aG9zZSBzaG91bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGVycm9yIGRldGVjdG9ycy5cblxuTGV0J3MgZG91YmxlLWNoZWNrIHRoZSBsb2dpYy4gVGhlIEtNU0FOIHJ1bGUgaXMgY2xlYXI6IGl0J3MgbmVlZGVkIE9OTFkgaWYgdGhlIHBhdGNoICppbnRyb2R1Y2VzKiBvciBtb2RpZmllcyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gV2UgaGF2ZSB0byBsb29rIGZvciBjb3B5IHRvIHVzZXIgd2l0aG91dCBpbml0LCBjb25kaXRpb25hbCBsb2dpYyBvbiB1bmluaXQgdmFycywgY29tcGxleCB1bmluaXQgZGF0YSBzdHJ1Y3R1cmVzIHJlYWQgbGF0ZXIsIG9yIGJvdW5kcyBsb2dpYyBhY2Nlc3NpbmcgdW5pbml0IGJ5dGVzLiBHaXZlbiB0aGF0IGFsbCBoZWFwL3N0YWNrIHN0cnVjdHVyZXMgYXJlIGluaXRpYWxpemVkL3plcm9lZCAqYmVmb3JlKiB1c2UsIGFuZCB0aGVyZSBhcmUgbm8gaW5mbyBsZWFrcywgTmVlZHNLTVNBTiBtdXN0IGJlIGBmYWxzZWAuXG5cbkFscmlnaHQsIEknbSBjb25maWRlbnQgaW4gdGhpcy4gVGltZSB0byBwcmVwYXJlIHRoZSB0b29sIGNhbGwgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1MjMsIk91dHB1dFRva2VucyI6NDA2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6NTQ6MTEuMDUyNzUyMDQyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja2AgYW5kIGludHJvZHVjZXMgYGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrYCB0byByZWZhY3RvciBob3cgaW5saW5lIGRhdGEgaXMgY29udmVydGVkIHRvIGEgcmVndWxhciBleHRlbnQgb3IgYmxvY2sgcG9pbnRlciBpbiBleHQ0LlxcblxcbkFuYWx5c2lzIG9mIG1lbW9yeSBoYW5kbGluZzpcXG4xLiBIZWFwIGJ1ZmZlcnM6XFxuICAgLSBgYnVmYCBpcyBwb3B1bGF0ZWQgYnkgYGV4dDRfcmVhZF9pbmxpbmVfZGF0YSgpYCBiZWZvcmUgYmVpbmcgcmVhZC5cXG4gICAtIGBpX2Jsb2NrX2J1ZmAgYW5kIGB4YXR0cl9idWZgIGFyZSBhbGxvY2F0ZWQgd2l0aCBga21hbGxvYygpYCBhbmQgaW1tZWRpYXRlbHkgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGBtZW1jcHkoKWAgZnJvbSBgcmF3X2lub2RlLVxcdTAwM2VpX2Jsb2NrYCBhbmQgYGhlYWRlcmAgcmVzcGVjdGl2ZWx5LlxcbiAgIC0gVGhlIG5ld2x5IGFsbG9jYXRlZCBibG9jayBidWZmZXIgYGJoLVxcdTAwM2ViX2RhdGFgIGlzIGNsZWFyZWQgdXNpbmcgYG1lbXNldChiaC1cXHUwMDNlYl9kYXRhLCAwLCBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemUpYCBiZWZvcmUgZGF0YSBvciBkaXJlY3RvcnkgZW50cmllcyBhcmUgY29waWVkIGludG8gaXQuXFxuMi4gU3RhY2sgc3RydWN0dXJlczpcXG4gICAtIGBzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX3JlcXVlc3QgYXJgIGlzIGNsZWFyZWQgd2l0aCBgbWVtc2V0KFxcdTAwMjZhciwgMCwgc2l6ZW9mKGFyKSlgLlxcbiAgIC0gYHN0cnVjdCBleHQ0X2V4dGVudCBuZXdleGAgaGFzIGFsbCBmb3VyIGZpZWxkcyAoYGVlX2Jsb2NrYCwgYGVlX2xlbmAsIGBlZV9zdGFydF9sb2AsIGBlZV9zdGFydF9oaWApIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXFxuICAgLSBgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCBpc2AgYW5kIGBzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvIGlgIGFyZSBzdGF0aWNhbGx5IGluaXRpYWxpemVkIHdpdGggZGVzaWduYXRlZCBpbml0aWFsaXplcnMuXFxuMy4gTm8gZGF0YSBvciBzdHJ1Y3R1cmUgd2l0aCB1bmluaXRpYWxpemVkIHBhZGRpbmcgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjb250cm9sIGZsb3cgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy5cXG5cXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIGV4dGVudCB0cmVlIGNvcnJ1cHRpb24sIGxvY2sgb3JkZXIgdmlvbGF0aW9ucywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja2AgYW5kIGludHJvZHVjZXMgYGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrYCB0byByZWZhY3RvciBob3cgaW5saW5lIGRhdGEgaXMgY29udmVydGVkIHRvIGEgcmVndWxhciBleHRlbnQgb3IgYmxvY2sgcG9pbnRlciBpbiBleHQ0LlxcblxcbkFuYWx5c2lzIG9mIG1lbW9yeSBoYW5kbGluZzpcXG4xLiBIZWFwIGJ1ZmZlcnM6XFxuICAgLSBgYnVmYCBpcyBwb3B1bGF0ZWQgYnkgYGV4dDRfcmVhZF9pbmxpbmVfZGF0YSgpYCBiZWZvcmUgYmVpbmcgcmVhZC5cXG4gICAtIGBpX2Jsb2NrX2J1ZmAgYW5kIGB4YXR0cl9idWZgIGFyZSBhbGxvY2F0ZWQgd2l0aCBga21hbGxvYygpYCBhbmQgaW1tZWRpYXRlbHkgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGBtZW1jcHkoKWAgZnJvbSBgcmF3X2lub2RlLVxcdTAwM2VpX2Jsb2NrYCBhbmQgYGhlYWRlcmAgcmVzcGVjdGl2ZWx5LlxcbiAgIC0gVGhlIG5ld2x5IGFsbG9jYXRlZCBibG9jayBidWZmZXIgYGJoLVxcdTAwM2ViX2RhdGFgIGlzIGNsZWFyZWQgdXNpbmcgYG1lbXNldChiaC1cXHUwMDNlYl9kYXRhLCAwLCBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemUpYCBiZWZvcmUgZGF0YSBvciBkaXJlY3RvcnkgZW50cmllcyBhcmUgY29waWVkIGludG8gaXQuXFxuMi4gU3RhY2sgc3RydWN0dXJlczpcXG4gICAtIGBzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX3JlcXVlc3QgYXJgIGlzIGNsZWFyZWQgd2l0aCBgbWVtc2V0KFxcdTAwMjZhciwgMCwgc2l6ZW9mKGFyKSlgLlxcbiAgIC0gYHN0cnVjdCBleHQ0X2V4dGVudCBuZXdleGAgaGFzIGFsbCBmb3VyIGZpZWxkcyAoYGVlX2Jsb2NrYCwgYGVlX2xlbmAsIGBlZV9zdGFydF9sb2AsIGBlZV9zdGFydF9oaWApIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXFxuICAgLSBgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCBpc2AgYW5kIGBzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvIGlgIGFyZSBzdGF0aWNhbGx5IGluaXRpYWxpemVkIHdpdGggZGVzaWduYXRlZCBpbml0aWFsaXplcnMuXFxuMy4gTm8gZGF0YSBvciBzdHJ1Y3R1cmUgd2l0aCB1bmluaXRpYWxpemVkIHBhZGRpbmcgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjb250cm9sIGZsb3cgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy5cXG5cXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIGV4dGVudCB0cmVlIGNvcnJ1cHRpb24sIGxvY2sgb3JkZXIgdmlvbGF0aW9ucywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow7gvnm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-31 02:39:06 +0000 UTC FinishedAt: 2026-08-31 02:54:13 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "8d6f7de2-01b7-4ca9-9c74-7f1fd932955f" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_convert_inline_data", "ext4_try_add_inline_entry" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEmIzM0OywKICAgICYjMzQ7ZXh0NF90cnlfYWRkX2lubGluZV9lbnRyeSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrYCBhbmQgaW50cm9kdWNlcyBgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2tgIHRvIHJlZmFjdG9yIGhvdyBpbmxpbmUgZGF0YSBpcyBjb252ZXJ0ZWQgdG8gYSByZWd1bGFyIGV4dGVudCBvciBibG9jayBwb2ludGVyIGluIGV4dDQuXG5cbkFuYWx5c2lzIG9mIG1lbW9yeSBoYW5kbGluZzpcbjEuIEhlYXAgYnVmZmVyczpcbiAgIC0gYGJ1ZmAgaXMgcG9wdWxhdGVkIGJ5IGBleHQ0X3JlYWRfaW5saW5lX2RhdGEoKWAgYmVmb3JlIGJlaW5nIHJlYWQuXG4gICAtIGBpX2Jsb2NrX2J1ZmAgYW5kIGB4YXR0cl9idWZgIGFyZSBhbGxvY2F0ZWQgd2l0aCBga21hbGxvYygpYCBhbmQgaW1tZWRpYXRlbHkgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGBtZW1jcHkoKWAgZnJvbSBgcmF3X2lub2RlLVx1MDAzZWlfYmxvY2tgIGFuZCBgaGVhZGVyYCByZXNwZWN0aXZlbHkuXG4gICAtIFRoZSBuZXdseSBhbGxvY2F0ZWQgYmxvY2sgYnVmZmVyIGBiaC1cdTAwM2ViX2RhdGFgIGlzIGNsZWFyZWQgdXNpbmcgYG1lbXNldChiaC1cdTAwM2ViX2RhdGEsIDAsIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUpYCBiZWZvcmUgZGF0YSBvciBkaXJlY3RvcnkgZW50cmllcyBhcmUgY29waWVkIGludG8gaXQuXG4yLiBTdGFjayBzdHJ1Y3R1cmVzOlxuICAgLSBgc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9yZXF1ZXN0IGFyYCBpcyBjbGVhcmVkIHdpdGggYG1lbXNldChcdTAwMjZhciwgMCwgc2l6ZW9mKGFyKSlgLlxuICAgLSBgc3RydWN0IGV4dDRfZXh0ZW50IG5ld2V4YCBoYXMgYWxsIGZvdXIgZmllbGRzIChgZWVfYmxvY2tgLCBgZWVfbGVuYCwgYGVlX3N0YXJ0X2xvYCwgYGVlX3N0YXJ0X2hpYCkgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cbiAgIC0gYHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQgaXNgIGFuZCBgc3RydWN0IGV4dDRfeGF0dHJfaW5mbyBpYCBhcmUgc3RhdGljYWxseSBpbml0aWFsaXplZCB3aXRoIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLlxuMy4gTm8gZGF0YSBvciBzdHJ1Y3R1cmUgd2l0aCB1bmluaXRpYWxpemVkIHBhZGRpbmcgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjb250cm9sIGZsb3cgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy5cblxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyBleHRlbnQgdHJlZSBjb3JydXB0aW9uLCBsb2NrIG9yZGVyIHZpb2xhdGlvbnMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIHNhbml0aXplcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGV4dDQgaW5saW5lIGRhdGEgY29udmVyc2lvbiBsb2dpYyBpbiBmcy9leHQ0L2lubGluZS5jLCByZXBsYWNpbmcgdGhlIGlubGluZSBkYXRhIHJlc3RvcmF0aW9uIGZsb3cgd2l0aCBhIG5ldyBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9jayBmdW5jdGlvbiBhbmQgcmVmYWN0b3JpbmcgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jay4gVGhlc2UgY2hhbmdlcyBhbHRlciBob3cgZXh0NCBjb252ZXJ0cyBpbmxpbmUgZGlyZWN0b3J5L2ZpbGUgZGF0YSBpbnRvIGV4dGVudC9ibG9jayBhbGxvY2F0aW9ucyBhbmQgYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjo1MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDM5ZmZmMzI0OGZhN2NkN2NiZjJkNDRhNmNjNTQ0NGViZjE3N2Q4MzZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAwMjo1MzowMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lubGluZS5jIGIvZnMvZXh0NC9pbmxpbmUuY1xuaW5kZXggODA0NWU0ZmYyNzBjNy4uOTM5YzZiZjIwYjViNyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvaW5saW5lLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvaW5saW5lLmNcbkBAIC0xNCw2ICYjNDM7MTQsNyBAQFxuICNpbmNsdWRlIFwmIzM0O2V4dDQuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3hhdHRyLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt0cnVuY2F0ZS5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2V4dDRfZXh0ZW50cy5oXCYjMzQ7XG4gXG4gI2RlZmluZSBFWFQ0X1hBVFRSX1NZU1RFTV9EQVRBXHRcJiMzNDtkYXRhXCYjMzQ7XG4gI2RlZmluZSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFXHQoKHNpemVvZihfX2xlMzIpICogRVhUNF9OX0JMT0NLUykpXG5AQCAtMTA3MCwyMSAmIzQzOzEwNzEsMTI1IEBAIHN0YXRpYyBpbnQgZXh0NF91cGRhdGVfaW5saW5lX2RpcihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBleHQ0X3Jlc3RvcmVfaW5saW5lX2RhdGEoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi1cdFx0XHRcdCAgICAgc3RydWN0IGV4dDRfaWxvYyAqaWxvYyxcbi1cdFx0XHRcdCAgICAgdm9pZCAqYnVmLCBpbnQgaW5saW5lX3NpemUpXG4mIzQzO3N0YXRpYyBpbnQgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9mc2Jsa190IGJsb2NrLFxuJiM0MztcdFx0XHRcdFx0dW5zaWduZWQgaW50IGxlbiwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbiB7XG4tXHRpbnQgcmV0O1xuJiM0MztcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gRVhUNF9JKGlub2RlKTtcbiYjNDM7XHRzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9maW5kIGlzID0ge1xuJiM0MztcdFx0LnMgPSB7IC5ub3RfZm91bmQgPSAwLCB9LFxuJiM0MztcdH07XG4mIzQzO1x0c3RydWN0IGV4dDRfeGF0dHJfaW5mbyBpID0ge1xuJiM0MztcdFx0Lm5hbWVfaW5kZXggPSBFWFQ0X1hBVFRSX0lOREVYX1NZU1RFTSxcbiYjNDM7XHRcdC5uYW1lID0gRVhUNF9YQVRUUl9TWVNURU1fREFUQSxcbiYjNDM7XHRcdC52YWx1ZSA9IE5VTEwsXG4mIzQzO1x0XHQudmFsdWVfbGVuID0gMCxcbiYjNDM7XHR9O1xuJiM0MztcdGludCBlcnJvcjtcbiYjNDM7XHR2b2lkICppX2Jsb2NrX2J1ZiA9IE5VTEw7XG4mIzQzO1x0dm9pZCAqeGF0dHJfYnVmID0gTlVMTDtcbiYjNDM7XHR2b2lkICpoZWFkZXIgPSBOVUxMO1xuJiM0MztcdHZvaWQgKnRhaWwgPSBOVUxMO1xuJiM0MztcdGludCB4YXR0cl9zaXplO1xuJiM0MztcdHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGU7XG4gXG4tXHRyZXQgPSBleHQ0X2NyZWF0ZV9pbmxpbmVfZGF0YShoYW5kbGUsIGlub2RlLCBpbmxpbmVfc2l6ZSk7XG4tXHRpZiAocmV0KSB7XG4tXHRcdGV4dDRfbXNnKGlub2RlLVx1MDAzZWlfc2IsIEtFUk5fRU1FUkcsXG4tXHRcdFx0XCYjMzQ7ZXJyb3IgcmVzdG9yaW5nIGlubGluZV9kYXRhIGZvciBpbm9kZSAtLSBwb3RlbnRpYWwgZGF0YSBsb3NzISAoaW5vZGUgJWxsdSwgZXJyb3IgJWQpXCYjMzQ7LFxuLVx0XHRcdGlub2RlLVx1MDAzZWlfaW5vLCByZXQpO1xuLVx0XHRyZXR1cm47XG4mIzQzO1x0aV9ibG9ja19idWYgPSBrbWFsbG9jKEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUsIEdGUF9OT0ZTKTtcbiYjNDM7XHRpZiAoIWlfYmxvY2tfYnVmKSB7XG4mIzQzO1x0XHRlcnJvciA9IC1FTk9NRU07XG4mIzQzO1x0XHRkb3duX3dyaXRlKFx1MDAyNmVpLVx1MDAzZWlfZGF0YV9zZW0pO1xuJiM0MztcdFx0Z290byBlcnJvcjtcbiBcdH1cbi1cdGV4dDRfd3JpdGVfaW5saW5lX2RhdGEoaW5vZGUsIGlsb2MsIGJ1ZiwgMCwgaW5saW5lX3NpemUpO1xuLVx0ZXh0NF9zZXRfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTtcbiYjNDM7XHRkb3duX3dyaXRlKFx1MDAyNmVpLVx1MDAzZWlfZGF0YV9zZW0pO1xuJiM0MztcdGVycm9yID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcdTAwMjZpcy5pbG9jKTtcbiYjNDM7XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRnb3RvIGVycm9yO1xuJiM0MztcdHJhd19pbm9kZSA9IGV4dDRfcmF3X2lub2RlKFx1MDAyNmlzLmlsb2MpO1xuJiM0MztcdGhlYWRlciA9IElIRFIoaW5vZGUsIHJhd19pbm9kZSk7XG4mIzQzO1x0dGFpbCA9IElUQUlMKGlub2RlLCByYXdfaW5vZGUpO1xuJiM0MztcdHhhdHRyX3NpemUgPSB0YWlsIC0gaGVhZGVyO1xuJiM0MztcdHhhdHRyX2J1ZiA9IGttYWxsb2MoeGF0dHJfc2l6ZSwgR0ZQX05PRlMpO1xuJiM0MztcdGlmICgheGF0dHJfYnVmKSB7XG4mIzQzO1x0XHRlcnJvciA9IC1FTk9NRU07XG4mIzQzO1x0XHRnb3RvIGVycm9yO1xuJiM0MztcdH1cbiYjNDM7XHRCVUZGRVJfVFJBQ0UoaXMuaWxvYy5iaCwgXCYjMzQ7Z2V0X3dyaXRlX2FjY2Vzc1wmIzM0Oyk7XG4mIzQzO1x0ZXJyb3IgPSBleHQ0X2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGUsIGlub2RlLVx1MDAzZWlfc2IsIGlzLmlsb2MuYmgsIEVYVDRfSlRSX05PTkUpO1xuJiM0MztcdGlmIChlcnJvcikge1xuJiM0MztcdFx0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIGJsb2NrKTtcbiYjNDM7XHRcdGV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7XG4mIzQzO1x0XHRleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIGJsb2NrLCBsZW4sIDApO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcdG1lbWNweShpX2Jsb2NrX2J1ZiwgKHZvaWQgKilyYXdfaW5vZGUtXHUwMDNlaV9ibG9jaywgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XG4mIzQzO1x0bWVtc2V0KCh2b2lkICopcmF3X2lub2RlLVx1MDAzZWlfYmxvY2ssIDAsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuJiM0MztcdG1lbXNldChlaS1cdTAwM2VpX2RhdGEsIDAsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuJiM0MztcdG1lbWNweSh4YXR0cl9idWYsIGhlYWRlciwgeGF0dHJfc2l6ZSk7XG4mIzQzO1x0aWYgKGV4dDRfaGFzX2ZlYXR1cmVfZXh0ZW50cyhpbm9kZS1cdTAwM2VpX3NiKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkgfHwgU19JU1JFRyhpbm9kZS1cdTAwM2VpX21vZGUpIHx8IFNfSVNMTksoaW5vZGUtXHUwMDNlaV9tb2RlKSkpIHtcbiYjNDM7XHRcdGV4dDRfc2V0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUyk7XG4mIzQzO1x0XHRleHQ0X2V4dF90cmVlX2luaXQoaGFuZGxlLCBpbm9kZSk7XG4mIzQzO1x0XHRzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIDAsIE5VTEwsIDApO1xuJiM0MztcbiYjNDM7XHRcdGlmIChJU19FUlIocGF0aCkpIHtcbiYjNDM7XHRcdFx0ZXJyb3IgPSBQVFJfRVJSKHBhdGgpO1xuJiM0MztcdFx0XHRnb3RvIHJlY292ZXJ5O1xuJiM0MztcdFx0fVxuJiM0MztcdFx0c3RydWN0IGV4dDRfZXh0ZW50IG5ld2V4O1xuJiM0MztcbiYjNDM7XHRcdG5ld2V4LmVlX2Jsb2NrID0gY3B1X3RvX2xlMzIoMCk7XG4mIzQzO1x0XHRuZXdleC5lZV9sZW4gPSBjcHVfdG9fbGUxNigxKTtcbiYjNDM7XHRcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhcdTAwMjZuZXdleCwgYmxvY2spO1xuJiM0MztcdFx0cGF0aCA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgXHUwMDI2bmV3ZXgsIDApO1xuJiM0MztcdFx0aWYgKElTX0VSUihwYXRoKSkge1xuJiM0MztcdFx0XHRlcnJvciA9IFBUUl9FUlIocGF0aCk7XG4mIzQzO1x0XHRcdGlmIChlcnJvciA9PSAtRURRVU9UIHx8IGVycm9yID09IC1FTk9TUEMpXG4mIzQzO1x0XHRcdFx0Z290byByZWNvdmVyeTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGV4dDRfZnJlZV9leHRfcGF0aChwYXRoKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0RVhUNF9JKGlub2RlKS1cdTAwM2VpX2RhdGFbMF0gPSBjcHVfdG9fbGUzMihibG9jayk7XG4mIzQzO1x0fVxuJiM0MztcdGVycm9yID0gZXh0NF94YXR0cl9pYm9keV9maW5kKGlub2RlLCBcdTAwMjZpLCBcdTAwMjZpcyk7XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0Z290byByZWNvdmVyeTtcbiYjNDM7XHRpZiAoIWlzLnMubm90X2ZvdW5kKVxuJiM0MztcdFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGUsIGlub2RlLCBcdTAwMjZpLCBcdTAwMjZpcyk7XG4mIzQzO3JlY292ZXJ5OlxuJiM0MztcdGlmIChlcnJvcikge1xuJiM0MztcdFx0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIGJsb2NrKTtcbiYjNDM7XHRcdGV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7XG4mIzQzO1x0XHRleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIGJsb2NrLCBsZW4sIDApO1xuJiM0MztcdFx0bWVtY3B5KCh2b2lkICopcmF3X2lub2RlLVx1MDAzZWlfYmxvY2ssIGlfYmxvY2tfYnVmLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcbiYjNDM7XHRcdG1lbWNweShlaS1cdTAwM2VpX2RhdGEsIHJhd19pbm9kZS1cdTAwM2VpX2Jsb2NrLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcbiYjNDM7XHRcdG1lbWNweShoZWFkZXIsIHhhdHRyX2J1ZiwgeGF0dHJfc2l6ZSk7XG4mIzQzO1x0XHRleHQ0X2NsZWFyX2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUyk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGV4dDRfY2xlYXJfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9JTkxJTkVfREFUQSk7XG4mIzQzO1x0XHRpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4mIzQzO1x0XHRcdGlfc2l6ZV93cml0ZShpbm9kZSwgaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZSk7XG4mIzQzO1x0XHRcdEVYVDRfSShpbm9kZSktXHUwMDNlaV9kaXNrc2l6ZSA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRnZXRfYmgoaXMuaWxvYy5iaCk7XG4mIzQzO1x0XHRlcnJvciA9IGV4dDRfbWFya19pbG9jX2RpcnR5KGhhbmRsZSwgaW5vZGUsIFx1MDAyNmlzLmlsb2MpO1xuJiM0MztcdFx0RVhUNF9JKGlub2RlKS1cdTAwM2VpX2lubGluZV9vZmYgPSAwO1xuJiM0MztcdFx0RVhUNF9JKGlub2RlKS1cdTAwM2VpX2lubGluZV9zaXplID0gMDtcbiYjNDM7XHRcdGV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTtcbiYjNDM7XHRcdGJyZWxzZShiaCk7XG4mIzQzO1x0fVxuJiM0MztvdXQ6XG4mIzQzO1x0YnJlbHNlKGlzLmlsb2MuYmgpO1xuJiM0MztcdHVwX3dyaXRlKFx1MDAyNmVpLVx1MDAzZWlfZGF0YV9zZW0pO1xuJiM0MztcdGtmcmVlKGlfYmxvY2tfYnVmKTtcbiYjNDM7XHRrZnJlZSh4YXR0cl9idWYpO1xuJiM0MztcdHJldHVybiBlcnJvcjtcbiYjNDM7ZXJyb3I6XG4mIzQzO1x0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIGJsb2NrKTtcbiYjNDM7XHRleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpO1xuJiM0MztcdGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgYmxvY2ssIGxlbiwgMCk7XG4mIzQzO1x0dXBfd3JpdGUoXHUwMDI2ZWktXHUwMDNlaV9kYXRhX3NlbSk7XG4mIzQzO1x0a2ZyZWUoaV9ibG9ja19idWYpO1xuJiM0MztcdGtmcmVlKHhhdHRyX2J1Zik7XG4mIzQzO1x0cmV0dXJuIGVycm9yO1xuIH1cbiBcbiBzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSxcbkBAIC0xMDkzLDkgJiM0MzsxMTk4LDEyIEBAIHN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxuIHtcbiBcdGludCBlcnJvcjtcbiBcdHZvaWQgKmJ1ZiA9IE5VTEw7XG4tXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRhdGFfYmggPSBOVUxMO1xuLVx0c3RydWN0IGV4dDRfbWFwX2Jsb2NrcyBtYXA7XG4mIzQzO1x0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7XG4gXHRpbnQgaW5saW5lX3NpemU7XG4mIzQzO1x0ZXh0NF9mc2Jsa190IG5ld2Jsb2NrID0gMDtcbiYjNDM7XHRzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX3JlcXVlc3QgYXI7XG4mIzQzO1x0c3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgYWxsb2NhdGVkX2Jsb2NrO1xuIFxuIFx0aW5saW5lX3NpemUgPSBleHQ0X2dldF9pbmxpbmVfc2l6ZShpbm9kZSk7XG4gXHRidWYgPSBrbWFsbG9jKGlubGluZV9zaXplLCBHRlBfTk9GUyk7XG5AQCAtMTEyMCw2MyAmIzQzOzEyMjgsNjIgQEAgc3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHRlcnJvciA9IGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlLCBpbm9kZSk7XG4tXHRpZiAoZXJyb3IpXG4tXHRcdGdvdG8gb3V0O1xuLVxuLVx0bWFwLm1fbGJsayA9IDA7XG4tXHRtYXAubV9sZW4gPSAxO1xuLVx0bWFwLm1fZmxhZ3MgPSAwO1xuLVx0ZXJyb3IgPSBleHQ0X21hcF9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgXHUwMDI2bWFwLCBFWFQ0X0dFVF9CTE9DS1NfQ1JFQVRFKTtcbiYjNDM7XHRtZW1zZXQoXHUwMDI2YXIsIDAsIHNpemVvZihhcikpO1xuJiM0MztcdGFyLmlub2RlID0gaW5vZGU7XG4mIzQzO1x0YXIubG9naWNhbCA9IDA7XG4mIzQzO1x0YXIubGVuID0gMTtcbiYjNDM7XHRpZiAoU19JU1JFRyhpbm9kZS1cdTAwM2VpX21vZGUpKVxuJiM0MztcdFx0YXIuZmxhZ3MgPSBFWFQ0X01CX0hJTlRfREFUQTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRhci5mbGFncyA9IDA7XG4mIzQzO1x0bmV3YmxvY2sgPSBleHQ0X21iX25ld19ibG9ja3MoaGFuZGxlLCBcdTAwMjZhciwgXHUwMDI2ZXJyb3IpO1xuIFx0aWYgKGVycm9yIFx1MDAzYyAwKVxuLVx0XHRnb3RvIG91dF9yZXN0b3JlO1xuLVx0aWYgKCEobWFwLm1fZmxhZ3MgXHUwMDI2IEVYVDRfTUFQX01BUFBFRCkpIHtcbi1cdFx0ZXJyb3IgPSAtRUlPO1xuLVx0XHRnb3RvIG91dF9yZXN0b3JlO1xuLVx0fVxuLVxuLVx0ZGF0YV9iaCA9IHNiX2dldGJsayhpbm9kZS1cdTAwM2VpX3NiLCBtYXAubV9wYmxrKTtcbi1cdGlmICghZGF0YV9iaCkge1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0YWxsb2NhdGVkX2Jsb2NrID0gRVhUNF9DMkIoc2JpLCBhci5sZW4pO1xuJiM0MztcdGJoID0gc2JfZ2V0YmxrKGlub2RlLVx1MDAzZWlfc2IsIG5ld2Jsb2NrKTtcbiYjNDM7XHRpZiAoIWJoKSB7XG4gXHRcdGVycm9yID0gLUVOT01FTTtcbi1cdFx0Z290byBvdXRfcmVzdG9yZTtcbiYjNDM7XHRcdGdvdG8gb3V0X2JoO1xuIFx0fVxuIFxuLVx0bG9ja19idWZmZXIoZGF0YV9iaCk7XG4tXHRlcnJvciA9IGV4dDRfam91cm5hbF9nZXRfY3JlYXRlX2FjY2VzcyhoYW5kbGUsIGlub2RlLVx1MDAzZWlfc2IsIGRhdGFfYmgsXG4mIzQzO1x0bG9ja19idWZmZXIoYmgpO1xuJiM0MztcdGVycm9yID0gZXh0NF9qb3VybmFsX2dldF9jcmVhdGVfYWNjZXNzKGhhbmRsZSwgaW5vZGUtXHUwMDNlaV9zYiwgYmgsXG4gXHRcdFx0XHRcdCAgICAgICBFWFQ0X0pUUl9OT05FKTtcbiBcdGlmIChlcnJvcikge1xuLVx0XHR1bmxvY2tfYnVmZmVyKGRhdGFfYmgpO1xuJiM0MztcdFx0dW5sb2NrX2J1ZmZlcihiaCk7XG4gXHRcdGVycm9yID0gLUVJTztcbi1cdFx0Z290byBvdXRfcmVzdG9yZTtcbiYjNDM7XHRcdGdvdG8gb3V0X2JoO1xuIFx0fVxuLVx0bWVtc2V0KGRhdGFfYmgtXHUwMDNlYl9kYXRhLCAwLCBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplKTtcbiYjNDM7XHRtZW1zZXQoYmgtXHUwMDNlYl9kYXRhLCAwLCBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplKTtcbiBcbiBcdGlmICghU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4tXHRcdG1lbWNweShkYXRhX2JoLVx1MDAzZWJfZGF0YSwgYnVmLCBpbmxpbmVfc2l6ZSk7XG4tXHRcdHNldF9idWZmZXJfdXB0b2RhdGUoZGF0YV9iaCk7XG4tXHRcdHVubG9ja19idWZmZXIoZGF0YV9iaCk7XG4mIzQzO1x0XHRtZW1jcHkoYmgtXHUwMDNlYl9kYXRhLCBidWYsIGlubGluZV9zaXplKTtcbiYjNDM7XHRcdHNldF9idWZmZXJfdXB0b2RhdGUoYmgpO1xuJiM0MztcdFx0dW5sb2NrX2J1ZmZlcihiaCk7XG4gXHRcdGVycm9yID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLFxuLVx0XHRcdFx0XHRcdCAgIGlub2RlLCBkYXRhX2JoKTtcbiYjNDM7XHRcdFx0XHRcdFx0ICAgaW5vZGUsIGJoKTtcbiBcdH0gZWxzZSB7XG4tXHRcdHVubG9ja19idWZmZXIoZGF0YV9iaCk7XG4tXHRcdGlub2RlLVx1MDAzZWlfc2l6ZSA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemU7XG4tXHRcdGlfc2l6ZV93cml0ZShpbm9kZSwgaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZSk7XG4tXHRcdEVYVDRfSShpbm9kZSktXHUwMDNlaV9kaXNrc2l6ZSA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemU7XG4tXG4tXHRcdGVycm9yID0gZXh0NF9pbml0X2RpcmJsb2NrKGhhbmRsZSwgaW5vZGUsIGRhdGFfYmgsXG4mIzQzO1x0XHR1bmxvY2tfYnVmZmVyKGJoKTtcbiYjNDM7XHRcdGVycm9yID0gZXh0NF9pbml0X2RpcmJsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLFxuIFx0XHRcdCAgbGUzMl90b19jcHUoKChzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqKWJ1ZiktXHUwMDNlaW5vZGUpLFxuIFx0XHRcdCAgYnVmICYjNDM7IEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFLFxuIFx0XHRcdCAgaW5saW5lX3NpemUgLSBFWFQ0X0lOTElORV9ET1RET1RfU0laRSk7XG4tXHRcdGlmICghZXJyb3IpXG4tXHRcdFx0ZXJyb3IgPSBleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7XG4gXHR9XG4mIzQzO291dF9iaDpcbiYjNDM7XHRpZiAoZXJyb3IpIHtcbiYjNDM7XHRcdGlmIChiaClcbiYjNDM7XHRcdFx0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIG5ld2Jsb2NrKTtcbiYjNDM7XHRcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gRVhUNF9JKGlub2RlKTtcbiBcbi1vdXRfcmVzdG9yZTpcbi1cdGlmIChlcnJvcilcbi1cdFx0ZXh0NF9yZXN0b3JlX2lubGluZV9kYXRhKGhhbmRsZSwgaW5vZGUsIGlsb2MsIGJ1ZiwgaW5saW5lX3NpemUpO1xuLVxuJiM0MztcdFx0ZG93bl93cml0ZShcdTAwMjZlaS1cdTAwM2VpX2RhdGFfc2VtKTtcbiYjNDM7XHRcdGV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7XG4mIzQzO1x0XHRleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIG5ld2Jsb2NrLCBhbGxvY2F0ZWRfYmxvY2ssIDApO1xuJiM0MztcdFx0dXBfd3JpdGUoXHUwMDI2ZWktXHUwMDNlaV9kYXRhX3NlbSk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGVycm9yID0gZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2soaGFuZGxlLCBpbm9kZSxcbiYjNDM7XHRcdFx0XHRuZXdibG9jaywgYWxsb2NhdGVkX2Jsb2NrLCBiaCk7XG4mIzQzO1x0fVxuIG91dDpcbi1cdGJyZWxzZShkYXRhX2JoKTtcbiBcdGtmcmVlKGJ1Zik7XG4gXHRyZXR1cm4gZXJyb3I7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjUzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEmIzM0OywKICAgICYjMzQ7ZXh0NF90cnlfYWRkX2lubGluZV9lbnRyeSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBleHQ0IGlubGluZSBkYXRhIGNvbnZlcnNpb24gbG9naWMgaW4gZnMvZXh0NC9pbmxpbmUuYywgcmVwbGFjaW5nIHRoZSBpbmxpbmUgZGF0YSByZXN0b3JhdGlvbiBmbG93IHdpdGggYSBuZXcgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2sgZnVuY3Rpb24gYW5kIHJlZmFjdG9yaW5nIGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2suIFRoZXNlIGNoYW5nZXMgYWx0ZXIgaG93IGV4dDQgY29udmVydHMgaW5saW5lIGRpcmVjdG9yeS9maWxlIGRhdGEgaW50byBleHRlbnQvYmxvY2sgYWxsb2NhdGlvbnMgYW5kIGFyZSBmdWxseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzOWZmZjMyNDhmYTdjZDdjYmYyZDQ0YTZjYzU0NDRlYmYxNzdkODM2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMDI6NTM6MDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leHQ0L2lubGluZS5jIGIvZnMvZXh0NC9pbmxpbmUuYwppbmRleCA4MDQ1ZTRmZjI3MGM3Li45MzljNmJmMjBiNWI3IDEwMDY0NAotLS0gYS9mcy9leHQ0L2lubGluZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvaW5saW5lLmMKQEAgLTE0LDYgJiM0MzsxNCw3IEBACiAjaW5jbHVkZSAmIzM0O2V4dDQuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3hhdHRyLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt0cnVuY2F0ZS5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2V4dDRfZXh0ZW50cy5oJiMzNDsKIAogI2RlZmluZSBFWFQ0X1hBVFRSX1NZU1RFTV9EQVRBCSYjMzQ7ZGF0YSYjMzQ7CiAjZGVmaW5lIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUJKChzaXplb2YoX19sZTMyKSAqIEVYVDRfTl9CTE9DS1MpKQpAQCAtMTA3MCwyMSAmIzQzOzEwNzEsMTI1IEBAIHN0YXRpYyBpbnQgZXh0NF91cGRhdGVfaW5saW5lX2RpcihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZXh0NF9yZXN0b3JlX2lubGluZV9kYXRhKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJICAgICBzdHJ1Y3QgZXh0NF9pbG9jICppbG9jLAotCQkJCSAgICAgdm9pZCAqYnVmLCBpbnQgaW5saW5lX3NpemUpCiYjNDM7c3RhdGljIGludCBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2ZzYmxrX3QgYmxvY2ssCiYjNDM7CQkJCQl1bnNpZ25lZCBpbnQgbGVuLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQogewotCWludCByZXQ7CiYjNDM7CXN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gRVhUNF9JKGlub2RlKTsKJiM0MzsJc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCBpcyA9IHsKJiM0MzsJCS5zID0geyAubm90X2ZvdW5kID0gMCwgfSwKJiM0MzsJfTsKJiM0MzsJc3RydWN0IGV4dDRfeGF0dHJfaW5mbyBpID0gewomIzQzOwkJLm5hbWVfaW5kZXggPSBFWFQ0X1hBVFRSX0lOREVYX1NZU1RFTSwKJiM0MzsJCS5uYW1lID0gRVhUNF9YQVRUUl9TWVNURU1fREFUQSwKJiM0MzsJCS52YWx1ZSA9IE5VTEwsCiYjNDM7CQkudmFsdWVfbGVuID0gMCwKJiM0MzsJfTsKJiM0MzsJaW50IGVycm9yOwomIzQzOwl2b2lkICppX2Jsb2NrX2J1ZiA9IE5VTEw7CiYjNDM7CXZvaWQgKnhhdHRyX2J1ZiA9IE5VTEw7CiYjNDM7CXZvaWQgKmhlYWRlciA9IE5VTEw7CiYjNDM7CXZvaWQgKnRhaWwgPSBOVUxMOwomIzQzOwlpbnQgeGF0dHJfc2l6ZTsKJiM0MzsJc3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZTsKIAotCXJldCA9IGV4dDRfY3JlYXRlX2lubGluZV9kYXRhKGhhbmRsZSwgaW5vZGUsIGlubGluZV9zaXplKTsKLQlpZiAocmV0KSB7Ci0JCWV4dDRfbXNnKGlub2RlLSZndDtpX3NiLCBLRVJOX0VNRVJHLAotCQkJJiMzNDtlcnJvciByZXN0b3JpbmcgaW5saW5lX2RhdGEgZm9yIGlub2RlIC0tIHBvdGVudGlhbCBkYXRhIGxvc3MhIChpbm9kZSAlbGx1LCBlcnJvciAlZCkmIzM0OywKLQkJCWlub2RlLSZndDtpX2lubywgcmV0KTsKLQkJcmV0dXJuOwomIzQzOwlpX2Jsb2NrX2J1ZiA9IGttYWxsb2MoRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSwgR0ZQX05PRlMpOwomIzQzOwlpZiAoIWlfYmxvY2tfYnVmKSB7CiYjNDM7CQllcnJvciA9IC1FTk9NRU07CiYjNDM7CQlkb3duX3dyaXRlKCZhbXA7ZWktJmd0O2lfZGF0YV9zZW0pOwomIzQzOwkJZ290byBlcnJvcjsKIAl9Ci0JZXh0NF93cml0ZV9pbmxpbmVfZGF0YShpbm9kZSwgaWxvYywgYnVmLCAwLCBpbmxpbmVfc2l6ZSk7Ci0JZXh0NF9zZXRfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTsKJiM0MzsJZG93bl93cml0ZSgmYW1wO2VpLSZndDtpX2RhdGFfc2VtKTsKJiM0MzsJZXJyb3IgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsICZhbXA7aXMuaWxvYyk7CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCWdvdG8gZXJyb3I7CiYjNDM7CXJhd19pbm9kZSA9IGV4dDRfcmF3X2lub2RlKCZhbXA7aXMuaWxvYyk7CiYjNDM7CWhlYWRlciA9IElIRFIoaW5vZGUsIHJhd19pbm9kZSk7CiYjNDM7CXRhaWwgPSBJVEFJTChpbm9kZSwgcmF3X2lub2RlKTsKJiM0MzsJeGF0dHJfc2l6ZSA9IHRhaWwgLSBoZWFkZXI7CiYjNDM7CXhhdHRyX2J1ZiA9IGttYWxsb2MoeGF0dHJfc2l6ZSwgR0ZQX05PRlMpOwomIzQzOwlpZiAoIXhhdHRyX2J1ZikgewomIzQzOwkJZXJyb3IgPSAtRU5PTUVNOwomIzQzOwkJZ290byBlcnJvcjsKJiM0MzsJfQomIzQzOwlCVUZGRVJfVFJBQ0UoaXMuaWxvYy5iaCwgJiMzNDtnZXRfd3JpdGVfYWNjZXNzJiMzNDspOwomIzQzOwllcnJvciA9IGV4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgaW5vZGUtJmd0O2lfc2IsIGlzLmlsb2MuYmgsIEVYVDRfSlRSX05PTkUpOwomIzQzOwlpZiAoZXJyb3IpIHsKJiM0MzsJCWV4dDRfZm9yZ2V0KGhhbmRsZSwgMCwgaW5vZGUsIGJoLCBibG9jayk7CiYjNDM7CQlleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpOwomIzQzOwkJZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBOVUxMLCBibG9jaywgbGVuLCAwKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CW1lbWNweShpX2Jsb2NrX2J1ZiwgKHZvaWQgKilyYXdfaW5vZGUtJmd0O2lfYmxvY2ssIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpOwomIzQzOwltZW1zZXQoKHZvaWQgKilyYXdfaW5vZGUtJmd0O2lfYmxvY2ssIDAsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpOwomIzQzOwltZW1zZXQoZWktJmd0O2lfZGF0YSwgMCwgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7CiYjNDM7CW1lbWNweSh4YXR0cl9idWYsIGhlYWRlciwgeGF0dHJfc2l6ZSk7CiYjNDM7CWlmIChleHQ0X2hhc19mZWF0dXJlX2V4dGVudHMoaW5vZGUtJmd0O2lfc2IpICZhbXA7JmFtcDsKJiM0MzsJCShTX0lTRElSKGlub2RlLSZndDtpX21vZGUpIHx8IFNfSVNSRUcoaW5vZGUtJmd0O2lfbW9kZSkgfHwgU19JU0xOSyhpbm9kZS0mZ3Q7aV9tb2RlKSkpIHsKJiM0MzsJCWV4dDRfc2V0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUyk7CiYjNDM7CQlleHQ0X2V4dF90cmVlX2luaXQoaGFuZGxlLCBpbm9kZSk7CiYjNDM7CQlzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIDAsIE5VTEwsIDApOwomIzQzOwomIzQzOwkJaWYgKElTX0VSUihwYXRoKSkgewomIzQzOwkJCWVycm9yID0gUFRSX0VSUihwYXRoKTsKJiM0MzsJCQlnb3RvIHJlY292ZXJ5OwomIzQzOwkJfQomIzQzOwkJc3RydWN0IGV4dDRfZXh0ZW50IG5ld2V4OwomIzQzOwomIzQzOwkJbmV3ZXguZWVfYmxvY2sgPSBjcHVfdG9fbGUzMigwKTsKJiM0MzsJCW5ld2V4LmVlX2xlbiA9IGNwdV90b19sZTE2KDEpOwomIzQzOwkJZXh0NF9leHRfc3RvcmVfcGJsb2NrKCZhbXA7bmV3ZXgsIGJsb2NrKTsKJiM0MzsJCXBhdGggPSBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgaW5vZGUsIHBhdGgsICZhbXA7bmV3ZXgsIDApOwomIzQzOwkJaWYgKElTX0VSUihwYXRoKSkgewomIzQzOwkJCWVycm9yID0gUFRSX0VSUihwYXRoKTsKJiM0MzsJCQlpZiAoZXJyb3IgPT0gLUVEUVVPVCB8fCBlcnJvciA9PSAtRU5PU1BDKQomIzQzOwkJCQlnb3RvIHJlY292ZXJ5OwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlleHQ0X2ZyZWVfZXh0X3BhdGgocGF0aCk7CiYjNDM7CQl9CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlFWFQ0X0koaW5vZGUpLSZndDtpX2RhdGFbMF0gPSBjcHVfdG9fbGUzMihibG9jayk7CiYjNDM7CX0KJiM0MzsJZXJyb3IgPSBleHQ0X3hhdHRyX2lib2R5X2ZpbmQoaW5vZGUsICZhbXA7aSwgJmFtcDtpcyk7CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCWdvdG8gcmVjb3Zlcnk7CiYjNDM7CWlmICghaXMucy5ub3RfZm91bmQpCiYjNDM7CQllcnJvciA9IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZSwgaW5vZGUsICZhbXA7aSwgJmFtcDtpcyk7CiYjNDM7cmVjb3Zlcnk6CiYjNDM7CWlmIChlcnJvcikgewomIzQzOwkJZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIGJsb2NrKTsKJiM0MzsJCWV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7CiYjNDM7CQlleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIGJsb2NrLCBsZW4sIDApOwomIzQzOwkJbWVtY3B5KCh2b2lkICopcmF3X2lub2RlLSZndDtpX2Jsb2NrLCBpX2Jsb2NrX2J1ZiwgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7CiYjNDM7CQltZW1jcHkoZWktJmd0O2lfZGF0YSwgcmF3X2lub2RlLSZndDtpX2Jsb2NrLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTsKJiM0MzsJCW1lbWNweShoZWFkZXIsIHhhdHRyX2J1ZiwgeGF0dHJfc2l6ZSk7CiYjNDM7CQlleHQ0X2NsZWFyX2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUyk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlleHQ0X2NsZWFyX2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpOwomIzQzOwkJaWYgKFNfSVNESVIoaW5vZGUtJmd0O2lfbW9kZSkpIHsKJiM0MzsJCQlpX3NpemVfd3JpdGUoaW5vZGUsIGlub2RlLSZndDtpX3NiLSZndDtzX2Jsb2Nrc2l6ZSk7CiYjNDM7CQkJRVhUNF9JKGlub2RlKS0mZ3Q7aV9kaXNrc2l6ZSA9IGlub2RlLSZndDtpX3NiLSZndDtzX2Jsb2Nrc2l6ZTsKJiM0MzsJCX0KJiM0MzsJCWdldF9iaChpcy5pbG9jLmJoKTsKJiM0MzsJCWVycm9yID0gZXh0NF9tYXJrX2lsb2NfZGlydHkoaGFuZGxlLCBpbm9kZSwgJmFtcDtpcy5pbG9jKTsKJiM0MzsJCUVYVDRfSShpbm9kZSktJmd0O2lfaW5saW5lX29mZiA9IDA7CiYjNDM7CQlFWFQ0X0koaW5vZGUpLSZndDtpX2lubGluZV9zaXplID0gMDsKJiM0MzsJCWV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTsKJiM0MzsJCWJyZWxzZShiaCk7CiYjNDM7CX0KJiM0MztvdXQ6CiYjNDM7CWJyZWxzZShpcy5pbG9jLmJoKTsKJiM0MzsJdXBfd3JpdGUoJmFtcDtlaS0mZ3Q7aV9kYXRhX3NlbSk7CiYjNDM7CWtmcmVlKGlfYmxvY2tfYnVmKTsKJiM0MzsJa2ZyZWUoeGF0dHJfYnVmKTsKJiM0MzsJcmV0dXJuIGVycm9yOwomIzQzO2Vycm9yOgomIzQzOwlleHQ0X2ZvcmdldChoYW5kbGUsIDAsIGlub2RlLCBiaCwgYmxvY2spOwomIzQzOwlleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpOwomIzQzOwlleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIGJsb2NrLCBsZW4sIDApOwomIzQzOwl1cF93cml0ZSgmYW1wO2VpLSZndDtpX2RhdGFfc2VtKTsKJiM0MzsJa2ZyZWUoaV9ibG9ja19idWYpOwomIzQzOwlrZnJlZSh4YXR0cl9idWYpOwomIzQzOwlyZXR1cm4gZXJyb3I7CiB9CiAKIHN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLApAQCAtMTA5Myw5ICYjNDM7MTE5OCwxMiBAQCBzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSwKIHsKIAlpbnQgZXJyb3I7CiAJdm9pZCAqYnVmID0gTlVMTDsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRhdGFfYmggPSBOVUxMOwotCXN0cnVjdCBleHQ0X21hcF9ibG9ja3MgbWFwOwomIzQzOwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsKIAlpbnQgaW5saW5lX3NpemU7CiYjNDM7CWV4dDRfZnNibGtfdCBuZXdibG9jayA9IDA7CiYjNDM7CXN0cnVjdCBleHQ0X2FsbG9jYXRpb25fcmVxdWVzdCBhcjsKJiM0MzsJc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihpbm9kZS0mZ3Q7aV9zYik7CiYjNDM7CXVuc2lnbmVkIGludCBhbGxvY2F0ZWRfYmxvY2s7CiAKIAlpbmxpbmVfc2l6ZSA9IGV4dDRfZ2V0X2lubGluZV9zaXplKGlub2RlKTsKIAlidWYgPSBrbWFsbG9jKGlubGluZV9zaXplLCBHRlBfTk9GUyk7CkBAIC0xMTIwLDYzICYjNDM7MTIyOCw2MiBAQCBzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSwKIAkJCWdvdG8gb3V0OwogCX0KIAotCWVycm9yID0gZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGUsIGlub2RlKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0OwotCi0JbWFwLm1fbGJsayA9IDA7Ci0JbWFwLm1fbGVuID0gMTsKLQltYXAubV9mbGFncyA9IDA7Ci0JZXJyb3IgPSBleHQ0X21hcF9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgJmFtcDttYXAsIEVYVDRfR0VUX0JMT0NLU19DUkVBVEUpOwomIzQzOwltZW1zZXQoJmFtcDthciwgMCwgc2l6ZW9mKGFyKSk7CiYjNDM7CWFyLmlub2RlID0gaW5vZGU7CiYjNDM7CWFyLmxvZ2ljYWwgPSAwOwomIzQzOwlhci5sZW4gPSAxOwomIzQzOwlpZiAoU19JU1JFRyhpbm9kZS0mZ3Q7aV9tb2RlKSkKJiM0MzsJCWFyLmZsYWdzID0gRVhUNF9NQl9ISU5UX0RBVEE7CiYjNDM7CWVsc2UKJiM0MzsJCWFyLmZsYWdzID0gMDsKJiM0MzsJbmV3YmxvY2sgPSBleHQ0X21iX25ld19ibG9ja3MoaGFuZGxlLCAmYW1wO2FyLCAmYW1wO2Vycm9yKTsKIAlpZiAoZXJyb3IgJmx0OyAwKQotCQlnb3RvIG91dF9yZXN0b3JlOwotCWlmICghKG1hcC5tX2ZsYWdzICZhbXA7IEVYVDRfTUFQX01BUFBFRCkpIHsKLQkJZXJyb3IgPSAtRUlPOwotCQlnb3RvIG91dF9yZXN0b3JlOwotCX0KLQotCWRhdGFfYmggPSBzYl9nZXRibGsoaW5vZGUtJmd0O2lfc2IsIG1hcC5tX3BibGspOwotCWlmICghZGF0YV9iaCkgewomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWFsbG9jYXRlZF9ibG9jayA9IEVYVDRfQzJCKHNiaSwgYXIubGVuKTsKJiM0MzsJYmggPSBzYl9nZXRibGsoaW5vZGUtJmd0O2lfc2IsIG5ld2Jsb2NrKTsKJiM0MzsJaWYgKCFiaCkgewogCQllcnJvciA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0X3Jlc3RvcmU7CiYjNDM7CQlnb3RvIG91dF9iaDsKIAl9CiAKLQlsb2NrX2J1ZmZlcihkYXRhX2JoKTsKLQllcnJvciA9IGV4dDRfam91cm5hbF9nZXRfY3JlYXRlX2FjY2VzcyhoYW5kbGUsIGlub2RlLSZndDtpX3NiLCBkYXRhX2JoLAomIzQzOwlsb2NrX2J1ZmZlcihiaCk7CiYjNDM7CWVycm9yID0gZXh0NF9qb3VybmFsX2dldF9jcmVhdGVfYWNjZXNzKGhhbmRsZSwgaW5vZGUtJmd0O2lfc2IsIGJoLAogCQkJCQkgICAgICAgRVhUNF9KVFJfTk9ORSk7CiAJaWYgKGVycm9yKSB7Ci0JCXVubG9ja19idWZmZXIoZGF0YV9iaCk7CiYjNDM7CQl1bmxvY2tfYnVmZmVyKGJoKTsKIAkJZXJyb3IgPSAtRUlPOwotCQlnb3RvIG91dF9yZXN0b3JlOwomIzQzOwkJZ290byBvdXRfYmg7CiAJfQotCW1lbXNldChkYXRhX2JoLSZndDtiX2RhdGEsIDAsIGlub2RlLSZndDtpX3NiLSZndDtzX2Jsb2Nrc2l6ZSk7CiYjNDM7CW1lbXNldChiaC0mZ3Q7Yl9kYXRhLCAwLCBpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19ibG9ja3NpemUpOwogCiAJaWYgKCFTX0lTRElSKGlub2RlLSZndDtpX21vZGUpKSB7Ci0JCW1lbWNweShkYXRhX2JoLSZndDtiX2RhdGEsIGJ1ZiwgaW5saW5lX3NpemUpOwotCQlzZXRfYnVmZmVyX3VwdG9kYXRlKGRhdGFfYmgpOwotCQl1bmxvY2tfYnVmZmVyKGRhdGFfYmgpOwomIzQzOwkJbWVtY3B5KGJoLSZndDtiX2RhdGEsIGJ1ZiwgaW5saW5lX3NpemUpOwomIzQzOwkJc2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7CiYjNDM7CQl1bmxvY2tfYnVmZmVyKGJoKTsKIAkJZXJyb3IgPSBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsCi0JCQkJCQkgICBpbm9kZSwgZGF0YV9iaCk7CiYjNDM7CQkJCQkJICAgaW5vZGUsIGJoKTsKIAl9IGVsc2UgewotCQl1bmxvY2tfYnVmZmVyKGRhdGFfYmgpOwotCQlpbm9kZS0mZ3Q7aV9zaXplID0gaW5vZGUtJmd0O2lfc2ItJmd0O3NfYmxvY2tzaXplOwotCQlpX3NpemVfd3JpdGUoaW5vZGUsIGlub2RlLSZndDtpX3NiLSZndDtzX2Jsb2Nrc2l6ZSk7Ci0JCUVYVDRfSShpbm9kZSktJmd0O2lfZGlza3NpemUgPSBpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19ibG9ja3NpemU7Ci0KLQkJZXJyb3IgPSBleHQ0X2luaXRfZGlyYmxvY2soaGFuZGxlLCBpbm9kZSwgZGF0YV9iaCwKJiM0MzsJCXVubG9ja19idWZmZXIoYmgpOwomIzQzOwkJZXJyb3IgPSBleHQ0X2luaXRfZGlyYmxvY2soaGFuZGxlLCBpbm9kZSwgYmgsCiAJCQkgIGxlMzJfdG9fY3B1KCgoc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKilidWYpLSZndDtpbm9kZSksCiAJCQkgIGJ1ZiAmIzQzOyBFWFQ0X0lOTElORV9ET1RET1RfU0laRSwKIAkJCSAgaW5saW5lX3NpemUgLSBFWFQ0X0lOTElORV9ET1RET1RfU0laRSk7Ci0JCWlmICghZXJyb3IpCi0JCQllcnJvciA9IGV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTsKIAl9CiYjNDM7b3V0X2JoOgomIzQzOwlpZiAoZXJyb3IpIHsKJiM0MzsJCWlmIChiaCkKJiM0MzsJCQlleHQ0X2ZvcmdldChoYW5kbGUsIDAsIGlub2RlLCBiaCwgbmV3YmxvY2spOwomIzQzOwkJc3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpOwogCi1vdXRfcmVzdG9yZToKLQlpZiAoZXJyb3IpCi0JCWV4dDRfcmVzdG9yZV9pbmxpbmVfZGF0YShoYW5kbGUsIGlub2RlLCBpbG9jLCBidWYsIGlubGluZV9zaXplKTsKLQomIzQzOwkJZG93bl93cml0ZSgmYW1wO2VpLSZndDtpX2RhdGFfc2VtKTsKJiM0MzsJCWV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7CiYjNDM7CQlleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIG5ld2Jsb2NrLCBhbGxvY2F0ZWRfYmxvY2ssIDApOwomIzQzOwkJdXBfd3JpdGUoJmFtcDtlaS0mZ3Q7aV9kYXRhX3NlbSk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQllcnJvciA9IGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrKGhhbmRsZSwgaW5vZGUsCiYjNDM7CQkJCW5ld2Jsb2NrLCBhbGxvY2F0ZWRfYmxvY2ssIGJoKTsKJiM0MzsJfQogb3V0OgotCWJyZWxzZShkYXRhX2JoKTsKIAlrZnJlZShidWYpOwogCXJldHVybiBlcnJvcjsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUwMwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGV4dDQgSW5saW5lIERhdGEgQ29udmVyc2lvbiBQYXRjaCoqCgpPa2F5LCBzbyB0aGUgcGF0Y2ggaXMgcmlnaHQgaW4gYGZzL2V4dDQvaW5saW5lLmNgLiBMZXQmIzM5O3MgZGlnIGluLiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIHRocnVzdCBpcyByZXdyaXRpbmcgcGFydHMgb2YgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2tgLiBUaGV5JiMzOTtyZSBhbHNvIHJlcGxhY2luZyBgZXh0NF9yZXN0b3JlX2lubGluZV9kYXRhYCB3aXRoIGBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9ja2AuIFRoaXMgaW5zdGFudGx5IHNjcmVhbXMgJiMzNDtpbmxpbmUgZGF0YSBjb252ZXJzaW9uIGluIGV4dDQuJiMzNDsgV2UmIzM5O3JlIHRhbGtpbmcgY29yZSBmaWxlc3lzdGVtIGxvZ2ljIGhlcmUsIHRoZSBzdHVmZiB0aGF0IGtpY2tzIGluIHdoZW4gYSBmaWxlJiMzOTtzIGlubGluZSBkYXRhIG5lZWRzIHRvIGJlIHNoaWZ0ZWQgdG8gYSBtb3JlIHRyYWRpdGlvbmFsIGV4dGVudC9ibG9jay1iYXNlZCByZXByZXNlbnRhdGlvbiBiZWNhdXNlIGl0JiMzOTtzIGdyb3duIHRvbyBsYXJnZSBvciBzb21lIG90aGVyIGNvbmRpdGlvbiB0cmlnZ2VycyB0aGUgY2hhbmdlLgoKTXkgbmV4dCBzdGVwLCBhbmQgdGhpcyBpcyBjcnVjaWFsLCBpcyB0byBjaGVjayB0aGUgY2FsbGVycyBvZiBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja2AsIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFgLCBhbmQgZXNzZW50aWFsbHkgYW55IGZ1bmN0aW9uIGRlYWxpbmcgd2l0aCBpbmxpbmUgZGF0YSBpbiBleHQ0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGNoYW5nZSBpcyBoYXBwZW5pbmcgYW5kIHRoZSBpbXBhY3QgaXQgY291bGQgaGF2ZS4gSSB3YW50IHRvIHNlZSB0aGlzIHdpdGhpbiB0aGUgbGFyZ2VyIHBpY3R1cmUgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaG93IGl0IGFmZmVjdHMgdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvY3J5cHRvLmM9MTMyPXN0YXRpYyBpbnQgZXh0NF9zZXRfY29udGV4dChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB2b2lkICpjdHgsIHNpemVfdCBsZW4sXG4tLVxuZnMvZXh0NC9jcnlwdG8uYy0xNTItXG5mcy9leHQ0L2NyeXB0by5jOjE1MzpcdHJlcyA9IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YShpbm9kZSk7XG5mcy9leHQ0L2NyeXB0by5jLTE1NC1cdGlmIChyZXMpXG4tLVxuZnMvZXh0NC9leHQ0Lmg9Mzc4ND1leHRlcm4gaW50IGV4dDRfaW5saW5lX2RhdGFfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50ICpoYXNfaW5saW5lKTtcbmZzL2V4dDQvZXh0NC5oLTM3ODUtXG5mcy9leHQ0L2V4dDQuaDozNzg2OmV4dGVybiBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuZnMvZXh0NC9leHQ0LmgtMzc4Ny1cbi0tXG5mcy9leHQ0L2V4dGVudHMuYz00ODU0PWxvbmcgZXh0NF9mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTQ4ODMtXHRpbm9kZV9sb2NrKGlub2RlKTtcbmZzL2V4dDQvZXh0ZW50cy5jOjQ4ODQ6XHRyZXQgPSBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoaW5vZGUpO1xuZnMvZXh0NC9leHRlbnRzLmMtNDg4NS1cdGlmIChyZXQpXG4tLVxuZnMvZXh0NC9pbmxpbmUuYz01NDY9aW50IGV4dDRfcmVhZHBhZ2VfaW5saW5lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy01NzItXG5mcy9leHQ0L2lubGluZS5jOjU3MzpzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV90b19leHRlbnQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG5mcy9leHQ0L2lubGluZS5jLTU3NC1cdFx0XHRcdFx0ICAgICAgc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L2lubGluZS5jPTY5Nz1pbnQgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmZzL2V4dDQvaW5saW5lLmMtNzI4LVx0XHRcdC8qIFJldHJ5IGluc2lkZSAqL1xuZnMvZXh0NC9pbmxpbmUuYzo3Mjk6XHRcdFx0cmV0dXJuIGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV90b19leHRlbnQobWFwcGluZywgaW5vZGUpO1xuZnMvZXh0NC9pbmxpbmUuYy03MzAtXHRcdH1cbi0tXG5mcy9leHQ0L2lubGluZS5jPTc4ND1pbnQgZXh0NF90cnlfdG9fd3JpdGVfaW5saW5lX2RhdGEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy03ODktXHRpZiAocG9zICYjNDM7IGxlbiBcdTAwM2UgZXh0NF9nZXRfbWF4X2lubGluZV9zaXplKGlub2RlKSlcbmZzL2V4dDQvaW5saW5lLmM6NzkwOlx0XHRyZXR1cm4gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudChtYXBwaW5nLCBpbm9kZSk7XG5mcy9leHQ0L2lubGluZS5jLTc5MS1cdHJldHVybiBleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGEobWFwcGluZywgaW5vZGUsIHBvcywgbGVuLFxuLS1cbmZzL2V4dDQvaW5saW5lLmM9MTA3ND1zdGF0aWMgaW50IGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfZnNibGtfdCBibG9jayxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTExOTQtXG5mcy9leHQ0L2lubGluZS5jOjExOTU6c3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXG5mcy9leHQ0L2lubGluZS5jLTExOTYtXHRcdFx0XHRcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9pbmxpbmUuYz0xMjk2PWludCBleHQ0X3RyeV9hZGRfaW5saW5lX2VudHJ5KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBleHQ0X2ZpbGVuYW1lICpmbmFtZSxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTEzNDgtXHQgKi9cbmZzL2V4dDQvaW5saW5lLmM6MTM0OTpcdHJldCA9IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlLCBkaXIsIFx1MDAyNmlsb2MpO1xuZnMvZXh0NC9pbmxpbmUuYy0xMzUwLVxuLS1cbmZzL2V4dDQvaW5saW5lLmM9MTk1MT1pbnQgZXh0NF9pbmxpbmVfZGF0YV90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgKmhhc19pbmxpbmUpXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0yMDYyLVxuZnMvZXh0NC9pbmxpbmUuYzoyMDYzOmludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2V4dDQvaW5saW5lLmMtMjA2NC17XG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0yMTAwLVx0aWYgKGV4dDRfaGFzX2lubGluZV9kYXRhKGlub2RlKSlcbmZzL2V4dDQvaW5saW5lLmM6MjEwMTpcdFx0ZXJyb3IgPSBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZSwgaW5vZGUsIFx1MDAyNmlsb2MpO1xuZnMvZXh0NC9pbmxpbmUuYy0yMTAyLVx0ZXh0NF93cml0ZV91bmxvY2tfeGF0dHIoaW5vZGUsIFx1MDAyNm5vX2V4cGFuZCk7XG4tLVxuZnMvZXh0NC9pbm9kZS5jPTU5MzQ9aW50IGV4dDRfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL2V4dDQvaW5vZGUuYy02MDMxLVx0XHQgICAgYXR0ci1cdTAwM2VpYV9zaXplIFx1MDAzZSBFWFQ0X0koaW5vZGUpLVx1MDAzZWlfaW5saW5lX3NpemUpIHtcbmZzL2V4dDQvaW5vZGUuYzo2MDMyOlx0XHRcdGVycm9yID0gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKGlub2RlKTtcbmZzL2V4dDQvaW5vZGUuYy02MDMzLVx0XHRcdGlmIChlcnJvcilcbi0tXG5mcy9leHQ0L2lub2RlLmM9Njc4Nz12bV9mYXVsdF90IGV4dDRfcGFnZV9ta3dyaXRlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbmZzL2V4dDQvaW5vZGUuYy02ODA4LVxuZnMvZXh0NC9pbm9kZS5jOjY4MDk6XHRlcnIgPSBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoaW5vZGUpO1xuZnMvZXh0NC9pbm9kZS5jLTY4MTAtXHRpZiAoZXJyKVxuLS1cbmZzL2V4dDQvdmVyaXR5LmM9MTAyPXN0YXRpYyBpbnQgZXh0NF9iZWdpbl9lbmFibGVfdmVyaXR5KHN0cnVjdCBmaWxlICpmaWxwKVxuLS1cbmZzL2V4dDQvdmVyaXR5LmMtMTI4LVxuZnMvZXh0NC92ZXJpdHkuYzoxMjk6XHRlcnIgPSBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoaW5vZGUpO1xuZnMvZXh0NC92ZXJpdHkuYy0xMzAtXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczOTcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgZXh0NCBJbmxpbmUgRGF0YSBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBzdHJhaWdodCBpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgZm9yIGV4dDQgYW5kLCBzcGVjaWZpY2FsbHksIGhvdyBpdCBoYW5kbGVzIGlubGluZSBkYXRhLiBUaW1lIHRvIHB1bGwgdXAgYGZzL2V4dDQvS2NvbmZpZ2AuIEkga25vdyB0aGUgYmFzaWNzLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoZSBleGFjdCBkZXBlbmRlbmNpZXMgYW5kIGFueSBwb3RlbnRpYWxseSB0cmlja3kgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIGlubGluZSBkYXRhIHN1cHBvcnQgYW5kIG90aGVyIGV4dDQgZmVhdHVyZXMuIEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgY3JpdGljYWwsIHBhcnRpY3VsYXJseSBhbnkgc3VidGxlIGludGVycGxheSB3aXRoIGZlYXR1cmVzIGxpa2UgcXVvdGFzLCBlbmNyeXB0aW9uLCBvciBqb3VybmFsIHNldHRpbmdzLiBJdOKAmXMgYWx3YXlzIGJlc3QgdG8gYmUgdGhvcm91Z2gsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggY29yZSBmaWxlc3lzdGVtIGNvbXBvbmVudHMuIFRoaXMgaXMganVzdCBhIHF1aWNrIGNoZWNrIHRvIGVuc3VyZSBJIGhhdmUgYSBjb21wbGV0ZSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19FWFQ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0Ly5rdW5pdGNvbmZpZz0xPUNPTkZJR19LVU5JVD15XG5mcy9leHQ0Ly5rdW5pdGNvbmZpZzoyOkNPTkZJR19FWFQ0X0ZTPXlcbmZzL2V4dDQvLmt1bml0Y29uZmlnOjM6Q09ORklHX0VYVDRfS1VOSVRfVEVTVFM9eVxuLS1cbmZzL2V4dDQvTWFrZWZpbGUtNS1cbmZzL2V4dDQvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfRVhUNF9GUykgJiM0Mzs9IGV4dDQub1xuZnMvZXh0NC9NYWtlZmlsZS03LVxuZnMvZXh0NC9NYWtlZmlsZT04PWV4dDQteVx0Oj0gYmFsbG9jLm8gYml0bWFwLm8gYmxvY2tfdmFsaWRpdHkubyBkaXIubyBleHQ0X2piZDIubyBleHRlbnRzLm8gXFxcbi0tXG5mcy9leHQ0L01ha2VmaWxlLTE0LVxuZnMvZXh0NC9NYWtlZmlsZToxNTpleHQ0LSQoQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMKVx0JiM0Mzs9IGFjbC5vXG5mcy9leHQ0L01ha2VmaWxlOjE2OmV4dDQtJChDT05GSUdfRVhUNF9GU19TRUNVUklUWSlcdFx0JiM0Mzs9IHhhdHRyX3NlY3VyaXR5Lm9cbmZzL2V4dDQvTWFrZWZpbGUtMTctZXh0NC10ZXN0LW9ianNcdFx0XHRcdCYjNDM7PSBpbm9kZS10ZXN0Lm8gbWJhbGxvYy10ZXN0Lm8gXFxcbmZzL2V4dDQvTWFrZWZpbGUtMTgtXHRcdFx0XHRcdCAgIGV4dGVudHMtdGVzdC5vIGhhc2gtdGVzdC5vXG5mcy9leHQ0L01ha2VmaWxlOjE5Om9iai0kKENPTkZJR19FWFQ0X0tVTklUX1RFU1RTKVx0XHQmIzQzOz0gZXh0NC10ZXN0Lm9cbmZzL2V4dDQvTWFrZWZpbGUtMjAtZXh0NC0kKENPTkZJR19GU19WRVJJVFkpXHRcdCYjNDM7PSB2ZXJpdHkub1xuLS1cbmZzL2V4dDQvYWNsLmg9Mzk9c3RhdGljIGlubGluZSBpbnQgZXh0NF9hY2xfY291bnQoc2l6ZV90IHNpemUpXG4tLVxuZnMvZXh0NC9hY2wuaC01NC1cbmZzL2V4dDQvYWNsLmg6NTU6I2lmZGVmIENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTFxuZnMvZXh0NC9hY2wuaC01Ni1cbi0tXG5mcy9leHQ0L2FjbC5oPTYxPWV4dGVybiBpbnQgZXh0NF9pbml0X2FjbChoYW5kbGVfdCAqLCBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGlub2RlICopO1xuZnMvZXh0NC9hY2wuaC02Mi1cbmZzL2V4dDQvYWNsLmg6NjM6I2Vsc2UgIC8qIENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTCAqL1xuZnMvZXh0NC9hY2wuaC02NC0jaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG4tLVxuZnMvZXh0NC9hY2wuaD02OT1leHQ0X2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyKVxuLS1cbmZzL2V4dDQvYWNsLmgtNzItfVxuZnMvZXh0NC9hY2wuaDo3MzojZW5kaWYgIC8qIENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTCAqL1xuZnMvZXh0NC9hY2wuaC03NC1cbi0tXG5mcy9leHQ0L2V4dDQuaC05MS0gKi9cbmZzL2V4dDQvZXh0NC5oOjkyOiNpZmRlZiBDT05GSUdfRVhUNF9ERUJVR1xuZnMvZXh0NC9leHQ0LmgtOTMtI2RlZmluZSBleHRfZGVidWcoaW5vLCBmbXQsIC4uLilcdFx0XHRcdFx0XFxcbi0tXG5mcy9leHQ0L2V4dDQuaD0xNTg2PXN0cnVjdCBleHQ0X3NiX2luZm8ge1xuLS1cbmZzL2V4dDQvZXh0NC5oLTE3OTUtXHR1NjQgc19kYXhfcGFydF9vZmY7XG5mcy9leHQ0L2V4dDQuaDoxNzk2OiNpZmRlZiBDT05GSUdfRVhUNF9ERUJVR1xuZnMvZXh0NC9leHQ0LmgtMTc5Ny1cdHVuc2lnbmVkIGxvbmcgc19zaW11bGF0ZV9mYWlsO1xuLS1cbmZzL2V4dDQvZXh0NC5oLTE4NTgtXHR0aWRfdCBzX2ZjX2luZWxpZ2libGVfdGlkO1xuZnMvZXh0NC9leHQ0Lmg6MTg1OTojaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcbmZzL2V4dDQvZXh0NC5oLTE4NjAtXHRpbnQgc19mY19kZWJ1Z19tYXhfcmVwbGF5O1xuLS1cbmZzL2V4dDQvZXh0NC5oPTE5ODM9c3RhdGljIGlubGluZSBib29sIGV4dDRfc2ltdWxhdGVfZmFpbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvZXh0NC5oLTE5ODUte1xuZnMvZXh0NC9leHQ0Lmg6MTk4NjojaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcbmZzL2V4dDQvZXh0NC5oLTE5ODctXHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKHNiKTtcbi0tXG5mcy9leHQ0L2V4dDQuaD00MDMxPWV4dGVybiBpbnQgZXh0NF9ibG9ja193cml0ZV9iZWdpbihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmZzL2V4dDQvZXh0NC5oLTQwMzQtXG5mcy9leHQ0L2V4dDQuaDo0MDM1OiNpZiBJU19FTkFCTEVEKENPTkZJR19FWFQ0X0tVTklUX1RFU1RTKVxuZnMvZXh0NC9leHQ0LmgtNDAzNi0jZGVmaW5lIEVYUE9SVF9TWU1CT0xfRk9SX0VYVDRfVEVTVChzeW0pIFxcXG4tLVxuZnMvZXh0NC9leHQ0X2V4dGVudHMuaD0yNzA9ZXh0ZXJuIGludCBleHQ0X2V4dF96ZXJvb3V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHQ0X2V4dGVudCAqZXgpO1xuZnMvZXh0NC9leHQ0X2V4dGVudHMuaDoyNzE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0VYVDRfS1VOSVRfVEVTVFMpXG5mcy9leHQ0L2V4dDRfZXh0ZW50cy5oLTI3Mi1leHRlcm4gaW50IGV4dDRfZXh0X3NwYWNlX3Jvb3RfaWR4X3Rlc3Qoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGNoZWNrKTtcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz02MjI3PWludCBleHQ0X2V4dF9jbGVhcl9iYihzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTYyNzgtXG5mcy9leHQ0L2V4dGVudHMuYzo2Mjc5OiNpZiBJU19FTkFCTEVEKENPTkZJR19FWFQ0X0tVTklUX1RFU1RTKVxuZnMvZXh0NC9leHRlbnRzLmMtNjI4MC1pbnQgZXh0NF9leHRfc3BhY2Vfcm9vdF9pZHhfdGVzdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgY2hlY2spXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTI1ODE9c3RhdGljIGludCBleHQ0X2ZjX3JlcGxheShqb3VybmFsX3QgKmpvdXJuYWwsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2MDYtXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjYwNzojaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjA4LVx0aWYgKHNiaS1cdTAwM2VzX2ZjX2RlYnVnX21heF9yZXBsYXkgXHUwMDI2XHUwMDI2IG9mZiBcdTAwM2U9IHNiaS1cdTAwM2VzX2ZjX2RlYnVnX21heF9yZXBsYXkpIHtcbi0tXG5mcy9leHQ0L2hhc2guYz0zMTQ9aW50IGV4dDRmc19kaXJoYXNoKGNvbnN0IHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLFxuLS1cbmZzL2V4dDQvaGFzaC5jLTM0NC1cbmZzL2V4dDQvaGFzaC5jOjM0NTojaWYgSVNfRU5BQkxFRChDT05GSUdfRVhUNF9LVU5JVF9URVNUUylcbmZzL2V4dDQvaGFzaC5jLTM0Ni1FWFBPUlRfU1lNQk9MX0ZPUl9FWFQ0X1RFU1QoZXh0NGZzX2Rpcmhhc2gpO1xuLS1cbmZzL2V4dDQvaWFsbG9jLmM9ODc2PXN0YXRpYyBpbnQgZXh0NF94YXR0cl9jcmVkaXRzX2Zvcl9uZXdfaW5vZGUoc3RydWN0IGlub2RlICpkaXIsIG1vZGVfdCBtb2RlLFxuLS1cbmZzL2V4dDQvaWFsbG9jLmMtODgwLVx0aW50IG5ibG9ja3MgPSAwO1xuZnMvZXh0NC9pYWxsb2MuYzo4ODE6I2lmZGVmIENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTFxuZnMvZXh0NC9pYWxsb2MuYy04ODItXHRzdHJ1Y3QgcG9zaXhfYWNsICpwID0gZ2V0X2lub2RlX2FjbChkaXIsIEFDTF9UWVBFX0RFRkFVTFQpO1xuLS1cbmZzL2V4dDQvaW5vZGUuYz00MTI9aW50IGV4dDRfaXNzdWVfemVyb291dChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBsYmxrLCBleHQ0X2ZzYmxrX3QgcGJsayxcbi0tXG5mcy9leHQ0L2lub2RlLmMtNDM2LSAqL1xuZnMvZXh0NC9pbm9kZS5jOjQzNzojaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcbmZzL2V4dDQvaW5vZGUuYy00Mzgtdm9pZCBleHQ0X2NoZWNrX21hcF9leHRlbnRzX2VudihzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jPTU3Mjg9c3RhdGljIHZvaWQgZXh0NF9tYl9wYV9wdXRfZnJlZShzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX2NvbnRleHQgKmFjKVxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jLTU3NDMtXG5mcy9leHQ0L21iYWxsb2MuYzo1NzQ0OiNpZmRlZiBDT05GSUdfRVhUNF9ERUJVR1xuZnMvZXh0NC9tYmFsbG9jLmMtNTc0NS1zdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9tYl9zaG93X3BhKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmM9NzEyOT1leHQ0X21iYWxsb2NfcXVlcnlfcmFuZ2UoXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmMtNzE4NC1cbmZzL2V4dDQvbWJhbGxvYy5jOjcxODU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0VYVDRfS1VOSVRfVEVTVFMpXG5mcy9leHQ0L21iYWxsb2MuYy03MTg2LXZvaWQgbWJfY2xlYXJfYml0c190ZXN0KHZvaWQgKmJtLCBpbnQgY3VyLCBpbnQgbGVuKVxuLS1cbmZzL2V4dDQvbWJhbGxvYy5oLTI4LSAqL1xuZnMvZXh0NC9tYmFsbG9jLmg6Mjk6I2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXG5mcy9leHQ0L21iYWxsb2MuaC0zMC0jZGVmaW5lIG1iX2RlYnVnKHNiLCBmbXQsIC4uLilcdFx0XHRcdFx0XHRcXFxuLS1cbmZzL2V4dDQvbWJhbGxvYy5oPTI3Mz1leHRlcm4gaW50IGV4dDRfbWJfbWFya19jb250ZXh0KGhhbmRsZV90ICpoYW5kbGUsXG4tLVxuZnMvZXh0NC9tYmFsbG9jLmgtMjc3LVx0XHRleHQ0X2dycGJsa190ICpyZXRfY2hhbmdlZCk7XG5mcy9leHQ0L21iYWxsb2MuaDoyNzg6I2lmIElTX0VOQUJMRUQoQ09ORklHX0VYVDRfS1VOSVRfVEVTVFMpXG5mcy9leHQ0L21iYWxsb2MuaC0yNzktZXh0ZXJuIHZvaWQgbWJfY2xlYXJfYml0c190ZXN0KHZvaWQgKmJtLCBpbnQgY3VyLCBpbnQgbGVuKTtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9MTI1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIGV4dDRfY29udGV4dF9vcHMgPSB7XG4tLVxuZnMvZXh0NC9zdXBlci5jLTEzMi1cbmZzL2V4dDQvc3VwZXIuYzoxMzM6I2lmICFkZWZpbmVkKENPTkZJR19FWFQyX0ZTKSBcdTAwMjZcdTAwMjYgIWRlZmluZWQoQ09ORklHX0VYVDJfRlNfTU9EVUxFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfRVhUNF9VU0VfRk9SX0VYVDIpXG5mcy9leHQ0L3N1cGVyLmMtMTM0LXN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBleHQyX2ZzX3R5cGUgPSB7XG4tLVxuZnMvZXh0NC9zdXBlci5jPTE2OTI9ZW51bSB7XG4tLVxuZnMvZXh0NC9zdXBlci5jLTE3MTUtXHRPcHRfZXJyb3JzLCBPcHRfZGF0YSwgT3B0X2RhdGFfZXJyLCBPcHRfanFmbXQsIE9wdF9kYXhfdHlwZSxcbmZzL2V4dDQvc3VwZXIuYzoxNzE2OiNpZmRlZiBDT05GSUdfRVhUNF9ERUJVR1xuZnMvZXh0NC9zdXBlci5jLTE3MTctXHRPcHRfZmNfZGVidWdfbWF4X3JlcGxheSwgT3B0X2ZjX2RlYnVnX2ZvcmNlXG4tLVxuZnMvZXh0NC9zdXBlci5jPTE3NjI9c3RhdGljIGNvbnN0IHN0cnVjdCBmc19wYXJhbWV0ZXJfc3BlYyBleHQ0X3BhcmFtX3NwZWNzW10gPSB7XG4tLVxuZnMvZXh0NC9zdXBlci5jLTE4MzUtXHRmc3BhcmFtX2ZsYWdcdChcJiMzNDtub2luaXRfaXRhYmxlXCYjMzQ7LFx0T3B0X25vaW5pdF9pdGFibGUpLFxuZnMvZXh0NC9zdXBlci5jOjE4MzY6I2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXG5mcy9leHQ0L3N1cGVyLmMtMTgzNy1cdGZzcGFyYW1fZmxhZ1x0KFwmIzM0O2ZjX2RlYnVnX2ZvcmNlXCYjMzQ7LFx0T3B0X2ZjX2RlYnVnX2ZvcmNlKSxcbi0tXG5mcy9leHQ0L3N1cGVyLmM9MTg3OT1zdGF0aWMgY29uc3Qgc3RydWN0IG1vdW50X29wdHMge1xuLS1cbmZzL2V4dDQvc3VwZXIuYy0xOTIyLVx0e09wdF91c2VyX3hhdHRyLCBFWFQ0X01PVU5UX1hBVFRSX1VTRVIsIE1PUFRfU0VUfSxcbmZzL2V4dDQvc3VwZXIuYzoxOTIzOiNpZmRlZiBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0xcbmZzL2V4dDQvc3VwZXIuYy0xOTI0LVx0e09wdF9hY2wsIEVYVDRfTU9VTlRfUE9TSVhfQUNMLCBNT1BUX1NFVH0sXG4tLVxuZnMvZXh0NC9zdXBlci5jLTE5NDUtXHQgTU9QVF9TRVR9LFxuZnMvZXh0NC9zdXBlci5jOjE5NDY6I2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXG5mcy9leHQ0L3N1cGVyLmMtMTk0Ny1cdHtPcHRfZmNfZGVidWdfZm9yY2UsIEVYVDRfTU9VTlQyX0pPVVJOQUxfRkFTVF9DT01NSVQsXG4tLVxuZnMvZXh0NC9zdXBlci5jPTE5OTc9c3RydWN0IGV4dDRfZnNfY29udGV4dCB7XG4tLVxuZnMvZXh0NC9zdXBlci5jLTIwMDAtXHRpbnRcdFx0c19qcXVvdGFfZm10O1x0LyogRm9ybWF0IG9mIHF1b3RhIHRvIHVzZSAqL1xuZnMvZXh0NC9zdXBlci5jOjIwMDE6I2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXG5mcy9leHQ0L3N1cGVyLmMtMjAwMi1cdGludCBzX2ZjX2RlYnVnX21heF9yZXBsYXk7XG4tLVxuZnMvZXh0NC9zdXBlci5jPTIxNzE9c3RhdGljIGludCBleHQ0X3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pXG4tLVxuZnMvZXh0NC9zdXBlci5jLTIzMDYtXHRcdHJldHVybiAwO1xuZnMvZXh0NC9zdXBlci5jOjIzMDc6I2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXG5mcy9leHQ0L3N1cGVyLmMtMjMwOC1cdGNhc2UgT3B0X2ZjX2RlYnVnX21heF9yZXBsYXk6XG4tLVxuZnMvZXh0NC9zdXBlci5jPTI4NTU9c3RhdGljIHZvaWQgZXh0NF9hcHBseV9vcHRpb25zKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMjg3OC1cbmZzL2V4dDQvc3VwZXIuYzoyODc5OiNpZmRlZiBDT05GSUdfRVhUNF9ERUJVR1xuZnMvZXh0NC9zdXBlci5jLTI4ODAtXHRBUFBMWShzX2ZjX2RlYnVnX21heF9yZXBsYXkpO1xuLS1cbmZzL2V4dDQvc3VwZXIuYz00Mzg4PXN0YXRpYyB2b2lkIGV4dDRfc2V0X2RlZl9vcHRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXh0NC9zdXBlci5jLTQ0MDMtXHRzZXRfb3B0KHNiLCBYQVRUUl9VU0VSKTtcbmZzL2V4dDQvc3VwZXIuYzo0NDA0OiNpZmRlZiBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0xcbmZzL2V4dDQvc3VwZXIuYy00NDA1LVx0c2V0X29wdChzYiwgUE9TSVhfQUNMKTtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9NzM3Nz1zdGF0aWMgc3NpemVfdCBleHQ0X3F1b3RhX3dyaXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLFxuLS1cbmZzL2V4dDQvc3VwZXIuYy03NDM3LVxuZnMvZXh0NC9zdXBlci5jOjc0Mzg6I2lmICFkZWZpbmVkKENPTkZJR19FWFQyX0ZTKSBcdTAwMjZcdTAwMjYgIWRlZmluZWQoQ09ORklHX0VYVDJfRlNfTU9EVUxFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfRVhUNF9VU0VfRk9SX0VYVDIpXG5mcy9leHQ0L3N1cGVyLmMtNzQzOS1zdGF0aWMgaW5saW5lIHZvaWQgcmVnaXN0ZXJfYXNfZXh0Mih2b2lkKVxuLS1cbmZzL2V4dDQvc3lzZnMuYz0yNjY9RVhUNF9SV19BVFRSX1NCSV9QSShtc2dfcmF0ZWxpbWl0X2J1cnN0LCBzX21zZ19yYXRlbGltaXRfc3RhdGUuYnVyc3QpO1xuZnMvZXh0NC9zeXNmcy5jOjI2NzojaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcbmZzL2V4dDQvc3lzZnMuYy0yNjgtRVhUNF9SV19BVFRSX1NCSV9VTChzaW11bGF0ZV9mYWlsLCBzX3NpbXVsYXRlX2ZhaWwpO1xuLS1cbmZzL2V4dDQvc3lzZnMuYz0yOTU9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmV4dDRfYXR0cnNbXSA9IHtcbi0tXG5mcy9leHQ0L3N5c2ZzLmMtMzM1LVx0QVRUUl9MSVNUKGpvdXJuYWxfdGFzayksXG5mcy9leHQ0L3N5c2ZzLmM6MzM2OiNpZmRlZiBDT05GSUdfRVhUNF9ERUJVR1xuZnMvZXh0NC9zeXNmcy5jLTMzNy1cdEFUVFJfTElTVChzaW11bGF0ZV9mYWlsKSxcbi0tXG5mcy9leHQ0L3hhdHRyLmM9ODg9c3RhdGljIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICogY29uc3QgZXh0NF94YXR0cl9oYW5kbGVyX21hcFtdID0ge1xuZnMvZXh0NC94YXR0ci5jLTg5LVx0W0VYVDRfWEFUVFJfSU5ERVhfVVNFUl1cdFx0ICAgICA9IFx1MDAyNmV4dDRfeGF0dHJfdXNlcl9oYW5kbGVyLFxuZnMvZXh0NC94YXR0ci5jOjkwOiNpZmRlZiBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0xcbmZzL2V4dDQveGF0dHIuYy05MS1cdFtFWFQ0X1hBVFRSX0lOREVYX1BPU0lYX0FDTF9BQ0NFU1NdICA9IFx1MDAyNm5vcF9wb3NpeF9hY2xfYWNjZXNzLFxuLS1cbmZzL2V4dDQveGF0dHIuYy05NC1cdFtFWFQ0X1hBVFRSX0lOREVYX1RSVVNURURdXHQgICAgID0gXHUwMDI2ZXh0NF94YXR0cl90cnVzdGVkX2hhbmRsZXIsXG5mcy9leHQ0L3hhdHRyLmM6OTU6I2lmZGVmIENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZXG5mcy9leHQ0L3hhdHRyLmMtOTYtXHRbRVhUNF9YQVRUUl9JTkRFWF9TRUNVUklUWV1cdCAgICAgPSBcdTAwMjZleHQ0X3hhdHRyX3NlY3VyaXR5X2hhbmRsZXIsXG4tLVxuZnMvZXh0NC94YXR0ci5jPTEwMT1jb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqIGNvbnN0IGV4dDRfeGF0dHJfaGFuZGxlcnNbXSA9IHtcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTAzLVx0XHUwMDI2ZXh0NF94YXR0cl90cnVzdGVkX2hhbmRsZXIsXG5mcy9leHQ0L3hhdHRyLmM6MTA0OiNpZmRlZiBDT05GSUdfRVhUNF9GU19TRUNVUklUWVxuZnMvZXh0NC94YXR0ci5jLTEwNS1cdFx1MDAyNmV4dDRfeGF0dHJfc2VjdXJpdHlfaGFuZGxlcixcbi0tXG5mcy9leHQ0L3hhdHRyLmg9MjEzPV9feGF0dHJfY2hlY2tfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfaGVhZGVyICpoZWFkZXIsXG4tLVxuZnMvZXh0NC94YXR0ci5oLTIxOC1cbmZzL2V4dDQveGF0dHIuaDoyMTk6I2lmZGVmIENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZXG5mcy9leHQ0L3hhdHRyLmgtMjIwLWV4dGVybiBpbnQgZXh0NF9pbml0X3NlY3VyaXR5KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3NzAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyB0aGUgZXh0NCBLY29uZmlnKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGRpdmUgaW50byB0aGUgaGVhcnQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhhdCBtZWFucyBgZnMvZXh0NC9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBmZWF0dXJlIGZsYWdzIGFyZSBkZWZpbmVkLCBkZXBlbmRlbmNpZXMgYXJlIGxhaWQgb3V0LCBhbmQgdGhlIGJ1aWxkIHN5c3RlbSBrbm93cyBob3cgdG8gaGFuZGxlIHRoZSBleHQ0LXNwZWNpZmljIGNvbXBvbmVudHMuIEkmIzM5O20gaG9waW5nIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4gVW5kZXJzdGFuZGluZyB0aGUgS2NvbmZpZyBmaWxlIGdpdmVzIG1lIHRoZSBsb3ctbGV2ZWwgYnVpbGRpbmcgYmxvY2tzIGZvciB3aGF0JiMzOTtzIHBvc3NpYmxlLCBhbmQgd2hlcmUgdG8gbG9vayB3aGVuIHNvbWV0aGluZyBpc24mIzM5O3Qgd29ya2luZyBhcyBleHBlY3RlZC4gVGhpcyBhbGxvd3MgbWUgdG8gc2VlIHRoZSBjb25maWd1cmF0aW9uIGFuZCBhbGwgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBFWFQ0X0ZTXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVwmIzM0O1xuICAgNDpcdFx0c2VsZWN0IEJVRkZFUl9IRUFEXG4gICA1Olx0XHRzZWxlY3QgSkJEMlxuICAgNjpcdFx0c2VsZWN0IENSQzE2XG4gICA3Olx0XHRzZWxlY3QgQ1JDMzJcbiAgIDg6XHRcdHNlbGVjdCBGU19JT01BUFxuICAgOTpcdFx0c2VsZWN0IEZTX0VOQ1JZUFRJT05fQUxHUyBpZiBGU19FTkNSWVBUSU9OXG4gIDEwOlx0XHRoZWxwXG4gIDExOlx0XHQgIFRoaXMgaXMgdGhlIG5leHQgZ2VuZXJhdGlvbiBvZiB0aGUgZXh0MyBmaWxlc3lzdGVtLlxuICAxMjpcdFxuICAxMzpcdFx0ICBVbmxpa2UgdGhlIGNoYW5nZSBmcm9tIGV4dDIgZmlsZXN5c3RlbSB0byBleHQzIGZpbGVzeXN0ZW0sXG4gIDE0Olx0XHQgIHRoZSBvbi1kaXNrIGZvcm1hdCBvZiBleHQ0IGlzIG5vdCBmb3J3YXJkcyBjb21wYXRpYmxlIHdpdGhcbiAgMTU6XHRcdCAgZXh0MzsgaXQgaXMgYmFzZWQgb24gZXh0ZW50IG1hcHMgYW5kIGl0IHN1cHBvcnRzIDQ4LWJpdFxuICAxNjpcdFx0ICBwaHlzaWNhbCBibG9jayBudW1iZXJzLiAgVGhlIGV4dDQgZmlsZXN5c3RlbSBhbHNvIHN1cHBvcnRzIGRlbGF5ZWRcbiAgMTc6XHRcdCAgYWxsb2NhdGlvbiwgcGVyc2lzdGVudCBwcmVhbGxvY2F0aW9uLCBoaWdoIHJlc29sdXRpb24gdGltZSBzdGFtcHMsXG4gIDE4Olx0XHQgIGFuZCBhIG51bWJlciBvZiBvdGhlciBmZWF0dXJlcyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIGFuZCBzcGVlZFxuICAxOTpcdFx0ICB1cCBmc2NrIHRpbWUuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHNlZSB0aGUgd2ViIHBhZ2VzIGF0XG4gIDIwOlx0XHQgIGh0dHA6Ly9leHQ0Lndpa2kua2VybmVsLm9yZy5cbiAgMjE6XHRcbiAgMjI6XHRcdCAgVGhlIGV4dDQgZmlsZXN5c3RlbSBzdXBwb3J0cyBtb3VudGluZyBhbiBleHQzIGZpbGVzeXN0ZW07IHdoaWxlIHRoZXJlXG4gIDIzOlx0XHQgIGFyZSBzb21lIHBlcmZvcm1hbmNlIGdhaW5zIGZyb20gdGhlIGRlbGF5ZWQgYWxsb2NhdGlvbiBhbmQgaW5vZGVcbiAgMjQ6XHRcdCAgdGFibGUgcmVhZGFoZWFkLCB0aGUgYmVzdCBwZXJmb3JtYW5jZSBnYWlucyByZXF1aXJlIGVuYWJsaW5nIGV4dDRcbiAgMjU6XHRcdCAgZmVhdHVyZXMgaW4gdGhlIGZpbGVzeXN0ZW0gdXNpbmcgdHVuZTJmcywgb3IgZm9ybWF0dGluZyBhIG5ld1xuICAyNjpcdFx0ICBmaWxlc3lzdGVtIGFzIGFuIGV4dDQgZmlsZXN5c3RlbSBpbml0aWFsbHkuIFdpdGhvdXQgZXhwbGljaXQgZW5hYmxpbmdcbiAgMjc6XHRcdCAgb2YgZXh0NCBmZWF0dXJlcywgdGhlIG9uIGRpc2sgZmlsZXN5c3RlbSBmb3JtYXQgc3RheXMgZnVsbHkgYmFja3dhcmRcbiAgMjg6XHRcdCAgY29tcGF0aWJsZS5cbiAgMjk6XHRcbiAgMzA6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGZpbGUgc3lzdGVtIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZVxuICAzMTpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZXh0NC5cbiAgMzI6XHRcbiAgMzM6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMzQ6XHRcbiAgMzU6XHRjb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcbiAgMzY6XHRcdGJvb2wgXCYjMzQ7VXNlIGV4dDQgZm9yIGV4dDIgZmlsZSBzeXN0ZW1zXCYjMzQ7XG4gIDM3Olx0XHRkZXBlbmRzIG9uIEVYVDRfRlNcbiAgMzg6XHRcdGRlcGVuZHMgb24gRVhUMl9GUz1uXG4gIDM5Olx0XHRkZWZhdWx0IHlcbiAgNDA6XHRcdGhlbHBcbiAgNDE6XHRcdCAgQWxsb3cgdGhlIGV4dDQgZmlsZSBzeXN0ZW0gZHJpdmVyIGNvZGUgdG8gYmUgdXNlZCBmb3IgZXh0MlxuICA0MjpcdFx0ICBmaWxlIHN5c3RlbSBtb3VudHMuICBUaGlzIGFsbG93cyB1c2VycyB0byByZWR1Y2UgdGhlaXJcbiAgNDM6XHRcdCAgY29tcGlsZWQga2VybmVsIHNpemUgYnkgdXNpbmcgb25lIGZpbGUgc3lzdGVtIGRyaXZlciBmb3JcbiAgNDQ6XHRcdCAgZXh0MiwgZXh0MywgYW5kIGV4dDQgZmlsZSBzeXN0ZW1zLlxuICA0NTpcdFxuICA0NjpcdGNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxuICA0NzpcdFx0Ym9vbCBcJiMzNDtFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4gIDQ4Olx0XHRkZXBlbmRzIG9uIEVYVDRfRlNcbiAgNDk6XHRcdHNlbGVjdCBGU19QT1NJWF9BQ0xcbiAgNTA6XHRcdGhlbHBcbiAgNTE6XHRcdCAgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHMgKEFDTHMpIHN1cHBvcnQgcGVybWlzc2lvbnMgZm9yIHVzZXJzIGFuZFxuICA1MjpcdFx0ICBncm91cHMgYmV5b25kIHRoZSBvd25lci9ncm91cC93b3JsZCBzY2hlbWUuXG4gIDUzOlx0XG4gIDU0Olx0XHQgIElmIHlvdSBkb24mIzM5O3Qga25vdyB3aGF0IEFjY2VzcyBDb250cm9sIExpc3RzIGFyZSwgc2F5IE5cbiAgNTU6XHRcbiAgNTY6XHRjb25maWcgRVhUNF9GU19TRUNVUklUWVxuICA1NzpcdFx0Ym9vbCBcJiMzNDtFeHQ0IFNlY3VyaXR5IExhYmVsc1wmIzM0O1xuICA1ODpcdFx0ZGVwZW5kcyBvbiBFWFQ0X0ZTXG4gIDU5Olx0XHRoZWxwXG4gIDYwOlx0XHQgIFNlY3VyaXR5IGxhYmVscyBzdXBwb3J0IGFsdGVybmF0aXZlIGFjY2VzcyBjb250cm9sIG1vZGVsc1xuICA2MTpcdFx0ICBpbXBsZW1lbnRlZCBieSBzZWN1cml0eSBtb2R1bGVzIGxpa2UgU0VMaW51eC4gIFRoaXMgb3B0aW9uXG4gIDYyOlx0XHQgIGVuYWJsZXMgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIGhhbmRsZXIgZm9yIGZpbGUgc2VjdXJpdHlcbiAgNjM6XHRcdCAgbGFiZWxzIGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0uXG4gIDY0Olx0XG4gIDY1Olx0XHQgIElmIHlvdSBhcmUgbm90IHVzaW5nIGEgc2VjdXJpdHkgbW9kdWxlIHRoYXQgcmVxdWlyZXMgdXNpbmdcbiAgNjY6XHRcdCAgZXh0ZW5kZWQgYXR0cmlidXRlcyBmb3IgZmlsZSBzZWN1cml0eSBsYWJlbHMsIHNheSBOLlxuICA2NzpcdFxuICA2ODpcdGNvbmZpZyBFWFQ0X0RFQlVHXG4gIDY5Olx0XHRib29sIFwmIzM0O0V4dDQgZGVidWdnaW5nIHN1cHBvcnRcJiMzNDtcbiAgNzA6XHRcdGRlcGVuZHMgb24gRVhUNF9GU1xuICA3MTpcdFx0aGVscFxuICA3MjpcdFx0ICBFbmFibGVzIHJ1bi10aW1lIGRlYnVnZ2luZyBzdXBwb3J0IGZvciB0aGUgZXh0NCBmaWxlc3lzdGVtLlxuICA3MzpcdFxuICA3NDpcdFx0ICBJZiB5b3Ugc2VsZWN0IFkgaGVyZSwgdGhlbiB5b3Ugd2lsbCBiZSBhYmxlIHRvIHR1cm4gb24gZGVidWdnaW5nXG4gIDc1Olx0XHQgIHVzaW5nIGR5bmFtaWMgZGVidWcgY29udHJvbCBmb3IgbWJfZGVidWcoKSAvIGV4dF9kZWJ1ZygpIG1zZ3MuXG4gIDc2Olx0XG4gIDc3Olx0Y29uZmlnIEVYVDRfS1VOSVRfVEVTVFNcbiAgNzg6XHRcdHRyaXN0YXRlIFwmIzM0O0tVbml0IHRlc3RzIGZvciBleHQ0XCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgNzk6XHRcdGRlcGVuZHMgb24gRVhUNF9GUyBcdTAwMjZcdTAwMjYgS1VOSVRcbiAgODA6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDgxOlx0XHRoZWxwXG4gIDgyOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBleHQ0IEtVbml0IHRlc3RzLlxuICA4MzpcdFxuICA4NDpcdFx0ICBLVW5pdCB0ZXN0cyBydW4gZHVyaW5nIGJvb3QgYW5kIG91dHB1dCB0aGUgcmVzdWx0cyB0byB0aGUgZGVidWcgbG9nXG4gIDg1Olx0XHQgIGluIFRBUCBmb3JtYXQgKGh0dHBzOi8vdGVzdGFueXRoaW5nLm9yZy8pLiBPbmx5IHVzZWZ1bCBmb3Iga2VybmVsIGRldnNcbiAgODY6XHRcdCAgcnVubmluZyBLVW5pdCB0ZXN0IGhhcm5lc3MgYW5kIGFyZSBub3QgZm9yIGluY2x1c2lvbiBpbnRvIGEgcHJvZHVjdGlvblxuICA4NzpcdFx0ICBidWlsZC5cbiAgODg6XHRcbiAgODk6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCBwbGVhc2UgcmVmZXJcbiAgOTA6XHRcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24gaW4gRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva3VuaXQvLlxuICA5MTpcdFxuICA5MjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjkxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgYGZzL2V4dDQvaW5saW5lLmNgLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gZXh0NCBJbmxpbmUgQ29udmVyc2lvbiBpbiBgaW5saW5lLmNgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXNzZWN0IGBmcy9leHQ0L2lubGluZS5jYC4gTXkgcHJpbWFyeSBpbnRlcmVzdCBoZXJlIGxpZXMgaW4gdW5kZXJzdGFuZGluZyB0aGUgbWVjaGFuaWNzIG9mIGlubGluZSBjb252ZXJzaW9uIHdpdGhpbiB0aGUgZXh0NCBmaWxlc3lzdGVtLiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIHRyaWdnZXJzIGZvciB0aGlzIGNvbnZlcnNpb24gcHJvY2VzcywgYW5kIHRoZW4gSSB3YW50IHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHRoZSBub24tc3RhdGljIGVudHJ5IHBvaW50cyDigJMgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBlZmZlY3RpdmVseSB0aGUgZm9jdXMgc3ltYm9scywgdGhlIGludGVyZmFjZSBpbnRvIHRoaXMgZnVuY3Rpb25hbGl0eS4gV2hhdCBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIGFyZSAqZXhwb3NlZCogYW5kIGFyZSByZXNwb25zaWJsZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGluIHRoaXMgZmlsZSB0aGF0IEkgY2FuIGFjdHVhbGx5IGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX10uKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvaW5saW5lLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9pbmxpbmUuYy0yNC1cbmZzL2V4dDQvaW5saW5lLmM6MjU6c3RhdGljIGludCBleHQ0X2RhX2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuZnMvZXh0NC9pbmxpbmUuYy0yNi1cdFx0XHRcdFx0XHQgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTI4LVxuZnMvZXh0NC9pbmxpbmUuYzoyOTpzdGF0aWMgaW50IGV4dDRfZ2V0X2lubGluZV9zaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9leHQ0L2lubGluZS5jLTMwLXtcbi0tXG5mcy9leHQ0L2lubGluZS5jLTM2LVxuZnMvZXh0NC9pbmxpbmUuYzozNzpzdGF0aWMgaW50IGdldF9tYXhfaW5saW5lX3hhdHRyX3ZhbHVlX3NpemUoc3RydWN0IGlub2RlICppbm9kZSxcbmZzL2V4dDQvaW5saW5lLmMtMzgtXHRcdFx0XHRcdCAgIHN0cnVjdCBleHQ0X2lsb2MgKmlsb2MpXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xMTEtICovXG5mcy9leHQ0L2lubGluZS5jOjExMjppbnQgZXh0NF9nZXRfbWF4X2lubGluZV9zaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9leHQ0L2lubGluZS5jLTExMy17XG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xNDQtICovXG5mcy9leHQ0L2lubGluZS5jOjE0NTppbnQgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvZXh0NC9pbmxpbmUuYy0xNDYte1xuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTgzLVxuZnMvZXh0NC9pbmxpbmUuYzoxODQ6c3RhdGljIGludCBleHQ0X3JlYWRfaW5saW5lX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqYnVmZmVyLFxuZnMvZXh0NC9pbmxpbmUuYy0xODUtXHRcdFx0XHQgdW5zaWduZWQgaW50IGxlbixcbi0tXG5mcy9leHQ0L2lubGluZS5jLTIyOC0gKi9cbmZzL2V4dDQvaW5saW5lLmM6MjI5OnN0YXRpYyB2b2lkIGV4dDRfd3JpdGVfaW5saW5lX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfaWxvYyAqaWxvYyxcbmZzL2V4dDQvaW5saW5lLmMtMjMwLVx0XHRcdFx0ICAgdm9pZCAqYnVmZmVyLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBpbnQgbGVuKVxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMjY3LVxuZnMvZXh0NC9pbmxpbmUuYzoyNjg6c3RhdGljIGludCBleHQ0X2NyZWF0ZV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLFxuZnMvZXh0NC9pbmxpbmUuYy0yNjktXHRcdFx0XHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBsZW4pXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0zMzYtXG5mcy9leHQ0L2lubGluZS5jOjMzNzpzdGF0aWMgaW50IGV4dDRfdXBkYXRlX2lubGluZV9kYXRhKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9leHQ0L2lubGluZS5jLTMzOC1cdFx0XHRcdCAgIHVuc2lnbmVkIGludCBsZW4pXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy00MDctXG5mcy9leHQ0L2lubGluZS5jOjQwODpzdGF0aWMgaW50IGV4dDRfcHJlcGFyZV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuZnMvZXh0NC9pbmxpbmUuYy00MDktXHRcdFx0XHQgICAgbG9mZl90IGxlbilcbi0tXG5mcy9leHQ0L2lubGluZS5jLTQzNi1cbmZzL2V4dDQvaW5saW5lLmM6NDM3OnN0YXRpYyBpbnQgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxuZnMvZXh0NC9pbmxpbmUuYy00MzgtXHRcdFx0XHRcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy01MDMtXG5mcy9leHQ0L2lubGluZS5jOjUwNDpzdGF0aWMgaW50IGV4dDRfcmVhZF9pbmxpbmVfZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbylcbmZzL2V4dDQvaW5saW5lLmMtNTA1LXtcbi0tXG5mcy9leHQ0L2lubGluZS5jLTU0NS1cbmZzL2V4dDQvaW5saW5lLmM6NTQ2OmludCBleHQ0X3JlYWRwYWdlX2lubGluZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuZnMvZXh0NC9pbmxpbmUuYy01NDcte1xuLS1cbmZzL2V4dDQvaW5saW5lLmMtNTcyLVxuZnMvZXh0NC9pbmxpbmUuYzo1NzM6c3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuZnMvZXh0NC9pbmxpbmUuYy01NzQtXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy02OTYtICovXG5mcy9leHQ0L2lubGluZS5jOjY5NzppbnQgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuZnMvZXh0NC9pbmxpbmUuYy02OTgtXHRcdFx0XHRcdCAgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTc4My0gKi9cbmZzL2V4dDQvaW5saW5lLmM6Nzg0OmludCBleHQ0X3RyeV90b193cml0ZV9pbmxpbmVfZGF0YShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbmZzL2V4dDQvaW5saW5lLmMtNzg1LVx0XHRcdFx0ICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvaW5saW5lLmMtNzk0LVxuZnMvZXh0NC9pbmxpbmUuYzo3OTU6aW50IGV4dDRfd3JpdGVfaW5saW5lX2RhdGFfZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbixcbmZzL2V4dDQvaW5saW5lLmMtNzk2LVx0XHRcdCAgICAgICB1bnNpZ25lZCBjb3BpZWQsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy04ODUtICovXG5mcy9leHQ0L2lubGluZS5jOjg4NjpzdGF0aWMgaW50IGV4dDRfZGFfY29udmVydF9pbmxpbmVfZGF0YV90b19leHRlbnQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG5mcy9leHQ0L2lubGluZS5jLTg4Ny1cdFx0XHRcdFx0XHQgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTkzNy0jaWZkZWYgSU5MSU5FX0RJUl9ERUJVR1xuZnMvZXh0NC9pbmxpbmUuYzo5Mzg6dm9pZCBleHQ0X3Nob3dfaW5saW5lX2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcbmZzL2V4dDQvaW5saW5lLmMtOTM5LVx0XHRcdCAgdm9pZCAqaW5saW5lX3N0YXJ0LCBpbnQgaW5saW5lX3NpemUpXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy05NjktICovXG5mcy9leHQ0L2lubGluZS5jOjk3MDpzdGF0aWMgaW50IGV4dDRfYWRkX2RpcmVudF90b19pbmxpbmUoaGFuZGxlX3QgKmhhbmRsZSxcbmZzL2V4dDQvaW5saW5lLmMtOTcxLVx0XHRcdFx0ICAgICBzdHJ1Y3QgZXh0NF9maWxlbmFtZSAqZm5hbWUsXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xMDEwLVxuZnMvZXh0NC9pbmxpbmUuYzoxMDExOnN0YXRpYyB2b2lkICpleHQ0X2dldF9pbmxpbmVfeGF0dHJfcG9zKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9leHQ0L2lubGluZS5jLTEwMTItXHRcdFx0XHQgICAgICAgc3RydWN0IGV4dDRfaWxvYyAqaWxvYylcbi0tXG5mcy9leHQ0L2lubGluZS5jLTEwMjYtLyogU2V0IHRoZSBmaW5hbCBkZSB0byBjb3ZlciB0aGUgd2hvbGUgYmxvY2suICovXG5mcy9leHQ0L2lubGluZS5jOjEwMjc6dm9pZCBleHQ0X3VwZGF0ZV9maW5hbF9kZSh2b2lkICpkZV9idWYsIGludCBvbGRfc2l6ZSwgaW50IG5ld19zaXplKVxuZnMvZXh0NC9pbmxpbmUuYy0xMDI4LXtcbi0tXG5mcy9leHQ0L2lubGluZS5jLTEwNTEtXG5mcy9leHQ0L2lubGluZS5jOjEwNTI6c3RhdGljIGludCBleHQ0X3VwZGF0ZV9pbmxpbmVfZGlyKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuZnMvZXh0NC9pbmxpbmUuYy0xMDUzLVx0XHRcdFx0ICBzdHJ1Y3QgZXh0NF9pbG9jICppbG9jKVxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTA3My1cbmZzL2V4dDQvaW5saW5lLmM6MTA3NDpzdGF0aWMgaW50IGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfZnNibGtfdCBibG9jayxcbmZzL2V4dDQvaW5saW5lLmMtMTA3NS1cdFx0XHRcdFx0dW5zaWduZWQgaW50IGxlbiwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbi0tXG5mcy9leHQ0L2lubGluZS5jLTExOTQtXG5mcy9leHQ0L2lubGluZS5jOjExOTU6c3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXG5mcy9leHQ0L2lubGluZS5jLTExOTYtXHRcdFx0XHRcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xMjk1LSAqL1xuZnMvZXh0NC9pbmxpbmUuYzoxMjk2OmludCBleHQ0X3RyeV9hZGRfaW5saW5lX2VudHJ5KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBleHQ0X2ZpbGVuYW1lICpmbmFtZSxcbmZzL2V4dDQvaW5saW5lLmMtMTI5Ny1cdFx0XHQgICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L2lubGluZS5jLTEzNjQtICovXG5mcy9leHQ0L2lubGluZS5jOjEzNjU6aW50IGV4dDRfaW5saW5lZGlyX3RvX3RyZWUoc3RydWN0IGZpbGUgKmRpcl9maWxlLFxuZnMvZXh0NC9pbmxpbmUuYy0xMzY2LVx0XHRcdCAgIHN0cnVjdCBpbm9kZSAqZGlyLCBleHQ0X2xibGtfdCBibG9jayxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTE0ODUtICovXG5mcy9leHQ0L2lubGluZS5jOjE0ODY6aW50IGV4dDRfcmVhZF9pbmxpbmVfZGlyKHN0cnVjdCBmaWxlICpmaWxlLFxuZnMvZXh0NC9pbmxpbmUuYy0xNDg3LVx0XHRcdCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eCxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTE2MTYtXG5mcy9leHQ0L2lubGluZS5jOjE2MTc6dm9pZCAqZXh0NF9yZWFkX2lubGluZV9saW5rKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9leHQ0L2lubGluZS5jLTE2MTgte1xuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTY0NS1cbmZzL2V4dDQvaW5saW5lLmM6MTY0NjpzdHJ1Y3QgYnVmZmVyX2hlYWQgKmV4dDRfZ2V0X2ZpcnN0X2lubGluZV9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuZnMvZXh0NC9pbmxpbmUuYy0xNjQ3LVx0XHRcdFx0XHRzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqKnBhcmVudF9kZSxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTE2NjUtICovXG5mcy9leHQ0L2lubGluZS5jOjE2NjY6aW50IGV4dDRfdHJ5X2NyZWF0ZV9pbmxpbmVfZGlyKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuZnMvZXh0NC9pbmxpbmUuYy0xNjY3LVx0XHRcdCAgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTY5OC1cbmZzL2V4dDQvaW5saW5lLmM6MTY5OTpzdHJ1Y3QgYnVmZmVyX2hlYWQgKmV4dDRfZmluZF9pbmxpbmVfZW50cnkoc3RydWN0IGlub2RlICpkaXIsXG5mcy9leHQ0L2lubGluZS5jLTE3MDAtXHRcdFx0XHRcdHN0cnVjdCBleHQ0X2ZpbGVuYW1lICpmbmFtZSxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTE3NjEtXG5mcy9leHQ0L2lubGluZS5jOjE3NjI6aW50IGV4dDRfZGVsZXRlX2lubGluZV9lbnRyeShoYW5kbGVfdCAqaGFuZGxlLFxuZnMvZXh0NC9pbmxpbmUuYy0xNzYzLVx0XHRcdCAgICAgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvZXh0NC9pbmxpbmUuYz0xODE5PXN0YXRpYyBpbmxpbmUgc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKlxuZnMvZXh0NC9pbmxpbmUuYzoxODIwOmV4dDRfZ2V0X2lubGluZV9lbnRyeShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuZnMvZXh0NC9pbmxpbmUuYy0xODIxLVx0XHQgICAgICBzdHJ1Y3QgZXh0NF9pbG9jICppbG9jLFxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTg0NC1cbmZzL2V4dDQvaW5saW5lLmM6MTg0NTpib29sIGVtcHR5X2lubGluZV9kaXIoc3RydWN0IGlub2RlICpkaXIsIGludCAqaGFzX2lubGluZV9kYXRhKVxuZnMvZXh0NC9pbmxpbmUuYy0xODQ2LXtcbi0tXG5mcy9leHQ0L2lubGluZS5jLTE5MDctXG5mcy9leHQ0L2lubGluZS5jOjE5MDg6aW50IGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvZXh0NC9pbmxpbmUuYy0xOTA5LXtcbi0tXG5mcy9leHQ0L2lubGluZS5jLTE5MTgtXG5mcy9leHQ0L2lubGluZS5jOjE5MTk6aW50IGV4dDRfaW5saW5lX2RhdGFfaW9tYXAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlvbWFwICppb21hcClcbmZzL2V4dDQvaW5saW5lLmMtMTkyMC17XG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xOTUwLVxuZnMvZXh0NC9pbmxpbmUuYzoxOTUxOmludCBleHQ0X2lubGluZV9kYXRhX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCAqaGFzX2lubGluZSlcbmZzL2V4dDQvaW5saW5lLmMtMTk1Mi17XG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0yMDYyLVxuZnMvZXh0NC9pbmxpbmUuYzoyMDYzOmludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2V4dDQvaW5saW5lLmMtMjA2NC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDA1CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBFeHQ0IElubGluZSBEYXRhIENvbnZlcnNpb24gQ29kZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSYjMzk7bSBleGFtaW5pbmcgdGhlIGZ1bmN0aW9uIGNhbGxzIHJlbGF0ZWQgdG8gYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YWAuICBJIHNlZSB0aGF0IGl0JiMzOTtzIGFuIGV4cG9ydGVkIGZ1bmN0aW9uLCBtZWFuaW5nIGl0JiMzOTtzIGFjY2Vzc2libGUgb3V0c2lkZSBpdHMgb3duIG1vZHVsZSwgYW5kIGl0IHJlc2lkZXMgaW4gYGZzL2V4dDQvaW5saW5lLmNgLiAgYGV4dDRfdHJ5X2FkZF9pbmxpbmVfZW50cnlgIGNhbGxzIGl0LCBhbmQgaXQgYWxzbyBjYWxscyBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja2AuIEludGVyZXN0aW5nIHRoYXQgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YWAgaXMgY2FsbGluZyBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja2AuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhvc2UuCgpOb3csIGxldCYjMzk7cyBmaWd1cmUgb3V0IHdoYXQgZWxzZSBpcyBjYWxsaW5nIGludG8gdGhpcyBhcmVhIG9mIGNvZGUuIFNjYW5uaW5nIHRoZSBjb2RlYmFzZSwgSSBmaW5kIHRoYXQsIGJleW9uZCBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhYCBpdHNlbGYsIHdlIGFsc28gaGF2ZSBgZXh0NF90cnlfYWRkX2lubGluZV9lbnRyeWAsIGBleHQ0X2ZhbGxvY2F0ZWAgaW4gdGhlIGV4dGVudHMgY29kZSwgYGV4dDRfc2V0YXR0cmAgaW4gdGhlIGlub2RlIGNvZGUsIGFuZCBgZXh0NF9wYWdlX21rd3JpdGVgLCBhbHNvIGluIHRoZSBpbm9kZSBjb2RlLCBhbGwgdG91Y2hpbmcgdGhpcyBpbmxpbmUgZGF0YSBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGVjb3N5c3RlbS4KClRoZSBnb29kIG5ld3MgaXMgdGhhdCB0aGlzIGlzIGRlZmluaXRlbHkgZnV6emFibGU6ICBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIGNvcmUgZmlsZXN5c3RlbSBjb2RlLCBzcGVjaWZpY2FsbHkgZXh0NCBpbmxpbmUgZGF0YSBjb252ZXJzaW9uLiBJdCYjMzk7cyByZWFkaWx5IGFjY2Vzc2libGUgaW4gYSBRRU1VIGVudmlyb25tZW50LCBhbmQgd2UgY2FuIHRyaWdnZXIgaXQgdGhyb3VnaCBzdGFuZGFyZCBvcGVyYXRpb25zIGxpa2UgbW91bnRpbmcgaW1hZ2VzIHdpdGggdGhlIGBpbmxpbmVfZGF0YWAgb3B0aW9uLCB1c2luZyB4YXR0cnMsIG1hbmlwdWxhdGluZyBpbmxpbmUgZGlyZWN0b3J5IGVudHJpZXMsIG9yIHVzaW5nIGBmYWxsb2NhdGVgIG9yIGBzZXRhdHRyYC4gIEZ1cnRoZXJtb3JlLCB0aGUgcHJlc2VuY2Ugb2YgcmVmYWN0b3JlZCBjb2RlIGxpa2UgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2tgIGFuZCB0aGUgbmV3IGBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9ja2AgaW5kaWNhdGVzIGEgbm9uLXRyaXZpYWwgZnVuY3Rpb25hbCBjaGFuZ2UsIG1ha2luZyB0aGlzIGFuIGV2ZW4gbW9yZSBjb21wZWxsaW5nIHRhcmdldCBmb3IgZnV6emluZy4KCkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIGBDT05GSUdfRVhUNF9GU2AgKG9yIGp1c3QgYEVYVDRfRlNgKSBpcyB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGlubGluZSBkYXRhIGRvZXNuJiMzOTt0IHJlcXVpcmUgYW55ICpzcGVjaWFsKiBjb25maWcgb3B0aW9ucyBiZXlvbmQgdGhlIGJhc2UgZXh0NCBzdXBwb3J0LiBJJiMzOTtsbCBzZWFyY2ggdGhlIGBmcy9leHQ0L01ha2VmaWxlYCBmb3IgYGlubGluZS5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25kaXRpb25hbCBjb21waWxhdGlvbiBmbGFncyBiZWluZyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbmxpbmVcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L01ha2VmaWxlPTg9ZXh0NC15XHQ6PSBiYWxsb2MubyBiaXRtYXAubyBibG9ja192YWxpZGl0eS5vIGRpci5vIGV4dDRfamJkMi5vIGV4dGVudHMubyBcXFxuZnMvZXh0NC9NYWtlZmlsZS05LVx0XHRleHRlbnRzX3N0YXR1cy5vIGZpbGUubyBmc21hcC5vIGZzeW5jLm8gaGFzaC5vIGlhbGxvYy5vIFxcXG5mcy9leHQ0L01ha2VmaWxlOjEwOlx0XHRpbmRpcmVjdC5vIGlubGluZS5vIGlub2RlLm8gaW9jdGwubyBtYmFsbG9jLm8gbWlncmF0ZS5vIFxcXG5mcy9leHQ0L01ha2VmaWxlLTExLVx0XHRtbXAubyBtb3ZlX2V4dGVudC5vIG5hbWVpLm8gcGFnZS1pby5vIHJlYWRwYWdlLm8gcmVzaXplLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0NjUKCQkJCQkJCW91dHB1dDogMTQyCgkJCQkJCQl0aG91Z2h0czogNDAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGV4dDQgSW5saW5lIERhdGEgQ29udmVyc2lvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGlubGluZSBkYXRhIGNvbnZlcnNpb24gaW4gZXh0NCBpcyBoYW5kbGVkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgaW5saW5lLm9gIGlzIGFsd2F5cyBidWlsdCBpbnRvIGBleHQ0LXlgIHdoZW4gYENPTkZJR19FWFQ0X0ZTYCBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVGhlIHJlYWwgcXVlc3Rpb24gaXMsIGFyZSB0aGVyZSAqb3RoZXIqIGNvbmZpZyBmbGFncyB0aGF0IGFyZSBhbHNvIHJlcXVpcmVkIG9yIHNob3VsZCBiZSBjb25zaWRlcmVkPwoKYEVYVDRfRlNgIHNlZW1zIHRvIHB1bGwgaW4gYSBsb3Qgb2YgZGVwZW5kZW5jaWVzOiBgQlVGRkVSX0hFQURgLCBgSkJEMmAsIGBDUkMxNmAsIGBDUkMzMmAsIGFuZCBgRlNfSU9NQVBgLiBTbywgYEVYVDRfRlNgIGlzIGRlZmluaXRlbHkgdGhlICptYWluKiByZXF1aXJlbWVudC4KCk5vdywgbGV0JiMzOTtzIGRyaWxsIGRvd24gaW50byB0aGUga2V5IGZ1bmN0aW9ucy4gTXkgRm9jdXNTeW1ib2xzIGFyZSBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhYCBhbmQgYGV4dDRfdHJ5X2FkZF9pbmxpbmVfZW50cnlgLiBJIG5lZWQgdG8gY29uZmlybSB0aGVzZSBhcmUgdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzIHRvIGZvY3VzIG9uLiBUaGV5IGFyZSBub24tc3RhdGljIGFuZCBub24taW5saW5lZCwgc28gZ29vZCB0YXJnZXRzLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGVudGlyZSBjb250ZXh0IG9mIHRoZXNlIGZ1bmN0aW9ucy4gTGV0IG1lIHNlZSB3aGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgcmVsZXZhbnQuIEkmIzM5O20gbm90aW5nIHRoYXQgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2tgIGNhbGxzIHNldmVyYWwgb3RoZXIgZnVuY3Rpb25zIGxpa2UgYGV4dDRfbWJfbmV3X2Jsb2Nrc2AsIGBleHQ0X2luaXRfZGlyYmxvY2tgLCBhbmQgYGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrYC4gQW5kIGBleHQ0X3RyeV9hZGRfaW5saW5lX2VudHJ5YCBhbmQgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YWAgYXJlIHRoZSBjYWxsZXJzIG9mIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrYC4KClRoZW4sIEkgc2VlIHRoZSBjYWxsZXJzIG9mIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFgOiBgZXh0NF9mYWxsb2NhdGVgLCBgZXh0NF9zZXRhdHRyYCwgYGV4dDRfcGFnZV9ta3dyaXRlYCwgYGV4dDRfc2V0X2NvbnRleHRgLCBhbmQgYGV4dDRfYmVnaW5fZW5hYmxlX3Zlcml0eWAuIFRoaXMgZ2l2ZXMgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBmdWxsIHNldCBvZiBjb250ZXh0cyB0aGUgY29udmVyc2lvbiBpcyB1c2VkIHdpdGhpbi4KCkdpdmVuIHdoYXQgSSYjMzk7dmUgZm91bmQsIG15IGZpbmFsIHNldC1yZXN1bHRzIGFyZToKKiAgIGBFbmFibGVDb25maWdzYDogYFsmIzM0O0VYVDRfRlMmIzM0O11gCiogICBgRm9jdXNTeW1ib2xzYDogYFsmIzM0O2V4dDRfY29udmVydF9pbmxpbmVfZGF0YSYjMzQ7LCAmIzM0O2V4dDRfdHJ5X2FkZF9pbmxpbmVfZW50cnkmIzM0O11gCiogICBgUmVhc29uaW5nYDogQ29uY2lzZSBleHBsYW5hdGlvbgoqICAgYFdvcnRoRnV6emluZ2A6IGB0cnVlYAoKSSYjMzk7bSBjb25maWRlbnQgaW4gdGhlc2UgZmluZGluZ3MsIHNvIEkmIzM5O2xsIGdvIGFoZWFkIGFuZCBjYWxsIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfY29udmVydF9pbmxpbmVfZGF0YSYjMzQ7LAogICAgJiMzNDtleHQ0X3RyeV9hZGRfaW5saW5lX2VudHJ5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGV4dDQgaW5saW5lIGRhdGEgY29udmVyc2lvbiBsb2dpYyBpbiBmcy9leHQ0L2lubGluZS5jLCByZXBsYWNpbmcgdGhlIGlubGluZSBkYXRhIHJlc3RvcmF0aW9uIGZsb3cgd2l0aCBhIG5ldyBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9jayBmdW5jdGlvbiBhbmQgcmVmYWN0b3JpbmcgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jay4gVGhlc2UgY2hhbmdlcyBhbHRlciBob3cgZXh0NCBjb252ZXJ0cyBpbmxpbmUgZGlyZWN0b3J5L2ZpbGUgZGF0YSBpbnRvIGV4dGVudC9ibG9jayBhbGxvY2F0aW9ucyBhbmQgYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfY29udmVydF9pbmxpbmVfZGF0YSYjMzQ7LAogICAgJiMzNDtleHQ0X3RyeV9hZGRfaW5saW5lX2VudHJ5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGV4dDQgaW5saW5lIGRhdGEgY29udmVyc2lvbiBsb2dpYyBpbiBmcy9leHQ0L2lubGluZS5jLCByZXBsYWNpbmcgdGhlIGlubGluZSBkYXRhIHJlc3RvcmF0aW9uIGZsb3cgd2l0aCBhIG5ldyBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9jayBmdW5jdGlvbiBhbmQgcmVmYWN0b3JpbmcgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jay4gVGhlc2UgY2hhbmdlcyBhbHRlciBob3cgZXh0NCBjb252ZXJ0cyBpbmxpbmUgZGlyZWN0b3J5L2ZpbGUgZGF0YSBpbnRvIGV4dGVudC9ibG9jayBhbGxvY2F0aW9ucyBhbmQgYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6NTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjo1MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrYCBhbmQgaW50cm9kdWNlcyBgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2tgIHRvIHJlZmFjdG9yIGhvdyBpbmxpbmUgZGF0YSBpcyBjb252ZXJ0ZWQgdG8gYSByZWd1bGFyIGV4dGVudCBvciBibG9jayBwb2ludGVyIGluIGV4dDQuXG5cbkFuYWx5c2lzIG9mIG1lbW9yeSBoYW5kbGluZzpcbjEuIEhlYXAgYnVmZmVyczpcbiAgIC0gYGJ1ZmAgaXMgcG9wdWxhdGVkIGJ5IGBleHQ0X3JlYWRfaW5saW5lX2RhdGEoKWAgYmVmb3JlIGJlaW5nIHJlYWQuXG4gICAtIGBpX2Jsb2NrX2J1ZmAgYW5kIGB4YXR0cl9idWZgIGFyZSBhbGxvY2F0ZWQgd2l0aCBga21hbGxvYygpYCBhbmQgaW1tZWRpYXRlbHkgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGBtZW1jcHkoKWAgZnJvbSBgcmF3X2lub2RlLVx1MDAzZWlfYmxvY2tgIGFuZCBgaGVhZGVyYCByZXNwZWN0aXZlbHkuXG4gICAtIFRoZSBuZXdseSBhbGxvY2F0ZWQgYmxvY2sgYnVmZmVyIGBiaC1cdTAwM2ViX2RhdGFgIGlzIGNsZWFyZWQgdXNpbmcgYG1lbXNldChiaC1cdTAwM2ViX2RhdGEsIDAsIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUpYCBiZWZvcmUgZGF0YSBvciBkaXJlY3RvcnkgZW50cmllcyBhcmUgY29waWVkIGludG8gaXQuXG4yLiBTdGFjayBzdHJ1Y3R1cmVzOlxuICAgLSBgc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9yZXF1ZXN0IGFyYCBpcyBjbGVhcmVkIHdpdGggYG1lbXNldChcdTAwMjZhciwgMCwgc2l6ZW9mKGFyKSlgLlxuICAgLSBgc3RydWN0IGV4dDRfZXh0ZW50IG5ld2V4YCBoYXMgYWxsIGZvdXIgZmllbGRzIChgZWVfYmxvY2tgLCBgZWVfbGVuYCwgYGVlX3N0YXJ0X2xvYCwgYGVlX3N0YXJ0X2hpYCkgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cbiAgIC0gYHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQgaXNgIGFuZCBgc3RydWN0IGV4dDRfeGF0dHJfaW5mbyBpYCBhcmUgc3RhdGljYWxseSBpbml0aWFsaXplZCB3aXRoIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLlxuMy4gTm8gZGF0YSBvciBzdHJ1Y3R1cmUgd2l0aCB1bmluaXRpYWxpemVkIHBhZGRpbmcgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjb250cm9sIGZsb3cgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy5cblxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyBleHRlbnQgdHJlZSBjb3JydXB0aW9uLCBsb2NrIG9yZGVyIHZpb2xhdGlvbnMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIHNhbml0aXplcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM5ZmZmMzI0OGZhN2NkN2NiZjJkNDRhNmNjNTQ0NGViZjE3N2Q4MzYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAwMjo1MzowMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5saW5lLmMgYi9mcy9leHQ0L2lubGluZS5jCmluZGV4IDgwNDVlNGZmMjcwYzcuLjkzOWM2YmYyMGI1YjcgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvaW5saW5lLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9pbmxpbmUuYwpAQCAtMTQsNiAmIzQzOzE0LDcgQEAKICNpbmNsdWRlICYjMzQ7ZXh0NC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7eGF0dHIuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3RydW5jYXRlLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7ZXh0NF9leHRlbnRzLmgmIzM0OwogCiAjZGVmaW5lIEVYVDRfWEFUVFJfU1lTVEVNX0RBVEEJJiMzNDtkYXRhJiMzNDsKICNkZWZpbmUgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRQkoKHNpemVvZihfX2xlMzIpICogRVhUNF9OX0JMT0NLUykpCkBAIC0xMDcwLDIxICYjNDM7MTA3MSwxMjUgQEAgc3RhdGljIGludCBleHQ0X3VwZGF0ZV9pbmxpbmVfZGlyKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqZGlyLAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBleHQ0X3Jlc3RvcmVfaW5saW5lX2RhdGEoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkgICAgIHN0cnVjdCBleHQ0X2lsb2MgKmlsb2MsCi0JCQkJICAgICB2b2lkICpidWYsIGludCBpbmxpbmVfc2l6ZSkKJiM0MztzdGF0aWMgaW50IGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfZnNibGtfdCBibG9jaywKJiM0MzsJCQkJCXVuc2lnbmVkIGludCBsZW4sIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCiB7Ci0JaW50IHJldDsKJiM0MzsJc3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpOwomIzQzOwlzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9maW5kIGlzID0gewomIzQzOwkJLnMgPSB7IC5ub3RfZm91bmQgPSAwLCB9LAomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvIGkgPSB7CiYjNDM7CQkubmFtZV9pbmRleCA9IEVYVDRfWEFUVFJfSU5ERVhfU1lTVEVNLAomIzQzOwkJLm5hbWUgPSBFWFQ0X1hBVFRSX1NZU1RFTV9EQVRBLAomIzQzOwkJLnZhbHVlID0gTlVMTCwKJiM0MzsJCS52YWx1ZV9sZW4gPSAwLAomIzQzOwl9OwomIzQzOwlpbnQgZXJyb3I7CiYjNDM7CXZvaWQgKmlfYmxvY2tfYnVmID0gTlVMTDsKJiM0MzsJdm9pZCAqeGF0dHJfYnVmID0gTlVMTDsKJiM0MzsJdm9pZCAqaGVhZGVyID0gTlVMTDsKJiM0MzsJdm9pZCAqdGFpbCA9IE5VTEw7CiYjNDM7CWludCB4YXR0cl9zaXplOwomIzQzOwlzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlOwogCi0JcmV0ID0gZXh0NF9jcmVhdGVfaW5saW5lX2RhdGEoaGFuZGxlLCBpbm9kZSwgaW5saW5lX3NpemUpOwotCWlmIChyZXQpIHsKLQkJZXh0NF9tc2coaW5vZGUtJmd0O2lfc2IsIEtFUk5fRU1FUkcsCi0JCQkmIzM0O2Vycm9yIHJlc3RvcmluZyBpbmxpbmVfZGF0YSBmb3IgaW5vZGUgLS0gcG90ZW50aWFsIGRhdGEgbG9zcyEgKGlub2RlICVsbHUsIGVycm9yICVkKSYjMzQ7LAotCQkJaW5vZGUtJmd0O2lfaW5vLCByZXQpOwotCQlyZXR1cm47CiYjNDM7CWlfYmxvY2tfYnVmID0ga21hbGxvYyhFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFLCBHRlBfTk9GUyk7CiYjNDM7CWlmICghaV9ibG9ja19idWYpIHsKJiM0MzsJCWVycm9yID0gLUVOT01FTTsKJiM0MzsJCWRvd25fd3JpdGUoJmFtcDtlaS0mZ3Q7aV9kYXRhX3NlbSk7CiYjNDM7CQlnb3RvIGVycm9yOwogCX0KLQlleHQ0X3dyaXRlX2lubGluZV9kYXRhKGlub2RlLCBpbG9jLCBidWYsIDAsIGlubGluZV9zaXplKTsKLQlleHQ0X3NldF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpOwomIzQzOwlkb3duX3dyaXRlKCZhbXA7ZWktJmd0O2lfZGF0YV9zZW0pOwomIzQzOwllcnJvciA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgJmFtcDtpcy5pbG9jKTsKJiM0MzsJaWYgKGVycm9yKQomIzQzOwkJZ290byBlcnJvcjsKJiM0MzsJcmF3X2lub2RlID0gZXh0NF9yYXdfaW5vZGUoJmFtcDtpcy5pbG9jKTsKJiM0MzsJaGVhZGVyID0gSUhEUihpbm9kZSwgcmF3X2lub2RlKTsKJiM0MzsJdGFpbCA9IElUQUlMKGlub2RlLCByYXdfaW5vZGUpOwomIzQzOwl4YXR0cl9zaXplID0gdGFpbCAtIGhlYWRlcjsKJiM0MzsJeGF0dHJfYnVmID0ga21hbGxvYyh4YXR0cl9zaXplLCBHRlBfTk9GUyk7CiYjNDM7CWlmICgheGF0dHJfYnVmKSB7CiYjNDM7CQllcnJvciA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIGVycm9yOwomIzQzOwl9CiYjNDM7CUJVRkZFUl9UUkFDRShpcy5pbG9jLmJoLCAmIzM0O2dldF93cml0ZV9hY2Nlc3MmIzM0Oyk7CiYjNDM7CWVycm9yID0gZXh0NF9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLCBpbm9kZS0mZ3Q7aV9zYiwgaXMuaWxvYy5iaCwgRVhUNF9KVFJfTk9ORSk7CiYjNDM7CWlmIChlcnJvcikgewomIzQzOwkJZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIGJsb2NrKTsKJiM0MzsJCWV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7CiYjNDM7CQlleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIGJsb2NrLCBsZW4sIDApOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsJbWVtY3B5KGlfYmxvY2tfYnVmLCAodm9pZCAqKXJhd19pbm9kZS0mZ3Q7aV9ibG9jaywgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7CiYjNDM7CW1lbXNldCgodm9pZCAqKXJhd19pbm9kZS0mZ3Q7aV9ibG9jaywgMCwgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7CiYjNDM7CW1lbXNldChlaS0mZ3Q7aV9kYXRhLCAwLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTsKJiM0MzsJbWVtY3B5KHhhdHRyX2J1ZiwgaGVhZGVyLCB4YXR0cl9zaXplKTsKJiM0MzsJaWYgKGV4dDRfaGFzX2ZlYXR1cmVfZXh0ZW50cyhpbm9kZS0mZ3Q7aV9zYikgJmFtcDsmYW1wOwomIzQzOwkJKFNfSVNESVIoaW5vZGUtJmd0O2lfbW9kZSkgfHwgU19JU1JFRyhpbm9kZS0mZ3Q7aV9tb2RlKSB8fCBTX0lTTE5LKGlub2RlLSZndDtpX21vZGUpKSkgewomIzQzOwkJZXh0NF9zZXRfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKTsKJiM0MzsJCWV4dDRfZXh0X3RyZWVfaW5pdChoYW5kbGUsIGlub2RlKTsKJiM0MzsJCXN0cnVjdCBleHQ0X2V4dF9wYXRoICpwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgMCwgTlVMTCwgMCk7CiYjNDM7CiYjNDM7CQlpZiAoSVNfRVJSKHBhdGgpKSB7CiYjNDM7CQkJZXJyb3IgPSBQVFJfRVJSKHBhdGgpOwomIzQzOwkJCWdvdG8gcmVjb3Zlcnk7CiYjNDM7CQl9CiYjNDM7CQlzdHJ1Y3QgZXh0NF9leHRlbnQgbmV3ZXg7CiYjNDM7CiYjNDM7CQluZXdleC5lZV9ibG9jayA9IGNwdV90b19sZTMyKDApOwomIzQzOwkJbmV3ZXguZWVfbGVuID0gY3B1X3RvX2xlMTYoMSk7CiYjNDM7CQlleHQ0X2V4dF9zdG9yZV9wYmxvY2soJmFtcDtuZXdleCwgYmxvY2spOwomIzQzOwkJcGF0aCA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgJmFtcDtuZXdleCwgMCk7CiYjNDM7CQlpZiAoSVNfRVJSKHBhdGgpKSB7CiYjNDM7CQkJZXJyb3IgPSBQVFJfRVJSKHBhdGgpOwomIzQzOwkJCWlmIChlcnJvciA9PSAtRURRVU9UIHx8IGVycm9yID09IC1FTk9TUEMpCiYjNDM7CQkJCWdvdG8gcmVjb3Zlcnk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWV4dDRfZnJlZV9leHRfcGF0aChwYXRoKTsKJiM0MzsJCX0KJiM0MzsJfSBlbHNlIHsKJiM0MzsJCUVYVDRfSShpbm9kZSktJmd0O2lfZGF0YVswXSA9IGNwdV90b19sZTMyKGJsb2NrKTsKJiM0MzsJfQomIzQzOwllcnJvciA9IGV4dDRfeGF0dHJfaWJvZHlfZmluZChpbm9kZSwgJmFtcDtpLCAmYW1wO2lzKTsKJiM0MzsJaWYgKGVycm9yKQomIzQzOwkJZ290byByZWNvdmVyeTsKJiM0MzsJaWYgKCFpcy5zLm5vdF9mb3VuZCkKJiM0MzsJCWVycm9yID0gZXh0NF94YXR0cl9pYm9keV9zZXQoaGFuZGxlLCBpbm9kZSwgJmFtcDtpLCAmYW1wO2lzKTsKJiM0MztyZWNvdmVyeToKJiM0MzsJaWYgKGVycm9yKSB7CiYjNDM7CQlleHQ0X2ZvcmdldChoYW5kbGUsIDAsIGlub2RlLCBiaCwgYmxvY2spOwomIzQzOwkJZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTsKJiM0MzsJCWV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgYmxvY2ssIGxlbiwgMCk7CiYjNDM7CQltZW1jcHkoKHZvaWQgKilyYXdfaW5vZGUtJmd0O2lfYmxvY2ssIGlfYmxvY2tfYnVmLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTsKJiM0MzsJCW1lbWNweShlaS0mZ3Q7aV9kYXRhLCByYXdfaW5vZGUtJmd0O2lfYmxvY2ssIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpOwomIzQzOwkJbWVtY3B5KGhlYWRlciwgeGF0dHJfYnVmLCB4YXR0cl9zaXplKTsKJiM0MzsJCWV4dDRfY2xlYXJfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWV4dDRfY2xlYXJfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9JTkxJTkVfREFUQSk7CiYjNDM7CQlpZiAoU19JU0RJUihpbm9kZS0mZ3Q7aV9tb2RlKSkgewomIzQzOwkJCWlfc2l6ZV93cml0ZShpbm9kZSwgaW5vZGUtJmd0O2lfc2ItJmd0O3NfYmxvY2tzaXplKTsKJiM0MzsJCQlFWFQ0X0koaW5vZGUpLSZndDtpX2Rpc2tzaXplID0gaW5vZGUtJmd0O2lfc2ItJmd0O3NfYmxvY2tzaXplOwomIzQzOwkJfQomIzQzOwkJZ2V0X2JoKGlzLmlsb2MuYmgpOwomIzQzOwkJZXJyb3IgPSBleHQ0X21hcmtfaWxvY19kaXJ0eShoYW5kbGUsIGlub2RlLCAmYW1wO2lzLmlsb2MpOwomIzQzOwkJRVhUNF9JKGlub2RlKS0mZ3Q7aV9pbmxpbmVfb2ZmID0gMDsKJiM0MzsJCUVYVDRfSShpbm9kZSktJmd0O2lfaW5saW5lX3NpemUgPSAwOwomIzQzOwkJZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpOwomIzQzOwkJYnJlbHNlKGJoKTsKJiM0MzsJfQomIzQzO291dDoKJiM0MzsJYnJlbHNlKGlzLmlsb2MuYmgpOwomIzQzOwl1cF93cml0ZSgmYW1wO2VpLSZndDtpX2RhdGFfc2VtKTsKJiM0MzsJa2ZyZWUoaV9ibG9ja19idWYpOwomIzQzOwlrZnJlZSh4YXR0cl9idWYpOwomIzQzOwlyZXR1cm4gZXJyb3I7CiYjNDM7ZXJyb3I6CiYjNDM7CWV4dDRfZm9yZ2V0KGhhbmRsZSwgMCwgaW5vZGUsIGJoLCBibG9jayk7CiYjNDM7CWV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7CiYjNDM7CWV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgYmxvY2ssIGxlbiwgMCk7CiYjNDM7CXVwX3dyaXRlKCZhbXA7ZWktJmd0O2lfZGF0YV9zZW0pOwomIzQzOwlrZnJlZShpX2Jsb2NrX2J1Zik7CiYjNDM7CWtmcmVlKHhhdHRyX2J1Zik7CiYjNDM7CXJldHVybiBlcnJvcjsKIH0KIAogc3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsCkBAIC0xMDkzLDkgJiM0MzsxMTk4LDEyIEBAIHN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLAogewogCWludCBlcnJvcjsKIAl2b2lkICpidWYgPSBOVUxMOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqZGF0YV9iaCA9IE5VTEw7Ci0Jc3RydWN0IGV4dDRfbWFwX2Jsb2NrcyBtYXA7CiYjNDM7CXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMOwogCWludCBpbmxpbmVfc2l6ZTsKJiM0MzsJZXh0NF9mc2Jsa190IG5ld2Jsb2NrID0gMDsKJiM0MzsJc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9yZXF1ZXN0IGFyOwomIzQzOwlzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKGlub2RlLSZndDtpX3NiKTsKJiM0MzsJdW5zaWduZWQgaW50IGFsbG9jYXRlZF9ibG9jazsKIAogCWlubGluZV9zaXplID0gZXh0NF9nZXRfaW5saW5lX3NpemUoaW5vZGUpOwogCWJ1ZiA9IGttYWxsb2MoaW5saW5lX3NpemUsIEdGUF9OT0ZTKTsKQEAgLTExMjAsNjMgJiM0MzsxMjI4LDYyIEBAIHN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLAogCQkJZ290byBvdXQ7CiAJfQogCi0JZXJyb3IgPSBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZSwgaW5vZGUpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXQ7Ci0KLQltYXAubV9sYmxrID0gMDsKLQltYXAubV9sZW4gPSAxOwotCW1hcC5tX2ZsYWdzID0gMDsKLQllcnJvciA9IGV4dDRfbWFwX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCAmYW1wO21hcCwgRVhUNF9HRVRfQkxPQ0tTX0NSRUFURSk7CiYjNDM7CW1lbXNldCgmYW1wO2FyLCAwLCBzaXplb2YoYXIpKTsKJiM0MzsJYXIuaW5vZGUgPSBpbm9kZTsKJiM0MzsJYXIubG9naWNhbCA9IDA7CiYjNDM7CWFyLmxlbiA9IDE7CiYjNDM7CWlmIChTX0lTUkVHKGlub2RlLSZndDtpX21vZGUpKQomIzQzOwkJYXIuZmxhZ3MgPSBFWFQ0X01CX0hJTlRfREFUQTsKJiM0MzsJZWxzZQomIzQzOwkJYXIuZmxhZ3MgPSAwOwomIzQzOwluZXdibG9jayA9IGV4dDRfbWJfbmV3X2Jsb2NrcyhoYW5kbGUsICZhbXA7YXIsICZhbXA7ZXJyb3IpOwogCWlmIChlcnJvciAmbHQ7IDApCi0JCWdvdG8gb3V0X3Jlc3RvcmU7Ci0JaWYgKCEobWFwLm1fZmxhZ3MgJmFtcDsgRVhUNF9NQVBfTUFQUEVEKSkgewotCQllcnJvciA9IC1FSU87Ci0JCWdvdG8gb3V0X3Jlc3RvcmU7Ci0JfQotCi0JZGF0YV9iaCA9IHNiX2dldGJsayhpbm9kZS0mZ3Q7aV9zYiwgbWFwLm1fcGJsayk7Ci0JaWYgKCFkYXRhX2JoKSB7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJYWxsb2NhdGVkX2Jsb2NrID0gRVhUNF9DMkIoc2JpLCBhci5sZW4pOwomIzQzOwliaCA9IHNiX2dldGJsayhpbm9kZS0mZ3Q7aV9zYiwgbmV3YmxvY2spOwomIzQzOwlpZiAoIWJoKSB7CiAJCWVycm9yID0gLUVOT01FTTsKLQkJZ290byBvdXRfcmVzdG9yZTsKJiM0MzsJCWdvdG8gb3V0X2JoOwogCX0KIAotCWxvY2tfYnVmZmVyKGRhdGFfYmgpOwotCWVycm9yID0gZXh0NF9qb3VybmFsX2dldF9jcmVhdGVfYWNjZXNzKGhhbmRsZSwgaW5vZGUtJmd0O2lfc2IsIGRhdGFfYmgsCiYjNDM7CWxvY2tfYnVmZmVyKGJoKTsKJiM0MzsJZXJyb3IgPSBleHQ0X2pvdXJuYWxfZ2V0X2NyZWF0ZV9hY2Nlc3MoaGFuZGxlLCBpbm9kZS0mZ3Q7aV9zYiwgYmgsCiAJCQkJCSAgICAgICBFWFQ0X0pUUl9OT05FKTsKIAlpZiAoZXJyb3IpIHsKLQkJdW5sb2NrX2J1ZmZlcihkYXRhX2JoKTsKJiM0MzsJCXVubG9ja19idWZmZXIoYmgpOwogCQllcnJvciA9IC1FSU87Ci0JCWdvdG8gb3V0X3Jlc3RvcmU7CiYjNDM7CQlnb3RvIG91dF9iaDsKIAl9Ci0JbWVtc2V0KGRhdGFfYmgtJmd0O2JfZGF0YSwgMCwgaW5vZGUtJmd0O2lfc2ItJmd0O3NfYmxvY2tzaXplKTsKJiM0MzsJbWVtc2V0KGJoLSZndDtiX2RhdGEsIDAsIGlub2RlLSZndDtpX3NiLSZndDtzX2Jsb2Nrc2l6ZSk7CiAKIAlpZiAoIVNfSVNESVIoaW5vZGUtJmd0O2lfbW9kZSkpIHsKLQkJbWVtY3B5KGRhdGFfYmgtJmd0O2JfZGF0YSwgYnVmLCBpbmxpbmVfc2l6ZSk7Ci0JCXNldF9idWZmZXJfdXB0b2RhdGUoZGF0YV9iaCk7Ci0JCXVubG9ja19idWZmZXIoZGF0YV9iaCk7CiYjNDM7CQltZW1jcHkoYmgtJmd0O2JfZGF0YSwgYnVmLCBpbmxpbmVfc2l6ZSk7CiYjNDM7CQlzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTsKJiM0MzsJCXVubG9ja19idWZmZXIoYmgpOwogCQllcnJvciA9IGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwKLQkJCQkJCSAgIGlub2RlLCBkYXRhX2JoKTsKJiM0MzsJCQkJCQkgICBpbm9kZSwgYmgpOwogCX0gZWxzZSB7Ci0JCXVubG9ja19idWZmZXIoZGF0YV9iaCk7Ci0JCWlub2RlLSZndDtpX3NpemUgPSBpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19ibG9ja3NpemU7Ci0JCWlfc2l6ZV93cml0ZShpbm9kZSwgaW5vZGUtJmd0O2lfc2ItJmd0O3NfYmxvY2tzaXplKTsKLQkJRVhUNF9JKGlub2RlKS0mZ3Q7aV9kaXNrc2l6ZSA9IGlub2RlLSZndDtpX3NiLSZndDtzX2Jsb2Nrc2l6ZTsKLQotCQllcnJvciA9IGV4dDRfaW5pdF9kaXJibG9jayhoYW5kbGUsIGlub2RlLCBkYXRhX2JoLAomIzQzOwkJdW5sb2NrX2J1ZmZlcihiaCk7CiYjNDM7CQllcnJvciA9IGV4dDRfaW5pdF9kaXJibG9jayhoYW5kbGUsIGlub2RlLCBiaCwKIAkJCSAgbGUzMl90b19jcHUoKChzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqKWJ1ZiktJmd0O2lub2RlKSwKIAkJCSAgYnVmICYjNDM7IEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFLAogCQkJICBpbmxpbmVfc2l6ZSAtIEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFKTsKLQkJaWYgKCFlcnJvcikKLQkJCWVycm9yID0gZXh0NF9tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgaW5vZGUpOwogCX0KJiM0MztvdXRfYmg6CiYjNDM7CWlmIChlcnJvcikgewomIzQzOwkJaWYgKGJoKQomIzQzOwkJCWV4dDRfZm9yZ2V0KGhhbmRsZSwgMCwgaW5vZGUsIGJoLCBuZXdibG9jayk7CiYjNDM7CQlzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7CiAKLW91dF9yZXN0b3JlOgotCWlmIChlcnJvcikKLQkJZXh0NF9yZXN0b3JlX2lubGluZV9kYXRhKGhhbmRsZSwgaW5vZGUsIGlsb2MsIGJ1ZiwgaW5saW5lX3NpemUpOwotCiYjNDM7CQlkb3duX3dyaXRlKCZhbXA7ZWktJmd0O2lfZGF0YV9zZW0pOwomIzQzOwkJZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTsKJiM0MzsJCWV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgbmV3YmxvY2ssIGFsbG9jYXRlZF9ibG9jaywgMCk7CiYjNDM7CQl1cF93cml0ZSgmYW1wO2VpLSZndDtpX2RhdGFfc2VtKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWVycm9yID0gZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2soaGFuZGxlLCBpbm9kZSwKJiM0MzsJCQkJbmV3YmxvY2ssIGFsbG9jYXRlZF9ibG9jaywgYmgpOwomIzQzOwl9CiBvdXQ6Ci0JYnJlbHNlKGRhdGFfYmgpOwogCWtmcmVlKGJ1Zik7CiAJcmV0dXJuIGVycm9yOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUwMAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipLTVNBTiBGdXp6aW5nIERldGVybWluYXRpb24qKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIHRoaXMgcGF0Y2gg4oCTIGRvZXMgaXQgd2FycmFudCBpdHMgb3duIEtNU0FOIGZ1enppbmcgc2Vzc2lvbj8gQmVmb3JlIEkgY29tbWl0IHRvIHRoYXQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCYjMzk7cyBhY3R1YWxseSBjaGFuZ2VkLiBDb250ZXh0IGlzIGtleSwgc28gSSYjMzk7bGwgc3RhcnQgYnkgdW5kZXJzdGFuZGluZyB0aGUgcGF0Y2gmIzM5O3MgcHVycG9zZSBhbmQgdGhlIG92ZXJhbGwgbW9kaWZpY2F0aW9ucyBpdCBtYWtlcy4KClNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHNlZSB3aGF0JiMzOTtzIHRvdWNoZWQgaW4gYGZzL2V4dDQvaW5saW5lLmNgLiBUaGF0IGZpbGUgaXMgd2hlcmUgSSBleHBlY3QgdGhlIGNvcmUgb2YgdGhpcyBpbnRlcmFjdGlvbiB0byBiZS4gTm93LCBsZXQmIzM5O3MgemVybyBpbiBvbiBgZnMvZXh0NC9pbmxpbmUuY2AgYW5kIHNwZWNpZmljYWxseSBmb2N1cyBvbiBhbmQgcmVhZCBhcm91bmQgdGhlIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrYCBmdW5jdGlvbi4gVGhhdCYjMzk7cyBhIGNyaXRpY2FsIHBvaW50IGZvciBpbmxpbmUgZGF0YSBhbmQgaXMgd2hlcmUgSSBleHBlY3QgdGhlIGhlYXJ0IG9mIGFueSBwb3RlbnRpYWwgS01TQU4gaXNzdWVzIHRvIHJlc2lkZS4gT25jZSBJIHVuZGVyc3RhbmQgdGhlIGNvZGUgdGhhdCBpcyB0aGVyZSwgSSBjYW4gZGVjaWRlIG9uIHRoZSBuZWVkIGZvciBkZWRpY2F0ZWQgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L2lubGluZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDYwOlx0XHRcdHJldHVybiAtRU5PU1BDO1xuMTA2MTpcdFxuMTA2MjpcdFx0cmV0ID0gZXh0NF91cGRhdGVfaW5saW5lX2RhdGEoaGFuZGxlLCBkaXIsXG4xMDYzOlx0XHRcdFx0XHQgICAgICBuZXdfc2l6ZSAmIzQzOyBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcbjEwNjQ6XHRcdGlmIChyZXQpXG4xMDY1Olx0XHRcdHJldHVybiByZXQ7XG4xMDY2Olx0XG4xMDY3Olx0XHRleHQ0X3VwZGF0ZV9maW5hbF9kZShleHQ0X2dldF9pbmxpbmVfeGF0dHJfcG9zKGRpciwgaWxvYyksIG9sZF9zaXplLFxuMTA2ODpcdFx0XHRcdCAgICAgRVhUNF9JKGRpciktXHUwMDNlaV9pbmxpbmVfc2l6ZSAtXG4xMDY5Olx0XHRcdFx0XHRcdFx0RVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XG4xMDcwOlx0XHRkaXItXHUwMDNlaV9zaXplID0gRVhUNF9JKGRpciktXHUwMDNlaV9kaXNrc2l6ZSA9IEVYVDRfSShkaXIpLVx1MDAzZWlfaW5saW5lX3NpemU7XG4xMDcxOlx0XHRyZXR1cm4gMDtcbjEwNzI6XHR9XG4xMDczOlx0XG4xMDc0Olx0c3RhdGljIGludCBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2ZzYmxrX3QgYmxvY2ssXG4xMDc1Olx0XHRcdFx0XHRcdHVuc2lnbmVkIGludCBsZW4sIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXG4xMDc2Olx0e1xuMTA3NzpcdFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpO1xuMTA3ODpcdFx0c3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCBpcyA9IHtcbjEwNzk6XHRcdFx0LnMgPSB7IC5ub3RfZm91bmQgPSAwLCB9LFxuMTA4MDpcdFx0fTtcbjEwODE6XHRcdHN0cnVjdCBleHQ0X3hhdHRyX2luZm8gaSA9IHtcbjEwODI6XHRcdFx0Lm5hbWVfaW5kZXggPSBFWFQ0X1hBVFRSX0lOREVYX1NZU1RFTSxcbjEwODM6XHRcdFx0Lm5hbWUgPSBFWFQ0X1hBVFRSX1NZU1RFTV9EQVRBLFxuMTA4NDpcdFx0XHQudmFsdWUgPSBOVUxMLFxuMTA4NTpcdFx0XHQudmFsdWVfbGVuID0gMCxcbjEwODY6XHRcdH07XG4xMDg3Olx0XHRpbnQgZXJyb3I7XG4xMDg4Olx0XHR2b2lkICppX2Jsb2NrX2J1ZiA9IE5VTEw7XG4xMDg5Olx0XHR2b2lkICp4YXR0cl9idWYgPSBOVUxMO1xuMTA5MDpcdFx0dm9pZCAqaGVhZGVyID0gTlVMTDtcbjEwOTE6XHRcdHZvaWQgKnRhaWwgPSBOVUxMO1xuMTA5MjpcdFx0aW50IHhhdHRyX3NpemU7XG4xMDkzOlx0XHRzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlO1xuMTA5NDpcdFxuMTA5NTpcdFx0aV9ibG9ja19idWYgPSBrbWFsbG9jKEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUsIEdGUF9OT0ZTKTtcbjEwOTY6XHRcdGlmICghaV9ibG9ja19idWYpIHtcbjEwOTc6XHRcdFx0ZXJyb3IgPSAtRU5PTUVNO1xuMTA5ODpcdFx0XHRkb3duX3dyaXRlKFx1MDAyNmVpLVx1MDAzZWlfZGF0YV9zZW0pO1xuMTA5OTpcdFx0XHRnb3RvIGVycm9yO1xuMTEwMDpcdFx0fVxuMTEwMTpcdFx0ZG93bl93cml0ZShcdTAwMjZlaS1cdTAwM2VpX2RhdGFfc2VtKTtcbjExMDI6XHRcdGVycm9yID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcdTAwMjZpcy5pbG9jKTtcbjExMDM6XHRcdGlmIChlcnJvcilcbjExMDQ6XHRcdFx0Z290byBlcnJvcjtcbjExMDU6XHRcdHJhd19pbm9kZSA9IGV4dDRfcmF3X2lub2RlKFx1MDAyNmlzLmlsb2MpO1xuMTEwNjpcdFx0aGVhZGVyID0gSUhEUihpbm9kZSwgcmF3X2lub2RlKTtcbjExMDc6XHRcdHRhaWwgPSBJVEFJTChpbm9kZSwgcmF3X2lub2RlKTtcbjExMDg6XHRcdHhhdHRyX3NpemUgPSB0YWlsIC0gaGVhZGVyO1xuMTEwOTpcdFx0eGF0dHJfYnVmID0ga21hbGxvYyh4YXR0cl9zaXplLCBHRlBfTk9GUyk7XG4xMTEwOlx0XHRpZiAoIXhhdHRyX2J1Zikge1xuMTExMTpcdFx0XHRlcnJvciA9IC1FTk9NRU07XG4xMTEyOlx0XHRcdGdvdG8gZXJyb3I7XG4xMTEzOlx0XHR9XG4xMTE0Olx0XHRCVUZGRVJfVFJBQ0UoaXMuaWxvYy5iaCwgXCYjMzQ7Z2V0X3dyaXRlX2FjY2Vzc1wmIzM0Oyk7XG4xMTE1Olx0XHRlcnJvciA9IGV4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgaW5vZGUtXHUwMDNlaV9zYiwgaXMuaWxvYy5iaCwgRVhUNF9KVFJfTk9ORSk7XG4xMTE2Olx0XHRpZiAoZXJyb3IpIHtcbjExMTc6XHRcdFx0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIGJsb2NrKTtcbjExMTg6XHRcdFx0ZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTtcbjExMTk6XHRcdFx0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBOVUxMLCBibG9jaywgbGVuLCAwKTtcbjExMjA6XHRcdFx0Z290byBvdXQ7XG4xMTIxOlx0XHR9XG4xMTIyOlx0XHRtZW1jcHkoaV9ibG9ja19idWYsICh2b2lkICopcmF3X2lub2RlLVx1MDAzZWlfYmxvY2ssIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuMTEyMzpcdFx0bWVtc2V0KCh2b2lkICopcmF3X2lub2RlLVx1MDAzZWlfYmxvY2ssIDAsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuMTEyNDpcdFx0bWVtc2V0KGVpLVx1MDAzZWlfZGF0YSwgMCwgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XG4xMTI1Olx0XHRtZW1jcHkoeGF0dHJfYnVmLCBoZWFkZXIsIHhhdHRyX3NpemUpO1xuMTEyNjpcdFx0aWYgKGV4dDRfaGFzX2ZlYXR1cmVfZXh0ZW50cyhpbm9kZS1cdTAwM2VpX3NiKSBcdTAwMjZcdTAwMjZcbjExMjc6XHRcdFx0KFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSB8fCBTX0lTUkVHKGlub2RlLVx1MDAzZWlfbW9kZSkgfHwgU19JU0xOSyhpbm9kZS1cdTAwM2VpX21vZGUpKSkge1xuMTEyODpcdFx0XHRleHQ0X3NldF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpO1xuMTEyOTpcdFx0XHRleHQ0X2V4dF90cmVlX2luaXQoaGFuZGxlLCBpbm9kZSk7XG4xMTMwOlx0XHRcdHN0cnVjdCBleHQ0X2V4dF9wYXRoICpwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgMCwgTlVMTCwgMCk7XG4xMTMxOlx0XG4xMTMyOlx0XHRcdGlmIChJU19FUlIocGF0aCkpIHtcbjExMzM6XHRcdFx0XHRlcnJvciA9IFBUUl9FUlIocGF0aCk7XG4xMTM0Olx0XHRcdFx0Z290byByZWNvdmVyeTtcbjExMzU6XHRcdFx0fVxuMTEzNjpcdFx0XHRzdHJ1Y3QgZXh0NF9leHRlbnQgbmV3ZXg7XG4xMTM3Olx0XG4xMTM4Olx0XHRcdG5ld2V4LmVlX2Jsb2NrID0gY3B1X3RvX2xlMzIoMCk7XG4xMTM5Olx0XHRcdG5ld2V4LmVlX2xlbiA9IGNwdV90b19sZTE2KDEpO1xuMTE0MDpcdFx0XHRleHQ0X2V4dF9zdG9yZV9wYmxvY2soXHUwMDI2bmV3ZXgsIGJsb2NrKTtcbjExNDE6XHRcdFx0cGF0aCA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgXHUwMDI2bmV3ZXgsIDApO1xuMTE0MjpcdFx0XHRpZiAoSVNfRVJSKHBhdGgpKSB7XG4xMTQzOlx0XHRcdFx0ZXJyb3IgPSBQVFJfRVJSKHBhdGgpO1xuMTE0NDpcdFx0XHRcdGlmIChlcnJvciA9PSAtRURRVU9UIHx8IGVycm9yID09IC1FTk9TUEMpXG4xMTQ1Olx0XHRcdFx0XHRnb3RvIHJlY292ZXJ5O1xuMTE0NjpcdFx0XHR9IGVsc2Uge1xuMTE0NzpcdFx0XHRcdGV4dDRfZnJlZV9leHRfcGF0aChwYXRoKTtcbjExNDg6XHRcdFx0fVxuMTE0OTpcdFx0fSBlbHNlIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQ2NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBEYXRhIFN0cmVhbTogQSBUYXJnZXRlZCBSZXZpZXcqKgoKT2theSwgdGhlIGluaXRpYWwgc2NhbiBzdWdnZXN0cyBhIHBvdGVudGlhbCBhcmVhIG9mIGludGVyZXN0IHdpdGhpbiB0aGUgYnJvYWRlciBkYXRhc2V0LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGRlZXBlciBpbnRvIGEgc3BlY2lmaWMsIHBvdGVudGlhbGx5IHJlbGV2YW50IHNlZ21lbnQuIFJhdGhlciB0aGFuIHJlbHlpbmcgc29sZWx5IG9uIHRoZSBoaWdoLWxldmVsIHN1bW1hcmllcyBvciBzdGF0aXN0aWNhbCBvdmVydmlld3MgSSYjMzk7dmUgYWxyZWFkeSBnZW5lcmF0ZWQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIHRoZSBkYXRhIGluIG1vcmUgZGV0YWlsLiBMZXQmIzM5O3MgcGlucG9pbnQgbGluZXMgMTE1MCB0aHJvdWdoIDEyNTAuIFRoaXMgdGFyZ2V0ZWQgYXBwcm9hY2ggYWxsb3dzIG1lIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGlzIHBhcnRpY3VsYXIgcmVnaW9uLCBsb29raW5nIGZvciBzdWJ0bGUgcGF0dGVybnMsIG91dGxpZXJzLCBvciBhbm9tYWxpZXMgdGhhdCBhIGJyb2FkZXIgc3dlZXAgbWlnaHQgaGF2ZSBtaXNzZWQuIEV4YW1pbmluZyB0aGlzIHN1YnNldCBkaXJlY3RseSB3aWxsIHByb3ZpZGUgYSBtb3JlIGdyYW51bGFyIHZpZXcgdG8gaW5mb3JtIHRoZSBuZXh0IHN0YWdlIG9mIG15IGFuYWx5c2lzLiBUaGUgY29udGV4dCBvZiB0aGVzZSBsaW5lcyBtaWdodCBiZSBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHdoYXRldmVyIEkgYW0gdHJ5aW5nIHRvIHVuZGVyc3RhbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9pbmxpbmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogOTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE1MDpcdFx0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZGF0YVswXSA9IGNwdV90b19sZTMyKGJsb2NrKTtcbjExNTE6XHRcdH1cbjExNTI6XHRcdGVycm9yID0gZXh0NF94YXR0cl9pYm9keV9maW5kKGlub2RlLCBcdTAwMjZpLCBcdTAwMjZpcyk7XG4xMTUzOlx0XHRpZiAoZXJyb3IpXG4xMTU0Olx0XHRcdGdvdG8gcmVjb3Zlcnk7XG4xMTU1Olx0XHRpZiAoIWlzLnMubm90X2ZvdW5kKVxuMTE1NjpcdFx0XHRlcnJvciA9IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZSwgaW5vZGUsIFx1MDAyNmksIFx1MDAyNmlzKTtcbjExNTc6XHRyZWNvdmVyeTpcbjExNTg6XHRcdGlmIChlcnJvcikge1xuMTE1OTpcdFx0XHRleHQ0X2ZvcmdldChoYW5kbGUsIDAsIGlub2RlLCBiaCwgYmxvY2spO1xuMTE2MDpcdFx0XHRleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpO1xuMTE2MTpcdFx0XHRleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIGJsb2NrLCBsZW4sIDApO1xuMTE2MjpcdFx0XHRtZW1jcHkoKHZvaWQgKilyYXdfaW5vZGUtXHUwMDNlaV9ibG9jaywgaV9ibG9ja19idWYsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuMTE2MzpcdFx0XHRtZW1jcHkoZWktXHUwMDNlaV9kYXRhLCByYXdfaW5vZGUtXHUwMDNlaV9ibG9jaywgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XG4xMTY0Olx0XHRcdG1lbWNweShoZWFkZXIsIHhhdHRyX2J1ZiwgeGF0dHJfc2l6ZSk7XG4xMTY1Olx0XHRcdGV4dDRfY2xlYXJfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKTtcbjExNjY6XHRcdH0gZWxzZSB7XG4xMTY3Olx0XHRcdGV4dDRfY2xlYXJfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9JTkxJTkVfREFUQSk7XG4xMTY4Olx0XHRcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbjExNjk6XHRcdFx0XHRpX3NpemVfd3JpdGUoaW5vZGUsIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUpO1xuMTE3MDpcdFx0XHRcdEVYVDRfSShpbm9kZSktXHUwMDNlaV9kaXNrc2l6ZSA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemU7XG4xMTcxOlx0XHRcdH1cbjExNzI6XHRcdFx0Z2V0X2JoKGlzLmlsb2MuYmgpO1xuMTE3MzpcdFx0XHRlcnJvciA9IGV4dDRfbWFya19pbG9jX2RpcnR5KGhhbmRsZSwgaW5vZGUsIFx1MDAyNmlzLmlsb2MpO1xuMTE3NDpcdFx0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfaW5saW5lX29mZiA9IDA7XG4xMTc1Olx0XHRcdEVYVDRfSShpbm9kZSktXHUwMDNlaV9pbmxpbmVfc2l6ZSA9IDA7XG4xMTc2Olx0XHRcdGV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTtcbjExNzc6XHRcdFx0YnJlbHNlKGJoKTtcbjExNzg6XHRcdH1cbjExNzk6XHRvdXQ6XG4xMTgwOlx0XHRicmVsc2UoaXMuaWxvYy5iaCk7XG4xMTgxOlx0XHR1cF93cml0ZShcdTAwMjZlaS1cdTAwM2VpX2RhdGFfc2VtKTtcbjExODI6XHRcdGtmcmVlKGlfYmxvY2tfYnVmKTtcbjExODM6XHRcdGtmcmVlKHhhdHRyX2J1Zik7XG4xMTg0Olx0XHRyZXR1cm4gZXJyb3I7XG4xMTg1Olx0ZXJyb3I6XG4xMTg2Olx0XHRleHQ0X2ZvcmdldChoYW5kbGUsIDAsIGlub2RlLCBiaCwgYmxvY2spO1xuMTE4NzpcdFx0ZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTtcbjExODg6XHRcdGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgYmxvY2ssIGxlbiwgMCk7XG4xMTg5Olx0XHR1cF93cml0ZShcdTAwMjZlaS1cdTAwM2VpX2RhdGFfc2VtKTtcbjExOTA6XHRcdGtmcmVlKGlfYmxvY2tfYnVmKTtcbjExOTE6XHRcdGtmcmVlKHhhdHRyX2J1Zik7XG4xMTkyOlx0XHRyZXR1cm4gZXJyb3I7XG4xMTkzOlx0fVxuMTE5NDpcdFxuMTE5NTpcdHN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxuMTE5NjpcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuMTE5NzpcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgZXh0NF9pbG9jICppbG9jKVxuMTE5ODpcdHtcbjExOTk6XHRcdGludCBlcnJvcjtcbjEyMDA6XHRcdHZvaWQgKmJ1ZiA9IE5VTEw7XG4xMjAxOlx0XHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDtcbjEyMDI6XHRcdGludCBpbmxpbmVfc2l6ZTtcbjEyMDM6XHRcdGV4dDRfZnNibGtfdCBuZXdibG9jayA9IDA7XG4xMjA0Olx0XHRzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX3JlcXVlc3QgYXI7XG4xMjA1Olx0XHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuMTIwNjpcdFx0dW5zaWduZWQgaW50IGFsbG9jYXRlZF9ibG9jaztcbjEyMDc6XHRcbjEyMDg6XHRcdGlubGluZV9zaXplID0gZXh0NF9nZXRfaW5saW5lX3NpemUoaW5vZGUpO1xuMTIwOTpcdFx0YnVmID0ga21hbGxvYyhpbmxpbmVfc2l6ZSwgR0ZQX05PRlMpO1xuMTIxMDpcdFx0aWYgKCFidWYpIHtcbjEyMTE6XHRcdFx0ZXJyb3IgPSAtRU5PTUVNO1xuMTIxMjpcdFx0XHRnb3RvIG91dDtcbjEyMTM6XHRcdH1cbjEyMTQ6XHRcbjEyMTU6XHRcdGVycm9yID0gZXh0NF9yZWFkX2lubGluZV9kYXRhKGlub2RlLCBidWYsIGlubGluZV9zaXplLCBpbG9jKTtcbjEyMTY6XHRcdGlmIChlcnJvciBcdTAwM2MgMClcbjEyMTc6XHRcdFx0Z290byBvdXQ7XG4xMjE4Olx0XG4xMjE5Olx0XHQvKlxuMTIyMDpcdFx0ICogTWFrZSBzdXJlIHRoZSBpbmxpbmUgZGlyZWN0b3J5IGVudHJpZXMgcGFzcyBjaGVja3MgYmVmb3JlIHdlIHRyeSB0b1xuMTIyMTpcdFx0ICogY29udmVydCB0aGVtLCBzbyB0aGF0IHdlIGF2b2lkIHRvdWNoaW5nIHN0dWZmIHRoYXQgbmVlZHMgZnNjay5cbjEyMjI6XHRcdCAqL1xuMTIyMzpcdFx0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuMTIyNDpcdFx0XHRlcnJvciA9IGV4dDRfY2hlY2tfYWxsX2RlKGlub2RlLCBpbG9jLVx1MDAzZWJoLFxuMTIyNTpcdFx0XHRcdFx0XHRidWYgJiM0MzsgRVhUNF9JTkxJTkVfRE9URE9UX1NJWkUsXG4xMjI2Olx0XHRcdFx0XHRcdGlubGluZV9zaXplIC0gRVhUNF9JTkxJTkVfRE9URE9UX1NJWkUpO1xuMTIyNzpcdFx0XHRpZiAoZXJyb3IpXG4xMjI4Olx0XHRcdFx0Z290byBvdXQ7XG4xMjI5Olx0XHR9XG4xMjMwOlx0XG4xMjMxOlx0XHRtZW1zZXQoXHUwMDI2YXIsIDAsIHNpemVvZihhcikpO1xuMTIzMjpcdFx0YXIuaW5vZGUgPSBpbm9kZTtcbjEyMzM6XHRcdGFyLmxvZ2ljYWwgPSAwO1xuMTIzNDpcdFx0YXIubGVuID0gMTtcbjEyMzU6XHRcdGlmIChTX0lTUkVHKGlub2RlLVx1MDAzZWlfbW9kZSkpXG4xMjM2Olx0XHRcdGFyLmZsYWdzID0gRVhUNF9NQl9ISU5UX0RBVEE7XG4xMjM3Olx0XHRlbHNlXG4xMjM4Olx0XHRcdGFyLmZsYWdzID0gMDtcbjEyMzk6XHRcdG5ld2Jsb2NrID0gZXh0NF9tYl9uZXdfYmxvY2tzKGhhbmRsZSwgXHUwMDI2YXIsIFx1MDAyNmVycm9yKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI0NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIEJhY2sgaW50byBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKioKCkFscmlnaHQsIGxldCYjMzk7cyBjaXJjbGUgYmFjayB0byBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja2AuIEkmIzM5O3ZlIGJlZW4gZm9jdXNpbmcgb24gdGhlIGJyb2FkZXIgcGljdHVyZSwgYnV0IG5vdyBpdCYjMzk7cyB0aW1lIHRvIGRyaWxsIGRvd24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgY3J1Y2lhbCBpbiB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uLiBJJiMzOTt2ZSBnb3QgYSBnb29kIG1lbnRhbCBtb2RlbCBvZiBob3cgaW5saW5lIGRhdGEgd29ya3Mgd2l0aGluIGV4dDQsIGJ1dCB0aGlzIGZ1bmN0aW9uIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgKnByZWNpc2VseSogaG93IGl0IGhhbmRsZXMgdGhlIGNvbnZlcnNpb24gcHJvY2VzcyB3aXRob3V0IHJlc29ydGluZyB0byBsb2NraW5nLiBXaGF0IGFyZSB0aGUgc3VidGxlIHJhY2UgY29uZGl0aW9ucz8gV2hhdCBhcmUgdGhlIGtleSBhc3N1bXB0aW9ucyBpdCBtYWtlcyBhYm91dCB0aGUgc3RhdGUgb2YgdGhlIGlub2RlIGFuZCBibG9jayBncm91cD8gV2hhdCBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZXMgYW5kIGZpZWxkcyBhcmUgYmVpbmcgbWFuaXB1bGF0ZWQ/IEkgbmVlZCB0byBtZXRpY3Vsb3VzbHkgdHJhY2UgdGhlIGNvbnRyb2wgZmxvdywgcGF5aW5nIGF0dGVudGlvbiB0byBlZGdlIGNhc2VzLiBJJiMzOTttIGxvb2tpbmcgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIGFyZWFzIHdoZXJlIGEgY29uY3VycmVudCBtb2RpZmljYXRpb24gY291bGQgbGVhZCB0byBkYXRhIGNvcnJ1cHRpb24gb3IgaW5jb25zaXN0ZW5jeS4gSXMgdGhlIHVzZSBvZiB0aGUgYGlfbXV0ZXhgIHN1ZmZpY2llbnQgaW4gdGhpcyBjb250ZXh0LCBvciBpcyB0aGVyZSBhbm90aGVyIHJhY2UgY29uZGl0aW9uPyBBcmUgdGhlcmUgZGF0YSBpbnRlZ3JpdHkgY2hlY2tzIHRoYXQgSSBtaWdodCBiZSBvdmVybG9va2luZz8gQW55IGludGVyYWN0aW9ucyB3aXRoIHRoZSBqb3VybmFsIHRoYXQgbmVlZCBzY3J1dGlueT8gT2theSwgbGV0JiMzOTtzIHN0ZXAgdGhyb3VnaCBpdCBsaW5lIGJ5IGxpbmUsIGtlZXBpbmcgYSBrZWVuIGV5ZSBvbiB0aGUgYXRvbWljIG9wZXJhdGlvbnMgYW5kIG1lbW9yeSBiYXJyaWVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L2lubGluZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjQwOlx0XHRpZiAoZXJyb3IgXHUwMDNjIDApXG4xMjQxOlx0XHRcdGdvdG8gb3V0O1xuMTI0MjpcdFx0YWxsb2NhdGVkX2Jsb2NrID0gRVhUNF9DMkIoc2JpLCBhci5sZW4pO1xuMTI0MzpcdFx0YmggPSBzYl9nZXRibGsoaW5vZGUtXHUwMDNlaV9zYiwgbmV3YmxvY2spO1xuMTI0NDpcdFx0aWYgKCFiaCkge1xuMTI0NTpcdFx0XHRlcnJvciA9IC1FTk9NRU07XG4xMjQ2Olx0XHRcdGdvdG8gb3V0X2JoO1xuMTI0NzpcdFx0fVxuMTI0ODpcdFxuMTI0OTpcdFx0bG9ja19idWZmZXIoYmgpO1xuMTI1MDpcdFx0ZXJyb3IgPSBleHQ0X2pvdXJuYWxfZ2V0X2NyZWF0ZV9hY2Nlc3MoaGFuZGxlLCBpbm9kZS1cdTAwM2VpX3NiLCBiaCxcbjEyNTE6XHRcdFx0XHRcdFx0ICAgICAgIEVYVDRfSlRSX05PTkUpO1xuMTI1MjpcdFx0aWYgKGVycm9yKSB7XG4xMjUzOlx0XHRcdHVubG9ja19idWZmZXIoYmgpO1xuMTI1NDpcdFx0XHRlcnJvciA9IC1FSU87XG4xMjU1Olx0XHRcdGdvdG8gb3V0X2JoO1xuMTI1NjpcdFx0fVxuMTI1NzpcdFx0bWVtc2V0KGJoLVx1MDAzZWJfZGF0YSwgMCwgaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZSk7XG4xMjU4Olx0XG4xMjU5Olx0XHRpZiAoIVNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuMTI2MDpcdFx0XHRtZW1jcHkoYmgtXHUwMDNlYl9kYXRhLCBidWYsIGlubGluZV9zaXplKTtcbjEyNjE6XHRcdFx0c2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7XG4xMjYyOlx0XHRcdHVubG9ja19idWZmZXIoYmgpO1xuMTI2MzpcdFx0XHRlcnJvciA9IGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSxcbjEyNjQ6XHRcdFx0XHRcdFx0XHQgICBpbm9kZSwgYmgpO1xuMTI2NTpcdFx0fSBlbHNlIHtcbjEyNjY6XHRcdFx0dW5sb2NrX2J1ZmZlcihiaCk7XG4xMjY3Olx0XHRcdGVycm9yID0gZXh0NF9pbml0X2RpcmJsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLFxuMTI2ODpcdFx0XHRcdCAgbGUzMl90b19jcHUoKChzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqKWJ1ZiktXHUwMDNlaW5vZGUpLFxuMTI2OTpcdFx0XHRcdCAgYnVmICYjNDM7IEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFLFxuMTI3MDpcdFx0XHRcdCAgaW5saW5lX3NpemUgLSBFWFQ0X0lOTElORV9ET1RET1RfU0laRSk7XG4xMjcxOlx0XHR9XG4xMjcyOlx0b3V0X2JoOlxuMTI3MzpcdFx0aWYgKGVycm9yKSB7XG4xMjc0Olx0XHRcdGlmIChiaClcbjEyNzU6XHRcdFx0XHRleHQ0X2ZvcmdldChoYW5kbGUsIDAsIGlub2RlLCBiaCwgbmV3YmxvY2spO1xuMTI3NjpcdFx0XHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7XG4xMjc3Olx0XG4xMjc4Olx0XHRcdGRvd25fd3JpdGUoXHUwMDI2ZWktXHUwMDNlaV9kYXRhX3NlbSk7XG4xMjc5Olx0XHRcdGV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7XG4xMjgwOlx0XHRcdGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgbmV3YmxvY2ssIGFsbG9jYXRlZF9ibG9jaywgMCk7XG4xMjgxOlx0XHRcdHVwX3dyaXRlKFx1MDAyNmVpLVx1MDAzZWlfZGF0YV9zZW0pO1xuMTI4MjpcdFx0fSBlbHNlIHtcbjEyODM6XHRcdFx0ZXJyb3IgPSBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9jayhoYW5kbGUsIGlub2RlLFxuMTI4NDpcdFx0XHRcdFx0bmV3YmxvY2ssIGFsbG9jYXRlZF9ibG9jaywgYmgpO1xuMTI4NTpcdFx0fVxuMTI4NjpcdG91dDpcbjEyODc6XHRcdGtmcmVlKGJ1Zik7XG4xMjg4Olx0XHRyZXR1cm4gZXJyb3I7XG4xMjg5Olx0fVxuMTI5MDpcdFxuMTI5MTpcdC8qXG4xMjkyOlx0ICogVHJ5IHRvIGFkZCB0aGUgbmV3IGVudHJ5IHRvIHRoZSBpbmxpbmUgZGF0YS5cbjEyOTM6XHQgKiBJZiBzdWNjZWVkcywgcmV0dXJuIDAuIElmIG5vdCwgZXh0ZW5kZWQgdGhlIGlubGluZSBkaXIgYW5kIGNvcGllZCBkYXRhIHRvXG4xMjk0Olx0ICogdGhlIG5ldyBjcmVhdGVkIGJsb2NrLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQ1MgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDcxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElubGluZSBEYXRhIENvbnZlcnNpb24gUGF0Y2ggaW4gZXh0NCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duLiBJdCYjMzk7cyBmb2N1c2VkIG9uIHJlZmFjdG9yaW5nIHRoZSBpbmxpbmUgZGF0YSBjb252ZXJzaW9uIHByb2Nlc3Mgd2l0aGluIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrYC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBhIHNvbGlkIGltcHJvdmVtZW50LCBidXQgd2UgbmVlZCB0byBlbnN1cmUgdGhlIGRldGFpbHMgYXJlIHNvdW5kLgoKUHJldmlvdXNseSwgdGhlIGNvZGUgd291bGQgZGVzdHJveSB0aGUgaW5saW5lIGRhdGEsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYSBkYXRhIGxvc3MgaWYgYmxvY2sgYWxsb2NhdGlvbiBmYWlsZWQuIFRoaXMgcGF0Y2ggdGFrZXMgYSBtb3JlIHJlc2lsaWVudCBhcHByb2FjaC4gSXQgbm93IGFsbG9jYXRlcyB0aGUgYmxvY2sgdXAtZnJvbnQgdXNpbmcgYGV4dDRfbWJfbmV3X2Jsb2Nrc2AuIFRoZW4gaXQgd3JpdGVzIHRoZSBkYXRhIHRvIHRoZSBidWZmZXIgaGVhZCwgd2hpY2ggaXMgZ29vZCBiZWNhdXNlIGl0IGVsaW1pbmF0ZXMgdGhhdCBjcml0aWNhbCB3aW5kb3cuIFRoZSB1c2Ugb2YgYG1lbXNldGAgdG8gY2xlYXIgdGhlIGJ1ZmZlciBiZWZvcmUgY29weWluZyBpbmxpbmUgZGF0YSBzZWVtcyBzZW5zaWJsZS4gQW5kLCB0aGUgYGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrYCBmdW5jdGlvbiBsb29rcyBsaWtlIGEgY2xlYXIsIGF0b21pYyBvcGVyYXRpb24uIFRoZSBrZXkgcG9pbnQgaXMgdGhhdCBpdCBzYXZlcyB0aGUgaW5vZGUmIzM5O3MgaV9ibG9jayBhbmQgeGF0dHJzIGluIG1lbW9yeSBhbmQgcmV2ZXJ0cyB0aGVtIGlmIGFueSBlcnJvciBoYXBwZW5zLCB0aGlzIGFwcGVhcnMgdG8gYmUgYSBnb29kIHdheSB0byBoYW5kbGUgdGhlIGZhaWx1cmUgY2FzZS4KCk5vdywgZm9yIHRoZSBtZW1vcnkgc2FmZXR5IGNoZWNrOiBJIGFsd2F5cyBzY3J1dGluaXplIG1lbW9yeSBoYW5kbGluZyB3aXRoIGV4dHJlbWUgY2FyZS4KCjEuICBgaV9ibG9ja19idWZgOiBUaGUgYGttYWxsb2NgIGFuZCBgbWVtY3B5YCB1c2FnZSBpcyBnb29kLCBwcm9wZXJseSB3cml0aW5nIHRvIGBpX2Jsb2NrX2J1ZmAgYmVmb3JlIGFueSBwb3RlbnRpYWwgcmVhZHMuIFRoZSByZXN0b3JlIG1lY2hhbmlzbSBjb3JyZWN0bHkgdXNlcyBgbWVtY3B5YCBhbmQgYGtmcmVlYCBvbiByZWNvdmVyeS4gVGhpcyBsb29rcyBzYWZlLgoKMi4gIGB4YXR0cl9idWZgOiBTaW1pbGFyIHRvIGBpX2Jsb2NrX2J1ZmAsIHRoZSBhbGxvY2F0aW9uLCB3cml0ZSB3aXRoIGBtZW1jcHlgLCBhbmQgcmVjb3ZlcnkgbWVjaGFuaXNtIHNlZW0gY29ycmVjdC4gVGhlIHNpemUgY2FsY3VsYXRpb24gYHhhdHRyX3NpemUgPSB0YWlsIC0gaGVhZGVyYCBuZWVkcyBhIHF1aWNrIG1lbnRhbCB2ZXJpZmljYXRpb24sIGJ1dCBvbiB0aGUgc3VyZmFjZSwgaXQgbG9va3MgZmluZS4KCjMuICBgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZGAgYW5kIGBzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvYDogVGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZXNlIHN0cnVjdHMgaXMgc3RyYWlnaHRmb3J3YXJkIGFuZCBleHBlY3RlZC4KCjQuICBgc3RydWN0IGV4dDRfZXh0ZW50IG5ld2V4YDogVGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBleHRlbnQgc3RydWN0dXJlIHdpdGggYGVlX2Jsb2NrID0gY3B1X3RvX2xlMzIoMClgIGFuZCBgZWVfbGVuID0gY3B1X3RvX2xlMTYoMSlgIGlzIHN0YW5kYXJkIHByYWN0aWNlLiBOb3cgSSBzaG91bGQgdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBleHQ0X2V4dGVudGAgYW5kIGFsc28gYGV4dDRfZXh0X3N0b3JlX3BibG9ja2AuIEkgbmVlZCB0byBjb25maXJtIHRoZXJlIGFyZW4mIzM5O3QgYW55IHBvdGVudGlhbCBvdmVyZmxvd3Mgb3IgdW5leHBlY3RlZCBiZWhhdmlvciBpbiB0aG9zZSBmdW5jdGlvbnMgb3Igc3RydWN0dXJlcy4KCk92ZXJhbGwsIHRoZSBwYXRjaCBsb29rcyB3ZWxsLXN0cnVjdHVyZWQgYW5kIGZvY3VzZXMgb24gZGF0YSBpbnRlZ3JpdHksIHdoaWNoIGlzIGEgZ29vZCB0aGluZy4gV2l0aCB0aGUgcGxhbm5lZCBmb2xsb3cgdXAgb24gdGhlIGBzdHJ1Y3QgZXh0NF9leHRlbnRgIGFuZCBgZXh0NF9leHRfc3RvcmVfcGJsb2NrYCBkZXRhaWxzIEkgY2FuIHNpZ24gb2ZmIG9uIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJhZCBleHByZXNzaW9uOiBmYXRhbDogLWUgb3B0aW9uLCAmIzM5O3N0cnVjdCBleHQ0X2V4dGVudCB7JiMzOTs6IFVubWF0Y2hlZCBcezwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgZXh0NF9leHRlbnQgeyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O2JhZCBleHByZXNzaW9uOiBmYXRhbDogLWUgb3B0aW9uLCAmIzM5O3N0cnVjdCBleHQ0X2V4dGVudCB7JiMzOTs6IFVubWF0Y2hlZCBcXHsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzc3CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqR3JlcCBTdHJhdGVneSBmb3IgYHN0cnVjdCBleHQ0X2V4dGVudGAqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gd29yay4gSSBuZWVkIHRvIGZpbmQgYWxsIGluc3RhbmNlcyBvZiBgc3RydWN0IGV4dDRfZXh0ZW50YCBpbiB0aGUgY29kZWJhc2UuIEJ1dCwgYW5kIHRoaXMgaXMgY3J1Y2lhbCwgSSBuZWVkIHRvIGF2b2lkIGFueSBnb3RjaGFzIHdpdGggcmVnZXggZW5naW5lcyBhbmQgYnJhY2VzLCBhcyB0aG9zZSBhcmUgYWx3YXlzIGEgcGFpbi4gVGhlIHBvdGVudGlhbCBmb3IgbWlzaW50ZXJwcmV0YXRpb24gd2l0aCBicmFja2V0ZWQgcGF0dGVybnMgYW5kIHRoZSBsaWtlIGlzIHRvbyBoaWdoLiBTbywgSSYjMzk7bSBnb2luZyB0byBrZWVwIGl0IGNsZWFuIGFuZCBzaW1wbGUuIEkmIzM5O2xsIHN0aWNrIHRvIGEgZGlyZWN0IGBncmVwYCBmb3IgYHN0cnVjdCBleHQ0X2V4dGVudGAsIG5vIGZhbmN5IHJlZ2V4LCBubyBhdHRlbXB0aW5nIGNsZXZlciBzaG9ydGN1dHMuIFNvbWV0aW1lcyB0aGUgbW9zdCBzdHJhaWdodGZvcndhcmQgYXBwcm9hY2ggaXMgdGhlIG1vc3QgcmVsaWFibGUsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggcG90ZW50aWFsbHkgY29tcGxleCBjb2RlIGFuZCB0aGUgbnVhbmNlcyBvZiB2YXJpb3VzIGBncmVwYCBpbXBsZW1lbnRhdGlvbnMuIFNpbXBsaWNpdHkgdHJ1bXBzIGNsZXZlcm5lc3MgaGVyZTsgSSBuZWVkIGFjY3VyYWN5IGFib3ZlIGFsbCBlbHNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgZXh0NF9leHRlbnQgXFx7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0NF9leHRlbnRzLmg9NDg9c3RydWN0IGV4dDRfZXh0ZW50X3RhaWwge1xuLS1cbmZzL2V4dDQvZXh0NF9leHRlbnRzLmgtNTUtICovXG5mcy9leHQ0L2V4dDRfZXh0ZW50cy5oOjU2OnN0cnVjdCBleHQ0X2V4dGVudCB7XG5mcy9leHQ0L2V4dDRfZXh0ZW50cy5oLTU3LVx0X19sZTMyXHRlZV9ibG9jaztcdC8qIGZpcnN0IGxvZ2ljYWwgYmxvY2sgZXh0ZW50IGNvdmVycyAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjExMwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gRXh0ZW50cyBpbiBleHQ0KioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZXh0ZW50cyBhcmUgaW1wbGVtZW50ZWQgaW4gdGhlIGV4dDQgZmlsZXN5c3RlbSwgc3BlY2lmaWNhbGx5LiBUaGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGhlYWRlciBmaWxlLCB3aGljaCB1c3VhbGx5IGRlZmluZXMgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgYW5kIGNvbnN0YW50cy4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYGZzL2V4dDQvZXh0NF9leHRlbnRzLmhgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSA1Ni4gSSYjMzk7bSBob3BpbmcgdG8gZmluZCB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgdXNlZCB0byByZXByZXNlbnQgYW4gZXh0ZW50LCB3aGljaCB3aWxsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSByZXN0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QhIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZSB0aGUgYGV4dDRfZXh0ZW50X2hlYWRlcmAsIGBleHQ0X2V4dGVudGAsIGFuZCBwb3NzaWJseSBzb21lIHJlbGF0ZWQgc3RydWN0dXJlcyBmb3IgbWFuYWdpbmcgdGhlIGV4dGVudCB0cmVlLCBpZiB0aGV5JiMzOTtyZSB1c2luZyBvbmUuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBvbi1kaXNrIGZvcm1hdCBhbmQgaG93IHRoZSBsb2dpY2FsLXRvLXBoeXNpY2FsIG1hcHBpbmcgaXMgaGFuZGxlZC4gS25vd2luZyB0aGlzIHNob3VsZCBwcm92aWRlIGtleSBpbnNpZ2h0IGludG8gdW5kZXJzdGFuZGluZyBmaWxlIGFsbG9jYXRpb24gaW4gdGhpcyBmaWxlc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0NF9leHRlbnRzLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDUwOlx0fTtcbiAgNTE6XHRcbiAgNTI6XHQvKlxuICA1MzpcdCAqIFRoaXMgaXMgdGhlIGV4dGVudCBvbi1kaXNrIHN0cnVjdHVyZS5cbiAgNTQ6XHQgKiBJdCYjMzk7cyB1c2VkIGF0IHRoZSBib3R0b20gb2YgdGhlIHRyZWUuXG4gIDU1Olx0ICovXG4gIDU2Olx0c3RydWN0IGV4dDRfZXh0ZW50IHtcbiAgNTc6XHRcdF9fbGUzMlx0ZWVfYmxvY2s7XHQvKiBmaXJzdCBsb2dpY2FsIGJsb2NrIGV4dGVudCBjb3ZlcnMgKi9cbiAgNTg6XHRcdF9fbGUxNlx0ZWVfbGVuO1x0XHQvKiBudW1iZXIgb2YgYmxvY2tzIGNvdmVyZWQgYnkgZXh0ZW50ICovXG4gIDU5Olx0XHRfX2xlMTZcdGVlX3N0YXJ0X2hpO1x0LyogaGlnaCAxNiBiaXRzIG9mIHBoeXNpY2FsIGJsb2NrICovXG4gIDYwOlx0XHRfX2xlMzJcdGVlX3N0YXJ0X2xvO1x0LyogbG93IDMyIGJpdHMgb2YgcGh5c2ljYWwgYmxvY2sgKi9cbiAgNjE6XHR9O1xuICA2MjpcdFxuICA2MzpcdC8qXG4gIDY0Olx0ICogVGhpcyBpcyBpbmRleCBvbi1kaXNrIHN0cnVjdHVyZS5cbiAgNjU6XHQgKiBJdCYjMzk7cyB1c2VkIGF0IGFsbCB0aGUgbGV2ZWxzIGV4Y2VwdCB0aGUgYm90dG9tLlxuICA2NjpcdCAqL1xuICA2NzpcdHN0cnVjdCBleHQ0X2V4dGVudF9pZHgge1xuICA2ODpcdFx0X19sZTMyXHRlaV9ibG9jaztcdC8qIGluZGV4IGNvdmVycyBsb2dpY2FsIGJsb2NrcyBmcm9tICYjMzk7YmxvY2smIzM5OyAqL1xuICA2OTpcdFx0X19sZTMyXHRlaV9sZWFmX2xvO1x0LyogcG9pbnRlciB0byB0aGUgcGh5c2ljYWwgYmxvY2sgb2YgdGhlIG5leHQgKlxuICA3MDpcdFx0XHRcdFx0ICogbGV2ZWwuIGxlYWYgb3IgbmV4dCBpbmRleCBjb3VsZCBiZSB0aGVyZSAqL1xuICA3MTpcdFx0X19sZTE2XHRlaV9sZWFmX2hpO1x0LyogaGlnaCAxNiBiaXRzIG9mIHBoeXNpY2FsIGJsb2NrICovXG4gIDcyOlx0XHRfX3UxNlx0ZWlfdW51c2VkO1xuICA3MzpcdH07XG4gIDc0Olx0XG4gIDc1Olx0LypcbiAgNzY6XHQgKiBFYWNoIGJsb2NrIChsZWF2ZXMgYW5kIGluZGV4ZXMpLCBldmVuIGlub2RlLXN0b3JlZCBoYXMgaGVhZGVyLlxuICA3NzpcdCAqL1xuICA3ODpcdHN0cnVjdCBleHQ0X2V4dGVudF9oZWFkZXIge1xuICA3OTpcdFx0X19sZTE2XHRlaF9tYWdpYztcdC8qIHByb2JhYmx5IHdpbGwgc3VwcG9ydCBkaWZmZXJlbnQgZm9ybWF0cyAqL1xuICA4MDpcdFx0X19sZTE2XHRlaF9lbnRyaWVzO1x0LyogbnVtYmVyIG9mIHZhbGlkIGVudHJpZXMgKi9cbiAgODE6XHRcdF9fbGUxNlx0ZWhfbWF4O1x0XHQvKiBjYXBhY2l0eSBvZiBzdG9yZSBpbiBlbnRyaWVzICovXG4gIDgyOlx0XHRfX2xlMTZcdGVoX2RlcHRoO1x0LyogaGFzIHRyZWUgcmVhbCB1bmRlcmx5aW5nIGJsb2Nrcz8gKi9cbiAgODM6XHRcdF9fbGUzMlx0ZWhfZ2VuZXJhdGlvbjtcdC8qIGdlbmVyYXRpb24gb2YgdGhlIHRyZWUgKi9cbiAgODQ6XHR9O1xuICA4NTpcdFxuICA4NjpcdCNkZWZpbmUgRVhUNF9FWFRfTUFHSUNcdFx0Y3B1X3RvX2xlMTYoMHhmMzBhKVxuICA4NzpcdCNkZWZpbmUgRVhUNF9NQVhfRVhURU5UX0RFUFRIIDVcbiAgODg6XHRcbiAgODk6XHQjZGVmaW5lIEVYVDRfRVhURU5UX1RBSUxfT0ZGU0VUKGhkcikgXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwNDQKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gZXh0NF9leHRfc3RvcmVfcGJsb2NrKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gYGV4dDRfZXh0X3N0b3JlX3BibG9ja2AuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIHNjaGVtZSBvZiBleHRlbnQgbWFuYWdlbWVudCB3aXRoaW4gZXh0NC4gSSYjMzk7bSBhc3N1bWluZyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBhbGxvY2F0aW9uIG9yIGRlYWxsb2NhdGlvbiBvZiBwaHlzaWNhbCBibG9ja3MgcmVsYXRlZCB0byBhbiBleHRlbnQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIGV4dGVudCB0cmVlLiBMZXQmIzM5O3Mgc2VlLCB3aGF0IGFyZSB0aGUga2V5IHBhcmFtZXRlcnMgaXQgb3BlcmF0ZXMgb24/IEkmIzM5O2xsIGJldCBpdCYjMzk7cyBzb21ldGhpbmcgYWxvbmcgdGhlIGxpbmVzIG9mIHRoZSBpbm9kZSwgdGhlIGV4dGVudCBpdHNlbGYgKG9yIGEgcG9pbnRlciB0byBpdCksIGFuZCBwcm9iYWJseSB0aGUgbG9naWNhbCBibG9jayBudW1iZXIgYW5kIHRoZSBudW1iZXIgb2YgYmxvY2tzIHRvIGhhbmRsZS4gSSYjMzk7bSBhbHNvIGN1cmlvdXMgYWJvdXQgdGhlIGVycm9yIGhhbmRsaW5nIOKAkyBkb2VzIGl0IHJldHVybiBhbiBlcnJvciBjb2RlIG9yIHJlbHkgb24gYXNzZXJ0aW9ucz8gVGhlIHJldHVybiB2YWx1ZSBwcm9iYWJseSBpbmRpY2F0ZXMgdGhlIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZiB0aGUgb3BlcmF0aW9uLCBidXQgSSB3YW50IHRvIHVuZGVyc3RhbmQgKmhvdyogaXQgc2lnbmFscyB0aGF0IGZhaWx1cmUuIFNwZWNpZmljYWxseSwgSSYjMzk7ZCBuZWVkIHRvIHRyYWNlIHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IHJldHVybmVkIGVycm9ycy4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBpdCYjMzk7cyBjb3JyZWN0bHkgaGFuZGxpbmcgYm90aCBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gc2NlbmFyaW9zLiBJcyB0aGVyZSBhIGRpc3RpbmN0aW9uIGluIGhvdyBpdCBoYW5kbGVzIGRpcmVjdCwgaW5kaXJlY3QsIGFuZCBkb3VibHkgaW5kaXJlY3QgYmxvY2tzIGluIHRoZSBleHRlbnQgdHJlZT8gRmluYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbiYjMzk7cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBqb3VybmFsaW5nIGxheWVyLiBEb2VzIGl0IHV0aWxpemUgam91cm5hbF9zdGFydCwgam91cm5hbF9lbmQsIGV0Yz8gSXMgdGhlcmUgYW55IHBvdGVudGlhbCBmb3IgZGF0YSBsb3NzIG9yIGNvcnJ1cHRpb24gaWYgdGhlIGpvdXJuYWwgaXNuJiMzOTt0IHByb3Blcmx5IGhhbmRsZWQgaGVyZT8gTGV0JiMzOTtzIHRha2UgYSBsb29rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X2V4dF9zdG9yZV9wYmxvY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHQ0X2V4dGVudHMuaD0yMzI9c3RhdGljIGlubGluZSBleHQ0X2ZzYmxrX3QgZXh0NF9pZHhfcGJsb2NrKHN0cnVjdCBleHQ0X2V4dGVudF9pZHggKml4KVxuLS1cbmZzL2V4dDQvZXh0NF9leHRlbnRzLmgtMjQxLS8qXG5mcy9leHQ0L2V4dDRfZXh0ZW50cy5oOjI0MjogKiBleHQ0X2V4dF9zdG9yZV9wYmxvY2s6XG5mcy9leHQ0L2V4dDRfZXh0ZW50cy5oLTI0My0gKiBzdG9yZXMgYSBsYXJnZSBwaHlzaWNhbCBibG9jayBudW1iZXIgaW50byBhbiBleHRlbnQgc3RydWN0LFxuLS1cbmZzL2V4dDQvZXh0NF9leHRlbnRzLmgtMjQ1LSAqL1xuZnMvZXh0NC9leHQ0X2V4dGVudHMuaDoyNDY6c3RhdGljIGlubGluZSB2b2lkIGV4dDRfZXh0X3N0b3JlX3BibG9jayhzdHJ1Y3QgZXh0NF9leHRlbnQgKmV4LFxuZnMvZXh0NC9leHQ0X2V4dGVudHMuaC0yNDctXHRcdFx0XHRcdCBleHQ0X2ZzYmxrX3QgcGIpXG4tLVxuZnMvZXh0NC9leHRlbnRzLXRlc3QuYz0yMjc9c3RhdGljIGludCBleHRlbnRzX2t1bml0X2luaXQoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmMtMzE5LVx0RVhUX0ZJUlNUX0VYVEVOVChlaCktXHUwMDNlZWVfbGVuID0gY3B1X3RvX2xlMTYoRVhUX0RBVEFfTEVOKTtcbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmM6MzIwOlx0ZXh0NF9leHRfc3RvcmVfcGJsb2NrKEVYVF9GSVJTVF9FWFRFTlQoZWgpLCBFWFRfREFUQV9QQkxLKTtcbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmMtMzIxLVx0aWYgKCFwYXJhbSB8fCBwYXJhbS1cdTAwM2Vpc191bndyaXRfYXRfc3RhcnQpXG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9MTk5Mj1leHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtMjA4NS1cdFx0XHRleC1cdTAwM2VlZV9ibG9jayA9IG5ld2V4dC1cdTAwM2VlZV9ibG9jaztcbmZzL2V4dDQvZXh0ZW50cy5jOjIwODY6XHRcdFx0ZXh0NF9leHRfc3RvcmVfcGJsb2NrKGV4LCBleHQ0X2V4dF9wYmxvY2sobmV3ZXh0KSk7XG5mcy9leHQ0L2V4dGVudHMuYy0yMDg3LVx0XHRcdGV4LVx1MDAzZWVlX2xlbiA9IGNwdV90b19sZTE2KGV4dDRfZXh0X2dldF9hY3R1YWxfbGVuKGV4KVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTIxOTYtXHRuZWFyZXgtXHUwMDNlZWVfYmxvY2sgPSBuZXdleHQtXHUwMDNlZWVfYmxvY2s7XG5mcy9leHQ0L2V4dGVudHMuYzoyMTk3Olx0ZXh0NF9leHRfc3RvcmVfcGJsb2NrKG5lYXJleCwgZXh0NF9leHRfcGJsb2NrKG5ld2V4dCkpO1xuZnMvZXh0NC9leHRlbnRzLmMtMjE5OC1cdG5lYXJleC1cdTAwM2VlZV9sZW4gPSBuZXdleHQtXHUwMDNlZWVfbGVuO1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTI2MTQ9ZXh0NF9leHRfcm1fbGVhZihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTI3MzktXHRcdFx0LyogdGhpcyBleHRlbnQgaXMgcmVtb3ZlZDsgbWFyayBzbG90IGVudGlyZWx5IHVudXNlZCAqL1xuZnMvZXh0NC9leHRlbnRzLmM6Mjc0MDpcdFx0XHRleHQ0X2V4dF9zdG9yZV9wYmxvY2soZXgsIDApO1xuZnMvZXh0NC9leHRlbnRzLmMtMjc0MS1cbi0tXG5mcy9leHQ0L2V4dGVudHMuYz0zMTkxPXN0YXRpYyBzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqZXh0NF9zcGxpdF9leHRlbnRfYXQoaGFuZGxlX3QgKmhhbmRsZSxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy0zMjQ2LVx0ZXgyLVx1MDAzZWVlX2xlbiAgID0gY3B1X3RvX2xlMTYoZWVfbGVuIC0gKHNwbGl0IC0gZWVfYmxvY2spKTtcbmZzL2V4dDQvZXh0ZW50cy5jOjMyNDc6XHRleHQ0X2V4dF9zdG9yZV9wYmxvY2soZXgyLCBuZXdibG9jayk7XG5mcy9leHQ0L2V4dGVudHMuYy0zMjQ4LVx0aWYgKGlzX3Vud3JpdClcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz0zNTU3PWV4dDRfZXh0X2NvbnZlcnRfdG9faW5pdGlhbGl6ZWQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy0zNjQ1LVx0XHRcdGV4LVx1MDAzZWVlX2Jsb2NrID0gY3B1X3RvX2xlMzIoZWVfYmxvY2sgJiM0MzsgbWFwX2xlbik7XG5mcy9leHQ0L2V4dGVudHMuYzozNjQ2Olx0XHRcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhleCwgZWVfcGJsayAmIzQzOyBtYXBfbGVuKTtcbmZzL2V4dDQvZXh0ZW50cy5jLTM2NDctXHRcdFx0ZXgtXHUwMDNlZWVfbGVuID0gY3B1X3RvX2xlMTYoZWVfbGVuIC0gbWFwX2xlbik7XG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtMzY5MS1cdFx0XHRhYnV0X2V4LVx1MDAzZWVlX2Jsb2NrID0gY3B1X3RvX2xlMzIobmV4dF9sYmxrIC0gbWFwX2xlbik7XG5mcy9leHQ0L2V4dGVudHMuYzozNjkyOlx0XHRcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhhYnV0X2V4LCBuZXh0X3BibGsgLSBtYXBfbGVuKTtcbmZzL2V4dDQvZXh0ZW50cy5jLTM2OTMtXHRcdFx0ZXgtXHUwMDNlZWVfbGVuID0gY3B1X3RvX2xlMTYoZWVfbGVuIC0gbWFwX2xlbik7XG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtMzc0NS1cdFx0XHRcdGNwdV90b19sZTE2KCphbGxvY2F0ZWQgLSBzcGxpdF9tYXAubV9sZW4pO1xuZnMvZXh0NC9leHRlbnRzLmM6Mzc0NjpcdFx0XHRleHQ0X2V4dF9zdG9yZV9wYmxvY2soXHUwMDI2emVyb19leDEsXG5mcy9leHQ0L2V4dGVudHMuYy0zNzQ3LVx0XHRcdFx0ZXh0NF9leHRfcGJsb2NrKGV4KSAmIzQzOyBzcGxpdF9tYXAubV9sYmxrICYjNDM7XG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtMzc2MC1cdFx0XHRcdFx0XHRcdGVlX2Jsb2NrKTtcbmZzL2V4dDQvZXh0ZW50cy5jOjM3NjE6XHRcdFx0XHRleHQ0X2V4dF9zdG9yZV9wYmxvY2soXHUwMDI2emVyb19leDIsXG5mcy9leHQ0L2V4dGVudHMuYy0zNzYyLVx0XHRcdFx0XHRcdCAgICAgIGV4dDRfZXh0X3BibG9jayhleCkpO1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTQyNjk9aW50IGV4dDRfZXh0X21hcF9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy00NDczLVx0cGJsayA9IG5ld2Jsb2NrICYjNDM7IG9mZnNldDtcbmZzL2V4dDQvZXh0ZW50cy5jOjQ0NzQ6XHRleHQ0X2V4dF9zdG9yZV9wYmxvY2soXHUwMDI2bmV3ZXgsIHBibGspO1xuZnMvZXh0NC9leHRlbnRzLmMtNDQ3NS1cdG5ld2V4LmVlX2xlbiA9IGNwdV90b19sZTE2KGFyLmxlbik7XG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9NTc2Mz1leHQ0X3N3YXBfZXh0ZW50cyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlMSxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy01ODk3LVx0XHR0bXBfZXggPSAqZXgxO1xuZnMvZXh0NC9leHRlbnRzLmM6NTg5ODpcdFx0ZXh0NF9leHRfc3RvcmVfcGJsb2NrKGV4MSwgZXh0NF9leHRfcGJsb2NrKGV4MikpO1xuZnMvZXh0NC9leHRlbnRzLmM6NTg5OTpcdFx0ZXh0NF9leHRfc3RvcmVfcGJsb2NrKGV4MiwgZXh0NF9leHRfcGJsb2NrKFx1MDAyNnRtcF9leCkpO1xuZnMvZXh0NC9leHRlbnRzLmMtNTkwMC1cdFx0ZXgxLVx1MDAzZWVlX2xlbiA9IGNwdV90b19sZTE2KGUyX2xlbik7XG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9NjAyNz1pbnQgZXh0NF9leHRfcmVwbGF5X3VwZGF0ZV9leChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBzdGFydCxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy02MDgwLVx0XHRleHQ0X2V4dF9tYXJrX2luaXRpYWxpemVkKGV4KTtcbmZzL2V4dDQvZXh0ZW50cy5jOjYwODE6XHRleHQ0X2V4dF9zdG9yZV9wYmxvY2soZXgsIHBibGspO1xuZnMvZXh0NC9leHRlbnRzLmMtNjA4Mi1cdGRvd25fd3JpdGUoXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX2RhdGFfc2VtKTtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9OTMxPXN0YXRpYyBpbnQgZXh0NF9mY193cml0ZV9pbm9kZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiAqY3JjKVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy05NjEtXHRcdGV4LVx1MDAzZWVlX2xlbiA9IGNwdV90b19sZTE2KHJhbmdlLVx1MDAzZWxlbik7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6OTYyOlx0XHRleHQ0X2V4dF9zdG9yZV9wYmxvY2soZXgsIHJhbmdlLVx1MDAzZXBibGspO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTk2My1cdFx0aWYgKHJhbmdlLVx1MDAzZXVud3JpdHRlbilcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjE0OD1zdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X2FkZF9yYW5nZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1OCAqdmFsKVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMjAyLVx0XHRcdG5ld2V4LmVlX2Jsb2NrID0gY3B1X3RvX2xlMzIoY3VyKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMjAzOlx0XHRcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMjA0LVx0XHRcdFx0XHUwMDI2bmV3ZXgsIHN0YXJ0X3BibGsgJiM0MzsgY3VyIC0gc3RhcnQpO1xuLS1cbmZzL2V4dDQvaW5saW5lLmM9MTA3ND1zdGF0aWMgaW50IGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfZnNibGtfdCBibG9jayxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTExMzktXHRcdG5ld2V4LmVlX2xlbiA9IGNwdV90b19sZTE2KDEpO1xuZnMvZXh0NC9pbmxpbmUuYzoxMTQwOlx0XHRleHQ0X2V4dF9zdG9yZV9wYmxvY2soXHUwMDI2bmV3ZXgsIGJsb2NrKTtcbmZzL2V4dDQvaW5saW5lLmMtMTE0MS1cdFx0cGF0aCA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgXHUwMDI2bmV3ZXgsIDApO1xuLS1cbmZzL2V4dDQvbWlncmF0ZS5jPTIxPXN0YXRpYyBpbnQgZmluaXNoX3JhbmdlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9taWdyYXRlLmMtMzMtXHRuZXdleHQuZWVfbGVuICAgPSBjcHVfdG9fbGUxNihsYi1cdTAwM2VsYXN0X2Jsb2NrIC0gbGItXHUwMDNlZmlyc3RfYmxvY2sgJiM0MzsgMSk7XG5mcy9leHQ0L21pZ3JhdGUuYzozNDpcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhcdTAwMjZuZXdleHQsIGxiLVx1MDAzZWZpcnN0X3BibG9jayk7XG5mcy9leHQ0L21pZ3JhdGUuYy0zNS1cdC8qIExvY2tpbmcgb25seSBmb3IgY29udmVuaWVuY2Ugc2luY2Ugd2UgYXJlIG9wZXJhdGluZyBvbiB0ZW1wIGlub2RlICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODExCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFRoaXMgRXh0ZW50IEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGJpdCBvZiBjb2RlIGFuZCBpbW1lZGlhdGVseSByZWNvZ25pemUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhbiBgZXh0NF9leHRlbnRgIHN0cnVjdHVyZSwgc3BlY2lmaWNhbGx5IGluaXRpYWxpemluZyBhIG5ldyBvbmUsIGBuZXdleGAuICBJdCBzZWVtcyBsaWtlIHdlJiMzOTtyZSBzZXR0aW5nIHVwIGEgc2luZ2xlLWJsb2NrIGV4dGVudC4gIExldCYjMzk7cyBicmVhayBpdCBkb3duOiBgbmV3ZXguZWVfYmxvY2sgPSBjcHVfdG9fbGUzMigwKTtgIC0gUmlnaHQsIHplcm9pbmcgb3V0IHRoZSBsb2dpY2FsIGJsb2NrIG51bWJlciwgdGhhdCYjMzk7cyBleHBlY3RlZC4gYG5ld2V4LmVlX2xlbiA9IGNwdV90b19sZTE2KDEpO2AgLSBUaGVuIHNldHRpbmcgdGhlIGV4dGVudCBsZW5ndGggdG8gb25lIGJsb2NrOyBhZ2Fpbiwgc3RhbmRhcmQgcHJvY2VkdXJlLiAgV2UgYXJlIG1ha2luZyBpdCBsaXR0bGUgZW5kaWFuLCBvZiBjb3Vyc2UuCgpUaGUga2V5IHBhcnQgaGVyZSBpcyB0aGF0IHdlIGNhbGwgYGV4dDRfZXh0X3N0b3JlX3BibG9jaygmYW1wO25ld2V4LCBibG9jayk7YCAgSSBpbnN0YW50bHkgcmVjYWxsIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyB3aGVyZSB0aGUgKnBoeXNpY2FsKiBibG9jayBudW1iZXIgaXMgYWN0dWFsbHkgc3RvcmVkLiAgYGV4dDRfZXh0X3N0b3JlX3BibG9ja2AgaXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgYGVlX3N0YXJ0X2xvYCBhbmQgYGVlX3N0YXJ0X2hpYC4gU28gbm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzIGhvdyBkb2VzIGl0IHRyYW5zbGF0ZSB0aGUgJiMzOTtibG9jayYjMzk7IHZhcmlhYmxlIGludG8gdGhlIHR3byBmaWVsZHMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGV4YWN0IGRlZmluaXRpb24gb2YgdGhpcyBmdW5jdGlvbiB0byBmdWxseSB1bmRlcnN0YW5kIGhvdyB0aGUgcGh5c2ljYWwgYmxvY2sgYWRkcmVzcyBpcyBzdG9yZWQgaW4gdGhlIGV4dGVudCBoZWFkZXIuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGF0ICYjMzk7YmxvY2smIzM5OyByZXByZXNlbnRzIHRvIHVuZGVyc3RhbmQgdGhlIG1hcHBpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHQ0X2V4dGVudHMuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjQyOlx0ICogZXh0NF9leHRfc3RvcmVfcGJsb2NrOlxuIDI0MzpcdCAqIHN0b3JlcyBhIGxhcmdlIHBoeXNpY2FsIGJsb2NrIG51bWJlciBpbnRvIGFuIGV4dGVudCBzdHJ1Y3QsXG4gMjQ0Olx0ICogYnJlYWtpbmcgaXQgaW50byBwYXJ0c1xuIDI0NTpcdCAqL1xuIDI0NjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X2V4dF9zdG9yZV9wYmxvY2soc3RydWN0IGV4dDRfZXh0ZW50ICpleCxcbiAyNDc6XHRcdFx0XHRcdFx0IGV4dDRfZnNibGtfdCBwYilcbiAyNDg6XHR7XG4gMjQ5Olx0XHRleC1cdTAwM2VlZV9zdGFydF9sbyA9IGNwdV90b19sZTMyKCh1bnNpZ25lZCBsb25nKSAocGIgXHUwMDI2IDB4ZmZmZmZmZmYpKTtcbiAyNTA6XHRcdGV4LVx1MDAzZWVlX3N0YXJ0X2hpID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIGxvbmcpICgocGIgXHUwMDNlXHUwMDNlIDMxKSBcdTAwM2VcdTAwM2UgMSkgXHUwMDI2XG4gMjUxOlx0XHRcdFx0XHQgICAgICAweGZmZmYpO1xuIDI1MjpcdH1cbiAyNTM6XHRcbiAyNTQ6XHQvKlxuIDI1NTpcdCAqIGV4dDRfaWR4X3N0b3JlX3BibG9jazpcbiAyNTY6XHQgKiBzdG9yZXMgYSBsYXJnZSBwaHlzaWNhbCBibG9jayBudW1iZXIgaW50byBhbiBpbmRleCBzdHJ1Y3QsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAyOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NTIzCgkJCQkJCQlvdXRwdXQ6IDQwNgoJCQkJCQkJdGhvdWdodHM6IDU0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBDaGVjazogTm8gVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MgRGV0ZWN0ZWQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkmIzM5O20gbm90aW5nIHRoYXQgYGVlX2Jsb2NrYCwgYGVlX2xlbmAsIGBlZV9zdGFydF9sb2AsIGFuZCBgZWVfc3RhcnRfaGlgIHdpdGhpbiB0aGUgYGV4dDRfZXh0ZW50YCBzdHJ1Y3QgYXJlICpleHBsaWNpdGx5KiBpbml0aWFsaXplZC4gR29vZC4gV2UgaW5pdGlhbGl6ZSBgZXh0NF9hbGxvY2F0aW9uX3JlcXVlc3QgYXI7YCBhbmQgemVybyBpdCBvdXQgaW1tZWRpYXRlbHkgd2l0aCBgbWVtc2V0YC4gVGhpcyBpcyBzdGFuZGFyZCBwcmFjdGljZSwgYW5kIHdoYXQgSSYjMzk7ZCBleHBlY3QuIFNhbWUgd2l0aCB0aGUgYmxvY2sgZGF0YSBidWZmZXIgYGJoLSZndDtiX2RhdGFgIGFuZCB0aGUgaW5saW5lIGRhdGEgYnVmZmVyLiBXZSBlbnN1cmUgdGhleSYjMzk7cmUgZnVsbHkgemVyb2VkLgoKSSYjMzk7bSBzeXN0ZW1hdGljYWxseSBjaGVja2luZyBmb3IgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZXJlJiMzOTtzIG5vIHN0cnVjdCBjb3B5IHRvIHVzZXJzcGFjZSwgbm8gYnJhbmNoaW5nIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgbm8gdW5pbml0aWFsaXplZCBoZWFwIG9yIHN0YWNrIHZhcmlhYmxlcyBiZWluZyB1c2VkLiBUaGlzIGlzIHdoYXQgSSB3YXMgaG9waW5nIHRvIHNlZS4KCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIHRoZSBLQVNBTi9LTVNBTiBpbXBsaWNhdGlvbnMuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbW9kaWZpY2F0aW9ucyB0byBrZXJuZWwgZnMgYnVmZmVycywgZXh0NCBleHRlbnRzLCBpbm9kZXMsIGFuZCBidWZmZXIgaGVhZHMuIFRoZSBhbGxvY2F0ZWQgaGVhcCBidWZmZXJzIChgaV9ibG9ja19idWZgLCBgeGF0dHJfYnVmYCwgYGJ1ZmApIGFyZSBwb3B1bGF0ZWQgdmlhIGBtZW1jcHlgIG9yIGBleHQ0X3JlYWRfaW5saW5lX2RhdGFgLCBzbyB3ZSYjMzk7cmUgbm90IHJlbHlpbmcgb24gdW5pbml0aWFsaXplZCB2YWx1ZXMuIFN0YWNrIHZhcmlhYmxlcyBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBvciB6ZXJvZWQgb3V0LiBUaGUgYnVmZmVyIGhlYWQgZGF0YSBibG9jaywgYGJoLSZndDtiX2RhdGFgLCBpcyBtZW1zZXQgdG8gemVyby4KClRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyB0aGF0IHRoZXJlIGFyZSAqbm8qIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGhlcmUgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBLTVNBTi4gQW55IGlzc3VlcyB3b3VsZCBsaWtlbHkgYmUgcmVsYXRlZCB0byBleHRlbnQgbWFuaXB1bGF0aW9uIGVycm9ycywgYnVmZmVyIG92ZXJydW5zLCByZWZlcmVuY2UgY291bnRpbmcgcHJvYmxlbXMsIG9yIGxvY2tpbmcgaXNzdWVzLCBhbmQgdGhvc2Ugc2hvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBlcnJvciBkZXRlY3RvcnMuCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBsb2dpYy4gVGhlIEtNU0FOIHJ1bGUgaXMgY2xlYXI6IGl0JiMzOTtzIG5lZWRlZCBPTkxZIGlmIHRoZSBwYXRjaCAqaW50cm9kdWNlcyogb3IgbW9kaWZpZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFdlIGhhdmUgdG8gbG9vayBmb3IgY29weSB0byB1c2VyIHdpdGhvdXQgaW5pdCwgY29uZGl0aW9uYWwgbG9naWMgb24gdW5pbml0IHZhcnMsIGNvbXBsZXggdW5pbml0IGRhdGEgc3RydWN0dXJlcyByZWFkIGxhdGVyLCBvciBib3VuZHMgbG9naWMgYWNjZXNzaW5nIHVuaW5pdCBieXRlcy4gR2l2ZW4gdGhhdCBhbGwgaGVhcC9zdGFjayBzdHJ1Y3R1cmVzIGFyZSBpbml0aWFsaXplZC96ZXJvZWQgKmJlZm9yZSogdXNlLCBhbmQgdGhlcmUgYXJlIG5vIGluZm8gbGVha3MsIE5lZWRzS01TQU4gbXVzdCBiZSBgZmFsc2VgLgoKQWxyaWdodCwgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhpcy4gVGltZSB0byBwcmVwYXJlIHRoZSB0b29sIGNhbGwgdG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDI6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2tgIGFuZCBpbnRyb2R1Y2VzIGBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9ja2AgdG8gcmVmYWN0b3IgaG93IGlubGluZSBkYXRhIGlzIGNvbnZlcnRlZCB0byBhIHJlZ3VsYXIgZXh0ZW50IG9yIGJsb2NrIHBvaW50ZXIgaW4gZXh0NC5cblxuQW5hbHlzaXMgb2YgbWVtb3J5IGhhbmRsaW5nOlxuMS4gSGVhcCBidWZmZXJzOlxuICAgLSBgYnVmYCBpcyBwb3B1bGF0ZWQgYnkgYGV4dDRfcmVhZF9pbmxpbmVfZGF0YSgpYCBiZWZvcmUgYmVpbmcgcmVhZC5cbiAgIC0gYGlfYmxvY2tfYnVmYCBhbmQgYHhhdHRyX2J1ZmAgYXJlIGFsbG9jYXRlZCB3aXRoIGBrbWFsbG9jKClgIGFuZCBpbW1lZGlhdGVseSBmdWxseSBpbml0aWFsaXplZCB2aWEgYG1lbWNweSgpYCBmcm9tIGByYXdfaW5vZGUtXHUwMDNlaV9ibG9ja2AgYW5kIGBoZWFkZXJgIHJlc3BlY3RpdmVseS5cbiAgIC0gVGhlIG5ld2x5IGFsbG9jYXRlZCBibG9jayBidWZmZXIgYGJoLVx1MDAzZWJfZGF0YWAgaXMgY2xlYXJlZCB1c2luZyBgbWVtc2V0KGJoLVx1MDAzZWJfZGF0YSwgMCwgaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZSlgIGJlZm9yZSBkYXRhIG9yIGRpcmVjdG9yeSBlbnRyaWVzIGFyZSBjb3BpZWQgaW50byBpdC5cbjIuIFN0YWNrIHN0cnVjdHVyZXM6XG4gICAtIGBzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX3JlcXVlc3QgYXJgIGlzIGNsZWFyZWQgd2l0aCBgbWVtc2V0KFx1MDAyNmFyLCAwLCBzaXplb2YoYXIpKWAuXG4gICAtIGBzdHJ1Y3QgZXh0NF9leHRlbnQgbmV3ZXhgIGhhcyBhbGwgZm91ciBmaWVsZHMgKGBlZV9ibG9ja2AsIGBlZV9sZW5gLCBgZWVfc3RhcnRfbG9gLCBgZWVfc3RhcnRfaGlgKSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLlxuICAgLSBgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCBpc2AgYW5kIGBzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvIGlgIGFyZSBzdGF0aWNhbGx5IGluaXRpYWxpemVkIHdpdGggZGVzaWduYXRlZCBpbml0aWFsaXplcnMuXG4zLiBObyBkYXRhIG9yIHN0cnVjdHVyZSB3aXRoIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbnRyb2wgZmxvdyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLlxuXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIGV4dGVudCB0cmVlIGNvcnJ1cHRpb24sIGxvY2sgb3JkZXIgdmlvbGF0aW9ucywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrYCBhbmQgaW50cm9kdWNlcyBgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2tgIHRvIHJlZmFjdG9yIGhvdyBpbmxpbmUgZGF0YSBpcyBjb252ZXJ0ZWQgdG8gYSByZWd1bGFyIGV4dGVudCBvciBibG9jayBwb2ludGVyIGluIGV4dDQuXG5cbkFuYWx5c2lzIG9mIG1lbW9yeSBoYW5kbGluZzpcbjEuIEhlYXAgYnVmZmVyczpcbiAgIC0gYGJ1ZmAgaXMgcG9wdWxhdGVkIGJ5IGBleHQ0X3JlYWRfaW5saW5lX2RhdGEoKWAgYmVmb3JlIGJlaW5nIHJlYWQuXG4gICAtIGBpX2Jsb2NrX2J1ZmAgYW5kIGB4YXR0cl9idWZgIGFyZSBhbGxvY2F0ZWQgd2l0aCBga21hbGxvYygpYCBhbmQgaW1tZWRpYXRlbHkgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGBtZW1jcHkoKWAgZnJvbSBgcmF3X2lub2RlLVx1MDAzZWlfYmxvY2tgIGFuZCBgaGVhZGVyYCByZXNwZWN0aXZlbHkuXG4gICAtIFRoZSBuZXdseSBhbGxvY2F0ZWQgYmxvY2sgYnVmZmVyIGBiaC1cdTAwM2ViX2RhdGFgIGlzIGNsZWFyZWQgdXNpbmcgYG1lbXNldChiaC1cdTAwM2ViX2RhdGEsIDAsIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUpYCBiZWZvcmUgZGF0YSBvciBkaXJlY3RvcnkgZW50cmllcyBhcmUgY29waWVkIGludG8gaXQuXG4yLiBTdGFjayBzdHJ1Y3R1cmVzOlxuICAgLSBgc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9yZXF1ZXN0IGFyYCBpcyBjbGVhcmVkIHdpdGggYG1lbXNldChcdTAwMjZhciwgMCwgc2l6ZW9mKGFyKSlgLlxuICAgLSBgc3RydWN0IGV4dDRfZXh0ZW50IG5ld2V4YCBoYXMgYWxsIGZvdXIgZmllbGRzIChgZWVfYmxvY2tgLCBgZWVfbGVuYCwgYGVlX3N0YXJ0X2xvYCwgYGVlX3N0YXJ0X2hpYCkgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cbiAgIC0gYHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQgaXNgIGFuZCBgc3RydWN0IGV4dDRfeGF0dHJfaW5mbyBpYCBhcmUgc3RhdGljYWxseSBpbml0aWFsaXplZCB3aXRoIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLlxuMy4gTm8gZGF0YSBvciBzdHJ1Y3R1cmUgd2l0aCB1bmluaXRpYWxpemVkIHBhZGRpbmcgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjb250cm9sIGZsb3cgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy5cblxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyBleHRlbnQgdHJlZSBjb3JydXB0aW9uLCBsb2NrIG9yZGVyIHZpb2xhdGlvbnMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIHNhbml0aXplcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjUzOjAzLjg0MTk1MTQ4NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MjEwODM0MzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFcIixcbiAgICBcImV4dDRfdHJ5X2FkZF9pbmxpbmVfZW50cnlcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrYCBhbmQgaW50cm9kdWNlcyBgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2tgIHRvIHJlZmFjdG9yIGhvdyBpbmxpbmUgZGF0YSBpcyBjb252ZXJ0ZWQgdG8gYSByZWd1bGFyIGV4dGVudCBvciBibG9jayBwb2ludGVyIGluIGV4dDQuXFxuXFxuQW5hbHlzaXMgb2YgbWVtb3J5IGhhbmRsaW5nOlxcbjEuIEhlYXAgYnVmZmVyczpcXG4gICAtIGBidWZgIGlzIHBvcHVsYXRlZCBieSBgZXh0NF9yZWFkX2lubGluZV9kYXRhKClgIGJlZm9yZSBiZWluZyByZWFkLlxcbiAgIC0gYGlfYmxvY2tfYnVmYCBhbmQgYHhhdHRyX2J1ZmAgYXJlIGFsbG9jYXRlZCB3aXRoIGBrbWFsbG9jKClgIGFuZCBpbW1lZGlhdGVseSBmdWxseSBpbml0aWFsaXplZCB2aWEgYG1lbWNweSgpYCBmcm9tIGByYXdfaW5vZGUtXFx1MDAzZWlfYmxvY2tgIGFuZCBgaGVhZGVyYCByZXNwZWN0aXZlbHkuXFxuICAgLSBUaGUgbmV3bHkgYWxsb2NhdGVkIGJsb2NrIGJ1ZmZlciBgYmgtXFx1MDAzZWJfZGF0YWAgaXMgY2xlYXJlZCB1c2luZyBgbWVtc2V0KGJoLVxcdTAwM2ViX2RhdGEsIDAsIGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSlgIGJlZm9yZSBkYXRhIG9yIGRpcmVjdG9yeSBlbnRyaWVzIGFyZSBjb3BpZWQgaW50byBpdC5cXG4yLiBTdGFjayBzdHJ1Y3R1cmVzOlxcbiAgIC0gYHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fcmVxdWVzdCBhcmAgaXMgY2xlYXJlZCB3aXRoIGBtZW1zZXQoXFx1MDAyNmFyLCAwLCBzaXplb2YoYXIpKWAuXFxuICAgLSBgc3RydWN0IGV4dDRfZXh0ZW50IG5ld2V4YCBoYXMgYWxsIGZvdXIgZmllbGRzIChgZWVfYmxvY2tgLCBgZWVfbGVuYCwgYGVlX3N0YXJ0X2xvYCwgYGVlX3N0YXJ0X2hpYCkgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5cXG4gICAtIGBzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9maW5kIGlzYCBhbmQgYHN0cnVjdCBleHQ0X3hhdHRyX2luZm8gaWAgYXJlIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQgd2l0aCBkZXNpZ25hdGVkIGluaXRpYWxpemVycy5cXG4zLiBObyBkYXRhIG9yIHN0cnVjdHVyZSB3aXRoIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbnRyb2wgZmxvdyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLlxcblxcbkFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKHN1Y2ggYXMgZXh0ZW50IHRyZWUgY29ycnVwdGlvbiwgbG9jayBvcmRlciB2aW9sYXRpb25zLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzcykgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBzYW5pdGl6ZXJzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGV4dDQgaW5saW5lIGRhdGEgY29udmVyc2lvbiBsb2dpYyBpbiBmcy9leHQ0L2lubGluZS5jLCByZXBsYWNpbmcgdGhlIGlubGluZSBkYXRhIHJlc3RvcmF0aW9uIGZsb3cgd2l0aCBhIG5ldyBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9jayBmdW5jdGlvbiBhbmQgcmVmYWN0b3JpbmcgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jay4gVGhlc2UgY2hhbmdlcyBhbHRlciBob3cgZXh0NCBjb252ZXJ0cyBpbmxpbmUgZGlyZWN0b3J5L2ZpbGUgZGF0YSBpbnRvIGV4dGVudC9ibG9jayBhbGxvY2F0aW9ucyBhbmQgYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6NTM6MDMuODQxOTU2NDA2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjIyODIwMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzOWZmZjMyNDhmYTdjZDdjYmYyZDQ0YTZjYzU0NDRlYmYxNzdkODM2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDMxIDAyOjUzOjAzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5saW5lLmMgYi9mcy9leHQ0L2lubGluZS5jXFxuaW5kZXggODA0NWU0ZmYyNzBjNy4uOTM5YzZiZjIwYjViNyAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L2lubGluZS5jXFxuKysrIGIvZnMvZXh0NC9pbmxpbmUuY1xcbkBAIC0xNCw2ICsxNCw3IEBAXFxuICNpbmNsdWRlIFxcXCJleHQ0LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ4YXR0ci5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidHJ1bmNhdGUuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImV4dDRfZXh0ZW50cy5oXFxcIlxcbiBcXG4gI2RlZmluZSBFWFQ0X1hBVFRSX1NZU1RFTV9EQVRBXFx0XFxcImRhdGFcXFwiXFxuICNkZWZpbmUgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRVxcdCgoc2l6ZW9mKF9fbGUzMikgKiBFWFQ0X05fQkxPQ0tTKSlcXG5AQCAtMTA3MCwyMSArMTA3MSwxMjUgQEAgc3RhdGljIGludCBleHQ0X3VwZGF0ZV9pbmxpbmVfZGlyKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgZXh0NF9yZXN0b3JlX2lubGluZV9kYXRhKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGV4dDRfaWxvYyAqaWxvYyxcXG4tXFx0XFx0XFx0XFx0ICAgICB2b2lkICpidWYsIGludCBpbmxpbmVfc2l6ZSlcXG4rc3RhdGljIGludCBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2ZzYmxrX3QgYmxvY2ssXFxuK1xcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBsZW4sIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXFxuIHtcXG4tXFx0aW50IHJldDtcXG4rXFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpO1xcbitcXHRzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9maW5kIGlzID0ge1xcbitcXHRcXHQucyA9IHsgLm5vdF9mb3VuZCA9IDAsIH0sXFxuK1xcdH07XFxuK1xcdHN0cnVjdCBleHQ0X3hhdHRyX2luZm8gaSA9IHtcXG4rXFx0XFx0Lm5hbWVfaW5kZXggPSBFWFQ0X1hBVFRSX0lOREVYX1NZU1RFTSxcXG4rXFx0XFx0Lm5hbWUgPSBFWFQ0X1hBVFRSX1NZU1RFTV9EQVRBLFxcbitcXHRcXHQudmFsdWUgPSBOVUxMLFxcbitcXHRcXHQudmFsdWVfbGVuID0gMCxcXG4rXFx0fTtcXG4rXFx0aW50IGVycm9yO1xcbitcXHR2b2lkICppX2Jsb2NrX2J1ZiA9IE5VTEw7XFxuK1xcdHZvaWQgKnhhdHRyX2J1ZiA9IE5VTEw7XFxuK1xcdHZvaWQgKmhlYWRlciA9IE5VTEw7XFxuK1xcdHZvaWQgKnRhaWwgPSBOVUxMO1xcbitcXHRpbnQgeGF0dHJfc2l6ZTtcXG4rXFx0c3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZTtcXG4gXFxuLVxcdHJldCA9IGV4dDRfY3JlYXRlX2lubGluZV9kYXRhKGhhbmRsZSwgaW5vZGUsIGlubGluZV9zaXplKTtcXG4tXFx0aWYgKHJldCkge1xcbi1cXHRcXHRleHQ0X21zZyhpbm9kZS1cXHUwMDNlaV9zYiwgS0VSTl9FTUVSRyxcXG4tXFx0XFx0XFx0XFxcImVycm9yIHJlc3RvcmluZyBpbmxpbmVfZGF0YSBmb3IgaW5vZGUgLS0gcG90ZW50aWFsIGRhdGEgbG9zcyEgKGlub2RlICVsbHUsIGVycm9yICVkKVxcXCIsXFxuLVxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX2lubywgcmV0KTtcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHRpX2Jsb2NrX2J1ZiA9IGttYWxsb2MoRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSwgR0ZQX05PRlMpO1xcbitcXHRpZiAoIWlfYmxvY2tfYnVmKSB7XFxuK1xcdFxcdGVycm9yID0gLUVOT01FTTtcXG4rXFx0XFx0ZG93bl93cml0ZShcXHUwMDI2ZWktXFx1MDAzZWlfZGF0YV9zZW0pO1xcbitcXHRcXHRnb3RvIGVycm9yO1xcbiBcXHR9XFxuLVxcdGV4dDRfd3JpdGVfaW5saW5lX2RhdGEoaW5vZGUsIGlsb2MsIGJ1ZiwgMCwgaW5saW5lX3NpemUpO1xcbi1cXHRleHQ0X3NldF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpO1xcbitcXHRkb3duX3dyaXRlKFxcdTAwMjZlaS1cXHUwMDNlaV9kYXRhX3NlbSk7XFxuK1xcdGVycm9yID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcXHUwMDI2aXMuaWxvYyk7XFxuK1xcdGlmIChlcnJvcilcXG4rXFx0XFx0Z290byBlcnJvcjtcXG4rXFx0cmF3X2lub2RlID0gZXh0NF9yYXdfaW5vZGUoXFx1MDAyNmlzLmlsb2MpO1xcbitcXHRoZWFkZXIgPSBJSERSKGlub2RlLCByYXdfaW5vZGUpO1xcbitcXHR0YWlsID0gSVRBSUwoaW5vZGUsIHJhd19pbm9kZSk7XFxuK1xcdHhhdHRyX3NpemUgPSB0YWlsIC0gaGVhZGVyO1xcbitcXHR4YXR0cl9idWYgPSBrbWFsbG9jKHhhdHRyX3NpemUsIEdGUF9OT0ZTKTtcXG4rXFx0aWYgKCF4YXR0cl9idWYpIHtcXG4rXFx0XFx0ZXJyb3IgPSAtRU5PTUVNO1xcbitcXHRcXHRnb3RvIGVycm9yO1xcbitcXHR9XFxuK1xcdEJVRkZFUl9UUkFDRShpcy5pbG9jLmJoLCBcXFwiZ2V0X3dyaXRlX2FjY2Vzc1xcXCIpO1xcbitcXHRlcnJvciA9IGV4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgaW5vZGUtXFx1MDAzZWlfc2IsIGlzLmlsb2MuYmgsIEVYVDRfSlRSX05PTkUpO1xcbitcXHRpZiAoZXJyb3IpIHtcXG4rXFx0XFx0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIGJsb2NrKTtcXG4rXFx0XFx0ZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTtcXG4rXFx0XFx0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBOVUxMLCBibG9jaywgbGVuLCAwKTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFx0bWVtY3B5KGlfYmxvY2tfYnVmLCAodm9pZCAqKXJhd19pbm9kZS1cXHUwMDNlaV9ibG9jaywgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XFxuK1xcdG1lbXNldCgodm9pZCAqKXJhd19pbm9kZS1cXHUwMDNlaV9ibG9jaywgMCwgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XFxuK1xcdG1lbXNldChlaS1cXHUwMDNlaV9kYXRhLCAwLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcXG4rXFx0bWVtY3B5KHhhdHRyX2J1ZiwgaGVhZGVyLCB4YXR0cl9zaXplKTtcXG4rXFx0aWYgKGV4dDRfaGFzX2ZlYXR1cmVfZXh0ZW50cyhpbm9kZS1cXHUwMDNlaV9zYikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0KFNfSVNESVIoaW5vZGUtXFx1MDAzZWlfbW9kZSkgfHwgU19JU1JFRyhpbm9kZS1cXHUwMDNlaV9tb2RlKSB8fCBTX0lTTE5LKGlub2RlLVxcdTAwM2VpX21vZGUpKSkge1xcbitcXHRcXHRleHQ0X3NldF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpO1xcbitcXHRcXHRleHQ0X2V4dF90cmVlX2luaXQoaGFuZGxlLCBpbm9kZSk7XFxuK1xcdFxcdHN0cnVjdCBleHQ0X2V4dF9wYXRoICpwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgMCwgTlVMTCwgMCk7XFxuK1xcbitcXHRcXHRpZiAoSVNfRVJSKHBhdGgpKSB7XFxuK1xcdFxcdFxcdGVycm9yID0gUFRSX0VSUihwYXRoKTtcXG4rXFx0XFx0XFx0Z290byByZWNvdmVyeTtcXG4rXFx0XFx0fVxcbitcXHRcXHRzdHJ1Y3QgZXh0NF9leHRlbnQgbmV3ZXg7XFxuK1xcbitcXHRcXHRuZXdleC5lZV9ibG9jayA9IGNwdV90b19sZTMyKDApO1xcbitcXHRcXHRuZXdleC5lZV9sZW4gPSBjcHVfdG9fbGUxNigxKTtcXG4rXFx0XFx0ZXh0NF9leHRfc3RvcmVfcGJsb2NrKFxcdTAwMjZuZXdleCwgYmxvY2spO1xcbitcXHRcXHRwYXRoID0gZXh0NF9leHRfaW5zZXJ0X2V4dGVudChoYW5kbGUsIGlub2RlLCBwYXRoLCBcXHUwMDI2bmV3ZXgsIDApO1xcbitcXHRcXHRpZiAoSVNfRVJSKHBhdGgpKSB7XFxuK1xcdFxcdFxcdGVycm9yID0gUFRSX0VSUihwYXRoKTtcXG4rXFx0XFx0XFx0aWYgKGVycm9yID09IC1FRFFVT1QgfHwgZXJyb3IgPT0gLUVOT1NQQylcXG4rXFx0XFx0XFx0XFx0Z290byByZWNvdmVyeTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0ZXh0NF9mcmVlX2V4dF9wYXRoKHBhdGgpO1xcbitcXHRcXHR9XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZGF0YVswXSA9IGNwdV90b19sZTMyKGJsb2NrKTtcXG4rXFx0fVxcbitcXHRlcnJvciA9IGV4dDRfeGF0dHJfaWJvZHlfZmluZChpbm9kZSwgXFx1MDAyNmksIFxcdTAwMjZpcyk7XFxuK1xcdGlmIChlcnJvcilcXG4rXFx0XFx0Z290byByZWNvdmVyeTtcXG4rXFx0aWYgKCFpcy5zLm5vdF9mb3VuZClcXG4rXFx0XFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGUsIGlub2RlLCBcXHUwMDI2aSwgXFx1MDAyNmlzKTtcXG4rcmVjb3Zlcnk6XFxuK1xcdGlmIChlcnJvcikge1xcbitcXHRcXHRleHQ0X2ZvcmdldChoYW5kbGUsIDAsIGlub2RlLCBiaCwgYmxvY2spO1xcbitcXHRcXHRleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpO1xcbitcXHRcXHRleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIGJsb2NrLCBsZW4sIDApO1xcbitcXHRcXHRtZW1jcHkoKHZvaWQgKilyYXdfaW5vZGUtXFx1MDAzZWlfYmxvY2ssIGlfYmxvY2tfYnVmLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcXG4rXFx0XFx0bWVtY3B5KGVpLVxcdTAwM2VpX2RhdGEsIHJhd19pbm9kZS1cXHUwMDNlaV9ibG9jaywgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XFxuK1xcdFxcdG1lbWNweShoZWFkZXIsIHhhdHRyX2J1ZiwgeGF0dHJfc2l6ZSk7XFxuK1xcdFxcdGV4dDRfY2xlYXJfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0ZXh0NF9jbGVhcl9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0lOTElORV9EQVRBKTtcXG4rXFx0XFx0aWYgKFNfSVNESVIoaW5vZGUtXFx1MDAzZWlfbW9kZSkpIHtcXG4rXFx0XFx0XFx0aV9zaXplX3dyaXRlKGlub2RlLCBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemUpO1xcbitcXHRcXHRcXHRFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2Rpc2tzaXplID0gaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmxvY2tzaXplO1xcbitcXHRcXHR9XFxuK1xcdFxcdGdldF9iaChpcy5pbG9jLmJoKTtcXG4rXFx0XFx0ZXJyb3IgPSBleHQ0X21hcmtfaWxvY19kaXJ0eShoYW5kbGUsIGlub2RlLCBcXHUwMDI2aXMuaWxvYyk7XFxuK1xcdFxcdEVYVDRfSShpbm9kZSktXFx1MDAzZWlfaW5saW5lX29mZiA9IDA7XFxuK1xcdFxcdEVYVDRfSShpbm9kZSktXFx1MDAzZWlfaW5saW5lX3NpemUgPSAwO1xcbitcXHRcXHRleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XFxuK1xcdFxcdGJyZWxzZShiaCk7XFxuK1xcdH1cXG4rb3V0OlxcbitcXHRicmVsc2UoaXMuaWxvYy5iaCk7XFxuK1xcdHVwX3dyaXRlKFxcdTAwMjZlaS1cXHUwMDNlaV9kYXRhX3NlbSk7XFxuK1xcdGtmcmVlKGlfYmxvY2tfYnVmKTtcXG4rXFx0a2ZyZWUoeGF0dHJfYnVmKTtcXG4rXFx0cmV0dXJuIGVycm9yO1xcbitlcnJvcjpcXG4rXFx0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIGJsb2NrKTtcXG4rXFx0ZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTtcXG4rXFx0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBOVUxMLCBibG9jaywgbGVuLCAwKTtcXG4rXFx0dXBfd3JpdGUoXFx1MDAyNmVpLVxcdTAwM2VpX2RhdGFfc2VtKTtcXG4rXFx0a2ZyZWUoaV9ibG9ja19idWYpO1xcbitcXHRrZnJlZSh4YXR0cl9idWYpO1xcbitcXHRyZXR1cm4gZXJyb3I7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxcbkBAIC0xMDkzLDkgKzExOTgsMTIgQEAgc3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXFxuIHtcXG4gXFx0aW50IGVycm9yO1xcbiBcXHR2b2lkICpidWYgPSBOVUxMO1xcbi1cXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRhdGFfYmggPSBOVUxMO1xcbi1cXHRzdHJ1Y3QgZXh0NF9tYXBfYmxvY2tzIG1hcDtcXG4rXFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7XFxuIFxcdGludCBpbmxpbmVfc2l6ZTtcXG4rXFx0ZXh0NF9mc2Jsa190IG5ld2Jsb2NrID0gMDtcXG4rXFx0c3RydWN0IGV4dDRfYWxsb2NhdGlvbl9yZXF1ZXN0IGFyO1xcbitcXHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4rXFx0dW5zaWduZWQgaW50IGFsbG9jYXRlZF9ibG9jaztcXG4gXFxuIFxcdGlubGluZV9zaXplID0gZXh0NF9nZXRfaW5saW5lX3NpemUoaW5vZGUpO1xcbiBcXHRidWYgPSBrbWFsbG9jKGlubGluZV9zaXplLCBHRlBfTk9GUyk7XFxuQEAgLTExMjAsNjMgKzEyMjgsNjIgQEAgc3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcbi1cXHRlcnJvciA9IGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlLCBpbm9kZSk7XFxuLVxcdGlmIChlcnJvcilcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcbi1cXHRtYXAubV9sYmxrID0gMDtcXG4tXFx0bWFwLm1fbGVuID0gMTtcXG4tXFx0bWFwLm1fZmxhZ3MgPSAwO1xcbi1cXHRlcnJvciA9IGV4dDRfbWFwX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBcXHUwMDI2bWFwLCBFWFQ0X0dFVF9CTE9DS1NfQ1JFQVRFKTtcXG4rXFx0bWVtc2V0KFxcdTAwMjZhciwgMCwgc2l6ZW9mKGFyKSk7XFxuK1xcdGFyLmlub2RlID0gaW5vZGU7XFxuK1xcdGFyLmxvZ2ljYWwgPSAwO1xcbitcXHRhci5sZW4gPSAxO1xcbitcXHRpZiAoU19JU1JFRyhpbm9kZS1cXHUwMDNlaV9tb2RlKSlcXG4rXFx0XFx0YXIuZmxhZ3MgPSBFWFQ0X01CX0hJTlRfREFUQTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRhci5mbGFncyA9IDA7XFxuK1xcdG5ld2Jsb2NrID0gZXh0NF9tYl9uZXdfYmxvY2tzKGhhbmRsZSwgXFx1MDAyNmFyLCBcXHUwMDI2ZXJyb3IpO1xcbiBcXHRpZiAoZXJyb3IgXFx1MDAzYyAwKVxcbi1cXHRcXHRnb3RvIG91dF9yZXN0b3JlO1xcbi1cXHRpZiAoIShtYXAubV9mbGFncyBcXHUwMDI2IEVYVDRfTUFQX01BUFBFRCkpIHtcXG4tXFx0XFx0ZXJyb3IgPSAtRUlPO1xcbi1cXHRcXHRnb3RvIG91dF9yZXN0b3JlO1xcbi1cXHR9XFxuLVxcbi1cXHRkYXRhX2JoID0gc2JfZ2V0YmxrKGlub2RlLVxcdTAwM2VpX3NiLCBtYXAubV9wYmxrKTtcXG4tXFx0aWYgKCFkYXRhX2JoKSB7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRhbGxvY2F0ZWRfYmxvY2sgPSBFWFQ0X0MyQihzYmksIGFyLmxlbik7XFxuK1xcdGJoID0gc2JfZ2V0YmxrKGlub2RlLVxcdTAwM2VpX3NiLCBuZXdibG9jayk7XFxuK1xcdGlmICghYmgpIHtcXG4gXFx0XFx0ZXJyb3IgPSAtRU5PTUVNO1xcbi1cXHRcXHRnb3RvIG91dF9yZXN0b3JlO1xcbitcXHRcXHRnb3RvIG91dF9iaDtcXG4gXFx0fVxcbiBcXG4tXFx0bG9ja19idWZmZXIoZGF0YV9iaCk7XFxuLVxcdGVycm9yID0gZXh0NF9qb3VybmFsX2dldF9jcmVhdGVfYWNjZXNzKGhhbmRsZSwgaW5vZGUtXFx1MDAzZWlfc2IsIGRhdGFfYmgsXFxuK1xcdGxvY2tfYnVmZmVyKGJoKTtcXG4rXFx0ZXJyb3IgPSBleHQ0X2pvdXJuYWxfZ2V0X2NyZWF0ZV9hY2Nlc3MoaGFuZGxlLCBpbm9kZS1cXHUwMDNlaV9zYiwgYmgsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBFWFQ0X0pUUl9OT05FKTtcXG4gXFx0aWYgKGVycm9yKSB7XFxuLVxcdFxcdHVubG9ja19idWZmZXIoZGF0YV9iaCk7XFxuK1xcdFxcdHVubG9ja19idWZmZXIoYmgpO1xcbiBcXHRcXHRlcnJvciA9IC1FSU87XFxuLVxcdFxcdGdvdG8gb3V0X3Jlc3RvcmU7XFxuK1xcdFxcdGdvdG8gb3V0X2JoO1xcbiBcXHR9XFxuLVxcdG1lbXNldChkYXRhX2JoLVxcdTAwM2ViX2RhdGEsIDAsIGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSk7XFxuK1xcdG1lbXNldChiaC1cXHUwMDNlYl9kYXRhLCAwLCBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemUpO1xcbiBcXG4gXFx0aWYgKCFTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuLVxcdFxcdG1lbWNweShkYXRhX2JoLVxcdTAwM2ViX2RhdGEsIGJ1ZiwgaW5saW5lX3NpemUpO1xcbi1cXHRcXHRzZXRfYnVmZmVyX3VwdG9kYXRlKGRhdGFfYmgpO1xcbi1cXHRcXHR1bmxvY2tfYnVmZmVyKGRhdGFfYmgpO1xcbitcXHRcXHRtZW1jcHkoYmgtXFx1MDAzZWJfZGF0YSwgYnVmLCBpbmxpbmVfc2l6ZSk7XFxuK1xcdFxcdHNldF9idWZmZXJfdXB0b2RhdGUoYmgpO1xcbitcXHRcXHR1bmxvY2tfYnVmZmVyKGJoKTtcXG4gXFx0XFx0ZXJyb3IgPSBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgIGlub2RlLCBkYXRhX2JoKTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgaW5vZGUsIGJoKTtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0dW5sb2NrX2J1ZmZlcihkYXRhX2JoKTtcXG4tXFx0XFx0aW5vZGUtXFx1MDAzZWlfc2l6ZSA9IGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZTtcXG4tXFx0XFx0aV9zaXplX3dyaXRlKGlub2RlLCBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemUpO1xcbi1cXHRcXHRFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2Rpc2tzaXplID0gaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmxvY2tzaXplO1xcbi1cXG4tXFx0XFx0ZXJyb3IgPSBleHQ0X2luaXRfZGlyYmxvY2soaGFuZGxlLCBpbm9kZSwgZGF0YV9iaCxcXG4rXFx0XFx0dW5sb2NrX2J1ZmZlcihiaCk7XFxuK1xcdFxcdGVycm9yID0gZXh0NF9pbml0X2RpcmJsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLFxcbiBcXHRcXHRcXHQgIGxlMzJfdG9fY3B1KCgoc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKilidWYpLVxcdTAwM2Vpbm9kZSksXFxuIFxcdFxcdFxcdCAgYnVmICsgRVhUNF9JTkxJTkVfRE9URE9UX1NJWkUsXFxuIFxcdFxcdFxcdCAgaW5saW5lX3NpemUgLSBFWFQ0X0lOTElORV9ET1RET1RfU0laRSk7XFxuLVxcdFxcdGlmICghZXJyb3IpXFxuLVxcdFxcdFxcdGVycm9yID0gZXh0NF9tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgaW5vZGUpO1xcbiBcXHR9XFxuK291dF9iaDpcXG4rXFx0aWYgKGVycm9yKSB7XFxuK1xcdFxcdGlmIChiaClcXG4rXFx0XFx0XFx0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIG5ld2Jsb2NrKTtcXG4rXFx0XFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpO1xcbiBcXG4tb3V0X3Jlc3RvcmU6XFxuLVxcdGlmIChlcnJvcilcXG4tXFx0XFx0ZXh0NF9yZXN0b3JlX2lubGluZV9kYXRhKGhhbmRsZSwgaW5vZGUsIGlsb2MsIGJ1ZiwgaW5saW5lX3NpemUpO1xcbi1cXG4rXFx0XFx0ZG93bl93cml0ZShcXHUwMDI2ZWktXFx1MDAzZWlfZGF0YV9zZW0pO1xcbitcXHRcXHRleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpO1xcbitcXHRcXHRleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIG5ld2Jsb2NrLCBhbGxvY2F0ZWRfYmxvY2ssIDApO1xcbitcXHRcXHR1cF93cml0ZShcXHUwMDI2ZWktXFx1MDAzZWlfZGF0YV9zZW0pO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRlcnJvciA9IGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrKGhhbmRsZSwgaW5vZGUsXFxuK1xcdFxcdFxcdFxcdG5ld2Jsb2NrLCBhbGxvY2F0ZWRfYmxvY2ssIGJoKTtcXG4rXFx0fVxcbiBvdXQ6XFxuLVxcdGJyZWxzZShkYXRhX2JoKTtcXG4gXFx0a2ZyZWUoYnVmKTtcXG4gXFx0cmV0dXJuIGVycm9yO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjUzOjA0LjIwNDg0ODQ5OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjM1MjgzNTk4MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfY29udmVydF9pbmxpbmVfZGF0YVwiLFxuICAgIFwiZXh0NF90cnlfYWRkX2lubGluZV9lbnRyeVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGV4dDQgaW5saW5lIGRhdGEgY29udmVyc2lvbiBsb2dpYyBpbiBmcy9leHQ0L2lubGluZS5jLCByZXBsYWNpbmcgdGhlIGlubGluZSBkYXRhIHJlc3RvcmF0aW9uIGZsb3cgd2l0aCBhIG5ldyBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9jayBmdW5jdGlvbiBhbmQgcmVmYWN0b3JpbmcgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jay4gVGhlc2UgY2hhbmdlcyBhbHRlciBob3cgZXh0NCBjb252ZXJ0cyBpbmxpbmUgZGlyZWN0b3J5L2ZpbGUgZGF0YSBpbnRvIGV4dGVudC9ibG9jayBhbGxvY2F0aW9ucyBhbmQgYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzlmZmYzMjQ4ZmE3Y2Q3Y2JmMmQ0NGE2Y2M1NDQ0ZWJmMTc3ZDgzNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDAyOjUzOjAzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbmxpbmUuYyBiL2ZzL2V4dDQvaW5saW5lLmNcbmluZGV4IDgwNDVlNGZmMjcwYzcuLjkzOWM2YmYyMGI1YjcgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2lubGluZS5jXG4rKysgYi9mcy9leHQ0L2lubGluZS5jXG5AQCAtMTQsNiArMTQsNyBAQFxuICNpbmNsdWRlIFwiZXh0NC5oXCJcbiAjaW5jbHVkZSBcInhhdHRyLmhcIlxuICNpbmNsdWRlIFwidHJ1bmNhdGUuaFwiXG4rI2luY2x1ZGUgXCJleHQ0X2V4dGVudHMuaFwiXG4gXG4gI2RlZmluZSBFWFQ0X1hBVFRSX1NZU1RFTV9EQVRBXHRcImRhdGFcIlxuICNkZWZpbmUgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRVx0KChzaXplb2YoX19sZTMyKSAqIEVYVDRfTl9CTE9DS1MpKVxuQEAgLTEwNzAsMjEgKzEwNzEsMTI1IEBAIHN0YXRpYyBpbnQgZXh0NF91cGRhdGVfaW5saW5lX2RpcihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBleHQ0X3Jlc3RvcmVfaW5saW5lX2RhdGEoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi1cdFx0XHRcdCAgICAgc3RydWN0IGV4dDRfaWxvYyAqaWxvYyxcbi1cdFx0XHRcdCAgICAgdm9pZCAqYnVmLCBpbnQgaW5saW5lX3NpemUpXG4rc3RhdGljIGludCBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2ZzYmxrX3QgYmxvY2ssXG4rXHRcdFx0XHRcdHVuc2lnbmVkIGludCBsZW4sIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXG4ge1xuLVx0aW50IHJldDtcbitcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gRVhUNF9JKGlub2RlKTtcbitcdHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQgaXMgPSB7XG4rXHRcdC5zID0geyAubm90X2ZvdW5kID0gMCwgfSxcbitcdH07XG4rXHRzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvIGkgPSB7XG4rXHRcdC5uYW1lX2luZGV4ID0gRVhUNF9YQVRUUl9JTkRFWF9TWVNURU0sXG4rXHRcdC5uYW1lID0gRVhUNF9YQVRUUl9TWVNURU1fREFUQSxcbitcdFx0LnZhbHVlID0gTlVMTCxcbitcdFx0LnZhbHVlX2xlbiA9IDAsXG4rXHR9O1xuK1x0aW50IGVycm9yO1xuK1x0dm9pZCAqaV9ibG9ja19idWYgPSBOVUxMO1xuK1x0dm9pZCAqeGF0dHJfYnVmID0gTlVMTDtcbitcdHZvaWQgKmhlYWRlciA9IE5VTEw7XG4rXHR2b2lkICp0YWlsID0gTlVMTDtcbitcdGludCB4YXR0cl9zaXplO1xuK1x0c3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZTtcbiBcbi1cdHJldCA9IGV4dDRfY3JlYXRlX2lubGluZV9kYXRhKGhhbmRsZSwgaW5vZGUsIGlubGluZV9zaXplKTtcbi1cdGlmIChyZXQpIHtcbi1cdFx0ZXh0NF9tc2coaW5vZGUtXHUwMDNlaV9zYiwgS0VSTl9FTUVSRyxcbi1cdFx0XHRcImVycm9yIHJlc3RvcmluZyBpbmxpbmVfZGF0YSBmb3IgaW5vZGUgLS0gcG90ZW50aWFsIGRhdGEgbG9zcyEgKGlub2RlICVsbHUsIGVycm9yICVkKVwiLFxuLVx0XHRcdGlub2RlLVx1MDAzZWlfaW5vLCByZXQpO1xuLVx0XHRyZXR1cm47XG4rXHRpX2Jsb2NrX2J1ZiA9IGttYWxsb2MoRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSwgR0ZQX05PRlMpO1xuK1x0aWYgKCFpX2Jsb2NrX2J1Zikge1xuK1x0XHRlcnJvciA9IC1FTk9NRU07XG4rXHRcdGRvd25fd3JpdGUoXHUwMDI2ZWktXHUwMDNlaV9kYXRhX3NlbSk7XG4rXHRcdGdvdG8gZXJyb3I7XG4gXHR9XG4tXHRleHQ0X3dyaXRlX2lubGluZV9kYXRhKGlub2RlLCBpbG9jLCBidWYsIDAsIGlubGluZV9zaXplKTtcbi1cdGV4dDRfc2V0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XG4rXHRkb3duX3dyaXRlKFx1MDAyNmVpLVx1MDAzZWlfZGF0YV9zZW0pO1xuK1x0ZXJyb3IgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFx1MDAyNmlzLmlsb2MpO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRnb3RvIGVycm9yO1xuK1x0cmF3X2lub2RlID0gZXh0NF9yYXdfaW5vZGUoXHUwMDI2aXMuaWxvYyk7XG4rXHRoZWFkZXIgPSBJSERSKGlub2RlLCByYXdfaW5vZGUpO1xuK1x0dGFpbCA9IElUQUlMKGlub2RlLCByYXdfaW5vZGUpO1xuK1x0eGF0dHJfc2l6ZSA9IHRhaWwgLSBoZWFkZXI7XG4rXHR4YXR0cl9idWYgPSBrbWFsbG9jKHhhdHRyX3NpemUsIEdGUF9OT0ZTKTtcbitcdGlmICgheGF0dHJfYnVmKSB7XG4rXHRcdGVycm9yID0gLUVOT01FTTtcbitcdFx0Z290byBlcnJvcjtcbitcdH1cbitcdEJVRkZFUl9UUkFDRShpcy5pbG9jLmJoLCBcImdldF93cml0ZV9hY2Nlc3NcIik7XG4rXHRlcnJvciA9IGV4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgaW5vZGUtXHUwMDNlaV9zYiwgaXMuaWxvYy5iaCwgRVhUNF9KVFJfTk9ORSk7XG4rXHRpZiAoZXJyb3IpIHtcbitcdFx0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIGJsb2NrKTtcbitcdFx0ZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTtcbitcdFx0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBOVUxMLCBibG9jaywgbGVuLCAwKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXHRtZW1jcHkoaV9ibG9ja19idWYsICh2b2lkICopcmF3X2lub2RlLVx1MDAzZWlfYmxvY2ssIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuK1x0bWVtc2V0KCh2b2lkICopcmF3X2lub2RlLVx1MDAzZWlfYmxvY2ssIDAsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuK1x0bWVtc2V0KGVpLVx1MDAzZWlfZGF0YSwgMCwgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XG4rXHRtZW1jcHkoeGF0dHJfYnVmLCBoZWFkZXIsIHhhdHRyX3NpemUpO1xuK1x0aWYgKGV4dDRfaGFzX2ZlYXR1cmVfZXh0ZW50cyhpbm9kZS1cdTAwM2VpX3NiKSBcdTAwMjZcdTAwMjZcbitcdFx0KFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSB8fCBTX0lTUkVHKGlub2RlLVx1MDAzZWlfbW9kZSkgfHwgU19JU0xOSyhpbm9kZS1cdTAwM2VpX21vZGUpKSkge1xuK1x0XHRleHQ0X3NldF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpO1xuK1x0XHRleHQ0X2V4dF90cmVlX2luaXQoaGFuZGxlLCBpbm9kZSk7XG4rXHRcdHN0cnVjdCBleHQ0X2V4dF9wYXRoICpwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgMCwgTlVMTCwgMCk7XG4rXG4rXHRcdGlmIChJU19FUlIocGF0aCkpIHtcbitcdFx0XHRlcnJvciA9IFBUUl9FUlIocGF0aCk7XG4rXHRcdFx0Z290byByZWNvdmVyeTtcbitcdFx0fVxuK1x0XHRzdHJ1Y3QgZXh0NF9leHRlbnQgbmV3ZXg7XG4rXG4rXHRcdG5ld2V4LmVlX2Jsb2NrID0gY3B1X3RvX2xlMzIoMCk7XG4rXHRcdG5ld2V4LmVlX2xlbiA9IGNwdV90b19sZTE2KDEpO1xuK1x0XHRleHQ0X2V4dF9zdG9yZV9wYmxvY2soXHUwMDI2bmV3ZXgsIGJsb2NrKTtcbitcdFx0cGF0aCA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgXHUwMDI2bmV3ZXgsIDApO1xuK1x0XHRpZiAoSVNfRVJSKHBhdGgpKSB7XG4rXHRcdFx0ZXJyb3IgPSBQVFJfRVJSKHBhdGgpO1xuK1x0XHRcdGlmIChlcnJvciA9PSAtRURRVU9UIHx8IGVycm9yID09IC1FTk9TUEMpXG4rXHRcdFx0XHRnb3RvIHJlY292ZXJ5O1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGV4dDRfZnJlZV9leHRfcGF0aChwYXRoKTtcbitcdFx0fVxuK1x0fSBlbHNlIHtcbitcdFx0RVhUNF9JKGlub2RlKS1cdTAwM2VpX2RhdGFbMF0gPSBjcHVfdG9fbGUzMihibG9jayk7XG4rXHR9XG4rXHRlcnJvciA9IGV4dDRfeGF0dHJfaWJvZHlfZmluZChpbm9kZSwgXHUwMDI2aSwgXHUwMDI2aXMpO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRnb3RvIHJlY292ZXJ5O1xuK1x0aWYgKCFpcy5zLm5vdF9mb3VuZClcbitcdFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGUsIGlub2RlLCBcdTAwMjZpLCBcdTAwMjZpcyk7XG4rcmVjb3Zlcnk6XG4rXHRpZiAoZXJyb3IpIHtcbitcdFx0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIGJsb2NrKTtcbitcdFx0ZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTtcbitcdFx0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBOVUxMLCBibG9jaywgbGVuLCAwKTtcbitcdFx0bWVtY3B5KCh2b2lkICopcmF3X2lub2RlLVx1MDAzZWlfYmxvY2ssIGlfYmxvY2tfYnVmLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcbitcdFx0bWVtY3B5KGVpLVx1MDAzZWlfZGF0YSwgcmF3X2lub2RlLVx1MDAzZWlfYmxvY2ssIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuK1x0XHRtZW1jcHkoaGVhZGVyLCB4YXR0cl9idWYsIHhhdHRyX3NpemUpO1xuK1x0XHRleHQ0X2NsZWFyX2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUyk7XG4rXHR9IGVsc2Uge1xuK1x0XHRleHQ0X2NsZWFyX2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpO1xuK1x0XHRpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4rXHRcdFx0aV9zaXplX3dyaXRlKGlub2RlLCBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplKTtcbitcdFx0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZGlza3NpemUgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplO1xuK1x0XHR9XG4rXHRcdGdldF9iaChpcy5pbG9jLmJoKTtcbitcdFx0ZXJyb3IgPSBleHQ0X21hcmtfaWxvY19kaXJ0eShoYW5kbGUsIGlub2RlLCBcdTAwMjZpcy5pbG9jKTtcbitcdFx0RVhUNF9JKGlub2RlKS1cdTAwM2VpX2lubGluZV9vZmYgPSAwO1xuK1x0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfaW5saW5lX3NpemUgPSAwO1xuK1x0XHRleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XG4rXHRcdGJyZWxzZShiaCk7XG4rXHR9XG4rb3V0OlxuK1x0YnJlbHNlKGlzLmlsb2MuYmgpO1xuK1x0dXBfd3JpdGUoXHUwMDI2ZWktXHUwMDNlaV9kYXRhX3NlbSk7XG4rXHRrZnJlZShpX2Jsb2NrX2J1Zik7XG4rXHRrZnJlZSh4YXR0cl9idWYpO1xuK1x0cmV0dXJuIGVycm9yO1xuK2Vycm9yOlxuK1x0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIGJsb2NrKTtcbitcdGV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7XG4rXHRleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIGJsb2NrLCBsZW4sIDApO1xuK1x0dXBfd3JpdGUoXHUwMDI2ZWktXHUwMDNlaV9kYXRhX3NlbSk7XG4rXHRrZnJlZShpX2Jsb2NrX2J1Zik7XG4rXHRrZnJlZSh4YXR0cl9idWYpO1xuK1x0cmV0dXJuIGVycm9yO1xuIH1cbiBcbiBzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSxcbkBAIC0xMDkzLDkgKzExOTgsMTIgQEAgc3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXG4ge1xuIFx0aW50IGVycm9yO1xuIFx0dm9pZCAqYnVmID0gTlVMTDtcbi1cdHN0cnVjdCBidWZmZXJfaGVhZCAqZGF0YV9iaCA9IE5VTEw7XG4tXHRzdHJ1Y3QgZXh0NF9tYXBfYmxvY2tzIG1hcDtcbitcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMO1xuIFx0aW50IGlubGluZV9zaXplO1xuK1x0ZXh0NF9mc2Jsa190IG5ld2Jsb2NrID0gMDtcbitcdHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fcmVxdWVzdCBhcjtcbitcdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4rXHR1bnNpZ25lZCBpbnQgYWxsb2NhdGVkX2Jsb2NrO1xuIFxuIFx0aW5saW5lX3NpemUgPSBleHQ0X2dldF9pbmxpbmVfc2l6ZShpbm9kZSk7XG4gXHRidWYgPSBrbWFsbG9jKGlubGluZV9zaXplLCBHRlBfTk9GUyk7XG5AQCAtMTEyMCw2MyArMTIyOCw2MiBAQCBzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSxcbiBcdFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdGVycm9yID0gZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGUsIGlub2RlKTtcbi1cdGlmIChlcnJvcilcbi1cdFx0Z290byBvdXQ7XG4tXG4tXHRtYXAubV9sYmxrID0gMDtcbi1cdG1hcC5tX2xlbiA9IDE7XG4tXHRtYXAubV9mbGFncyA9IDA7XG4tXHRlcnJvciA9IGV4dDRfbWFwX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBcdTAwMjZtYXAsIEVYVDRfR0VUX0JMT0NLU19DUkVBVEUpO1xuK1x0bWVtc2V0KFx1MDAyNmFyLCAwLCBzaXplb2YoYXIpKTtcbitcdGFyLmlub2RlID0gaW5vZGU7XG4rXHRhci5sb2dpY2FsID0gMDtcbitcdGFyLmxlbiA9IDE7XG4rXHRpZiAoU19JU1JFRyhpbm9kZS1cdTAwM2VpX21vZGUpKVxuK1x0XHRhci5mbGFncyA9IEVYVDRfTUJfSElOVF9EQVRBO1xuK1x0ZWxzZVxuK1x0XHRhci5mbGFncyA9IDA7XG4rXHRuZXdibG9jayA9IGV4dDRfbWJfbmV3X2Jsb2NrcyhoYW5kbGUsIFx1MDAyNmFyLCBcdTAwMjZlcnJvcik7XG4gXHRpZiAoZXJyb3IgXHUwMDNjIDApXG4tXHRcdGdvdG8gb3V0X3Jlc3RvcmU7XG4tXHRpZiAoIShtYXAubV9mbGFncyBcdTAwMjYgRVhUNF9NQVBfTUFQUEVEKSkge1xuLVx0XHRlcnJvciA9IC1FSU87XG4tXHRcdGdvdG8gb3V0X3Jlc3RvcmU7XG4tXHR9XG4tXG4tXHRkYXRhX2JoID0gc2JfZ2V0YmxrKGlub2RlLVx1MDAzZWlfc2IsIG1hcC5tX3BibGspO1xuLVx0aWYgKCFkYXRhX2JoKSB7XG4rXHRcdGdvdG8gb3V0O1xuK1x0YWxsb2NhdGVkX2Jsb2NrID0gRVhUNF9DMkIoc2JpLCBhci5sZW4pO1xuK1x0YmggPSBzYl9nZXRibGsoaW5vZGUtXHUwMDNlaV9zYiwgbmV3YmxvY2spO1xuK1x0aWYgKCFiaCkge1xuIFx0XHRlcnJvciA9IC1FTk9NRU07XG4tXHRcdGdvdG8gb3V0X3Jlc3RvcmU7XG4rXHRcdGdvdG8gb3V0X2JoO1xuIFx0fVxuIFxuLVx0bG9ja19idWZmZXIoZGF0YV9iaCk7XG4tXHRlcnJvciA9IGV4dDRfam91cm5hbF9nZXRfY3JlYXRlX2FjY2VzcyhoYW5kbGUsIGlub2RlLVx1MDAzZWlfc2IsIGRhdGFfYmgsXG4rXHRsb2NrX2J1ZmZlcihiaCk7XG4rXHRlcnJvciA9IGV4dDRfam91cm5hbF9nZXRfY3JlYXRlX2FjY2VzcyhoYW5kbGUsIGlub2RlLVx1MDAzZWlfc2IsIGJoLFxuIFx0XHRcdFx0XHQgICAgICAgRVhUNF9KVFJfTk9ORSk7XG4gXHRpZiAoZXJyb3IpIHtcbi1cdFx0dW5sb2NrX2J1ZmZlcihkYXRhX2JoKTtcbitcdFx0dW5sb2NrX2J1ZmZlcihiaCk7XG4gXHRcdGVycm9yID0gLUVJTztcbi1cdFx0Z290byBvdXRfcmVzdG9yZTtcbitcdFx0Z290byBvdXRfYmg7XG4gXHR9XG4tXHRtZW1zZXQoZGF0YV9iaC1cdTAwM2ViX2RhdGEsIDAsIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUpO1xuK1x0bWVtc2V0KGJoLVx1MDAzZWJfZGF0YSwgMCwgaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZSk7XG4gXG4gXHRpZiAoIVNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuLVx0XHRtZW1jcHkoZGF0YV9iaC1cdTAwM2ViX2RhdGEsIGJ1ZiwgaW5saW5lX3NpemUpO1xuLVx0XHRzZXRfYnVmZmVyX3VwdG9kYXRlKGRhdGFfYmgpO1xuLVx0XHR1bmxvY2tfYnVmZmVyKGRhdGFfYmgpO1xuK1x0XHRtZW1jcHkoYmgtXHUwMDNlYl9kYXRhLCBidWYsIGlubGluZV9zaXplKTtcbitcdFx0c2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7XG4rXHRcdHVubG9ja19idWZmZXIoYmgpO1xuIFx0XHRlcnJvciA9IGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSxcbi1cdFx0XHRcdFx0XHQgICBpbm9kZSwgZGF0YV9iaCk7XG4rXHRcdFx0XHRcdFx0ICAgaW5vZGUsIGJoKTtcbiBcdH0gZWxzZSB7XG4tXHRcdHVubG9ja19idWZmZXIoZGF0YV9iaCk7XG4tXHRcdGlub2RlLVx1MDAzZWlfc2l6ZSA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemU7XG4tXHRcdGlfc2l6ZV93cml0ZShpbm9kZSwgaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZSk7XG4tXHRcdEVYVDRfSShpbm9kZSktXHUwMDNlaV9kaXNrc2l6ZSA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemU7XG4tXG4tXHRcdGVycm9yID0gZXh0NF9pbml0X2RpcmJsb2NrKGhhbmRsZSwgaW5vZGUsIGRhdGFfYmgsXG4rXHRcdHVubG9ja19idWZmZXIoYmgpO1xuK1x0XHRlcnJvciA9IGV4dDRfaW5pdF9kaXJibG9jayhoYW5kbGUsIGlub2RlLCBiaCxcbiBcdFx0XHQgIGxlMzJfdG9fY3B1KCgoc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKilidWYpLVx1MDAzZWlub2RlKSxcbiBcdFx0XHQgIGJ1ZiArIEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFLFxuIFx0XHRcdCAgaW5saW5lX3NpemUgLSBFWFQ0X0lOTElORV9ET1RET1RfU0laRSk7XG4tXHRcdGlmICghZXJyb3IpXG4tXHRcdFx0ZXJyb3IgPSBleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7XG4gXHR9XG4rb3V0X2JoOlxuK1x0aWYgKGVycm9yKSB7XG4rXHRcdGlmIChiaClcbitcdFx0XHRleHQ0X2ZvcmdldChoYW5kbGUsIDAsIGlub2RlLCBiaCwgbmV3YmxvY2spO1xuK1x0XHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7XG4gXG4tb3V0X3Jlc3RvcmU6XG4tXHRpZiAoZXJyb3IpXG4tXHRcdGV4dDRfcmVzdG9yZV9pbmxpbmVfZGF0YShoYW5kbGUsIGlub2RlLCBpbG9jLCBidWYsIGlubGluZV9zaXplKTtcbi1cbitcdFx0ZG93bl93cml0ZShcdTAwMjZlaS1cdTAwM2VpX2RhdGFfc2VtKTtcbitcdFx0ZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTtcbitcdFx0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBOVUxMLCBuZXdibG9jaywgYWxsb2NhdGVkX2Jsb2NrLCAwKTtcbitcdFx0dXBfd3JpdGUoXHUwMDI2ZWktXHUwMDNlaV9kYXRhX3NlbSk7XG4rXHR9IGVsc2Uge1xuK1x0XHRlcnJvciA9IGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrKGhhbmRsZSwgaW5vZGUsXG4rXHRcdFx0XHRuZXdibG9jaywgYWxsb2NhdGVkX2Jsb2NrLCBiaCk7XG4rXHR9XG4gb3V0OlxuLVx0YnJlbHNlKGRhdGFfYmgpO1xuIFx0a2ZyZWUoYnVmKTtcbiBcdHJldHVybiBlcnJvcjtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjo1MzowNC4yMDQ4NDk2NTlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzg2MTEwNjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgZXh0NCBJbmxpbmUgRGF0YSBDb252ZXJzaW9uIFBhdGNoKipcblxuT2theSwgc28gdGhlIHBhdGNoIGlzIHJpZ2h0IGluIGBmcy9leHQ0L2lubGluZS5jYC4gTGV0J3MgZGlnIGluLiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIHRocnVzdCBpcyByZXdyaXRpbmcgcGFydHMgb2YgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2tgLiBUaGV5J3JlIGFsc28gcmVwbGFjaW5nIGBleHQ0X3Jlc3RvcmVfaW5saW5lX2RhdGFgIHdpdGggYGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrYC4gVGhpcyBpbnN0YW50bHkgc2NyZWFtcyBcImlubGluZSBkYXRhIGNvbnZlcnNpb24gaW4gZXh0NC5cIiBXZSdyZSB0YWxraW5nIGNvcmUgZmlsZXN5c3RlbSBsb2dpYyBoZXJlLCB0aGUgc3R1ZmYgdGhhdCBraWNrcyBpbiB3aGVuIGEgZmlsZSdzIGlubGluZSBkYXRhIG5lZWRzIHRvIGJlIHNoaWZ0ZWQgdG8gYSBtb3JlIHRyYWRpdGlvbmFsIGV4dGVudC9ibG9jay1iYXNlZCByZXByZXNlbnRhdGlvbiBiZWNhdXNlIGl0J3MgZ3Jvd24gdG9vIGxhcmdlIG9yIHNvbWUgb3RoZXIgY29uZGl0aW9uIHRyaWdnZXJzIHRoZSBjaGFuZ2UuXG5cbk15IG5leHQgc3RlcCwgYW5kIHRoaXMgaXMgY3J1Y2lhbCwgaXMgdG8gY2hlY2sgdGhlIGNhbGxlcnMgb2YgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2tgLCBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhYCwgYW5kIGVzc2VudGlhbGx5IGFueSBmdW5jdGlvbiBkZWFsaW5nIHdpdGggaW5saW5lIGRhdGEgaW4gZXh0NC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBjaGFuZ2UgaXMgaGFwcGVuaW5nIGFuZCB0aGUgaW1wYWN0IGl0IGNvdWxkIGhhdmUuIEkgd2FudCB0byBzZWUgdGhpcyB3aXRoaW4gdGhlIGxhcmdlciBwaWN0dXJlIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIGhvdyBpdCBhZmZlY3RzIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MDMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjo1MzowNy45OTA5NjI3NjVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5MzUyODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9jcnlwdG8uYz0xMzI9c3RhdGljIGludCBleHQ0X3NldF9jb250ZXh0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHZvaWQgKmN0eCwgc2l6ZV90IGxlbixcXG4tLVxcbmZzL2V4dDQvY3J5cHRvLmMtMTUyLVxcbmZzL2V4dDQvY3J5cHRvLmM6MTUzOlxcdHJlcyA9IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YShpbm9kZSk7XFxuZnMvZXh0NC9jcnlwdG8uYy0xNTQtXFx0aWYgKHJlcylcXG4tLVxcbmZzL2V4dDQvZXh0NC5oPTM3ODQ9ZXh0ZXJuIGludCBleHQ0X2lubGluZV9kYXRhX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCAqaGFzX2lubGluZSk7XFxuZnMvZXh0NC9leHQ0LmgtMzc4NS1cXG5mcy9leHQ0L2V4dDQuaDozNzg2OmV4dGVybiBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbmZzL2V4dDQvZXh0NC5oLTM3ODctXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz00ODU0PWxvbmcgZXh0NF9mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNDg4My1cXHRpbm9kZV9sb2NrKGlub2RlKTtcXG5mcy9leHQ0L2V4dGVudHMuYzo0ODg0OlxcdHJldCA9IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YShpbm9kZSk7XFxuZnMvZXh0NC9leHRlbnRzLmMtNDg4NS1cXHRpZiAocmV0KVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYz01NDY9aW50IGV4dDRfcmVhZHBhZ2VfaW5saW5lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTU3Mi1cXG5mcy9leHQ0L2lubGluZS5jOjU3MzpzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV90b19leHRlbnQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuZnMvZXh0NC9pbmxpbmUuYy01NzQtXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9Njk3PWludCBleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTcyOC1cXHRcXHRcXHQvKiBSZXRyeSBpbnNpZGUgKi9cXG5mcy9leHQ0L2lubGluZS5jOjcyOTpcXHRcXHRcXHRyZXR1cm4gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudChtYXBwaW5nLCBpbm9kZSk7XFxuZnMvZXh0NC9pbmxpbmUuYy03MzAtXFx0XFx0fVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYz03ODQ9aW50IGV4dDRfdHJ5X3RvX3dyaXRlX2lubGluZV9kYXRhKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy03ODktXFx0aWYgKHBvcyArIGxlbiBcXHUwMDNlIGV4dDRfZ2V0X21heF9pbmxpbmVfc2l6ZShpbm9kZSkpXFxuZnMvZXh0NC9pbmxpbmUuYzo3OTA6XFx0XFx0cmV0dXJuIGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV90b19leHRlbnQobWFwcGluZywgaW5vZGUpO1xcbmZzL2V4dDQvaW5saW5lLmMtNzkxLVxcdHJldHVybiBleHQ0X2dlbmVyaWNfd3JpdGVfaW5saW5lX2RhdGEobWFwcGluZywgaW5vZGUsIHBvcywgbGVuLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYz0xMDc0PXN0YXRpYyBpbnQgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9mc2Jsa190IGJsb2NrLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xMTk0LVxcbmZzL2V4dDQvaW5saW5lLmM6MTE5NTpzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSxcXG5mcy9leHQ0L2lubGluZS5jLTExOTYtXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9MTI5Nj1pbnQgZXh0NF90cnlfYWRkX2lubGluZV9lbnRyeShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgZXh0NF9maWxlbmFtZSAqZm5hbWUsXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTEzNDgtXFx0ICovXFxuZnMvZXh0NC9pbmxpbmUuYzoxMzQ5OlxcdHJldCA9IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlLCBkaXIsIFxcdTAwMjZpbG9jKTtcXG5mcy9leHQ0L2lubGluZS5jLTEzNTAtXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTE5NTE9aW50IGV4dDRfaW5saW5lX2RhdGFfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50ICpoYXNfaW5saW5lKVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0yMDYyLVxcbmZzL2V4dDQvaW5saW5lLmM6MjA2MzppbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvZXh0NC9pbmxpbmUuYy0yMDY0LXtcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMjEwMC1cXHRpZiAoZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKVxcbmZzL2V4dDQvaW5saW5lLmM6MjEwMTpcXHRcXHRlcnJvciA9IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlLCBpbm9kZSwgXFx1MDAyNmlsb2MpO1xcbmZzL2V4dDQvaW5saW5lLmMtMjEwMi1cXHRleHQ0X3dyaXRlX3VubG9ja194YXR0cihpbm9kZSwgXFx1MDAyNm5vX2V4cGFuZCk7XFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9NTkzND1pbnQgZXh0NF9zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNjAzMS1cXHRcXHQgICAgYXR0ci1cXHUwMDNlaWFfc2l6ZSBcXHUwMDNlIEVYVDRfSShpbm9kZSktXFx1MDAzZWlfaW5saW5lX3NpemUpIHtcXG5mcy9leHQ0L2lub2RlLmM6NjAzMjpcXHRcXHRcXHRlcnJvciA9IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YShpbm9kZSk7XFxuZnMvZXh0NC9pbm9kZS5jLTYwMzMtXFx0XFx0XFx0aWYgKGVycm9yKVxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTY3ODc9dm1fZmF1bHRfdCBleHQ0X3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy02ODA4LVxcbmZzL2V4dDQvaW5vZGUuYzo2ODA5OlxcdGVyciA9IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YShpbm9kZSk7XFxuZnMvZXh0NC9pbm9kZS5jLTY4MTAtXFx0aWYgKGVycilcXG4tLVxcbmZzL2V4dDQvdmVyaXR5LmM9MTAyPXN0YXRpYyBpbnQgZXh0NF9iZWdpbl9lbmFibGVfdmVyaXR5KHN0cnVjdCBmaWxlICpmaWxwKVxcbi0tXFxuZnMvZXh0NC92ZXJpdHkuYy0xMjgtXFxuZnMvZXh0NC92ZXJpdHkuYzoxMjk6XFx0ZXJyID0gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKGlub2RlKTtcXG5mcy9leHQ0L3Zlcml0eS5jLTEzMC1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjo1MzowOC4wMzY5MDMwMTJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzQ2MjAxMTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgZXh0NCBJbmxpbmUgRGF0YSBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIGxldCdzIGRpdmUgc3RyYWlnaHQgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgZm9yIGV4dDQgYW5kLCBzcGVjaWZpY2FsbHksIGhvdyBpdCBoYW5kbGVzIGlubGluZSBkYXRhLiBUaW1lIHRvIHB1bGwgdXAgYGZzL2V4dDQvS2NvbmZpZ2AuIEkga25vdyB0aGUgYmFzaWNzLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoZSBleGFjdCBkZXBlbmRlbmNpZXMgYW5kIGFueSBwb3RlbnRpYWxseSB0cmlja3kgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIGlubGluZSBkYXRhIHN1cHBvcnQgYW5kIG90aGVyIGV4dDQgZmVhdHVyZXMuIEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBjcml0aWNhbCwgcGFydGljdWxhcmx5IGFueSBzdWJ0bGUgaW50ZXJwbGF5IHdpdGggZmVhdHVyZXMgbGlrZSBxdW90YXMsIGVuY3J5cHRpb24sIG9yIGpvdXJuYWwgc2V0dGluZ3MuIEl04oCZcyBhbHdheXMgYmVzdCB0byBiZSB0aG9yb3VnaCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBjb3JlIGZpbGVzeXN0ZW0gY29tcG9uZW50cy4gVGhpcyBpcyBqdXN0IGEgcXVpY2sgY2hlY2sgdG8gZW5zdXJlIEkgaGF2ZSBhIGNvbXBsZXRlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczOTcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjo1MzoxMC43ODMxMDU5NjhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI0OTE3MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0VYVDRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0Ly5rdW5pdGNvbmZpZz0xPUNPTkZJR19LVU5JVD15XFxuZnMvZXh0NC8ua3VuaXRjb25maWc6MjpDT05GSUdfRVhUNF9GUz15XFxuZnMvZXh0NC8ua3VuaXRjb25maWc6MzpDT05GSUdfRVhUNF9LVU5JVF9URVNUUz15XFxuLS1cXG5mcy9leHQ0L01ha2VmaWxlLTUtXFxuZnMvZXh0NC9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19FWFQ0X0ZTKSArPSBleHQ0Lm9cXG5mcy9leHQ0L01ha2VmaWxlLTctXFxuZnMvZXh0NC9NYWtlZmlsZT04PWV4dDQteVxcdDo9IGJhbGxvYy5vIGJpdG1hcC5vIGJsb2NrX3ZhbGlkaXR5Lm8gZGlyLm8gZXh0NF9qYmQyLm8gZXh0ZW50cy5vIFxcXFxcXG4tLVxcbmZzL2V4dDQvTWFrZWZpbGUtMTQtXFxuZnMvZXh0NC9NYWtlZmlsZToxNTpleHQ0LSQoQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMKVxcdCs9IGFjbC5vXFxuZnMvZXh0NC9NYWtlZmlsZToxNjpleHQ0LSQoQ09ORklHX0VYVDRfRlNfU0VDVVJJVFkpXFx0XFx0Kz0geGF0dHJfc2VjdXJpdHkub1xcbmZzL2V4dDQvTWFrZWZpbGUtMTctZXh0NC10ZXN0LW9ianNcXHRcXHRcXHRcXHQrPSBpbm9kZS10ZXN0Lm8gbWJhbGxvYy10ZXN0Lm8gXFxcXFxcbmZzL2V4dDQvTWFrZWZpbGUtMTgtXFx0XFx0XFx0XFx0XFx0ICAgZXh0ZW50cy10ZXN0Lm8gaGFzaC10ZXN0Lm9cXG5mcy9leHQ0L01ha2VmaWxlOjE5Om9iai0kKENPTkZJR19FWFQ0X0tVTklUX1RFU1RTKVxcdFxcdCs9IGV4dDQtdGVzdC5vXFxuZnMvZXh0NC9NYWtlZmlsZS0yMC1leHQ0LSQoQ09ORklHX0ZTX1ZFUklUWSlcXHRcXHQrPSB2ZXJpdHkub1xcbi0tXFxuZnMvZXh0NC9hY2wuaD0zOT1zdGF0aWMgaW5saW5lIGludCBleHQ0X2FjbF9jb3VudChzaXplX3Qgc2l6ZSlcXG4tLVxcbmZzL2V4dDQvYWNsLmgtNTQtXFxuZnMvZXh0NC9hY2wuaDo1NTojaWZkZWYgQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMXFxuZnMvZXh0NC9hY2wuaC01Ni1cXG4tLVxcbmZzL2V4dDQvYWNsLmg9NjE9ZXh0ZXJuIGludCBleHQ0X2luaXRfYWNsKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5vZGUgKik7XFxuZnMvZXh0NC9hY2wuaC02Mi1cXG5mcy9leHQ0L2FjbC5oOjYzOiNlbHNlICAvKiBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0wgKi9cXG5mcy9leHQ0L2FjbC5oLTY0LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC5oXFx1MDAzZVxcbi0tXFxuZnMvZXh0NC9hY2wuaD02OT1leHQ0X2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyKVxcbi0tXFxuZnMvZXh0NC9hY2wuaC03Mi19XFxuZnMvZXh0NC9hY2wuaDo3MzojZW5kaWYgIC8qIENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTCAqL1xcbmZzL2V4dDQvYWNsLmgtNzQtXFxuLS1cXG5mcy9leHQ0L2V4dDQuaC05MS0gKi9cXG5mcy9leHQ0L2V4dDQuaDo5MjojaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcXG5mcy9leHQ0L2V4dDQuaC05My0jZGVmaW5lIGV4dF9kZWJ1Zyhpbm8sIGZtdCwgLi4uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmZzL2V4dDQvZXh0NC5oPTE1ODY9c3RydWN0IGV4dDRfc2JfaW5mbyB7XFxuLS1cXG5mcy9leHQ0L2V4dDQuaC0xNzk1LVxcdHU2NCBzX2RheF9wYXJ0X29mZjtcXG5mcy9leHQ0L2V4dDQuaDoxNzk2OiNpZmRlZiBDT05GSUdfRVhUNF9ERUJVR1xcbmZzL2V4dDQvZXh0NC5oLTE3OTctXFx0dW5zaWduZWQgbG9uZyBzX3NpbXVsYXRlX2ZhaWw7XFxuLS1cXG5mcy9leHQ0L2V4dDQuaC0xODU4LVxcdHRpZF90IHNfZmNfaW5lbGlnaWJsZV90aWQ7XFxuZnMvZXh0NC9leHQ0Lmg6MTg1OTojaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcXG5mcy9leHQ0L2V4dDQuaC0xODYwLVxcdGludCBzX2ZjX2RlYnVnX21heF9yZXBsYXk7XFxuLS1cXG5mcy9leHQ0L2V4dDQuaD0xOTgzPXN0YXRpYyBpbmxpbmUgYm9vbCBleHQ0X3NpbXVsYXRlX2ZhaWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTE5ODUte1xcbmZzL2V4dDQvZXh0NC5oOjE5ODY6I2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXFxuZnMvZXh0NC9leHQ0LmgtMTk4Ny1cXHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKHNiKTtcXG4tLVxcbmZzL2V4dDQvZXh0NC5oPTQwMzE9ZXh0ZXJuIGludCBleHQ0X2Jsb2NrX3dyaXRlX2JlZ2luKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5mcy9leHQ0L2V4dDQuaC00MDM0LVxcbmZzL2V4dDQvZXh0NC5oOjQwMzU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0VYVDRfS1VOSVRfVEVTVFMpXFxuZnMvZXh0NC9leHQ0LmgtNDAzNi0jZGVmaW5lIEVYUE9SVF9TWU1CT0xfRk9SX0VYVDRfVEVTVChzeW0pIFxcXFxcXG4tLVxcbmZzL2V4dDQvZXh0NF9leHRlbnRzLmg9MjcwPWV4dGVybiBpbnQgZXh0NF9leHRfemVyb291dChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF9leHRlbnQgKmV4KTtcXG5mcy9leHQ0L2V4dDRfZXh0ZW50cy5oOjI3MTojaWYgSVNfRU5BQkxFRChDT05GSUdfRVhUNF9LVU5JVF9URVNUUylcXG5mcy9leHQ0L2V4dDRfZXh0ZW50cy5oLTI3Mi1leHRlcm4gaW50IGV4dDRfZXh0X3NwYWNlX3Jvb3RfaWR4X3Rlc3Qoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGNoZWNrKTtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTYyMjc9aW50IGV4dDRfZXh0X2NsZWFyX2JiKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy02Mjc4LVxcbmZzL2V4dDQvZXh0ZW50cy5jOjYyNzk6I2lmIElTX0VOQUJMRUQoQ09ORklHX0VYVDRfS1VOSVRfVEVTVFMpXFxuZnMvZXh0NC9leHRlbnRzLmMtNjI4MC1pbnQgZXh0NF9leHRfc3BhY2Vfcm9vdF9pZHhfdGVzdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgY2hlY2spXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjU4MT1zdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5KGpvdXJuYWxfdCAqam91cm5hbCwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjA2LVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjA3OiNpZmRlZiBDT05GSUdfRVhUNF9ERUJVR1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjA4LVxcdGlmIChzYmktXFx1MDAzZXNfZmNfZGVidWdfbWF4X3JlcGxheSBcXHUwMDI2XFx1MDAyNiBvZmYgXFx1MDAzZT0gc2JpLVxcdTAwM2VzX2ZjX2RlYnVnX21heF9yZXBsYXkpIHtcXG4tLVxcbmZzL2V4dDQvaGFzaC5jPTMxND1pbnQgZXh0NGZzX2Rpcmhhc2goY29uc3Qgc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4sXFxuLS1cXG5mcy9leHQ0L2hhc2guYy0zNDQtXFxuZnMvZXh0NC9oYXNoLmM6MzQ1OiNpZiBJU19FTkFCTEVEKENPTkZJR19FWFQ0X0tVTklUX1RFU1RTKVxcbmZzL2V4dDQvaGFzaC5jLTM0Ni1FWFBPUlRfU1lNQk9MX0ZPUl9FWFQ0X1RFU1QoZXh0NGZzX2Rpcmhhc2gpO1xcbi0tXFxuZnMvZXh0NC9pYWxsb2MuYz04NzY9c3RhdGljIGludCBleHQ0X3hhdHRyX2NyZWRpdHNfZm9yX25ld19pbm9kZShzdHJ1Y3QgaW5vZGUgKmRpciwgbW9kZV90IG1vZGUsXFxuLS1cXG5mcy9leHQ0L2lhbGxvYy5jLTg4MC1cXHRpbnQgbmJsb2NrcyA9IDA7XFxuZnMvZXh0NC9pYWxsb2MuYzo4ODE6I2lmZGVmIENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTFxcbmZzL2V4dDQvaWFsbG9jLmMtODgyLVxcdHN0cnVjdCBwb3NpeF9hY2wgKnAgPSBnZXRfaW5vZGVfYWNsKGRpciwgQUNMX1RZUEVfREVGQVVMVCk7XFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9NDEyPWludCBleHQ0X2lzc3VlX3plcm9vdXQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgbGJsaywgZXh0NF9mc2Jsa190IHBibGssXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNDM2LSAqL1xcbmZzL2V4dDQvaW5vZGUuYzo0Mzc6I2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXFxuZnMvZXh0NC9pbm9kZS5jLTQzOC12b2lkIGV4dDRfY2hlY2tfbWFwX2V4dGVudHNfZW52KHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYz01NzI4PXN0YXRpYyB2b2lkIGV4dDRfbWJfcGFfcHV0X2ZyZWUoc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYylcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jLTU3NDMtXFxuZnMvZXh0NC9tYmFsbG9jLmM6NTc0NDojaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcXG5mcy9leHQ0L21iYWxsb2MuYy01NzQ1LXN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X21iX3Nob3dfcGEoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTcxMjk9ZXh0NF9tYmFsbG9jX3F1ZXJ5X3JhbmdlKFxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmMtNzE4NC1cXG5mcy9leHQ0L21iYWxsb2MuYzo3MTg1OiNpZiBJU19FTkFCTEVEKENPTkZJR19FWFQ0X0tVTklUX1RFU1RTKVxcbmZzL2V4dDQvbWJhbGxvYy5jLTcxODYtdm9pZCBtYl9jbGVhcl9iaXRzX3Rlc3Qodm9pZCAqYm0sIGludCBjdXIsIGludCBsZW4pXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuaC0yOC0gKi9cXG5mcy9leHQ0L21iYWxsb2MuaDoyOTojaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcXG5mcy9leHQ0L21iYWxsb2MuaC0zMC0jZGVmaW5lIG1iX2RlYnVnKHNiLCBmbXQsIC4uLilcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuaD0yNzM9ZXh0ZXJuIGludCBleHQ0X21iX21hcmtfY29udGV4dChoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvZXh0NC9tYmFsbG9jLmgtMjc3LVxcdFxcdGV4dDRfZ3JwYmxrX3QgKnJldF9jaGFuZ2VkKTtcXG5mcy9leHQ0L21iYWxsb2MuaDoyNzg6I2lmIElTX0VOQUJMRUQoQ09ORklHX0VYVDRfS1VOSVRfVEVTVFMpXFxuZnMvZXh0NC9tYmFsbG9jLmgtMjc5LWV4dGVybiB2b2lkIG1iX2NsZWFyX2JpdHNfdGVzdCh2b2lkICpibSwgaW50IGN1ciwgaW50IGxlbik7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9MTI1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIGV4dDRfY29udGV4dF9vcHMgPSB7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTMyLVxcbmZzL2V4dDQvc3VwZXIuYzoxMzM6I2lmICFkZWZpbmVkKENPTkZJR19FWFQyX0ZTKSBcXHUwMDI2XFx1MDAyNiAhZGVmaW5lZChDT05GSUdfRVhUMl9GU19NT0RVTEUpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0VYVDRfVVNFX0ZPUl9FWFQyKVxcbmZzL2V4dDQvc3VwZXIuYy0xMzQtc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGV4dDJfZnNfdHlwZSA9IHtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz0xNjkyPWVudW0ge1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTE3MTUtXFx0T3B0X2Vycm9ycywgT3B0X2RhdGEsIE9wdF9kYXRhX2VyciwgT3B0X2pxZm10LCBPcHRfZGF4X3R5cGUsXFxuZnMvZXh0NC9zdXBlci5jOjE3MTY6I2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXFxuZnMvZXh0NC9zdXBlci5jLTE3MTctXFx0T3B0X2ZjX2RlYnVnX21heF9yZXBsYXksIE9wdF9mY19kZWJ1Z19mb3JjZVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTE3NjI9c3RhdGljIGNvbnN0IHN0cnVjdCBmc19wYXJhbWV0ZXJfc3BlYyBleHQ0X3BhcmFtX3NwZWNzW10gPSB7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTgzNS1cXHRmc3BhcmFtX2ZsYWdcXHQoXFxcIm5vaW5pdF9pdGFibGVcXFwiLFxcdE9wdF9ub2luaXRfaXRhYmxlKSxcXG5mcy9leHQ0L3N1cGVyLmM6MTgzNjojaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcXG5mcy9leHQ0L3N1cGVyLmMtMTgzNy1cXHRmc3BhcmFtX2ZsYWdcXHQoXFxcImZjX2RlYnVnX2ZvcmNlXFxcIixcXHRPcHRfZmNfZGVidWdfZm9yY2UpLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTE4Nzk9c3RhdGljIGNvbnN0IHN0cnVjdCBtb3VudF9vcHRzIHtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0xOTIyLVxcdHtPcHRfdXNlcl94YXR0ciwgRVhUNF9NT1VOVF9YQVRUUl9VU0VSLCBNT1BUX1NFVH0sXFxuZnMvZXh0NC9zdXBlci5jOjE5MjM6I2lmZGVmIENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTFxcbmZzL2V4dDQvc3VwZXIuYy0xOTI0LVxcdHtPcHRfYWNsLCBFWFQ0X01PVU5UX1BPU0lYX0FDTCwgTU9QVF9TRVR9LFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTE5NDUtXFx0IE1PUFRfU0VUfSxcXG5mcy9leHQ0L3N1cGVyLmM6MTk0NjojaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcXG5mcy9leHQ0L3N1cGVyLmMtMTk0Ny1cXHR7T3B0X2ZjX2RlYnVnX2ZvcmNlLCBFWFQ0X01PVU5UMl9KT1VSTkFMX0ZBU1RfQ09NTUlULFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTE5OTc9c3RydWN0IGV4dDRfZnNfY29udGV4dCB7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMjAwMC1cXHRpbnRcXHRcXHRzX2pxdW90YV9mbXQ7XFx0LyogRm9ybWF0IG9mIHF1b3RhIHRvIHVzZSAqL1xcbmZzL2V4dDQvc3VwZXIuYzoyMDAxOiNpZmRlZiBDT05GSUdfRVhUNF9ERUJVR1xcbmZzL2V4dDQvc3VwZXIuYy0yMDAyLVxcdGludCBzX2ZjX2RlYnVnX21heF9yZXBsYXk7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9MjE3MT1zdGF0aWMgaW50IGV4dDRfcGFyc2VfcGFyYW0oc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSlcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0yMzA2LVxcdFxcdHJldHVybiAwO1xcbmZzL2V4dDQvc3VwZXIuYzoyMzA3OiNpZmRlZiBDT05GSUdfRVhUNF9ERUJVR1xcbmZzL2V4dDQvc3VwZXIuYy0yMzA4LVxcdGNhc2UgT3B0X2ZjX2RlYnVnX21heF9yZXBsYXk6XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9Mjg1NT1zdGF0aWMgdm9pZCBleHQ0X2FwcGx5X29wdGlvbnMoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTI4NzgtXFxuZnMvZXh0NC9zdXBlci5jOjI4Nzk6I2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXFxuZnMvZXh0NC9zdXBlci5jLTI4ODAtXFx0QVBQTFkoc19mY19kZWJ1Z19tYXhfcmVwbGF5KTtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz00Mzg4PXN0YXRpYyB2b2lkIGV4dDRfc2V0X2RlZl9vcHRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNDQwMy1cXHRzZXRfb3B0KHNiLCBYQVRUUl9VU0VSKTtcXG5mcy9leHQ0L3N1cGVyLmM6NDQwNDojaWZkZWYgQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMXFxuZnMvZXh0NC9zdXBlci5jLTQ0MDUtXFx0c2V0X29wdChzYiwgUE9TSVhfQUNMKTtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz03Mzc3PXN0YXRpYyBzc2l6ZV90IGV4dDRfcXVvdGFfd3JpdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNzQzNy1cXG5mcy9leHQ0L3N1cGVyLmM6NzQzODojaWYgIWRlZmluZWQoQ09ORklHX0VYVDJfRlMpIFxcdTAwMjZcXHUwMDI2ICFkZWZpbmVkKENPTkZJR19FWFQyX0ZTX01PRFVMRSkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfRVhUNF9VU0VfRk9SX0VYVDIpXFxuZnMvZXh0NC9zdXBlci5jLTc0Mzktc3RhdGljIGlubGluZSB2b2lkIHJlZ2lzdGVyX2FzX2V4dDIodm9pZClcXG4tLVxcbmZzL2V4dDQvc3lzZnMuYz0yNjY9RVhUNF9SV19BVFRSX1NCSV9QSShtc2dfcmF0ZWxpbWl0X2J1cnN0LCBzX21zZ19yYXRlbGltaXRfc3RhdGUuYnVyc3QpO1xcbmZzL2V4dDQvc3lzZnMuYzoyNjc6I2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXFxuZnMvZXh0NC9zeXNmcy5jLTI2OC1FWFQ0X1JXX0FUVFJfU0JJX1VMKHNpbXVsYXRlX2ZhaWwsIHNfc2ltdWxhdGVfZmFpbCk7XFxuLS1cXG5mcy9leHQ0L3N5c2ZzLmM9Mjk1PXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpleHQ0X2F0dHJzW10gPSB7XFxuLS1cXG5mcy9leHQ0L3N5c2ZzLmMtMzM1LVxcdEFUVFJfTElTVChqb3VybmFsX3Rhc2spLFxcbmZzL2V4dDQvc3lzZnMuYzozMzY6I2lmZGVmIENPTkZJR19FWFQ0X0RFQlVHXFxuZnMvZXh0NC9zeXNmcy5jLTMzNy1cXHRBVFRSX0xJU1Qoc2ltdWxhdGVfZmFpbCksXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9ODg9c3RhdGljIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICogY29uc3QgZXh0NF94YXR0cl9oYW5kbGVyX21hcFtdID0ge1xcbmZzL2V4dDQveGF0dHIuYy04OS1cXHRbRVhUNF9YQVRUUl9JTkRFWF9VU0VSXVxcdFxcdCAgICAgPSBcXHUwMDI2ZXh0NF94YXR0cl91c2VyX2hhbmRsZXIsXFxuZnMvZXh0NC94YXR0ci5jOjkwOiNpZmRlZiBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0xcXG5mcy9leHQ0L3hhdHRyLmMtOTEtXFx0W0VYVDRfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0FDQ0VTU10gID0gXFx1MDAyNm5vcF9wb3NpeF9hY2xfYWNjZXNzLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTk0LVxcdFtFWFQ0X1hBVFRSX0lOREVYX1RSVVNURURdXFx0ICAgICA9IFxcdTAwMjZleHQ0X3hhdHRyX3RydXN0ZWRfaGFuZGxlcixcXG5mcy9leHQ0L3hhdHRyLmM6OTU6I2lmZGVmIENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZXFxuZnMvZXh0NC94YXR0ci5jLTk2LVxcdFtFWFQ0X1hBVFRSX0lOREVYX1NFQ1VSSVRZXVxcdCAgICAgPSBcXHUwMDI2ZXh0NF94YXR0cl9zZWN1cml0eV9oYW5kbGVyLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTEwMT1jb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqIGNvbnN0IGV4dDRfeGF0dHJfaGFuZGxlcnNbXSA9IHtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xMDMtXFx0XFx1MDAyNmV4dDRfeGF0dHJfdHJ1c3RlZF9oYW5kbGVyLFxcbmZzL2V4dDQveGF0dHIuYzoxMDQ6I2lmZGVmIENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZXFxuZnMvZXh0NC94YXR0ci5jLTEwNS1cXHRcXHUwMDI2ZXh0NF94YXR0cl9zZWN1cml0eV9oYW5kbGVyLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5oPTIxMz1fX3hhdHRyX2NoZWNrX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2hlYWRlciAqaGVhZGVyLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5oLTIxOC1cXG5mcy9leHQ0L3hhdHRyLmg6MjE5OiNpZmRlZiBDT05GSUdfRVhUNF9GU19TRUNVUklUWVxcbmZzL2V4dDQveGF0dHIuaC0yMjAtZXh0ZXJuIGludCBleHQ0X2luaXRfc2VjdXJpdHkoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6NTM6MTAuODQ1NjA2MDUzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQyNzYwNDA2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgdGhlIGV4dDQgS2NvbmZpZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGRpdmUgaW50byB0aGUgaGVhcnQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhhdCBtZWFucyBgZnMvZXh0NC9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBmZWF0dXJlIGZsYWdzIGFyZSBkZWZpbmVkLCBkZXBlbmRlbmNpZXMgYXJlIGxhaWQgb3V0LCBhbmQgdGhlIGJ1aWxkIHN5c3RlbSBrbm93cyBob3cgdG8gaGFuZGxlIHRoZSBleHQ0LXNwZWNpZmljIGNvbXBvbmVudHMuIEknbSBob3BpbmcgdG8gcXVpY2tseSBncmFzcCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLiBVbmRlcnN0YW5kaW5nIHRoZSBLY29uZmlnIGZpbGUgZ2l2ZXMgbWUgdGhlIGxvdy1sZXZlbCBidWlsZGluZyBibG9ja3MgZm9yIHdoYXQncyBwb3NzaWJsZSwgYW5kIHdoZXJlIHRvIGxvb2sgd2hlbiBzb21ldGhpbmcgaXNuJ3Qgd29ya2luZyBhcyBleHBlY3RlZC4gVGhpcyBhbGxvd3MgbWUgdG8gc2VlIHRoZSBjb25maWd1cmF0aW9uIGFuZCBhbGwgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTc3MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjUzOjEzLjI3MzIxMTkzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIEVYVDRfRlNcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVxcXCJcXG4gICA0OlxcdFxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbiAgIDU6XFx0XFx0c2VsZWN0IEpCRDJcXG4gICA2OlxcdFxcdHNlbGVjdCBDUkMxNlxcbiAgIDc6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAgODpcXHRcXHRzZWxlY3QgRlNfSU9NQVBcXG4gICA5OlxcdFxcdHNlbGVjdCBGU19FTkNSWVBUSU9OX0FMR1MgaWYgRlNfRU5DUllQVElPTlxcbiAgMTA6XFx0XFx0aGVscFxcbiAgMTE6XFx0XFx0ICBUaGlzIGlzIHRoZSBuZXh0IGdlbmVyYXRpb24gb2YgdGhlIGV4dDMgZmlsZXN5c3RlbS5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0XFx0ICBVbmxpa2UgdGhlIGNoYW5nZSBmcm9tIGV4dDIgZmlsZXN5c3RlbSB0byBleHQzIGZpbGVzeXN0ZW0sXFxuICAxNDpcXHRcXHQgIHRoZSBvbi1kaXNrIGZvcm1hdCBvZiBleHQ0IGlzIG5vdCBmb3J3YXJkcyBjb21wYXRpYmxlIHdpdGhcXG4gIDE1OlxcdFxcdCAgZXh0MzsgaXQgaXMgYmFzZWQgb24gZXh0ZW50IG1hcHMgYW5kIGl0IHN1cHBvcnRzIDQ4LWJpdFxcbiAgMTY6XFx0XFx0ICBwaHlzaWNhbCBibG9jayBudW1iZXJzLiAgVGhlIGV4dDQgZmlsZXN5c3RlbSBhbHNvIHN1cHBvcnRzIGRlbGF5ZWRcXG4gIDE3OlxcdFxcdCAgYWxsb2NhdGlvbiwgcGVyc2lzdGVudCBwcmVhbGxvY2F0aW9uLCBoaWdoIHJlc29sdXRpb24gdGltZSBzdGFtcHMsXFxuICAxODpcXHRcXHQgIGFuZCBhIG51bWJlciBvZiBvdGhlciBmZWF0dXJlcyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIGFuZCBzcGVlZFxcbiAgMTk6XFx0XFx0ICB1cCBmc2NrIHRpbWUuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHNlZSB0aGUgd2ViIHBhZ2VzIGF0XFxuICAyMDpcXHRcXHQgIGh0dHA6Ly9leHQ0Lndpa2kua2VybmVsLm9yZy5cXG4gIDIxOlxcdFxcbiAgMjI6XFx0XFx0ICBUaGUgZXh0NCBmaWxlc3lzdGVtIHN1cHBvcnRzIG1vdW50aW5nIGFuIGV4dDMgZmlsZXN5c3RlbTsgd2hpbGUgdGhlcmVcXG4gIDIzOlxcdFxcdCAgYXJlIHNvbWUgcGVyZm9ybWFuY2UgZ2FpbnMgZnJvbSB0aGUgZGVsYXllZCBhbGxvY2F0aW9uIGFuZCBpbm9kZVxcbiAgMjQ6XFx0XFx0ICB0YWJsZSByZWFkYWhlYWQsIHRoZSBiZXN0IHBlcmZvcm1hbmNlIGdhaW5zIHJlcXVpcmUgZW5hYmxpbmcgZXh0NFxcbiAgMjU6XFx0XFx0ICBmZWF0dXJlcyBpbiB0aGUgZmlsZXN5c3RlbSB1c2luZyB0dW5lMmZzLCBvciBmb3JtYXR0aW5nIGEgbmV3XFxuICAyNjpcXHRcXHQgIGZpbGVzeXN0ZW0gYXMgYW4gZXh0NCBmaWxlc3lzdGVtIGluaXRpYWxseS4gV2l0aG91dCBleHBsaWNpdCBlbmFibGluZ1xcbiAgMjc6XFx0XFx0ICBvZiBleHQ0IGZlYXR1cmVzLCB0aGUgb24gZGlzayBmaWxlc3lzdGVtIGZvcm1hdCBzdGF5cyBmdWxseSBiYWNrd2FyZFxcbiAgMjg6XFx0XFx0ICBjb21wYXRpYmxlLlxcbiAgMjk6XFx0XFxuICAzMDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBmaWxlIHN5c3RlbSBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGVcXG4gIDMxOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGV4dDQuXFxuICAzMjpcXHRcXG4gIDMzOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDM0OlxcdFxcbiAgMzU6XFx0Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXFxuICAzNjpcXHRcXHRib29sIFxcXCJVc2UgZXh0NCBmb3IgZXh0MiBmaWxlIHN5c3RlbXNcXFwiXFxuICAzNzpcXHRcXHRkZXBlbmRzIG9uIEVYVDRfRlNcXG4gIDM4OlxcdFxcdGRlcGVuZHMgb24gRVhUMl9GUz1uXFxuICAzOTpcXHRcXHRkZWZhdWx0IHlcXG4gIDQwOlxcdFxcdGhlbHBcXG4gIDQxOlxcdFxcdCAgQWxsb3cgdGhlIGV4dDQgZmlsZSBzeXN0ZW0gZHJpdmVyIGNvZGUgdG8gYmUgdXNlZCBmb3IgZXh0MlxcbiAgNDI6XFx0XFx0ICBmaWxlIHN5c3RlbSBtb3VudHMuICBUaGlzIGFsbG93cyB1c2VycyB0byByZWR1Y2UgdGhlaXJcXG4gIDQzOlxcdFxcdCAgY29tcGlsZWQga2VybmVsIHNpemUgYnkgdXNpbmcgb25lIGZpbGUgc3lzdGVtIGRyaXZlciBmb3JcXG4gIDQ0OlxcdFxcdCAgZXh0MiwgZXh0MywgYW5kIGV4dDQgZmlsZSBzeXN0ZW1zLlxcbiAgNDU6XFx0XFxuICA0NjpcXHRjb25maWcgRVhUNF9GU19QT1NJWF9BQ0xcXG4gIDQ3OlxcdFxcdGJvb2wgXFxcIkV4dDQgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcXFwiXFxuICA0ODpcXHRcXHRkZXBlbmRzIG9uIEVYVDRfRlNcXG4gIDQ5OlxcdFxcdHNlbGVjdCBGU19QT1NJWF9BQ0xcXG4gIDUwOlxcdFxcdGhlbHBcXG4gIDUxOlxcdFxcdCAgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHMgKEFDTHMpIHN1cHBvcnQgcGVybWlzc2lvbnMgZm9yIHVzZXJzIGFuZFxcbiAgNTI6XFx0XFx0ICBncm91cHMgYmV5b25kIHRoZSBvd25lci9ncm91cC93b3JsZCBzY2hlbWUuXFxuICA1MzpcXHRcXG4gIDU0OlxcdFxcdCAgSWYgeW91IGRvbid0IGtub3cgd2hhdCBBY2Nlc3MgQ29udHJvbCBMaXN0cyBhcmUsIHNheSBOXFxuICA1NTpcXHRcXG4gIDU2OlxcdGNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXFxuICA1NzpcXHRcXHRib29sIFxcXCJFeHQ0IFNlY3VyaXR5IExhYmVsc1xcXCJcXG4gIDU4OlxcdFxcdGRlcGVuZHMgb24gRVhUNF9GU1xcbiAgNTk6XFx0XFx0aGVscFxcbiAgNjA6XFx0XFx0ICBTZWN1cml0eSBsYWJlbHMgc3VwcG9ydCBhbHRlcm5hdGl2ZSBhY2Nlc3MgY29udHJvbCBtb2RlbHNcXG4gIDYxOlxcdFxcdCAgaW1wbGVtZW50ZWQgYnkgc2VjdXJpdHkgbW9kdWxlcyBsaWtlIFNFTGludXguICBUaGlzIG9wdGlvblxcbiAgNjI6XFx0XFx0ICBlbmFibGVzIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZSBoYW5kbGVyIGZvciBmaWxlIHNlY3VyaXR5XFxuICA2MzpcXHRcXHQgIGxhYmVscyBpbiB0aGUgZXh0NCBmaWxlc3lzdGVtLlxcbiAgNjQ6XFx0XFxuICA2NTpcXHRcXHQgIElmIHlvdSBhcmUgbm90IHVzaW5nIGEgc2VjdXJpdHkgbW9kdWxlIHRoYXQgcmVxdWlyZXMgdXNpbmdcXG4gIDY2OlxcdFxcdCAgZXh0ZW5kZWQgYXR0cmlidXRlcyBmb3IgZmlsZSBzZWN1cml0eSBsYWJlbHMsIHNheSBOLlxcbiAgNjc6XFx0XFxuICA2ODpcXHRjb25maWcgRVhUNF9ERUJVR1xcbiAgNjk6XFx0XFx0Ym9vbCBcXFwiRXh0NCBkZWJ1Z2dpbmcgc3VwcG9ydFxcXCJcXG4gIDcwOlxcdFxcdGRlcGVuZHMgb24gRVhUNF9GU1xcbiAgNzE6XFx0XFx0aGVscFxcbiAgNzI6XFx0XFx0ICBFbmFibGVzIHJ1bi10aW1lIGRlYnVnZ2luZyBzdXBwb3J0IGZvciB0aGUgZXh0NCBmaWxlc3lzdGVtLlxcbiAgNzM6XFx0XFxuICA3NDpcXHRcXHQgIElmIHlvdSBzZWxlY3QgWSBoZXJlLCB0aGVuIHlvdSB3aWxsIGJlIGFibGUgdG8gdHVybiBvbiBkZWJ1Z2dpbmdcXG4gIDc1OlxcdFxcdCAgdXNpbmcgZHluYW1pYyBkZWJ1ZyBjb250cm9sIGZvciBtYl9kZWJ1ZygpIC8gZXh0X2RlYnVnKCkgbXNncy5cXG4gIDc2OlxcdFxcbiAgNzc6XFx0Y29uZmlnIEVYVDRfS1VOSVRfVEVTVFNcXG4gIDc4OlxcdFxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0cyBmb3IgZXh0NFxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgNzk6XFx0XFx0ZGVwZW5kcyBvbiBFWFQ0X0ZTIFxcdTAwMjZcXHUwMDI2IEtVTklUXFxuICA4MDpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgODE6XFx0XFx0aGVscFxcbiAgODI6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgZXh0NCBLVW5pdCB0ZXN0cy5cXG4gIDgzOlxcdFxcbiAgODQ6XFx0XFx0ICBLVW5pdCB0ZXN0cyBydW4gZHVyaW5nIGJvb3QgYW5kIG91dHB1dCB0aGUgcmVzdWx0cyB0byB0aGUgZGVidWcgbG9nXFxuICA4NTpcXHRcXHQgIGluIFRBUCBmb3JtYXQgKGh0dHBzOi8vdGVzdGFueXRoaW5nLm9yZy8pLiBPbmx5IHVzZWZ1bCBmb3Iga2VybmVsIGRldnNcXG4gIDg2OlxcdFxcdCAgcnVubmluZyBLVW5pdCB0ZXN0IGhhcm5lc3MgYW5kIGFyZSBub3QgZm9yIGluY2x1c2lvbiBpbnRvIGEgcHJvZHVjdGlvblxcbiAgODc6XFx0XFx0ICBidWlsZC5cXG4gIDg4OlxcdFxcbiAgODk6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsIHBsZWFzZSByZWZlclxcbiAgOTA6XFx0XFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbiBpbiBEb2N1bWVudGF0aW9uL2Rldi10b29scy9rdW5pdC8uXFxuICA5MTpcXHRcXG4gIDkyOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6NTM6MTMuMjczMjkwMjFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDg4NDg5NTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgYGZzL2V4dDQvaW5saW5lLmNgLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIGV4dDQgSW5saW5lIENvbnZlcnNpb24gaW4gYGlubGluZS5jYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpc3NlY3QgYGZzL2V4dDQvaW5saW5lLmNgLiBNeSBwcmltYXJ5IGludGVyZXN0IGhlcmUgbGllcyBpbiB1bmRlcnN0YW5kaW5nIHRoZSBtZWNoYW5pY3Mgb2YgaW5saW5lIGNvbnZlcnNpb24gd2l0aGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgdHJpZ2dlcnMgZm9yIHRoaXMgY29udmVyc2lvbiBwcm9jZXNzLCBhbmQgdGhlbiBJIHdhbnQgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgdGhlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIOKAkyB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIGVmZmVjdGl2ZWx5IHRoZSBmb2N1cyBzeW1ib2xzLCB0aGUgaW50ZXJmYWNlIGludG8gdGhpcyBmdW5jdGlvbmFsaXR5LiBXaGF0IGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUgYXJlICpleHBvc2VkKiBhbmQgYXJlIHJlc3BvbnNpYmxlIGZvciB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBpbiB0aGlzIGZpbGUgdGhhdCBJIGNhbiBhY3R1YWxseSBjYWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI5MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6NTM6MTUuMzYxNzgxNzk1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzU0MTE0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dLipcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L2lubGluZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvaW5saW5lLmMtMjQtXFxuZnMvZXh0NC9pbmxpbmUuYzoyNTpzdGF0aWMgaW50IGV4dDRfZGFfY29udmVydF9pbmxpbmVfZGF0YV90b19leHRlbnQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuZnMvZXh0NC9pbmxpbmUuYy0yNi1cXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMjgtXFxuZnMvZXh0NC9pbmxpbmUuYzoyOTpzdGF0aWMgaW50IGV4dDRfZ2V0X2lubGluZV9zaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvZXh0NC9pbmxpbmUuYy0zMC17XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTM2LVxcbmZzL2V4dDQvaW5saW5lLmM6Mzc6c3RhdGljIGludCBnZXRfbWF4X2lubGluZV94YXR0cl92YWx1ZV9zaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvZXh0NC9pbmxpbmUuYy0zOC1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZXh0NF9pbG9jICppbG9jKVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xMTEtICovXFxuZnMvZXh0NC9pbmxpbmUuYzoxMTI6aW50IGV4dDRfZ2V0X21heF9pbmxpbmVfc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2V4dDQvaW5saW5lLmMtMTEzLXtcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMTQ0LSAqL1xcbmZzL2V4dDQvaW5saW5lLmM6MTQ1OmludCBleHQ0X2ZpbmRfaW5saW5lX2RhdGFfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvZXh0NC9pbmxpbmUuYy0xNDYte1xcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xODMtXFxuZnMvZXh0NC9pbmxpbmUuYzoxODQ6c3RhdGljIGludCBleHQ0X3JlYWRfaW5saW5lX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqYnVmZmVyLFxcbmZzL2V4dDQvaW5saW5lLmMtMTg1LVxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgbGVuLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0yMjgtICovXFxuZnMvZXh0NC9pbmxpbmUuYzoyMjk6c3RhdGljIHZvaWQgZXh0NF93cml0ZV9pbmxpbmVfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF9pbG9jICppbG9jLFxcbmZzL2V4dDQvaW5saW5lLmMtMjMwLVxcdFxcdFxcdFxcdCAgIHZvaWQgKmJ1ZmZlciwgbG9mZl90IHBvcywgdW5zaWduZWQgaW50IGxlbilcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMjY3LVxcbmZzL2V4dDQvaW5saW5lLmM6MjY4OnN0YXRpYyBpbnQgZXh0NF9jcmVhdGVfaW5saW5lX2RhdGEoaGFuZGxlX3QgKmhhbmRsZSxcXG5mcy9leHQ0L2lubGluZS5jLTI2OS1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBsZW4pXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTMzNi1cXG5mcy9leHQ0L2lubGluZS5jOjMzNzpzdGF0aWMgaW50IGV4dDRfdXBkYXRlX2lubGluZV9kYXRhKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvZXh0NC9pbmxpbmUuYy0zMzgtXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IGxlbilcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtNDA3LVxcbmZzL2V4dDQvaW5saW5lLmM6NDA4OnN0YXRpYyBpbnQgZXh0NF9wcmVwYXJlX2lubGluZV9kYXRhKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvZXh0NC9pbmxpbmUuYy00MDktXFx0XFx0XFx0XFx0ICAgIGxvZmZfdCBsZW4pXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTQzNi1cXG5mcy9leHQ0L2lubGluZS5jOjQzNzpzdGF0aWMgaW50IGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSxcXG5mcy9leHQ0L2lubGluZS5jLTQzOC1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy01MDMtXFxuZnMvZXh0NC9pbmxpbmUuYzo1MDQ6c3RhdGljIGludCBleHQ0X3JlYWRfaW5saW5lX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuZnMvZXh0NC9pbmxpbmUuYy01MDUte1xcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy01NDUtXFxuZnMvZXh0NC9pbmxpbmUuYzo1NDY6aW50IGV4dDRfcmVhZHBhZ2VfaW5saW5lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuZnMvZXh0NC9pbmxpbmUuYy01NDcte1xcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy01NzItXFxuZnMvZXh0NC9pbmxpbmUuYzo1NzM6c3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbmZzL2V4dDQvaW5saW5lLmMtNTc0LVxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTY5Ni0gKi9cXG5mcy9leHQ0L2lubGluZS5jOjY5NzppbnQgZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbmZzL2V4dDQvaW5saW5lLmMtNjk4LVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtNzgzLSAqL1xcbmZzL2V4dDQvaW5saW5lLmM6Nzg0OmludCBleHQ0X3RyeV90b193cml0ZV9pbmxpbmVfZGF0YShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG5mcy9leHQ0L2lubGluZS5jLTc4NS1cXHRcXHRcXHRcXHQgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTc5NC1cXG5mcy9leHQ0L2lubGluZS5jOjc5NTppbnQgZXh0NF93cml0ZV9pbmxpbmVfZGF0YV9lbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLFxcbmZzL2V4dDQvaW5saW5lLmMtNzk2LVxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBjb3BpZWQsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTg4NS0gKi9cXG5mcy9leHQ0L2lubGluZS5jOjg4NjpzdGF0aWMgaW50IGV4dDRfZGFfY29udmVydF9pbmxpbmVfZGF0YV90b19leHRlbnQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuZnMvZXh0NC9pbmxpbmUuYy04ODctXFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTkzNy0jaWZkZWYgSU5MSU5FX0RJUl9ERUJVR1xcbmZzL2V4dDQvaW5saW5lLmM6OTM4OnZvaWQgZXh0NF9zaG93X2lubGluZV9kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXFxuZnMvZXh0NC9pbmxpbmUuYy05MzktXFx0XFx0XFx0ICB2b2lkICppbmxpbmVfc3RhcnQsIGludCBpbmxpbmVfc2l6ZSlcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtOTY5LSAqL1xcbmZzL2V4dDQvaW5saW5lLmM6OTcwOnN0YXRpYyBpbnQgZXh0NF9hZGRfZGlyZW50X3RvX2lubGluZShoYW5kbGVfdCAqaGFuZGxlLFxcbmZzL2V4dDQvaW5saW5lLmMtOTcxLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGV4dDRfZmlsZW5hbWUgKmZuYW1lLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xMDEwLVxcbmZzL2V4dDQvaW5saW5lLmM6MTAxMTpzdGF0aWMgdm9pZCAqZXh0NF9nZXRfaW5saW5lX3hhdHRyX3BvcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbmZzL2V4dDQvaW5saW5lLmMtMTAxMi1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGV4dDRfaWxvYyAqaWxvYylcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMTAyNi0vKiBTZXQgdGhlIGZpbmFsIGRlIHRvIGNvdmVyIHRoZSB3aG9sZSBibG9jay4gKi9cXG5mcy9leHQ0L2lubGluZS5jOjEwMjc6dm9pZCBleHQ0X3VwZGF0ZV9maW5hbF9kZSh2b2lkICpkZV9idWYsIGludCBvbGRfc2l6ZSwgaW50IG5ld19zaXplKVxcbmZzL2V4dDQvaW5saW5lLmMtMTAyOC17XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTEwNTEtXFxuZnMvZXh0NC9pbmxpbmUuYzoxMDUyOnN0YXRpYyBpbnQgZXh0NF91cGRhdGVfaW5saW5lX2RpcihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG5mcy9leHQ0L2lubGluZS5jLTEwNTMtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZXh0NF9pbG9jICppbG9jKVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xMDczLVxcbmZzL2V4dDQvaW5saW5lLmM6MTA3NDpzdGF0aWMgaW50IGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfZnNibGtfdCBibG9jayxcXG5mcy9leHQ0L2lubGluZS5jLTEwNzUtXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGxlbiwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMTE5NC1cXG5mcy9leHQ0L2lubGluZS5jOjExOTU6c3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXFxuZnMvZXh0NC9pbmxpbmUuYy0xMTk2LVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTEyOTUtICovXFxuZnMvZXh0NC9pbmxpbmUuYzoxMjk2OmludCBleHQ0X3RyeV9hZGRfaW5saW5lX2VudHJ5KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBleHQ0X2ZpbGVuYW1lICpmbmFtZSxcXG5mcy9leHQ0L2lubGluZS5jLTEyOTctXFx0XFx0XFx0ICAgICAgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTEzNjQtICovXFxuZnMvZXh0NC9pbmxpbmUuYzoxMzY1OmludCBleHQ0X2lubGluZWRpcl90b190cmVlKHN0cnVjdCBmaWxlICpkaXJfZmlsZSxcXG5mcy9leHQ0L2lubGluZS5jLTEzNjYtXFx0XFx0XFx0ICAgc3RydWN0IGlub2RlICpkaXIsIGV4dDRfbGJsa190IGJsb2NrLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xNDg1LSAqL1xcbmZzL2V4dDQvaW5saW5lLmM6MTQ4NjppbnQgZXh0NF9yZWFkX2lubGluZV9kaXIoc3RydWN0IGZpbGUgKmZpbGUsXFxuZnMvZXh0NC9pbmxpbmUuYy0xNDg3LVxcdFxcdFxcdCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eCxcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMTYxNi1cXG5mcy9leHQ0L2lubGluZS5jOjE2MTc6dm9pZCAqZXh0NF9yZWFkX2lubGluZV9saW5rKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvZXh0NC9pbmxpbmUuYy0xNjE4LXtcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMTY0NS1cXG5mcy9leHQ0L2lubGluZS5jOjE2NDY6c3RydWN0IGJ1ZmZlcl9oZWFkICpleHQ0X2dldF9maXJzdF9pbmxpbmVfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSxcXG5mcy9leHQ0L2lubGluZS5jLTE2NDctXFx0XFx0XFx0XFx0XFx0c3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKipwYXJlbnRfZGUsXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTE2NjUtICovXFxuZnMvZXh0NC9pbmxpbmUuYzoxNjY2OmludCBleHQ0X3RyeV9jcmVhdGVfaW5saW5lX2RpcihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG5mcy9leHQ0L2lubGluZS5jLTE2NjctXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTE2OTgtXFxuZnMvZXh0NC9pbmxpbmUuYzoxNjk5OnN0cnVjdCBidWZmZXJfaGVhZCAqZXh0NF9maW5kX2lubGluZV9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpcixcXG5mcy9leHQ0L2lubGluZS5jLTE3MDAtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGV4dDRfZmlsZW5hbWUgKmZuYW1lLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xNzYxLVxcbmZzL2V4dDQvaW5saW5lLmM6MTc2MjppbnQgZXh0NF9kZWxldGVfaW5saW5lX2VudHJ5KGhhbmRsZV90ICpoYW5kbGUsXFxuZnMvZXh0NC9pbmxpbmUuYy0xNzYzLVxcdFxcdFxcdCAgICAgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTE4MTk9c3RhdGljIGlubGluZSBzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqXFxuZnMvZXh0NC9pbmxpbmUuYzoxODIwOmV4dDRfZ2V0X2lubGluZV9lbnRyeShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbmZzL2V4dDQvaW5saW5lLmMtMTgyMS1cXHRcXHQgICAgICBzdHJ1Y3QgZXh0NF9pbG9jICppbG9jLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xODQ0LVxcbmZzL2V4dDQvaW5saW5lLmM6MTg0NTpib29sIGVtcHR5X2lubGluZV9kaXIoc3RydWN0IGlub2RlICpkaXIsIGludCAqaGFzX2lubGluZV9kYXRhKVxcbmZzL2V4dDQvaW5saW5lLmMtMTg0Ni17XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTE5MDctXFxuZnMvZXh0NC9pbmxpbmUuYzoxOTA4OmludCBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGEoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9leHQ0L2lubGluZS5jLTE5MDkte1xcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xOTE4LVxcbmZzL2V4dDQvaW5saW5lLmM6MTkxOTppbnQgZXh0NF9pbmxpbmVfZGF0YV9pb21hcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwKVxcbmZzL2V4dDQvaW5saW5lLmMtMTkyMC17XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTE5NTAtXFxuZnMvZXh0NC9pbmxpbmUuYzoxOTUxOmludCBleHQ0X2lubGluZV9kYXRhX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCAqaGFzX2lubGluZSlcXG5mcy9leHQ0L2lubGluZS5jLTE5NTIte1xcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0yMDYyLVxcbmZzL2V4dDQvaW5saW5lLmM6MjA2MzppbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvZXh0NC9pbmxpbmUuYy0yMDY0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6NTM6MTUuNDM5MzMwMDk5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzMTg5Njg0ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEV4dDQgSW5saW5lIERhdGEgQ29udmVyc2lvbiBDb2RlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSdtIGV4YW1pbmluZyB0aGUgZnVuY3Rpb24gY2FsbHMgcmVsYXRlZCB0byBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhYC4gIEkgc2VlIHRoYXQgaXQncyBhbiBleHBvcnRlZCBmdW5jdGlvbiwgbWVhbmluZyBpdCdzIGFjY2Vzc2libGUgb3V0c2lkZSBpdHMgb3duIG1vZHVsZSwgYW5kIGl0IHJlc2lkZXMgaW4gYGZzL2V4dDQvaW5saW5lLmNgLiAgYGV4dDRfdHJ5X2FkZF9pbmxpbmVfZW50cnlgIGNhbGxzIGl0LCBhbmQgaXQgYWxzbyBjYWxscyBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja2AuIEludGVyZXN0aW5nIHRoYXQgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YWAgaXMgY2FsbGluZyBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja2AuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhvc2UuXG5cbk5vdywgbGV0J3MgZmlndXJlIG91dCB3aGF0IGVsc2UgaXMgY2FsbGluZyBpbnRvIHRoaXMgYXJlYSBvZiBjb2RlLiBTY2FubmluZyB0aGUgY29kZWJhc2UsIEkgZmluZCB0aGF0LCBiZXlvbmQgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YWAgaXRzZWxmLCB3ZSBhbHNvIGhhdmUgYGV4dDRfdHJ5X2FkZF9pbmxpbmVfZW50cnlgLCBgZXh0NF9mYWxsb2NhdGVgIGluIHRoZSBleHRlbnRzIGNvZGUsIGBleHQ0X3NldGF0dHJgIGluIHRoZSBpbm9kZSBjb2RlLCBhbmQgYGV4dDRfcGFnZV9ta3dyaXRlYCwgYWxzbyBpbiB0aGUgaW5vZGUgY29kZSwgYWxsIHRvdWNoaW5nIHRoaXMgaW5saW5lIGRhdGEgZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBlY29zeXN0ZW0uXG5cblRoZSBnb29kIG5ld3MgaXMgdGhhdCB0aGlzIGlzIGRlZmluaXRlbHkgZnV6emFibGU6ICBXZSdyZSBkZWFsaW5nIHdpdGggY29yZSBmaWxlc3lzdGVtIGNvZGUsIHNwZWNpZmljYWxseSBleHQ0IGlubGluZSBkYXRhIGNvbnZlcnNpb24uIEl0J3MgcmVhZGlseSBhY2Nlc3NpYmxlIGluIGEgUUVNVSBlbnZpcm9ubWVudCwgYW5kIHdlIGNhbiB0cmlnZ2VyIGl0IHRocm91Z2ggc3RhbmRhcmQgb3BlcmF0aW9ucyBsaWtlIG1vdW50aW5nIGltYWdlcyB3aXRoIHRoZSBgaW5saW5lX2RhdGFgIG9wdGlvbiwgdXNpbmcgeGF0dHJzLCBtYW5pcHVsYXRpbmcgaW5saW5lIGRpcmVjdG9yeSBlbnRyaWVzLCBvciB1c2luZyBgZmFsbG9jYXRlYCBvciBgc2V0YXR0cmAuICBGdXJ0aGVybW9yZSwgdGhlIHByZXNlbmNlIG9mIHJlZmFjdG9yZWQgY29kZSBsaWtlIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrYCBhbmQgdGhlIG5ldyBgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2tgIGluZGljYXRlcyBhIG5vbi10cml2aWFsIGZ1bmN0aW9uYWwgY2hhbmdlLCBtYWtpbmcgdGhpcyBhbiBldmVuIG1vcmUgY29tcGVsbGluZyB0YXJnZXQgZm9yIGZ1enppbmcuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIGBDT05GSUdfRVhUNF9GU2AgKG9yIGp1c3QgYEVYVDRfRlNgKSBpcyB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGlubGluZSBkYXRhIGRvZXNuJ3QgcmVxdWlyZSBhbnkgKnNwZWNpYWwqIGNvbmZpZyBvcHRpb25zIGJleW9uZCB0aGUgYmFzZSBleHQ0IHN1cHBvcnQuIEknbGwgc2VhcmNoIHRoZSBgZnMvZXh0NC9NYWtlZmlsZWAgZm9yIGBpbmxpbmUuY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZmxhZ3MgYmVpbmcgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0MDUsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6NTM6MTkuNzU4MzA2NDM3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzQ5MDM5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbmxpbmVcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L01ha2VmaWxlPTg9ZXh0NC15XFx0Oj0gYmFsbG9jLm8gYml0bWFwLm8gYmxvY2tfdmFsaWRpdHkubyBkaXIubyBleHQ0X2piZDIubyBleHRlbnRzLm8gXFxcXFxcbmZzL2V4dDQvTWFrZWZpbGUtOS1cXHRcXHRleHRlbnRzX3N0YXR1cy5vIGZpbGUubyBmc21hcC5vIGZzeW5jLm8gaGFzaC5vIGlhbGxvYy5vIFxcXFxcXG5mcy9leHQ0L01ha2VmaWxlOjEwOlxcdFxcdGluZGlyZWN0Lm8gaW5saW5lLm8gaW5vZGUubyBpb2N0bC5vIG1iYWxsb2MubyBtaWdyYXRlLm8gXFxcXFxcbmZzL2V4dDQvTWFrZWZpbGUtMTEtXFx0XFx0bW1wLm8gbW92ZV9leHRlbnQubyBuYW1laS5vIHBhZ2UtaW8ubyByZWFkcGFnZS5vIHJlc2l6ZS5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6NTM6MTkuODAxODAxOTU0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc4NTYwODQyMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgZXh0NCBJbmxpbmUgRGF0YSBDb252ZXJzaW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGlubGluZSBkYXRhIGNvbnZlcnNpb24gaW4gZXh0NCBpcyBoYW5kbGVkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgaW5saW5lLm9gIGlzIGFsd2F5cyBidWlsdCBpbnRvIGBleHQ0LXlgIHdoZW4gYENPTkZJR19FWFQ0X0ZTYCBpcyBlbmFibGVkLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGUgcmVhbCBxdWVzdGlvbiBpcywgYXJlIHRoZXJlICpvdGhlciogY29uZmlnIGZsYWdzIHRoYXQgYXJlIGFsc28gcmVxdWlyZWQgb3Igc2hvdWxkIGJlIGNvbnNpZGVyZWQ/XG5cbmBFWFQ0X0ZTYCBzZWVtcyB0byBwdWxsIGluIGEgbG90IG9mIGRlcGVuZGVuY2llczogYEJVRkZFUl9IRUFEYCwgYEpCRDJgLCBgQ1JDMTZgLCBgQ1JDMzJgLCBhbmQgYEZTX0lPTUFQYC4gU28sIGBFWFQ0X0ZTYCBpcyBkZWZpbml0ZWx5IHRoZSAqbWFpbiogcmVxdWlyZW1lbnQuXG5cbk5vdywgbGV0J3MgZHJpbGwgZG93biBpbnRvIHRoZSBrZXkgZnVuY3Rpb25zLiBNeSBGb2N1c1N5bWJvbHMgYXJlIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFgIGFuZCBgZXh0NF90cnlfYWRkX2lubGluZV9lbnRyeWAuIEkgbmVlZCB0byBjb25maXJtIHRoZXNlIGFyZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMgdG8gZm9jdXMgb24uIFRoZXkgYXJlIG5vbi1zdGF0aWMgYW5kIG5vbi1pbmxpbmVkLCBzbyBnb29kIHRhcmdldHMuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBlbnRpcmUgY29udGV4dCBvZiB0aGVzZSBmdW5jdGlvbnMuIExldCBtZSBzZWUgd2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIHJlbGV2YW50LiBJJ20gbm90aW5nIHRoYXQgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2tgIGNhbGxzIHNldmVyYWwgb3RoZXIgZnVuY3Rpb25zIGxpa2UgYGV4dDRfbWJfbmV3X2Jsb2Nrc2AsIGBleHQ0X2luaXRfZGlyYmxvY2tgLCBhbmQgYGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrYC4gQW5kIGBleHQ0X3RyeV9hZGRfaW5saW5lX2VudHJ5YCBhbmQgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YWAgYXJlIHRoZSBjYWxsZXJzIG9mIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrYC5cblxuVGhlbiwgSSBzZWUgdGhlIGNhbGxlcnMgb2YgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YWA6IGBleHQ0X2ZhbGxvY2F0ZWAsIGBleHQ0X3NldGF0dHJgLCBgZXh0NF9wYWdlX21rd3JpdGVgLCBgZXh0NF9zZXRfY29udGV4dGAsIGFuZCBgZXh0NF9iZWdpbl9lbmFibGVfdmVyaXR5YC4gVGhpcyBnaXZlcyBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIGZ1bGwgc2V0IG9mIGNvbnRleHRzIHRoZSBjb252ZXJzaW9uIGlzIHVzZWQgd2l0aGluLlxuXG5HaXZlbiB3aGF0IEkndmUgZm91bmQsIG15IGZpbmFsIHNldC1yZXN1bHRzIGFyZTpcbiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXCJFWFQ0X0ZTXCJdYFxuKiAgIGBGb2N1c1N5bWJvbHNgOiBgW1wiZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhXCIsIFwiZXh0NF90cnlfYWRkX2lubGluZV9lbnRyeVwiXWBcbiogICBgUmVhc29uaW5nYDogQ29uY2lzZSBleHBsYW5hdGlvblxuKiAgIGBXb3J0aEZ1enppbmdgOiBgdHJ1ZWBcblxuSSdtIGNvbmZpZGVudCBpbiB0aGVzZSBmaW5kaW5ncywgc28gSSdsbCBnbyBhaGVhZCBhbmQgY2FsbCBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc0NjUsIk91dHB1dFRva2VucyI6MTQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjUzOjI3LjY1Nzg5MTM2NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MzE0MTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhXCIsXG4gICAgXCJleHQ0X3RyeV9hZGRfaW5saW5lX2VudHJ5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXh0NCBpbmxpbmUgZGF0YSBjb252ZXJzaW9uIGxvZ2ljIGluIGZzL2V4dDQvaW5saW5lLmMsIHJlcGxhY2luZyB0aGUgaW5saW5lIGRhdGEgcmVzdG9yYXRpb24gZmxvdyB3aXRoIGEgbmV3IGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrIGZ1bmN0aW9uIGFuZCByZWZhY3RvcmluZyBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIGhvdyBleHQ0IGNvbnZlcnRzIGlubGluZSBkaXJlY3RvcnkvZmlsZSBkYXRhIGludG8gZXh0ZW50L2Jsb2NrIGFsbG9jYXRpb25zIGFuZCBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFcIixcbiAgICBcImV4dDRfdHJ5X2FkZF9pbmxpbmVfZW50cnlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBleHQ0IGlubGluZSBkYXRhIGNvbnZlcnNpb24gbG9naWMgaW4gZnMvZXh0NC9pbmxpbmUuYywgcmVwbGFjaW5nIHRoZSBpbmxpbmUgZGF0YSByZXN0b3JhdGlvbiBmbG93IHdpdGggYSBuZXcgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2sgZnVuY3Rpb24gYW5kIHJlZmFjdG9yaW5nIGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2suIFRoZXNlIGNoYW5nZXMgYWx0ZXIgaG93IGV4dDQgY29udmVydHMgaW5saW5lIGRpcmVjdG9yeS9maWxlIGRhdGEgaW50byBleHRlbnQvYmxvY2sgYWxsb2NhdGlvbnMgYW5kIGFyZSBmdWxseSByZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjUzOjI3LjczMzIxMTkxOFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMzMTk1NjM4NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjo1MzoyNy43MzM2NjQ0NjhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0MzMxOTEwNjQ0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2tgIGFuZCBpbnRyb2R1Y2VzIGBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9ja2AgdG8gcmVmYWN0b3IgaG93IGlubGluZSBkYXRhIGlzIGNvbnZlcnRlZCB0byBhIHJlZ3VsYXIgZXh0ZW50IG9yIGJsb2NrIHBvaW50ZXIgaW4gZXh0NC5cXG5cXG5BbmFseXNpcyBvZiBtZW1vcnkgaGFuZGxpbmc6XFxuMS4gSGVhcCBidWZmZXJzOlxcbiAgIC0gYGJ1ZmAgaXMgcG9wdWxhdGVkIGJ5IGBleHQ0X3JlYWRfaW5saW5lX2RhdGEoKWAgYmVmb3JlIGJlaW5nIHJlYWQuXFxuICAgLSBgaV9ibG9ja19idWZgIGFuZCBgeGF0dHJfYnVmYCBhcmUgYWxsb2NhdGVkIHdpdGggYGttYWxsb2MoKWAgYW5kIGltbWVkaWF0ZWx5IGZ1bGx5IGluaXRpYWxpemVkIHZpYSBgbWVtY3B5KClgIGZyb20gYHJhd19pbm9kZS1cXHUwMDNlaV9ibG9ja2AgYW5kIGBoZWFkZXJgIHJlc3BlY3RpdmVseS5cXG4gICAtIFRoZSBuZXdseSBhbGxvY2F0ZWQgYmxvY2sgYnVmZmVyIGBiaC1cXHUwMDNlYl9kYXRhYCBpcyBjbGVhcmVkIHVzaW5nIGBtZW1zZXQoYmgtXFx1MDAzZWJfZGF0YSwgMCwgaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmxvY2tzaXplKWAgYmVmb3JlIGRhdGEgb3IgZGlyZWN0b3J5IGVudHJpZXMgYXJlIGNvcGllZCBpbnRvIGl0LlxcbjIuIFN0YWNrIHN0cnVjdHVyZXM6XFxuICAgLSBgc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9yZXF1ZXN0IGFyYCBpcyBjbGVhcmVkIHdpdGggYG1lbXNldChcXHUwMDI2YXIsIDAsIHNpemVvZihhcikpYC5cXG4gICAtIGBzdHJ1Y3QgZXh0NF9leHRlbnQgbmV3ZXhgIGhhcyBhbGwgZm91ciBmaWVsZHMgKGBlZV9ibG9ja2AsIGBlZV9sZW5gLCBgZWVfc3RhcnRfbG9gLCBgZWVfc3RhcnRfaGlgKSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLlxcbiAgIC0gYHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQgaXNgIGFuZCBgc3RydWN0IGV4dDRfeGF0dHJfaW5mbyBpYCBhcmUgc3RhdGljYWxseSBpbml0aWFsaXplZCB3aXRoIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLlxcbjMuIE5vIGRhdGEgb3Igc3RydWN0dXJlIHdpdGggdW5pbml0aWFsaXplZCBwYWRkaW5nIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gY29udHJvbCBmbG93IGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuXFxuXFxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoc3VjaCBhcyBleHRlbnQgdHJlZSBjb3JydXB0aW9uLCBsb2NrIG9yZGVyIHZpb2xhdGlvbnMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIHNhbml0aXplcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzlmZmYzMjQ4ZmE3Y2Q3Y2JmMmQ0NGE2Y2M1NDQ0ZWJmMTc3ZDgzNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDAyOjUzOjAzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbmxpbmUuYyBiL2ZzL2V4dDQvaW5saW5lLmNcbmluZGV4IDgwNDVlNGZmMjcwYzcuLjkzOWM2YmYyMGI1YjcgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2lubGluZS5jXG4rKysgYi9mcy9leHQ0L2lubGluZS5jXG5AQCAtMTQsNiArMTQsNyBAQFxuICNpbmNsdWRlIFwiZXh0NC5oXCJcbiAjaW5jbHVkZSBcInhhdHRyLmhcIlxuICNpbmNsdWRlIFwidHJ1bmNhdGUuaFwiXG4rI2luY2x1ZGUgXCJleHQ0X2V4dGVudHMuaFwiXG4gXG4gI2RlZmluZSBFWFQ0X1hBVFRSX1NZU1RFTV9EQVRBXHRcImRhdGFcIlxuICNkZWZpbmUgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRVx0KChzaXplb2YoX19sZTMyKSAqIEVYVDRfTl9CTE9DS1MpKVxuQEAgLTEwNzAsMjEgKzEwNzEsMTI1IEBAIHN0YXRpYyBpbnQgZXh0NF91cGRhdGVfaW5saW5lX2RpcihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBleHQ0X3Jlc3RvcmVfaW5saW5lX2RhdGEoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi1cdFx0XHRcdCAgICAgc3RydWN0IGV4dDRfaWxvYyAqaWxvYyxcbi1cdFx0XHRcdCAgICAgdm9pZCAqYnVmLCBpbnQgaW5saW5lX3NpemUpXG4rc3RhdGljIGludCBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2ZzYmxrX3QgYmxvY2ssXG4rXHRcdFx0XHRcdHVuc2lnbmVkIGludCBsZW4sIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXG4ge1xuLVx0aW50IHJldDtcbitcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gRVhUNF9JKGlub2RlKTtcbitcdHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQgaXMgPSB7XG4rXHRcdC5zID0geyAubm90X2ZvdW5kID0gMCwgfSxcbitcdH07XG4rXHRzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvIGkgPSB7XG4rXHRcdC5uYW1lX2luZGV4ID0gRVhUNF9YQVRUUl9JTkRFWF9TWVNURU0sXG4rXHRcdC5uYW1lID0gRVhUNF9YQVRUUl9TWVNURU1fREFUQSxcbitcdFx0LnZhbHVlID0gTlVMTCxcbitcdFx0LnZhbHVlX2xlbiA9IDAsXG4rXHR9O1xuK1x0aW50IGVycm9yO1xuK1x0dm9pZCAqaV9ibG9ja19idWYgPSBOVUxMO1xuK1x0dm9pZCAqeGF0dHJfYnVmID0gTlVMTDtcbitcdHZvaWQgKmhlYWRlciA9IE5VTEw7XG4rXHR2b2lkICp0YWlsID0gTlVMTDtcbitcdGludCB4YXR0cl9zaXplO1xuK1x0c3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZTtcbiBcbi1cdHJldCA9IGV4dDRfY3JlYXRlX2lubGluZV9kYXRhKGhhbmRsZSwgaW5vZGUsIGlubGluZV9zaXplKTtcbi1cdGlmIChyZXQpIHtcbi1cdFx0ZXh0NF9tc2coaW5vZGUtXHUwMDNlaV9zYiwgS0VSTl9FTUVSRyxcbi1cdFx0XHRcImVycm9yIHJlc3RvcmluZyBpbmxpbmVfZGF0YSBmb3IgaW5vZGUgLS0gcG90ZW50aWFsIGRhdGEgbG9zcyEgKGlub2RlICVsbHUsIGVycm9yICVkKVwiLFxuLVx0XHRcdGlub2RlLVx1MDAzZWlfaW5vLCByZXQpO1xuLVx0XHRyZXR1cm47XG4rXHRpX2Jsb2NrX2J1ZiA9IGttYWxsb2MoRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSwgR0ZQX05PRlMpO1xuK1x0aWYgKCFpX2Jsb2NrX2J1Zikge1xuK1x0XHRlcnJvciA9IC1FTk9NRU07XG4rXHRcdGRvd25fd3JpdGUoXHUwMDI2ZWktXHUwMDNlaV9kYXRhX3NlbSk7XG4rXHRcdGdvdG8gZXJyb3I7XG4gXHR9XG4tXHRleHQ0X3dyaXRlX2lubGluZV9kYXRhKGlub2RlLCBpbG9jLCBidWYsIDAsIGlubGluZV9zaXplKTtcbi1cdGV4dDRfc2V0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XG4rXHRkb3duX3dyaXRlKFx1MDAyNmVpLVx1MDAzZWlfZGF0YV9zZW0pO1xuK1x0ZXJyb3IgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFx1MDAyNmlzLmlsb2MpO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRnb3RvIGVycm9yO1xuK1x0cmF3X2lub2RlID0gZXh0NF9yYXdfaW5vZGUoXHUwMDI2aXMuaWxvYyk7XG4rXHRoZWFkZXIgPSBJSERSKGlub2RlLCByYXdfaW5vZGUpO1xuK1x0dGFpbCA9IElUQUlMKGlub2RlLCByYXdfaW5vZGUpO1xuK1x0eGF0dHJfc2l6ZSA9IHRhaWwgLSBoZWFkZXI7XG4rXHR4YXR0cl9idWYgPSBrbWFsbG9jKHhhdHRyX3NpemUsIEdGUF9OT0ZTKTtcbitcdGlmICgheGF0dHJfYnVmKSB7XG4rXHRcdGVycm9yID0gLUVOT01FTTtcbitcdFx0Z290byBlcnJvcjtcbitcdH1cbitcdEJVRkZFUl9UUkFDRShpcy5pbG9jLmJoLCBcImdldF93cml0ZV9hY2Nlc3NcIik7XG4rXHRlcnJvciA9IGV4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgaW5vZGUtXHUwMDNlaV9zYiwgaXMuaWxvYy5iaCwgRVhUNF9KVFJfTk9ORSk7XG4rXHRpZiAoZXJyb3IpIHtcbitcdFx0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIGJsb2NrKTtcbitcdFx0ZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTtcbitcdFx0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBOVUxMLCBibG9jaywgbGVuLCAwKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXHRtZW1jcHkoaV9ibG9ja19idWYsICh2b2lkICopcmF3X2lub2RlLVx1MDAzZWlfYmxvY2ssIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuK1x0bWVtc2V0KCh2b2lkICopcmF3X2lub2RlLVx1MDAzZWlfYmxvY2ssIDAsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuK1x0bWVtc2V0KGVpLVx1MDAzZWlfZGF0YSwgMCwgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XG4rXHRtZW1jcHkoeGF0dHJfYnVmLCBoZWFkZXIsIHhhdHRyX3NpemUpO1xuK1x0aWYgKGV4dDRfaGFzX2ZlYXR1cmVfZXh0ZW50cyhpbm9kZS1cdTAwM2VpX3NiKSBcdTAwMjZcdTAwMjZcbitcdFx0KFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSB8fCBTX0lTUkVHKGlub2RlLVx1MDAzZWlfbW9kZSkgfHwgU19JU0xOSyhpbm9kZS1cdTAwM2VpX21vZGUpKSkge1xuK1x0XHRleHQ0X3NldF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpO1xuK1x0XHRleHQ0X2V4dF90cmVlX2luaXQoaGFuZGxlLCBpbm9kZSk7XG4rXHRcdHN0cnVjdCBleHQ0X2V4dF9wYXRoICpwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgMCwgTlVMTCwgMCk7XG4rXG4rXHRcdGlmIChJU19FUlIocGF0aCkpIHtcbitcdFx0XHRlcnJvciA9IFBUUl9FUlIocGF0aCk7XG4rXHRcdFx0Z290byByZWNvdmVyeTtcbitcdFx0fVxuK1x0XHRzdHJ1Y3QgZXh0NF9leHRlbnQgbmV3ZXg7XG4rXG4rXHRcdG5ld2V4LmVlX2Jsb2NrID0gY3B1X3RvX2xlMzIoMCk7XG4rXHRcdG5ld2V4LmVlX2xlbiA9IGNwdV90b19sZTE2KDEpO1xuK1x0XHRleHQ0X2V4dF9zdG9yZV9wYmxvY2soXHUwMDI2bmV3ZXgsIGJsb2NrKTtcbitcdFx0cGF0aCA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgXHUwMDI2bmV3ZXgsIDApO1xuK1x0XHRpZiAoSVNfRVJSKHBhdGgpKSB7XG4rXHRcdFx0ZXJyb3IgPSBQVFJfRVJSKHBhdGgpO1xuK1x0XHRcdGlmIChlcnJvciA9PSAtRURRVU9UIHx8IGVycm9yID09IC1FTk9TUEMpXG4rXHRcdFx0XHRnb3RvIHJlY292ZXJ5O1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGV4dDRfZnJlZV9leHRfcGF0aChwYXRoKTtcbitcdFx0fVxuK1x0fSBlbHNlIHtcbitcdFx0RVhUNF9JKGlub2RlKS1cdTAwM2VpX2RhdGFbMF0gPSBjcHVfdG9fbGUzMihibG9jayk7XG4rXHR9XG4rXHRlcnJvciA9IGV4dDRfeGF0dHJfaWJvZHlfZmluZChpbm9kZSwgXHUwMDI2aSwgXHUwMDI2aXMpO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRnb3RvIHJlY292ZXJ5O1xuK1x0aWYgKCFpcy5zLm5vdF9mb3VuZClcbitcdFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGUsIGlub2RlLCBcdTAwMjZpLCBcdTAwMjZpcyk7XG4rcmVjb3Zlcnk6XG4rXHRpZiAoZXJyb3IpIHtcbitcdFx0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIGJsb2NrKTtcbitcdFx0ZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTtcbitcdFx0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBOVUxMLCBibG9jaywgbGVuLCAwKTtcbitcdFx0bWVtY3B5KCh2b2lkICopcmF3X2lub2RlLVx1MDAzZWlfYmxvY2ssIGlfYmxvY2tfYnVmLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcbitcdFx0bWVtY3B5KGVpLVx1MDAzZWlfZGF0YSwgcmF3X2lub2RlLVx1MDAzZWlfYmxvY2ssIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuK1x0XHRtZW1jcHkoaGVhZGVyLCB4YXR0cl9idWYsIHhhdHRyX3NpemUpO1xuK1x0XHRleHQ0X2NsZWFyX2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUyk7XG4rXHR9IGVsc2Uge1xuK1x0XHRleHQ0X2NsZWFyX2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpO1xuK1x0XHRpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4rXHRcdFx0aV9zaXplX3dyaXRlKGlub2RlLCBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplKTtcbitcdFx0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZGlza3NpemUgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplO1xuK1x0XHR9XG4rXHRcdGdldF9iaChpcy5pbG9jLmJoKTtcbitcdFx0ZXJyb3IgPSBleHQ0X21hcmtfaWxvY19kaXJ0eShoYW5kbGUsIGlub2RlLCBcdTAwMjZpcy5pbG9jKTtcbitcdFx0RVhUNF9JKGlub2RlKS1cdTAwM2VpX2lubGluZV9vZmYgPSAwO1xuK1x0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfaW5saW5lX3NpemUgPSAwO1xuK1x0XHRleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XG4rXHRcdGJyZWxzZShiaCk7XG4rXHR9XG4rb3V0OlxuK1x0YnJlbHNlKGlzLmlsb2MuYmgpO1xuK1x0dXBfd3JpdGUoXHUwMDI2ZWktXHUwMDNlaV9kYXRhX3NlbSk7XG4rXHRrZnJlZShpX2Jsb2NrX2J1Zik7XG4rXHRrZnJlZSh4YXR0cl9idWYpO1xuK1x0cmV0dXJuIGVycm9yO1xuK2Vycm9yOlxuK1x0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIGJsb2NrKTtcbitcdGV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7XG4rXHRleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIGJsb2NrLCBsZW4sIDApO1xuK1x0dXBfd3JpdGUoXHUwMDI2ZWktXHUwMDNlaV9kYXRhX3NlbSk7XG4rXHRrZnJlZShpX2Jsb2NrX2J1Zik7XG4rXHRrZnJlZSh4YXR0cl9idWYpO1xuK1x0cmV0dXJuIGVycm9yO1xuIH1cbiBcbiBzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSxcbkBAIC0xMDkzLDkgKzExOTgsMTIgQEAgc3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXG4ge1xuIFx0aW50IGVycm9yO1xuIFx0dm9pZCAqYnVmID0gTlVMTDtcbi1cdHN0cnVjdCBidWZmZXJfaGVhZCAqZGF0YV9iaCA9IE5VTEw7XG4tXHRzdHJ1Y3QgZXh0NF9tYXBfYmxvY2tzIG1hcDtcbitcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMO1xuIFx0aW50IGlubGluZV9zaXplO1xuK1x0ZXh0NF9mc2Jsa190IG5ld2Jsb2NrID0gMDtcbitcdHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fcmVxdWVzdCBhcjtcbitcdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4rXHR1bnNpZ25lZCBpbnQgYWxsb2NhdGVkX2Jsb2NrO1xuIFxuIFx0aW5saW5lX3NpemUgPSBleHQ0X2dldF9pbmxpbmVfc2l6ZShpbm9kZSk7XG4gXHRidWYgPSBrbWFsbG9jKGlubGluZV9zaXplLCBHRlBfTk9GUyk7XG5AQCAtMTEyMCw2MyArMTIyOCw2MiBAQCBzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSxcbiBcdFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdGVycm9yID0gZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGUsIGlub2RlKTtcbi1cdGlmIChlcnJvcilcbi1cdFx0Z290byBvdXQ7XG4tXG4tXHRtYXAubV9sYmxrID0gMDtcbi1cdG1hcC5tX2xlbiA9IDE7XG4tXHRtYXAubV9mbGFncyA9IDA7XG4tXHRlcnJvciA9IGV4dDRfbWFwX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBcdTAwMjZtYXAsIEVYVDRfR0VUX0JMT0NLU19DUkVBVEUpO1xuK1x0bWVtc2V0KFx1MDAyNmFyLCAwLCBzaXplb2YoYXIpKTtcbitcdGFyLmlub2RlID0gaW5vZGU7XG4rXHRhci5sb2dpY2FsID0gMDtcbitcdGFyLmxlbiA9IDE7XG4rXHRpZiAoU19JU1JFRyhpbm9kZS1cdTAwM2VpX21vZGUpKVxuK1x0XHRhci5mbGFncyA9IEVYVDRfTUJfSElOVF9EQVRBO1xuK1x0ZWxzZVxuK1x0XHRhci5mbGFncyA9IDA7XG4rXHRuZXdibG9jayA9IGV4dDRfbWJfbmV3X2Jsb2NrcyhoYW5kbGUsIFx1MDAyNmFyLCBcdTAwMjZlcnJvcik7XG4gXHRpZiAoZXJyb3IgXHUwMDNjIDApXG4tXHRcdGdvdG8gb3V0X3Jlc3RvcmU7XG4tXHRpZiAoIShtYXAubV9mbGFncyBcdTAwMjYgRVhUNF9NQVBfTUFQUEVEKSkge1xuLVx0XHRlcnJvciA9IC1FSU87XG4tXHRcdGdvdG8gb3V0X3Jlc3RvcmU7XG4tXHR9XG4tXG4tXHRkYXRhX2JoID0gc2JfZ2V0YmxrKGlub2RlLVx1MDAzZWlfc2IsIG1hcC5tX3BibGspO1xuLVx0aWYgKCFkYXRhX2JoKSB7XG4rXHRcdGdvdG8gb3V0O1xuK1x0YWxsb2NhdGVkX2Jsb2NrID0gRVhUNF9DMkIoc2JpLCBhci5sZW4pO1xuK1x0YmggPSBzYl9nZXRibGsoaW5vZGUtXHUwMDNlaV9zYiwgbmV3YmxvY2spO1xuK1x0aWYgKCFiaCkge1xuIFx0XHRlcnJvciA9IC1FTk9NRU07XG4tXHRcdGdvdG8gb3V0X3Jlc3RvcmU7XG4rXHRcdGdvdG8gb3V0X2JoO1xuIFx0fVxuIFxuLVx0bG9ja19idWZmZXIoZGF0YV9iaCk7XG4tXHRlcnJvciA9IGV4dDRfam91cm5hbF9nZXRfY3JlYXRlX2FjY2VzcyhoYW5kbGUsIGlub2RlLVx1MDAzZWlfc2IsIGRhdGFfYmgsXG4rXHRsb2NrX2J1ZmZlcihiaCk7XG4rXHRlcnJvciA9IGV4dDRfam91cm5hbF9nZXRfY3JlYXRlX2FjY2VzcyhoYW5kbGUsIGlub2RlLVx1MDAzZWlfc2IsIGJoLFxuIFx0XHRcdFx0XHQgICAgICAgRVhUNF9KVFJfTk9ORSk7XG4gXHRpZiAoZXJyb3IpIHtcbi1cdFx0dW5sb2NrX2J1ZmZlcihkYXRhX2JoKTtcbitcdFx0dW5sb2NrX2J1ZmZlcihiaCk7XG4gXHRcdGVycm9yID0gLUVJTztcbi1cdFx0Z290byBvdXRfcmVzdG9yZTtcbitcdFx0Z290byBvdXRfYmg7XG4gXHR9XG4tXHRtZW1zZXQoZGF0YV9iaC1cdTAwM2ViX2RhdGEsIDAsIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUpO1xuK1x0bWVtc2V0KGJoLVx1MDAzZWJfZGF0YSwgMCwgaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZSk7XG4gXG4gXHRpZiAoIVNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuLVx0XHRtZW1jcHkoZGF0YV9iaC1cdTAwM2ViX2RhdGEsIGJ1ZiwgaW5saW5lX3NpemUpO1xuLVx0XHRzZXRfYnVmZmVyX3VwdG9kYXRlKGRhdGFfYmgpO1xuLVx0XHR1bmxvY2tfYnVmZmVyKGRhdGFfYmgpO1xuK1x0XHRtZW1jcHkoYmgtXHUwMDNlYl9kYXRhLCBidWYsIGlubGluZV9zaXplKTtcbitcdFx0c2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7XG4rXHRcdHVubG9ja19idWZmZXIoYmgpO1xuIFx0XHRlcnJvciA9IGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSxcbi1cdFx0XHRcdFx0XHQgICBpbm9kZSwgZGF0YV9iaCk7XG4rXHRcdFx0XHRcdFx0ICAgaW5vZGUsIGJoKTtcbiBcdH0gZWxzZSB7XG4tXHRcdHVubG9ja19idWZmZXIoZGF0YV9iaCk7XG4tXHRcdGlub2RlLVx1MDAzZWlfc2l6ZSA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemU7XG4tXHRcdGlfc2l6ZV93cml0ZShpbm9kZSwgaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZSk7XG4tXHRcdEVYVDRfSShpbm9kZSktXHUwMDNlaV9kaXNrc2l6ZSA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemU7XG4tXG4tXHRcdGVycm9yID0gZXh0NF9pbml0X2RpcmJsb2NrKGhhbmRsZSwgaW5vZGUsIGRhdGFfYmgsXG4rXHRcdHVubG9ja19idWZmZXIoYmgpO1xuK1x0XHRlcnJvciA9IGV4dDRfaW5pdF9kaXJibG9jayhoYW5kbGUsIGlub2RlLCBiaCxcbiBcdFx0XHQgIGxlMzJfdG9fY3B1KCgoc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKilidWYpLVx1MDAzZWlub2RlKSxcbiBcdFx0XHQgIGJ1ZiArIEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFLFxuIFx0XHRcdCAgaW5saW5lX3NpemUgLSBFWFQ0X0lOTElORV9ET1RET1RfU0laRSk7XG4tXHRcdGlmICghZXJyb3IpXG4tXHRcdFx0ZXJyb3IgPSBleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7XG4gXHR9XG4rb3V0X2JoOlxuK1x0aWYgKGVycm9yKSB7XG4rXHRcdGlmIChiaClcbitcdFx0XHRleHQ0X2ZvcmdldChoYW5kbGUsIDAsIGlub2RlLCBiaCwgbmV3YmxvY2spO1xuK1x0XHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7XG4gXG4tb3V0X3Jlc3RvcmU6XG4tXHRpZiAoZXJyb3IpXG4tXHRcdGV4dDRfcmVzdG9yZV9pbmxpbmVfZGF0YShoYW5kbGUsIGlub2RlLCBpbG9jLCBidWYsIGlubGluZV9zaXplKTtcbi1cbitcdFx0ZG93bl93cml0ZShcdTAwMjZlaS1cdTAwM2VpX2RhdGFfc2VtKTtcbitcdFx0ZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTtcbitcdFx0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBOVUxMLCBuZXdibG9jaywgYWxsb2NhdGVkX2Jsb2NrLCAwKTtcbitcdFx0dXBfd3JpdGUoXHUwMDI2ZWktXHUwMDNlaV9kYXRhX3NlbSk7XG4rXHR9IGVsc2Uge1xuK1x0XHRlcnJvciA9IGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrKGhhbmRsZSwgaW5vZGUsXG4rXHRcdFx0XHRuZXdibG9jaywgYWxsb2NhdGVkX2Jsb2NrLCBiaCk7XG4rXHR9XG4gb3V0OlxuLVx0YnJlbHNlKGRhdGFfYmgpO1xuIFx0a2ZyZWUoYnVmKTtcbiBcdHJldHVybiBlcnJvcjtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjo1MzoyNy43MzM2NjU1MjhaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTEyMTQzMzQ1OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipLTVNBTiBGdXp6aW5nIERldGVybWluYXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhc3Nlc3MgdGhpcyBwYXRjaCDigJMgZG9lcyBpdCB3YXJyYW50IGl0cyBvd24gS01TQU4gZnV6emluZyBzZXNzaW9uPyBCZWZvcmUgSSBjb21taXQgdG8gdGhhdCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgYWN0dWFsbHkgY2hhbmdlZC4gQ29udGV4dCBpcyBrZXksIHNvIEknbGwgc3RhcnQgYnkgdW5kZXJzdGFuZGluZyB0aGUgcGF0Y2gncyBwdXJwb3NlIGFuZCB0aGUgb3ZlcmFsbCBtb2RpZmljYXRpb25zIGl0IG1ha2VzLlxuXG5TcGVjaWZpY2FsbHksIEkgbmVlZCB0byBzZWUgd2hhdCdzIHRvdWNoZWQgaW4gYGZzL2V4dDQvaW5saW5lLmNgLiBUaGF0IGZpbGUgaXMgd2hlcmUgSSBleHBlY3QgdGhlIGNvcmUgb2YgdGhpcyBpbnRlcmFjdGlvbiB0byBiZS4gTm93LCBsZXQncyB6ZXJvIGluIG9uIGBmcy9leHQ0L2lubGluZS5jYCBhbmQgc3BlY2lmaWNhbGx5IGZvY3VzIG9uIGFuZCByZWFkIGFyb3VuZCB0aGUgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2tgIGZ1bmN0aW9uLiBUaGF0J3MgYSBjcml0aWNhbCBwb2ludCBmb3IgaW5saW5lIGRhdGEgYW5kIGlzIHdoZXJlIEkgZXhwZWN0IHRoZSBoZWFydCBvZiBhbnkgcG90ZW50aWFsIEtNU0FOIGlzc3VlcyB0byByZXNpZGUuIE9uY2UgSSB1bmRlcnN0YW5kIHRoZSBjb2RlIHRoYXQgaXMgdGhlcmUsIEkgY2FuIGRlY2lkZSBvbiB0aGUgbmVlZCBmb3IgZGVkaWNhdGVkIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MDAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjUzOjM4Ljk0ODAwMjg4NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDI4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC9pbmxpbmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDYwLFxuICBcIkxpbmVDb3VudFwiOiA5MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDYwOlxcdFxcdFxcdHJldHVybiAtRU5PU1BDO1xcbjEwNjE6XFx0XFxuMTA2MjpcXHRcXHRyZXQgPSBleHQ0X3VwZGF0ZV9pbmxpbmVfZGF0YShoYW5kbGUsIGRpcixcXG4xMDYzOlxcdFxcdFxcdFxcdFxcdCAgICAgIG5ld19zaXplICsgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XFxuMTA2NDpcXHRcXHRpZiAocmV0KVxcbjEwNjU6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xMDY2OlxcdFxcbjEwNjc6XFx0XFx0ZXh0NF91cGRhdGVfZmluYWxfZGUoZXh0NF9nZXRfaW5saW5lX3hhdHRyX3BvcyhkaXIsIGlsb2MpLCBvbGRfc2l6ZSxcXG4xMDY4OlxcdFxcdFxcdFxcdCAgICAgRVhUNF9JKGRpciktXFx1MDAzZWlfaW5saW5lX3NpemUgLVxcbjEwNjk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0RVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XFxuMTA3MDpcXHRcXHRkaXItXFx1MDAzZWlfc2l6ZSA9IEVYVDRfSShkaXIpLVxcdTAwM2VpX2Rpc2tzaXplID0gRVhUNF9JKGRpciktXFx1MDAzZWlfaW5saW5lX3NpemU7XFxuMTA3MTpcXHRcXHRyZXR1cm4gMDtcXG4xMDcyOlxcdH1cXG4xMDczOlxcdFxcbjEwNzQ6XFx0c3RhdGljIGludCBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2ZzYmxrX3QgYmxvY2ssXFxuMTA3NTpcXHRcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgbGVuLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxcbjEwNzY6XFx0e1xcbjEwNzc6XFx0XFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpO1xcbjEwNzg6XFx0XFx0c3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCBpcyA9IHtcXG4xMDc5OlxcdFxcdFxcdC5zID0geyAubm90X2ZvdW5kID0gMCwgfSxcXG4xMDgwOlxcdFxcdH07XFxuMTA4MTpcXHRcXHRzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvIGkgPSB7XFxuMTA4MjpcXHRcXHRcXHQubmFtZV9pbmRleCA9IEVYVDRfWEFUVFJfSU5ERVhfU1lTVEVNLFxcbjEwODM6XFx0XFx0XFx0Lm5hbWUgPSBFWFQ0X1hBVFRSX1NZU1RFTV9EQVRBLFxcbjEwODQ6XFx0XFx0XFx0LnZhbHVlID0gTlVMTCxcXG4xMDg1OlxcdFxcdFxcdC52YWx1ZV9sZW4gPSAwLFxcbjEwODY6XFx0XFx0fTtcXG4xMDg3OlxcdFxcdGludCBlcnJvcjtcXG4xMDg4OlxcdFxcdHZvaWQgKmlfYmxvY2tfYnVmID0gTlVMTDtcXG4xMDg5OlxcdFxcdHZvaWQgKnhhdHRyX2J1ZiA9IE5VTEw7XFxuMTA5MDpcXHRcXHR2b2lkICpoZWFkZXIgPSBOVUxMO1xcbjEwOTE6XFx0XFx0dm9pZCAqdGFpbCA9IE5VTEw7XFxuMTA5MjpcXHRcXHRpbnQgeGF0dHJfc2l6ZTtcXG4xMDkzOlxcdFxcdHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGU7XFxuMTA5NDpcXHRcXG4xMDk1OlxcdFxcdGlfYmxvY2tfYnVmID0ga21hbGxvYyhFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFLCBHRlBfTk9GUyk7XFxuMTA5NjpcXHRcXHRpZiAoIWlfYmxvY2tfYnVmKSB7XFxuMTA5NzpcXHRcXHRcXHRlcnJvciA9IC1FTk9NRU07XFxuMTA5ODpcXHRcXHRcXHRkb3duX3dyaXRlKFxcdTAwMjZlaS1cXHUwMDNlaV9kYXRhX3NlbSk7XFxuMTA5OTpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjExMDA6XFx0XFx0fVxcbjExMDE6XFx0XFx0ZG93bl93cml0ZShcXHUwMDI2ZWktXFx1MDAzZWlfZGF0YV9zZW0pO1xcbjExMDI6XFx0XFx0ZXJyb3IgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFxcdTAwMjZpcy5pbG9jKTtcXG4xMTAzOlxcdFxcdGlmIChlcnJvcilcXG4xMTA0OlxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuMTEwNTpcXHRcXHRyYXdfaW5vZGUgPSBleHQ0X3Jhd19pbm9kZShcXHUwMDI2aXMuaWxvYyk7XFxuMTEwNjpcXHRcXHRoZWFkZXIgPSBJSERSKGlub2RlLCByYXdfaW5vZGUpO1xcbjExMDc6XFx0XFx0dGFpbCA9IElUQUlMKGlub2RlLCByYXdfaW5vZGUpO1xcbjExMDg6XFx0XFx0eGF0dHJfc2l6ZSA9IHRhaWwgLSBoZWFkZXI7XFxuMTEwOTpcXHRcXHR4YXR0cl9idWYgPSBrbWFsbG9jKHhhdHRyX3NpemUsIEdGUF9OT0ZTKTtcXG4xMTEwOlxcdFxcdGlmICgheGF0dHJfYnVmKSB7XFxuMTExMTpcXHRcXHRcXHRlcnJvciA9IC1FTk9NRU07XFxuMTExMjpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjExMTM6XFx0XFx0fVxcbjExMTQ6XFx0XFx0QlVGRkVSX1RSQUNFKGlzLmlsb2MuYmgsIFxcXCJnZXRfd3JpdGVfYWNjZXNzXFxcIik7XFxuMTExNTpcXHRcXHRlcnJvciA9IGV4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgaW5vZGUtXFx1MDAzZWlfc2IsIGlzLmlsb2MuYmgsIEVYVDRfSlRSX05PTkUpO1xcbjExMTY6XFx0XFx0aWYgKGVycm9yKSB7XFxuMTExNzpcXHRcXHRcXHRleHQ0X2ZvcmdldChoYW5kbGUsIDAsIGlub2RlLCBiaCwgYmxvY2spO1xcbjExMTg6XFx0XFx0XFx0ZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTtcXG4xMTE5OlxcdFxcdFxcdGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgYmxvY2ssIGxlbiwgMCk7XFxuMTEyMDpcXHRcXHRcXHRnb3RvIG91dDtcXG4xMTIxOlxcdFxcdH1cXG4xMTIyOlxcdFxcdG1lbWNweShpX2Jsb2NrX2J1ZiwgKHZvaWQgKilyYXdfaW5vZGUtXFx1MDAzZWlfYmxvY2ssIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xcbjExMjM6XFx0XFx0bWVtc2V0KCh2b2lkICopcmF3X2lub2RlLVxcdTAwM2VpX2Jsb2NrLCAwLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcXG4xMTI0OlxcdFxcdG1lbXNldChlaS1cXHUwMDNlaV9kYXRhLCAwLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcXG4xMTI1OlxcdFxcdG1lbWNweSh4YXR0cl9idWYsIGhlYWRlciwgeGF0dHJfc2l6ZSk7XFxuMTEyNjpcXHRcXHRpZiAoZXh0NF9oYXNfZmVhdHVyZV9leHRlbnRzKGlub2RlLVxcdTAwM2VpX3NiKSBcXHUwMDI2XFx1MDAyNlxcbjExMjc6XFx0XFx0XFx0KFNfSVNESVIoaW5vZGUtXFx1MDAzZWlfbW9kZSkgfHwgU19JU1JFRyhpbm9kZS1cXHUwMDNlaV9tb2RlKSB8fCBTX0lTTE5LKGlub2RlLVxcdTAwM2VpX21vZGUpKSkge1xcbjExMjg6XFx0XFx0XFx0ZXh0NF9zZXRfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKTtcXG4xMTI5OlxcdFxcdFxcdGV4dDRfZXh0X3RyZWVfaW5pdChoYW5kbGUsIGlub2RlKTtcXG4xMTMwOlxcdFxcdFxcdHN0cnVjdCBleHQ0X2V4dF9wYXRoICpwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgMCwgTlVMTCwgMCk7XFxuMTEzMTpcXHRcXG4xMTMyOlxcdFxcdFxcdGlmIChJU19FUlIocGF0aCkpIHtcXG4xMTMzOlxcdFxcdFxcdFxcdGVycm9yID0gUFRSX0VSUihwYXRoKTtcXG4xMTM0OlxcdFxcdFxcdFxcdGdvdG8gcmVjb3Zlcnk7XFxuMTEzNTpcXHRcXHRcXHR9XFxuMTEzNjpcXHRcXHRcXHRzdHJ1Y3QgZXh0NF9leHRlbnQgbmV3ZXg7XFxuMTEzNzpcXHRcXG4xMTM4OlxcdFxcdFxcdG5ld2V4LmVlX2Jsb2NrID0gY3B1X3RvX2xlMzIoMCk7XFxuMTEzOTpcXHRcXHRcXHRuZXdleC5lZV9sZW4gPSBjcHVfdG9fbGUxNigxKTtcXG4xMTQwOlxcdFxcdFxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhcXHUwMDI2bmV3ZXgsIGJsb2NrKTtcXG4xMTQxOlxcdFxcdFxcdHBhdGggPSBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgaW5vZGUsIHBhdGgsIFxcdTAwMjZuZXdleCwgMCk7XFxuMTE0MjpcXHRcXHRcXHRpZiAoSVNfRVJSKHBhdGgpKSB7XFxuMTE0MzpcXHRcXHRcXHRcXHRlcnJvciA9IFBUUl9FUlIocGF0aCk7XFxuMTE0NDpcXHRcXHRcXHRcXHRpZiAoZXJyb3IgPT0gLUVEUVVPVCB8fCBlcnJvciA9PSAtRU5PU1BDKVxcbjExNDU6XFx0XFx0XFx0XFx0XFx0Z290byByZWNvdmVyeTtcXG4xMTQ2OlxcdFxcdFxcdH0gZWxzZSB7XFxuMTE0NzpcXHRcXHRcXHRcXHRleHQ0X2ZyZWVfZXh0X3BhdGgocGF0aCk7XFxuMTE0ODpcXHRcXHRcXHR9XFxuMTE0OTpcXHRcXHR9IGVsc2Uge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjo1MzozOC45NDgzNTIwMzVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk5Nzc4MDMyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIERhdGEgU3RyZWFtOiBBIFRhcmdldGVkIFJldmlldyoqXG5cbk9rYXksIHRoZSBpbml0aWFsIHNjYW4gc3VnZ2VzdHMgYSBwb3RlbnRpYWwgYXJlYSBvZiBpbnRlcmVzdCB3aXRoaW4gdGhlIGJyb2FkZXIgZGF0YXNldC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBkZWVwZXIgaW50byBhIHNwZWNpZmljLCBwb3RlbnRpYWxseSByZWxldmFudCBzZWdtZW50LiBSYXRoZXIgdGhhbiByZWx5aW5nIHNvbGVseSBvbiB0aGUgaGlnaC1sZXZlbCBzdW1tYXJpZXMgb3Igc3RhdGlzdGljYWwgb3ZlcnZpZXdzIEkndmUgYWxyZWFkeSBnZW5lcmF0ZWQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIHRoZSBkYXRhIGluIG1vcmUgZGV0YWlsLiBMZXQncyBwaW5wb2ludCBsaW5lcyAxMTUwIHRocm91Z2ggMTI1MC4gVGhpcyB0YXJnZXRlZCBhcHByb2FjaCBhbGxvd3MgbWUgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoaXMgcGFydGljdWxhciByZWdpb24sIGxvb2tpbmcgZm9yIHN1YnRsZSBwYXR0ZXJucywgb3V0bGllcnMsIG9yIGFub21hbGllcyB0aGF0IGEgYnJvYWRlciBzd2VlcCBtaWdodCBoYXZlIG1pc3NlZC4gRXhhbWluaW5nIHRoaXMgc3Vic2V0IGRpcmVjdGx5IHdpbGwgcHJvdmlkZSBhIG1vcmUgZ3JhbnVsYXIgdmlldyB0byBpbmZvcm0gdGhlIG5leHQgc3RhZ2Ugb2YgbXkgYW5hbHlzaXMuIFRoZSBjb250ZXh0IG9mIHRoZXNlIGxpbmVzIG1pZ2h0IGJlIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgd2hhdGV2ZXIgSSBhbSB0cnlpbmcgdG8gdW5kZXJzdGFuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ2NCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6NTM6NDAuOTQ2MTM1NjI0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L2lubGluZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNTAsXG4gIFwiTGluZUNvdW50XCI6IDkwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNTA6XFx0XFx0XFx0RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9kYXRhWzBdID0gY3B1X3RvX2xlMzIoYmxvY2spO1xcbjExNTE6XFx0XFx0fVxcbjExNTI6XFx0XFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2lib2R5X2ZpbmQoaW5vZGUsIFxcdTAwMjZpLCBcXHUwMDI2aXMpO1xcbjExNTM6XFx0XFx0aWYgKGVycm9yKVxcbjExNTQ6XFx0XFx0XFx0Z290byByZWNvdmVyeTtcXG4xMTU1OlxcdFxcdGlmICghaXMucy5ub3RfZm91bmQpXFxuMTE1NjpcXHRcXHRcXHRlcnJvciA9IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZSwgaW5vZGUsIFxcdTAwMjZpLCBcXHUwMDI2aXMpO1xcbjExNTc6XFx0cmVjb3Zlcnk6XFxuMTE1ODpcXHRcXHRpZiAoZXJyb3IpIHtcXG4xMTU5OlxcdFxcdFxcdGV4dDRfZm9yZ2V0KGhhbmRsZSwgMCwgaW5vZGUsIGJoLCBibG9jayk7XFxuMTE2MDpcXHRcXHRcXHRleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpO1xcbjExNjE6XFx0XFx0XFx0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBOVUxMLCBibG9jaywgbGVuLCAwKTtcXG4xMTYyOlxcdFxcdFxcdG1lbWNweSgodm9pZCAqKXJhd19pbm9kZS1cXHUwMDNlaV9ibG9jaywgaV9ibG9ja19idWYsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xcbjExNjM6XFx0XFx0XFx0bWVtY3B5KGVpLVxcdTAwM2VpX2RhdGEsIHJhd19pbm9kZS1cXHUwMDNlaV9ibG9jaywgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XFxuMTE2NDpcXHRcXHRcXHRtZW1jcHkoaGVhZGVyLCB4YXR0cl9idWYsIHhhdHRyX3NpemUpO1xcbjExNjU6XFx0XFx0XFx0ZXh0NF9jbGVhcl9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpO1xcbjExNjY6XFx0XFx0fSBlbHNlIHtcXG4xMTY3OlxcdFxcdFxcdGV4dDRfY2xlYXJfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9JTkxJTkVfREFUQSk7XFxuMTE2ODpcXHRcXHRcXHRpZiAoU19JU0RJUihpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbjExNjk6XFx0XFx0XFx0XFx0aV9zaXplX3dyaXRlKGlub2RlLCBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemUpO1xcbjExNzA6XFx0XFx0XFx0XFx0RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9kaXNrc2l6ZSA9IGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZTtcXG4xMTcxOlxcdFxcdFxcdH1cXG4xMTcyOlxcdFxcdFxcdGdldF9iaChpcy5pbG9jLmJoKTtcXG4xMTczOlxcdFxcdFxcdGVycm9yID0gZXh0NF9tYXJrX2lsb2NfZGlydHkoaGFuZGxlLCBpbm9kZSwgXFx1MDAyNmlzLmlsb2MpO1xcbjExNzQ6XFx0XFx0XFx0RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9pbmxpbmVfb2ZmID0gMDtcXG4xMTc1OlxcdFxcdFxcdEVYVDRfSShpbm9kZSktXFx1MDAzZWlfaW5saW5lX3NpemUgPSAwO1xcbjExNzY6XFx0XFx0XFx0ZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpO1xcbjExNzc6XFx0XFx0XFx0YnJlbHNlKGJoKTtcXG4xMTc4OlxcdFxcdH1cXG4xMTc5OlxcdG91dDpcXG4xMTgwOlxcdFxcdGJyZWxzZShpcy5pbG9jLmJoKTtcXG4xMTgxOlxcdFxcdHVwX3dyaXRlKFxcdTAwMjZlaS1cXHUwMDNlaV9kYXRhX3NlbSk7XFxuMTE4MjpcXHRcXHRrZnJlZShpX2Jsb2NrX2J1Zik7XFxuMTE4MzpcXHRcXHRrZnJlZSh4YXR0cl9idWYpO1xcbjExODQ6XFx0XFx0cmV0dXJuIGVycm9yO1xcbjExODU6XFx0ZXJyb3I6XFxuMTE4NjpcXHRcXHRleHQ0X2ZvcmdldChoYW5kbGUsIDAsIGlub2RlLCBiaCwgYmxvY2spO1xcbjExODc6XFx0XFx0ZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTtcXG4xMTg4OlxcdFxcdGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgYmxvY2ssIGxlbiwgMCk7XFxuMTE4OTpcXHRcXHR1cF93cml0ZShcXHUwMDI2ZWktXFx1MDAzZWlfZGF0YV9zZW0pO1xcbjExOTA6XFx0XFx0a2ZyZWUoaV9ibG9ja19idWYpO1xcbjExOTE6XFx0XFx0a2ZyZWUoeGF0dHJfYnVmKTtcXG4xMTkyOlxcdFxcdHJldHVybiBlcnJvcjtcXG4xMTkzOlxcdH1cXG4xMTk0OlxcdFxcbjExOTU6XFx0c3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXFxuMTE5NjpcXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbjExOTc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGV4dDRfaWxvYyAqaWxvYylcXG4xMTk4OlxcdHtcXG4xMTk5OlxcdFxcdGludCBlcnJvcjtcXG4xMjAwOlxcdFxcdHZvaWQgKmJ1ZiA9IE5VTEw7XFxuMTIwMTpcXHRcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDtcXG4xMjAyOlxcdFxcdGludCBpbmxpbmVfc2l6ZTtcXG4xMjAzOlxcdFxcdGV4dDRfZnNibGtfdCBuZXdibG9jayA9IDA7XFxuMTIwNDpcXHRcXHRzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX3JlcXVlc3QgYXI7XFxuMTIwNTpcXHRcXHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4xMjA2OlxcdFxcdHVuc2lnbmVkIGludCBhbGxvY2F0ZWRfYmxvY2s7XFxuMTIwNzpcXHRcXG4xMjA4OlxcdFxcdGlubGluZV9zaXplID0gZXh0NF9nZXRfaW5saW5lX3NpemUoaW5vZGUpO1xcbjEyMDk6XFx0XFx0YnVmID0ga21hbGxvYyhpbmxpbmVfc2l6ZSwgR0ZQX05PRlMpO1xcbjEyMTA6XFx0XFx0aWYgKCFidWYpIHtcXG4xMjExOlxcdFxcdFxcdGVycm9yID0gLUVOT01FTTtcXG4xMjEyOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjEyMTM6XFx0XFx0fVxcbjEyMTQ6XFx0XFxuMTIxNTpcXHRcXHRlcnJvciA9IGV4dDRfcmVhZF9pbmxpbmVfZGF0YShpbm9kZSwgYnVmLCBpbmxpbmVfc2l6ZSwgaWxvYyk7XFxuMTIxNjpcXHRcXHRpZiAoZXJyb3IgXFx1MDAzYyAwKVxcbjEyMTc6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTIxODpcXHRcXG4xMjE5OlxcdFxcdC8qXFxuMTIyMDpcXHRcXHQgKiBNYWtlIHN1cmUgdGhlIGlubGluZSBkaXJlY3RvcnkgZW50cmllcyBwYXNzIGNoZWNrcyBiZWZvcmUgd2UgdHJ5IHRvXFxuMTIyMTpcXHRcXHQgKiBjb252ZXJ0IHRoZW0sIHNvIHRoYXQgd2UgYXZvaWQgdG91Y2hpbmcgc3R1ZmYgdGhhdCBuZWVkcyBmc2NrLlxcbjEyMjI6XFx0XFx0ICovXFxuMTIyMzpcXHRcXHRpZiAoU19JU0RJUihpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbjEyMjQ6XFx0XFx0XFx0ZXJyb3IgPSBleHQ0X2NoZWNrX2FsbF9kZShpbm9kZSwgaWxvYy1cXHUwMDNlYmgsXFxuMTIyNTpcXHRcXHRcXHRcXHRcXHRcXHRidWYgKyBFWFQ0X0lOTElORV9ET1RET1RfU0laRSxcXG4xMjI2OlxcdFxcdFxcdFxcdFxcdFxcdGlubGluZV9zaXplIC0gRVhUNF9JTkxJTkVfRE9URE9UX1NJWkUpO1xcbjEyMjc6XFx0XFx0XFx0aWYgKGVycm9yKVxcbjEyMjg6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTIyOTpcXHRcXHR9XFxuMTIzMDpcXHRcXG4xMjMxOlxcdFxcdG1lbXNldChcXHUwMDI2YXIsIDAsIHNpemVvZihhcikpO1xcbjEyMzI6XFx0XFx0YXIuaW5vZGUgPSBpbm9kZTtcXG4xMjMzOlxcdFxcdGFyLmxvZ2ljYWwgPSAwO1xcbjEyMzQ6XFx0XFx0YXIubGVuID0gMTtcXG4xMjM1OlxcdFxcdGlmIChTX0lTUkVHKGlub2RlLVxcdTAwM2VpX21vZGUpKVxcbjEyMzY6XFx0XFx0XFx0YXIuZmxhZ3MgPSBFWFQ0X01CX0hJTlRfREFUQTtcXG4xMjM3OlxcdFxcdGVsc2VcXG4xMjM4OlxcdFxcdFxcdGFyLmZsYWdzID0gMDtcXG4xMjM5OlxcdFxcdG5ld2Jsb2NrID0gZXh0NF9tYl9uZXdfYmxvY2tzKGhhbmRsZSwgXFx1MDAyNmFyLCBcXHUwMDI2ZXJyb3IpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjo1Mzo0MC45NDYyODI0MjRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMyNTgzNDcxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgQmFjayBpbnRvIGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2sqKlxuXG5BbHJpZ2h0LCBsZXQncyBjaXJjbGUgYmFjayB0byBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja2AuIEkndmUgYmVlbiBmb2N1c2luZyBvbiB0aGUgYnJvYWRlciBwaWN0dXJlLCBidXQgbm93IGl0J3MgdGltZSB0byBkcmlsbCBkb3duLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgY3J1Y2lhbCBpbiB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uLiBJJ3ZlIGdvdCBhIGdvb2QgbWVudGFsIG1vZGVsIG9mIGhvdyBpbmxpbmUgZGF0YSB3b3JrcyB3aXRoaW4gZXh0NCwgYnV0IHRoaXMgZnVuY3Rpb24gaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiAqcHJlY2lzZWx5KiBob3cgaXQgaGFuZGxlcyB0aGUgY29udmVyc2lvbiBwcm9jZXNzIHdpdGhvdXQgcmVzb3J0aW5nIHRvIGxvY2tpbmcuIFdoYXQgYXJlIHRoZSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zPyBXaGF0IGFyZSB0aGUga2V5IGFzc3VtcHRpb25zIGl0IG1ha2VzIGFib3V0IHRoZSBzdGF0ZSBvZiB0aGUgaW5vZGUgYW5kIGJsb2NrIGdyb3VwPyBXaGF0IHNwZWNpZmljIGRhdGEgc3RydWN0dXJlcyBhbmQgZmllbGRzIGFyZSBiZWluZyBtYW5pcHVsYXRlZD8gSSBuZWVkIHRvIG1ldGljdWxvdXNseSB0cmFjZSB0aGUgY29udHJvbCBmbG93LCBwYXlpbmcgYXR0ZW50aW9uIHRvIGVkZ2UgY2FzZXMuIEknbSBsb29raW5nIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBhcmVhcyB3aGVyZSBhIGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9uIGNvdWxkIGxlYWQgdG8gZGF0YSBjb3JydXB0aW9uIG9yIGluY29uc2lzdGVuY3kuIElzIHRoZSB1c2Ugb2YgdGhlIGBpX211dGV4YCBzdWZmaWNpZW50IGluIHRoaXMgY29udGV4dCwgb3IgaXMgdGhlcmUgYW5vdGhlciByYWNlIGNvbmRpdGlvbj8gQXJlIHRoZXJlIGRhdGEgaW50ZWdyaXR5IGNoZWNrcyB0aGF0IEkgbWlnaHQgYmUgb3Zlcmxvb2tpbmc/IEFueSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgam91cm5hbCB0aGF0IG5lZWQgc2NydXRpbnk/IE9rYXksIGxldCdzIHN0ZXAgdGhyb3VnaCBpdCBsaW5lIGJ5IGxpbmUsIGtlZXBpbmcgYSBrZWVuIGV5ZSBvbiB0aGUgYXRvbWljIG9wZXJhdGlvbnMgYW5kIG1lbW9yeSBiYXJyaWVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI0NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6NTM6NDMuMjcyMTE5OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE1ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC9pbmxpbmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjQwLFxuICBcIkxpbmVDb3VudFwiOiA1NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjQwOlxcdFxcdGlmIChlcnJvciBcXHUwMDNjIDApXFxuMTI0MTpcXHRcXHRcXHRnb3RvIG91dDtcXG4xMjQyOlxcdFxcdGFsbG9jYXRlZF9ibG9jayA9IEVYVDRfQzJCKHNiaSwgYXIubGVuKTtcXG4xMjQzOlxcdFxcdGJoID0gc2JfZ2V0YmxrKGlub2RlLVxcdTAwM2VpX3NiLCBuZXdibG9jayk7XFxuMTI0NDpcXHRcXHRpZiAoIWJoKSB7XFxuMTI0NTpcXHRcXHRcXHRlcnJvciA9IC1FTk9NRU07XFxuMTI0NjpcXHRcXHRcXHRnb3RvIG91dF9iaDtcXG4xMjQ3OlxcdFxcdH1cXG4xMjQ4OlxcdFxcbjEyNDk6XFx0XFx0bG9ja19idWZmZXIoYmgpO1xcbjEyNTA6XFx0XFx0ZXJyb3IgPSBleHQ0X2pvdXJuYWxfZ2V0X2NyZWF0ZV9hY2Nlc3MoaGFuZGxlLCBpbm9kZS1cXHUwMDNlaV9zYiwgYmgsXFxuMTI1MTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgRVhUNF9KVFJfTk9ORSk7XFxuMTI1MjpcXHRcXHRpZiAoZXJyb3IpIHtcXG4xMjUzOlxcdFxcdFxcdHVubG9ja19idWZmZXIoYmgpO1xcbjEyNTQ6XFx0XFx0XFx0ZXJyb3IgPSAtRUlPO1xcbjEyNTU6XFx0XFx0XFx0Z290byBvdXRfYmg7XFxuMTI1NjpcXHRcXHR9XFxuMTI1NzpcXHRcXHRtZW1zZXQoYmgtXFx1MDAzZWJfZGF0YSwgMCwgaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmxvY2tzaXplKTtcXG4xMjU4OlxcdFxcbjEyNTk6XFx0XFx0aWYgKCFTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuMTI2MDpcXHRcXHRcXHRtZW1jcHkoYmgtXFx1MDAzZWJfZGF0YSwgYnVmLCBpbmxpbmVfc2l6ZSk7XFxuMTI2MTpcXHRcXHRcXHRzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTtcXG4xMjYyOlxcdFxcdFxcdHVubG9ja19idWZmZXIoYmgpO1xcbjEyNjM6XFx0XFx0XFx0ZXJyb3IgPSBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsXFxuMTI2NDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBpbm9kZSwgYmgpO1xcbjEyNjU6XFx0XFx0fSBlbHNlIHtcXG4xMjY2OlxcdFxcdFxcdHVubG9ja19idWZmZXIoYmgpO1xcbjEyNjc6XFx0XFx0XFx0ZXJyb3IgPSBleHQ0X2luaXRfZGlyYmxvY2soaGFuZGxlLCBpbm9kZSwgYmgsXFxuMTI2ODpcXHRcXHRcXHRcXHQgIGxlMzJfdG9fY3B1KCgoc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKilidWYpLVxcdTAwM2Vpbm9kZSksXFxuMTI2OTpcXHRcXHRcXHRcXHQgIGJ1ZiArIEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFLFxcbjEyNzA6XFx0XFx0XFx0XFx0ICBpbmxpbmVfc2l6ZSAtIEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFKTtcXG4xMjcxOlxcdFxcdH1cXG4xMjcyOlxcdG91dF9iaDpcXG4xMjczOlxcdFxcdGlmIChlcnJvcikge1xcbjEyNzQ6XFx0XFx0XFx0aWYgKGJoKVxcbjEyNzU6XFx0XFx0XFx0XFx0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIG5ld2Jsb2NrKTtcXG4xMjc2OlxcdFxcdFxcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gRVhUNF9JKGlub2RlKTtcXG4xMjc3OlxcdFxcbjEyNzg6XFx0XFx0XFx0ZG93bl93cml0ZShcXHUwMDI2ZWktXFx1MDAzZWlfZGF0YV9zZW0pO1xcbjEyNzk6XFx0XFx0XFx0ZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTtcXG4xMjgwOlxcdFxcdFxcdGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgbmV3YmxvY2ssIGFsbG9jYXRlZF9ibG9jaywgMCk7XFxuMTI4MTpcXHRcXHRcXHR1cF93cml0ZShcXHUwMDI2ZWktXFx1MDAzZWlfZGF0YV9zZW0pO1xcbjEyODI6XFx0XFx0fSBlbHNlIHtcXG4xMjgzOlxcdFxcdFxcdGVycm9yID0gZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2soaGFuZGxlLCBpbm9kZSxcXG4xMjg0OlxcdFxcdFxcdFxcdFxcdG5ld2Jsb2NrLCBhbGxvY2F0ZWRfYmxvY2ssIGJoKTtcXG4xMjg1OlxcdFxcdH1cXG4xMjg2OlxcdG91dDpcXG4xMjg3OlxcdFxcdGtmcmVlKGJ1Zik7XFxuMTI4ODpcXHRcXHRyZXR1cm4gZXJyb3I7XFxuMTI4OTpcXHR9XFxuMTI5MDpcXHRcXG4xMjkxOlxcdC8qXFxuMTI5MjpcXHQgKiBUcnkgdG8gYWRkIHRoZSBuZXcgZW50cnkgdG8gdGhlIGlubGluZSBkYXRhLlxcbjEyOTM6XFx0ICogSWYgc3VjY2VlZHMsIHJldHVybiAwLiBJZiBub3QsIGV4dGVuZGVkIHRoZSBpbmxpbmUgZGlyIGFuZCBjb3BpZWQgZGF0YSB0b1xcbjEyOTQ6XFx0ICogdGhlIG5ldyBjcmVhdGVkIGJsb2NrLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjo1Mzo0My4yNzIyNjM3MloiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NzE3ODA0NjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW5saW5lIERhdGEgQ29udmVyc2lvbiBQYXRjaCBpbiBleHQ0KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duLiBJdCdzIGZvY3VzZWQgb24gcmVmYWN0b3JpbmcgdGhlIGlubGluZSBkYXRhIGNvbnZlcnNpb24gcHJvY2VzcyB3aXRoaW4gYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2tgLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIGEgc29saWQgaW1wcm92ZW1lbnQsIGJ1dCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGUgZGV0YWlscyBhcmUgc291bmQuXG5cblByZXZpb3VzbHksIHRoZSBjb2RlIHdvdWxkIGRlc3Ryb3kgdGhlIGlubGluZSBkYXRhLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGEgZGF0YSBsb3NzIGlmIGJsb2NrIGFsbG9jYXRpb24gZmFpbGVkLiBUaGlzIHBhdGNoIHRha2VzIGEgbW9yZSByZXNpbGllbnQgYXBwcm9hY2guIEl0IG5vdyBhbGxvY2F0ZXMgdGhlIGJsb2NrIHVwLWZyb250IHVzaW5nIGBleHQ0X21iX25ld19ibG9ja3NgLiBUaGVuIGl0IHdyaXRlcyB0aGUgZGF0YSB0byB0aGUgYnVmZmVyIGhlYWQsIHdoaWNoIGlzIGdvb2QgYmVjYXVzZSBpdCBlbGltaW5hdGVzIHRoYXQgY3JpdGljYWwgd2luZG93LiBUaGUgdXNlIG9mIGBtZW1zZXRgIHRvIGNsZWFyIHRoZSBidWZmZXIgYmVmb3JlIGNvcHlpbmcgaW5saW5lIGRhdGEgc2VlbXMgc2Vuc2libGUuIEFuZCwgdGhlIGBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9ja2AgZnVuY3Rpb24gbG9va3MgbGlrZSBhIGNsZWFyLCBhdG9taWMgb3BlcmF0aW9uLiBUaGUga2V5IHBvaW50IGlzIHRoYXQgaXQgc2F2ZXMgdGhlIGlub2RlJ3MgaV9ibG9jayBhbmQgeGF0dHJzIGluIG1lbW9yeSBhbmQgcmV2ZXJ0cyB0aGVtIGlmIGFueSBlcnJvciBoYXBwZW5zLCB0aGlzIGFwcGVhcnMgdG8gYmUgYSBnb29kIHdheSB0byBoYW5kbGUgdGhlIGZhaWx1cmUgY2FzZS5cblxuTm93LCBmb3IgdGhlIG1lbW9yeSBzYWZldHkgY2hlY2s6IEkgYWx3YXlzIHNjcnV0aW5pemUgbWVtb3J5IGhhbmRsaW5nIHdpdGggZXh0cmVtZSBjYXJlLlxuXG4xLiAgYGlfYmxvY2tfYnVmYDogVGhlIGBrbWFsbG9jYCBhbmQgYG1lbWNweWAgdXNhZ2UgaXMgZ29vZCwgcHJvcGVybHkgd3JpdGluZyB0byBgaV9ibG9ja19idWZgIGJlZm9yZSBhbnkgcG90ZW50aWFsIHJlYWRzLiBUaGUgcmVzdG9yZSBtZWNoYW5pc20gY29ycmVjdGx5IHVzZXMgYG1lbWNweWAgYW5kIGBrZnJlZWAgb24gcmVjb3ZlcnkuIFRoaXMgbG9va3Mgc2FmZS5cblxuMi4gIGB4YXR0cl9idWZgOiBTaW1pbGFyIHRvIGBpX2Jsb2NrX2J1ZmAsIHRoZSBhbGxvY2F0aW9uLCB3cml0ZSB3aXRoIGBtZW1jcHlgLCBhbmQgcmVjb3ZlcnkgbWVjaGFuaXNtIHNlZW0gY29ycmVjdC4gVGhlIHNpemUgY2FsY3VsYXRpb24gYHhhdHRyX3NpemUgPSB0YWlsIC0gaGVhZGVyYCBuZWVkcyBhIHF1aWNrIG1lbnRhbCB2ZXJpZmljYXRpb24sIGJ1dCBvbiB0aGUgc3VyZmFjZSwgaXQgbG9va3MgZmluZS5cblxuMy4gIGBzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9maW5kYCBhbmQgYHN0cnVjdCBleHQ0X3hhdHRyX2luZm9gOiBUaGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlc2Ugc3RydWN0cyBpcyBzdHJhaWdodGZvcndhcmQgYW5kIGV4cGVjdGVkLlxuXG40LiAgYHN0cnVjdCBleHQ0X2V4dGVudCBuZXdleGA6IFRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgZXh0ZW50IHN0cnVjdHVyZSB3aXRoIGBlZV9ibG9jayA9IGNwdV90b19sZTMyKDApYCBhbmQgYGVlX2xlbiA9IGNwdV90b19sZTE2KDEpYCBpcyBzdGFuZGFyZCBwcmFjdGljZS4gTm93IEkgc2hvdWxkIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgZXh0NF9leHRlbnRgIGFuZCBhbHNvIGBleHQ0X2V4dF9zdG9yZV9wYmxvY2tgLiBJIG5lZWQgdG8gY29uZmlybSB0aGVyZSBhcmVuJ3QgYW55IHBvdGVudGlhbCBvdmVyZmxvd3Mgb3IgdW5leHBlY3RlZCBiZWhhdmlvciBpbiB0aG9zZSBmdW5jdGlvbnMgb3Igc3RydWN0dXJlcy5cblxuT3ZlcmFsbCwgdGhlIHBhdGNoIGxvb2tzIHdlbGwtc3RydWN0dXJlZCBhbmQgZm9jdXNlcyBvbiBkYXRhIGludGVncml0eSwgd2hpY2ggaXMgYSBnb29kIHRoaW5nLiBXaXRoIHRoZSBwbGFubmVkIGZvbGxvdyB1cCBvbiB0aGUgYHN0cnVjdCBleHQ0X2V4dGVudGAgYW5kIGBleHQ0X2V4dF9zdG9yZV9wYmxvY2tgIGRldGFpbHMgSSBjYW4gc2lnbiBvZmYgb24gdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0NTIsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjo1Mzo0OS45OTAwNzE4MDNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMTgzMTE0LCJFcnJvciI6ImJhZCBleHByZXNzaW9uOiBmYXRhbDogLWUgb3B0aW9uLCAnc3RydWN0IGV4dDRfZXh0ZW50IHsnOiBVbm1hdGNoZWQgXFx7IiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGV4dDRfZXh0ZW50IHtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJiYWQgZXhwcmVzc2lvbjogZmF0YWw6IC1lIG9wdGlvbiwgJ3N0cnVjdCBleHQ0X2V4dGVudCB7JzogVW5tYXRjaGVkIFxcXFx7XCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjUzOjUwLjA3MTI2NTA5N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTQ1Mjc0ODM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipHcmVwIFN0cmF0ZWd5IGZvciBgc3RydWN0IGV4dDRfZXh0ZW50YCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHdvcmsuIEkgbmVlZCB0byBmaW5kIGFsbCBpbnN0YW5jZXMgb2YgYHN0cnVjdCBleHQ0X2V4dGVudGAgaW4gdGhlIGNvZGViYXNlLiBCdXQsIGFuZCB0aGlzIGlzIGNydWNpYWwsIEkgbmVlZCB0byBhdm9pZCBhbnkgZ290Y2hhcyB3aXRoIHJlZ2V4IGVuZ2luZXMgYW5kIGJyYWNlcywgYXMgdGhvc2UgYXJlIGFsd2F5cyBhIHBhaW4uIFRoZSBwb3RlbnRpYWwgZm9yIG1pc2ludGVycHJldGF0aW9uIHdpdGggYnJhY2tldGVkIHBhdHRlcm5zIGFuZCB0aGUgbGlrZSBpcyB0b28gaGlnaC4gU28sIEknbSBnb2luZyB0byBrZWVwIGl0IGNsZWFuIGFuZCBzaW1wbGUuIEknbGwgc3RpY2sgdG8gYSBkaXJlY3QgYGdyZXBgIGZvciBgc3RydWN0IGV4dDRfZXh0ZW50YCwgbm8gZmFuY3kgcmVnZXgsIG5vIGF0dGVtcHRpbmcgY2xldmVyIHNob3J0Y3V0cy4gU29tZXRpbWVzIHRoZSBtb3N0IHN0cmFpZ2h0Zm9yd2FyZCBhcHByb2FjaCBpcyB0aGUgbW9zdCByZWxpYWJsZSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBjb21wbGV4IGNvZGUgYW5kIHRoZSBudWFuY2VzIG9mIHZhcmlvdXMgYGdyZXBgIGltcGxlbWVudGF0aW9ucy4gU2ltcGxpY2l0eSB0cnVtcHMgY2xldmVybmVzcyBoZXJlOyBJIG5lZWQgYWNjdXJhY3kgYWJvdmUgYWxsIGVsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzc3LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6NTM6NTIuMDE2NTQyMDMxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDg5MDY0NTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBleHQ0X2V4dGVudCBcXFxce1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2V4dDRfZXh0ZW50cy5oPTQ4PXN0cnVjdCBleHQ0X2V4dGVudF90YWlsIHtcXG4tLVxcbmZzL2V4dDQvZXh0NF9leHRlbnRzLmgtNTUtICovXFxuZnMvZXh0NC9leHQ0X2V4dGVudHMuaDo1NjpzdHJ1Y3QgZXh0NF9leHRlbnQge1xcbmZzL2V4dDQvZXh0NF9leHRlbnRzLmgtNTctXFx0X19sZTMyXFx0ZWVfYmxvY2s7XFx0LyogZmlyc3QgbG9naWNhbCBibG9jayBleHRlbnQgY292ZXJzICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjUzOjU0LjUwNTYxMzYwNVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTA4OTYxMzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIEV4dGVudHMgaW4gZXh0NCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZXh0ZW50cyBhcmUgaW1wbGVtZW50ZWQgaW4gdGhlIGV4dDQgZmlsZXN5c3RlbSwgc3BlY2lmaWNhbGx5LiBUaGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGhlYWRlciBmaWxlLCB3aGljaCB1c3VhbGx5IGRlZmluZXMgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgYW5kIGNvbnN0YW50cy4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byBgZnMvZXh0NC9leHQ0X2V4dGVudHMuaGAgYW5kIHRha2UgYSBsb29rIGFyb3VuZCBsaW5lIDU2LiBJJ20gaG9waW5nIHRvIGZpbmQgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgdG8gcmVwcmVzZW50IGFuIGV4dGVudCwgd2hpY2ggd2lsbCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgcmVzdCBvZiB0aGUgaW1wbGVtZW50YXRpb24uIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdCEgSSdtIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2UgdGhlIGBleHQ0X2V4dGVudF9oZWFkZXJgLCBgZXh0NF9leHRlbnRgLCBhbmQgcG9zc2libHkgc29tZSByZWxhdGVkIHN0cnVjdHVyZXMgZm9yIG1hbmFnaW5nIHRoZSBleHRlbnQgdHJlZSwgaWYgdGhleSdyZSB1c2luZyBvbmUuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBvbi1kaXNrIGZvcm1hdCBhbmQgaG93IHRoZSBsb2dpY2FsLXRvLXBoeXNpY2FsIG1hcHBpbmcgaXMgaGFuZGxlZC4gS25vd2luZyB0aGlzIHNob3VsZCBwcm92aWRlIGtleSBpbnNpZ2h0IGludG8gdW5kZXJzdGFuZGluZyBmaWxlIGFsbG9jYXRpb24gaW4gdGhpcyBmaWxlc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjExMywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjUzOjU2LjYxNDU3NzA4NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDc5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L2V4dDRfZXh0ZW50cy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDUwOlxcdH07XFxuICA1MTpcXHRcXG4gIDUyOlxcdC8qXFxuICA1MzpcXHQgKiBUaGlzIGlzIHRoZSBleHRlbnQgb24tZGlzayBzdHJ1Y3R1cmUuXFxuICA1NDpcXHQgKiBJdCdzIHVzZWQgYXQgdGhlIGJvdHRvbSBvZiB0aGUgdHJlZS5cXG4gIDU1OlxcdCAqL1xcbiAgNTY6XFx0c3RydWN0IGV4dDRfZXh0ZW50IHtcXG4gIDU3OlxcdFxcdF9fbGUzMlxcdGVlX2Jsb2NrO1xcdC8qIGZpcnN0IGxvZ2ljYWwgYmxvY2sgZXh0ZW50IGNvdmVycyAqL1xcbiAgNTg6XFx0XFx0X19sZTE2XFx0ZWVfbGVuO1xcdFxcdC8qIG51bWJlciBvZiBibG9ja3MgY292ZXJlZCBieSBleHRlbnQgKi9cXG4gIDU5OlxcdFxcdF9fbGUxNlxcdGVlX3N0YXJ0X2hpO1xcdC8qIGhpZ2ggMTYgYml0cyBvZiBwaHlzaWNhbCBibG9jayAqL1xcbiAgNjA6XFx0XFx0X19sZTMyXFx0ZWVfc3RhcnRfbG87XFx0LyogbG93IDMyIGJpdHMgb2YgcGh5c2ljYWwgYmxvY2sgKi9cXG4gIDYxOlxcdH07XFxuICA2MjpcXHRcXG4gIDYzOlxcdC8qXFxuICA2NDpcXHQgKiBUaGlzIGlzIGluZGV4IG9uLWRpc2sgc3RydWN0dXJlLlxcbiAgNjU6XFx0ICogSXQncyB1c2VkIGF0IGFsbCB0aGUgbGV2ZWxzIGV4Y2VwdCB0aGUgYm90dG9tLlxcbiAgNjY6XFx0ICovXFxuICA2NzpcXHRzdHJ1Y3QgZXh0NF9leHRlbnRfaWR4IHtcXG4gIDY4OlxcdFxcdF9fbGUzMlxcdGVpX2Jsb2NrO1xcdC8qIGluZGV4IGNvdmVycyBsb2dpY2FsIGJsb2NrcyBmcm9tICdibG9jaycgKi9cXG4gIDY5OlxcdFxcdF9fbGUzMlxcdGVpX2xlYWZfbG87XFx0LyogcG9pbnRlciB0byB0aGUgcGh5c2ljYWwgYmxvY2sgb2YgdGhlIG5leHQgKlxcbiAgNzA6XFx0XFx0XFx0XFx0XFx0ICogbGV2ZWwuIGxlYWYgb3IgbmV4dCBpbmRleCBjb3VsZCBiZSB0aGVyZSAqL1xcbiAgNzE6XFx0XFx0X19sZTE2XFx0ZWlfbGVhZl9oaTtcXHQvKiBoaWdoIDE2IGJpdHMgb2YgcGh5c2ljYWwgYmxvY2sgKi9cXG4gIDcyOlxcdFxcdF9fdTE2XFx0ZWlfdW51c2VkO1xcbiAgNzM6XFx0fTtcXG4gIDc0OlxcdFxcbiAgNzU6XFx0LypcXG4gIDc2OlxcdCAqIEVhY2ggYmxvY2sgKGxlYXZlcyBhbmQgaW5kZXhlcyksIGV2ZW4gaW5vZGUtc3RvcmVkIGhhcyBoZWFkZXIuXFxuICA3NzpcXHQgKi9cXG4gIDc4OlxcdHN0cnVjdCBleHQ0X2V4dGVudF9oZWFkZXIge1xcbiAgNzk6XFx0XFx0X19sZTE2XFx0ZWhfbWFnaWM7XFx0LyogcHJvYmFibHkgd2lsbCBzdXBwb3J0IGRpZmZlcmVudCBmb3JtYXRzICovXFxuICA4MDpcXHRcXHRfX2xlMTZcXHRlaF9lbnRyaWVzO1xcdC8qIG51bWJlciBvZiB2YWxpZCBlbnRyaWVzICovXFxuICA4MTpcXHRcXHRfX2xlMTZcXHRlaF9tYXg7XFx0XFx0LyogY2FwYWNpdHkgb2Ygc3RvcmUgaW4gZW50cmllcyAqL1xcbiAgODI6XFx0XFx0X19sZTE2XFx0ZWhfZGVwdGg7XFx0LyogaGFzIHRyZWUgcmVhbCB1bmRlcmx5aW5nIGJsb2Nrcz8gKi9cXG4gIDgzOlxcdFxcdF9fbGUzMlxcdGVoX2dlbmVyYXRpb247XFx0LyogZ2VuZXJhdGlvbiBvZiB0aGUgdHJlZSAqL1xcbiAgODQ6XFx0fTtcXG4gIDg1OlxcdFxcbiAgODY6XFx0I2RlZmluZSBFWFQ0X0VYVF9NQUdJQ1xcdFxcdGNwdV90b19sZTE2KDB4ZjMwYSlcXG4gIDg3OlxcdCNkZWZpbmUgRVhUNF9NQVhfRVhURU5UX0RFUFRIIDVcXG4gIDg4OlxcdFxcbiAgODk6XFx0I2RlZmluZSBFWFQ0X0VYVEVOVF9UQUlMX09GRlNFVChoZHIpIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6NTM6NTYuNjE0NjUzNTQ1WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1OTI0MzEzMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBleHQ0X2V4dF9zdG9yZV9wYmxvY2sqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBleHQ0X2V4dF9zdG9yZV9wYmxvY2tgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBzY2hlbWUgb2YgZXh0ZW50IG1hbmFnZW1lbnQgd2l0aGluIGV4dDQuIEknbSBhc3N1bWluZyB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGFsbG9jYXRpb24gb3IgZGVhbGxvY2F0aW9uIG9mIHBoeXNpY2FsIGJsb2NrcyByZWxhdGVkIHRvIGFuIGV4dGVudCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgZXh0ZW50IHRyZWUuIExldCdzIHNlZSwgd2hhdCBhcmUgdGhlIGtleSBwYXJhbWV0ZXJzIGl0IG9wZXJhdGVzIG9uPyBJJ2xsIGJldCBpdCdzIHNvbWV0aGluZyBhbG9uZyB0aGUgbGluZXMgb2YgdGhlIGlub2RlLCB0aGUgZXh0ZW50IGl0c2VsZiAob3IgYSBwb2ludGVyIHRvIGl0KSwgYW5kIHByb2JhYmx5IHRoZSBsb2dpY2FsIGJsb2NrIG51bWJlciBhbmQgdGhlIG51bWJlciBvZiBibG9ja3MgdG8gaGFuZGxlLiBJJ20gYWxzbyBjdXJpb3VzIGFib3V0IHRoZSBlcnJvciBoYW5kbGluZyDigJMgZG9lcyBpdCByZXR1cm4gYW4gZXJyb3IgY29kZSBvciByZWx5IG9uIGFzc2VydGlvbnM/IFRoZSByZXR1cm4gdmFsdWUgcHJvYmFibHkgaW5kaWNhdGVzIHRoZSBzdWNjZXNzIG9yIGZhaWx1cmUgb2YgdGhlIG9wZXJhdGlvbiwgYnV0IEkgd2FudCB0byB1bmRlcnN0YW5kICpob3cqIGl0IHNpZ25hbHMgdGhhdCBmYWlsdXJlLiBTcGVjaWZpY2FsbHksIEknZCBuZWVkIHRvIHRyYWNlIHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IHJldHVybmVkIGVycm9ycy4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBpdCdzIGNvcnJlY3RseSBoYW5kbGluZyBib3RoIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBzY2VuYXJpb3MuIElzIHRoZXJlIGEgZGlzdGluY3Rpb24gaW4gaG93IGl0IGhhbmRsZXMgZGlyZWN0LCBpbmRpcmVjdCwgYW5kIGRvdWJseSBpbmRpcmVjdCBibG9ja3MgaW4gdGhlIGV4dGVudCB0cmVlPyBGaW5hbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uJ3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgam91cm5hbGluZyBsYXllci4gRG9lcyBpdCB1dGlsaXplIGpvdXJuYWxfc3RhcnQsIGpvdXJuYWxfZW5kLCBldGM/IElzIHRoZXJlIGFueSBwb3RlbnRpYWwgZm9yIGRhdGEgbG9zcyBvciBjb3JydXB0aW9uIGlmIHRoZSBqb3VybmFsIGlzbid0IHByb3Blcmx5IGhhbmRsZWQgaGVyZT8gTGV0J3MgdGFrZSBhIGxvb2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDQ0LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjo1Mzo1OS4yMDcwODgxNTlaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODg3NDcwMjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9leHRfc3RvcmVfcGJsb2NrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZXh0NF9leHRlbnRzLmg9MjMyPXN0YXRpYyBpbmxpbmUgZXh0NF9mc2Jsa190IGV4dDRfaWR4X3BibG9jayhzdHJ1Y3QgZXh0NF9leHRlbnRfaWR4ICppeClcXG4tLVxcbmZzL2V4dDQvZXh0NF9leHRlbnRzLmgtMjQxLS8qXFxuZnMvZXh0NC9leHQ0X2V4dGVudHMuaDoyNDI6ICogZXh0NF9leHRfc3RvcmVfcGJsb2NrOlxcbmZzL2V4dDQvZXh0NF9leHRlbnRzLmgtMjQzLSAqIHN0b3JlcyBhIGxhcmdlIHBoeXNpY2FsIGJsb2NrIG51bWJlciBpbnRvIGFuIGV4dGVudCBzdHJ1Y3QsXFxuLS1cXG5mcy9leHQ0L2V4dDRfZXh0ZW50cy5oLTI0NS0gKi9cXG5mcy9leHQ0L2V4dDRfZXh0ZW50cy5oOjI0NjpzdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9leHRfc3RvcmVfcGJsb2NrKHN0cnVjdCBleHQ0X2V4dGVudCAqZXgsXFxuZnMvZXh0NC9leHQ0X2V4dGVudHMuaC0yNDctXFx0XFx0XFx0XFx0XFx0IGV4dDRfZnNibGtfdCBwYilcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmM9MjI3PXN0YXRpYyBpbnQgZXh0ZW50c19rdW5pdF9pbml0KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmMtMzE5LVxcdEVYVF9GSVJTVF9FWFRFTlQoZWgpLVxcdTAwM2VlZV9sZW4gPSBjcHVfdG9fbGUxNihFWFRfREFUQV9MRU4pO1xcbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmM6MzIwOlxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhFWFRfRklSU1RfRVhURU5UKGVoKSwgRVhUX0RBVEFfUEJMSyk7XFxuZnMvZXh0NC9leHRlbnRzLXRlc3QuYy0zMjEtXFx0aWYgKCFwYXJhbSB8fCBwYXJhbS1cXHUwMDNlaXNfdW53cml0X2F0X3N0YXJ0KVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9MTk5Mj1leHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy0yMDg1LVxcdFxcdFxcdGV4LVxcdTAwM2VlZV9ibG9jayA9IG5ld2V4dC1cXHUwMDNlZWVfYmxvY2s7XFxuZnMvZXh0NC9leHRlbnRzLmM6MjA4NjpcXHRcXHRcXHRleHQ0X2V4dF9zdG9yZV9wYmxvY2soZXgsIGV4dDRfZXh0X3BibG9jayhuZXdleHQpKTtcXG5mcy9leHQ0L2V4dGVudHMuYy0yMDg3LVxcdFxcdFxcdGV4LVxcdTAwM2VlZV9sZW4gPSBjcHVfdG9fbGUxNihleHQ0X2V4dF9nZXRfYWN0dWFsX2xlbihleClcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTIxOTYtXFx0bmVhcmV4LVxcdTAwM2VlZV9ibG9jayA9IG5ld2V4dC1cXHUwMDNlZWVfYmxvY2s7XFxuZnMvZXh0NC9leHRlbnRzLmM6MjE5NzpcXHRleHQ0X2V4dF9zdG9yZV9wYmxvY2sobmVhcmV4LCBleHQ0X2V4dF9wYmxvY2sobmV3ZXh0KSk7XFxuZnMvZXh0NC9leHRlbnRzLmMtMjE5OC1cXHRuZWFyZXgtXFx1MDAzZWVlX2xlbiA9IG5ld2V4dC1cXHUwMDNlZWVfbGVuO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9MjYxND1leHQ0X2V4dF9ybV9sZWFmKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy0yNzM5LVxcdFxcdFxcdC8qIHRoaXMgZXh0ZW50IGlzIHJlbW92ZWQ7IG1hcmsgc2xvdCBlbnRpcmVseSB1bnVzZWQgKi9cXG5mcy9leHQ0L2V4dGVudHMuYzoyNzQwOlxcdFxcdFxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhleCwgMCk7XFxuZnMvZXh0NC9leHRlbnRzLmMtMjc0MS1cXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTMxOTE9c3RhdGljIHN0cnVjdCBleHQ0X2V4dF9wYXRoICpleHQ0X3NwbGl0X2V4dGVudF9hdChoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtMzI0Ni1cXHRleDItXFx1MDAzZWVlX2xlbiAgID0gY3B1X3RvX2xlMTYoZWVfbGVuIC0gKHNwbGl0IC0gZWVfYmxvY2spKTtcXG5mcy9leHQ0L2V4dGVudHMuYzozMjQ3OlxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhleDIsIG5ld2Jsb2NrKTtcXG5mcy9leHQ0L2V4dGVudHMuYy0zMjQ4LVxcdGlmIChpc191bndyaXQpXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz0zNTU3PWV4dDRfZXh0X2NvbnZlcnRfdG9faW5pdGlhbGl6ZWQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTM2NDUtXFx0XFx0XFx0ZXgtXFx1MDAzZWVlX2Jsb2NrID0gY3B1X3RvX2xlMzIoZWVfYmxvY2sgKyBtYXBfbGVuKTtcXG5mcy9leHQ0L2V4dGVudHMuYzozNjQ2OlxcdFxcdFxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhleCwgZWVfcGJsayArIG1hcF9sZW4pO1xcbmZzL2V4dDQvZXh0ZW50cy5jLTM2NDctXFx0XFx0XFx0ZXgtXFx1MDAzZWVlX2xlbiA9IGNwdV90b19sZTE2KGVlX2xlbiAtIG1hcF9sZW4pO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtMzY5MS1cXHRcXHRcXHRhYnV0X2V4LVxcdTAwM2VlZV9ibG9jayA9IGNwdV90b19sZTMyKG5leHRfbGJsayAtIG1hcF9sZW4pO1xcbmZzL2V4dDQvZXh0ZW50cy5jOjM2OTI6XFx0XFx0XFx0ZXh0NF9leHRfc3RvcmVfcGJsb2NrKGFidXRfZXgsIG5leHRfcGJsayAtIG1hcF9sZW4pO1xcbmZzL2V4dDQvZXh0ZW50cy5jLTM2OTMtXFx0XFx0XFx0ZXgtXFx1MDAzZWVlX2xlbiA9IGNwdV90b19sZTE2KGVlX2xlbiAtIG1hcF9sZW4pO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtMzc0NS1cXHRcXHRcXHRcXHRjcHVfdG9fbGUxNigqYWxsb2NhdGVkIC0gc3BsaXRfbWFwLm1fbGVuKTtcXG5mcy9leHQ0L2V4dGVudHMuYzozNzQ2OlxcdFxcdFxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhcXHUwMDI2emVyb19leDEsXFxuZnMvZXh0NC9leHRlbnRzLmMtMzc0Ny1cXHRcXHRcXHRcXHRleHQ0X2V4dF9wYmxvY2soZXgpICsgc3BsaXRfbWFwLm1fbGJsayArXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy0zNzYwLVxcdFxcdFxcdFxcdFxcdFxcdFxcdGVlX2Jsb2NrKTtcXG5mcy9leHQ0L2V4dGVudHMuYzozNzYxOlxcdFxcdFxcdFxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhcXHUwMDI2emVyb19leDIsXFxuZnMvZXh0NC9leHRlbnRzLmMtMzc2Mi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBleHQ0X2V4dF9wYmxvY2soZXgpKTtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTQyNjk9aW50IGV4dDRfZXh0X21hcF9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ0NzMtXFx0cGJsayA9IG5ld2Jsb2NrICsgb2Zmc2V0O1xcbmZzL2V4dDQvZXh0ZW50cy5jOjQ0NzQ6XFx0ZXh0NF9leHRfc3RvcmVfcGJsb2NrKFxcdTAwMjZuZXdleCwgcGJsayk7XFxuZnMvZXh0NC9leHRlbnRzLmMtNDQ3NS1cXHRuZXdleC5lZV9sZW4gPSBjcHVfdG9fbGUxNihhci5sZW4pO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9NTc2Mz1leHQ0X3N3YXBfZXh0ZW50cyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlMSxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTU4OTctXFx0XFx0dG1wX2V4ID0gKmV4MTtcXG5mcy9leHQ0L2V4dGVudHMuYzo1ODk4OlxcdFxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhleDEsIGV4dDRfZXh0X3BibG9jayhleDIpKTtcXG5mcy9leHQ0L2V4dGVudHMuYzo1ODk5OlxcdFxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhleDIsIGV4dDRfZXh0X3BibG9jayhcXHUwMDI2dG1wX2V4KSk7XFxuZnMvZXh0NC9leHRlbnRzLmMtNTkwMC1cXHRcXHRleDEtXFx1MDAzZWVlX2xlbiA9IGNwdV90b19sZTE2KGUyX2xlbik7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz02MDI3PWludCBleHQ0X2V4dF9yZXBsYXlfdXBkYXRlX2V4KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IHN0YXJ0LFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNjA4MC1cXHRcXHRleHQ0X2V4dF9tYXJrX2luaXRpYWxpemVkKGV4KTtcXG5mcy9leHQ0L2V4dGVudHMuYzo2MDgxOlxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhleCwgcGJsayk7XFxuZnMvZXh0NC9leHRlbnRzLmMtNjA4Mi1cXHRkb3duX3dyaXRlKFxcdTAwMjZFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2RhdGFfc2VtKTtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz05MzE9c3RhdGljIGludCBleHQ0X2ZjX3dyaXRlX2lub2RlX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSwgdTMyICpjcmMpXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtOTYxLVxcdFxcdGV4LVxcdTAwM2VlZV9sZW4gPSBjcHVfdG9fbGUxNihyYW5nZS1cXHUwMDNlbGVuKTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6OTYyOlxcdFxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhleCwgcmFuZ2UtXFx1MDAzZXBibGspO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy05NjMtXFx0XFx0aWYgKHJhbmdlLVxcdTAwM2V1bndyaXR0ZW4pXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjE0OD1zdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X2FkZF9yYW5nZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1OCAqdmFsKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIyMDItXFx0XFx0XFx0bmV3ZXguZWVfYmxvY2sgPSBjcHVfdG9fbGUzMihjdXIpO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMjAzOlxcdFxcdFxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjIwNC1cXHRcXHRcXHRcXHRcXHUwMDI2bmV3ZXgsIHN0YXJ0X3BibGsgKyBjdXIgLSBzdGFydCk7XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTEwNzQ9c3RhdGljIGludCBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2ZzYmxrX3QgYmxvY2ssXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTExMzktXFx0XFx0bmV3ZXguZWVfbGVuID0gY3B1X3RvX2xlMTYoMSk7XFxuZnMvZXh0NC9pbmxpbmUuYzoxMTQwOlxcdFxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhcXHUwMDI2bmV3ZXgsIGJsb2NrKTtcXG5mcy9leHQ0L2lubGluZS5jLTExNDEtXFx0XFx0cGF0aCA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgXFx1MDAyNm5ld2V4LCAwKTtcXG4tLVxcbmZzL2V4dDQvbWlncmF0ZS5jPTIxPXN0YXRpYyBpbnQgZmluaXNoX3JhbmdlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L21pZ3JhdGUuYy0zMy1cXHRuZXdleHQuZWVfbGVuICAgPSBjcHVfdG9fbGUxNihsYi1cXHUwMDNlbGFzdF9ibG9jayAtIGxiLVxcdTAwM2VmaXJzdF9ibG9jayArIDEpO1xcbmZzL2V4dDQvbWlncmF0ZS5jOjM0OlxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhcXHUwMDI2bmV3ZXh0LCBsYi1cXHUwMDNlZmlyc3RfcGJsb2NrKTtcXG5mcy9leHQ0L21pZ3JhdGUuYy0zNS1cXHQvKiBMb2NraW5nIG9ubHkgZm9yIGNvbnZlbmllbmNlIHNpbmNlIHdlIGFyZSBvcGVyYXRpbmcgb24gdGVtcCBpbm9kZSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjo1NDowMS4xOTU4NDg2NDFaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzgwNTk1NjQyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBUaGlzIEV4dGVudCBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYml0IG9mIGNvZGUgYW5kIGltbWVkaWF0ZWx5IHJlY29nbml6ZSB3ZSdyZSBkZWFsaW5nIHdpdGggYW4gYGV4dDRfZXh0ZW50YCBzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSBpbml0aWFsaXppbmcgYSBuZXcgb25lLCBgbmV3ZXhgLiAgSXQgc2VlbXMgbGlrZSB3ZSdyZSBzZXR0aW5nIHVwIGEgc2luZ2xlLWJsb2NrIGV4dGVudC4gIExldCdzIGJyZWFrIGl0IGRvd246IGBuZXdleC5lZV9ibG9jayA9IGNwdV90b19sZTMyKDApO2AgLSBSaWdodCwgemVyb2luZyBvdXQgdGhlIGxvZ2ljYWwgYmxvY2sgbnVtYmVyLCB0aGF0J3MgZXhwZWN0ZWQuIGBuZXdleC5lZV9sZW4gPSBjcHVfdG9fbGUxNigxKTtgIC0gVGhlbiBzZXR0aW5nIHRoZSBleHRlbnQgbGVuZ3RoIHRvIG9uZSBibG9jazsgYWdhaW4sIHN0YW5kYXJkIHByb2NlZHVyZS4gIFdlIGFyZSBtYWtpbmcgaXQgbGl0dGxlIGVuZGlhbiwgb2YgY291cnNlLlxuXG5UaGUga2V5IHBhcnQgaGVyZSBpcyB0aGF0IHdlIGNhbGwgYGV4dDRfZXh0X3N0b3JlX3BibG9jayhcdTAwMjZuZXdleCwgYmxvY2spO2AgIEkgaW5zdGFudGx5IHJlY2FsbCB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgd2hlcmUgdGhlICpwaHlzaWNhbCogYmxvY2sgbnVtYmVyIGlzIGFjdHVhbGx5IHN0b3JlZC4gIGBleHQ0X2V4dF9zdG9yZV9wYmxvY2tgIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIGBlZV9zdGFydF9sb2AgYW5kIGBlZV9zdGFydF9oaWAuIFNvIG5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpcyBob3cgZG9lcyBpdCB0cmFuc2xhdGUgdGhlICdibG9jaycgdmFyaWFibGUgaW50byB0aGUgdHdvIGZpZWxkcy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBleGFjdCBkZWZpbml0aW9uIG9mIHRoaXMgZnVuY3Rpb24gdG8gZnVsbHkgdW5kZXJzdGFuZCBob3cgdGhlIHBoeXNpY2FsIGJsb2NrIGFkZHJlc3MgaXMgc3RvcmVkIGluIHRoZSBleHRlbnQgaGVhZGVyLiBJJ2xsIG5lZWQgdG8ga25vdyB3aGF0ICdibG9jaycgcmVwcmVzZW50cyB0byB1bmRlcnN0YW5kIHRoZSBtYXBwaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTgxMSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMjo1NDowNS4wMDE4MDc0NzdaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwNDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQvZXh0NF9leHRlbnRzLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMjQyLFxuICBcIkxpbmVDb3VudFwiOiAxNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjQyOlxcdCAqIGV4dDRfZXh0X3N0b3JlX3BibG9jazpcXG4gMjQzOlxcdCAqIHN0b3JlcyBhIGxhcmdlIHBoeXNpY2FsIGJsb2NrIG51bWJlciBpbnRvIGFuIGV4dGVudCBzdHJ1Y3QsXFxuIDI0NDpcXHQgKiBicmVha2luZyBpdCBpbnRvIHBhcnRzXFxuIDI0NTpcXHQgKi9cXG4gMjQ2OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X2V4dF9zdG9yZV9wYmxvY2soc3RydWN0IGV4dDRfZXh0ZW50ICpleCxcXG4gMjQ3OlxcdFxcdFxcdFxcdFxcdFxcdCBleHQ0X2ZzYmxrX3QgcGIpXFxuIDI0ODpcXHR7XFxuIDI0OTpcXHRcXHRleC1cXHUwMDNlZWVfc3RhcnRfbG8gPSBjcHVfdG9fbGUzMigodW5zaWduZWQgbG9uZykgKHBiIFxcdTAwMjYgMHhmZmZmZmZmZikpO1xcbiAyNTA6XFx0XFx0ZXgtXFx1MDAzZWVlX3N0YXJ0X2hpID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIGxvbmcpICgocGIgXFx1MDAzZVxcdTAwM2UgMzEpIFxcdTAwM2VcXHUwMDNlIDEpIFxcdTAwMjZcXG4gMjUxOlxcdFxcdFxcdFxcdFxcdCAgICAgIDB4ZmZmZik7XFxuIDI1MjpcXHR9XFxuIDI1MzpcXHRcXG4gMjU0OlxcdC8qXFxuIDI1NTpcXHQgKiBleHQ0X2lkeF9zdG9yZV9wYmxvY2s6XFxuIDI1NjpcXHQgKiBzdG9yZXMgYSBsYXJnZSBwaHlzaWNhbCBibG9jayBudW1iZXIgaW50byBhbiBpbmRleCBzdHJ1Y3QsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAyOjU0OjA1LjAwMTkzMDczN1oiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MDUwODE4MjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIENoZWNrOiBObyBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyBEZXRlY3RlZCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEknbSBub3RpbmcgdGhhdCBgZWVfYmxvY2tgLCBgZWVfbGVuYCwgYGVlX3N0YXJ0X2xvYCwgYW5kIGBlZV9zdGFydF9oaWAgd2l0aGluIHRoZSBgZXh0NF9leHRlbnRgIHN0cnVjdCBhcmUgKmV4cGxpY2l0bHkqIGluaXRpYWxpemVkLiBHb29kLiBXZSBpbml0aWFsaXplIGBleHQ0X2FsbG9jYXRpb25fcmVxdWVzdCBhcjtgIGFuZCB6ZXJvIGl0IG91dCBpbW1lZGlhdGVseSB3aXRoIGBtZW1zZXRgLiBUaGlzIGlzIHN0YW5kYXJkIHByYWN0aWNlLCBhbmQgd2hhdCBJJ2QgZXhwZWN0LiBTYW1lIHdpdGggdGhlIGJsb2NrIGRhdGEgYnVmZmVyIGBiaC1cdTAwM2ViX2RhdGFgIGFuZCB0aGUgaW5saW5lIGRhdGEgYnVmZmVyLiBXZSBlbnN1cmUgdGhleSdyZSBmdWxseSB6ZXJvZWQuXG5cbkknbSBzeXN0ZW1hdGljYWxseSBjaGVja2luZyBmb3IgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZXJlJ3Mgbm8gc3RydWN0IGNvcHkgdG8gdXNlcnNwYWNlLCBubyBicmFuY2hpbmcgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBubyB1bmluaXRpYWxpemVkIGhlYXAgb3Igc3RhY2sgdmFyaWFibGVzIGJlaW5nIHVzZWQuIFRoaXMgaXMgd2hhdCBJIHdhcyBob3BpbmcgdG8gc2VlLlxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIHRoZSBLQVNBTi9LTVNBTiBpbXBsaWNhdGlvbnMuIFdlJ3JlIGRlYWxpbmcgd2l0aCBtb2RpZmljYXRpb25zIHRvIGtlcm5lbCBmcyBidWZmZXJzLCBleHQ0IGV4dGVudHMsIGlub2RlcywgYW5kIGJ1ZmZlciBoZWFkcy4gVGhlIGFsbG9jYXRlZCBoZWFwIGJ1ZmZlcnMgKGBpX2Jsb2NrX2J1ZmAsIGB4YXR0cl9idWZgLCBgYnVmYCkgYXJlIHBvcHVsYXRlZCB2aWEgYG1lbWNweWAgb3IgYGV4dDRfcmVhZF9pbmxpbmVfZGF0YWAsIHNvIHdlJ3JlIG5vdCByZWx5aW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBTdGFjayB2YXJpYWJsZXMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgb3IgemVyb2VkIG91dC4gVGhlIGJ1ZmZlciBoZWFkIGRhdGEgYmxvY2ssIGBiaC1cdTAwM2ViX2RhdGFgLCBpcyBtZW1zZXQgdG8gemVyby5cblxuVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgdGhlcmUgYXJlICpubyogdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgaGVyZSB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIEtNU0FOLiBBbnkgaXNzdWVzIHdvdWxkIGxpa2VseSBiZSByZWxhdGVkIHRvIGV4dGVudCBtYW5pcHVsYXRpb24gZXJyb3JzLCBidWZmZXIgb3ZlcnJ1bnMsIHJlZmVyZW5jZSBjb3VudGluZyBwcm9ibGVtcywgb3IgbG9ja2luZyBpc3N1ZXMsIGFuZCB0aG9zZSBzaG91bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGVycm9yIGRldGVjdG9ycy5cblxuTGV0J3MgZG91YmxlLWNoZWNrIHRoZSBsb2dpYy4gVGhlIEtNU0FOIHJ1bGUgaXMgY2xlYXI6IGl0J3MgbmVlZGVkIE9OTFkgaWYgdGhlIHBhdGNoICppbnRyb2R1Y2VzKiBvciBtb2RpZmllcyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gV2UgaGF2ZSB0byBsb29rIGZvciBjb3B5IHRvIHVzZXIgd2l0aG91dCBpbml0LCBjb25kaXRpb25hbCBsb2dpYyBvbiB1bmluaXQgdmFycywgY29tcGxleCB1bmluaXQgZGF0YSBzdHJ1Y3R1cmVzIHJlYWQgbGF0ZXIsIG9yIGJvdW5kcyBsb2dpYyBhY2Nlc3NpbmcgdW5pbml0IGJ5dGVzLiBHaXZlbiB0aGF0IGFsbCBoZWFwL3N0YWNrIHN0cnVjdHVyZXMgYXJlIGluaXRpYWxpemVkL3plcm9lZCAqYmVmb3JlKiB1c2UsIGFuZCB0aGVyZSBhcmUgbm8gaW5mbyBsZWFrcywgTmVlZHNLTVNBTiBtdXN0IGJlIGBmYWxzZWAuXG5cbkFscmlnaHQsIEknbSBjb25maWRlbnQgaW4gdGhpcy4gVGltZSB0byBwcmVwYXJlIHRoZSB0b29sIGNhbGwgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1MjMsIk91dHB1dFRva2VucyI6NDA2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDI6NTQ6MTEuMDUyNzUyMDQyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja2AgYW5kIGludHJvZHVjZXMgYGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrYCB0byByZWZhY3RvciBob3cgaW5saW5lIGRhdGEgaXMgY29udmVydGVkIHRvIGEgcmVndWxhciBleHRlbnQgb3IgYmxvY2sgcG9pbnRlciBpbiBleHQ0LlxcblxcbkFuYWx5c2lzIG9mIG1lbW9yeSBoYW5kbGluZzpcXG4xLiBIZWFwIGJ1ZmZlcnM6XFxuICAgLSBgYnVmYCBpcyBwb3B1bGF0ZWQgYnkgYGV4dDRfcmVhZF9pbmxpbmVfZGF0YSgpYCBiZWZvcmUgYmVpbmcgcmVhZC5cXG4gICAtIGBpX2Jsb2NrX2J1ZmAgYW5kIGB4YXR0cl9idWZgIGFyZSBhbGxvY2F0ZWQgd2l0aCBga21hbGxvYygpYCBhbmQgaW1tZWRpYXRlbHkgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGBtZW1jcHkoKWAgZnJvbSBgcmF3X2lub2RlLVxcdTAwM2VpX2Jsb2NrYCBhbmQgYGhlYWRlcmAgcmVzcGVjdGl2ZWx5LlxcbiAgIC0gVGhlIG5ld2x5IGFsbG9jYXRlZCBibG9jayBidWZmZXIgYGJoLVxcdTAwM2ViX2RhdGFgIGlzIGNsZWFyZWQgdXNpbmcgYG1lbXNldChiaC1cXHUwMDNlYl9kYXRhLCAwLCBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemUpYCBiZWZvcmUgZGF0YSBvciBkaXJlY3RvcnkgZW50cmllcyBhcmUgY29waWVkIGludG8gaXQuXFxuMi4gU3RhY2sgc3RydWN0dXJlczpcXG4gICAtIGBzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX3JlcXVlc3QgYXJgIGlzIGNsZWFyZWQgd2l0aCBgbWVtc2V0KFxcdTAwMjZhciwgMCwgc2l6ZW9mKGFyKSlgLlxcbiAgIC0gYHN0cnVjdCBleHQ0X2V4dGVudCBuZXdleGAgaGFzIGFsbCBmb3VyIGZpZWxkcyAoYGVlX2Jsb2NrYCwgYGVlX2xlbmAsIGBlZV9zdGFydF9sb2AsIGBlZV9zdGFydF9oaWApIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXFxuICAgLSBgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCBpc2AgYW5kIGBzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvIGlgIGFyZSBzdGF0aWNhbGx5IGluaXRpYWxpemVkIHdpdGggZGVzaWduYXRlZCBpbml0aWFsaXplcnMuXFxuMy4gTm8gZGF0YSBvciBzdHJ1Y3R1cmUgd2l0aCB1bmluaXRpYWxpemVkIHBhZGRpbmcgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjb250cm9sIGZsb3cgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy5cXG5cXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIGV4dGVudCB0cmVlIGNvcnJ1cHRpb24sIGxvY2sgb3JkZXIgdmlvbGF0aW9ucywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja2AgYW5kIGludHJvZHVjZXMgYGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrYCB0byByZWZhY3RvciBob3cgaW5saW5lIGRhdGEgaXMgY29udmVydGVkIHRvIGEgcmVndWxhciBleHRlbnQgb3IgYmxvY2sgcG9pbnRlciBpbiBleHQ0LlxcblxcbkFuYWx5c2lzIG9mIG1lbW9yeSBoYW5kbGluZzpcXG4xLiBIZWFwIGJ1ZmZlcnM6XFxuICAgLSBgYnVmYCBpcyBwb3B1bGF0ZWQgYnkgYGV4dDRfcmVhZF9pbmxpbmVfZGF0YSgpYCBiZWZvcmUgYmVpbmcgcmVhZC5cXG4gICAtIGBpX2Jsb2NrX2J1ZmAgYW5kIGB4YXR0cl9idWZgIGFyZSBhbGxvY2F0ZWQgd2l0aCBga21hbGxvYygpYCBhbmQgaW1tZWRpYXRlbHkgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGBtZW1jcHkoKWAgZnJvbSBgcmF3X2lub2RlLVxcdTAwM2VpX2Jsb2NrYCBhbmQgYGhlYWRlcmAgcmVzcGVjdGl2ZWx5LlxcbiAgIC0gVGhlIG5ld2x5IGFsbG9jYXRlZCBibG9jayBidWZmZXIgYGJoLVxcdTAwM2ViX2RhdGFgIGlzIGNsZWFyZWQgdXNpbmcgYG1lbXNldChiaC1cXHUwMDNlYl9kYXRhLCAwLCBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemUpYCBiZWZvcmUgZGF0YSBvciBkaXJlY3RvcnkgZW50cmllcyBhcmUgY29waWVkIGludG8gaXQuXFxuMi4gU3RhY2sgc3RydWN0dXJlczpcXG4gICAtIGBzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX3JlcXVlc3QgYXJgIGlzIGNsZWFyZWQgd2l0aCBgbWVtc2V0KFxcdTAwMjZhciwgMCwgc2l6ZW9mKGFyKSlgLlxcbiAgIC0gYHN0cnVjdCBleHQ0X2V4dGVudCBuZXdleGAgaGFzIGFsbCBmb3VyIGZpZWxkcyAoYGVlX2Jsb2NrYCwgYGVlX2xlbmAsIGBlZV9zdGFydF9sb2AsIGBlZV9zdGFydF9oaWApIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuXFxuICAgLSBgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCBpc2AgYW5kIGBzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvIGlgIGFyZSBzdGF0aWNhbGx5IGluaXRpYWxpemVkIHdpdGggZGVzaWduYXRlZCBpbml0aWFsaXplcnMuXFxuMy4gTm8gZGF0YSBvciBzdHJ1Y3R1cmUgd2l0aCB1bmluaXRpYWxpemVkIHBhZGRpbmcgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjb250cm9sIGZsb3cgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy5cXG5cXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIChzdWNoIGFzIGV4dGVudCB0cmVlIGNvcnJ1cHRpb24sIGxvY2sgb3JkZXIgdmlvbGF0aW9ucywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MpIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow7gvnm[1] Phase: Succeeded StartedAt: 2026-08-31 02:54:22 +0000 UTC FinishedAt: 2026-08-31 02:54:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gvnm[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-31 02:54:22 +0000 UTC FinishedAt: 2026-08-31 02:54:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gvnm[2] Phase: Succeeded StartedAt: 2026-08-31 02:54:22 +0000 UTC FinishedAt: 2026-08-31 06:33:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gvnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"8d6f7de2-01b7-4ca9-9c74-7f1fd932955f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-31 02:54:22 +0000 UTC FinishedAt: 2026-08-31 06:33:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"8d6f7de2-01b7-4ca9-9c74-7f1fd932955f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow7gvnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"8d6f7de2-01b7-4ca9-9c74-7f1fd932955f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-31 02:54:22 +0000 UTC FinishedAt: 2026-08-31 02:54:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gvnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"8d6f7de2-01b7-4ca9-9c74-7f1fd932955f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-31 02:54:22 +0000 UTC FinishedAt: 2026-08-31 02:54:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflow7gvnm/series-workflow7gvnm-convert-artifact-602945114/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7gvnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"8d6f7de2-01b7-4ca9-9c74-7f1fd932955f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-31 02:54:32 +0000 UTC FinishedAt: 2026-08-31 03:10:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gvnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"8d6f7de2-01b7-4ca9-9c74-7f1fd932955f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-31 02:54:32 +0000 UTC FinishedAt: 2026-08-31 03:10:23 +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:*0cec36b8-d936-4839-b26a-e74055ed93e6,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-workflow7gvnm/series-workflow7gvnm-convert-artifact-602945114/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": "5556dcb6-e337-4f50-9c3c-8bcce12ba2cd", "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-workflow7gvnm/series-workflow7gvnm-build-action-3239996168/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7gvnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"8d6f7de2-01b7-4ca9-9c74-7f1fd932955f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-31 02:54:32 +0000 UTC FinishedAt: 2026-08-31 03:10:13 +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:*0cec36b8-d936-4839-b26a-e74055ed93e6,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-workflow7gvnm/series-workflow7gvnm-convert-artifact-602945114/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": "5556dcb6-e337-4f50-9c3c-8bcce12ba2cd", "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-workflow7gvnm/series-workflow7gvnm-build-action-3239996168/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7gvnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"8d6f7de2-01b7-4ca9-9c74-7f1fd932955f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-31 03:10:23 +0000 UTC FinishedAt: 2026-08-31 03:10:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gvnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"8d6f7de2-01b7-4ca9-9c74-7f1fd932955f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-31 03:10:23 +0000 UTC FinishedAt: 2026-08-31 03:10:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gvnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"8d6f7de2-01b7-4ca9-9c74-7f1fd932955f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-31 03:10:23 +0000 UTC FinishedAt: 2026-08-31 03:10:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gvnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"8d6f7de2-01b7-4ca9-9c74-7f1fd932955f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-31 03:10:23 +0000 UTC FinishedAt: 2026-08-31 03:10:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"8d6f7de2-01b7-4ca9-9c74-7f1fd932955f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflow7gvnm/series-workflow7gvnm-convert-artifact-621210293/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7gvnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"8d6f7de2-01b7-4ca9-9c74-7f1fd932955f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-31 03:10:33 +0000 UTC FinishedAt: 2026-08-31 03:12:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gvnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"8d6f7de2-01b7-4ca9-9c74-7f1fd932955f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-31 03:10:33 +0000 UTC FinishedAt: 2026-08-31 03:12:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5556dcb6-e337-4f50-9c3c-8bcce12ba2cd,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-workflow7gvnm/series-workflow7gvnm-build-action-3239996168/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-workflow7gvnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"8d6f7de2-01b7-4ca9-9c74-7f1fd932955f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-31 03:12:56 +0000 UTC FinishedAt: 2026-08-31 03:12:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gvnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"8d6f7de2-01b7-4ca9-9c74-7f1fd932955f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-31 03:12:56 +0000 UTC FinishedAt: 2026-08-31 03:12:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gvnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"8d6f7de2-01b7-4ca9-9c74-7f1fd932955f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-31 03:12:56 +0000 UTC FinishedAt: 2026-08-31 03:28:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gvnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"8d6f7de2-01b7-4ca9-9c74-7f1fd932955f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-31 03:12:56 +0000 UTC FinishedAt: 2026-08-31 03:28:42 +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:*0cec36b8-d936-4839-b26a-e74055ed93e6,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-workflow7gvnm/series-workflow7gvnm-convert-artifact-621210293/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": "397403ad-562d-4e77-9aac-ea48753a38ad", "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-workflow7gvnm/series-workflow7gvnm-build-action-3113425857/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7gvnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"8d6f7de2-01b7-4ca9-9c74-7f1fd932955f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-31 03:12:56 +0000 UTC FinishedAt: 2026-08-31 03:28:32 +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:*0cec36b8-d936-4839-b26a-e74055ed93e6,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-workflow7gvnm/series-workflow7gvnm-convert-artifact-621210293/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": "397403ad-562d-4e77-9aac-ea48753a38ad", "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-workflow7gvnm/series-workflow7gvnm-build-action-3113425857/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7gvnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"8d6f7de2-01b7-4ca9-9c74-7f1fd932955f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-31 03:28:42 +0000 UTC FinishedAt: 2026-08-31 03:28:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gvnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"8d6f7de2-01b7-4ca9-9c74-7f1fd932955f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-31 03:28:42 +0000 UTC FinishedAt: 2026-08-31 03:28:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gvnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"8d6f7de2-01b7-4ca9-9c74-7f1fd932955f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-31 03:28:42 +0000 UTC FinishedAt: 2026-08-31 03:31:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gvnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"8d6f7de2-01b7-4ca9-9c74-7f1fd932955f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-31 03:28:42 +0000 UTC FinishedAt: 2026-08-31 03:30:54 +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:*397403ad-562d-4e77-9aac-ea48753a38ad,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-workflow7gvnm/series-workflow7gvnm-build-action-3113425857/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-workflow7gvnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"8d6f7de2-01b7-4ca9-9c74-7f1fd932955f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-31 03:31:04 +0000 UTC FinishedAt: 2026-08-31 06:33:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gvnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"8d6f7de2-01b7-4ca9-9c74-7f1fd932955f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-31 03:31:04 +0000 UTC FinishedAt: 2026-08-31 06:33:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*5556dcb6-e337-4f50-9c3c-8bcce12ba2cd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*397403ad-562d-4e77-9aac-ea48753a38ad,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-workflow7gvnm/series-workflow7gvnm-build-action-3239996168/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-workflow7gvnm/series-workflow7gvnm-build-action-3113425857/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow7gvnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"8d6f7de2-01b7-4ca9-9c74-7f1fd932955f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-31 03:31:04 +0000 UTC FinishedAt: 2026-08-31 03:31:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gvnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"8d6f7de2-01b7-4ca9-9c74-7f1fd932955f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-31 03:31:04 +0000 UTC FinishedAt: 2026-08-31 03:31:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7gvnm/series-workflow7gvnm-convert-artifact-494981274/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7gvnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"8d6f7de2-01b7-4ca9-9c74-7f1fd932955f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-31 03:31:04 +0000 UTC FinishedAt: 2026-08-31 03:31:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gvnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"8d6f7de2-01b7-4ca9-9c74-7f1fd932955f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-31 03:31:04 +0000 UTC FinishedAt: 2026-08-31 03:31:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gvnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"8d6f7de2-01b7-4ca9-9c74-7f1fd932955f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-31 03:31:04 +0000 UTC FinishedAt: 2026-08-31 03:31:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gvnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"8d6f7de2-01b7-4ca9-9c74-7f1fd932955f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-31 03:31:14 +0000 UTC FinishedAt: 2026-08-31 06:33:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7gvnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"8d6f7de2-01b7-4ca9-9c74-7f1fd932955f","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-31 03:31:14 +0000 UTC FinishedAt: 2026-08-31 06:33:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5556dcb6-e337-4f50-9c3c-8bcce12ba2cd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*397403ad-562d-4e77-9aac-ea48753a38ad,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-workflow7gvnm/series-workflow7gvnm-build-action-3239996168/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-workflow7gvnm/series-workflow7gvnm-build-action-3113425857/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-workflow7gvnm/series-workflow7gvnm-convert-artifact-494981274/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,}