Name: series-workflow99r7q Phase: Succeeded StartedAt: 2026-07-07 08:51:47 +0000 UTC FinishedAt: 2026-07-07 13:37:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99r7q[0] Phase: Succeeded StartedAt: 2026-07-07 08:51:47 +0000 UTC FinishedAt: 2026-07-07 09:16:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99r7q[0].run-triage Phase: Succeeded StartedAt: 2026-07-07 08:51:47 +0000 UTC FinishedAt: 2026-07-07 09:16:24 +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": "d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f", "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": "d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "2aaac962-53b6-470a-858b-d0f5507911a1" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_alloc_file_blocks", "ext4_zero_range", "ext4_zero_partial_blocks", "ext4_load_tail_bh", "ext4_fallocate" ], "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+CgkJCTx0ZD4yMDI2LzA3LzA3IDA5OjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzJiMzNDssCiAgICAmIzM0O2V4dDRfemVyb19yYW5nZSYjMzQ7LAogICAgJiMzNDtleHQ0X3plcm9fcGFydGlhbF9ibG9ja3MmIzM0OywKICAgICYjMzQ7ZXh0NF9sb2FkX3RhaWxfYmgmIzM0OywKICAgICYjMzQ7ZXh0NF9mYWxsb2NhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBhIG5ldyBmYWxsb2NhdGUgZmxhZyBgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FU2AgaW4gZXh0NC4gSXQgbW9kaWZpZXMgdGhlIGNvcmUgYmxvY2sgYWxsb2NhdGlvbiBhbmQgemVyb2luZyBsb2dpYywgaW5jbHVkaW5nIGBleHQ0X3plcm9fcmFuZ2VgLCBgZXh0NF9hbGxvY19maWxlX2Jsb2Nrc2AsIGFuZCBgZXh0NF96ZXJvX3BhcnRpYWxfYmxvY2tzYC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IGV4dDQgaGFuZGxlcyB1bndyaXR0ZW4gZXh0ZW50cywgcGFydGlhbCBibG9jayB6ZXJvaW5nLCBhbmQgb3JwaGFuIGxpc3RzIGR1cmluZyBmYWxsb2NhdGUgb3BlcmF0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBmaWxlc3lzdGVtIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDA5OjExPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZWM0OTVkMDk2Y2I0OWI1YTU1MGE4MWZiNTcyNzhiNmQ1NTg3N2YzMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDcgMDk6MTE6MDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0LmggYi9mcy9leHQ0L2V4dDQuaFxuaW5kZXggOTQyODNhOTkxZTVjNGYuLmIyZTU1ODc2ZDBlMzUyIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9leHQ0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvZXh0NC5oXG5AQCAtMzA5OSw4ICYjNDM7MzA5OSwxMSBAQCBleHRlcm4gaW50IGV4dDRfY2h1bmtfdHJhbnNfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBucmJsb2Nrcyk7XG4gZXh0ZXJuIGludCBleHQ0X21ldGFfdHJhbnNfYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBsYmxvY2tzLFxuIFx0XHRcdFx0ICBpbnQgcGV4dGVudHMpO1xuIGV4dGVybiBpbnQgZXh0NF9ibG9ja196ZXJvX2VvZihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgZnJvbSwgbG9mZl90IGVuZCk7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEVYVDRfUEFSVElBTF9aRVJPX1NUQVJUXHQweDFcbiYjNDM7I2RlZmluZSBFWFQ0X1BBUlRJQUxfWkVST19FTkRcdDB4MlxuIGV4dGVybiBpbnQgZXh0NF96ZXJvX3BhcnRpYWxfYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBsc3RhcnQsXG4tXHRcdFx0XHQgICAgbG9mZl90IGxlbmd0aCwgYm9vbCAqZGlkX3plcm8pO1xuJiM0MztcdFx0XHRcdCAgICBsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgKnBhcnRpYWxfemVyb2VkKTtcbiBleHRlcm4gdm1fZmF1bHRfdCBleHQ0X3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XG4gZXh0ZXJuIHFzaXplX3QgKmV4dDRfZ2V0X3Jlc2VydmVkX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIGV4dGVybiBpbnQgZXh0NF9nZXRfcHJvamlkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGtwcm9qaWRfdCAqcHJvamlkKTtcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dGVudHMuYyBiL2ZzL2V4dDQvZXh0ZW50cy5jXG5pbmRleCAxMjVmNjI4ZTczOGFiMS4uOGM3YTk4NDA1YTY0MmYgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2V4dGVudHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9leHRlbnRzLmNcbkBAIC00NTg1LDYgJiM0Mzs0NTg1LDcgQEAgc3RhdGljIGludCBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuLFxuIFx0bG9mZl90IGVwb3MgPSAwLCBvbGRfc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcbiBcdHVuc2lnbmVkIGludCBibGtiaXRzID0gaW5vZGUtXHUwMDNlaV9ibGtiaXRzO1xuIFx0Ym9vbCBhbGxvY196ZXJvID0gZmFsc2U7XG4mIzQzO1x0Ym9vbCBvcnBoYW4gPSBmYWxzZTtcbiBcbiBcdEJVR19PTighZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUykpO1xuIFx0bWFwLm1fbGJsayA9IG9mZnNldCBcdTAwM2VcdTAwM2UgYmxrYml0cztcbkBAIC00NjU5LDEyICYjNDM7NDY2MCwzMCBAQCBzdGF0aWMgaW50IGV4dDRfYWxsb2NfZmlsZV9ibG9ja3Moc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4sXG4gXG4gXHRcdGlmIChhbGxvY196ZXJvIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgKG1hcC5tX2ZsYWdzIFx1MDAyNiAoRVhUNF9NQVBfTUFQUEVEIHwgRVhUNF9NQVBfVU5XUklUVEVOKSkpIHtcbiYjNDM7XHRcdFx0V0FSTl9PTl9PTkNFKG1hcC5tX2xibGsgJiM0MzsgbWFwLm1fbGVuIFx1MDAzZVxuJiM0MztcdFx0XHRcdEVYVDRfQl9UT19MQkxLKGlub2RlLCBuZXdfc2l6ZSA/OiBvbGRfc2l6ZSkpO1xuJiM0MztcbiBcdFx0XHRyZXQgPSBleHQ0X2lzc3VlX3plcm9vdXQoaW5vZGUsIG1hcC5tX2xibGssIG1hcC5tX3BibGssXG4gXHRcdFx0XHRcdFx0IG1hcC5tX2xlbik7XG4tXHRcdFx0aWYgKGxpa2VseSghcmV0KSlcbi1cdFx0XHRcdHJldCA9IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhOVUxMLFxuJiM0MztcdFx0XHRpZiAodW5saWtlbHkocmV0KSlcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRcdGhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgRVhUNF9IVF9NQVBfQkxPQ0tTLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgY3JlZGl0cyk7XG4mIzQzO1x0XHRcdGlmIChJU19FUlIoaGFuZGxlKSkge1xuJiM0MztcdFx0XHRcdHJldCA9IFBUUl9FUlIoaGFuZGxlKTtcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0cmV0ID0gZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKGhhbmRsZSxcbiBcdFx0XHRcdFx0aW5vZGUsIChsb2ZmX3QpbWFwLm1fbGJsayBcdTAwM2NcdTAwM2MgYmxrYml0cyxcbiBcdFx0XHRcdFx0KGxvZmZfdCltYXAubV9sZW4gXHUwMDNjXHUwMDNjIGJsa2JpdHMpO1xuJiM0MztcdFx0XHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgbmV3X3NpemUpIHtcbiYjNDM7XHRcdFx0XHRyZXQgPSBleHQ0X29ycGhhbl9hZGQoaGFuZGxlLCBpbm9kZSk7XG4mIzQzO1x0XHRcdFx0b3JwaGFuID0gdHJ1ZTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRyZXQyID0gZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcbiYjNDM7XHRcdFx0cmV0ID0gcmV0ID8gcmV0IDogcmV0MjtcbiBcdFx0XHRpZiAocmV0KVxuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdH1cbkBAIC00Njg3LDEyICYjNDM7NDcwNiwxNyBAQCBzdGF0aWMgaW50IGV4dDRfYWxsb2NfZmlsZV9ibG9ja3Moc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4sXG4gXHRpZiAoZXBvcyBcdTAwM2UgbmV3X3NpemUpXG4gXHRcdGVwb3MgPSBuZXdfc2l6ZTtcbiBcbi1cdGhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgRVhUNF9IVF9NSVNDLCAxKTtcbi1cdGlmIChJU19FUlIoaGFuZGxlKSlcbiYjNDM7XHRoYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIEVYVDRfSFRfTUlTQywgMik7XG4mIzQzO1x0aWYgKElTX0VSUihoYW5kbGUpKSB7XG4mIzQzO1x0XHRpZiAob3JwaGFuIFx1MDAyNlx1MDAyNiBpbm9kZS1cdTAwM2VpX25saW5rKVxuJiM0MztcdFx0XHRleHQ0X29ycGhhbl9kZWwoTlVMTCwgaW5vZGUpO1xuIFx0XHRyZXR1cm4gcmV0ID8gcmV0IDogUFRSX0VSUihoYW5kbGUpO1xuJiM0MztcdH1cbiBcbiBcdGV4dDRfdXBkYXRlX2lub2RlX3NpemUoaW5vZGUsIGVwb3MpO1xuIFx0cmV0MiA9IGV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTtcbiYjNDM7XHRpZiAob3JwaGFuIFx1MDAyNlx1MDAyNiBpbm9kZS1cdTAwM2VpX25saW5rKVxuJiM0MztcdFx0ZXh0NF9vcnBoYW5fZGVsKGhhbmRsZSwgaW5vZGUpO1xuIFx0ZXh0NF91cGRhdGVfaW5vZGVfZnN5bmNfdHJhbnMoaGFuZGxlLCBpbm9kZSwgMSk7XG4gXHRyZXQzID0gZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcbiBcdHJldDIgPSByZXQzID8gcmV0MyA6IHJldDI7XG5AQCAtNDcxNSw3ICYjNDM7NDczOSw3IEBAIHN0YXRpYyBsb25nIGV4dDRfemVyb19yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCxcbiBcdGxvZmZfdCBhbGlnbl9zdGFydCwgYWxpZ25fZW5kLCBuZXdfc2l6ZSA9IDA7XG4gXHRsb2ZmX3QgZW5kID0gb2Zmc2V0ICYjNDM7IGxlbjtcbiBcdHVuc2lnbmVkIGludCBibG9ja3NpemUgPSBpX2Jsb2Nrc2l6ZShpbm9kZSk7XG4tXHRib29sIHBhcnRpYWxfemVyb2VkID0gZmFsc2U7XG4mIzQzO1x0dW5zaWduZWQgaW50IHBhcnRpYWxfemVyb2VkID0gMDtcbiBcdGludCByZXQsIGZsYWdzO1xuIFxuIFx0dHJhY2VfZXh0NF96ZXJvX3JhbmdlKGlub2RlLCBvZmZzZXQsIGxlbiwgbW9kZSk7XG5AQCAtNDczNCwxMCAmIzQzOzQ3NTgsMTYgQEAgc3RhdGljIGxvbmcgZXh0NF96ZXJvX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LFxuIFx0fVxuIFxuIFx0ZmxhZ3MgPSBFWFQ0X0dFVF9CTE9DS1NfQ1JFQVRFX1VOV1JJVF9FWFQ7XG4tXHQvKiBQcmVhbGxvY2F0ZSB0aGUgcmFuZ2UgaW5jbHVkaW5nIHRoZSB1bmFsaWduZWQgZWRnZXMgKi9cbiYjNDM7XHQvKlxuJiM0MztcdCAqIFByZWFsbG9jYXRlIHRoZSByYW5nZSBpbmNsdWRpbmcgdGhlIHVuYWxpZ25lZCBlZGdlcywgYW5kIHplcm9cbiYjNDM7XHQgKiBvdXQgcGFydGlhbCBibG9ja3MgaWYgdGhleSBhbHJlYWR5IGNvbnRhaW4gZGF0YS5cbiYjNDM7XHQgKi9cbiBcdGlmICghSVNfQUxJR05FRChvZmZzZXQgfCBlbmQsIGJsb2Nrc2l6ZSkpIHtcbiBcdFx0cmV0ID0gZXh0NF9hbGxvY19maWxlX2Jsb2NrcyhmaWxlLCBvZmZzZXQsIGxlbiwgbmV3X3NpemUsXG4gXHRcdFx0XHRcdCAgICAgZmxhZ3MpO1xuJiM0MztcdFx0aWYgKCFyZXQpXG4mIzQzO1x0XHRcdHJldCA9IGV4dDRfemVyb19wYXJ0aWFsX2Jsb2Nrcyhpbm9kZSwgb2Zmc2V0LCBsZW4sXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBcdTAwMjZwYXJ0aWFsX3plcm9lZCk7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0cmV0dXJuIHJldDtcbiBcdH1cbkBAIC00NzU0LDYgJiM0Mzs0Nzg0LDIxIEBAIHN0YXRpYyBsb25nIGV4dDRfemVyb19yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCxcbiBcdC8qIFplcm8gcmFuZ2UgZXhjbHVkaW5nIHRoZSB1bmFsaWduZWQgZWRnZXMgKi9cbiBcdGFsaWduX3N0YXJ0ID0gcm91bmRfdXAob2Zmc2V0LCBibG9ja3NpemUpO1xuIFx0YWxpZ25fZW5kID0gcm91bmRfZG93bihlbmQsIGJsb2Nrc2l6ZSk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSW4gV1JJVEVfWkVST0VTIG1vZGUsIGVkZ2VzIHRoYXQgd2VyZSBub3QgcGFydGlhbC16ZXJvZWQgKGNsZWFuXG4mIzQzO1x0ICogdW53cml0dGVuIG9yIGhvbGUpIG11c3QgYmUgYWxsb2NhdGVkIGFuZCB6ZXJvZWQgYXMgd2hvbGUgYmxvY2tzLlxuJiM0MztcdCAqIEV4cGFuZCB0aGUgYWxpZ25lZCByYW5nZSBvdXR3YXJkIHRvIGNvdmVyIHRoZW0uXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9XUklURV9aRVJPRVMpIHtcbiYjNDM7XHRcdGlmICghSVNfQUxJR05FRChvZmZzZXQsIGJsb2Nrc2l6ZSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIShwYXJ0aWFsX3plcm9lZCBcdTAwMjYgRVhUNF9QQVJUSUFMX1pFUk9fU1RBUlQpKVxuJiM0MztcdFx0XHRhbGlnbl9zdGFydCA9IHJvdW5kX2Rvd24ob2Zmc2V0LCBibG9ja3NpemUpO1xuJiM0MztcdFx0aWYgKCFJU19BTElHTkVEKGVuZCwgYmxvY2tzaXplKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhKHBhcnRpYWxfemVyb2VkIFx1MDAyNiBFWFQ0X1BBUlRJQUxfWkVST19FTkQpKVxuJiM0MztcdFx0XHRhbGlnbl9lbmQgPSByb3VuZF91cChlbmQsIGJsb2Nrc2l6ZSk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChhbGlnbl9lbmQgXHUwMDNlIGFsaWduX3N0YXJ0KSB7XG4gXHRcdGlmIChtb2RlIFx1MDAyNiBGQUxMT0NfRkxfV1JJVEVfWkVST0VTKVxuIFx0XHRcdGZsYWdzID0gRVhUNF9HRVRfQkxPQ0tTX0NSRUFURV9aRVJPIHwgRVhUNF9FWF9OT0NBQ0hFO1xuQEAgLTQ3NzAsMTEgJiM0Mzs0ODE1LDE1IEBAIHN0YXRpYyBsb25nIGV4dDRfemVyb19yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCxcbiBcdGlmIChJU19BTElHTkVEKG9mZnNldCB8IGVuZCwgYmxvY2tzaXplKSlcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdC8qIFplcm8gb3V0IHBhcnRpYWwgYmxvY2sgYXQgdGhlIGVkZ2VzIG9mIHRoZSByYW5nZSAqL1xuLVx0cmV0ID0gZXh0NF96ZXJvX3BhcnRpYWxfYmxvY2tzKGlub2RlLCBvZmZzZXQsIGxlbiwgXHUwMDI2cGFydGlhbF96ZXJvZWQpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cdGlmICgoKGZpbGUtXHUwMDNlZl9mbGFncyBcdTAwMjYgT19TWU5DKSB8fCBJU19TWU5DKGlub2RlKSkgXHUwMDI2XHUwMDI2IHBhcnRpYWxfemVyb2VkKSB7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJbiBGQUxMT0NfRkxfV1JJVEVfWkVST0VTIG1vZGUsIGVkZ2VzIHRoYXQgaGF2ZSBiZWVuIHBhcnRpYWxseVxuJiM0MztcdCAqIHplcm9lZCBtdXN0IGJlIHdyaXR0ZW4gYmFjayB0byBlbnN1cmUgdGhlIGVudGlyZSB6ZXJvZWQgcmFuZ2VcbiYjNDM7XHQgKiBpcyBjb252ZXJ0ZWQgdG8gdGhlIHdyaXR0ZW4gc3RhdGUuIEluIFNZTkMgbW9kZSwgd3JpdGViYWNrIGlzXG4mIzQzO1x0ICogYWxzbyByZXF1aXJlZCB0byBwZXJzaXN0IHRoZSB6ZXJvZWQgZGF0YSB0byBkaXNrLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChwYXJ0aWFsX3plcm9lZCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgKChtb2RlIFx1MDAyNiBGQUxMT0NfRkxfV1JJVEVfWkVST0VTKSB8fFxuJiM0MztcdCAgICAgKGZpbGUtXHUwMDNlZl9mbGFncyBcdTAwMjYgT19TWU5DKSB8fCBJU19TWU5DKGlub2RlKSkpIHtcbiBcdFx0cmV0ID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdF9yYW5nZShpbm9kZS1cdTAwM2VpX21hcHBpbmcsIG9mZnNldCxcbiBcdFx0XHRcdFx0XHQgICBlbmQgLSAxKTtcbiBcdFx0aWYgKHJldClcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmNcbmluZGV4IGMyYzJkNmFjN2YzZDEzLi5iNTIxN2Q1ZmU5NTQwYiAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9pbm9kZS5jXG5AQCAtNDAyNiw2ICYjNDM7NDAyNiwxMCBAQCB2b2lkIGV4dDRfc2V0X2FvcHMoc3RydWN0IGlub2RlICppbm9kZSlcbiAgKiBiZWNhdXNlIGl0IG1pZ2h0IGhhdmUgZGF0YSBpbiBwYWdlY2FjaGUgKGVnLCBpZiBjYWxsZWQgZnJvbSBleHQ0X3plcm9fcmFuZ2UsXG4gICogZXh0NF9wdW5jaF9ob2xlLCBldGMpIHdoaWNoIG5lZWRzIHRvIGJlIHByb3Blcmx5IHplcm9lZCBvdXQuIE90aGVyd2lzZSBhXG4gICogcmFjaW5nIHdyaXRlYmFjayBjYW4gY29tZSBsYXRlciBhbmQgZmx1c2ggdGhlIHN0YWxlIHBhZ2VjYWNoZSB0byBkaXNrLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm4gdGhlIGxvYWRlZCBiaCBpZiBpdCBhY3R1YWxseSBuZWVkcyB6ZXJvaW5nIC0gaW4gd3JpdHRlbiwgZGlydHlcbiYjNDM7ICogdW53cml0dGVuLCBvciBkZWxhbGxvYyBzdGF0ZS4gUmV0dXJuIE5VTEwgaWYgaXQmIzM5O3MgY2xlYW4gKGkuZS4sIGEgaG9sZSBvclxuJiM0MzsgKiBhIGNsZWFuIHVud3JpdHRlbiBibG9jaykuXG4gICovXG4gc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqZXh0NF9sb2FkX3RhaWxfYmgoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGZyb20pXG4ge1xuQEAgLTQwNjUsNyAmIzQzOzQwNjksMTIgQEAgc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqZXh0NF9sb2FkX3RhaWxfYmgoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGZyb20pXG4gXHRpZiAoIWJ1ZmZlcl9tYXBwZWQoYmgpKSB7XG4gXHRcdEJVRkZFUl9UUkFDRShiaCwgXCYjMzQ7dW5tYXBwZWRcJiMzNDspO1xuIFx0XHRleHQ0X2dldF9ibG9jayhpbm9kZSwgaWJsb2NrLCBiaCwgMCk7XG4tXHRcdC8qIHVubWFwcGVkPyBJdCYjMzk7cyBhIGhvbGUgLSBub3RoaW5nIHRvIGRvICovXG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogSXQmIzM5O3MgYSBob2xlIG9yIGEgY2xlYW4gdW53cml0dGVuIGJsb2NrIC0gbm90aGluZyB0byBkby5cbiYjNDM7XHRcdCAqIE5vdGUgdGhhdCBhIGxvb2t1cC1vbmx5IGdldF9ibG9jayAod2l0aG91dFxuJiM0MztcdFx0ICogRVhUNF9HRVRfQkxPQ0tTX0NSRUFURSkgbmV2ZXIgc2V0cyBCSF9NYXBwZWQgZm9yIGNsZWFuXG4mIzQzO1x0XHQgKiB1bndyaXR0ZW4gZXh0ZW50cy5cbiYjNDM7XHRcdCAqL1xuIFx0XHRpZiAoIWJ1ZmZlcl9tYXBwZWQoYmgpKSB7XG4gXHRcdFx0QlVGRkVSX1RSQUNFKGJoLCBcJiMzNDtzdGlsbCB1bm1hcHBlZFwmIzM0Oyk7XG4gXHRcdFx0Z290byB1bmxvY2s7XG5AQCAtNDI1MiwxMyAmIzQzOzQyNjEsMjYgQEAgaW50IGV4dDRfYmxvY2tfemVyb19lb2Yoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGZyb20sIGxvZmZfdCBlbmQpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFplcm8gb3V0IHRoZSB1bmFsaWduZWQgaGVhZCBhbmQgdGFpbCBvZiB0aGUgW2xzdGFydCwgbHN0YXJ0JiM0MztsZW5ndGgpXG4mIzQzOyAqIHJhbmdlLlxuJiM0MzsgKlxuJiM0MzsgKiBPbiByZXR1cm4sIEBwYXJ0aWFsX3plcm9lZCByZWNvcmRzIHdoaWNoIGVkZ2VzIGFjdHVhbGx5IGdvdFxuJiM0MzsgKiBwYXJ0aWFsLXplcm9lZC4gIFNldCBFWFQ0X1BBUlRJQUxfWkVST19TVEFSVC9FWFQ0X1BBUlRJQUxfWkVST19FTkQgaWZcbiYjNDM7ICogdGhlIGhlYWQvdGFpbCBibG9jayBnb3QgYWN0dWFsbHkgcGFydGlhbGx5IHplcm9lZCAoaW4gd3JpdHRlbiwgZGlydHlcbiYjNDM7ICogdW53cml0dGVuIG9yIGRlbGFsbG9jIHN0YXRlKS4gIENsZWFyZWQgaWYgdGhlIGhlYWQvdGFpbCBibG9jayBpcyBhXG4mIzQzOyAqIGhvbGUgb3IgYSBjbGVhbiB1bndyaXR0ZW4gYmxvY2ssIGluIHdoaWNoIGNhc2UgdGhlcmUgaXMgbm90aGluZyB0aGF0XG4mIzQzOyAqIG5lZWRzIHplcm9pbmcuICBXaGVuIHRoZSBoZWFkIGFuZCB0YWlsIGxhbmQgaW4gdGhlIHNhbWUgYmxvY2ssIGJvdGhcbiYjNDM7ICogYml0cyBhcmUgc2V0IHRvZ2V0aGVyIG9uIGEgc3VjY2Vzc2Z1bCB6ZXJvaW5nLlxuJiM0MzsgKi9cbiBpbnQgZXh0NF96ZXJvX3BhcnRpYWxfYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBsc3RhcnQsIGxvZmZfdCBsZW5ndGgsXG4tXHRcdFx0ICAgICBib29sICpkaWRfemVybylcbiYjNDM7XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgKnBhcnRpYWxfemVyb2VkKVxuIHtcbiBcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuIFx0dW5zaWduZWQgcGFydGlhbF9zdGFydCwgcGFydGlhbF9lbmQ7XG4gXHRleHQ0X2ZzYmxrX3Qgc3RhcnQsIGVuZDtcbiBcdGxvZmZfdCBieXRlX2VuZCA9IChsc3RhcnQgJiM0MzsgbGVuZ3RoIC0gMSk7XG4mIzQzO1x0Ym9vbCBkaWRfemVybyA9IGZhbHNlO1xuIFx0aW50IGVyciA9IDA7XG4gXG4gXHRwYXJ0aWFsX3N0YXJ0ID0gbHN0YXJ0IFx1MDAyNiAoc2ItXHUwMDNlc19ibG9ja3NpemUgLSAxKTtcbkBAIC00MjcwLDIxICYjNDM7NDI5MiwzMiBAQCBpbnQgZXh0NF96ZXJvX3BhcnRpYWxfYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBsc3RhcnQsIGxvZmZfdCBsZW5ndGgsXG4gXHQvKiBIYW5kbGUgcGFydGlhbCB6ZXJvIHdpdGhpbiB0aGUgc2luZ2xlIGJsb2NrICovXG4gXHRpZiAoc3RhcnQgPT0gZW5kIFx1MDAyNlx1MDAyNlxuIFx0ICAgIChwYXJ0aWFsX3N0YXJ0IHx8IChwYXJ0aWFsX2VuZCAhPSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZSAtIDEpKSkge1xuLVx0XHRlcnIgPSBleHQ0X2Jsb2NrX3plcm9fcmFuZ2UoaW5vZGUsIGxzdGFydCwgbGVuZ3RoLCBkaWRfemVybyxcbiYjNDM7XHRcdGVyciA9IGV4dDRfYmxvY2tfemVyb19yYW5nZShpbm9kZSwgbHN0YXJ0LCBsZW5ndGgsIFx1MDAyNmRpZF96ZXJvLFxuIFx0XHRcdFx0XHQgICAgTlVMTCk7XG4mIzQzO1x0XHRpZiAoZGlkX3plcm8pXG4mIzQzO1x0XHRcdCpwYXJ0aWFsX3plcm9lZCB8PSAoRVhUNF9QQVJUSUFMX1pFUk9fU1RBUlQgfFxuJiM0MztcdFx0XHRcdFx0ICAgIEVYVDRfUEFSVElBTF9aRVJPX0VORCk7XG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXHQvKiBIYW5kbGUgcGFydGlhbCB6ZXJvIG91dCBvbiB0aGUgc3RhcnQgb2YgdGhlIHJhbmdlICovXG4gXHRpZiAocGFydGlhbF9zdGFydCkge1xuIFx0XHRlcnIgPSBleHQ0X2Jsb2NrX3plcm9fcmFuZ2UoaW5vZGUsIGxzdGFydCwgc2ItXHUwMDNlc19ibG9ja3NpemUsXG4tXHRcdFx0XHRcdCAgICBkaWRfemVybywgTlVMTCk7XG4mIzQzO1x0XHRcdFx0XHQgICAgXHUwMDI2ZGlkX3plcm8sIE5VTEwpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHRpZiAoZGlkX3plcm8pXG4mIzQzO1x0XHRcdCpwYXJ0aWFsX3plcm9lZCB8PSBFWFQ0X1BBUlRJQUxfWkVST19TVEFSVDtcbiBcdH1cbiBcdC8qIEhhbmRsZSBwYXJ0aWFsIHplcm8gb3V0IG9uIHRoZSBlbmQgb2YgdGhlIHJhbmdlICovXG4tXHRpZiAocGFydGlhbF9lbmQgIT0gc2ItXHUwMDNlc19ibG9ja3NpemUgLSAxKVxuJiM0MztcdGlmIChwYXJ0aWFsX2VuZCAhPSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZSAtIDEpIHtcbiYjNDM7XHRcdGRpZF96ZXJvID0gZmFsc2U7XG4gXHRcdGVyciA9IGV4dDRfYmxvY2tfemVyb19yYW5nZShpbm9kZSwgYnl0ZV9lbmQgLSBwYXJ0aWFsX2VuZCxcbi1cdFx0XHRcdFx0ICAgIHBhcnRpYWxfZW5kICYjNDM7IDEsIGRpZF96ZXJvLCBOVUxMKTtcbiYjNDM7XHRcdFx0XHRcdCAgICBwYXJ0aWFsX2VuZCAmIzQzOyAxLCBcdTAwMjZkaWRfemVybywgTlVMTCk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0aWYgKGRpZF96ZXJvKVxuJiM0MztcdFx0XHQqcGFydGlhbF96ZXJvZWQgfD0gRVhUNF9QQVJUSUFMX1pFUk9fRU5EO1xuJiM0MztcdH1cbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuQEAgLTQ0MzMsNyAmIzQzOzQ0NjYsNyBAQCBpbnQgZXh0NF9wdW5jaF9ob2xlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoKVxuIFx0bG9mZl90IGVuZCA9IG9mZnNldCAmIzQzOyBsZW5ndGg7XG4gXHRoYW5kbGVfdCAqaGFuZGxlO1xuIFx0dW5zaWduZWQgaW50IGNyZWRpdHM7XG4tXHRib29sIHBhcnRpYWxfemVyb2VkID0gZmFsc2U7XG4mIzQzO1x0dW5zaWduZWQgaW50IHBhcnRpYWxfemVyb2VkID0gMDtcbiBcdGludCByZXQ7XG4gXG4gXHR0cmFjZV9leHQ0X3B1bmNoX2hvbGUoaW5vZGUsIG9mZnNldCwgbGVuZ3RoLCAwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwOToxMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT41bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9hbGxvY19maWxlX2Jsb2NrcyYjMzQ7LAogICAgJiMzNDtleHQ0X3plcm9fcmFuZ2UmIzM0OywKICAgICYjMzQ7ZXh0NF96ZXJvX3BhcnRpYWxfYmxvY2tzJiMzNDssCiAgICAmIzM0O2V4dDRfbG9hZF90YWlsX2JoJiMzNDssCiAgICAmIzM0O2V4dDRfZmFsbG9jYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgYSBuZXcgZmFsbG9jYXRlIGZsYWcgYEZBTExPQ19GTF9XUklURV9aRVJPRVNgIGluIGV4dDQuIEl0IG1vZGlmaWVzIHRoZSBjb3JlIGJsb2NrIGFsbG9jYXRpb24gYW5kIHplcm9pbmcgbG9naWMsIGluY2x1ZGluZyBgZXh0NF96ZXJvX3JhbmdlYCwgYGV4dDRfYWxsb2NfZmlsZV9ibG9ja3NgLCBhbmQgYGV4dDRfemVyb19wYXJ0aWFsX2Jsb2Nrc2AuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGhvdyBleHQ0IGhhbmRsZXMgdW53cml0dGVuIGV4dGVudHMsIHBhcnRpYWwgYmxvY2sgemVyb2luZywgYW5kIG9ycGhhbiBsaXN0cyBkdXJpbmcgZmFsbG9jYXRlIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgZmlsZXN5c3RlbSBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIHZ1bG5lcmFiaWxpdGllcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWM0OTVkMDk2Y2I0OWI1YTU1MGE4MWZiNTcyNzhiNmQ1NTg3N2YzMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVsIDcgMDk6MTE6MDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oCmluZGV4IDk0MjgzYTk5MWU1YzRmLi5iMmU1NTg3NmQwZTM1MiAxMDA2NDQKLS0tIGEvZnMvZXh0NC9leHQ0LmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9leHQ0LmgKQEAgLTMwOTksOCAmIzQzOzMwOTksMTEgQEAgZXh0ZXJuIGludCBleHQ0X2NodW5rX3RyYW5zX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbnJibG9ja3MpOwogZXh0ZXJuIGludCBleHQ0X21ldGFfdHJhbnNfYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBsYmxvY2tzLAogCQkJCSAgaW50IHBleHRlbnRzKTsKIGV4dGVybiBpbnQgZXh0NF9ibG9ja196ZXJvX2VvZihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgZnJvbSwgbG9mZl90IGVuZCk7CiYjNDM7CiYjNDM7I2RlZmluZSBFWFQ0X1BBUlRJQUxfWkVST19TVEFSVAkweDEKJiM0MzsjZGVmaW5lIEVYVDRfUEFSVElBTF9aRVJPX0VORAkweDIKIGV4dGVybiBpbnQgZXh0NF96ZXJvX3BhcnRpYWxfYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBsc3RhcnQsCi0JCQkJICAgIGxvZmZfdCBsZW5ndGgsIGJvb2wgKmRpZF96ZXJvKTsKJiM0MzsJCQkJICAgIGxvZmZfdCBsZW5ndGgsIHVuc2lnbmVkIGludCAqcGFydGlhbF96ZXJvZWQpOwogZXh0ZXJuIHZtX2ZhdWx0X3QgZXh0NF9wYWdlX21rd3JpdGUoc3RydWN0IHZtX2ZhdWx0ICp2bWYpOwogZXh0ZXJuIHFzaXplX3QgKmV4dDRfZ2V0X3Jlc2VydmVkX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogZXh0ZXJuIGludCBleHQ0X2dldF9wcm9qaWQoc3RydWN0IGlub2RlICppbm9kZSwga3Byb2ppZF90ICpwcm9qaWQpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHRlbnRzLmMgYi9mcy9leHQ0L2V4dGVudHMuYwppbmRleCAxMjVmNjI4ZTczOGFiMS4uOGM3YTk4NDA1YTY0MmYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0ZW50cy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvZXh0ZW50cy5jCkBAIC00NTg1LDYgJiM0Mzs0NTg1LDcgQEAgc3RhdGljIGludCBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuLAogCWxvZmZfdCBlcG9zID0gMCwgb2xkX3NpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7CiAJdW5zaWduZWQgaW50IGJsa2JpdHMgPSBpbm9kZS0mZ3Q7aV9ibGtiaXRzOwogCWJvb2wgYWxsb2NfemVybyA9IGZhbHNlOwomIzQzOwlib29sIG9ycGhhbiA9IGZhbHNlOwogCiAJQlVHX09OKCFleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKSk7CiAJbWFwLm1fbGJsayA9IG9mZnNldCAmZ3Q7Jmd0OyBibGtiaXRzOwpAQCAtNDY1OSwxMiAmIzQzOzQ2NjAsMzAgQEAgc3RhdGljIGludCBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuLAogCiAJCWlmIChhbGxvY196ZXJvICZhbXA7JmFtcDsKIAkJICAgIChtYXAubV9mbGFncyAmYW1wOyAoRVhUNF9NQVBfTUFQUEVEIHwgRVhUNF9NQVBfVU5XUklUVEVOKSkpIHsKJiM0MzsJCQlXQVJOX09OX09OQ0UobWFwLm1fbGJsayAmIzQzOyBtYXAubV9sZW4gJmd0OwomIzQzOwkJCQlFWFQ0X0JfVE9fTEJMSyhpbm9kZSwgbmV3X3NpemUgPzogb2xkX3NpemUpKTsKJiM0MzsKIAkJCXJldCA9IGV4dDRfaXNzdWVfemVyb291dChpbm9kZSwgbWFwLm1fbGJsaywgbWFwLm1fcGJsaywKIAkJCQkJCSBtYXAubV9sZW4pOwotCQkJaWYgKGxpa2VseSghcmV0KSkKLQkJCQlyZXQgPSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoTlVMTCwKJiM0MzsJCQlpZiAodW5saWtlbHkocmV0KSkKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CiYjNDM7CQkJaGFuZGxlID0gZXh0NF9qb3VybmFsX3N0YXJ0KGlub2RlLCBFWFQ0X0hUX01BUF9CTE9DS1MsCiYjNDM7CQkJCQkJICAgIGNyZWRpdHMpOwomIzQzOwkJCWlmIChJU19FUlIoaGFuZGxlKSkgewomIzQzOwkJCQlyZXQgPSBQVFJfRVJSKGhhbmRsZSk7CiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCX0KJiM0MzsKJiM0MzsJCQlyZXQgPSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoaGFuZGxlLAogCQkJCQlpbm9kZSwgKGxvZmZfdCltYXAubV9sYmxrICZsdDsmbHQ7IGJsa2JpdHMsCiAJCQkJCShsb2ZmX3QpbWFwLm1fbGVuICZsdDsmbHQ7IGJsa2JpdHMpOwomIzQzOwkJCWlmICghcmV0ICZhbXA7JmFtcDsgbmV3X3NpemUpIHsKJiM0MzsJCQkJcmV0ID0gZXh0NF9vcnBoYW5fYWRkKGhhbmRsZSwgaW5vZGUpOwomIzQzOwkJCQlvcnBoYW4gPSB0cnVlOwomIzQzOwkJCX0KJiM0MzsJCQlyZXQyID0gZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTsKJiM0MzsJCQlyZXQgPSByZXQgPyByZXQgOiByZXQyOwogCQkJaWYgKHJldCkKIAkJCQlicmVhazsKIAkJfQpAQCAtNDY4NywxMiAmIzQzOzQ3MDYsMTcgQEAgc3RhdGljIGludCBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuLAogCWlmIChlcG9zICZndDsgbmV3X3NpemUpCiAJCWVwb3MgPSBuZXdfc2l6ZTsKIAotCWhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgRVhUNF9IVF9NSVNDLCAxKTsKLQlpZiAoSVNfRVJSKGhhbmRsZSkpCiYjNDM7CWhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgRVhUNF9IVF9NSVNDLCAyKTsKJiM0MzsJaWYgKElTX0VSUihoYW5kbGUpKSB7CiYjNDM7CQlpZiAob3JwaGFuICZhbXA7JmFtcDsgaW5vZGUtJmd0O2lfbmxpbmspCiYjNDM7CQkJZXh0NF9vcnBoYW5fZGVsKE5VTEwsIGlub2RlKTsKIAkJcmV0dXJuIHJldCA/IHJldCA6IFBUUl9FUlIoaGFuZGxlKTsKJiM0MzsJfQogCiAJZXh0NF91cGRhdGVfaW5vZGVfc2l6ZShpbm9kZSwgZXBvcyk7CiAJcmV0MiA9IGV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTsKJiM0MzsJaWYgKG9ycGhhbiAmYW1wOyZhbXA7IGlub2RlLSZndDtpX25saW5rKQomIzQzOwkJZXh0NF9vcnBoYW5fZGVsKGhhbmRsZSwgaW5vZGUpOwogCWV4dDRfdXBkYXRlX2lub2RlX2ZzeW5jX3RyYW5zKGhhbmRsZSwgaW5vZGUsIDEpOwogCXJldDMgPSBleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpOwogCXJldDIgPSByZXQzID8gcmV0MyA6IHJldDI7CkBAIC00NzE1LDcgJiM0Mzs0NzM5LDcgQEAgc3RhdGljIGxvbmcgZXh0NF96ZXJvX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LAogCWxvZmZfdCBhbGlnbl9zdGFydCwgYWxpZ25fZW5kLCBuZXdfc2l6ZSA9IDA7CiAJbG9mZl90IGVuZCA9IG9mZnNldCAmIzQzOyBsZW47CiAJdW5zaWduZWQgaW50IGJsb2Nrc2l6ZSA9IGlfYmxvY2tzaXplKGlub2RlKTsKLQlib29sIHBhcnRpYWxfemVyb2VkID0gZmFsc2U7CiYjNDM7CXVuc2lnbmVkIGludCBwYXJ0aWFsX3plcm9lZCA9IDA7CiAJaW50IHJldCwgZmxhZ3M7CiAKIAl0cmFjZV9leHQ0X3plcm9fcmFuZ2UoaW5vZGUsIG9mZnNldCwgbGVuLCBtb2RlKTsKQEAgLTQ3MzQsMTAgJiM0Mzs0NzU4LDE2IEBAIHN0YXRpYyBsb25nIGV4dDRfemVyb19yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwKIAl9CiAKIAlmbGFncyA9IEVYVDRfR0VUX0JMT0NLU19DUkVBVEVfVU5XUklUX0VYVDsKLQkvKiBQcmVhbGxvY2F0ZSB0aGUgcmFuZ2UgaW5jbHVkaW5nIHRoZSB1bmFsaWduZWQgZWRnZXMgKi8KJiM0MzsJLyoKJiM0MzsJICogUHJlYWxsb2NhdGUgdGhlIHJhbmdlIGluY2x1ZGluZyB0aGUgdW5hbGlnbmVkIGVkZ2VzLCBhbmQgemVybwomIzQzOwkgKiBvdXQgcGFydGlhbCBibG9ja3MgaWYgdGhleSBhbHJlYWR5IGNvbnRhaW4gZGF0YS4KJiM0MzsJICovCiAJaWYgKCFJU19BTElHTkVEKG9mZnNldCB8IGVuZCwgYmxvY2tzaXplKSkgewogCQlyZXQgPSBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzKGZpbGUsIG9mZnNldCwgbGVuLCBuZXdfc2l6ZSwKIAkJCQkJICAgICBmbGFncyk7CiYjNDM7CQlpZiAoIXJldCkKJiM0MzsJCQlyZXQgPSBleHQ0X3plcm9fcGFydGlhbF9ibG9ja3MoaW5vZGUsIG9mZnNldCwgbGVuLAomIzQzOwkJCQkJCSAgICAgICAmYW1wO3BhcnRpYWxfemVyb2VkKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAJfQpAQCAtNDc1NCw2ICYjNDM7NDc4NCwyMSBAQCBzdGF0aWMgbG9uZyBleHQ0X3plcm9fcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsCiAJLyogWmVybyByYW5nZSBleGNsdWRpbmcgdGhlIHVuYWxpZ25lZCBlZGdlcyAqLwogCWFsaWduX3N0YXJ0ID0gcm91bmRfdXAob2Zmc2V0LCBibG9ja3NpemUpOwogCWFsaWduX2VuZCA9IHJvdW5kX2Rvd24oZW5kLCBibG9ja3NpemUpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBJbiBXUklURV9aRVJPRVMgbW9kZSwgZWRnZXMgdGhhdCB3ZXJlIG5vdCBwYXJ0aWFsLXplcm9lZCAoY2xlYW4KJiM0MzsJICogdW53cml0dGVuIG9yIGhvbGUpIG11c3QgYmUgYWxsb2NhdGVkIGFuZCB6ZXJvZWQgYXMgd2hvbGUgYmxvY2tzLgomIzQzOwkgKiBFeHBhbmQgdGhlIGFsaWduZWQgcmFuZ2Ugb3V0d2FyZCB0byBjb3ZlciB0aGVtLgomIzQzOwkgKi8KJiM0MzsJaWYgKG1vZGUgJmFtcDsgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FUykgewomIzQzOwkJaWYgKCFJU19BTElHTkVEKG9mZnNldCwgYmxvY2tzaXplKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIShwYXJ0aWFsX3plcm9lZCAmYW1wOyBFWFQ0X1BBUlRJQUxfWkVST19TVEFSVCkpCiYjNDM7CQkJYWxpZ25fc3RhcnQgPSByb3VuZF9kb3duKG9mZnNldCwgYmxvY2tzaXplKTsKJiM0MzsJCWlmICghSVNfQUxJR05FRChlbmQsIGJsb2Nrc2l6ZSkgJmFtcDsmYW1wOwomIzQzOwkJICAgICEocGFydGlhbF96ZXJvZWQgJmFtcDsgRVhUNF9QQVJUSUFMX1pFUk9fRU5EKSkKJiM0MzsJCQlhbGlnbl9lbmQgPSByb3VuZF91cChlbmQsIGJsb2Nrc2l6ZSk7CiYjNDM7CX0KJiM0MzsKIAlpZiAoYWxpZ25fZW5kICZndDsgYWxpZ25fc3RhcnQpIHsKIAkJaWYgKG1vZGUgJmFtcDsgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FUykKIAkJCWZsYWdzID0gRVhUNF9HRVRfQkxPQ0tTX0NSRUFURV9aRVJPIHwgRVhUNF9FWF9OT0NBQ0hFOwpAQCAtNDc3MCwxMSAmIzQzOzQ4MTUsMTUgQEAgc3RhdGljIGxvbmcgZXh0NF96ZXJvX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LAogCWlmIChJU19BTElHTkVEKG9mZnNldCB8IGVuZCwgYmxvY2tzaXplKSkKIAkJcmV0dXJuIHJldDsKIAotCS8qIFplcm8gb3V0IHBhcnRpYWwgYmxvY2sgYXQgdGhlIGVkZ2VzIG9mIHRoZSByYW5nZSAqLwotCXJldCA9IGV4dDRfemVyb19wYXJ0aWFsX2Jsb2Nrcyhpbm9kZSwgb2Zmc2V0LCBsZW4sICZhbXA7cGFydGlhbF96ZXJvZWQpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0JaWYgKCgoZmlsZS0mZ3Q7Zl9mbGFncyAmYW1wOyBPX1NZTkMpIHx8IElTX1NZTkMoaW5vZGUpKSAmYW1wOyZhbXA7IHBhcnRpYWxfemVyb2VkKSB7CiYjNDM7CS8qCiYjNDM7CSAqIEluIEZBTExPQ19GTF9XUklURV9aRVJPRVMgbW9kZSwgZWRnZXMgdGhhdCBoYXZlIGJlZW4gcGFydGlhbGx5CiYjNDM7CSAqIHplcm9lZCBtdXN0IGJlIHdyaXR0ZW4gYmFjayB0byBlbnN1cmUgdGhlIGVudGlyZSB6ZXJvZWQgcmFuZ2UKJiM0MzsJICogaXMgY29udmVydGVkIHRvIHRoZSB3cml0dGVuIHN0YXRlLiBJbiBTWU5DIG1vZGUsIHdyaXRlYmFjayBpcwomIzQzOwkgKiBhbHNvIHJlcXVpcmVkIHRvIHBlcnNpc3QgdGhlIHplcm9lZCBkYXRhIHRvIGRpc2suCiYjNDM7CSAqLwomIzQzOwlpZiAocGFydGlhbF96ZXJvZWQgJmFtcDsmYW1wOwomIzQzOwkgICAgKChtb2RlICZhbXA7IEZBTExPQ19GTF9XUklURV9aRVJPRVMpIHx8CiYjNDM7CSAgICAgKGZpbGUtJmd0O2ZfZmxhZ3MgJmFtcDsgT19TWU5DKSB8fCBJU19TWU5DKGlub2RlKSkpIHsKIAkJcmV0ID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdF9yYW5nZShpbm9kZS0mZ3Q7aV9tYXBwaW5nLCBvZmZzZXQsCiAJCQkJCQkgICBlbmQgLSAxKTsKIAkJaWYgKHJldCkKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuYwppbmRleCBjMmMyZDZhYzdmM2QxMy4uYjUyMTdkNWZlOTU0MGIgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2lub2RlLmMKQEAgLTQwMjYsNiAmIzQzOzQwMjYsMTAgQEAgdm9pZCBleHQ0X3NldF9hb3BzKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAgKiBiZWNhdXNlIGl0IG1pZ2h0IGhhdmUgZGF0YSBpbiBwYWdlY2FjaGUgKGVnLCBpZiBjYWxsZWQgZnJvbSBleHQ0X3plcm9fcmFuZ2UsCiAgKiBleHQ0X3B1bmNoX2hvbGUsIGV0Yykgd2hpY2ggbmVlZHMgdG8gYmUgcHJvcGVybHkgemVyb2VkIG91dC4gT3RoZXJ3aXNlIGEKICAqIHJhY2luZyB3cml0ZWJhY2sgY2FuIGNvbWUgbGF0ZXIgYW5kIGZsdXNoIHRoZSBzdGFsZSBwYWdlY2FjaGUgdG8gZGlzay4KJiM0MzsgKgomIzQzOyAqIFJldHVybiB0aGUgbG9hZGVkIGJoIGlmIGl0IGFjdHVhbGx5IG5lZWRzIHplcm9pbmcgLSBpbiB3cml0dGVuLCBkaXJ0eQomIzQzOyAqIHVud3JpdHRlbiwgb3IgZGVsYWxsb2Mgc3RhdGUuIFJldHVybiBOVUxMIGlmIGl0JiMzOTtzIGNsZWFuIChpLmUuLCBhIGhvbGUgb3IKJiM0MzsgKiBhIGNsZWFuIHVud3JpdHRlbiBibG9jaykuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmV4dDRfbG9hZF90YWlsX2JoKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBmcm9tKQogewpAQCAtNDA2NSw3ICYjNDM7NDA2OSwxMiBAQCBzdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICpleHQ0X2xvYWRfdGFpbF9iaChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgZnJvbSkKIAlpZiAoIWJ1ZmZlcl9tYXBwZWQoYmgpKSB7CiAJCUJVRkZFUl9UUkFDRShiaCwgJiMzNDt1bm1hcHBlZCYjMzQ7KTsKIAkJZXh0NF9nZXRfYmxvY2soaW5vZGUsIGlibG9jaywgYmgsIDApOwotCQkvKiB1bm1hcHBlZD8gSXQmIzM5O3MgYSBob2xlIC0gbm90aGluZyB0byBkbyAqLwomIzQzOwkJLyoKJiM0MzsJCSAqIEl0JiMzOTtzIGEgaG9sZSBvciBhIGNsZWFuIHVud3JpdHRlbiBibG9jayAtIG5vdGhpbmcgdG8gZG8uCiYjNDM7CQkgKiBOb3RlIHRoYXQgYSBsb29rdXAtb25seSBnZXRfYmxvY2sgKHdpdGhvdXQKJiM0MzsJCSAqIEVYVDRfR0VUX0JMT0NLU19DUkVBVEUpIG5ldmVyIHNldHMgQkhfTWFwcGVkIGZvciBjbGVhbgomIzQzOwkJICogdW53cml0dGVuIGV4dGVudHMuCiYjNDM7CQkgKi8KIAkJaWYgKCFidWZmZXJfbWFwcGVkKGJoKSkgewogCQkJQlVGRkVSX1RSQUNFKGJoLCAmIzM0O3N0aWxsIHVubWFwcGVkJiMzNDspOwogCQkJZ290byB1bmxvY2s7CkBAIC00MjUyLDEzICYjNDM7NDI2MSwyNiBAQCBpbnQgZXh0NF9ibG9ja196ZXJvX2VvZihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgZnJvbSwgbG9mZl90IGVuZCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qCiYjNDM7ICogWmVybyBvdXQgdGhlIHVuYWxpZ25lZCBoZWFkIGFuZCB0YWlsIG9mIHRoZSBbbHN0YXJ0LCBsc3RhcnQmIzQzO2xlbmd0aCkKJiM0MzsgKiByYW5nZS4KJiM0MzsgKgomIzQzOyAqIE9uIHJldHVybiwgQHBhcnRpYWxfemVyb2VkIHJlY29yZHMgd2hpY2ggZWRnZXMgYWN0dWFsbHkgZ290CiYjNDM7ICogcGFydGlhbC16ZXJvZWQuICBTZXQgRVhUNF9QQVJUSUFMX1pFUk9fU1RBUlQvRVhUNF9QQVJUSUFMX1pFUk9fRU5EIGlmCiYjNDM7ICogdGhlIGhlYWQvdGFpbCBibG9jayBnb3QgYWN0dWFsbHkgcGFydGlhbGx5IHplcm9lZCAoaW4gd3JpdHRlbiwgZGlydHkKJiM0MzsgKiB1bndyaXR0ZW4gb3IgZGVsYWxsb2Mgc3RhdGUpLiAgQ2xlYXJlZCBpZiB0aGUgaGVhZC90YWlsIGJsb2NrIGlzIGEKJiM0MzsgKiBob2xlIG9yIGEgY2xlYW4gdW53cml0dGVuIGJsb2NrLCBpbiB3aGljaCBjYXNlIHRoZXJlIGlzIG5vdGhpbmcgdGhhdAomIzQzOyAqIG5lZWRzIHplcm9pbmcuICBXaGVuIHRoZSBoZWFkIGFuZCB0YWlsIGxhbmQgaW4gdGhlIHNhbWUgYmxvY2ssIGJvdGgKJiM0MzsgKiBiaXRzIGFyZSBzZXQgdG9nZXRoZXIgb24gYSBzdWNjZXNzZnVsIHplcm9pbmcuCiYjNDM7ICovCiBpbnQgZXh0NF96ZXJvX3BhcnRpYWxfYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBsc3RhcnQsIGxvZmZfdCBsZW5ndGgsCi0JCQkgICAgIGJvb2wgKmRpZF96ZXJvKQomIzQzOwkJCSAgICAgdW5zaWduZWQgaW50ICpwYXJ0aWFsX3plcm9lZCkKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtJmd0O2lfc2I7CiAJdW5zaWduZWQgcGFydGlhbF9zdGFydCwgcGFydGlhbF9lbmQ7CiAJZXh0NF9mc2Jsa190IHN0YXJ0LCBlbmQ7CiAJbG9mZl90IGJ5dGVfZW5kID0gKGxzdGFydCAmIzQzOyBsZW5ndGggLSAxKTsKJiM0MzsJYm9vbCBkaWRfemVybyA9IGZhbHNlOwogCWludCBlcnIgPSAwOwogCiAJcGFydGlhbF9zdGFydCA9IGxzdGFydCAmYW1wOyAoc2ItJmd0O3NfYmxvY2tzaXplIC0gMSk7CkBAIC00MjcwLDIxICYjNDM7NDI5MiwzMiBAQCBpbnQgZXh0NF96ZXJvX3BhcnRpYWxfYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBsc3RhcnQsIGxvZmZfdCBsZW5ndGgsCiAJLyogSGFuZGxlIHBhcnRpYWwgemVybyB3aXRoaW4gdGhlIHNpbmdsZSBibG9jayAqLwogCWlmIChzdGFydCA9PSBlbmQgJmFtcDsmYW1wOwogCSAgICAocGFydGlhbF9zdGFydCB8fCAocGFydGlhbF9lbmQgIT0gc2ItJmd0O3NfYmxvY2tzaXplIC0gMSkpKSB7Ci0JCWVyciA9IGV4dDRfYmxvY2tfemVyb19yYW5nZShpbm9kZSwgbHN0YXJ0LCBsZW5ndGgsIGRpZF96ZXJvLAomIzQzOwkJZXJyID0gZXh0NF9ibG9ja196ZXJvX3JhbmdlKGlub2RlLCBsc3RhcnQsIGxlbmd0aCwgJmFtcDtkaWRfemVybywKIAkJCQkJICAgIE5VTEwpOwomIzQzOwkJaWYgKGRpZF96ZXJvKQomIzQzOwkJCSpwYXJ0aWFsX3plcm9lZCB8PSAoRVhUNF9QQVJUSUFMX1pFUk9fU1RBUlQgfAomIzQzOwkJCQkJICAgIEVYVDRfUEFSVElBTF9aRVJPX0VORCk7CiAJCXJldHVybiBlcnI7CiAJfQogCS8qIEhhbmRsZSBwYXJ0aWFsIHplcm8gb3V0IG9uIHRoZSBzdGFydCBvZiB0aGUgcmFuZ2UgKi8KIAlpZiAocGFydGlhbF9zdGFydCkgewogCQllcnIgPSBleHQ0X2Jsb2NrX3plcm9fcmFuZ2UoaW5vZGUsIGxzdGFydCwgc2ItJmd0O3NfYmxvY2tzaXplLAotCQkJCQkgICAgZGlkX3plcm8sIE5VTEwpOwomIzQzOwkJCQkJICAgICZhbXA7ZGlkX3plcm8sIE5VTEwpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKJiM0MzsJCWlmIChkaWRfemVybykKJiM0MzsJCQkqcGFydGlhbF96ZXJvZWQgfD0gRVhUNF9QQVJUSUFMX1pFUk9fU1RBUlQ7CiAJfQogCS8qIEhhbmRsZSBwYXJ0aWFsIHplcm8gb3V0IG9uIHRoZSBlbmQgb2YgdGhlIHJhbmdlICovCi0JaWYgKHBhcnRpYWxfZW5kICE9IHNiLSZndDtzX2Jsb2Nrc2l6ZSAtIDEpCiYjNDM7CWlmIChwYXJ0aWFsX2VuZCAhPSBzYi0mZ3Q7c19ibG9ja3NpemUgLSAxKSB7CiYjNDM7CQlkaWRfemVybyA9IGZhbHNlOwogCQllcnIgPSBleHQ0X2Jsb2NrX3plcm9fcmFuZ2UoaW5vZGUsIGJ5dGVfZW5kIC0gcGFydGlhbF9lbmQsCi0JCQkJCSAgICBwYXJ0aWFsX2VuZCAmIzQzOyAxLCBkaWRfemVybywgTlVMTCk7CiYjNDM7CQkJCQkgICAgcGFydGlhbF9lbmQgJiM0MzsgMSwgJmFtcDtkaWRfemVybywgTlVMTCk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CQlpZiAoZGlkX3plcm8pCiYjNDM7CQkJKnBhcnRpYWxfemVyb2VkIHw9IEVYVDRfUEFSVElBTF9aRVJPX0VORDsKJiM0MzsJfQogCXJldHVybiBlcnI7CiB9CiAKQEAgLTQ0MzMsNyAmIzQzOzQ0NjYsNyBAQCBpbnQgZXh0NF9wdW5jaF9ob2xlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoKQogCWxvZmZfdCBlbmQgPSBvZmZzZXQgJiM0MzsgbGVuZ3RoOwogCWhhbmRsZV90ICpoYW5kbGU7CiAJdW5zaWduZWQgaW50IGNyZWRpdHM7Ci0JYm9vbCBwYXJ0aWFsX3plcm9lZCA9IGZhbHNlOwomIzQzOwl1bnNpZ25lZCBpbnQgcGFydGlhbF96ZXJvZWQgPSAwOwogCWludCByZXQ7CiAKIAl0cmFjZV9leHQ0X3B1bmNoX2hvbGUoaW5vZGUsIG9mZnNldCwgbGVuZ3RoLCAwKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDk6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQyOQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDMzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGV4dDQgUGF0Y2ggZm9yIFBhcnRpYWwgWmVyb2luZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgbWFraW5nIHNvbWUgZnVuZGFtZW50YWwgY2hhbmdlcyB0byBob3cgZXh0NCBoYW5kbGVzIHBhcnRpYWwgemVyb2luZyBvZiBibG9ja3MuIFRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gaXMgaW4gYGZzL2V4dDQvZXh0ZW50cy5jYCBhbmQgYGZzL2V4dDQvaW5vZGUuY2AuIEl0IGxvb2tzIGxpa2Ugd2UgYXJlIGRlYWxpbmcgd2l0aCB0aGUgYGZhbGxvY2F0ZWAgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSB3aGVuIGl0JiMzOTtzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgYEZBTExPQ19GTF9XUklURV9aRVJPRVNgIGZsYWcuIEFjdHVhbGx5LCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQuLi4gd2FpdCBhIHNlY29uZCwgdGhlcmUgaXMgYSBgRkFMTE9DX0ZMX1pFUk9fUkFOR0VgIGZsYWcuIE1heWJlIGl0JiMzOTtzIG5vdCBgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FU2AsIHRoZXJlIGlzIG5vIHN0YW5kYXJkIGBGQUxMT0NfRkxfV1JJVEVfWkVST0VTYC4gT0ssIExldCBtZSBncmVwIGZvciB0aGUgY29kZSwganVzdCB0byBtYWtlIHN1cmUgSSBhbSB0aGlua2luZyBhYm91dCB0aGlzIGNvcnJlY3RseSwgeWVzLCBgbW9kZSAmYW1wOyBGQUxMT0NfRkxfV1JJVEVfWkVST0VTYC4gT2suCgpUaGUgcGF0Y2ggc2VlbXMgdG8gaW50cm9kdWNlIGBFWFQ0X1BBUlRJQUxfWkVST19TVEFSVGAgYW5kIGBFWFQ0X1BBUlRJQUxfWkVST19FTkRgIGZsYWdzLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSXQgYWxzbyBhcHBlYXJzIHRvIGJlIHJlZmluaW5nIGhvdyBgZXh0NF96ZXJvX3BhcnRpYWxfYmxvY2tzYCB3b3JrcyBieSByZXR1cm5pbmcgYSBiaXRtYXNrIG9mIHBhcnRpYWwgemVyb2VkIGVkZ2VzIGluc3RlYWQgb2YgYSBib29sZWFuIHZhbHVlLiBUaGlzIGlzIGEgc3VidGxlIGJ1dCBpbXBvcnRhbnQgc2hpZnQgaW4gc2lnbmFsaW5nIGFuZCBjb3VsZCBpbXBhY3QgaG93IHdlIHRyYWNrIHRob3NlIHBhcnRpYWwgYmxvY2tzLgoKQ3J1Y2lhbGx5LCB0aGUgcGF0Y2ggYWxzbyBtb2RpZmllcyBgZXh0NF9hbGxvY19maWxlX2Jsb2Nrc2AuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3Mgbm93IGhhbmRsaW5nIGBhbGxvY196ZXJvYCBjYWxscyByZWxhdGVkIHRvIHVud3JpdHRlbiBleHRlbnRzLiBJdCBhcHBlYXJzIHRoYXQgaXQgbWF5IGludm9sdmUgcG90ZW50aWFsbHkgYWRkaW5nIHRoZSBpbm9kZSB0byB0aGUgb3JwaGFuIGxpc3QuIFRoaXMgaXMgc29tZXRoaW5nIHRvIGtlZXAgYW4gZXllIG9uIGJlY2F1c2UgaXQgbWVhbnMgdGhhdCB0aGVyZSBtYXkgYmUgZmlsZSBzeXN0ZW0gY29uc2lzdGVuY3kgaW1wbGljYXRpb25zIGZvciByZWNvdmVyeSBzY2VuYXJpb3MuCgpPdmVyYWxsLCB0aGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gZXh0NCYjMzk7cyBibG9jayBhbGxvY2F0aW9uIGFuZCB6ZXJvaW5nIGxvZ2ljLCBwb3RlbnRpYWxseSBpbXBhY3RpbmcgcGVyZm9ybWFuY2UgYW5kLCBtb3JlIGltcG9ydGFudGx5LCB0aGUgcmVsaWFiaWxpdHkgb2YgZmlsZSB6ZXJvaW5nLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHRoZSBibG9jayBhbGxvY2F0b3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDk6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RkFMTE9DX0ZMXyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgODk3IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2ZzY3J5cHQucnN0PTEyMDg9YXN0dXRlIHVzZXJzIG1heSBub3RpY2Ugc29tZSBkaWZmZXJlbmNlcyBpbiBiZWhhdmlvcjpcbi0tXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2ZzY3J5cHQucnN0LTEyMjctXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2ZzY3J5cHQucnN0OjEyMjg6LSBUaGUgZmFsbG9jYXRlIG9wZXJhdGlvbnMgRkFMTE9DX0ZMX0NPTExBUFNFX1JBTkdFIGFuZFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9mc2NyeXB0LnJzdDoxMjI5OiAgRkFMTE9DX0ZMX0lOU0VSVF9SQU5HRSBhcmUgbm90IHN1cHBvcnRlZCBvbiBlbmNyeXB0ZWQgZmlsZXMgYW5kIHdpbGxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZnNjcnlwdC5yc3QtMTIzMC0gIGZhaWwgd2l0aCBFT1BOT1RTVVBQLlxuLS1cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3Q9NDQxPWZpbGVzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBob2xlIHB1bmNoaW5nIChkZWFsbG9jYXRpbmcgc3BhY2UgaW4gdGhlIG1pZGRsZSBvZiBhXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0OjQ0MjpmaWxlKSB5b3UgbXVzdCByZXR1cm4gLUVPUE5PVFNVUFAgaWYgRkFMTE9DX0ZMX1BVTkNIX0hPTEUgaXMgc2V0IGluIG1vZGUuXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0OjQ0MzpDdXJyZW50bHkgeW91IGNhbiBvbmx5IGhhdmUgRkFMTE9DX0ZMX1BVTkNIX0hPTEUgd2l0aCBGQUxMT0NfRkxfS0VFUF9TSVpFIHNldCxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3QtNDQ0LXNvIHRoZSBpX3NpemUgc2hvdWxkIG5vdCBjaGFuZ2Ugd2hlbiBob2xlIHB1bmNoaW5nLCBldmVuIHdoZW4gcHVjaGluZyB0aGUgZW5kIG9mXG4tLVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZmF0LnJzdD0yMjc9VGhlIGZhbGxvY2F0ZWQgcmVnaW9uIG9mIGZpbGUgaXMgZGlzY2FyZGVkIGF0IHVtb3VudC9ldmljdCB0aW1lXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3ZmYXQucnN0OjIyODp3aGVuIHVzaW5nIGZhbGxvY2F0ZSB3aXRoIEZBTExPQ19GTF9LRUVQX1NJWkUuXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3ZmYXQucnN0LTIyOS1TbywgVXNlciBzaG91bGQgYXNzdW1lIHRoYXQgZmFsbG9jYXRlZCByZWdpb24gY2FuIGJlIGRpc2NhcmRlZCBhdFxuLS1cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMveGZzL3hmcy1vbmxpbmUtZnNjay1kZXNpZ24ucnN0PTIyMDQ9VG8gZnJlZSBhbiB4ZmJ0cmVlIGJsb2NrLCB1c2UgYGB4ZmlsZV9kaXNjYXJkYGAgKHdoaWNoIGludGVybmFsbHkgdXNlc1xuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy94ZnMveGZzLW9ubGluZS1mc2NrLWRlc2lnbi5yc3Q6MjIwNTpgYEZBTExPQ19GTF9QVU5DSF9IT0xFYGApIHRvIHJlbW92ZSB0aGUgbWVtb3J5IHBhZ2UgZnJvbSB0aGUgeGZpbGUuXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3hmcy94ZnMtb25saW5lLWZzY2stZGVzaWduLnJzdC0yMjA2LVxuLS1cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMveGZzL3hmcy1vbmxpbmUtZnNjay1kZXNpZ24ucnN0PTUyMDY9VGhlIHNlY29uZCBwaWVjZSBpdCBuZWVkcyBpcyBhIG5ldyBmYWxsb2NhdGUgbW9kZVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy94ZnMveGZzLW9ubGluZS1mc2NrLWRlc2lnbi5yc3Q6NTIwNzooYGBGQUxMT0NfRkxfTUFQX0ZSRUVfU1BBQ0VgYCkgdGhhdCBhbGxvY2F0ZXMgdGhlIGZyZWUgc3BhY2UgaW4gYSByZWdpb24gYW5kXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3hmcy94ZnMtb25saW5lLWZzY2stZGVzaWduLnJzdC01MjA4LW1hcHMgaXQgdG8gYSBmaWxlLlxuLS1cbkRvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9sYW5kbG9jay5yc3Q9Mzk5PUF0IHRoZSBzYW1lIHRpbWUsIG9uIHNvbWUgZmlsZXN5c3RlbXMsIDptYW5wYWdlOmBmYWxsb2NhdGUoMilgIG9mZmVycyBhIHdheSB0b1xuRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBpL2xhbmRsb2NrLnJzdDo0MDA6c2hvcnRlbiBmaWxlIGNvbnRlbnRzIHdpdGggYGBGQUxMT0NfRkxfQ09MTEFQU0VfUkFOR0VgYCB3aGVuIHRoZSBmaWxlIGlzIG9wZW5lZFxuRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBpL2xhbmRsb2NrLnJzdC00MDEtZm9yIHdyaXRpbmcsIHNpZGVzdGVwcGluZyB0aGUgYGBMQU5ETE9DS19BQ0NFU1NfRlNfVFJVTkNBVEVgYCByaWdodC5cbi0tXG5hcmNoL3VtL29zLUxpbnV4L2ZpbGUuYz02MTY9aW50IG9zX2ZhbGxvY19wdW5jaChpbnQgZmQsIHVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsIGludCBsZW4pXG5hcmNoL3VtL29zLUxpbnV4L2ZpbGUuYy02MTcte1xuYXJjaC91bS9vcy1MaW51eC9maWxlLmM6NjE4Olx0aW50IG4gPSBmYWxsb2NhdGUoZmQsIEZBTExPQ19GTF9QVU5DSF9IT0xFfEZBTExPQ19GTF9LRUVQX1NJWkUsIG9mZnNldCwgbGVuKTtcbmFyY2gvdW0vb3MtTGludXgvZmlsZS5jLTYxOS1cbi0tXG5hcmNoL3VtL29zLUxpbnV4L2ZpbGUuYz02MjU9aW50IG9zX2ZhbGxvY196ZXJvZXMoaW50IGZkLCB1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0LCBpbnQgbGVuKVxuYXJjaC91bS9vcy1MaW51eC9maWxlLmMtNjI2LXtcbmFyY2gvdW0vb3MtTGludXgvZmlsZS5jOjYyNzpcdGludCBuID0gZmFsbG9jYXRlKGZkLCBGQUxMT0NfRkxfWkVST19SQU5HRXxGQUxMT0NfRkxfS0VFUF9TSVpFLCBvZmZzZXQsIGxlbik7XG5hcmNoL3VtL29zLUxpbnV4L2ZpbGUuYy02MjgtXG4tLVxuYmxvY2svZm9wcy5jPTgxMT1zdGF0aWMgc3NpemVfdCBibGtkZXZfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbi0tXG5ibG9jay9mb3BzLmMtODYzLVxuYmxvY2svZm9wcy5jOjg2NDojZGVmaW5lXHRCTEtERVZfRkFMTE9DX0ZMX1NVUFBPUlRFRFx0XHRcdFx0XHRcXFxuYmxvY2svZm9wcy5jOjg2NTpcdFx0KEZBTExPQ19GTF9LRUVQX1NJWkUgfCBGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8XHRcdFxcXG5ibG9jay9mb3BzLmM6ODY2Olx0XHQgRkFMTE9DX0ZMX1pFUk9fUkFOR0UgfCBGQUxMT0NfRkxfV1JJVEVfWkVST0VTKVxuYmxvY2svZm9wcy5jLTg2Ny1cbmJsb2NrL2ZvcHMuYz04Njg9c3RhdGljIGxvbmcgYmxrZGV2X2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBzdGFydCxcbi0tXG5ibG9jay9mb3BzLmMtODc4LVx0LyogRmFpbCBpZiB3ZSBkb24mIzM5O3QgcmVjb2duaXplIHRoZSBmbGFncy4gKi9cbmJsb2NrL2ZvcHMuYzo4Nzk6XHRpZiAobW9kZSBcdTAwMjYgfkJMS0RFVl9GQUxMT0NfRkxfU1VQUE9SVEVEKVxuYmxvY2svZm9wcy5jLTg4MC1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbmJsb2NrL2ZvcHMuYy04ODQtXHQgKi9cbmJsb2NrL2ZvcHMuYzo4ODU6XHRpZiAoKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9XUklURV9aRVJPRVMpIFx1MDAyNlx1MDAyNlxuYmxvY2svZm9wcy5jLTg4Ni1cdCAgICAhYmRldl93cml0ZV96ZXJvZXNfdW5tYXBfc2VjdG9ycyhiZGV2KSlcbi0tXG5ibG9jay9mb3BzLmMtODkzLVx0aWYgKGVuZCBcdTAwM2U9IGlzaXplKSB7XG5ibG9jay9mb3BzLmM6ODk0Olx0XHRpZiAobW9kZSBcdTAwMjYgRkFMTE9DX0ZMX0tFRVBfU0laRSkge1xuYmxvY2svZm9wcy5jLTg5NS1cdFx0XHRsZW4gPSBpc2l6ZSAtIHN0YXJ0O1xuLS1cbmJsb2NrL2ZvcHMuYy05MTAtXHRzd2l0Y2ggKG1vZGUpIHtcbmJsb2NrL2ZvcHMuYzo5MTE6XHRjYXNlIEZBTExPQ19GTF9aRVJPX1JBTkdFOlxuYmxvY2svZm9wcy5jOjkxMjpcdGNhc2UgRkFMTE9DX0ZMX1pFUk9fUkFOR0UgfCBGQUxMT0NfRkxfS0VFUF9TSVpFOlxuYmxvY2svZm9wcy5jLTkxMy1cdFx0ZmxhZ3MgPSBCTEtERVZfWkVST19OT1VOTUFQO1xuYmxvY2svZm9wcy5jLTkxNC1cdFx0YnJlYWs7XG5ibG9jay9mb3BzLmM6OTE1Olx0Y2FzZSBGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8IEZBTExPQ19GTF9LRUVQX1NJWkU6XG5ibG9jay9mb3BzLmMtOTE2LVx0XHRmbGFncyA9IEJMS0RFVl9aRVJPX05PRkFMTEJBQ0s7XG5ibG9jay9mb3BzLmMtOTE3LVx0XHRicmVhaztcbmJsb2NrL2ZvcHMuYzo5MTg6XHRjYXNlIEZBTExPQ19GTF9XUklURV9aRVJPRVM6XG5ibG9jay9mb3BzLmMtOTE5LVx0XHRmbGFncyA9IDA7XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MjI0PXN0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGludCBtb2RlKVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIyNy1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIyODpcdGlmIChtb2RlIFx1MDAyNiBGQUxMT0NfRkxfWkVST19SQU5HRSlcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIyOS1cdFx0bGltLm1heF93cml0ZV96ZXJvZXNfc2VjdG9ycyA9IDA7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMzAtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMzE6XHRpZiAobW9kZSBcdTAwMjYgRkFMTE9DX0ZMX1BVTkNIX0hPTEUpIHtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIzMi1cdFx0bGltLm1heF9od19kaXNjYXJkX3NlY3RvcnMgPSAwO1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTI0Nj1zdGF0aWMgaW50IGxvX2ZhbGxvY2F0ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIGxvZmZfdCBwb3MsXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjU1LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MjU2Olx0bW9kZSB8PSBGQUxMT0NfRkxfS0VFUF9TSVpFO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMjU3LVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTQxMz1zdGF0aWMgaW50IGRvX3JlcV9maWxlYmFja2VkKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCByZXF1ZXN0ICpycSlcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00MjctXHRcdFx0KHJxLVx1MDAzZWNtZF9mbGFncyBcdTAwMjYgUkVRX05PVU5NQVApID9cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjQyODpcdFx0XHRcdEZBTExPQ19GTF9aRVJPX1JBTkdFIDpcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjQyOTpcdFx0XHRcdEZBTExPQ19GTF9QVU5DSF9IT0xFKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTQzMC1cdGNhc2UgUkVRX09QX0RJU0NBUkQ6XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo0MzE6XHRcdHJldHVybiBsb19mYWxsb2NhdGUobG8sIHJxLCBwb3MsIEZBTExPQ19GTF9QVU5DSF9IT0xFKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTQzMi1cdGNhc2UgUkVRX09QX1dSSVRFOlxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvaW8tY21kLWZpbGUuYz0yNzI9c3RhdGljIHZvaWQgbnZtZXRfZmlsZV9leGVjdXRlX2Rpc2NhcmQoc3RydWN0IG52bWV0X3JlcSAqcmVxKVxuZHJpdmVycy9udm1lL3RhcmdldC9pby1jbWQtZmlsZS5jLTI3My17XG5kcml2ZXJzL252bWUvdGFyZ2V0L2lvLWNtZC1maWxlLmM6Mjc0Olx0aW50IG1vZGUgPSBGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8IEZBTExPQ19GTF9LRUVQX1NJWkU7XG5kcml2ZXJzL252bWUvdGFyZ2V0L2lvLWNtZC1maWxlLmMtMjc1LVx0c3RydWN0IG52bWVfZHNtX3JhbmdlIHJhbmdlO1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvaW8tY21kLWZpbGUuYz0zMzI9c3RhdGljIHZvaWQgbnZtZXRfZmlsZV93cml0ZV96ZXJvZXNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9pby1jbWQtZmlsZS5jLTMzNS1cdHN0cnVjdCBudm1lX3dyaXRlX3plcm9lc19jbWQgKndyaXRlX3plcm9lcyA9IFx1MDAyNnJlcS1cdTAwM2VjbWQtXHUwMDNld3JpdGVfemVyb2VzO1xuZHJpdmVycy9udm1lL3RhcmdldC9pby1jbWQtZmlsZS5jOjMzNjpcdGludCBtb2RlID0gRkFMTE9DX0ZMX1pFUk9fUkFOR0UgfCBGQUxMT0NfRkxfS0VFUF9TSVpFO1xuZHJpdmVycy9udm1lL3RhcmdldC9pby1jbWQtZmlsZS5jLTMzNy1cdGxvZmZfdCBvZmZzZXQ7XG4tLVxuZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfZmlsZS5jPTUzMz1mZF9leGVjdXRlX3VubWFwKHN0cnVjdCBzZV9jbWQgKmNtZCwgc2VjdG9yX3QgbGJhLCBzZWN0b3JfdCBub2xiKVxuLS1cbmRyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2ZpbGUuYy01NjctXHRcdHVuc2lnbmVkIGludCBsZW4gPSBub2xiICogc2VfZGV2LVx1MDAzZWRldl9hdHRyaWIuYmxvY2tfc2l6ZTtcbmRyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2ZpbGUuYzo1Njg6XHRcdGludCBtb2RlID0gRkFMTE9DX0ZMX1BVTkNIX0hPTEUgfCBGQUxMT0NfRkxfS0VFUF9TSVpFO1xuZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfZmlsZS5jLTU2OS1cbi0tXG5mcy9idHJmcy9maWxlLmM9Mjg1OT1zdGF0aWMgaW50IGJ0cmZzX2ZhbGxvY2F0ZV91cGRhdGVfaXNpemUoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9idHJmcy9maWxlLmMtMjg2OS1cbmZzL2J0cmZzL2ZpbGUuYzoyODcwOlx0aWYgKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9LRUVQX1NJWkUgfHwgZW5kIFx1MDAzYz0gaV9zaXplX3JlYWQoaW5vZGUpKVxuZnMvYnRyZnMvZmlsZS5jLTI4NzEtXHRcdHJldHVybiAwO1xuLS1cbmZzL2J0cmZzL2ZpbGUuYz0zMTAwPXN0YXRpYyBsb25nIGJ0cmZzX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsXG4tLVxuZnMvYnRyZnMvZmlsZS5jLTMxMzQtXHQvKiBNYWtlIHN1cmUgd2UgYXJlbiYjMzk7dCBiZWluZyBnaXZlIHNvbWUgY3JhcCBtb2RlICovXG5mcy9idHJmcy9maWxlLmM6MzEzNTpcdGlmIChtb2RlIFx1MDAyNiB+KEZBTExPQ19GTF9LRUVQX1NJWkUgfCBGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8XG5mcy9idHJmcy9maWxlLmM6MzEzNjpcdFx0ICAgICBGQUxMT0NfRkxfWkVST19SQU5HRSkpXG5mcy9idHJmcy9maWxlLmMtMzEzNy1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuZnMvYnRyZnMvZmlsZS5jLTMxMzgtXG5mcy9idHJmcy9maWxlLmM6MzEzOTpcdGlmIChtb2RlIFx1MDAyNiBGQUxMT0NfRkxfUFVOQ0hfSE9MRSlcbmZzL2J0cmZzL2ZpbGUuYy0zMTQwLVx0XHRyZXR1cm4gYnRyZnNfcHVuY2hfaG9sZShmaWxlLCBvZmZzZXQsIGxlbik7XG4tLVxuZnMvYnRyZnMvZmlsZS5jLTMxNDMtXG5mcy9idHJmcy9maWxlLmM6MzE0NDpcdGlmICghKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9LRUVQX1NJWkUpIFx1MDAyNlx1MDAyNiBvZmZzZXQgJiM0MzsgbGVuIFx1MDAzZSBpbm9kZS1cdTAwM2VpX3NpemUpIHtcbmZzL2J0cmZzL2ZpbGUuYy0zMTQ1LVx0XHRyZXQgPSBpbm9kZV9uZXdzaXplX29rKGlub2RlLCBvZmZzZXQgJiM0MzsgbGVuKTtcbi0tXG5mcy9idHJmcy9maWxlLmMtMzE5MC1cbmZzL2J0cmZzL2ZpbGUuYzozMTkxOlx0aWYgKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9aRVJPX1JBTkdFKSB7XG5mcy9idHJmcy9maWxlLmMtMzE5Mi1cdFx0cmV0ID0gYnRyZnNfemVyb19yYW5nZShpbm9kZSwgb2Zmc2V0LCBsZW4sIG1vZGUpO1xuLS1cbmZzL2J0cmZzL2lub2RlLmM9OTIxMT1zdGF0aWMgaW50IF9fYnRyZnNfcHJlYWxsb2NfZmlsZV9yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbW9kZSxcbi0tXG5mcy9idHJmcy9pbm9kZS5jLTkyOTgtXHRcdEJUUkZTX0koaW5vZGUpLVx1MDAzZWZsYWdzIHw9IEJUUkZTX0lOT0RFX1BSRUFMTE9DO1xuZnMvYnRyZnMvaW5vZGUuYzo5Mjk5Olx0XHRpZiAoIShtb2RlIFx1MDAyNiBGQUxMT0NfRkxfS0VFUF9TSVpFKSBcdTAwMjZcdTAwMjZcbmZzL2J0cmZzL2lub2RlLmMtOTMwMC1cdFx0ICAgIChhY3R1YWxfbGVuIFx1MDAzZSBpbm9kZS1cdTAwM2VpX3NpemUpIFx1MDAyNlx1MDAyNlxuLS1cbmZzL2J0cmZzL3NlbmQuYz01NDE2PXN0YXRpYyBpbnQgc2VuZF9ob2xlKHN0cnVjdCBzZW5kX2N0eCAqc2N0eCwgdTY0IGVuZClcbi0tXG5mcy9idHJmcy9zZW5kLmMtNTQyNy1cdGlmIChwcm90b19jbWRfb2soc2N0eCwgQlRSRlNfU0VORF9DX0ZBTExPQ0FURSkpXG5mcy9idHJmcy9zZW5kLmM6NTQyODpcdFx0cmV0dXJuIHNlbmRfZmFsbG9jYXRlKHNjdHgsIEZBTExPQ19GTF9QVU5DSF9IT0xFIHwgRkFMTE9DX0ZMX0tFRVBfU0laRSxcbmZzL2J0cmZzL3NlbmQuYy01NDI5LVx0XHRcdFx0ICAgICAgb2Zmc2V0LCBlbmQgLSBvZmZzZXQpO1xuLS1cbmZzL2NhY2hlZmlsZXMvaW50ZXJmYWNlLmM9MjMzPXN0YXRpYyBib29sIGNhY2hlZmlsZXNfc2hvcnRlbl9vYmplY3Qoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QsXG4tLVxuZnMvY2FjaGVmaWxlcy9pbnRlcmZhY2UuYy0yNjEtXHRcdGlmIChyZXQgPT0gMClcbmZzL2NhY2hlZmlsZXMvaW50ZXJmYWNlLmM6MjYyOlx0XHRcdHJldCA9IHZmc19mYWxsb2NhdGUoZmlsZSwgRkFMTE9DX0ZMX1pFUk9fUkFOR0UsXG5mcy9jYWNoZWZpbGVzL2ludGVyZmFjZS5jLTI2My1cdFx0XHRcdFx0ICAgIG5ld19zaXplLCBkaW9fc2l6ZSAtIG5ld19zaXplKTtcbi0tXG5mcy9jYWNoZWZpbGVzL2lvLmM9NTE5PWludCBfX2NhY2hlZmlsZXNfcHJlcGFyZV93cml0ZShzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdCxcbi0tXG5mcy9jYWNoZWZpbGVzL2lvLmMtNTg0LVx0aWYgKHJldCA9PSAwKVxuZnMvY2FjaGVmaWxlcy9pby5jOjU4NTpcdFx0cmV0ID0gdmZzX2ZhbGxvY2F0ZShmaWxlLCBGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8IEZBTExPQ19GTF9LRUVQX1NJWkUsXG5mcy9jYWNoZWZpbGVzL2lvLmMtNTg2LVx0XHRcdFx0ICAgIHN0YXJ0LCAqX2xlbik7XG4tLVxuZnMvY2VwaC9maWxlLmM9MjcyOD1zdGF0aWMgbG9uZyBjZXBoX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsXG4tLVxuZnMvY2VwaC9maWxlLmMtMjc0NC1cbmZzL2NlcGgvZmlsZS5jOjI3NDU6XHRpZiAobW9kZSAhPSAoRkFMTE9DX0ZMX0tFRVBfU0laRSB8IEZBTExPQ19GTF9QVU5DSF9IT0xFKSlcbmZzL2NlcGgvZmlsZS5jLTI3NDYtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5mcy9leGZhdC9maWxlLmM9MjE9c3RhdGljIGludCBleGZhdF9jb250X2V4cGFuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSlcbi0tXG5mcy9leGZhdC9maWxlLmMtOTgtICogcmVxdWVzdHMgbGVuIGJ5dGVzIGF0IG9mZnNldC4gSW4gY29udHJhcnkgdG8gZmF0LCB3ZSBvbmx5IHN1cHBvcnRcbmZzL2V4ZmF0L2ZpbGUuYzo5OTogKiBGQUxMT0NfRkxfQUxMT0NBVEVfUkFOR0UgYmVjYXVzZSBieSBsZWF2aW5nIHRoZSB2YWxpZCBkYXRhIGxlbmd0aChWREwpXG5mcy9leGZhdC9maWxlLmMtMTAwLSAqIGZpZWxkLCBpdCBpcyB1bm5lY2Vzc2FyeSB0byB6ZXJvIG91dCB0aGUgbmV3bHkgYWxsb2NhdGVkIGNsdXN0ZXJzLlxuLS1cbmZzL2V4ZmF0L2ZpbGUuYz0xMDI9c3RhdGljIGxvbmcgZXhmYXRfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSxcbi0tXG5mcy9leGZhdC9maWxlLmMtMTA5LVx0LyogTm8gc3VwcG9ydCBmb3Igb3RoZXIgbW9kZXMgKi9cbmZzL2V4ZmF0L2ZpbGUuYzoxMTA6XHRpZiAobW9kZSAhPSBGQUxMT0NfRkxfQUxMT0NBVEVfUkFOR0UpXG5mcy9leGZhdC9maWxlLmMtMTExLVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9MzU1Nz1leHQ0X2V4dF9jb252ZXJ0X3RvX2luaXRpYWxpemVkKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtMzU5OC1cdCAqIG1lbW1vdmUoKSBjYWxscy4gVHJhbnNmZXJyaW5nIHRvIHRoZSBsZWZ0IGlzIHRoZSBjb21tb24gY2FzZSBpblxuZnMvZXh0NC9leHRlbnRzLmM6MzU5OTpcdCAqIHN0ZWFkeSBzdGF0ZSBmb3Igd29ya2xvYWRzIGRvaW5nIGZhbGxvY2F0ZShGQUxMT0NfRkxfS0VFUF9TSVpFKVxuZnMvZXh0NC9leHRlbnRzLmMtMzYwMC1cdCAqIGZvbGxvd2VkIGJ5IGFwcGVuZCB3cml0ZXMuXG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9NDczND1zdGF0aWMgbG9uZyBleHQ0X3plcm9fcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNDc1MS1cbmZzL2V4dDQvZXh0ZW50cy5jOjQ3NTI6XHRpZiAoIShtb2RlIFx1MDAyNiBGQUxMT0NfRkxfS0VFUF9TSVpFKSBcdTAwMjZcdTAwMjZcbmZzL2V4dDQvZXh0ZW50cy5jLTQ3NTMtXHQgICAgKGVuZCBcdTAwM2UgaW5vZGUtXHUwMDNlaV9zaXplIHx8IGVuZCBcdTAwM2UgRVhUNF9JKGlub2RlKS1cdTAwM2VpX2Rpc2tzaXplKSkge1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTQ3OTItXHQgKi9cbmZzL2V4dDQvZXh0ZW50cy5jOjQ3OTM6XHRpZiAobW9kZSBcdTAwMjYgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FUykge1xuZnMvZXh0NC9leHRlbnRzLmMtNDc5NC1cdFx0aWYgKCFJU19BTElHTkVEKG9mZnNldCwgYmxvY2tzaXplKSBcdTAwMjZcdTAwMjZcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy00ODAyLVx0aWYgKGFsaWduX2VuZCBcdTAwM2UgYWxpZ25fc3RhcnQpIHtcbmZzL2V4dDQvZXh0ZW50cy5jOjQ4MDM6XHRcdGlmIChtb2RlIFx1MDAyNiBGQUxMT0NfRkxfV1JJVEVfWkVST0VTKVxuZnMvZXh0NC9leHRlbnRzLmMtNDgwNC1cdFx0XHRmbGFncyA9IEVYVDRfR0VUX0JMT0NLU19DUkVBVEVfWkVSTyB8IEVYVDRfRVhfTk9DQUNIRTtcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy00ODE4LVx0LypcbmZzL2V4dDQvZXh0ZW50cy5jOjQ4MTk6XHQgKiBJbiBGQUxMT0NfRkxfV1JJVEVfWkVST0VTIG1vZGUsIGVkZ2VzIHRoYXQgaGF2ZSBiZWVuIHBhcnRpYWxseVxuZnMvZXh0NC9leHRlbnRzLmMtNDgyMC1cdCAqIHplcm9lZCBtdXN0IGJlIHdyaXR0ZW4gYmFjayB0byBlbnN1cmUgdGhlIGVudGlyZSB6ZXJvZWQgcmFuZ2Vcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy00ODI0LVx0aWYgKHBhcnRpYWxfemVyb2VkIFx1MDAyNlx1MDAyNlxuZnMvZXh0NC9leHRlbnRzLmM6NDgyNTpcdCAgICAoKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9XUklURV9aRVJPRVMpIHx8XG5mcy9leHQ0L2V4dGVudHMuYy00ODI2LVx0ICAgICAoZmlsZS1cdTAwM2VmX2ZsYWdzIFx1MDAyNiBPX1NZTkMpIHx8IElTX1NZTkMoaW5vZGUpKSkge1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTQ4NTU9c3RhdGljIGxvbmcgZXh0NF9kb19mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNDg3MS1cbmZzL2V4dDQvZXh0ZW50cy5jOjQ4NzI6XHRpZiAoIShtb2RlIFx1MDAyNiBGQUxMT0NfRkxfS0VFUF9TSVpFKSBcdTAwMjZcdTAwMjZcbmZzL2V4dDQvZXh0ZW50cy5jLTQ4NzMtXHQgICAgKGVuZCBcdTAwM2UgaW5vZGUtXHUwMDNlaV9zaXplIHx8IGVuZCBcdTAwM2UgRVhUNF9JKGlub2RlKS1cdTAwM2VpX2Rpc2tzaXplKSkge1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTQ5MDM9bG9uZyBleHQ0X2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4pXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNDkxNS1cdGlmIChJU19FTkNSWVBURUQoaW5vZGUpIFx1MDAyNlx1MDAyNlxuZnMvZXh0NC9leHRlbnRzLmM6NDkxNjpcdCAgICAobW9kZSBcdTAwMjYgKEZBTExPQ19GTF9DT0xMQVBTRV9SQU5HRSB8IEZBTExPQ19GTF9JTlNFUlRfUkFOR0UpKSlcbmZzL2V4dDQvZXh0ZW50cy5jLTQ5MTctXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy00OTIxLVx0ICovXG5mcy9leHQ0L2V4dGVudHMuYzo0OTIyOlx0aWYgKChtb2RlIFx1MDAyNiBGQUxMT0NfRkxfV1JJVEVfWkVST0VTKSBcdTAwMjZcdTAwMjZcbmZzL2V4dDQvZXh0ZW50cy5jLTQ5MjMtXHQgICAgIWJkZXZfd3JpdGVfemVyb2VzX3VubWFwX3NlY3RvcnMoaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2JkZXYpKVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTQ5MjYtXHQvKiBSZXR1cm4gZXJyb3IgaWYgbW9kZSBpcyBub3Qgc3VwcG9ydGVkICovXG5mcy9leHQ0L2V4dGVudHMuYzo0OTI3Olx0aWYgKG1vZGUgXHUwMDI2IH4oRkFMTE9DX0ZMX0tFRVBfU0laRSB8IEZBTExPQ19GTF9QVU5DSF9IT0xFIHxcbmZzL2V4dDQvZXh0ZW50cy5jOjQ5Mjg6XHRcdCAgICAgRkFMTE9DX0ZMX1pFUk9fUkFOR0UgfCBGQUxMT0NfRkxfQ09MTEFQU0VfUkFOR0UgfFxuZnMvZXh0NC9leHRlbnRzLmM6NDkyOTpcdFx0ICAgICBGQUxMT0NfRkxfSU5TRVJUX1JBTkdFIHwgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FUykpXG5mcy9leHQ0L2V4dGVudHMuYy00OTMwLVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNDk0My1cbmZzL2V4dDQvZXh0ZW50cy5jOjQ5NDQ6XHRpZiAoKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9NT0RFX01BU0spID09IEZBTExPQ19GTF9BTExPQ0FURV9SQU5HRSkge1xuZnMvZXh0NC9leHRlbnRzLmMtNDk0NS1cdFx0cmV0ID0gZXh0NF9kb19mYWxsb2NhdGUoZmlsZSwgb2Zmc2V0LCBsZW4sIG1vZGUpO1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTQ5NTktXG5mcy9leHQ0L2V4dGVudHMuYzo0OTYwOlx0c3dpdGNoIChtb2RlIFx1MDAyNiBGQUxMT0NfRkxfTU9ERV9NQVNLKSB7XG5mcy9leHQ0L2V4dGVudHMuYzo0OTYxOlx0Y2FzZSBGQUxMT0NfRkxfUFVOQ0hfSE9MRTpcbmZzL2V4dDQvZXh0ZW50cy5jLTQ5NjItXHRcdHJldCA9IGV4dDRfcHVuY2hfaG9sZShmaWxlLCBvZmZzZXQsIGxlbik7XG5mcy9leHQ0L2V4dGVudHMuYy00OTYzLVx0XHRicmVhaztcbmZzL2V4dDQvZXh0ZW50cy5jOjQ5NjQ6XHRjYXNlIEZBTExPQ19GTF9DT0xMQVBTRV9SQU5HRTpcbmZzL2V4dDQvZXh0ZW50cy5jLTQ5NjUtXHRcdHJldCA9IGV4dDRfY29sbGFwc2VfcmFuZ2UoZmlsZSwgb2Zmc2V0LCBsZW4pO1xuZnMvZXh0NC9leHRlbnRzLmMtNDk2Ni1cdFx0YnJlYWs7XG5mcy9leHQ0L2V4dGVudHMuYzo0OTY3Olx0Y2FzZSBGQUxMT0NfRkxfSU5TRVJUX1JBTkdFOlxuZnMvZXh0NC9leHRlbnRzLmMtNDk2OC1cdFx0cmV0ID0gZXh0NF9pbnNlcnRfcmFuZ2UoZmlsZSwgb2Zmc2V0LCBsZW4pO1xuZnMvZXh0NC9leHRlbnRzLmMtNDk2OS1cdFx0YnJlYWs7XG5mcy9leHQ0L2V4dGVudHMuYzo0OTcwOlx0Y2FzZSBGQUxMT0NfRkxfWkVST19SQU5HRTpcbmZzL2V4dDQvZXh0ZW50cy5jOjQ5NzE6XHRjYXNlIEZBTExPQ19GTF9XUklURV9aRVJPRVM6XG5mcy9leHQ0L2V4dGVudHMuYy00OTcyLVx0XHRyZXQgPSBleHQ0X3plcm9fcmFuZ2UoZmlsZSwgb2Zmc2V0LCBsZW4sIG1vZGUpO1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTU1NzQ9c3RhdGljIGludCBleHQ0X2NvbGxhcHNlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTU2NjgtICogZXh0NF9pbnNlcnRfcmFuZ2U6XG5mcy9leHQ0L2V4dGVudHMuYzo1NjY5OiAqIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyB0aGUgRkFMTE9DX0ZMX0lOU0VSVF9SQU5HRSBmbGFnIG9mIGZhbGxvY2F0ZS5cbmZzL2V4dDQvZXh0ZW50cy5jLTU2NzAtICogVGhlIGRhdGEgYmxvY2tzIHN0YXJ0aW5nIGZyb20gQG9mZnNldCB0byB0aGUgRU9GIGFyZSBzaGlmdGVkIGJ5IEBsZW5cbi0tXG5mcy9mMmZzL2ZpbGUuYz0xNjgyPXN0YXRpYyBpbnQgZjJmc196ZXJvX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4sXG4tLVxuZnMvZjJmcy9maWxlLmMtMTc4NC1cdGlmIChuZXdfc2l6ZSBcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKSB7XG5mcy9mMmZzL2ZpbGUuYzoxNzg1Olx0XHRpZiAobW9kZSBcdTAwMjYgRkFMTE9DX0ZMX0tFRVBfU0laRSlcbmZzL2YyZnMvZmlsZS5jLTE3ODYtXHRcdFx0ZmlsZV9zZXRfa2VlcF9pc2l6ZShpbm9kZSk7XG4tLVxuZnMvZjJmcy9maWxlLmM9MTg3Mz1zdGF0aWMgaW50IGYyZnNfZXhwYW5kX2lub2RlX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCxcbi0tXG5mcy9mMmZzL2ZpbGUuYy0xOTg1LVx0aWYgKG5ld19zaXplIFx1MDAzZSBpX3NpemVfcmVhZChpbm9kZSkpIHtcbmZzL2YyZnMvZmlsZS5jOjE5ODY6XHRcdGlmIChtb2RlIFx1MDAyNiBGQUxMT0NfRkxfS0VFUF9TSVpFKVxuZnMvZjJmcy9maWxlLmMtMTk4Ny1cdFx0XHRmaWxlX3NldF9rZWVwX2lzaXplKGlub2RlKTtcbi0tXG5mcy9mMmZzL2ZpbGUuYz0xOTk1PXN0YXRpYyBsb25nIGYyZnNfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSxcbi0tXG5mcy9mMmZzL2ZpbGUuYy0yMDEyLVx0aWYgKElTX0VOQ1JZUFRFRChpbm9kZSkgXHUwMDI2XHUwMDI2XG5mcy9mMmZzL2ZpbGUuYzoyMDEzOlx0XHQobW9kZSBcdTAwMjYgKEZBTExPQ19GTF9DT0xMQVBTRV9SQU5HRSB8IEZBTExPQ19GTF9JTlNFUlRfUkFOR0UpKSlcbmZzL2YyZnMvZmlsZS5jLTIwMTQtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbmZzL2YyZnMvZmlsZS5jLTIwMTUtXG5mcy9mMmZzL2ZpbGUuYzoyMDE2Olx0aWYgKG1vZGUgXHUwMDI2IH4oRkFMTE9DX0ZMX0tFRVBfU0laRSB8IEZBTExPQ19GTF9QVU5DSF9IT0xFIHxcbmZzL2YyZnMvZmlsZS5jOjIwMTc6XHRcdFx0RkFMTE9DX0ZMX0NPTExBUFNFX1JBTkdFIHwgRkFMTE9DX0ZMX1pFUk9fUkFOR0UgfFxuZnMvZjJmcy9maWxlLmM6MjAxODpcdFx0XHRGQUxMT0NfRkxfSU5TRVJUX1JBTkdFKSlcbmZzL2YyZnMvZmlsZS5jLTIwMTktXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5mcy9mMmZzL2ZpbGUuYy0yMDI3LVx0aWYgKChmMmZzX2NvbXByZXNzZWRfZmlsZShpbm9kZSkgfHwgZjJmc19pc19waW5uZWRfZmlsZShpbm9kZSkpIFx1MDAyNlx1MDAyNlxuZnMvZjJmcy9maWxlLmM6MjAyODpcdFx0KG1vZGUgXHUwMDI2IChGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8IEZBTExPQ19GTF9DT0xMQVBTRV9SQU5HRSB8XG5mcy9mMmZzL2ZpbGUuYzoyMDI5Olx0XHRcdEZBTExPQ19GTF9aRVJPX1JBTkdFIHwgRkFMTE9DX0ZMX0lOU0VSVF9SQU5HRSkpKSB7XG5mcy9mMmZzL2ZpbGUuYy0yMDMwLVx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbi0tXG5mcy9mMmZzL2ZpbGUuYy0yMDQzLVxuZnMvZjJmcy9maWxlLmM6MjA0NDpcdGlmIChtb2RlIFx1MDAyNiBGQUxMT0NfRkxfUFVOQ0hfSE9MRSkge1xuZnMvZjJmcy9maWxlLmMtMjA0NS1cdFx0aWYgKG9mZnNldCBcdTAwM2U9IGlub2RlLVx1MDAzZWlfc2l6ZSlcbi0tXG5mcy9mMmZzL2ZpbGUuYy0yMDQ4LVx0XHRyZXQgPSBmMmZzX3B1bmNoX2hvbGUoaW5vZGUsIG9mZnNldCwgbGVuKTtcbmZzL2YyZnMvZmlsZS5jOjIwNDk6XHR9IGVsc2UgaWYgKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9DT0xMQVBTRV9SQU5HRSkge1xuZnMvZjJmcy9maWxlLmMtMjA1MC1cdFx0cmV0ID0gZjJmc19jb2xsYXBzZV9yYW5nZShpbm9kZSwgb2Zmc2V0LCBsZW4pO1xuZnMvZjJmcy9maWxlLmM6MjA1MTpcdH0gZWxzZSBpZiAobW9kZSBcdTAwMjYgRkFMTE9DX0ZMX1pFUk9fUkFOR0UpIHtcbmZzL2YyZnMvZmlsZS5jLTIwNTItXHRcdHJldCA9IGYyZnNfemVyb19yYW5nZShpbm9kZSwgb2Zmc2V0LCBsZW4sIG1vZGUpO1xuZnMvZjJmcy9maWxlLmM6MjA1MzpcdH0gZWxzZSBpZiAobW9kZSBcdTAwMjYgRkFMTE9DX0ZMX0lOU0VSVF9SQU5HRSkge1xuZnMvZjJmcy9maWxlLmMtMjA1NC1cdFx0cmV0ID0gZjJmc19pbnNlcnRfcmFuZ2UoaW5vZGUsIG9mZnNldCwgbGVuKTtcbi0tXG5mcy9mYXQvZmlsZS5jPTIyMD1zdGF0aWMgaW50IGZhdF9jb250X2V4cGFuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSlcbi0tXG5mcy9mYXQvZmlsZS5jLTI1OC0gKiBvcGVyYXRpb24sIHdoaWNoIGdldHMgY2FsbGVkIGZyb20gc3lzX2ZhbGxvY2F0ZSBzeXN0ZW0gY2FsbC4gVXNlclxuZnMvZmF0L2ZpbGUuYzoyNTk6ICogc3BhY2UgcmVxdWVzdHMgbGVuIGJ5dGVzIGF0IG9mZnNldC4gSWYgRkFMTE9DX0ZMX0tFRVBfU0laRSBpcyBzZXRcbmZzL2ZhdC9maWxlLmMtMjYwLSAqIHdlIGp1c3QgYWxsb2NhdGUgY2x1c3RlcnMgd2l0aG91dCB6ZXJvaW5nIHRoZW0gb3V0LiBPdGhlcndpc2Ugd2Vcbi0tXG5mcy9mYXQvZmlsZS5jPTI2Mz1zdGF0aWMgbG9uZyBmYXRfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSxcbi0tXG5mcy9mYXQvZmlsZS5jLTI3NC1cdC8qIE5vIHN1cHBvcnQgZm9yIGhvbGUgcHVuY2ggb3Igb3RoZXIgZmFsbG9jYXRlIGZsYWdzLiAqL1xuZnMvZmF0L2ZpbGUuYzoyNzU6XHRpZiAobW9kZSBcdTAwMjYgfkZBTExPQ19GTF9LRUVQX1NJWkUpXG5mcy9mYXQvZmlsZS5jLTI3Ni1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbmZzL2ZhdC9maWxlLmMtMjgyLVx0aW5vZGVfbG9jayhpbm9kZSk7XG5mcy9mYXQvZmlsZS5jOjI4MzpcdGlmIChtb2RlIFx1MDAyNiBGQUxMT0NfRkxfS0VFUF9TSVpFKSB7XG5mcy9mYXQvZmlsZS5jLTI4NC1cdFx0b25kaXNrc2l6ZSA9IGlub2RlLVx1MDAzZWlfYmxvY2tzIFx1MDAzY1x1MDAzYyA5O1xuLS1cbmZzL2Z1c2UvZmlsZS5jPTI5MzA9c3RhdGljIGxvbmcgZnVzZV9maWxlX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXG4tLVxuZnMvZnVzZS9maWxlLmMtMjk0NS1cdGJvb2wgYmxvY2tfZmF1bHRzID0gRlVTRV9JU19EQVgoaW5vZGUpIFx1MDAyNlx1MDAyNlxuZnMvZnVzZS9maWxlLmM6Mjk0NjpcdFx0KCEobW9kZSBcdTAwMjYgRkFMTE9DX0ZMX0tFRVBfU0laRSkgfHxcbmZzL2Z1c2UvZmlsZS5jOjI5NDc6XHRcdCAobW9kZSBcdTAwMjYgKEZBTExPQ19GTF9QVU5DSF9IT0xFIHwgRkFMTE9DX0ZMX1pFUk9fUkFOR0UpKSk7XG5mcy9mdXNlL2ZpbGUuYy0yOTQ4LVxuZnMvZnVzZS9maWxlLmM6Mjk0OTpcdGlmIChtb2RlIFx1MDAyNiB+KEZBTExPQ19GTF9LRUVQX1NJWkUgfCBGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8XG5mcy9mdXNlL2ZpbGUuYzoyOTUwOlx0XHQgICAgIEZBTExPQ19GTF9aRVJPX1JBTkdFKSlcbmZzL2Z1c2UvZmlsZS5jLTI5NTEtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5mcy9mdXNlL2ZpbGUuYy0yOTYzLVxuZnMvZnVzZS9maWxlLmM6Mjk2NDpcdGlmIChtb2RlIFx1MDAyNiAoRkFMTE9DX0ZMX1BVTkNIX0hPTEUgfCBGQUxMT0NfRkxfWkVST19SQU5HRSkpIHtcbmZzL2Z1c2UvZmlsZS5jLTI5NjUtXHRcdGxvZmZfdCBlbmRieXRlID0gb2Zmc2V0ICYjNDM7IGxlbmd0aCAtIDE7XG4tLVxuZnMvZnVzZS9maWxlLmMtMjk3MS1cbmZzL2Z1c2UvZmlsZS5jOjI5NzI6XHRpZiAoIShtb2RlIFx1MDAyNiBGQUxMT0NfRkxfS0VFUF9TSVpFKSBcdTAwMjZcdTAwMjZcbmZzL2Z1c2UvZmlsZS5jLTI5NzMtXHQgICAgb2Zmc2V0ICYjNDM7IGxlbmd0aCBcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKSB7XG4tLVxuZnMvZnVzZS9maWxlLmMtMjk4Mi1cbmZzL2Z1c2UvZmlsZS5jOjI5ODM6XHRpZiAoIShtb2RlIFx1MDAyNiBGQUxMT0NfRkxfS0VFUF9TSVpFKSlcbmZzL2Z1c2UvZmlsZS5jLTI5ODQtXHRcdHNldF9iaXQoRlVTRV9JX1NJWkVfVU5TVEFCTEUsIFx1MDAyNmZpLVx1MDAzZXN0YXRlKTtcbi0tXG5mcy9mdXNlL2ZpbGUuYy0yOTk5LVx0Lyogd2UgY291bGQgaGF2ZSBleHRlbmRlZCB0aGUgZmlsZSAqL1xuZnMvZnVzZS9maWxlLmM6MzAwMDpcdGlmICghKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9LRUVQX1NJWkUpKSB7XG5mcy9mdXNlL2ZpbGUuYy0zMDAxLVx0XHRpZiAoZnVzZV93cml0ZV91cGRhdGVfYXR0cihpbm9kZSwgb2Zmc2V0ICYjNDM7IGxlbmd0aCwgbGVuZ3RoKSlcbi0tXG5mcy9mdXNlL2ZpbGUuYy0zMDA0LVxuZnMvZnVzZS9maWxlLmM6MzAwNTpcdGlmIChtb2RlIFx1MDAyNiAoRkFMTE9DX0ZMX1BVTkNIX0hPTEUgfCBGQUxMT0NfRkxfWkVST19SQU5HRSkpXG5mcy9mdXNlL2ZpbGUuYy0zMDA2LVx0XHR0cnVuY2F0ZV9wYWdlY2FjaGVfcmFuZ2UoaW5vZGUsIG9mZnNldCwgb2Zmc2V0ICYjNDM7IGxlbmd0aCAtIDEpO1xuLS1cbmZzL2Z1c2UvZmlsZS5jLTMwMTAtb3V0OlxuZnMvZnVzZS9maWxlLmM6MzAxMTpcdGlmICghKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9LRUVQX1NJWkUpKVxuZnMvZnVzZS9maWxlLmMtMzAxMi1cdFx0Y2xlYXJfYml0KEZVU0VfSV9TSVpFX1VOU1RBQkxFLCBcdTAwMjZmaS1cdTAwM2VzdGF0ZSk7XG4tLVxuZnMvZ2ZzMi9maWxlLmM9MTI1Mj1zdGF0aWMgbG9uZyBfX2dmczJfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbilcbi0tXG5mcy9nZnMyL2ZpbGUuYy0xMzUwLVxuZnMvZ2ZzMi9maWxlLmM6MTM1MTpcdGlmICghKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9LRUVQX1NJWkUpIFx1MDAyNlx1MDAyNiAocG9zICYjNDM7IGNvdW50KSBcdTAwM2UgaW5vZGUtXHUwMDNlaV9zaXplKVxuZnMvZ2ZzMi9maWxlLmMtMTM1Mi1cdFx0aV9zaXplX3dyaXRlKGlub2RlLCBwb3MgJiM0MzsgY291bnQpO1xuLS1cbmZzL2dmczIvZmlsZS5jPTEzNjg9c3RhdGljIGxvbmcgZ2ZzMl9mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKVxuLS1cbmZzL2dmczIvZmlsZS5jLTEzNzUtXG5mcy9nZnMyL2ZpbGUuYzoxMzc2Olx0aWYgKG1vZGUgXHUwMDI2IH4oRkFMTE9DX0ZMX1BVTkNIX0hPTEUgfCBGQUxMT0NfRkxfS0VFUF9TSVpFKSlcbmZzL2dmczIvZmlsZS5jLTEzNzctXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5mcy9nZnMyL2ZpbGUuYy0xMzg4LVxuZnMvZ2ZzMi9maWxlLmM6MTM4OTpcdGlmICghKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9LRUVQX1NJWkUpIFx1MDAyNlx1MDAyNlxuZnMvZ2ZzMi9maWxlLmMtMTM5MC1cdCAgICAob2Zmc2V0ICYjNDM7IGxlbikgXHUwMDNlIGlub2RlLVx1MDAzZWlfc2l6ZSkge1xuLS1cbmZzL2dmczIvZmlsZS5jLTEzOTktXG5mcy9nZnMyL2ZpbGUuYzoxNDAwOlx0aWYgKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9QVU5DSF9IT0xFKSB7XG5mcy9nZnMyL2ZpbGUuYy0xNDAxLVx0XHRyZXQgPSBfX2dmczJfcHVuY2hfaG9sZShmaWxlLCBvZmZzZXQsIGxlbik7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM9NzAwPXN0YXRpYyBsb25nIGh1Z2V0bGJmc19mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LFxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTcxNC1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjcxNTpcdGlmIChtb2RlIFx1MDAyNiB+KEZBTExPQ19GTF9LRUVQX1NJWkUgfCBGQUxMT0NfRkxfUFVOQ0hfSE9MRSkpXG5mcy9odWdldGxiZnMvaW5vZGUuYy03MTYtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTcxNy1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjcxODpcdGlmIChtb2RlIFx1MDAyNiBGQUxMT0NfRkxfUFVOQ0hfSE9MRSkge1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtNzE5LVx0XHRlcnJvciA9IGh1Z2V0bGJmc19wdW5jaF9ob2xlKGlub2RlLCBvZmZzZXQsIGxlbik7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNzMyLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NzMzOlx0LyogV2UgbmVlZCB0byBjaGVjayBybGltaXQgZXZlbiB3aGVuIEZBTExPQ19GTF9LRUVQX1NJWkUgKi9cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTczNC1cdGVycm9yID0gaW5vZGVfbmV3c2l6ZV9vayhpbm9kZSwgb2Zmc2V0ICYjNDM7IGxlbik7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODE5LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6ODIwOlx0aWYgKCEobW9kZSBcdTAwMjYgRkFMTE9DX0ZMX0tFRVBfU0laRSkgXHUwMDI2XHUwMDI2IG9mZnNldCAmIzQzOyBsZW4gXHUwMDNlIGlub2RlLVx1MDAzZWlfc2l6ZSlcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTgyMS1cdFx0aV9zaXplX3dyaXRlKGlub2RlLCBvZmZzZXQgJiM0MzsgbGVuKTtcbi0tXG5mcy9pb2N0bC5jPTI2OD1zdGF0aWMgaW50IGlvY3RsX3ByZWFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxwLCBpbnQgbW9kZSwgdm9pZCBfX3VzZXIgKmFyZ3ApXG4tLVxuZnMvaW9jdGwuYy0yODgtXG5mcy9pb2N0bC5jOjI4OTpcdHJldHVybiB2ZnNfZmFsbG9jYXRlKGZpbHAsIG1vZGUgfCBGQUxMT0NfRkxfS0VFUF9TSVpFLCBzci5sX3N0YXJ0LFxuZnMvaW9jdGwuYy0yOTAtXHRcdFx0c3IubF9sZW4pO1xuLS1cbmZzL2lvY3RsLmM9Mjk2PXN0YXRpYyBpbnQgY29tcGF0X2lvY3RsX3ByZWFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSxcbi0tXG5mcy9pb2N0bC5jLTMxNy1cbmZzL2lvY3RsLmM6MzE4Olx0cmV0dXJuIHZmc19mYWxsb2NhdGUoZmlsZSwgbW9kZSB8IEZBTExPQ19GTF9LRUVQX1NJWkUsIHNyLmxfc3RhcnQsIHNyLmxfbGVuKTtcbmZzL2lvY3RsLmMtMzE5LX1cbi0tXG5mcy9pb2N0bC5jPTMyMj1zdGF0aWMgaW50IGZpbGVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIGludCBfX3VzZXIgKnApXG4tLVxuZnMvaW9jdGwuYy0zMzEtXHRjYXNlIEZTX0lPQ19VTlJFU1ZTUDY0OlxuZnMvaW9jdGwuYzozMzI6XHRcdHJldHVybiBpb2N0bF9wcmVhbGxvY2F0ZShmaWxwLCBGQUxMT0NfRkxfUFVOQ0hfSE9MRSwgcCk7XG5mcy9pb2N0bC5jLTMzMy1cdGNhc2UgRlNfSU9DX1pFUk9fUkFOR0U6XG5mcy9pb2N0bC5jOjMzNDpcdFx0cmV0dXJuIGlvY3RsX3ByZWFsbG9jYXRlKGZpbHAsIEZBTExPQ19GTF9aRVJPX1JBTkdFLCBwKTtcbmZzL2lvY3RsLmMtMzM1LVx0fVxuLS1cbmZzL2lvY3RsLmM9NjM4PUNPTVBBVF9TWVNDQUxMX0RFRklORTMoaW9jdGwsIHVuc2lnbmVkIGludCwgZmQsIHVuc2lnbmVkIGludCwgY21kLFxuLS1cbmZzL2lvY3RsLmMtNjY0LVx0Y2FzZSBGU19JT0NfVU5SRVNWU1A2NF8zMjpcbmZzL2lvY3RsLmM6NjY1Olx0XHRlcnJvciA9IGNvbXBhdF9pb2N0bF9wcmVhbGxvY2F0ZShmZF9maWxlKGYpLCBGQUxMT0NfRkxfUFVOQ0hfSE9MRSxcbmZzL2lvY3RsLmMtNjY2LVx0XHRcdFx0Y29tcGF0X3B0cihhcmcpKTtcbi0tXG5mcy9pb2N0bC5jLTY2OC1cdGNhc2UgRlNfSU9DX1pFUk9fUkFOR0VfMzI6XG5mcy9pb2N0bC5jOjY2OTpcdFx0ZXJyb3IgPSBjb21wYXRfaW9jdGxfcHJlYWxsb2NhdGUoZmRfZmlsZShmKSwgRkFMTE9DX0ZMX1pFUk9fUkFOR0UsXG5mcy9pb2N0bC5jLTY3MC1cdFx0XHRcdGNvbXBhdF9wdHIoYXJnKSk7XG4tLVxuZnMvbmZzL25mczRmaWxlLmM9MjE5PXN0YXRpYyBsb25nIG5mczQyX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZXAsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKVxuLS1cbmZzL25mcy9uZnM0ZmlsZS5jLTIyOC1cdGNhc2UgMDpcbmZzL25mcy9uZnM0ZmlsZS5jOjIyOTpcdGNhc2UgRkFMTE9DX0ZMX1BVTkNIX0hPTEUgfCBGQUxMT0NfRkxfS0VFUF9TSVpFOlxuZnMvbmZzL25mczRmaWxlLmM6MjMwOlx0Y2FzZSBGQUxMT0NfRkxfWkVST19SQU5HRTpcbmZzL25mcy9uZnM0ZmlsZS5jLTIzMS1cdFx0YnJlYWs7XG4tLVxuZnMvbmZzL25mczRmaWxlLmMtMjM5LVxuZnMvbmZzL25mczRmaWxlLmM6MjQwOlx0aWYgKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9QVU5DSF9IT0xFKVxuZnMvbmZzL25mczRmaWxlLmMtMjQxLVx0XHRyZXR1cm4gbmZzNDJfcHJvY19kZWFsbG9jYXRlKGZpbGVwLCBvZmZzZXQsIGxlbik7XG5mcy9uZnMvbmZzNGZpbGUuYzoyNDI6XHRlbHNlIGlmIChtb2RlIFx1MDAyNiBGQUxMT0NfRkxfWkVST19SQU5HRSlcbmZzL25mcy9uZnM0ZmlsZS5jLTI0My1cdFx0cmV0dXJuIG5mczQyX3Byb2NfemVyb19yYW5nZShmaWxlcCwgb2Zmc2V0ICxsZW4pO1xuLS1cbmZzL25mc2QvbmZzNHByb2MuYz0yMzg0PW5mc2Q0X2RlYWxsb2NhdGUoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlICpjc3RhdGUsXG4tLVxuZnMvbmZzZC9uZnM0cHJvYy5jLTIzODctXHRyZXR1cm4gbmZzZDRfZmFsbG9jYXRlKHJxc3RwLCBjc3RhdGUsIFx1MDAyNnUtXHUwMDNlZGVhbGxvY2F0ZSxcbmZzL25mc2QvbmZzNHByb2MuYzoyMzg4Olx0XHRcdCAgICAgICBGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8IEZBTExPQ19GTF9LRUVQX1NJWkUpO1xuZnMvbmZzZC9uZnM0cHJvYy5jLTIzODktfVxuLS1cbmZzL250ZnMvZmlsZS5jPTgwND1zdGF0aWMgaW50IG50ZnNfYWxsb2NhdGVfcmFuZ2Uoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCxcbi0tXG5mcy9udGZzL2ZpbGUuYy04MzUtXHRlcnIgPSBudGZzX2F0dHJfZmFsbG9jYXRlKG5pLCBvZmZzZXQsIGxlbixcbmZzL250ZnMvZmlsZS5jOjgzNjpcdFx0XHRtb2RlIFx1MDAyNiBGQUxMT0NfRkxfS0VFUF9TSVpFID8gdHJ1ZSA6IGZhbHNlKTtcbmZzL250ZnMvZmlsZS5jLTgzNy1cbmZzL250ZnMvZmlsZS5jOjgzODpcdGlmICghKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9LRUVQX1NJWkUpIFx1MDAyNlx1MDAyNiBuZXdfc2l6ZSAhPSBvbGRfc2l6ZSlcbmZzL250ZnMvZmlsZS5jLTgzOS1cdFx0aV9zaXplX3dyaXRlKHZpLCBuaS1cdTAwM2VkYXRhX3NpemUpO1xuLS1cbmZzL250ZnMvZmlsZS5jPTk2NT1zdGF0aWMgaW50IG50ZnNfaW5zZXJ0X3JhbmdlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbilcbi0tXG5mcy9udGZzL2ZpbGUuYy0xMDIwLVxuZnMvbnRmcy9maWxlLmM6MTAyMTojZGVmaW5lIE5URlNfRkFMTE9DX0ZMX1NVUFBPUlRFRFx0XHRcdFx0XHRcXFxuZnMvbnRmcy9maWxlLmM6MTAyMjpcdFx0KEZBTExPQ19GTF9BTExPQ0FURV9SQU5HRSB8IEZBTExPQ19GTF9LRUVQX1NJWkUgfFx0XFxcbmZzL250ZnMvZmlsZS5jOjEwMjM6XHRcdCBGQUxMT0NfRkxfSU5TRVJUX1JBTkdFIHwgRkFMTE9DX0ZMX1BVTkNIX0hPTEUgfFx0XFxcbmZzL250ZnMvZmlsZS5jOjEwMjQ6XHRcdCBGQUxMT0NfRkxfQ09MTEFQU0VfUkFOR0UpXG5mcy9udGZzL2ZpbGUuYy0xMDI1LVxuZnMvbnRmcy9maWxlLmM9MTAyNj1zdGF0aWMgbG9uZyBudGZzX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4pXG4tLVxuZnMvbnRmcy9maWxlLmMtMTAzNC1cbmZzL250ZnMvZmlsZS5jOjEwMzU6XHRpZiAobW9kZSBcdTAwMjYgfihOVEZTX0ZBTExPQ19GTF9TVVBQT1JURUQpKVxuZnMvbnRmcy9maWxlLmMtMTAzNi1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbmZzL250ZnMvZmlsZS5jLTEwNjYtXHRpbm9kZV9kaW9fd2FpdCh2aSk7XG5mcy9udGZzL2ZpbGUuYzoxMDY3Olx0aWYgKG1vZGUgXHUwMDI2IChGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8IEZBTExPQ19GTF9DT0xMQVBTRV9SQU5HRSB8XG5mcy9udGZzL2ZpbGUuYzoxMDY4Olx0XHQgICAgRkFMTE9DX0ZMX0lOU0VSVF9SQU5HRSkpIHtcbmZzL250ZnMvZmlsZS5jLTEwNjktXHRcdGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrKHZpLVx1MDAzZWlfbWFwcGluZyk7XG4tLVxuZnMvbnRmcy9maWxlLmMtMTA3Mi1cbmZzL250ZnMvZmlsZS5jOjEwNzM6XHRzd2l0Y2ggKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9NT0RFX01BU0spIHtcbmZzL250ZnMvZmlsZS5jOjEwNzQ6XHRjYXNlIEZBTExPQ19GTF9BTExPQ0FURV9SQU5HRTpcbmZzL250ZnMvZmlsZS5jOjEwNzU6XHRjYXNlIEZBTExPQ19GTF9LRUVQX1NJWkU6XG5mcy9udGZzL2ZpbGUuYy0xMDc2LVx0XHRlcnIgPSBudGZzX2FsbG9jYXRlX3JhbmdlKG5pLCBtb2RlLCBvZmZzZXQsIGxlbik7XG5mcy9udGZzL2ZpbGUuYy0xMDc3LVx0XHRicmVhaztcbmZzL250ZnMvZmlsZS5jOjEwNzg6XHRjYXNlIEZBTExPQ19GTF9QVU5DSF9IT0xFOlxuZnMvbnRmcy9maWxlLmMtMTA3OS1cdFx0ZXJyID0gbnRmc19wdW5jaF9ob2xlKG5pLCBtb2RlLCBvZmZzZXQsIGxlbik7XG5mcy9udGZzL2ZpbGUuYy0xMDgwLVx0XHRicmVhaztcbmZzL250ZnMvZmlsZS5jOjEwODE6XHRjYXNlIEZBTExPQ19GTF9DT0xMQVBTRV9SQU5HRTpcbmZzL250ZnMvZmlsZS5jLTEwODItXHRcdGVyciA9IG50ZnNfY29sbGFwc2VfcmFuZ2UobmksIG9mZnNldCwgbGVuKTtcbmZzL250ZnMvZmlsZS5jLTEwODMtXHRcdGJyZWFrO1xuZnMvbnRmcy9maWxlLmM6MTA4NDpcdGNhc2UgRkFMTE9DX0ZMX0lOU0VSVF9SQU5HRTpcbmZzL250ZnMvZmlsZS5jLTEwODUtXHRcdGVyciA9IG50ZnNfaW5zZXJ0X3JhbmdlKG5pLCBvZmZzZXQsIGxlbik7XG4tLVxuZnMvbnRmczMvZmlsZS5jPTQwMT1zdGF0aWMgaW50IG50ZnNfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG5ld19zaXplKVxuLS1cbmZzL250ZnMzL2ZpbGUuYy00NDEtICogb3BlcmF0aW9uLCB3aGljaCBnZXRzIGNhbGxlZCBmcm9tIHN5c19mYWxsb2NhdGUgc3lzdGVtIGNhbGwuIFVzZXJcbmZzL250ZnMzL2ZpbGUuYzo0NDI6ICogc3BhY2UgcmVxdWVzdHMgJiMzOTtsZW4mIzM5OyBieXRlcyBhdCAmIzM5O3ZibyYjMzk7LiBJZiBGQUxMT0NfRkxfS0VFUF9TSVpFIGlzIHNldFxuZnMvbnRmczMvZmlsZS5jLTQ0My0gKiB3ZSBqdXN0IGFsbG9jYXRlIGNsdXN0ZXJzIHdpdGhvdXQgemVyb2luZyB0aGVtIG91dC4gT3RoZXJ3aXNlIHdlXG4tLVxuZnMvbnRmczMvZmlsZS5jPTQ0Nj1zdGF0aWMgbG9uZyBudGZzX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCB2Ym8sIGxvZmZfdCBsZW4pXG4tLVxuZnMvbnRmczMvZmlsZS5jLTQ2OC1cdCAqL1xuZnMvbnRmczMvZmlsZS5jOjQ2OTpcdGlmIChtb2RlIFx1MDAyNiBGQUxMT0NfRkxfUFVOQ0hfSE9MRSkge1xuZnMvbnRmczMvZmlsZS5jLTQ3MC1cdFx0aWYgKCFpc19zdXBwb3J0ZWRfaG9sZXMpXG5mcy9udGZzMy9maWxlLmMtNDcxLVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbmZzL250ZnMzL2ZpbGUuYzo0NzI6XHR9IGVsc2UgaWYgKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9DT0xMQVBTRV9SQU5HRSkge1xuZnMvbnRmczMvZmlsZS5jOjQ3MzpcdH0gZWxzZSBpZiAobW9kZSBcdTAwMjYgRkFMTE9DX0ZMX0lOU0VSVF9SQU5HRSkge1xuZnMvbnRmczMvZmlsZS5jLTQ3NC1cdFx0aWYgKCFpc19zdXBwb3J0ZWRfaG9sZXMpXG4tLVxuZnMvbnRmczMvZmlsZS5jLTQ3Ni1cdH0gZWxzZSBpZiAobW9kZSBcdTAwMjZcbmZzL250ZnMzL2ZpbGUuYzo0Nzc6XHRcdCAgIH4oRkFMTE9DX0ZMX0tFRVBfU0laRSB8IEZBTExPQ19GTF9QVU5DSF9IT0xFIHxcbmZzL250ZnMzL2ZpbGUuYzo0Nzg6XHRcdCAgICAgRkFMTE9DX0ZMX0NPTExBUFNFX1JBTkdFIHwgRkFMTE9DX0ZMX0lOU0VSVF9SQU5HRSkpIHtcbmZzL250ZnMzL2ZpbGUuYy00NzktXHRcdG50ZnNfaW5vZGVfd2Fybihpbm9kZSwgXCYjMzQ7ZmFsbG9jYXRlKDB4JXgpIGlzIG5vdCBzdXBwb3J0ZWRcJiMzNDssXG4tLVxuZnMvbnRmczMvZmlsZS5jLTQ5Ni1cbmZzL250ZnMzL2ZpbGUuYzo0OTc6XHRpZiAobW9kZSBcdTAwMjYgKEZBTExPQ19GTF9QVU5DSF9IT0xFIHwgRkFMTE9DX0ZMX0NPTExBUFNFX1JBTkdFIHxcbmZzL250ZnMzL2ZpbGUuYzo0OTg6XHRcdCAgICBGQUxMT0NfRkxfSU5TRVJUX1JBTkdFKSkge1xuZnMvbnRmczMvZmlsZS5jLTQ5OS1cdFx0aW5vZGVfZGlvX3dhaXQoaW5vZGUpO1xuLS1cbmZzL250ZnMzL2ZpbGUuYy01MDMtXG5mcy9udGZzMy9maWxlLmM6NTA0Olx0aWYgKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9QVU5DSF9IT0xFKSB7XG5mcy9udGZzMy9maWxlLmMtNTA1LVx0XHR1MzIgZnJhbWVfc2l6ZTtcbi0tXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwOToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzU1NQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgcHV0IG9uIG15IHRoaW5raW5nIGNhcC4gSGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgbWVudGFsIHByb2Nlc3M6CgoqKkRpdmluZyBEZWVwIGludG8gYGZhbGxvY2F0ZWAgRmxhZ3MqKgoKSG9sZCBvbiBhIHNlY29uZC4uLiBpcyBgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FU2AgYWN0dWFsbHkgYSBzdGFuZGFyZCBgZmFsbG9jYXRlYCBmbGFnPyBJIGNvdWxkIGhhdmUgc3dvcm4gaXQgd2FzLCBidXQgc29tZXRoaW5nIGZlZWxzIG9mZi4gTGV0IG1lIGRvdWJsZS1jaGVjay4gT2theSwgbGV0JiMzOTtzIHNlZS4uLiBpZiBpdCYjMzk7cyBub3QgYSBzdGFuZGFyZCwgaXQmIzM5O3MgcHJvYmFibHkgZGVmaW5lZCBpbnRlcm5hbGx5LiBBaGEhIEkgcmVtZW1iZXIgc2VlaW5nIGl0IG1lbnRpb25lZCBpbiBgYmxvY2svZm9wcy5jYC4gQnV0IHdhaXQuLi50aGF0JiMzOTtzIG5vdCByaWdodCBlaXRoZXIuIEl0ICpzaG91bGQqIGJlIGluIHRoZSBwdWJsaWMgQVBJIGhlYWRlcnMuIEkgbmVlZCB0byBiZSBzdXJlLiBMZXQmIzM5O3MgbG9vayBpbnNpZGUgYGluY2x1ZGUvdWFwaS9saW51eC9mYWxsb2MuaGAuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDA5OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0ZBTExPQ19GTF9XUklURV9aRVJPRVMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svZm9wcy5jPTgxMT1zdGF0aWMgc3NpemVfdCBibGtkZXZfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbi0tXG5ibG9jay9mb3BzLmMtODY1LVx0XHQoRkFMTE9DX0ZMX0tFRVBfU0laRSB8IEZBTExPQ19GTF9QVU5DSF9IT0xFIHxcdFx0XFxcbmJsb2NrL2ZvcHMuYzo4NjY6XHRcdCBGQUxMT0NfRkxfWkVST19SQU5HRSB8IEZBTExPQ19GTF9XUklURV9aRVJPRVMpXG5ibG9jay9mb3BzLmMtODY3LVxuYmxvY2svZm9wcy5jPTg2OD1zdGF0aWMgbG9uZyBibGtkZXZfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IHN0YXJ0LFxuLS1cbmJsb2NrL2ZvcHMuYy04ODQtXHQgKi9cbmJsb2NrL2ZvcHMuYzo4ODU6XHRpZiAoKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9XUklURV9aRVJPRVMpIFx1MDAyNlx1MDAyNlxuYmxvY2svZm9wcy5jLTg4Ni1cdCAgICAhYmRldl93cml0ZV96ZXJvZXNfdW5tYXBfc2VjdG9ycyhiZGV2KSlcbi0tXG5ibG9jay9mb3BzLmMtOTE3LVx0XHRicmVhaztcbmJsb2NrL2ZvcHMuYzo5MTg6XHRjYXNlIEZBTExPQ19GTF9XUklURV9aRVJPRVM6XG5ibG9jay9mb3BzLmMtOTE5LVx0XHRmbGFncyA9IDA7XG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9NDczND1zdGF0aWMgbG9uZyBleHQ0X3plcm9fcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNDc5Mi1cdCAqL1xuZnMvZXh0NC9leHRlbnRzLmM6NDc5MzpcdGlmIChtb2RlIFx1MDAyNiBGQUxMT0NfRkxfV1JJVEVfWkVST0VTKSB7XG5mcy9leHQ0L2V4dGVudHMuYy00Nzk0LVx0XHRpZiAoIUlTX0FMSUdORUQob2Zmc2V0LCBibG9ja3NpemUpIFx1MDAyNlx1MDAyNlxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTQ4MDItXHRpZiAoYWxpZ25fZW5kIFx1MDAzZSBhbGlnbl9zdGFydCkge1xuZnMvZXh0NC9leHRlbnRzLmM6NDgwMzpcdFx0aWYgKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9XUklURV9aRVJPRVMpXG5mcy9leHQ0L2V4dGVudHMuYy00ODA0LVx0XHRcdGZsYWdzID0gRVhUNF9HRVRfQkxPQ0tTX0NSRUFURV9aRVJPIHwgRVhUNF9FWF9OT0NBQ0hFO1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTQ4MTgtXHQvKlxuZnMvZXh0NC9leHRlbnRzLmM6NDgxOTpcdCAqIEluIEZBTExPQ19GTF9XUklURV9aRVJPRVMgbW9kZSwgZWRnZXMgdGhhdCBoYXZlIGJlZW4gcGFydGlhbGx5XG5mcy9leHQ0L2V4dGVudHMuYy00ODIwLVx0ICogemVyb2VkIG11c3QgYmUgd3JpdHRlbiBiYWNrIHRvIGVuc3VyZSB0aGUgZW50aXJlIHplcm9lZCByYW5nZVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTQ4MjQtXHRpZiAocGFydGlhbF96ZXJvZWQgXHUwMDI2XHUwMDI2XG5mcy9leHQ0L2V4dGVudHMuYzo0ODI1Olx0ICAgICgobW9kZSBcdTAwMjYgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FUykgfHxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ4MjYtXHQgICAgIChmaWxlLVx1MDAzZWZfZmxhZ3MgXHUwMDI2IE9fU1lOQykgfHwgSVNfU1lOQyhpbm9kZSkpKSB7XG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9NDkwMz1sb25nIGV4dDRfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbilcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy00OTIxLVx0ICovXG5mcy9leHQ0L2V4dGVudHMuYzo0OTIyOlx0aWYgKChtb2RlIFx1MDAyNiBGQUxMT0NfRkxfV1JJVEVfWkVST0VTKSBcdTAwMjZcdTAwMjZcbmZzL2V4dDQvZXh0ZW50cy5jLTQ5MjMtXHQgICAgIWJkZXZfd3JpdGVfemVyb2VzX3VubWFwX3NlY3RvcnMoaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2JkZXYpKVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTQ5MjgtXHRcdCAgICAgRkFMTE9DX0ZMX1pFUk9fUkFOR0UgfCBGQUxMT0NfRkxfQ09MTEFQU0VfUkFOR0UgfFxuZnMvZXh0NC9leHRlbnRzLmM6NDkyOTpcdFx0ICAgICBGQUxMT0NfRkxfSU5TRVJUX1JBTkdFIHwgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FUykpXG5mcy9leHQ0L2V4dGVudHMuYy00OTMwLVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNDk3MC1cdGNhc2UgRkFMTE9DX0ZMX1pFUk9fUkFOR0U6XG5mcy9leHQ0L2V4dGVudHMuYzo0OTcxOlx0Y2FzZSBGQUxMT0NfRkxfV1JJVEVfWkVST0VTOlxuZnMvZXh0NC9leHRlbnRzLmMtNDk3Mi1cdFx0cmV0ID0gZXh0NF96ZXJvX3JhbmdlKGZpbGUsIG9mZnNldCwgbGVuLCBtb2RlKTtcbi0tXG5mcy9vcGVuLmM9MjUwPWludCB2ZnNfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbilcbi0tXG5mcy9vcGVuLmMtMjc5LVx0Y2FzZSBGQUxMT0NfRkxfSU5TRVJUX1JBTkdFOlxuZnMvb3Blbi5jOjI4MDpcdGNhc2UgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FUzpcbmZzL29wZW4uYy0yODEtXHRcdGlmIChtb2RlIFx1MDAyNiBGQUxMT0NfRkxfS0VFUF9TSVpFKVxuLS1cbmluY2x1ZGUvbGludXgvZmFsbG9jLmg9MTI9c3RydWN0IHNwYWNlX3Jlc3Yge1xuLS1cbmluY2x1ZGUvbGludXgvZmFsbG9jLmgtMzktXHRcdFx0XHQgRkFMTE9DX0ZMX1VOU0hBUkVfUkFOR0UgfFx0XFxcbmluY2x1ZGUvbGludXgvZmFsbG9jLmg6NDA6XHRcdFx0XHQgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FUylcbmluY2x1ZGUvbGludXgvZmFsbG9jLmgtNDEtXG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvZXh0NC5oPTc5PVRSQUNFX0RFRklORV9FTlVNKEVTX1JFRkVSRU5DRURfQik7XG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvZXh0NC5oLTkyLVx0eyBGQUxMT0NfRkxfWkVST19SQU5HRSxcdFx0XCYjMzQ7WkVST19SQU5HRVwmIzM0O30sXHRcdFxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0Lmg6OTM6XHR7IEZBTExPQ19GTF9XUklURV9aRVJPRVMsXHRcJiMzNDtXUklURV9aRVJPRVNcJiMzNDt9KVxuaW5jbHVkZS90cmFjZS9ldmVudHMvZXh0NC5oLTk0LVxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9mYWxsb2MuaC04MS0vKlxuaW5jbHVkZS91YXBpL2xpbnV4L2ZhbGxvYy5oOjgyOiAqIEZBTExPQ19GTF9XUklURV9aRVJPRVMgemVyb2VzIGEgc3BlY2lmaWVkIGZpbGUgcmFuZ2UgaW4gc3VjaCBhIHdheSB0aGF0XG5pbmNsdWRlL3VhcGkvbGludXgvZmFsbG9jLmgtODMtICogc3Vic2VxdWVudCB3cml0ZXMgdG8gdGhhdCByYW5nZSBkbyBub3QgcmVxdWlyZSBmdXJ0aGVyIGNoYW5nZXMgdG8gdGhlIGZpbGVcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvZmFsbG9jLmgtOTUtICovXG5pbmNsdWRlL3VhcGkvbGludXgvZmFsbG9jLmg6OTY6I2RlZmluZSBGQUxMT0NfRkxfV1JJVEVfWkVST0VTXHRcdDB4ODBcbmluY2x1ZGUvdWFwaS9saW51eC9mYWxsb2MuaC05Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwOToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTMzOAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDM3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBGQUxMT0NfRkxfV1JJVEVfWkVST0VTYCBJbXBsZW1lbnRhdGlvbiBpbiBleHQ0KioKCk9rYXksIHNvIHRoZXJlJiMzOTtzIGEgbmV3IGZsYWcsIGBGQUxMT0NfRkxfV1JJVEVfWkVST0VTYCAoMHg4MCksIGluIGBmYWxsb2MuaGAuIEludGVyZXN0aW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBhZGRpdGlvbiwgbm90IGp1c3QgYSByZWZhY3RvcmluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgaW1wbGVtZW50ZWQgd2l0aGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIFRoZSBwYXRjaCBtb2RpZmllcyBgZXh0NF96ZXJvX3JhbmdlYCBhbmQgYGV4dDRfYWxsb2NfZmlsZV9ibG9ja3NgIHRvIHN1cHBvcnQgdGhpcywgc28gdGhleSYjMzk7cmUgZGVmaW5pdGVseSBrZXkuIEkgc2hvdWxkIGFsc28gY2hlY2sgYGV4dDRfemVyb19wYXJ0aWFsX2Jsb2Nrc2AgYmVjYXVzZSB0aGUgZGVzY3JpcHRpb24gbWVudGlvbnMgaXQuIExldCYjMzk7cyBzZWUuLi4gYWgsIGBleHQ0X3plcm9fcGFydGlhbF9ibG9ja3NgIGlzIG5vdyByZXR1cm5pbmcgYSBiaXRtYXNrIG9mIHBhcnRpYWwgemVyb2VkIGVkZ2VzLiBHb3QgaXQuIEFuZCBgZXh0NF9hbGxvY19maWxlX2Jsb2Nrc2AgaXMgaGFuZGxpbmcgYGFsbG9jX3plcm9gIHdpdGggdW53cml0dGVuIGV4dGVudHMsIHBvdGVudGlhbGx5IGFkZGluZyB0aGUgaW5vZGUgdG8gdGhlIG9ycGhhbiBsaXN0LgoKVGltZSB0byBwaW5wb2ludCB0aGUgY2VudHJhbCBmdW5jdGlvbnMuIENsZWFybHksIGBleHQ0X3plcm9fcmFuZ2VgLCBgZXh0NF9hbGxvY19maWxlX2Jsb2Nrc2AsIGFuZCBgZXh0NF96ZXJvX3BhcnRpYWxfYmxvY2tzYCBhcmUgY3JpdGljYWwuIEkgYWxzbyBuZWVkIHRvIGxvb2sgYXQgYGV4dDRfbG9hZF90YWlsX2JoYCBzaW5jZSBpdCYjMzk7cyBtb2RpZmllZCBhbmQgc2VlbXMgcmVsYXRlZCB0byB0aGUgaW5vZGUuIEFuZCwganVzdCBmb3IgY29udGV4dCwgSSBzaG91bGQgcXVpY2tseSB2ZXJpZnkgaWYgYGV4dDRfYmxvY2tfemVyb19lb2ZgIG1pZ2h0IGJlIHJlbGV2YW50LCBldmVuIGlmIGl0JiMzOTtzIG5vdCBjaGFuZ2VkIGRpcmVjdGx5LgoKV2FpdCwgYSBzZWNvbmQgbG9va+KApiBgZXh0NF9hbGxvY19maWxlX2Jsb2Nrc2AgYW5kIGBleHQ0X3plcm9fcmFuZ2VgIGFyZSBzdGF0aWMsIHdoaWxlIGBleHQ0X3plcm9fcGFydGlhbF9ibG9ja3NgIGlzIGV4cG9ydGVkLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gQW5kIGBleHQ0X2xvYWRfdGFpbF9iaGAgaXMgYWxzbyBzdGF0aWMuIE9rYXkuIFNvLCB0aGUgcXVlc3Rpb24gaXMsIHdoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50PwoKUmlnaHQsIGl0IG1ha2VzIHNlbnNlOiBgZXh0NF9mYWxsb2NhdGVgIGNhbGxzIGBleHQ0X3plcm9fcmFuZ2VgLiBTbywgYGV4dDRfZmFsbG9jYXRlYCBpcyB0aGUgcHVibGljIGZhY2luZyBpbnRlcmZhY2UuIE5vdywgSSBzaG91bGQgZm9jdXMgbXkgc2VhcmNoIHdpdGhpbiBgZnMvZXh0NC9leHRlbnRzLmNgIGZvciBgZXh0NF96ZXJvX3JhbmdlYCBhbmQgdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDA5OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfemVyb19yYW5nZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2V4dGVudHMuYz00NzMyPXN0YXRpYyBpbnQgZXh0NF9pbnNlcnRfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4pO1xuZnMvZXh0NC9leHRlbnRzLmMtNDczMy1cbmZzL2V4dDQvZXh0ZW50cy5jOjQ3MzQ6c3RhdGljIGxvbmcgZXh0NF96ZXJvX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LFxuZnMvZXh0NC9leHRlbnRzLmMtNDczNS1cdFx0XHQgICAgbG9mZl90IGxlbiwgaW50IG1vZGUpXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNDc0NC1cbmZzL2V4dDQvZXh0ZW50cy5jOjQ3NDU6XHR0cmFjZV9leHQ0X3plcm9fcmFuZ2UoaW5vZGUsIG9mZnNldCwgbGVuLCBtb2RlKTtcbmZzL2V4dDQvZXh0ZW50cy5jLTQ3NDYtXHRXQVJOX09OX09OQ0UoIWlub2RlX2lzX2xvY2tlZChpbm9kZSkpO1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTQ5MDM9bG9uZyBleHQ0X2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4pXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNDk3MS1cdGNhc2UgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FUzpcbmZzL2V4dDQvZXh0ZW50cy5jOjQ5NzI6XHRcdHJldCA9IGV4dDRfemVyb19yYW5nZShmaWxlLCBvZmZzZXQsIGxlbiwgbW9kZSk7XG5mcy9leHQ0L2V4dGVudHMuYy00OTczLVx0XHRicmVhaztcbi0tXG5mcy9leHQ0L2lub2RlLmM9NDAwND12b2lkIGV4dDRfc2V0X2FvcHMoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L2lub2RlLmMtNDAyNS0gKiBIZXJlIHdlIGNhbiYjMzk7dCBza2lwIGFuIHVud3JpdHRlbiBidWZmZXIgZXZlbiB0aG91Z2ggaXQgdXN1YWxseSByZWFkcyB6ZXJvXG5mcy9leHQ0L2lub2RlLmM6NDAyNjogKiBiZWNhdXNlIGl0IG1pZ2h0IGhhdmUgZGF0YSBpbiBwYWdlY2FjaGUgKGVnLCBpZiBjYWxsZWQgZnJvbSBleHQ0X3plcm9fcmFuZ2UsXG5mcy9leHQ0L2lub2RlLmMtNDAyNy0gKiBleHQ0X3B1bmNoX2hvbGUsIGV0Yykgd2hpY2ggbmVlZHMgdG8gYmUgcHJvcGVybHkgemVyb2VkIG91dC4gT3RoZXJ3aXNlIGFcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0Lmg9MTQ0ND1ERUZJTkVfRVZFTlQoZXh0NF9fZmFsbG9jYXRlX21vZGUsIGV4dDRfcHVuY2hfaG9sZSxcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0LmgtMTQ1MC1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2V4dDQuaDoxNDUxOkRFRklORV9FVkVOVChleHQ0X19mYWxsb2NhdGVfbW9kZSwgZXh0NF96ZXJvX3JhbmdlLFxuaW5jbHVkZS90cmFjZS9ldmVudHMvZXh0NC5oLTE0NTItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDk6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA3NzgKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgRXh0NCBGdXp6aW5nIFRhcmdldHMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdG8gYmVzdCBhcHByb2FjaCBmdXp6aW5nIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIE15IHByaW1hcnkgdGFyZ2V0cyBzaG91bGQgYmUgY2VudGVyZWQgYXJvdW5kIGJsb2NrIHplcm9pbmcuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSB0aGlzLCBzcGVjaWZpY2FsbHk6IGBleHQ0X3plcm9fcGFydGlhbF9ibG9ja3NgLCBhbmQgYGV4dDRfemVyb19yYW5nZWAuIFdhaXQgYSBtaW51dGUsIGBleHQ0X3plcm9fcmFuZ2VgIGlzIGRlY2xhcmVkIGBzdGF0aWNgLiBEb2VzIHN5emthbGxlciBoYW5kbGUgdGhvc2U/IFllcywgaXQgY2FuLCBpZiB0aGUgc3RhdGljIGZ1bmN0aW9uIGlzIGV4cG9ydGVkIHRvIHRoZSBzeW1ib2wgdGFibGUuIEhvd2V2ZXIsIGl0IGlzIHVzdWFsbHkgYmV0dGVyIHRvIHByb3ZpZGUgdGhlIGdsb2JhbCBlbnRyeSBwb2ludC4gVGhlcmVmb3JlIEkgd2lsbCBhbHNvIGluY2x1ZGUgYGV4dDRfZmFsbG9jYXRlYCBhcyB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byB6ZXJvaW5nLiBJIHNob3VsZCBhbHNvIGluY2x1ZGUgYGV4dDRfYWxsb2NfZmlsZV9ibG9ja3NgLCBhcyBpdCBpcyByZWxhdGVkIHRvIGJsb2NrIGFsbG9jYXRpb24uIFNvLCB0byBzdW1tYXJpc2UsIG15IGtleSB0YXJnZXRzIHdpbGwgYmUgYGV4dDRfZmFsbG9jYXRlYCwgYGV4dDRfemVyb19yYW5nZWAsIGBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzYCBhbmQgYGV4dDRfemVyb19wYXJ0aWFsX2Jsb2Nrc2AuCgpOZXh0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9ucyBlbmFibGVkLiBPYnZpb3VzbHksIGBFWFQ0X0ZTYCBpcyByZXF1aXJlZC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgYGZzL2V4dDQvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIHRha2UgaW50byBhY2NvdW50LiBHb3R0YSBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBjcml0aWNhbCBmb3IgdGhlc2UgZnVuY3Rpb25zIHRvIGJlIGVuYWJsZWQgb3IgaGF2ZSB0aGUgZGVzaXJlZCBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDk6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEVYVDRfRlMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9leHQ0L0tjb25maWc6Mjpjb25maWcgRVhUNF9GU1xuZnMvZXh0NC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVwmIzM0O1xuLS1cbmZzL2V4dDQvS2NvbmZpZz0zNT1jb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcbi0tXG5mcy9leHQ0L0tjb25maWctNDUtXG5mcy9leHQ0L0tjb25maWc6NDY6Y29uZmlnIEVYVDRfRlNfUE9TSVhfQUNMXG5mcy9leHQ0L0tjb25maWctNDctXHRib29sIFwmIzM0O0V4dDQgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWctNTUtXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcbmZzL2V4dDQvS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7RXh0NCBTZWN1cml0eSBMYWJlbHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDk6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0OTIKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBFWFQ0IEJsb2NrIEFsbG9jYXRpb24qKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIHByaW1hcmlseSBkZWFsaW5nIHdpdGggYEVYVDRfRlNgIGhlcmUg4oCTIHRoYXQmIzM5O3MgdGhlIGZpbGVzeXN0ZW0gd2UmIzM5O3JlIGZvY3VzaW5nIG9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSB2ZXJpZnkgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgdGllZCB0byBgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FU2AuIEkmIzM5O20gcHJldHR5IHN1cmUgaXQmIzM5O3MganVzdCBhIG5ldyBmbGFnIGludHJvZHVjZWQgd2l0aGluIHRoZSBgZmFsbG9jYXRlYCBzeXN0ZW0gY2FsbCBpdHNlbGYuIEhvd2V2ZXIsIGl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGRvdWJsZS1jaGVjay4KCk5vdywgSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgc3VzcGljaW9uIGJ5IHF1aWNrbHkgcmV2aWV3aW5nIGBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzYC4gSSB3YW50IHRvIHNlZSBwcmVjaXNlbHkgaG93IGl0JiMzOTtzIGhhbmRsZWQgd2l0aGluIHRoZSBgZXh0NGAgYmxvY2sgYWxsb2NhdGlvbiByb3V0aW5lcy4gVGhpcyYjMzk7bGwgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyB0aGlzIGZsYWcgaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSBsYXJnZXIgYWxsb2NhdGlvbiBmcmFtZXdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDA5OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfYWxsb2NfZmlsZV9ibG9ja3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHRlbnRzLmM9NDU0Mz1pbnQgZXh0NF9leHRfdHJ1bmNhdGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy00NTczLVxuZnMvZXh0NC9leHRlbnRzLmM6NDU3NDpzdGF0aWMgaW50IGV4dDRfYWxsb2NfZmlsZV9ibG9ja3Moc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4sXG5mcy9leHQ0L2V4dGVudHMuYy00NTc1LVx0XHRcdFx0ICBsb2ZmX3QgbmV3X3NpemUsIGludCBmbGFncylcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz00NzM0PXN0YXRpYyBsb25nIGV4dDRfemVyb19yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy00NzY1LVx0aWYgKCFJU19BTElHTkVEKG9mZnNldCB8IGVuZCwgYmxvY2tzaXplKSkge1xuZnMvZXh0NC9leHRlbnRzLmM6NDc2NjpcdFx0cmV0ID0gZXh0NF9hbGxvY19maWxlX2Jsb2NrcyhmaWxlLCBvZmZzZXQsIGxlbiwgbmV3X3NpemUsXG5mcy9leHQ0L2V4dGVudHMuYy00NzY3LVx0XHRcdFx0XHQgICAgIGZsYWdzKTtcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy00ODA3LVx0XHRcdFx0ICBFWFQ0X0VYX05PQ0FDSEUpO1xuZnMvZXh0NC9leHRlbnRzLmM6NDgwODpcdFx0cmV0ID0gZXh0NF9hbGxvY19maWxlX2Jsb2NrcyhmaWxlLCBhbGlnbl9zdGFydCxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ4MDktXHRcdFx0XHRcdCAgICAgYWxpZ25fZW5kIC0gYWxpZ25fc3RhcnQsIG5ld19zaXplLFxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTQ4NTU9c3RhdGljIGxvbmcgZXh0NF9kb19mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNDg3OS1cbmZzL2V4dDQvZXh0ZW50cy5jOjQ4ODA6XHRyZXQgPSBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzKGZpbGUsIG9mZnNldCwgbGVuLCBuZXdfc2l6ZSxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ4ODEtXHRcdFx0XHQgICAgIEVYVDRfR0VUX0JMT0NLU19DUkVBVEVfVU5XUklUX0VYVCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDA5OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMjU1CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGV4dDQgRmlsZXN5c3RlbSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgZGVlcCBpbnRvIHRoZSBleHQ0IGJsb2NrIGFsbG9jYXRpb24gYW5kIHplcm9pbmcgcm91dGluZXMuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWJvdXQgYWRkaW5nIHN1cHBvcnQgZm9yIGBGQUxMT0NfRkxfV1JJVEVfWkVST0VTYC4gSSYjMzk7bSBzZWVpbmcgbW9kaWZpY2F0aW9ucyB0byBgZXh0NF9hbGxvY19maWxlX2Jsb2Nrc2AsIGBleHQ0X3plcm9fcmFuZ2VgLCBhbmQgYGV4dDRfemVyb19wYXJ0aWFsX2Jsb2Nrc2Ag4oCTIHRoYXQmIzM5O3MgYSBzaWduaWZpY2FudCBjaHVuayBvZiBjb3JlIGZ1bmN0aW9uYWxpdHkuIEFuZCB0aGVyZSYjMzk7cyBhbHNvIGEgdHdlYWsgdG8gYGV4dDRfbG9hZF90YWlsX2JoYCwgd2hpY2ggbWFrZXMgbWUgaW1tZWRpYXRlbHkgdGhpbmsgYWJvdXQgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIHVud3JpdHRlbiBleHRlbnRzIGFuZCBob3cgdGhlIGZpbGVzeXN0ZW0gaGFuZGxlcyBob2xlcy4gVGhlIGNoYW5nZSB0byBgZXh0NF96ZXJvX3BhcnRpYWxfYmxvY2tzYCByZXR1cm5pbmcgYSBiaXRtYXNrIGlzIGFsc28gaW50ZXJlc3Rpbmc7IHRoYXQgY291bGQgaW1wYWN0IGVycm9yIGhhbmRsaW5nIG9yIGhvdyB6ZXJvaW5nIGlzIHRyYWNrZWQuCgpUaGlzIGlzIGEgcHJldHR5IGZ1bmRhbWVudGFsIGZ1bmN0aW9uYWwgY2hhbmdlLiBJdCYjMzk7cyB0b3VjaGluZyBob3cgdGhlIGZpbGVzeXN0ZW0gYWxsb2NhdGVzIGJsb2NrcywgaG93IGl0IHplcm9lcyBkYXRhIChwYXJ0aWFsbHkgKmFuZCogY29tcGxldGVseSksIGFuZCBob3cgaXQgZGVhbHMgd2l0aCBwb3RlbnRpYWwgaW5jb25zaXN0ZW5jaWVzIHdpdGggdW53cml0dGVuIGRhdGEuIFNpbmNlIHRoaXMgZGlyZWN0bHkgaW1wYWN0cyB0aGUgYGZhbGxvY2F0ZWAgaW1wbGVtZW50YXRpb24sIHdoaWNoIGludGVyYWN0cyB3aXRoIGBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzYCwgSSBzaG91bGQgZGVmaW5pdGVseSBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGVzZSByb3V0aW5lcyBhbmQgbWFrZSBzdXJlIHRoZXkgYWxsIGhhbmRsZSB0aGUgbmV3IGZsYWcgY29ycmVjdGx5LiBJIGFsc28gd2FudCB0byBtYWtlIHN1cmUgdGhlIGludGVyYWN0aW9ucyB3aXRoIGBvcnBoYW5gIGxpc3RzIGRvbiYjMzk7dCBpbnRyb2R1Y2UgbmV3IGluY29uc2lzdGVuY2llcywgZ2l2ZW4gdGhlIGNoYW5nZXMgdG8gYWxsb2NhdGlvbi4KCkdpdmVuIHRoZSBzY29wZSBhbmQgaW1wYWN0IG9uIHRoZXNlIGNyaXRpY2FsIGV4dDQgY29tcG9uZW50cywgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHRob3JvdWdobHkgZnV6emVkLiBUaGUgcHJpbWFyeSBmb2N1cyBzaG91bGQgYmUgb24gdGhvc2Ugc3BlY2lmaWMgc3ltYm9sczogYGV4dDRfYWxsb2NfZmlsZV9ibG9ja3NgLCBgZXh0NF96ZXJvX3JhbmdlYCwgYGV4dDRfemVyb19wYXJ0aWFsX2Jsb2Nrc2AsIGBleHQ0X2xvYWRfdGFpbF9iaGAsIGFuZCBvZiBjb3Vyc2UgYGV4dDRfZmFsbG9jYXRlYCBpdHNlbGYuIEkgbmVlZCB0byBnZXQgdGhlIGBFWFQ0X0ZTYCBjb25maWd1cmF0aW9uIHZlcmlmaWVkIGFzIHdlbGwuCgpCZWZvcmUgSSBnbyBmdXJ0aGVyLCBsZXQmIzM5O3MgdmVyaWZ5IGlmIGBleHQ0X2xvYWRfdGFpbF9iaGAgaXMgc3RhdGljLiBUaGF0IHdpbGwgZGV0ZXJtaW5lIGhvdyBlYXN5IG9yIGRpZmZpY3VsdCBpdCBpcyB0byB0ZXN0IGl0IGluIGlzb2xhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDk6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9sb2FkX3RhaWxfYmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9pbm9kZS5jPTQwMDQ9dm9pZCBleHQ0X3NldF9hb3BzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTQwMzMtICovXG5mcy9leHQ0L2lub2RlLmM6NDAzNDpzdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICpleHQ0X2xvYWRfdGFpbF9iaChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgZnJvbSlcbmZzL2V4dDQvaW5vZGUuYy00MDM1LXtcbi0tXG5mcy9leHQ0L2lub2RlLmM9NDExMj1zdGF0aWMgaW50IGV4dDRfYmxvY2tfZG9femVyb19yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgZnJvbSxcbi0tXG5mcy9leHQ0L2lub2RlLmMtNDExOC1cbmZzL2V4dDQvaW5vZGUuYzo0MTE5Olx0YmggPSBleHQ0X2xvYWRfdGFpbF9iaChpbm9kZSwgZnJvbSk7XG5mcy9leHQ0L2lub2RlLmMtNDEyMC1cdGlmIChJU19FUlJfT1JfTlVMTChiaCkpXG4tLVxuZnMvZXh0NC9pbm9kZS5jPTQxMzg9c3RhdGljIGludCBleHQ0X2Jsb2NrX2pvdXJuYWxsZWRfemVyb19yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgZnJvbSxcbi0tXG5mcy9leHQ0L2lub2RlLmMtNDE0OS1cbmZzL2V4dDQvaW5vZGUuYzo0MTUwOlx0YmggPSBleHQ0X2xvYWRfdGFpbF9iaChpbm9kZSwgZnJvbSk7XG5mcy9leHQ0L2lub2RlLmMtNDE1MS1cdGlmIChJU19FUlJfT1JfTlVMTChiaCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDk6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMzNzYKCQkJCQkJCW91dHB1dDogMjAzCgkJCQkJCQl0aG91Z2h0czogOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgZm9ybWF0dGVkIGFzIHJlcXVlc3RlZDoKCioqTWFraW5nIFN1cmUgdGhlIERldGFpbHMgYXJlIFNldCoqCgpSaWdodCwgc28gYGV4dDRfbG9hZF90YWlsX2JoYCBpcyBkZWZpbml0ZWx5IGEgc3RhdGljIGZ1bmN0aW9uLiBJJiMzOTtsbCBtYWtlIGEgbm90ZSB0byBpbmNsdWRlIHRoYXQgaW4gdGhlIGZvY3VzIHN5bWJvbHMsIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIGF2b2lkIGFueSBjb25mdXNpb24gbGF0ZXIgb24uCgpOb3csIGxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSBzb21ldGhpbmcg4oCTIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgYEZBTExPQ19GTF9XUklURV9aRVJPRVNgIGZsYWcgaXMgZGVmaW5lZCBhcyBleHBlY3RlZC4gTGV0IG1lIGNoZWNrIHRoZSBpbmNsdWRlIGZpbGXigKYgeWVwLCBjb25maXJtZWQhIEl0JiMzOTtzIHByb3Blcmx5IGRlZmluZWQgaW4gYGluY2x1ZGUvdWFwaS9saW51eC9mYWxsb2MuaGAgYW5kIGlzIGNvcnJlY3RseSBhc3NpZ25lZCB0aGUgdmFsdWUgYDB4ODBgLgoKT2theSwgd2l0aCB0aG9zZSBkZXRhaWxzIG5haWxlZCBkb3duLCBJJiMzOTttIGNvbWZvcnRhYmxlIHNldHRpbmcgdGhlIHJlc3VsdHMgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwOToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfYWxsb2NfZmlsZV9ibG9ja3MmIzM0OywKICAgICYjMzQ7ZXh0NF96ZXJvX3JhbmdlJiMzNDssCiAgICAmIzM0O2V4dDRfemVyb19wYXJ0aWFsX2Jsb2NrcyYjMzQ7LAogICAgJiMzNDtleHQ0X2xvYWRfdGFpbF9iaCYjMzQ7LAogICAgJiMzNDtleHQ0X2ZhbGxvY2F0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIGEgbmV3IGZhbGxvY2F0ZSBmbGFnIGBGQUxMT0NfRkxfV1JJVEVfWkVST0VTYCBpbiBleHQ0LiBJdCBtb2RpZmllcyB0aGUgY29yZSBibG9jayBhbGxvY2F0aW9uIGFuZCB6ZXJvaW5nIGxvZ2ljLCBpbmNsdWRpbmcgYGV4dDRfemVyb19yYW5nZWAsIGBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzYCwgYW5kIGBleHQ0X3plcm9fcGFydGlhbF9ibG9ja3NgLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBob3cgZXh0NCBoYW5kbGVzIHVud3JpdHRlbiBleHRlbnRzLCBwYXJ0aWFsIGJsb2NrIHplcm9pbmcsIGFuZCBvcnBoYW4gbGlzdHMgZHVyaW5nIGZhbGxvY2F0ZSBvcGVyYXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGZpbGVzeXN0ZW0gY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciB2dWxuZXJhYmlsaXRpZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzJiMzNDssCiAgICAmIzM0O2V4dDRfemVyb19yYW5nZSYjMzQ7LAogICAgJiMzNDtleHQ0X3plcm9fcGFydGlhbF9ibG9ja3MmIzM0OywKICAgICYjMzQ7ZXh0NF9sb2FkX3RhaWxfYmgmIzM0OywKICAgICYjMzQ7ZXh0NF9mYWxsb2NhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBhIG5ldyBmYWxsb2NhdGUgZmxhZyBgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FU2AgaW4gZXh0NC4gSXQgbW9kaWZpZXMgdGhlIGNvcmUgYmxvY2sgYWxsb2NhdGlvbiBhbmQgemVyb2luZyBsb2dpYywgaW5jbHVkaW5nIGBleHQ0X3plcm9fcmFuZ2VgLCBgZXh0NF9hbGxvY19maWxlX2Jsb2Nrc2AsIGFuZCBgZXh0NF96ZXJvX3BhcnRpYWxfYmxvY2tzYC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IGV4dDQgaGFuZGxlcyB1bndyaXR0ZW4gZXh0ZW50cywgcGFydGlhbCBibG9jayB6ZXJvaW5nLCBhbmQgb3JwaGFuIGxpc3RzIGR1cmluZyBmYWxsb2NhdGUgb3BlcmF0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBmaWxlc3lzdGVtIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDdUMDk6MTE6MDYuMjczMzQ1NTM5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA2NTA2MDc5NDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzXCIsXG4gICAgXCJleHQ0X3plcm9fcmFuZ2VcIixcbiAgICBcImV4dDRfemVyb19wYXJ0aWFsX2Jsb2Nrc1wiLFxuICAgIFwiZXh0NF9sb2FkX3RhaWxfYmhcIixcbiAgICBcImV4dDRfZmFsbG9jYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBhIG5ldyBmYWxsb2NhdGUgZmxhZyBgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FU2AgaW4gZXh0NC4gSXQgbW9kaWZpZXMgdGhlIGNvcmUgYmxvY2sgYWxsb2NhdGlvbiBhbmQgemVyb2luZyBsb2dpYywgaW5jbHVkaW5nIGBleHQ0X3plcm9fcmFuZ2VgLCBgZXh0NF9hbGxvY19maWxlX2Jsb2Nrc2AsIGFuZCBgZXh0NF96ZXJvX3BhcnRpYWxfYmxvY2tzYC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IGV4dDQgaGFuZGxlcyB1bndyaXR0ZW4gZXh0ZW50cywgcGFydGlhbCBibG9jayB6ZXJvaW5nLCBhbmQgb3JwaGFuIGxpc3RzIGR1cmluZyBmYWxsb2NhdGUgb3BlcmF0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBmaWxlc3lzdGVtIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciB2dWxuZXJhYmlsaXRpZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA5OjExOjA2LjI3MzM1MDM1OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk5MDE3OTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZWM0OTVkMDk2Y2I0OWI1YTU1MGE4MWZiNTcyNzhiNmQ1NTg3N2YzMVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1bCA3IDA5OjExOjA0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmhcXG5pbmRleCA5NDI4M2E5OTFlNWM0Zi4uYjJlNTU4NzZkMGUzNTIgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC9leHQ0LmhcXG4rKysgYi9mcy9leHQ0L2V4dDQuaFxcbkBAIC0zMDk5LDggKzMwOTksMTEgQEAgZXh0ZXJuIGludCBleHQ0X2NodW5rX3RyYW5zX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbnJibG9ja3MpO1xcbiBleHRlcm4gaW50IGV4dDRfbWV0YV90cmFuc19ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSwgaW50IGxibG9ja3MsXFxuIFxcdFxcdFxcdFxcdCAgaW50IHBleHRlbnRzKTtcXG4gZXh0ZXJuIGludCBleHQ0X2Jsb2NrX3plcm9fZW9mKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBmcm9tLCBsb2ZmX3QgZW5kKTtcXG4rXFxuKyNkZWZpbmUgRVhUNF9QQVJUSUFMX1pFUk9fU1RBUlRcXHQweDFcXG4rI2RlZmluZSBFWFQ0X1BBUlRJQUxfWkVST19FTkRcXHQweDJcXG4gZXh0ZXJuIGludCBleHQ0X3plcm9fcGFydGlhbF9ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGxzdGFydCxcXG4tXFx0XFx0XFx0XFx0ICAgIGxvZmZfdCBsZW5ndGgsIGJvb2wgKmRpZF96ZXJvKTtcXG4rXFx0XFx0XFx0XFx0ICAgIGxvZmZfdCBsZW5ndGgsIHVuc2lnbmVkIGludCAqcGFydGlhbF96ZXJvZWQpO1xcbiBleHRlcm4gdm1fZmF1bHRfdCBleHQ0X3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XFxuIGV4dGVybiBxc2l6ZV90ICpleHQ0X2dldF9yZXNlcnZlZF9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4gZXh0ZXJuIGludCBleHQ0X2dldF9wcm9qaWQoc3RydWN0IGlub2RlICppbm9kZSwga3Byb2ppZF90ICpwcm9qaWQpO1xcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dGVudHMuYyBiL2ZzL2V4dDQvZXh0ZW50cy5jXFxuaW5kZXggMTI1ZjYyOGU3MzhhYjEuLjhjN2E5ODQwNWE2NDJmIDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvZXh0ZW50cy5jXFxuKysrIGIvZnMvZXh0NC9leHRlbnRzLmNcXG5AQCAtNDU4NSw2ICs0NTg1LDcgQEAgc3RhdGljIGludCBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuLFxcbiBcXHRsb2ZmX3QgZXBvcyA9IDAsIG9sZF9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xcbiBcXHR1bnNpZ25lZCBpbnQgYmxrYml0cyA9IGlub2RlLVxcdTAwM2VpX2Jsa2JpdHM7XFxuIFxcdGJvb2wgYWxsb2NfemVybyA9IGZhbHNlO1xcbitcXHRib29sIG9ycGhhbiA9IGZhbHNlO1xcbiBcXG4gXFx0QlVHX09OKCFleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKSk7XFxuIFxcdG1hcC5tX2xibGsgPSBvZmZzZXQgXFx1MDAzZVxcdTAwM2UgYmxrYml0cztcXG5AQCAtNDY1OSwxMiArNDY2MCwzMCBAQCBzdGF0aWMgaW50IGV4dDRfYWxsb2NfZmlsZV9ibG9ja3Moc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4sXFxuIFxcbiBcXHRcXHRpZiAoYWxsb2NfemVybyBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgKG1hcC5tX2ZsYWdzIFxcdTAwMjYgKEVYVDRfTUFQX01BUFBFRCB8IEVYVDRfTUFQX1VOV1JJVFRFTikpKSB7XFxuK1xcdFxcdFxcdFdBUk5fT05fT05DRShtYXAubV9sYmxrICsgbWFwLm1fbGVuIFxcdTAwM2VcXG4rXFx0XFx0XFx0XFx0RVhUNF9CX1RPX0xCTEsoaW5vZGUsIG5ld19zaXplID86IG9sZF9zaXplKSk7XFxuK1xcbiBcXHRcXHRcXHRyZXQgPSBleHQ0X2lzc3VlX3plcm9vdXQoaW5vZGUsIG1hcC5tX2xibGssIG1hcC5tX3BibGssXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCBtYXAubV9sZW4pO1xcbi1cXHRcXHRcXHRpZiAobGlrZWx5KCFyZXQpKVxcbi1cXHRcXHRcXHRcXHRyZXQgPSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoTlVMTCxcXG4rXFx0XFx0XFx0aWYgKHVubGlrZWx5KHJldCkpXFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0XFx0aGFuZGxlID0gZXh0NF9qb3VybmFsX3N0YXJ0KGlub2RlLCBFWFQ0X0hUX01BUF9CTE9DS1MsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBjcmVkaXRzKTtcXG4rXFx0XFx0XFx0aWYgKElTX0VSUihoYW5kbGUpKSB7XFxuK1xcdFxcdFxcdFxcdHJldCA9IFBUUl9FUlIoaGFuZGxlKTtcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdHJldCA9IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhoYW5kbGUsXFxuIFxcdFxcdFxcdFxcdFxcdGlub2RlLCAobG9mZl90KW1hcC5tX2xibGsgXFx1MDAzY1xcdTAwM2MgYmxrYml0cyxcXG4gXFx0XFx0XFx0XFx0XFx0KGxvZmZfdCltYXAubV9sZW4gXFx1MDAzY1xcdTAwM2MgYmxrYml0cyk7XFxuK1xcdFxcdFxcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2IG5ld19zaXplKSB7XFxuK1xcdFxcdFxcdFxcdHJldCA9IGV4dDRfb3JwaGFuX2FkZChoYW5kbGUsIGlub2RlKTtcXG4rXFx0XFx0XFx0XFx0b3JwaGFuID0gdHJ1ZTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRyZXQyID0gZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcXG4rXFx0XFx0XFx0cmV0ID0gcmV0ID8gcmV0IDogcmV0MjtcXG4gXFx0XFx0XFx0aWYgKHJldClcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG5AQCAtNDY4NywxMiArNDcwNiwxNyBAQCBzdGF0aWMgaW50IGV4dDRfYWxsb2NfZmlsZV9ibG9ja3Moc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4sXFxuIFxcdGlmIChlcG9zIFxcdTAwM2UgbmV3X3NpemUpXFxuIFxcdFxcdGVwb3MgPSBuZXdfc2l6ZTtcXG4gXFxuLVxcdGhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgRVhUNF9IVF9NSVNDLCAxKTtcXG4tXFx0aWYgKElTX0VSUihoYW5kbGUpKVxcbitcXHRoYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIEVYVDRfSFRfTUlTQywgMik7XFxuK1xcdGlmIChJU19FUlIoaGFuZGxlKSkge1xcbitcXHRcXHRpZiAob3JwaGFuIFxcdTAwMjZcXHUwMDI2IGlub2RlLVxcdTAwM2VpX25saW5rKVxcbitcXHRcXHRcXHRleHQ0X29ycGhhbl9kZWwoTlVMTCwgaW5vZGUpO1xcbiBcXHRcXHRyZXR1cm4gcmV0ID8gcmV0IDogUFRSX0VSUihoYW5kbGUpO1xcbitcXHR9XFxuIFxcbiBcXHRleHQ0X3VwZGF0ZV9pbm9kZV9zaXplKGlub2RlLCBlcG9zKTtcXG4gXFx0cmV0MiA9IGV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTtcXG4rXFx0aWYgKG9ycGhhbiBcXHUwMDI2XFx1MDAyNiBpbm9kZS1cXHUwMDNlaV9ubGluaylcXG4rXFx0XFx0ZXh0NF9vcnBoYW5fZGVsKGhhbmRsZSwgaW5vZGUpO1xcbiBcXHRleHQ0X3VwZGF0ZV9pbm9kZV9mc3luY190cmFucyhoYW5kbGUsIGlub2RlLCAxKTtcXG4gXFx0cmV0MyA9IGV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7XFxuIFxcdHJldDIgPSByZXQzID8gcmV0MyA6IHJldDI7XFxuQEAgLTQ3MTUsNyArNDczOSw3IEBAIHN0YXRpYyBsb25nIGV4dDRfemVyb19yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCxcXG4gXFx0bG9mZl90IGFsaWduX3N0YXJ0LCBhbGlnbl9lbmQsIG5ld19zaXplID0gMDtcXG4gXFx0bG9mZl90IGVuZCA9IG9mZnNldCArIGxlbjtcXG4gXFx0dW5zaWduZWQgaW50IGJsb2Nrc2l6ZSA9IGlfYmxvY2tzaXplKGlub2RlKTtcXG4tXFx0Ym9vbCBwYXJ0aWFsX3plcm9lZCA9IGZhbHNlO1xcbitcXHR1bnNpZ25lZCBpbnQgcGFydGlhbF96ZXJvZWQgPSAwO1xcbiBcXHRpbnQgcmV0LCBmbGFncztcXG4gXFxuIFxcdHRyYWNlX2V4dDRfemVyb19yYW5nZShpbm9kZSwgb2Zmc2V0LCBsZW4sIG1vZGUpO1xcbkBAIC00NzM0LDEwICs0NzU4LDE2IEBAIHN0YXRpYyBsb25nIGV4dDRfemVyb19yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCxcXG4gXFx0fVxcbiBcXG4gXFx0ZmxhZ3MgPSBFWFQ0X0dFVF9CTE9DS1NfQ1JFQVRFX1VOV1JJVF9FWFQ7XFxuLVxcdC8qIFByZWFsbG9jYXRlIHRoZSByYW5nZSBpbmNsdWRpbmcgdGhlIHVuYWxpZ25lZCBlZGdlcyAqL1xcbitcXHQvKlxcbitcXHQgKiBQcmVhbGxvY2F0ZSB0aGUgcmFuZ2UgaW5jbHVkaW5nIHRoZSB1bmFsaWduZWQgZWRnZXMsIGFuZCB6ZXJvXFxuK1xcdCAqIG91dCBwYXJ0aWFsIGJsb2NrcyBpZiB0aGV5IGFscmVhZHkgY29udGFpbiBkYXRhLlxcbitcXHQgKi9cXG4gXFx0aWYgKCFJU19BTElHTkVEKG9mZnNldCB8IGVuZCwgYmxvY2tzaXplKSkge1xcbiBcXHRcXHRyZXQgPSBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzKGZpbGUsIG9mZnNldCwgbGVuLCBuZXdfc2l6ZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBmbGFncyk7XFxuK1xcdFxcdGlmICghcmV0KVxcbitcXHRcXHRcXHRyZXQgPSBleHQ0X3plcm9fcGFydGlhbF9ibG9ja3MoaW5vZGUsIG9mZnNldCwgbGVuLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNnBhcnRpYWxfemVyb2VkKTtcXG4gXFx0XFx0aWYgKHJldClcXG4gXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbkBAIC00NzU0LDYgKzQ3ODQsMjEgQEAgc3RhdGljIGxvbmcgZXh0NF96ZXJvX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LFxcbiBcXHQvKiBaZXJvIHJhbmdlIGV4Y2x1ZGluZyB0aGUgdW5hbGlnbmVkIGVkZ2VzICovXFxuIFxcdGFsaWduX3N0YXJ0ID0gcm91bmRfdXAob2Zmc2V0LCBibG9ja3NpemUpO1xcbiBcXHRhbGlnbl9lbmQgPSByb3VuZF9kb3duKGVuZCwgYmxvY2tzaXplKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEluIFdSSVRFX1pFUk9FUyBtb2RlLCBlZGdlcyB0aGF0IHdlcmUgbm90IHBhcnRpYWwtemVyb2VkIChjbGVhblxcbitcXHQgKiB1bndyaXR0ZW4gb3IgaG9sZSkgbXVzdCBiZSBhbGxvY2F0ZWQgYW5kIHplcm9lZCBhcyB3aG9sZSBibG9ja3MuXFxuK1xcdCAqIEV4cGFuZCB0aGUgYWxpZ25lZCByYW5nZSBvdXR3YXJkIHRvIGNvdmVyIHRoZW0uXFxuK1xcdCAqL1xcbitcXHRpZiAobW9kZSBcXHUwMDI2IEZBTExPQ19GTF9XUklURV9aRVJPRVMpIHtcXG4rXFx0XFx0aWYgKCFJU19BTElHTkVEKG9mZnNldCwgYmxvY2tzaXplKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIShwYXJ0aWFsX3plcm9lZCBcXHUwMDI2IEVYVDRfUEFSVElBTF9aRVJPX1NUQVJUKSlcXG4rXFx0XFx0XFx0YWxpZ25fc3RhcnQgPSByb3VuZF9kb3duKG9mZnNldCwgYmxvY2tzaXplKTtcXG4rXFx0XFx0aWYgKCFJU19BTElHTkVEKGVuZCwgYmxvY2tzaXplKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIShwYXJ0aWFsX3plcm9lZCBcXHUwMDI2IEVYVDRfUEFSVElBTF9aRVJPX0VORCkpXFxuK1xcdFxcdFxcdGFsaWduX2VuZCA9IHJvdW5kX3VwKGVuZCwgYmxvY2tzaXplKTtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKGFsaWduX2VuZCBcXHUwMDNlIGFsaWduX3N0YXJ0KSB7XFxuIFxcdFxcdGlmIChtb2RlIFxcdTAwMjYgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FUylcXG4gXFx0XFx0XFx0ZmxhZ3MgPSBFWFQ0X0dFVF9CTE9DS1NfQ1JFQVRFX1pFUk8gfCBFWFQ0X0VYX05PQ0FDSEU7XFxuQEAgLTQ3NzAsMTEgKzQ4MTUsMTUgQEAgc3RhdGljIGxvbmcgZXh0NF96ZXJvX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LFxcbiBcXHRpZiAoSVNfQUxJR05FRChvZmZzZXQgfCBlbmQsIGJsb2Nrc2l6ZSkpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHQvKiBaZXJvIG91dCBwYXJ0aWFsIGJsb2NrIGF0IHRoZSBlZGdlcyBvZiB0aGUgcmFuZ2UgKi9cXG4tXFx0cmV0ID0gZXh0NF96ZXJvX3BhcnRpYWxfYmxvY2tzKGlub2RlLCBvZmZzZXQsIGxlbiwgXFx1MDAyNnBhcnRpYWxfemVyb2VkKTtcXG4tXFx0aWYgKHJldClcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4tXFx0aWYgKCgoZmlsZS1cXHUwMDNlZl9mbGFncyBcXHUwMDI2IE9fU1lOQykgfHwgSVNfU1lOQyhpbm9kZSkpIFxcdTAwMjZcXHUwMDI2IHBhcnRpYWxfemVyb2VkKSB7XFxuK1xcdC8qXFxuK1xcdCAqIEluIEZBTExPQ19GTF9XUklURV9aRVJPRVMgbW9kZSwgZWRnZXMgdGhhdCBoYXZlIGJlZW4gcGFydGlhbGx5XFxuK1xcdCAqIHplcm9lZCBtdXN0IGJlIHdyaXR0ZW4gYmFjayB0byBlbnN1cmUgdGhlIGVudGlyZSB6ZXJvZWQgcmFuZ2VcXG4rXFx0ICogaXMgY29udmVydGVkIHRvIHRoZSB3cml0dGVuIHN0YXRlLiBJbiBTWU5DIG1vZGUsIHdyaXRlYmFjayBpc1xcbitcXHQgKiBhbHNvIHJlcXVpcmVkIHRvIHBlcnNpc3QgdGhlIHplcm9lZCBkYXRhIHRvIGRpc2suXFxuK1xcdCAqL1xcbitcXHRpZiAocGFydGlhbF96ZXJvZWQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICgobW9kZSBcXHUwMDI2IEZBTExPQ19GTF9XUklURV9aRVJPRVMpIHx8XFxuK1xcdCAgICAgKGZpbGUtXFx1MDAzZWZfZmxhZ3MgXFx1MDAyNiBPX1NZTkMpIHx8IElTX1NZTkMoaW5vZGUpKSkge1xcbiBcXHRcXHRyZXQgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKGlub2RlLVxcdTAwM2VpX21hcHBpbmcsIG9mZnNldCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgZW5kIC0gMSk7XFxuIFxcdFxcdGlmIChyZXQpXFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuY1xcbmluZGV4IGMyYzJkNmFjN2YzZDEzLi5iNTIxN2Q1ZmU5NTQwYiAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L2lub2RlLmNcXG4rKysgYi9mcy9leHQ0L2lub2RlLmNcXG5AQCAtNDAyNiw2ICs0MDI2LDEwIEBAIHZvaWQgZXh0NF9zZXRfYW9wcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiAgKiBiZWNhdXNlIGl0IG1pZ2h0IGhhdmUgZGF0YSBpbiBwYWdlY2FjaGUgKGVnLCBpZiBjYWxsZWQgZnJvbSBleHQ0X3plcm9fcmFuZ2UsXFxuICAqIGV4dDRfcHVuY2hfaG9sZSwgZXRjKSB3aGljaCBuZWVkcyB0byBiZSBwcm9wZXJseSB6ZXJvZWQgb3V0LiBPdGhlcndpc2UgYVxcbiAgKiByYWNpbmcgd3JpdGViYWNrIGNhbiBjb21lIGxhdGVyIGFuZCBmbHVzaCB0aGUgc3RhbGUgcGFnZWNhY2hlIHRvIGRpc2suXFxuKyAqXFxuKyAqIFJldHVybiB0aGUgbG9hZGVkIGJoIGlmIGl0IGFjdHVhbGx5IG5lZWRzIHplcm9pbmcgLSBpbiB3cml0dGVuLCBkaXJ0eVxcbisgKiB1bndyaXR0ZW4sIG9yIGRlbGFsbG9jIHN0YXRlLiBSZXR1cm4gTlVMTCBpZiBpdCdzIGNsZWFuIChpLmUuLCBhIGhvbGUgb3JcXG4rICogYSBjbGVhbiB1bndyaXR0ZW4gYmxvY2spLlxcbiAgKi9cXG4gc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqZXh0NF9sb2FkX3RhaWxfYmgoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGZyb20pXFxuIHtcXG5AQCAtNDA2NSw3ICs0MDY5LDEyIEBAIHN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmV4dDRfbG9hZF90YWlsX2JoKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBmcm9tKVxcbiBcXHRpZiAoIWJ1ZmZlcl9tYXBwZWQoYmgpKSB7XFxuIFxcdFxcdEJVRkZFUl9UUkFDRShiaCwgXFxcInVubWFwcGVkXFxcIik7XFxuIFxcdFxcdGV4dDRfZ2V0X2Jsb2NrKGlub2RlLCBpYmxvY2ssIGJoLCAwKTtcXG4tXFx0XFx0LyogdW5tYXBwZWQ/IEl0J3MgYSBob2xlIC0gbm90aGluZyB0byBkbyAqL1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBJdCdzIGEgaG9sZSBvciBhIGNsZWFuIHVud3JpdHRlbiBibG9jayAtIG5vdGhpbmcgdG8gZG8uXFxuK1xcdFxcdCAqIE5vdGUgdGhhdCBhIGxvb2t1cC1vbmx5IGdldF9ibG9jayAod2l0aG91dFxcbitcXHRcXHQgKiBFWFQ0X0dFVF9CTE9DS1NfQ1JFQVRFKSBuZXZlciBzZXRzIEJIX01hcHBlZCBmb3IgY2xlYW5cXG4rXFx0XFx0ICogdW53cml0dGVuIGV4dGVudHMuXFxuK1xcdFxcdCAqL1xcbiBcXHRcXHRpZiAoIWJ1ZmZlcl9tYXBwZWQoYmgpKSB7XFxuIFxcdFxcdFxcdEJVRkZFUl9UUkFDRShiaCwgXFxcInN0aWxsIHVubWFwcGVkXFxcIik7XFxuIFxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbkBAIC00MjUyLDEzICs0MjYxLDI2IEBAIGludCBleHQ0X2Jsb2NrX3plcm9fZW9mKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBmcm9tLCBsb2ZmX3QgZW5kKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rLypcXG4rICogWmVybyBvdXQgdGhlIHVuYWxpZ25lZCBoZWFkIGFuZCB0YWlsIG9mIHRoZSBbbHN0YXJ0LCBsc3RhcnQrbGVuZ3RoKVxcbisgKiByYW5nZS5cXG4rICpcXG4rICogT24gcmV0dXJuLCBAcGFydGlhbF96ZXJvZWQgcmVjb3JkcyB3aGljaCBlZGdlcyBhY3R1YWxseSBnb3RcXG4rICogcGFydGlhbC16ZXJvZWQuICBTZXQgRVhUNF9QQVJUSUFMX1pFUk9fU1RBUlQvRVhUNF9QQVJUSUFMX1pFUk9fRU5EIGlmXFxuKyAqIHRoZSBoZWFkL3RhaWwgYmxvY2sgZ290IGFjdHVhbGx5IHBhcnRpYWxseSB6ZXJvZWQgKGluIHdyaXR0ZW4sIGRpcnR5XFxuKyAqIHVud3JpdHRlbiBvciBkZWxhbGxvYyBzdGF0ZSkuICBDbGVhcmVkIGlmIHRoZSBoZWFkL3RhaWwgYmxvY2sgaXMgYVxcbisgKiBob2xlIG9yIGEgY2xlYW4gdW53cml0dGVuIGJsb2NrLCBpbiB3aGljaCBjYXNlIHRoZXJlIGlzIG5vdGhpbmcgdGhhdFxcbisgKiBuZWVkcyB6ZXJvaW5nLiAgV2hlbiB0aGUgaGVhZCBhbmQgdGFpbCBsYW5kIGluIHRoZSBzYW1lIGJsb2NrLCBib3RoXFxuKyAqIGJpdHMgYXJlIHNldCB0b2dldGhlciBvbiBhIHN1Y2Nlc3NmdWwgemVyb2luZy5cXG4rICovXFxuIGludCBleHQ0X3plcm9fcGFydGlhbF9ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGxzdGFydCwgbG9mZl90IGxlbmd0aCxcXG4tXFx0XFx0XFx0ICAgICBib29sICpkaWRfemVybylcXG4rXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgKnBhcnRpYWxfemVyb2VkKVxcbiB7XFxuIFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cXHUwMDNlaV9zYjtcXG4gXFx0dW5zaWduZWQgcGFydGlhbF9zdGFydCwgcGFydGlhbF9lbmQ7XFxuIFxcdGV4dDRfZnNibGtfdCBzdGFydCwgZW5kO1xcbiBcXHRsb2ZmX3QgYnl0ZV9lbmQgPSAobHN0YXJ0ICsgbGVuZ3RoIC0gMSk7XFxuK1xcdGJvb2wgZGlkX3plcm8gPSBmYWxzZTtcXG4gXFx0aW50IGVyciA9IDA7XFxuIFxcbiBcXHRwYXJ0aWFsX3N0YXJ0ID0gbHN0YXJ0IFxcdTAwMjYgKHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSAtIDEpO1xcbkBAIC00MjcwLDIxICs0MjkyLDMyIEBAIGludCBleHQ0X3plcm9fcGFydGlhbF9ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGxzdGFydCwgbG9mZl90IGxlbmd0aCxcXG4gXFx0LyogSGFuZGxlIHBhcnRpYWwgemVybyB3aXRoaW4gdGhlIHNpbmdsZSBibG9jayAqL1xcbiBcXHRpZiAoc3RhcnQgPT0gZW5kIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICAocGFydGlhbF9zdGFydCB8fCAocGFydGlhbF9lbmQgIT0gc2ItXFx1MDAzZXNfYmxvY2tzaXplIC0gMSkpKSB7XFxuLVxcdFxcdGVyciA9IGV4dDRfYmxvY2tfemVyb19yYW5nZShpbm9kZSwgbHN0YXJ0LCBsZW5ndGgsIGRpZF96ZXJvLFxcbitcXHRcXHRlcnIgPSBleHQ0X2Jsb2NrX3plcm9fcmFuZ2UoaW5vZGUsIGxzdGFydCwgbGVuZ3RoLCBcXHUwMDI2ZGlkX3plcm8sXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBOVUxMKTtcXG4rXFx0XFx0aWYgKGRpZF96ZXJvKVxcbitcXHRcXHRcXHQqcGFydGlhbF96ZXJvZWQgfD0gKEVYVDRfUEFSVElBTF9aRVJPX1NUQVJUIHxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIEVYVDRfUEFSVElBTF9aRVJPX0VORCk7XFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdH1cXG4gXFx0LyogSGFuZGxlIHBhcnRpYWwgemVybyBvdXQgb24gdGhlIHN0YXJ0IG9mIHRoZSByYW5nZSAqL1xcbiBcXHRpZiAocGFydGlhbF9zdGFydCkge1xcbiBcXHRcXHRlcnIgPSBleHQ0X2Jsb2NrX3plcm9fcmFuZ2UoaW5vZGUsIGxzdGFydCwgc2ItXFx1MDAzZXNfYmxvY2tzaXplLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgZGlkX3plcm8sIE5VTEwpO1xcbitcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmRpZF96ZXJvLCBOVUxMKTtcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0aWYgKGRpZF96ZXJvKVxcbitcXHRcXHRcXHQqcGFydGlhbF96ZXJvZWQgfD0gRVhUNF9QQVJUSUFMX1pFUk9fU1RBUlQ7XFxuIFxcdH1cXG4gXFx0LyogSGFuZGxlIHBhcnRpYWwgemVybyBvdXQgb24gdGhlIGVuZCBvZiB0aGUgcmFuZ2UgKi9cXG4tXFx0aWYgKHBhcnRpYWxfZW5kICE9IHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSAtIDEpXFxuK1xcdGlmIChwYXJ0aWFsX2VuZCAhPSBzYi1cXHUwMDNlc19ibG9ja3NpemUgLSAxKSB7XFxuK1xcdFxcdGRpZF96ZXJvID0gZmFsc2U7XFxuIFxcdFxcdGVyciA9IGV4dDRfYmxvY2tfemVyb19yYW5nZShpbm9kZSwgYnl0ZV9lbmQgLSBwYXJ0aWFsX2VuZCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIHBhcnRpYWxfZW5kICsgMSwgZGlkX3plcm8sIE5VTEwpO1xcbitcXHRcXHRcXHRcXHRcXHQgICAgcGFydGlhbF9lbmQgKyAxLCBcXHUwMDI2ZGlkX3plcm8sIE5VTEwpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHRpZiAoZGlkX3plcm8pXFxuK1xcdFxcdFxcdCpwYXJ0aWFsX3plcm9lZCB8PSBFWFQ0X1BBUlRJQUxfWkVST19FTkQ7XFxuK1xcdH1cXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG5AQCAtNDQzMyw3ICs0NDY2LDcgQEAgaW50IGV4dDRfcHVuY2hfaG9sZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbmd0aClcXG4gXFx0bG9mZl90IGVuZCA9IG9mZnNldCArIGxlbmd0aDtcXG4gXFx0aGFuZGxlX3QgKmhhbmRsZTtcXG4gXFx0dW5zaWduZWQgaW50IGNyZWRpdHM7XFxuLVxcdGJvb2wgcGFydGlhbF96ZXJvZWQgPSBmYWxzZTtcXG4rXFx0dW5zaWduZWQgaW50IHBhcnRpYWxfemVyb2VkID0gMDtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdHRyYWNlX2V4dDRfcHVuY2hfaG9sZShpbm9kZSwgb2Zmc2V0LCBsZW5ndGgsIDApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwOToxMTowNy4wNzMwODc2NTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNTcwNjMyNTUyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9hbGxvY19maWxlX2Jsb2Nrc1wiLFxuICAgIFwiZXh0NF96ZXJvX3JhbmdlXCIsXG4gICAgXCJleHQ0X3plcm9fcGFydGlhbF9ibG9ja3NcIixcbiAgICBcImV4dDRfbG9hZF90YWlsX2JoXCIsXG4gICAgXCJleHQ0X2ZhbGxvY2F0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgYSBuZXcgZmFsbG9jYXRlIGZsYWcgYEZBTExPQ19GTF9XUklURV9aRVJPRVNgIGluIGV4dDQuIEl0IG1vZGlmaWVzIHRoZSBjb3JlIGJsb2NrIGFsbG9jYXRpb24gYW5kIHplcm9pbmcgbG9naWMsIGluY2x1ZGluZyBgZXh0NF96ZXJvX3JhbmdlYCwgYGV4dDRfYWxsb2NfZmlsZV9ibG9ja3NgLCBhbmQgYGV4dDRfemVyb19wYXJ0aWFsX2Jsb2Nrc2AuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGhvdyBleHQ0IGhhbmRsZXMgdW53cml0dGVuIGV4dGVudHMsIHBhcnRpYWwgYmxvY2sgemVyb2luZywgYW5kIG9ycGhhbiBsaXN0cyBkdXJpbmcgZmFsbG9jYXRlIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgZmlsZXN5c3RlbSBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGVjNDk1ZDA5NmNiNDliNWE1NTBhODFmYjU3Mjc4YjZkNTU4NzdmMzFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCA3IDA5OjExOjA0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0LmggYi9mcy9leHQ0L2V4dDQuaFxuaW5kZXggOTQyODNhOTkxZTVjNGYuLmIyZTU1ODc2ZDBlMzUyIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9leHQ0LmhcbisrKyBiL2ZzL2V4dDQvZXh0NC5oXG5AQCAtMzA5OSw4ICszMDk5LDExIEBAIGV4dGVybiBpbnQgZXh0NF9jaHVua190cmFuc19leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5yYmxvY2tzKTtcbiBleHRlcm4gaW50IGV4dDRfbWV0YV90cmFuc19ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSwgaW50IGxibG9ja3MsXG4gXHRcdFx0XHQgIGludCBwZXh0ZW50cyk7XG4gZXh0ZXJuIGludCBleHQ0X2Jsb2NrX3plcm9fZW9mKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBmcm9tLCBsb2ZmX3QgZW5kKTtcbitcbisjZGVmaW5lIEVYVDRfUEFSVElBTF9aRVJPX1NUQVJUXHQweDFcbisjZGVmaW5lIEVYVDRfUEFSVElBTF9aRVJPX0VORFx0MHgyXG4gZXh0ZXJuIGludCBleHQ0X3plcm9fcGFydGlhbF9ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGxzdGFydCxcbi1cdFx0XHRcdCAgICBsb2ZmX3QgbGVuZ3RoLCBib29sICpkaWRfemVybyk7XG4rXHRcdFx0XHQgICAgbG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50ICpwYXJ0aWFsX3plcm9lZCk7XG4gZXh0ZXJuIHZtX2ZhdWx0X3QgZXh0NF9wYWdlX21rd3JpdGUoc3RydWN0IHZtX2ZhdWx0ICp2bWYpO1xuIGV4dGVybiBxc2l6ZV90ICpleHQ0X2dldF9yZXNlcnZlZF9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBleHRlcm4gaW50IGV4dDRfZ2V0X3Byb2ppZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBrcHJvamlkX3QgKnByb2ppZCk7XG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHRlbnRzLmMgYi9mcy9leHQ0L2V4dGVudHMuY1xuaW5kZXggMTI1ZjYyOGU3MzhhYjEuLjhjN2E5ODQwNWE2NDJmIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9leHRlbnRzLmNcbisrKyBiL2ZzL2V4dDQvZXh0ZW50cy5jXG5AQCAtNDU4NSw2ICs0NTg1LDcgQEAgc3RhdGljIGludCBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuLFxuIFx0bG9mZl90IGVwb3MgPSAwLCBvbGRfc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcbiBcdHVuc2lnbmVkIGludCBibGtiaXRzID0gaW5vZGUtXHUwMDNlaV9ibGtiaXRzO1xuIFx0Ym9vbCBhbGxvY196ZXJvID0gZmFsc2U7XG4rXHRib29sIG9ycGhhbiA9IGZhbHNlO1xuIFxuIFx0QlVHX09OKCFleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKSk7XG4gXHRtYXAubV9sYmxrID0gb2Zmc2V0IFx1MDAzZVx1MDAzZSBibGtiaXRzO1xuQEAgLTQ2NTksMTIgKzQ2NjAsMzAgQEAgc3RhdGljIGludCBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuLFxuIFxuIFx0XHRpZiAoYWxsb2NfemVybyBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIChtYXAubV9mbGFncyBcdTAwMjYgKEVYVDRfTUFQX01BUFBFRCB8IEVYVDRfTUFQX1VOV1JJVFRFTikpKSB7XG4rXHRcdFx0V0FSTl9PTl9PTkNFKG1hcC5tX2xibGsgKyBtYXAubV9sZW4gXHUwMDNlXG4rXHRcdFx0XHRFWFQ0X0JfVE9fTEJMSyhpbm9kZSwgbmV3X3NpemUgPzogb2xkX3NpemUpKTtcbitcbiBcdFx0XHRyZXQgPSBleHQ0X2lzc3VlX3plcm9vdXQoaW5vZGUsIG1hcC5tX2xibGssIG1hcC5tX3BibGssXG4gXHRcdFx0XHRcdFx0IG1hcC5tX2xlbik7XG4tXHRcdFx0aWYgKGxpa2VseSghcmV0KSlcbi1cdFx0XHRcdHJldCA9IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhOVUxMLFxuK1x0XHRcdGlmICh1bmxpa2VseShyZXQpKVxuK1x0XHRcdFx0YnJlYWs7XG4rXG4rXHRcdFx0aGFuZGxlID0gZXh0NF9qb3VybmFsX3N0YXJ0KGlub2RlLCBFWFQ0X0hUX01BUF9CTE9DS1MsXG4rXHRcdFx0XHRcdFx0ICAgIGNyZWRpdHMpO1xuK1x0XHRcdGlmIChJU19FUlIoaGFuZGxlKSkge1xuK1x0XHRcdFx0cmV0ID0gUFRSX0VSUihoYW5kbGUpO1xuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0fVxuK1xuK1x0XHRcdHJldCA9IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhoYW5kbGUsXG4gXHRcdFx0XHRcdGlub2RlLCAobG9mZl90KW1hcC5tX2xibGsgXHUwMDNjXHUwMDNjIGJsa2JpdHMsXG4gXHRcdFx0XHRcdChsb2ZmX3QpbWFwLm1fbGVuIFx1MDAzY1x1MDAzYyBibGtiaXRzKTtcbitcdFx0XHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgbmV3X3NpemUpIHtcbitcdFx0XHRcdHJldCA9IGV4dDRfb3JwaGFuX2FkZChoYW5kbGUsIGlub2RlKTtcbitcdFx0XHRcdG9ycGhhbiA9IHRydWU7XG4rXHRcdFx0fVxuK1x0XHRcdHJldDIgPSBleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpO1xuK1x0XHRcdHJldCA9IHJldCA/IHJldCA6IHJldDI7XG4gXHRcdFx0aWYgKHJldClcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5AQCAtNDY4NywxMiArNDcwNiwxNyBAQCBzdGF0aWMgaW50IGV4dDRfYWxsb2NfZmlsZV9ibG9ja3Moc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4sXG4gXHRpZiAoZXBvcyBcdTAwM2UgbmV3X3NpemUpXG4gXHRcdGVwb3MgPSBuZXdfc2l6ZTtcbiBcbi1cdGhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgRVhUNF9IVF9NSVNDLCAxKTtcbi1cdGlmIChJU19FUlIoaGFuZGxlKSlcbitcdGhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgRVhUNF9IVF9NSVNDLCAyKTtcbitcdGlmIChJU19FUlIoaGFuZGxlKSkge1xuK1x0XHRpZiAob3JwaGFuIFx1MDAyNlx1MDAyNiBpbm9kZS1cdTAwM2VpX25saW5rKVxuK1x0XHRcdGV4dDRfb3JwaGFuX2RlbChOVUxMLCBpbm9kZSk7XG4gXHRcdHJldHVybiByZXQgPyByZXQgOiBQVFJfRVJSKGhhbmRsZSk7XG4rXHR9XG4gXG4gXHRleHQ0X3VwZGF0ZV9pbm9kZV9zaXplKGlub2RlLCBlcG9zKTtcbiBcdHJldDIgPSBleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7XG4rXHRpZiAob3JwaGFuIFx1MDAyNlx1MDAyNiBpbm9kZS1cdTAwM2VpX25saW5rKVxuK1x0XHRleHQ0X29ycGhhbl9kZWwoaGFuZGxlLCBpbm9kZSk7XG4gXHRleHQ0X3VwZGF0ZV9pbm9kZV9mc3luY190cmFucyhoYW5kbGUsIGlub2RlLCAxKTtcbiBcdHJldDMgPSBleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpO1xuIFx0cmV0MiA9IHJldDMgPyByZXQzIDogcmV0MjtcbkBAIC00NzE1LDcgKzQ3MzksNyBAQCBzdGF0aWMgbG9uZyBleHQ0X3plcm9fcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsXG4gXHRsb2ZmX3QgYWxpZ25fc3RhcnQsIGFsaWduX2VuZCwgbmV3X3NpemUgPSAwO1xuIFx0bG9mZl90IGVuZCA9IG9mZnNldCArIGxlbjtcbiBcdHVuc2lnbmVkIGludCBibG9ja3NpemUgPSBpX2Jsb2Nrc2l6ZShpbm9kZSk7XG4tXHRib29sIHBhcnRpYWxfemVyb2VkID0gZmFsc2U7XG4rXHR1bnNpZ25lZCBpbnQgcGFydGlhbF96ZXJvZWQgPSAwO1xuIFx0aW50IHJldCwgZmxhZ3M7XG4gXG4gXHR0cmFjZV9leHQ0X3plcm9fcmFuZ2UoaW5vZGUsIG9mZnNldCwgbGVuLCBtb2RlKTtcbkBAIC00NzM0LDEwICs0NzU4LDE2IEBAIHN0YXRpYyBsb25nIGV4dDRfemVyb19yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCxcbiBcdH1cbiBcbiBcdGZsYWdzID0gRVhUNF9HRVRfQkxPQ0tTX0NSRUFURV9VTldSSVRfRVhUO1xuLVx0LyogUHJlYWxsb2NhdGUgdGhlIHJhbmdlIGluY2x1ZGluZyB0aGUgdW5hbGlnbmVkIGVkZ2VzICovXG4rXHQvKlxuK1x0ICogUHJlYWxsb2NhdGUgdGhlIHJhbmdlIGluY2x1ZGluZyB0aGUgdW5hbGlnbmVkIGVkZ2VzLCBhbmQgemVyb1xuK1x0ICogb3V0IHBhcnRpYWwgYmxvY2tzIGlmIHRoZXkgYWxyZWFkeSBjb250YWluIGRhdGEuXG4rXHQgKi9cbiBcdGlmICghSVNfQUxJR05FRChvZmZzZXQgfCBlbmQsIGJsb2Nrc2l6ZSkpIHtcbiBcdFx0cmV0ID0gZXh0NF9hbGxvY19maWxlX2Jsb2NrcyhmaWxlLCBvZmZzZXQsIGxlbiwgbmV3X3NpemUsXG4gXHRcdFx0XHRcdCAgICAgZmxhZ3MpO1xuK1x0XHRpZiAoIXJldClcbitcdFx0XHRyZXQgPSBleHQ0X3plcm9fcGFydGlhbF9ibG9ja3MoaW5vZGUsIG9mZnNldCwgbGVuLFxuK1x0XHRcdFx0XHRcdCAgICAgICBcdTAwMjZwYXJ0aWFsX3plcm9lZCk7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0cmV0dXJuIHJldDtcbiBcdH1cbkBAIC00NzU0LDYgKzQ3ODQsMjEgQEAgc3RhdGljIGxvbmcgZXh0NF96ZXJvX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LFxuIFx0LyogWmVybyByYW5nZSBleGNsdWRpbmcgdGhlIHVuYWxpZ25lZCBlZGdlcyAqL1xuIFx0YWxpZ25fc3RhcnQgPSByb3VuZF91cChvZmZzZXQsIGJsb2Nrc2l6ZSk7XG4gXHRhbGlnbl9lbmQgPSByb3VuZF9kb3duKGVuZCwgYmxvY2tzaXplKTtcbitcbitcdC8qXG4rXHQgKiBJbiBXUklURV9aRVJPRVMgbW9kZSwgZWRnZXMgdGhhdCB3ZXJlIG5vdCBwYXJ0aWFsLXplcm9lZCAoY2xlYW5cbitcdCAqIHVud3JpdHRlbiBvciBob2xlKSBtdXN0IGJlIGFsbG9jYXRlZCBhbmQgemVyb2VkIGFzIHdob2xlIGJsb2Nrcy5cbitcdCAqIEV4cGFuZCB0aGUgYWxpZ25lZCByYW5nZSBvdXR3YXJkIHRvIGNvdmVyIHRoZW0uXG4rXHQgKi9cbitcdGlmIChtb2RlIFx1MDAyNiBGQUxMT0NfRkxfV1JJVEVfWkVST0VTKSB7XG4rXHRcdGlmICghSVNfQUxJR05FRChvZmZzZXQsIGJsb2Nrc2l6ZSkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhKHBhcnRpYWxfemVyb2VkIFx1MDAyNiBFWFQ0X1BBUlRJQUxfWkVST19TVEFSVCkpXG4rXHRcdFx0YWxpZ25fc3RhcnQgPSByb3VuZF9kb3duKG9mZnNldCwgYmxvY2tzaXplKTtcbitcdFx0aWYgKCFJU19BTElHTkVEKGVuZCwgYmxvY2tzaXplKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICEocGFydGlhbF96ZXJvZWQgXHUwMDI2IEVYVDRfUEFSVElBTF9aRVJPX0VORCkpXG4rXHRcdFx0YWxpZ25fZW5kID0gcm91bmRfdXAoZW5kLCBibG9ja3NpemUpO1xuK1x0fVxuK1xuIFx0aWYgKGFsaWduX2VuZCBcdTAwM2UgYWxpZ25fc3RhcnQpIHtcbiBcdFx0aWYgKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9XUklURV9aRVJPRVMpXG4gXHRcdFx0ZmxhZ3MgPSBFWFQ0X0dFVF9CTE9DS1NfQ1JFQVRFX1pFUk8gfCBFWFQ0X0VYX05PQ0FDSEU7XG5AQCAtNDc3MCwxMSArNDgxNSwxNSBAQCBzdGF0aWMgbG9uZyBleHQ0X3plcm9fcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsXG4gXHRpZiAoSVNfQUxJR05FRChvZmZzZXQgfCBlbmQsIGJsb2Nrc2l6ZSkpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHQvKiBaZXJvIG91dCBwYXJ0aWFsIGJsb2NrIGF0IHRoZSBlZGdlcyBvZiB0aGUgcmFuZ2UgKi9cbi1cdHJldCA9IGV4dDRfemVyb19wYXJ0aWFsX2Jsb2Nrcyhpbm9kZSwgb2Zmc2V0LCBsZW4sIFx1MDAyNnBhcnRpYWxfemVyb2VkKTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4tXHRpZiAoKChmaWxlLVx1MDAzZWZfZmxhZ3MgXHUwMDI2IE9fU1lOQykgfHwgSVNfU1lOQyhpbm9kZSkpIFx1MDAyNlx1MDAyNiBwYXJ0aWFsX3plcm9lZCkge1xuK1x0LypcbitcdCAqIEluIEZBTExPQ19GTF9XUklURV9aRVJPRVMgbW9kZSwgZWRnZXMgdGhhdCBoYXZlIGJlZW4gcGFydGlhbGx5XG4rXHQgKiB6ZXJvZWQgbXVzdCBiZSB3cml0dGVuIGJhY2sgdG8gZW5zdXJlIHRoZSBlbnRpcmUgemVyb2VkIHJhbmdlXG4rXHQgKiBpcyBjb252ZXJ0ZWQgdG8gdGhlIHdyaXR0ZW4gc3RhdGUuIEluIFNZTkMgbW9kZSwgd3JpdGViYWNrIGlzXG4rXHQgKiBhbHNvIHJlcXVpcmVkIHRvIHBlcnNpc3QgdGhlIHplcm9lZCBkYXRhIHRvIGRpc2suXG4rXHQgKi9cbitcdGlmIChwYXJ0aWFsX3plcm9lZCBcdTAwMjZcdTAwMjZcbitcdCAgICAoKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9XUklURV9aRVJPRVMpIHx8XG4rXHQgICAgIChmaWxlLVx1MDAzZWZfZmxhZ3MgXHUwMDI2IE9fU1lOQykgfHwgSVNfU1lOQyhpbm9kZSkpKSB7XG4gXHRcdHJldCA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBvZmZzZXQsXG4gXHRcdFx0XHRcdFx0ICAgZW5kIC0gMSk7XG4gXHRcdGlmIChyZXQpXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jXG5pbmRleCBjMmMyZDZhYzdmM2QxMy4uYjUyMTdkNWZlOTU0MGIgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2lub2RlLmNcbisrKyBiL2ZzL2V4dDQvaW5vZGUuY1xuQEAgLTQwMjYsNiArNDAyNiwxMCBAQCB2b2lkIGV4dDRfc2V0X2FvcHMoc3RydWN0IGlub2RlICppbm9kZSlcbiAgKiBiZWNhdXNlIGl0IG1pZ2h0IGhhdmUgZGF0YSBpbiBwYWdlY2FjaGUgKGVnLCBpZiBjYWxsZWQgZnJvbSBleHQ0X3plcm9fcmFuZ2UsXG4gICogZXh0NF9wdW5jaF9ob2xlLCBldGMpIHdoaWNoIG5lZWRzIHRvIGJlIHByb3Blcmx5IHplcm9lZCBvdXQuIE90aGVyd2lzZSBhXG4gICogcmFjaW5nIHdyaXRlYmFjayBjYW4gY29tZSBsYXRlciBhbmQgZmx1c2ggdGhlIHN0YWxlIHBhZ2VjYWNoZSB0byBkaXNrLlxuKyAqXG4rICogUmV0dXJuIHRoZSBsb2FkZWQgYmggaWYgaXQgYWN0dWFsbHkgbmVlZHMgemVyb2luZyAtIGluIHdyaXR0ZW4sIGRpcnR5XG4rICogdW53cml0dGVuLCBvciBkZWxhbGxvYyBzdGF0ZS4gUmV0dXJuIE5VTEwgaWYgaXQncyBjbGVhbiAoaS5lLiwgYSBob2xlIG9yXG4rICogYSBjbGVhbiB1bndyaXR0ZW4gYmxvY2spLlxuICAqL1xuIHN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmV4dDRfbG9hZF90YWlsX2JoKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBmcm9tKVxuIHtcbkBAIC00MDY1LDcgKzQwNjksMTIgQEAgc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqZXh0NF9sb2FkX3RhaWxfYmgoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGZyb20pXG4gXHRpZiAoIWJ1ZmZlcl9tYXBwZWQoYmgpKSB7XG4gXHRcdEJVRkZFUl9UUkFDRShiaCwgXCJ1bm1hcHBlZFwiKTtcbiBcdFx0ZXh0NF9nZXRfYmxvY2soaW5vZGUsIGlibG9jaywgYmgsIDApO1xuLVx0XHQvKiB1bm1hcHBlZD8gSXQncyBhIGhvbGUgLSBub3RoaW5nIHRvIGRvICovXG4rXHRcdC8qXG4rXHRcdCAqIEl0J3MgYSBob2xlIG9yIGEgY2xlYW4gdW53cml0dGVuIGJsb2NrIC0gbm90aGluZyB0byBkby5cbitcdFx0ICogTm90ZSB0aGF0IGEgbG9va3VwLW9ubHkgZ2V0X2Jsb2NrICh3aXRob3V0XG4rXHRcdCAqIEVYVDRfR0VUX0JMT0NLU19DUkVBVEUpIG5ldmVyIHNldHMgQkhfTWFwcGVkIGZvciBjbGVhblxuK1x0XHQgKiB1bndyaXR0ZW4gZXh0ZW50cy5cbitcdFx0ICovXG4gXHRcdGlmICghYnVmZmVyX21hcHBlZChiaCkpIHtcbiBcdFx0XHRCVUZGRVJfVFJBQ0UoYmgsIFwic3RpbGwgdW5tYXBwZWRcIik7XG4gXHRcdFx0Z290byB1bmxvY2s7XG5AQCAtNDI1MiwxMyArNDI2MSwyNiBAQCBpbnQgZXh0NF9ibG9ja196ZXJvX2VvZihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgZnJvbSwgbG9mZl90IGVuZClcbiBcdHJldHVybiAwO1xuIH1cbiBcbisvKlxuKyAqIFplcm8gb3V0IHRoZSB1bmFsaWduZWQgaGVhZCBhbmQgdGFpbCBvZiB0aGUgW2xzdGFydCwgbHN0YXJ0K2xlbmd0aClcbisgKiByYW5nZS5cbisgKlxuKyAqIE9uIHJldHVybiwgQHBhcnRpYWxfemVyb2VkIHJlY29yZHMgd2hpY2ggZWRnZXMgYWN0dWFsbHkgZ290XG4rICogcGFydGlhbC16ZXJvZWQuICBTZXQgRVhUNF9QQVJUSUFMX1pFUk9fU1RBUlQvRVhUNF9QQVJUSUFMX1pFUk9fRU5EIGlmXG4rICogdGhlIGhlYWQvdGFpbCBibG9jayBnb3QgYWN0dWFsbHkgcGFydGlhbGx5IHplcm9lZCAoaW4gd3JpdHRlbiwgZGlydHlcbisgKiB1bndyaXR0ZW4gb3IgZGVsYWxsb2Mgc3RhdGUpLiAgQ2xlYXJlZCBpZiB0aGUgaGVhZC90YWlsIGJsb2NrIGlzIGFcbisgKiBob2xlIG9yIGEgY2xlYW4gdW53cml0dGVuIGJsb2NrLCBpbiB3aGljaCBjYXNlIHRoZXJlIGlzIG5vdGhpbmcgdGhhdFxuKyAqIG5lZWRzIHplcm9pbmcuICBXaGVuIHRoZSBoZWFkIGFuZCB0YWlsIGxhbmQgaW4gdGhlIHNhbWUgYmxvY2ssIGJvdGhcbisgKiBiaXRzIGFyZSBzZXQgdG9nZXRoZXIgb24gYSBzdWNjZXNzZnVsIHplcm9pbmcuXG4rICovXG4gaW50IGV4dDRfemVyb19wYXJ0aWFsX2Jsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgbHN0YXJ0LCBsb2ZmX3QgbGVuZ3RoLFxuLVx0XHRcdCAgICAgYm9vbCAqZGlkX3plcm8pXG4rXHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgKnBhcnRpYWxfemVyb2VkKVxuIHtcbiBcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuIFx0dW5zaWduZWQgcGFydGlhbF9zdGFydCwgcGFydGlhbF9lbmQ7XG4gXHRleHQ0X2ZzYmxrX3Qgc3RhcnQsIGVuZDtcbiBcdGxvZmZfdCBieXRlX2VuZCA9IChsc3RhcnQgKyBsZW5ndGggLSAxKTtcbitcdGJvb2wgZGlkX3plcm8gPSBmYWxzZTtcbiBcdGludCBlcnIgPSAwO1xuIFxuIFx0cGFydGlhbF9zdGFydCA9IGxzdGFydCBcdTAwMjYgKHNiLVx1MDAzZXNfYmxvY2tzaXplIC0gMSk7XG5AQCAtNDI3MCwyMSArNDI5MiwzMiBAQCBpbnQgZXh0NF96ZXJvX3BhcnRpYWxfYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBsc3RhcnQsIGxvZmZfdCBsZW5ndGgsXG4gXHQvKiBIYW5kbGUgcGFydGlhbCB6ZXJvIHdpdGhpbiB0aGUgc2luZ2xlIGJsb2NrICovXG4gXHRpZiAoc3RhcnQgPT0gZW5kIFx1MDAyNlx1MDAyNlxuIFx0ICAgIChwYXJ0aWFsX3N0YXJ0IHx8IChwYXJ0aWFsX2VuZCAhPSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZSAtIDEpKSkge1xuLVx0XHRlcnIgPSBleHQ0X2Jsb2NrX3plcm9fcmFuZ2UoaW5vZGUsIGxzdGFydCwgbGVuZ3RoLCBkaWRfemVybyxcbitcdFx0ZXJyID0gZXh0NF9ibG9ja196ZXJvX3JhbmdlKGlub2RlLCBsc3RhcnQsIGxlbmd0aCwgXHUwMDI2ZGlkX3plcm8sXG4gXHRcdFx0XHRcdCAgICBOVUxMKTtcbitcdFx0aWYgKGRpZF96ZXJvKVxuK1x0XHRcdCpwYXJ0aWFsX3plcm9lZCB8PSAoRVhUNF9QQVJUSUFMX1pFUk9fU1RBUlQgfFxuK1x0XHRcdFx0XHQgICAgRVhUNF9QQVJUSUFMX1pFUk9fRU5EKTtcbiBcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcdC8qIEhhbmRsZSBwYXJ0aWFsIHplcm8gb3V0IG9uIHRoZSBzdGFydCBvZiB0aGUgcmFuZ2UgKi9cbiBcdGlmIChwYXJ0aWFsX3N0YXJ0KSB7XG4gXHRcdGVyciA9IGV4dDRfYmxvY2tfemVyb19yYW5nZShpbm9kZSwgbHN0YXJ0LCBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZSxcbi1cdFx0XHRcdFx0ICAgIGRpZF96ZXJvLCBOVUxMKTtcbitcdFx0XHRcdFx0ICAgIFx1MDAyNmRpZF96ZXJvLCBOVUxMKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHRpZiAoZGlkX3plcm8pXG4rXHRcdFx0KnBhcnRpYWxfemVyb2VkIHw9IEVYVDRfUEFSVElBTF9aRVJPX1NUQVJUO1xuIFx0fVxuIFx0LyogSGFuZGxlIHBhcnRpYWwgemVybyBvdXQgb24gdGhlIGVuZCBvZiB0aGUgcmFuZ2UgKi9cbi1cdGlmIChwYXJ0aWFsX2VuZCAhPSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZSAtIDEpXG4rXHRpZiAocGFydGlhbF9lbmQgIT0gc2ItXHUwMDNlc19ibG9ja3NpemUgLSAxKSB7XG4rXHRcdGRpZF96ZXJvID0gZmFsc2U7XG4gXHRcdGVyciA9IGV4dDRfYmxvY2tfemVyb19yYW5nZShpbm9kZSwgYnl0ZV9lbmQgLSBwYXJ0aWFsX2VuZCxcbi1cdFx0XHRcdFx0ICAgIHBhcnRpYWxfZW5kICsgMSwgZGlkX3plcm8sIE5VTEwpO1xuK1x0XHRcdFx0XHQgICAgcGFydGlhbF9lbmQgKyAxLCBcdTAwMjZkaWRfemVybywgTlVMTCk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0aWYgKGRpZF96ZXJvKVxuK1x0XHRcdCpwYXJ0aWFsX3plcm9lZCB8PSBFWFQ0X1BBUlRJQUxfWkVST19FTkQ7XG4rXHR9XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC00NDMzLDcgKzQ0NjYsNyBAQCBpbnQgZXh0NF9wdW5jaF9ob2xlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoKVxuIFx0bG9mZl90IGVuZCA9IG9mZnNldCArIGxlbmd0aDtcbiBcdGhhbmRsZV90ICpoYW5kbGU7XG4gXHR1bnNpZ25lZCBpbnQgY3JlZGl0cztcbi1cdGJvb2wgcGFydGlhbF96ZXJvZWQgPSBmYWxzZTtcbitcdHVuc2lnbmVkIGludCBwYXJ0aWFsX3plcm9lZCA9IDA7XG4gXHRpbnQgcmV0O1xuIFxuIFx0dHJhY2VfZXh0NF9wdW5jaF9ob2xlKGlub2RlLCBvZmZzZXQsIGxlbmd0aCwgMCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwOToxMTowNy4wNzMwODk1NjNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTMyNjM1NDQ2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGV4dDQgUGF0Y2ggZm9yIFBhcnRpYWwgWmVyb2luZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgbWFraW5nIHNvbWUgZnVuZGFtZW50YWwgY2hhbmdlcyB0byBob3cgZXh0NCBoYW5kbGVzIHBhcnRpYWwgemVyb2luZyBvZiBibG9ja3MuIFRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gaXMgaW4gYGZzL2V4dDQvZXh0ZW50cy5jYCBhbmQgYGZzL2V4dDQvaW5vZGUuY2AuIEl0IGxvb2tzIGxpa2Ugd2UgYXJlIGRlYWxpbmcgd2l0aCB0aGUgYGZhbGxvY2F0ZWAgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSB3aGVuIGl0J3MgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FU2AgZmxhZy4gQWN0dWFsbHksIGxldCBtZSBkb3VibGUtY2hlY2sgdGhhdC4uLiB3YWl0IGEgc2Vjb25kLCB0aGVyZSBpcyBhIGBGQUxMT0NfRkxfWkVST19SQU5HRWAgZmxhZy4gTWF5YmUgaXQncyBub3QgYEZBTExPQ19GTF9XUklURV9aRVJPRVNgLCB0aGVyZSBpcyBubyBzdGFuZGFyZCBgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FU2AuIE9LLCBMZXQgbWUgZ3JlcCBmb3IgdGhlIGNvZGUsIGp1c3QgdG8gbWFrZSBzdXJlIEkgYW0gdGhpbmtpbmcgYWJvdXQgdGhpcyBjb3JyZWN0bHksIHllcywgYG1vZGUgXHUwMDI2IEZBTExPQ19GTF9XUklURV9aRVJPRVNgLiBPay5cblxuVGhlIHBhdGNoIHNlZW1zIHRvIGludHJvZHVjZSBgRVhUNF9QQVJUSUFMX1pFUk9fU1RBUlRgIGFuZCBgRVhUNF9QQVJUSUFMX1pFUk9fRU5EYCBmbGFncywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0IGFsc28gYXBwZWFycyB0byBiZSByZWZpbmluZyBob3cgYGV4dDRfemVyb19wYXJ0aWFsX2Jsb2Nrc2Agd29ya3MgYnkgcmV0dXJuaW5nIGEgYml0bWFzayBvZiBwYXJ0aWFsIHplcm9lZCBlZGdlcyBpbnN0ZWFkIG9mIGEgYm9vbGVhbiB2YWx1ZS4gVGhpcyBpcyBhIHN1YnRsZSBidXQgaW1wb3J0YW50IHNoaWZ0IGluIHNpZ25hbGluZyBhbmQgY291bGQgaW1wYWN0IGhvdyB3ZSB0cmFjayB0aG9zZSBwYXJ0aWFsIGJsb2Nrcy5cblxuQ3J1Y2lhbGx5LCB0aGUgcGF0Y2ggYWxzbyBtb2RpZmllcyBgZXh0NF9hbGxvY19maWxlX2Jsb2Nrc2AuIEl0IGxvb2tzIGxpa2UgaXQncyBub3cgaGFuZGxpbmcgYGFsbG9jX3plcm9gIGNhbGxzIHJlbGF0ZWQgdG8gdW53cml0dGVuIGV4dGVudHMuIEl0IGFwcGVhcnMgdGhhdCBpdCBtYXkgaW52b2x2ZSBwb3RlbnRpYWxseSBhZGRpbmcgdGhlIGlub2RlIHRvIHRoZSBvcnBoYW4gbGlzdC4gVGhpcyBpcyBzb21ldGhpbmcgdG8ga2VlcCBhbiBleWUgb24gYmVjYXVzZSBpdCBtZWFucyB0aGF0IHRoZXJlIG1heSBiZSBmaWxlIHN5c3RlbSBjb25zaXN0ZW5jeSBpbXBsaWNhdGlvbnMgZm9yIHJlY292ZXJ5IHNjZW5hcmlvcy5cblxuT3ZlcmFsbCwgdGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGV4dDQncyBibG9jayBhbGxvY2F0aW9uIGFuZCB6ZXJvaW5nIGxvZ2ljLCBwb3RlbnRpYWxseSBpbXBhY3RpbmcgcGVyZm9ybWFuY2UgYW5kLCBtb3JlIGltcG9ydGFudGx5LCB0aGUgcmVsaWFiaWxpdHkgb2YgZmlsZSB6ZXJvaW5nLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHRoZSBibG9jayBhbGxvY2F0b3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MjksIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwOToxMTozOC4zOTk0NDYzNTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQwNDc2MjU5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJGQUxMT0NfRkxfXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgODk3IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2ZzY3J5cHQucnN0PTEyMDg9YXN0dXRlIHVzZXJzIG1heSBub3RpY2Ugc29tZSBkaWZmZXJlbmNlcyBpbiBiZWhhdmlvcjpcXG4tLVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZnNjcnlwdC5yc3QtMTIyNy1cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2ZzY3J5cHQucnN0OjEyMjg6LSBUaGUgZmFsbG9jYXRlIG9wZXJhdGlvbnMgRkFMTE9DX0ZMX0NPTExBUFNFX1JBTkdFIGFuZFxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZnNjcnlwdC5yc3Q6MTIyOTogIEZBTExPQ19GTF9JTlNFUlRfUkFOR0UgYXJlIG5vdCBzdXBwb3J0ZWQgb24gZW5jcnlwdGVkIGZpbGVzIGFuZCB3aWxsXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9mc2NyeXB0LnJzdC0xMjMwLSAgZmFpbCB3aXRoIEVPUE5PVFNVUFAuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0PTQ0MT1maWxlc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgaG9sZSBwdW5jaGluZyAoZGVhbGxvY2F0aW5nIHNwYWNlIGluIHRoZSBtaWRkbGUgb2YgYVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3Q6NDQyOmZpbGUpIHlvdSBtdXN0IHJldHVybiAtRU9QTk9UU1VQUCBpZiBGQUxMT0NfRkxfUFVOQ0hfSE9MRSBpcyBzZXQgaW4gbW9kZS5cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0OjQ0MzpDdXJyZW50bHkgeW91IGNhbiBvbmx5IGhhdmUgRkFMTE9DX0ZMX1BVTkNIX0hPTEUgd2l0aCBGQUxMT0NfRkxfS0VFUF9TSVpFIHNldCxcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0LTQ0NC1zbyB0aGUgaV9zaXplIHNob3VsZCBub3QgY2hhbmdlIHdoZW4gaG9sZSBwdW5jaGluZywgZXZlbiB3aGVuIHB1Y2hpbmcgdGhlIGVuZCBvZlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZmF0LnJzdD0yMjc9VGhlIGZhbGxvY2F0ZWQgcmVnaW9uIG9mIGZpbGUgaXMgZGlzY2FyZGVkIGF0IHVtb3VudC9ldmljdCB0aW1lXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZmF0LnJzdDoyMjg6d2hlbiB1c2luZyBmYWxsb2NhdGUgd2l0aCBGQUxMT0NfRkxfS0VFUF9TSVpFLlxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZhdC5yc3QtMjI5LVNvLCBVc2VyIHNob3VsZCBhc3N1bWUgdGhhdCBmYWxsb2NhdGVkIHJlZ2lvbiBjYW4gYmUgZGlzY2FyZGVkIGF0XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3hmcy94ZnMtb25saW5lLWZzY2stZGVzaWduLnJzdD0yMjA0PVRvIGZyZWUgYW4geGZidHJlZSBibG9jaywgdXNlIGBgeGZpbGVfZGlzY2FyZGBgICh3aGljaCBpbnRlcm5hbGx5IHVzZXNcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3hmcy94ZnMtb25saW5lLWZzY2stZGVzaWduLnJzdDoyMjA1OmBgRkFMTE9DX0ZMX1BVTkNIX0hPTEVgYCkgdG8gcmVtb3ZlIHRoZSBtZW1vcnkgcGFnZSBmcm9tIHRoZSB4ZmlsZS5cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3hmcy94ZnMtb25saW5lLWZzY2stZGVzaWduLnJzdC0yMjA2LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy94ZnMveGZzLW9ubGluZS1mc2NrLWRlc2lnbi5yc3Q9NTIwNj1UaGUgc2Vjb25kIHBpZWNlIGl0IG5lZWRzIGlzIGEgbmV3IGZhbGxvY2F0ZSBtb2RlXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy94ZnMveGZzLW9ubGluZS1mc2NrLWRlc2lnbi5yc3Q6NTIwNzooYGBGQUxMT0NfRkxfTUFQX0ZSRUVfU1BBQ0VgYCkgdGhhdCBhbGxvY2F0ZXMgdGhlIGZyZWUgc3BhY2UgaW4gYSByZWdpb24gYW5kXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy94ZnMveGZzLW9ubGluZS1mc2NrLWRlc2lnbi5yc3QtNTIwOC1tYXBzIGl0IHRvIGEgZmlsZS5cXG4tLVxcbkRvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9sYW5kbG9jay5yc3Q9Mzk5PUF0IHRoZSBzYW1lIHRpbWUsIG9uIHNvbWUgZmlsZXN5c3RlbXMsIDptYW5wYWdlOmBmYWxsb2NhdGUoMilgIG9mZmVycyBhIHdheSB0b1xcbkRvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9sYW5kbG9jay5yc3Q6NDAwOnNob3J0ZW4gZmlsZSBjb250ZW50cyB3aXRoIGBgRkFMTE9DX0ZMX0NPTExBUFNFX1JBTkdFYGAgd2hlbiB0aGUgZmlsZSBpcyBvcGVuZWRcXG5Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvbGFuZGxvY2sucnN0LTQwMS1mb3Igd3JpdGluZywgc2lkZXN0ZXBwaW5nIHRoZSBgYExBTkRMT0NLX0FDQ0VTU19GU19UUlVOQ0FURWBgIHJpZ2h0Llxcbi0tXFxuYXJjaC91bS9vcy1MaW51eC9maWxlLmM9NjE2PWludCBvc19mYWxsb2NfcHVuY2goaW50IGZkLCB1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0LCBpbnQgbGVuKVxcbmFyY2gvdW0vb3MtTGludXgvZmlsZS5jLTYxNy17XFxuYXJjaC91bS9vcy1MaW51eC9maWxlLmM6NjE4OlxcdGludCBuID0gZmFsbG9jYXRlKGZkLCBGQUxMT0NfRkxfUFVOQ0hfSE9MRXxGQUxMT0NfRkxfS0VFUF9TSVpFLCBvZmZzZXQsIGxlbik7XFxuYXJjaC91bS9vcy1MaW51eC9maWxlLmMtNjE5LVxcbi0tXFxuYXJjaC91bS9vcy1MaW51eC9maWxlLmM9NjI1PWludCBvc19mYWxsb2NfemVyb2VzKGludCBmZCwgdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldCwgaW50IGxlbilcXG5hcmNoL3VtL29zLUxpbnV4L2ZpbGUuYy02MjYte1xcbmFyY2gvdW0vb3MtTGludXgvZmlsZS5jOjYyNzpcXHRpbnQgbiA9IGZhbGxvY2F0ZShmZCwgRkFMTE9DX0ZMX1pFUk9fUkFOR0V8RkFMTE9DX0ZMX0tFRVBfU0laRSwgb2Zmc2V0LCBsZW4pO1xcbmFyY2gvdW0vb3MtTGludXgvZmlsZS5jLTYyOC1cXG4tLVxcbmJsb2NrL2ZvcHMuYz04MTE9c3RhdGljIHNzaXplX3QgYmxrZGV2X3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuLS1cXG5ibG9jay9mb3BzLmMtODYzLVxcbmJsb2NrL2ZvcHMuYzo4NjQ6I2RlZmluZVxcdEJMS0RFVl9GQUxMT0NfRkxfU1VQUE9SVEVEXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmJsb2NrL2ZvcHMuYzo4NjU6XFx0XFx0KEZBTExPQ19GTF9LRUVQX1NJWkUgfCBGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8XFx0XFx0XFxcXFxcbmJsb2NrL2ZvcHMuYzo4NjY6XFx0XFx0IEZBTExPQ19GTF9aRVJPX1JBTkdFIHwgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FUylcXG5ibG9jay9mb3BzLmMtODY3LVxcbmJsb2NrL2ZvcHMuYz04Njg9c3RhdGljIGxvbmcgYmxrZGV2X2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBzdGFydCxcXG4tLVxcbmJsb2NrL2ZvcHMuYy04NzgtXFx0LyogRmFpbCBpZiB3ZSBkb24ndCByZWNvZ25pemUgdGhlIGZsYWdzLiAqL1xcbmJsb2NrL2ZvcHMuYzo4Nzk6XFx0aWYgKG1vZGUgXFx1MDAyNiB+QkxLREVWX0ZBTExPQ19GTF9TVVBQT1JURUQpXFxuYmxvY2svZm9wcy5jLTg4MC1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5ibG9jay9mb3BzLmMtODg0LVxcdCAqL1xcbmJsb2NrL2ZvcHMuYzo4ODU6XFx0aWYgKChtb2RlIFxcdTAwMjYgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FUykgXFx1MDAyNlxcdTAwMjZcXG5ibG9jay9mb3BzLmMtODg2LVxcdCAgICAhYmRldl93cml0ZV96ZXJvZXNfdW5tYXBfc2VjdG9ycyhiZGV2KSlcXG4tLVxcbmJsb2NrL2ZvcHMuYy04OTMtXFx0aWYgKGVuZCBcXHUwMDNlPSBpc2l6ZSkge1xcbmJsb2NrL2ZvcHMuYzo4OTQ6XFx0XFx0aWYgKG1vZGUgXFx1MDAyNiBGQUxMT0NfRkxfS0VFUF9TSVpFKSB7XFxuYmxvY2svZm9wcy5jLTg5NS1cXHRcXHRcXHRsZW4gPSBpc2l6ZSAtIHN0YXJ0O1xcbi0tXFxuYmxvY2svZm9wcy5jLTkxMC1cXHRzd2l0Y2ggKG1vZGUpIHtcXG5ibG9jay9mb3BzLmM6OTExOlxcdGNhc2UgRkFMTE9DX0ZMX1pFUk9fUkFOR0U6XFxuYmxvY2svZm9wcy5jOjkxMjpcXHRjYXNlIEZBTExPQ19GTF9aRVJPX1JBTkdFIHwgRkFMTE9DX0ZMX0tFRVBfU0laRTpcXG5ibG9jay9mb3BzLmMtOTEzLVxcdFxcdGZsYWdzID0gQkxLREVWX1pFUk9fTk9VTk1BUDtcXG5ibG9jay9mb3BzLmMtOTE0LVxcdFxcdGJyZWFrO1xcbmJsb2NrL2ZvcHMuYzo5MTU6XFx0Y2FzZSBGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8IEZBTExPQ19GTF9LRUVQX1NJWkU6XFxuYmxvY2svZm9wcy5jLTkxNi1cXHRcXHRmbGFncyA9IEJMS0RFVl9aRVJPX05PRkFMTEJBQ0s7XFxuYmxvY2svZm9wcy5jLTkxNy1cXHRcXHRicmVhaztcXG5ibG9jay9mb3BzLmM6OTE4OlxcdGNhc2UgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FUzpcXG5ibG9jay9mb3BzLmMtOTE5LVxcdFxcdGZsYWdzID0gMDtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTIyND1zdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBpbnQgbW9kZSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIyNy1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMjg6XFx0aWYgKG1vZGUgXFx1MDAyNiBGQUxMT0NfRkxfWkVST19SQU5HRSlcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjktXFx0XFx0bGltLm1heF93cml0ZV96ZXJvZXNfc2VjdG9ycyA9IDA7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjMwLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIzMTpcXHRpZiAobW9kZSBcXHUwMDI2IEZBTExPQ19GTF9QVU5DSF9IT0xFKSB7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjMyLVxcdFxcdGxpbS5tYXhfaHdfZGlzY2FyZF9zZWN0b3JzID0gMDtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTI0Nj1zdGF0aWMgaW50IGxvX2ZhbGxvY2F0ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIGxvZmZfdCBwb3MsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yNTUtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MjU2OlxcdG1vZGUgfD0gRkFMTE9DX0ZMX0tFRVBfU0laRTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yNTctXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz00MTM9c3RhdGljIGludCBkb19yZXFfZmlsZWJhY2tlZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00MjctXFx0XFx0XFx0KHJxLVxcdTAwM2VjbWRfZmxhZ3MgXFx1MDAyNiBSRVFfTk9VTk1BUCkgP1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjQyODpcXHRcXHRcXHRcXHRGQUxMT0NfRkxfWkVST19SQU5HRSA6XFxuZHJpdmVycy9ibG9jay9sb29wLmM6NDI5OlxcdFxcdFxcdFxcdEZBTExPQ19GTF9QVU5DSF9IT0xFKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00MzAtXFx0Y2FzZSBSRVFfT1BfRElTQ0FSRDpcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo0MzE6XFx0XFx0cmV0dXJuIGxvX2ZhbGxvY2F0ZShsbywgcnEsIHBvcywgRkFMTE9DX0ZMX1BVTkNIX0hPTEUpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTQzMi1cXHRjYXNlIFJFUV9PUF9XUklURTpcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvaW8tY21kLWZpbGUuYz0yNzI9c3RhdGljIHZvaWQgbnZtZXRfZmlsZV9leGVjdXRlX2Rpc2NhcmQoc3RydWN0IG52bWV0X3JlcSAqcmVxKVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvaW8tY21kLWZpbGUuYy0yNzMte1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvaW8tY21kLWZpbGUuYzoyNzQ6XFx0aW50IG1vZGUgPSBGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8IEZBTExPQ19GTF9LRUVQX1NJWkU7XFxuZHJpdmVycy9udm1lL3RhcmdldC9pby1jbWQtZmlsZS5jLTI3NS1cXHRzdHJ1Y3QgbnZtZV9kc21fcmFuZ2UgcmFuZ2U7XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2lvLWNtZC1maWxlLmM9MzMyPXN0YXRpYyB2b2lkIG52bWV0X2ZpbGVfd3JpdGVfemVyb2VzX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9pby1jbWQtZmlsZS5jLTMzNS1cXHRzdHJ1Y3QgbnZtZV93cml0ZV96ZXJvZXNfY21kICp3cml0ZV96ZXJvZXMgPSBcXHUwMDI2cmVxLVxcdTAwM2VjbWQtXFx1MDAzZXdyaXRlX3plcm9lcztcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2lvLWNtZC1maWxlLmM6MzM2OlxcdGludCBtb2RlID0gRkFMTE9DX0ZMX1pFUk9fUkFOR0UgfCBGQUxMT0NfRkxfS0VFUF9TSVpFO1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvaW8tY21kLWZpbGUuYy0zMzctXFx0bG9mZl90IG9mZnNldDtcXG4tLVxcbmRyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2ZpbGUuYz01MzM9ZmRfZXhlY3V0ZV91bm1hcChzdHJ1Y3Qgc2VfY21kICpjbWQsIHNlY3Rvcl90IGxiYSwgc2VjdG9yX3Qgbm9sYilcXG4tLVxcbmRyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2ZpbGUuYy01NjctXFx0XFx0dW5zaWduZWQgaW50IGxlbiA9IG5vbGIgKiBzZV9kZXYtXFx1MDAzZWRldl9hdHRyaWIuYmxvY2tfc2l6ZTtcXG5kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9maWxlLmM6NTY4OlxcdFxcdGludCBtb2RlID0gRkFMTE9DX0ZMX1BVTkNIX0hPTEUgfCBGQUxMT0NfRkxfS0VFUF9TSVpFO1xcbmRyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2ZpbGUuYy01NjktXFxuLS1cXG5mcy9idHJmcy9maWxlLmM9Mjg1OT1zdGF0aWMgaW50IGJ0cmZzX2ZhbGxvY2F0ZV91cGRhdGVfaXNpemUoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2J0cmZzL2ZpbGUuYy0yODY5LVxcbmZzL2J0cmZzL2ZpbGUuYzoyODcwOlxcdGlmIChtb2RlIFxcdTAwMjYgRkFMTE9DX0ZMX0tFRVBfU0laRSB8fCBlbmQgXFx1MDAzYz0gaV9zaXplX3JlYWQoaW5vZGUpKVxcbmZzL2J0cmZzL2ZpbGUuYy0yODcxLVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZnMvYnRyZnMvZmlsZS5jPTMxMDA9c3RhdGljIGxvbmcgYnRyZnNfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSxcXG4tLVxcbmZzL2J0cmZzL2ZpbGUuYy0zMTM0LVxcdC8qIE1ha2Ugc3VyZSB3ZSBhcmVuJ3QgYmVpbmcgZ2l2ZSBzb21lIGNyYXAgbW9kZSAqL1xcbmZzL2J0cmZzL2ZpbGUuYzozMTM1OlxcdGlmIChtb2RlIFxcdTAwMjYgfihGQUxMT0NfRkxfS0VFUF9TSVpFIHwgRkFMTE9DX0ZMX1BVTkNIX0hPTEUgfFxcbmZzL2J0cmZzL2ZpbGUuYzozMTM2OlxcdFxcdCAgICAgRkFMTE9DX0ZMX1pFUk9fUkFOR0UpKVxcbmZzL2J0cmZzL2ZpbGUuYy0zMTM3LVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5mcy9idHJmcy9maWxlLmMtMzEzOC1cXG5mcy9idHJmcy9maWxlLmM6MzEzOTpcXHRpZiAobW9kZSBcXHUwMDI2IEZBTExPQ19GTF9QVU5DSF9IT0xFKVxcbmZzL2J0cmZzL2ZpbGUuYy0zMTQwLVxcdFxcdHJldHVybiBidHJmc19wdW5jaF9ob2xlKGZpbGUsIG9mZnNldCwgbGVuKTtcXG4tLVxcbmZzL2J0cmZzL2ZpbGUuYy0zMTQzLVxcbmZzL2J0cmZzL2ZpbGUuYzozMTQ0OlxcdGlmICghKG1vZGUgXFx1MDAyNiBGQUxMT0NfRkxfS0VFUF9TSVpFKSBcXHUwMDI2XFx1MDAyNiBvZmZzZXQgKyBsZW4gXFx1MDAzZSBpbm9kZS1cXHUwMDNlaV9zaXplKSB7XFxuZnMvYnRyZnMvZmlsZS5jLTMxNDUtXFx0XFx0cmV0ID0gaW5vZGVfbmV3c2l6ZV9vayhpbm9kZSwgb2Zmc2V0ICsgbGVuKTtcXG4tLVxcbmZzL2J0cmZzL2ZpbGUuYy0zMTkwLVxcbmZzL2J0cmZzL2ZpbGUuYzozMTkxOlxcdGlmIChtb2RlIFxcdTAwMjYgRkFMTE9DX0ZMX1pFUk9fUkFOR0UpIHtcXG5mcy9idHJmcy9maWxlLmMtMzE5Mi1cXHRcXHRyZXQgPSBidHJmc196ZXJvX3JhbmdlKGlub2RlLCBvZmZzZXQsIGxlbiwgbW9kZSk7XFxuLS1cXG5mcy9idHJmcy9pbm9kZS5jPTkyMTE9c3RhdGljIGludCBfX2J0cmZzX3ByZWFsbG9jX2ZpbGVfcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1vZGUsXFxuLS1cXG5mcy9idHJmcy9pbm9kZS5jLTkyOTgtXFx0XFx0QlRSRlNfSShpbm9kZSktXFx1MDAzZWZsYWdzIHw9IEJUUkZTX0lOT0RFX1BSRUFMTE9DO1xcbmZzL2J0cmZzL2lub2RlLmM6OTI5OTpcXHRcXHRpZiAoIShtb2RlIFxcdTAwMjYgRkFMTE9DX0ZMX0tFRVBfU0laRSkgXFx1MDAyNlxcdTAwMjZcXG5mcy9idHJmcy9pbm9kZS5jLTkzMDAtXFx0XFx0ICAgIChhY3R1YWxfbGVuIFxcdTAwM2UgaW5vZGUtXFx1MDAzZWlfc2l6ZSkgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmZzL2J0cmZzL3NlbmQuYz01NDE2PXN0YXRpYyBpbnQgc2VuZF9ob2xlKHN0cnVjdCBzZW5kX2N0eCAqc2N0eCwgdTY0IGVuZClcXG4tLVxcbmZzL2J0cmZzL3NlbmQuYy01NDI3LVxcdGlmIChwcm90b19jbWRfb2soc2N0eCwgQlRSRlNfU0VORF9DX0ZBTExPQ0FURSkpXFxuZnMvYnRyZnMvc2VuZC5jOjU0Mjg6XFx0XFx0cmV0dXJuIHNlbmRfZmFsbG9jYXRlKHNjdHgsIEZBTExPQ19GTF9QVU5DSF9IT0xFIHwgRkFMTE9DX0ZMX0tFRVBfU0laRSxcXG5mcy9idHJmcy9zZW5kLmMtNTQyOS1cXHRcXHRcXHRcXHQgICAgICBvZmZzZXQsIGVuZCAtIG9mZnNldCk7XFxuLS1cXG5mcy9jYWNoZWZpbGVzL2ludGVyZmFjZS5jPTIzMz1zdGF0aWMgYm9vbCBjYWNoZWZpbGVzX3Nob3J0ZW5fb2JqZWN0KHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0LFxcbi0tXFxuZnMvY2FjaGVmaWxlcy9pbnRlcmZhY2UuYy0yNjEtXFx0XFx0aWYgKHJldCA9PSAwKVxcbmZzL2NhY2hlZmlsZXMvaW50ZXJmYWNlLmM6MjYyOlxcdFxcdFxcdHJldCA9IHZmc19mYWxsb2NhdGUoZmlsZSwgRkFMTE9DX0ZMX1pFUk9fUkFOR0UsXFxuZnMvY2FjaGVmaWxlcy9pbnRlcmZhY2UuYy0yNjMtXFx0XFx0XFx0XFx0XFx0ICAgIG5ld19zaXplLCBkaW9fc2l6ZSAtIG5ld19zaXplKTtcXG4tLVxcbmZzL2NhY2hlZmlsZXMvaW8uYz01MTk9aW50IF9fY2FjaGVmaWxlc19wcmVwYXJlX3dyaXRlKHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0LFxcbi0tXFxuZnMvY2FjaGVmaWxlcy9pby5jLTU4NC1cXHRpZiAocmV0ID09IDApXFxuZnMvY2FjaGVmaWxlcy9pby5jOjU4NTpcXHRcXHRyZXQgPSB2ZnNfZmFsbG9jYXRlKGZpbGUsIEZBTExPQ19GTF9QVU5DSF9IT0xFIHwgRkFMTE9DX0ZMX0tFRVBfU0laRSxcXG5mcy9jYWNoZWZpbGVzL2lvLmMtNTg2LVxcdFxcdFxcdFxcdCAgICBzdGFydCwgKl9sZW4pO1xcbi0tXFxuZnMvY2VwaC9maWxlLmM9MjcyOD1zdGF0aWMgbG9uZyBjZXBoX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsXFxuLS1cXG5mcy9jZXBoL2ZpbGUuYy0yNzQ0LVxcbmZzL2NlcGgvZmlsZS5jOjI3NDU6XFx0aWYgKG1vZGUgIT0gKEZBTExPQ19GTF9LRUVQX1NJWkUgfCBGQUxMT0NfRkxfUFVOQ0hfSE9MRSkpXFxuZnMvY2VwaC9maWxlLmMtMjc0Ni1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5mcy9leGZhdC9maWxlLmM9MjE9c3RhdGljIGludCBleGZhdF9jb250X2V4cGFuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSlcXG4tLVxcbmZzL2V4ZmF0L2ZpbGUuYy05OC0gKiByZXF1ZXN0cyBsZW4gYnl0ZXMgYXQgb2Zmc2V0LiBJbiBjb250cmFyeSB0byBmYXQsIHdlIG9ubHkgc3VwcG9ydFxcbmZzL2V4ZmF0L2ZpbGUuYzo5OTogKiBGQUxMT0NfRkxfQUxMT0NBVEVfUkFOR0UgYmVjYXVzZSBieSBsZWF2aW5nIHRoZSB2YWxpZCBkYXRhIGxlbmd0aChWREwpXFxuZnMvZXhmYXQvZmlsZS5jLTEwMC0gKiBmaWVsZCwgaXQgaXMgdW5uZWNlc3NhcnkgdG8gemVybyBvdXQgdGhlIG5ld2x5IGFsbG9jYXRlZCBjbHVzdGVycy5cXG4tLVxcbmZzL2V4ZmF0L2ZpbGUuYz0xMDI9c3RhdGljIGxvbmcgZXhmYXRfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSxcXG4tLVxcbmZzL2V4ZmF0L2ZpbGUuYy0xMDktXFx0LyogTm8gc3VwcG9ydCBmb3Igb3RoZXIgbW9kZXMgKi9cXG5mcy9leGZhdC9maWxlLmM6MTEwOlxcdGlmIChtb2RlICE9IEZBTExPQ19GTF9BTExPQ0FURV9SQU5HRSlcXG5mcy9leGZhdC9maWxlLmMtMTExLVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTM1NTc9ZXh0NF9leHRfY29udmVydF90b19pbml0aWFsaXplZChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtMzU5OC1cXHQgKiBtZW1tb3ZlKCkgY2FsbHMuIFRyYW5zZmVycmluZyB0byB0aGUgbGVmdCBpcyB0aGUgY29tbW9uIGNhc2UgaW5cXG5mcy9leHQ0L2V4dGVudHMuYzozNTk5OlxcdCAqIHN0ZWFkeSBzdGF0ZSBmb3Igd29ya2xvYWRzIGRvaW5nIGZhbGxvY2F0ZShGQUxMT0NfRkxfS0VFUF9TSVpFKVxcbmZzL2V4dDQvZXh0ZW50cy5jLTM2MDAtXFx0ICogZm9sbG93ZWQgYnkgYXBwZW5kIHdyaXRlcy5cXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTQ3MzQ9c3RhdGljIGxvbmcgZXh0NF96ZXJvX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNDc1MS1cXG5mcy9leHQ0L2V4dGVudHMuYzo0NzUyOlxcdGlmICghKG1vZGUgXFx1MDAyNiBGQUxMT0NfRkxfS0VFUF9TSVpFKSBcXHUwMDI2XFx1MDAyNlxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ3NTMtXFx0ICAgIChlbmQgXFx1MDAzZSBpbm9kZS1cXHUwMDNlaV9zaXplIHx8IGVuZCBcXHUwMDNlIEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZGlza3NpemUpKSB7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy00NzkyLVxcdCAqL1xcbmZzL2V4dDQvZXh0ZW50cy5jOjQ3OTM6XFx0aWYgKG1vZGUgXFx1MDAyNiBGQUxMT0NfRkxfV1JJVEVfWkVST0VTKSB7XFxuZnMvZXh0NC9leHRlbnRzLmMtNDc5NC1cXHRcXHRpZiAoIUlTX0FMSUdORUQob2Zmc2V0LCBibG9ja3NpemUpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy00ODAyLVxcdGlmIChhbGlnbl9lbmQgXFx1MDAzZSBhbGlnbl9zdGFydCkge1xcbmZzL2V4dDQvZXh0ZW50cy5jOjQ4MDM6XFx0XFx0aWYgKG1vZGUgXFx1MDAyNiBGQUxMT0NfRkxfV1JJVEVfWkVST0VTKVxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ4MDQtXFx0XFx0XFx0ZmxhZ3MgPSBFWFQ0X0dFVF9CTE9DS1NfQ1JFQVRFX1pFUk8gfCBFWFQ0X0VYX05PQ0FDSEU7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy00ODE4LVxcdC8qXFxuZnMvZXh0NC9leHRlbnRzLmM6NDgxOTpcXHQgKiBJbiBGQUxMT0NfRkxfV1JJVEVfWkVST0VTIG1vZGUsIGVkZ2VzIHRoYXQgaGF2ZSBiZWVuIHBhcnRpYWxseVxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ4MjAtXFx0ICogemVyb2VkIG11c3QgYmUgd3JpdHRlbiBiYWNrIHRvIGVuc3VyZSB0aGUgZW50aXJlIHplcm9lZCByYW5nZVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNDgyNC1cXHRpZiAocGFydGlhbF96ZXJvZWQgXFx1MDAyNlxcdTAwMjZcXG5mcy9leHQ0L2V4dGVudHMuYzo0ODI1OlxcdCAgICAoKG1vZGUgXFx1MDAyNiBGQUxMT0NfRkxfV1JJVEVfWkVST0VTKSB8fFxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ4MjYtXFx0ICAgICAoZmlsZS1cXHUwMDNlZl9mbGFncyBcXHUwMDI2IE9fU1lOQykgfHwgSVNfU1lOQyhpbm9kZSkpKSB7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz00ODU1PXN0YXRpYyBsb25nIGV4dDRfZG9fZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNDg3MS1cXG5mcy9leHQ0L2V4dGVudHMuYzo0ODcyOlxcdGlmICghKG1vZGUgXFx1MDAyNiBGQUxMT0NfRkxfS0VFUF9TSVpFKSBcXHUwMDI2XFx1MDAyNlxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ4NzMtXFx0ICAgIChlbmQgXFx1MDAzZSBpbm9kZS1cXHUwMDNlaV9zaXplIHx8IGVuZCBcXHUwMDNlIEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZGlza3NpemUpKSB7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz00OTAzPWxvbmcgZXh0NF9mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNDkxNS1cXHRpZiAoSVNfRU5DUllQVEVEKGlub2RlKSBcXHUwMDI2XFx1MDAyNlxcbmZzL2V4dDQvZXh0ZW50cy5jOjQ5MTY6XFx0ICAgIChtb2RlIFxcdTAwMjYgKEZBTExPQ19GTF9DT0xMQVBTRV9SQU5HRSB8IEZBTExPQ19GTF9JTlNFUlRfUkFOR0UpKSlcXG5mcy9leHQ0L2V4dGVudHMuYy00OTE3LVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ5MjEtXFx0ICovXFxuZnMvZXh0NC9leHRlbnRzLmM6NDkyMjpcXHRpZiAoKG1vZGUgXFx1MDAyNiBGQUxMT0NfRkxfV1JJVEVfWkVST0VTKSBcXHUwMDI2XFx1MDAyNlxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ5MjMtXFx0ICAgICFiZGV2X3dyaXRlX3plcm9lc191bm1hcF9zZWN0b3JzKGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2JkZXYpKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNDkyNi1cXHQvKiBSZXR1cm4gZXJyb3IgaWYgbW9kZSBpcyBub3Qgc3VwcG9ydGVkICovXFxuZnMvZXh0NC9leHRlbnRzLmM6NDkyNzpcXHRpZiAobW9kZSBcXHUwMDI2IH4oRkFMTE9DX0ZMX0tFRVBfU0laRSB8IEZBTExPQ19GTF9QVU5DSF9IT0xFIHxcXG5mcy9leHQ0L2V4dGVudHMuYzo0OTI4OlxcdFxcdCAgICAgRkFMTE9DX0ZMX1pFUk9fUkFOR0UgfCBGQUxMT0NfRkxfQ09MTEFQU0VfUkFOR0UgfFxcbmZzL2V4dDQvZXh0ZW50cy5jOjQ5Mjk6XFx0XFx0ICAgICBGQUxMT0NfRkxfSU5TRVJUX1JBTkdFIHwgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FUykpXFxuZnMvZXh0NC9leHRlbnRzLmMtNDkzMC1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy00OTQzLVxcbmZzL2V4dDQvZXh0ZW50cy5jOjQ5NDQ6XFx0aWYgKChtb2RlIFxcdTAwMjYgRkFMTE9DX0ZMX01PREVfTUFTSykgPT0gRkFMTE9DX0ZMX0FMTE9DQVRFX1JBTkdFKSB7XFxuZnMvZXh0NC9leHRlbnRzLmMtNDk0NS1cXHRcXHRyZXQgPSBleHQ0X2RvX2ZhbGxvY2F0ZShmaWxlLCBvZmZzZXQsIGxlbiwgbW9kZSk7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy00OTU5LVxcbmZzL2V4dDQvZXh0ZW50cy5jOjQ5NjA6XFx0c3dpdGNoIChtb2RlIFxcdTAwMjYgRkFMTE9DX0ZMX01PREVfTUFTSykge1xcbmZzL2V4dDQvZXh0ZW50cy5jOjQ5NjE6XFx0Y2FzZSBGQUxMT0NfRkxfUFVOQ0hfSE9MRTpcXG5mcy9leHQ0L2V4dGVudHMuYy00OTYyLVxcdFxcdHJldCA9IGV4dDRfcHVuY2hfaG9sZShmaWxlLCBvZmZzZXQsIGxlbik7XFxuZnMvZXh0NC9leHRlbnRzLmMtNDk2My1cXHRcXHRicmVhaztcXG5mcy9leHQ0L2V4dGVudHMuYzo0OTY0OlxcdGNhc2UgRkFMTE9DX0ZMX0NPTExBUFNFX1JBTkdFOlxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ5NjUtXFx0XFx0cmV0ID0gZXh0NF9jb2xsYXBzZV9yYW5nZShmaWxlLCBvZmZzZXQsIGxlbik7XFxuZnMvZXh0NC9leHRlbnRzLmMtNDk2Ni1cXHRcXHRicmVhaztcXG5mcy9leHQ0L2V4dGVudHMuYzo0OTY3OlxcdGNhc2UgRkFMTE9DX0ZMX0lOU0VSVF9SQU5HRTpcXG5mcy9leHQ0L2V4dGVudHMuYy00OTY4LVxcdFxcdHJldCA9IGV4dDRfaW5zZXJ0X3JhbmdlKGZpbGUsIG9mZnNldCwgbGVuKTtcXG5mcy9leHQ0L2V4dGVudHMuYy00OTY5LVxcdFxcdGJyZWFrO1xcbmZzL2V4dDQvZXh0ZW50cy5jOjQ5NzA6XFx0Y2FzZSBGQUxMT0NfRkxfWkVST19SQU5HRTpcXG5mcy9leHQ0L2V4dGVudHMuYzo0OTcxOlxcdGNhc2UgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FUzpcXG5mcy9leHQ0L2V4dGVudHMuYy00OTcyLVxcdFxcdHJldCA9IGV4dDRfemVyb19yYW5nZShmaWxlLCBvZmZzZXQsIGxlbiwgbW9kZSk7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz01NTc0PXN0YXRpYyBpbnQgZXh0NF9jb2xsYXBzZV9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbilcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTU2NjgtICogZXh0NF9pbnNlcnRfcmFuZ2U6XFxuZnMvZXh0NC9leHRlbnRzLmM6NTY2OTogKiBUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgdGhlIEZBTExPQ19GTF9JTlNFUlRfUkFOR0UgZmxhZyBvZiBmYWxsb2NhdGUuXFxuZnMvZXh0NC9leHRlbnRzLmMtNTY3MC0gKiBUaGUgZGF0YSBibG9ja3Mgc3RhcnRpbmcgZnJvbSBAb2Zmc2V0IHRvIHRoZSBFT0YgYXJlIHNoaWZ0ZWQgYnkgQGxlblxcbi0tXFxuZnMvZjJmcy9maWxlLmM9MTY4Mj1zdGF0aWMgaW50IGYyZnNfemVyb19yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuLFxcbi0tXFxuZnMvZjJmcy9maWxlLmMtMTc4NC1cXHRpZiAobmV3X3NpemUgXFx1MDAzZSBpX3NpemVfcmVhZChpbm9kZSkpIHtcXG5mcy9mMmZzL2ZpbGUuYzoxNzg1OlxcdFxcdGlmIChtb2RlIFxcdTAwMjYgRkFMTE9DX0ZMX0tFRVBfU0laRSlcXG5mcy9mMmZzL2ZpbGUuYy0xNzg2LVxcdFxcdFxcdGZpbGVfc2V0X2tlZXBfaXNpemUoaW5vZGUpO1xcbi0tXFxuZnMvZjJmcy9maWxlLmM9MTg3Mz1zdGF0aWMgaW50IGYyZnNfZXhwYW5kX2lub2RlX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCxcXG4tLVxcbmZzL2YyZnMvZmlsZS5jLTE5ODUtXFx0aWYgKG5ld19zaXplIFxcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKSB7XFxuZnMvZjJmcy9maWxlLmM6MTk4NjpcXHRcXHRpZiAobW9kZSBcXHUwMDI2IEZBTExPQ19GTF9LRUVQX1NJWkUpXFxuZnMvZjJmcy9maWxlLmMtMTk4Ny1cXHRcXHRcXHRmaWxlX3NldF9rZWVwX2lzaXplKGlub2RlKTtcXG4tLVxcbmZzL2YyZnMvZmlsZS5jPTE5OTU9c3RhdGljIGxvbmcgZjJmc19mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLFxcbi0tXFxuZnMvZjJmcy9maWxlLmMtMjAxMi1cXHRpZiAoSVNfRU5DUllQVEVEKGlub2RlKSBcXHUwMDI2XFx1MDAyNlxcbmZzL2YyZnMvZmlsZS5jOjIwMTM6XFx0XFx0KG1vZGUgXFx1MDAyNiAoRkFMTE9DX0ZMX0NPTExBUFNFX1JBTkdFIHwgRkFMTE9DX0ZMX0lOU0VSVF9SQU5HRSkpKVxcbmZzL2YyZnMvZmlsZS5jLTIwMTQtXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbmZzL2YyZnMvZmlsZS5jLTIwMTUtXFxuZnMvZjJmcy9maWxlLmM6MjAxNjpcXHRpZiAobW9kZSBcXHUwMDI2IH4oRkFMTE9DX0ZMX0tFRVBfU0laRSB8IEZBTExPQ19GTF9QVU5DSF9IT0xFIHxcXG5mcy9mMmZzL2ZpbGUuYzoyMDE3OlxcdFxcdFxcdEZBTExPQ19GTF9DT0xMQVBTRV9SQU5HRSB8IEZBTExPQ19GTF9aRVJPX1JBTkdFIHxcXG5mcy9mMmZzL2ZpbGUuYzoyMDE4OlxcdFxcdFxcdEZBTExPQ19GTF9JTlNFUlRfUkFOR0UpKVxcbmZzL2YyZnMvZmlsZS5jLTIwMTktXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxuZnMvZjJmcy9maWxlLmMtMjAyNy1cXHRpZiAoKGYyZnNfY29tcHJlc3NlZF9maWxlKGlub2RlKSB8fCBmMmZzX2lzX3Bpbm5lZF9maWxlKGlub2RlKSkgXFx1MDAyNlxcdTAwMjZcXG5mcy9mMmZzL2ZpbGUuYzoyMDI4OlxcdFxcdChtb2RlIFxcdTAwMjYgKEZBTExPQ19GTF9QVU5DSF9IT0xFIHwgRkFMTE9DX0ZMX0NPTExBUFNFX1JBTkdFIHxcXG5mcy9mMmZzL2ZpbGUuYzoyMDI5OlxcdFxcdFxcdEZBTExPQ19GTF9aRVJPX1JBTkdFIHwgRkFMTE9DX0ZMX0lOU0VSVF9SQU5HRSkpKSB7XFxuZnMvZjJmcy9maWxlLmMtMjAzMC1cXHRcXHRyZXQgPSAtRU9QTk9UU1VQUDtcXG4tLVxcbmZzL2YyZnMvZmlsZS5jLTIwNDMtXFxuZnMvZjJmcy9maWxlLmM6MjA0NDpcXHRpZiAobW9kZSBcXHUwMDI2IEZBTExPQ19GTF9QVU5DSF9IT0xFKSB7XFxuZnMvZjJmcy9maWxlLmMtMjA0NS1cXHRcXHRpZiAob2Zmc2V0IFxcdTAwM2U9IGlub2RlLVxcdTAwM2VpX3NpemUpXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYy0yMDQ4LVxcdFxcdHJldCA9IGYyZnNfcHVuY2hfaG9sZShpbm9kZSwgb2Zmc2V0LCBsZW4pO1xcbmZzL2YyZnMvZmlsZS5jOjIwNDk6XFx0fSBlbHNlIGlmIChtb2RlIFxcdTAwMjYgRkFMTE9DX0ZMX0NPTExBUFNFX1JBTkdFKSB7XFxuZnMvZjJmcy9maWxlLmMtMjA1MC1cXHRcXHRyZXQgPSBmMmZzX2NvbGxhcHNlX3JhbmdlKGlub2RlLCBvZmZzZXQsIGxlbik7XFxuZnMvZjJmcy9maWxlLmM6MjA1MTpcXHR9IGVsc2UgaWYgKG1vZGUgXFx1MDAyNiBGQUxMT0NfRkxfWkVST19SQU5HRSkge1xcbmZzL2YyZnMvZmlsZS5jLTIwNTItXFx0XFx0cmV0ID0gZjJmc196ZXJvX3JhbmdlKGlub2RlLCBvZmZzZXQsIGxlbiwgbW9kZSk7XFxuZnMvZjJmcy9maWxlLmM6MjA1MzpcXHR9IGVsc2UgaWYgKG1vZGUgXFx1MDAyNiBGQUxMT0NfRkxfSU5TRVJUX1JBTkdFKSB7XFxuZnMvZjJmcy9maWxlLmMtMjA1NC1cXHRcXHRyZXQgPSBmMmZzX2luc2VydF9yYW5nZShpbm9kZSwgb2Zmc2V0LCBsZW4pO1xcbi0tXFxuZnMvZmF0L2ZpbGUuYz0yMjA9c3RhdGljIGludCBmYXRfY29udF9leHBhbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHNpemUpXFxuLS1cXG5mcy9mYXQvZmlsZS5jLTI1OC0gKiBvcGVyYXRpb24sIHdoaWNoIGdldHMgY2FsbGVkIGZyb20gc3lzX2ZhbGxvY2F0ZSBzeXN0ZW0gY2FsbC4gVXNlclxcbmZzL2ZhdC9maWxlLmM6MjU5OiAqIHNwYWNlIHJlcXVlc3RzIGxlbiBieXRlcyBhdCBvZmZzZXQuIElmIEZBTExPQ19GTF9LRUVQX1NJWkUgaXMgc2V0XFxuZnMvZmF0L2ZpbGUuYy0yNjAtICogd2UganVzdCBhbGxvY2F0ZSBjbHVzdGVycyB3aXRob3V0IHplcm9pbmcgdGhlbSBvdXQuIE90aGVyd2lzZSB3ZVxcbi0tXFxuZnMvZmF0L2ZpbGUuYz0yNjM9c3RhdGljIGxvbmcgZmF0X2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsXFxuLS1cXG5mcy9mYXQvZmlsZS5jLTI3NC1cXHQvKiBObyBzdXBwb3J0IGZvciBob2xlIHB1bmNoIG9yIG90aGVyIGZhbGxvY2F0ZSBmbGFncy4gKi9cXG5mcy9mYXQvZmlsZS5jOjI3NTpcXHRpZiAobW9kZSBcXHUwMDI2IH5GQUxMT0NfRkxfS0VFUF9TSVpFKVxcbmZzL2ZhdC9maWxlLmMtMjc2LVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbmZzL2ZhdC9maWxlLmMtMjgyLVxcdGlub2RlX2xvY2soaW5vZGUpO1xcbmZzL2ZhdC9maWxlLmM6MjgzOlxcdGlmIChtb2RlIFxcdTAwMjYgRkFMTE9DX0ZMX0tFRVBfU0laRSkge1xcbmZzL2ZhdC9maWxlLmMtMjg0LVxcdFxcdG9uZGlza3NpemUgPSBpbm9kZS1cXHUwMDNlaV9ibG9ja3MgXFx1MDAzY1xcdTAwM2MgOTtcXG4tLVxcbmZzL2Z1c2UvZmlsZS5jPTI5MzA9c3RhdGljIGxvbmcgZnVzZV9maWxlX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXFxuLS1cXG5mcy9mdXNlL2ZpbGUuYy0yOTQ1LVxcdGJvb2wgYmxvY2tfZmF1bHRzID0gRlVTRV9JU19EQVgoaW5vZGUpIFxcdTAwMjZcXHUwMDI2XFxuZnMvZnVzZS9maWxlLmM6Mjk0NjpcXHRcXHQoIShtb2RlIFxcdTAwMjYgRkFMTE9DX0ZMX0tFRVBfU0laRSkgfHxcXG5mcy9mdXNlL2ZpbGUuYzoyOTQ3OlxcdFxcdCAobW9kZSBcXHUwMDI2IChGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8IEZBTExPQ19GTF9aRVJPX1JBTkdFKSkpO1xcbmZzL2Z1c2UvZmlsZS5jLTI5NDgtXFxuZnMvZnVzZS9maWxlLmM6Mjk0OTpcXHRpZiAobW9kZSBcXHUwMDI2IH4oRkFMTE9DX0ZMX0tFRVBfU0laRSB8IEZBTExPQ19GTF9QVU5DSF9IT0xFIHxcXG5mcy9mdXNlL2ZpbGUuYzoyOTUwOlxcdFxcdCAgICAgRkFMTE9DX0ZMX1pFUk9fUkFOR0UpKVxcbmZzL2Z1c2UvZmlsZS5jLTI5NTEtXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxuZnMvZnVzZS9maWxlLmMtMjk2My1cXG5mcy9mdXNlL2ZpbGUuYzoyOTY0OlxcdGlmIChtb2RlIFxcdTAwMjYgKEZBTExPQ19GTF9QVU5DSF9IT0xFIHwgRkFMTE9DX0ZMX1pFUk9fUkFOR0UpKSB7XFxuZnMvZnVzZS9maWxlLmMtMjk2NS1cXHRcXHRsb2ZmX3QgZW5kYnl0ZSA9IG9mZnNldCArIGxlbmd0aCAtIDE7XFxuLS1cXG5mcy9mdXNlL2ZpbGUuYy0yOTcxLVxcbmZzL2Z1c2UvZmlsZS5jOjI5NzI6XFx0aWYgKCEobW9kZSBcXHUwMDI2IEZBTExPQ19GTF9LRUVQX1NJWkUpIFxcdTAwMjZcXHUwMDI2XFxuZnMvZnVzZS9maWxlLmMtMjk3My1cXHQgICAgb2Zmc2V0ICsgbGVuZ3RoIFxcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKSB7XFxuLS1cXG5mcy9mdXNlL2ZpbGUuYy0yOTgyLVxcbmZzL2Z1c2UvZmlsZS5jOjI5ODM6XFx0aWYgKCEobW9kZSBcXHUwMDI2IEZBTExPQ19GTF9LRUVQX1NJWkUpKVxcbmZzL2Z1c2UvZmlsZS5jLTI5ODQtXFx0XFx0c2V0X2JpdChGVVNFX0lfU0laRV9VTlNUQUJMRSwgXFx1MDAyNmZpLVxcdTAwM2VzdGF0ZSk7XFxuLS1cXG5mcy9mdXNlL2ZpbGUuYy0yOTk5LVxcdC8qIHdlIGNvdWxkIGhhdmUgZXh0ZW5kZWQgdGhlIGZpbGUgKi9cXG5mcy9mdXNlL2ZpbGUuYzozMDAwOlxcdGlmICghKG1vZGUgXFx1MDAyNiBGQUxMT0NfRkxfS0VFUF9TSVpFKSkge1xcbmZzL2Z1c2UvZmlsZS5jLTMwMDEtXFx0XFx0aWYgKGZ1c2Vfd3JpdGVfdXBkYXRlX2F0dHIoaW5vZGUsIG9mZnNldCArIGxlbmd0aCwgbGVuZ3RoKSlcXG4tLVxcbmZzL2Z1c2UvZmlsZS5jLTMwMDQtXFxuZnMvZnVzZS9maWxlLmM6MzAwNTpcXHRpZiAobW9kZSBcXHUwMDI2IChGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8IEZBTExPQ19GTF9aRVJPX1JBTkdFKSlcXG5mcy9mdXNlL2ZpbGUuYy0zMDA2LVxcdFxcdHRydW5jYXRlX3BhZ2VjYWNoZV9yYW5nZShpbm9kZSwgb2Zmc2V0LCBvZmZzZXQgKyBsZW5ndGggLSAxKTtcXG4tLVxcbmZzL2Z1c2UvZmlsZS5jLTMwMTAtb3V0OlxcbmZzL2Z1c2UvZmlsZS5jOjMwMTE6XFx0aWYgKCEobW9kZSBcXHUwMDI2IEZBTExPQ19GTF9LRUVQX1NJWkUpKVxcbmZzL2Z1c2UvZmlsZS5jLTMwMTItXFx0XFx0Y2xlYXJfYml0KEZVU0VfSV9TSVpFX1VOU1RBQkxFLCBcXHUwMDI2ZmktXFx1MDAzZXN0YXRlKTtcXG4tLVxcbmZzL2dmczIvZmlsZS5jPTEyNTI9c3RhdGljIGxvbmcgX19nZnMyX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4pXFxuLS1cXG5mcy9nZnMyL2ZpbGUuYy0xMzUwLVxcbmZzL2dmczIvZmlsZS5jOjEzNTE6XFx0aWYgKCEobW9kZSBcXHUwMDI2IEZBTExPQ19GTF9LRUVQX1NJWkUpIFxcdTAwMjZcXHUwMDI2IChwb3MgKyBjb3VudCkgXFx1MDAzZSBpbm9kZS1cXHUwMDNlaV9zaXplKVxcbmZzL2dmczIvZmlsZS5jLTEzNTItXFx0XFx0aV9zaXplX3dyaXRlKGlub2RlLCBwb3MgKyBjb3VudCk7XFxuLS1cXG5mcy9nZnMyL2ZpbGUuYz0xMzY4PXN0YXRpYyBsb25nIGdmczJfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbilcXG4tLVxcbmZzL2dmczIvZmlsZS5jLTEzNzUtXFxuZnMvZ2ZzMi9maWxlLmM6MTM3NjpcXHRpZiAobW9kZSBcXHUwMDI2IH4oRkFMTE9DX0ZMX1BVTkNIX0hPTEUgfCBGQUxMT0NfRkxfS0VFUF9TSVpFKSlcXG5mcy9nZnMyL2ZpbGUuYy0xMzc3LVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbmZzL2dmczIvZmlsZS5jLTEzODgtXFxuZnMvZ2ZzMi9maWxlLmM6MTM4OTpcXHRpZiAoIShtb2RlIFxcdTAwMjYgRkFMTE9DX0ZMX0tFRVBfU0laRSkgXFx1MDAyNlxcdTAwMjZcXG5mcy9nZnMyL2ZpbGUuYy0xMzkwLVxcdCAgICAob2Zmc2V0ICsgbGVuKSBcXHUwMDNlIGlub2RlLVxcdTAwM2VpX3NpemUpIHtcXG4tLVxcbmZzL2dmczIvZmlsZS5jLTEzOTktXFxuZnMvZ2ZzMi9maWxlLmM6MTQwMDpcXHRpZiAobW9kZSBcXHUwMDI2IEZBTExPQ19GTF9QVU5DSF9IT0xFKSB7XFxuZnMvZ2ZzMi9maWxlLmMtMTQwMS1cXHRcXHRyZXQgPSBfX2dmczJfcHVuY2hfaG9sZShmaWxlLCBvZmZzZXQsIGxlbik7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYz03MDA9c3RhdGljIGxvbmcgaHVnZXRsYmZzX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy03MTQtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NzE1OlxcdGlmIChtb2RlIFxcdTAwMjYgfihGQUxMT0NfRkxfS0VFUF9TSVpFIHwgRkFMTE9DX0ZMX1BVTkNIX0hPTEUpKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTcxNi1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNzE3LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjcxODpcXHRpZiAobW9kZSBcXHUwMDI2IEZBTExPQ19GTF9QVU5DSF9IT0xFKSB7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNzE5LVxcdFxcdGVycm9yID0gaHVnZXRsYmZzX3B1bmNoX2hvbGUoaW5vZGUsIG9mZnNldCwgbGVuKTtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTczMi1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzo3MzM6XFx0LyogV2UgbmVlZCB0byBjaGVjayBybGltaXQgZXZlbiB3aGVuIEZBTExPQ19GTF9LRUVQX1NJWkUgKi9cXG5mcy9odWdldGxiZnMvaW5vZGUuYy03MzQtXFx0ZXJyb3IgPSBpbm9kZV9uZXdzaXplX29rKGlub2RlLCBvZmZzZXQgKyBsZW4pO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODE5LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjgyMDpcXHRpZiAoIShtb2RlIFxcdTAwMjYgRkFMTE9DX0ZMX0tFRVBfU0laRSkgXFx1MDAyNlxcdTAwMjYgb2Zmc2V0ICsgbGVuIFxcdTAwM2UgaW5vZGUtXFx1MDAzZWlfc2l6ZSlcXG5mcy9odWdldGxiZnMvaW5vZGUuYy04MjEtXFx0XFx0aV9zaXplX3dyaXRlKGlub2RlLCBvZmZzZXQgKyBsZW4pO1xcbi0tXFxuZnMvaW9jdGwuYz0yNjg9c3RhdGljIGludCBpb2N0bF9wcmVhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgaW50IG1vZGUsIHZvaWQgX191c2VyICphcmdwKVxcbi0tXFxuZnMvaW9jdGwuYy0yODgtXFxuZnMvaW9jdGwuYzoyODk6XFx0cmV0dXJuIHZmc19mYWxsb2NhdGUoZmlscCwgbW9kZSB8IEZBTExPQ19GTF9LRUVQX1NJWkUsIHNyLmxfc3RhcnQsXFxuZnMvaW9jdGwuYy0yOTAtXFx0XFx0XFx0c3IubF9sZW4pO1xcbi0tXFxuZnMvaW9jdGwuYz0yOTY9c3RhdGljIGludCBjb21wYXRfaW9jdGxfcHJlYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLFxcbi0tXFxuZnMvaW9jdGwuYy0zMTctXFxuZnMvaW9jdGwuYzozMTg6XFx0cmV0dXJuIHZmc19mYWxsb2NhdGUoZmlsZSwgbW9kZSB8IEZBTExPQ19GTF9LRUVQX1NJWkUsIHNyLmxfc3RhcnQsIHNyLmxfbGVuKTtcXG5mcy9pb2N0bC5jLTMxOS19XFxuLS1cXG5mcy9pb2N0bC5jPTMyMj1zdGF0aWMgaW50IGZpbGVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIGludCBfX3VzZXIgKnApXFxuLS1cXG5mcy9pb2N0bC5jLTMzMS1cXHRjYXNlIEZTX0lPQ19VTlJFU1ZTUDY0OlxcbmZzL2lvY3RsLmM6MzMyOlxcdFxcdHJldHVybiBpb2N0bF9wcmVhbGxvY2F0ZShmaWxwLCBGQUxMT0NfRkxfUFVOQ0hfSE9MRSwgcCk7XFxuZnMvaW9jdGwuYy0zMzMtXFx0Y2FzZSBGU19JT0NfWkVST19SQU5HRTpcXG5mcy9pb2N0bC5jOjMzNDpcXHRcXHRyZXR1cm4gaW9jdGxfcHJlYWxsb2NhdGUoZmlscCwgRkFMTE9DX0ZMX1pFUk9fUkFOR0UsIHApO1xcbmZzL2lvY3RsLmMtMzM1LVxcdH1cXG4tLVxcbmZzL2lvY3RsLmM9NjM4PUNPTVBBVF9TWVNDQUxMX0RFRklORTMoaW9jdGwsIHVuc2lnbmVkIGludCwgZmQsIHVuc2lnbmVkIGludCwgY21kLFxcbi0tXFxuZnMvaW9jdGwuYy02NjQtXFx0Y2FzZSBGU19JT0NfVU5SRVNWU1A2NF8zMjpcXG5mcy9pb2N0bC5jOjY2NTpcXHRcXHRlcnJvciA9IGNvbXBhdF9pb2N0bF9wcmVhbGxvY2F0ZShmZF9maWxlKGYpLCBGQUxMT0NfRkxfUFVOQ0hfSE9MRSxcXG5mcy9pb2N0bC5jLTY2Ni1cXHRcXHRcXHRcXHRjb21wYXRfcHRyKGFyZykpO1xcbi0tXFxuZnMvaW9jdGwuYy02NjgtXFx0Y2FzZSBGU19JT0NfWkVST19SQU5HRV8zMjpcXG5mcy9pb2N0bC5jOjY2OTpcXHRcXHRlcnJvciA9IGNvbXBhdF9pb2N0bF9wcmVhbGxvY2F0ZShmZF9maWxlKGYpLCBGQUxMT0NfRkxfWkVST19SQU5HRSxcXG5mcy9pb2N0bC5jLTY3MC1cXHRcXHRcXHRcXHRjb21wYXRfcHRyKGFyZykpO1xcbi0tXFxuZnMvbmZzL25mczRmaWxlLmM9MjE5PXN0YXRpYyBsb25nIG5mczQyX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZXAsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKVxcbi0tXFxuZnMvbmZzL25mczRmaWxlLmMtMjI4LVxcdGNhc2UgMDpcXG5mcy9uZnMvbmZzNGZpbGUuYzoyMjk6XFx0Y2FzZSBGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8IEZBTExPQ19GTF9LRUVQX1NJWkU6XFxuZnMvbmZzL25mczRmaWxlLmM6MjMwOlxcdGNhc2UgRkFMTE9DX0ZMX1pFUk9fUkFOR0U6XFxuZnMvbmZzL25mczRmaWxlLmMtMjMxLVxcdFxcdGJyZWFrO1xcbi0tXFxuZnMvbmZzL25mczRmaWxlLmMtMjM5LVxcbmZzL25mcy9uZnM0ZmlsZS5jOjI0MDpcXHRpZiAobW9kZSBcXHUwMDI2IEZBTExPQ19GTF9QVU5DSF9IT0xFKVxcbmZzL25mcy9uZnM0ZmlsZS5jLTI0MS1cXHRcXHRyZXR1cm4gbmZzNDJfcHJvY19kZWFsbG9jYXRlKGZpbGVwLCBvZmZzZXQsIGxlbik7XFxuZnMvbmZzL25mczRmaWxlLmM6MjQyOlxcdGVsc2UgaWYgKG1vZGUgXFx1MDAyNiBGQUxMT0NfRkxfWkVST19SQU5HRSlcXG5mcy9uZnMvbmZzNGZpbGUuYy0yNDMtXFx0XFx0cmV0dXJuIG5mczQyX3Byb2NfemVyb19yYW5nZShmaWxlcCwgb2Zmc2V0ICxsZW4pO1xcbi0tXFxuZnMvbmZzZC9uZnM0cHJvYy5jPTIzODQ9bmZzZDRfZGVhbGxvY2F0ZShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3QgbmZzZDRfY29tcG91bmRfc3RhdGUgKmNzdGF0ZSxcXG4tLVxcbmZzL25mc2QvbmZzNHByb2MuYy0yMzg3LVxcdHJldHVybiBuZnNkNF9mYWxsb2NhdGUocnFzdHAsIGNzdGF0ZSwgXFx1MDAyNnUtXFx1MDAzZWRlYWxsb2NhdGUsXFxuZnMvbmZzZC9uZnM0cHJvYy5jOjIzODg6XFx0XFx0XFx0ICAgICAgIEZBTExPQ19GTF9QVU5DSF9IT0xFIHwgRkFMTE9DX0ZMX0tFRVBfU0laRSk7XFxuZnMvbmZzZC9uZnM0cHJvYy5jLTIzODktfVxcbi0tXFxuZnMvbnRmcy9maWxlLmM9ODA0PXN0YXRpYyBpbnQgbnRmc19hbGxvY2F0ZV9yYW5nZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LFxcbi0tXFxuZnMvbnRmcy9maWxlLmMtODM1LVxcdGVyciA9IG50ZnNfYXR0cl9mYWxsb2NhdGUobmksIG9mZnNldCwgbGVuLFxcbmZzL250ZnMvZmlsZS5jOjgzNjpcXHRcXHRcXHRtb2RlIFxcdTAwMjYgRkFMTE9DX0ZMX0tFRVBfU0laRSA/IHRydWUgOiBmYWxzZSk7XFxuZnMvbnRmcy9maWxlLmMtODM3LVxcbmZzL250ZnMvZmlsZS5jOjgzODpcXHRpZiAoIShtb2RlIFxcdTAwMjYgRkFMTE9DX0ZMX0tFRVBfU0laRSkgXFx1MDAyNlxcdTAwMjYgbmV3X3NpemUgIT0gb2xkX3NpemUpXFxuZnMvbnRmcy9maWxlLmMtODM5LVxcdFxcdGlfc2l6ZV93cml0ZSh2aSwgbmktXFx1MDAzZWRhdGFfc2l6ZSk7XFxuLS1cXG5mcy9udGZzL2ZpbGUuYz05NjU9c3RhdGljIGludCBudGZzX2luc2VydF9yYW5nZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4pXFxuLS1cXG5mcy9udGZzL2ZpbGUuYy0xMDIwLVxcbmZzL250ZnMvZmlsZS5jOjEwMjE6I2RlZmluZSBOVEZTX0ZBTExPQ19GTF9TVVBQT1JURURcXHRcXHRcXHRcXHRcXHRcXFxcXFxuZnMvbnRmcy9maWxlLmM6MTAyMjpcXHRcXHQoRkFMTE9DX0ZMX0FMTE9DQVRFX1JBTkdFIHwgRkFMTE9DX0ZMX0tFRVBfU0laRSB8XFx0XFxcXFxcbmZzL250ZnMvZmlsZS5jOjEwMjM6XFx0XFx0IEZBTExPQ19GTF9JTlNFUlRfUkFOR0UgfCBGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8XFx0XFxcXFxcbmZzL250ZnMvZmlsZS5jOjEwMjQ6XFx0XFx0IEZBTExPQ19GTF9DT0xMQVBTRV9SQU5HRSlcXG5mcy9udGZzL2ZpbGUuYy0xMDI1LVxcbmZzL250ZnMvZmlsZS5jPTEwMjY9c3RhdGljIGxvbmcgbnRmc19mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKVxcbi0tXFxuZnMvbnRmcy9maWxlLmMtMTAzNC1cXG5mcy9udGZzL2ZpbGUuYzoxMDM1OlxcdGlmIChtb2RlIFxcdTAwMjYgfihOVEZTX0ZBTExPQ19GTF9TVVBQT1JURUQpKVxcbmZzL250ZnMvZmlsZS5jLTEwMzYtXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxuZnMvbnRmcy9maWxlLmMtMTA2Ni1cXHRpbm9kZV9kaW9fd2FpdCh2aSk7XFxuZnMvbnRmcy9maWxlLmM6MTA2NzpcXHRpZiAobW9kZSBcXHUwMDI2IChGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8IEZBTExPQ19GTF9DT0xMQVBTRV9SQU5HRSB8XFxuZnMvbnRmcy9maWxlLmM6MTA2ODpcXHRcXHQgICAgRkFMTE9DX0ZMX0lOU0VSVF9SQU5HRSkpIHtcXG5mcy9udGZzL2ZpbGUuYy0xMDY5LVxcdFxcdGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrKHZpLVxcdTAwM2VpX21hcHBpbmcpO1xcbi0tXFxuZnMvbnRmcy9maWxlLmMtMTA3Mi1cXG5mcy9udGZzL2ZpbGUuYzoxMDczOlxcdHN3aXRjaCAobW9kZSBcXHUwMDI2IEZBTExPQ19GTF9NT0RFX01BU0spIHtcXG5mcy9udGZzL2ZpbGUuYzoxMDc0OlxcdGNhc2UgRkFMTE9DX0ZMX0FMTE9DQVRFX1JBTkdFOlxcbmZzL250ZnMvZmlsZS5jOjEwNzU6XFx0Y2FzZSBGQUxMT0NfRkxfS0VFUF9TSVpFOlxcbmZzL250ZnMvZmlsZS5jLTEwNzYtXFx0XFx0ZXJyID0gbnRmc19hbGxvY2F0ZV9yYW5nZShuaSwgbW9kZSwgb2Zmc2V0LCBsZW4pO1xcbmZzL250ZnMvZmlsZS5jLTEwNzctXFx0XFx0YnJlYWs7XFxuZnMvbnRmcy9maWxlLmM6MTA3ODpcXHRjYXNlIEZBTExPQ19GTF9QVU5DSF9IT0xFOlxcbmZzL250ZnMvZmlsZS5jLTEwNzktXFx0XFx0ZXJyID0gbnRmc19wdW5jaF9ob2xlKG5pLCBtb2RlLCBvZmZzZXQsIGxlbik7XFxuZnMvbnRmcy9maWxlLmMtMTA4MC1cXHRcXHRicmVhaztcXG5mcy9udGZzL2ZpbGUuYzoxMDgxOlxcdGNhc2UgRkFMTE9DX0ZMX0NPTExBUFNFX1JBTkdFOlxcbmZzL250ZnMvZmlsZS5jLTEwODItXFx0XFx0ZXJyID0gbnRmc19jb2xsYXBzZV9yYW5nZShuaSwgb2Zmc2V0LCBsZW4pO1xcbmZzL250ZnMvZmlsZS5jLTEwODMtXFx0XFx0YnJlYWs7XFxuZnMvbnRmcy9maWxlLmM6MTA4NDpcXHRjYXNlIEZBTExPQ19GTF9JTlNFUlRfUkFOR0U6XFxuZnMvbnRmcy9maWxlLmMtMTA4NS1cXHRcXHRlcnIgPSBudGZzX2luc2VydF9yYW5nZShuaSwgb2Zmc2V0LCBsZW4pO1xcbi0tXFxuZnMvbnRmczMvZmlsZS5jPTQwMT1zdGF0aWMgaW50IG50ZnNfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG5ld19zaXplKVxcbi0tXFxuZnMvbnRmczMvZmlsZS5jLTQ0MS0gKiBvcGVyYXRpb24sIHdoaWNoIGdldHMgY2FsbGVkIGZyb20gc3lzX2ZhbGxvY2F0ZSBzeXN0ZW0gY2FsbC4gVXNlclxcbmZzL250ZnMzL2ZpbGUuYzo0NDI6ICogc3BhY2UgcmVxdWVzdHMgJ2xlbicgYnl0ZXMgYXQgJ3ZibycuIElmIEZBTExPQ19GTF9LRUVQX1NJWkUgaXMgc2V0XFxuZnMvbnRmczMvZmlsZS5jLTQ0My0gKiB3ZSBqdXN0IGFsbG9jYXRlIGNsdXN0ZXJzIHdpdGhvdXQgemVyb2luZyB0aGVtIG91dC4gT3RoZXJ3aXNlIHdlXFxuLS1cXG5mcy9udGZzMy9maWxlLmM9NDQ2PXN0YXRpYyBsb25nIG50ZnNfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IHZibywgbG9mZl90IGxlbilcXG4tLVxcbmZzL250ZnMzL2ZpbGUuYy00NjgtXFx0ICovXFxuZnMvbnRmczMvZmlsZS5jOjQ2OTpcXHRpZiAobW9kZSBcXHUwMDI2IEZBTExPQ19GTF9QVU5DSF9IT0xFKSB7XFxuZnMvbnRmczMvZmlsZS5jLTQ3MC1cXHRcXHRpZiAoIWlzX3N1cHBvcnRlZF9ob2xlcylcXG5mcy9udGZzMy9maWxlLmMtNDcxLVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5mcy9udGZzMy9maWxlLmM6NDcyOlxcdH0gZWxzZSBpZiAobW9kZSBcXHUwMDI2IEZBTExPQ19GTF9DT0xMQVBTRV9SQU5HRSkge1xcbmZzL250ZnMzL2ZpbGUuYzo0NzM6XFx0fSBlbHNlIGlmIChtb2RlIFxcdTAwMjYgRkFMTE9DX0ZMX0lOU0VSVF9SQU5HRSkge1xcbmZzL250ZnMzL2ZpbGUuYy00NzQtXFx0XFx0aWYgKCFpc19zdXBwb3J0ZWRfaG9sZXMpXFxuLS1cXG5mcy9udGZzMy9maWxlLmMtNDc2LVxcdH0gZWxzZSBpZiAobW9kZSBcXHUwMDI2XFxuZnMvbnRmczMvZmlsZS5jOjQ3NzpcXHRcXHQgICB+KEZBTExPQ19GTF9LRUVQX1NJWkUgfCBGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8XFxuZnMvbnRmczMvZmlsZS5jOjQ3ODpcXHRcXHQgICAgIEZBTExPQ19GTF9DT0xMQVBTRV9SQU5HRSB8IEZBTExPQ19GTF9JTlNFUlRfUkFOR0UpKSB7XFxuZnMvbnRmczMvZmlsZS5jLTQ3OS1cXHRcXHRudGZzX2lub2RlX3dhcm4oaW5vZGUsIFxcXCJmYWxsb2NhdGUoMHgleCkgaXMgbm90IHN1cHBvcnRlZFxcXCIsXFxuLS1cXG5mcy9udGZzMy9maWxlLmMtNDk2LVxcbmZzL250ZnMzL2ZpbGUuYzo0OTc6XFx0aWYgKG1vZGUgXFx1MDAyNiAoRkFMTE9DX0ZMX1BVTkNIX0hPTEUgfCBGQUxMT0NfRkxfQ09MTEFQU0VfUkFOR0UgfFxcbmZzL250ZnMzL2ZpbGUuYzo0OTg6XFx0XFx0ICAgIEZBTExPQ19GTF9JTlNFUlRfUkFOR0UpKSB7XFxuZnMvbnRmczMvZmlsZS5jLTQ5OS1cXHRcXHRpbm9kZV9kaW9fd2FpdChpbm9kZSk7XFxuLS1cXG5mcy9udGZzMy9maWxlLmMtNTAzLVxcbmZzL250ZnMzL2ZpbGUuYzo1MDQ6XFx0aWYgKG1vZGUgXFx1MDAyNiBGQUxMT0NfRkxfUFVOQ0hfSE9MRSkge1xcbmZzL250ZnMzL2ZpbGUuYy01MDUtXFx0XFx0dTMyIGZyYW1lX3NpemU7XFxuLS1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDk6MTE6NDEuODA0MjE1NjI2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQyMzI4MDc1MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSBwdXQgb24gbXkgdGhpbmtpbmcgY2FwLiBIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IG1lbnRhbCBwcm9jZXNzOlxuXG4qKkRpdmluZyBEZWVwIGludG8gYGZhbGxvY2F0ZWAgRmxhZ3MqKlxuXG5Ib2xkIG9uIGEgc2Vjb25kLi4uIGlzIGBGQUxMT0NfRkxfV1JJVEVfWkVST0VTYCBhY3R1YWxseSBhIHN0YW5kYXJkIGBmYWxsb2NhdGVgIGZsYWc/IEkgY291bGQgaGF2ZSBzd29ybiBpdCB3YXMsIGJ1dCBzb21ldGhpbmcgZmVlbHMgb2ZmLiBMZXQgbWUgZG91YmxlLWNoZWNrLiBPa2F5LCBsZXQncyBzZWUuLi4gaWYgaXQncyBub3QgYSBzdGFuZGFyZCwgaXQncyBwcm9iYWJseSBkZWZpbmVkIGludGVybmFsbHkuIEFoYSEgSSByZW1lbWJlciBzZWVpbmcgaXQgbWVudGlvbmVkIGluIGBibG9jay9mb3BzLmNgLiBCdXQgd2FpdC4uLnRoYXQncyBub3QgcmlnaHQgZWl0aGVyLiBJdCAqc2hvdWxkKiBiZSBpbiB0aGUgcHVibGljIEFQSSBoZWFkZXJzLiBJIG5lZWQgdG8gYmUgc3VyZS4gTGV0J3MgbG9vayBpbnNpZGUgYGluY2x1ZGUvdWFwaS9saW51eC9mYWxsb2MuaGAuIExldCdzIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc1NTUsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwOToxMjoyNi4wMzcwMjUzOTNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxMzY3OTc5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJGQUxMT0NfRkxfV1JJVEVfWkVST0VTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2ZvcHMuYz04MTE9c3RhdGljIHNzaXplX3QgYmxrZGV2X3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuLS1cXG5ibG9jay9mb3BzLmMtODY1LVxcdFxcdChGQUxMT0NfRkxfS0VFUF9TSVpFIHwgRkFMTE9DX0ZMX1BVTkNIX0hPTEUgfFxcdFxcdFxcXFxcXG5ibG9jay9mb3BzLmM6ODY2OlxcdFxcdCBGQUxMT0NfRkxfWkVST19SQU5HRSB8IEZBTExPQ19GTF9XUklURV9aRVJPRVMpXFxuYmxvY2svZm9wcy5jLTg2Ny1cXG5ibG9jay9mb3BzLmM9ODY4PXN0YXRpYyBsb25nIGJsa2Rldl9mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgc3RhcnQsXFxuLS1cXG5ibG9jay9mb3BzLmMtODg0LVxcdCAqL1xcbmJsb2NrL2ZvcHMuYzo4ODU6XFx0aWYgKChtb2RlIFxcdTAwMjYgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FUykgXFx1MDAyNlxcdTAwMjZcXG5ibG9jay9mb3BzLmMtODg2LVxcdCAgICAhYmRldl93cml0ZV96ZXJvZXNfdW5tYXBfc2VjdG9ycyhiZGV2KSlcXG4tLVxcbmJsb2NrL2ZvcHMuYy05MTctXFx0XFx0YnJlYWs7XFxuYmxvY2svZm9wcy5jOjkxODpcXHRjYXNlIEZBTExPQ19GTF9XUklURV9aRVJPRVM6XFxuYmxvY2svZm9wcy5jLTkxOS1cXHRcXHRmbGFncyA9IDA7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz00NzM0PXN0YXRpYyBsb25nIGV4dDRfemVyb19yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ3OTItXFx0ICovXFxuZnMvZXh0NC9leHRlbnRzLmM6NDc5MzpcXHRpZiAobW9kZSBcXHUwMDI2IEZBTExPQ19GTF9XUklURV9aRVJPRVMpIHtcXG5mcy9leHQ0L2V4dGVudHMuYy00Nzk0LVxcdFxcdGlmICghSVNfQUxJR05FRChvZmZzZXQsIGJsb2Nrc2l6ZSkgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ4MDItXFx0aWYgKGFsaWduX2VuZCBcXHUwMDNlIGFsaWduX3N0YXJ0KSB7XFxuZnMvZXh0NC9leHRlbnRzLmM6NDgwMzpcXHRcXHRpZiAobW9kZSBcXHUwMDI2IEZBTExPQ19GTF9XUklURV9aRVJPRVMpXFxuZnMvZXh0NC9leHRlbnRzLmMtNDgwNC1cXHRcXHRcXHRmbGFncyA9IEVYVDRfR0VUX0JMT0NLU19DUkVBVEVfWkVSTyB8IEVYVDRfRVhfTk9DQUNIRTtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ4MTgtXFx0LypcXG5mcy9leHQ0L2V4dGVudHMuYzo0ODE5OlxcdCAqIEluIEZBTExPQ19GTF9XUklURV9aRVJPRVMgbW9kZSwgZWRnZXMgdGhhdCBoYXZlIGJlZW4gcGFydGlhbGx5XFxuZnMvZXh0NC9leHRlbnRzLmMtNDgyMC1cXHQgKiB6ZXJvZWQgbXVzdCBiZSB3cml0dGVuIGJhY2sgdG8gZW5zdXJlIHRoZSBlbnRpcmUgemVyb2VkIHJhbmdlXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy00ODI0LVxcdGlmIChwYXJ0aWFsX3plcm9lZCBcXHUwMDI2XFx1MDAyNlxcbmZzL2V4dDQvZXh0ZW50cy5jOjQ4MjU6XFx0ICAgICgobW9kZSBcXHUwMDI2IEZBTExPQ19GTF9XUklURV9aRVJPRVMpIHx8XFxuZnMvZXh0NC9leHRlbnRzLmMtNDgyNi1cXHQgICAgIChmaWxlLVxcdTAwM2VmX2ZsYWdzIFxcdTAwMjYgT19TWU5DKSB8fCBJU19TWU5DKGlub2RlKSkpIHtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTQ5MDM9bG9uZyBleHQ0X2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4pXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy00OTIxLVxcdCAqL1xcbmZzL2V4dDQvZXh0ZW50cy5jOjQ5MjI6XFx0aWYgKChtb2RlIFxcdTAwMjYgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FUykgXFx1MDAyNlxcdTAwMjZcXG5mcy9leHQ0L2V4dGVudHMuYy00OTIzLVxcdCAgICAhYmRldl93cml0ZV96ZXJvZXNfdW5tYXBfc2VjdG9ycyhpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19iZGV2KSlcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ5MjgtXFx0XFx0ICAgICBGQUxMT0NfRkxfWkVST19SQU5HRSB8IEZBTExPQ19GTF9DT0xMQVBTRV9SQU5HRSB8XFxuZnMvZXh0NC9leHRlbnRzLmM6NDkyOTpcXHRcXHQgICAgIEZBTExPQ19GTF9JTlNFUlRfUkFOR0UgfCBGQUxMT0NfRkxfV1JJVEVfWkVST0VTKSlcXG5mcy9leHQ0L2V4dGVudHMuYy00OTMwLVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ5NzAtXFx0Y2FzZSBGQUxMT0NfRkxfWkVST19SQU5HRTpcXG5mcy9leHQ0L2V4dGVudHMuYzo0OTcxOlxcdGNhc2UgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FUzpcXG5mcy9leHQ0L2V4dGVudHMuYy00OTcyLVxcdFxcdHJldCA9IGV4dDRfemVyb19yYW5nZShmaWxlLCBvZmZzZXQsIGxlbiwgbW9kZSk7XFxuLS1cXG5mcy9vcGVuLmM9MjUwPWludCB2ZnNfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbilcXG4tLVxcbmZzL29wZW4uYy0yNzktXFx0Y2FzZSBGQUxMT0NfRkxfSU5TRVJUX1JBTkdFOlxcbmZzL29wZW4uYzoyODA6XFx0Y2FzZSBGQUxMT0NfRkxfV1JJVEVfWkVST0VTOlxcbmZzL29wZW4uYy0yODEtXFx0XFx0aWYgKG1vZGUgXFx1MDAyNiBGQUxMT0NfRkxfS0VFUF9TSVpFKVxcbi0tXFxuaW5jbHVkZS9saW51eC9mYWxsb2MuaD0xMj1zdHJ1Y3Qgc3BhY2VfcmVzdiB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZhbGxvYy5oLTM5LVxcdFxcdFxcdFxcdCBGQUxMT0NfRkxfVU5TSEFSRV9SQU5HRSB8XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZmFsbG9jLmg6NDA6XFx0XFx0XFx0XFx0IEZBTExPQ19GTF9XUklURV9aRVJPRVMpXFxuaW5jbHVkZS9saW51eC9mYWxsb2MuaC00MS1cXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2V4dDQuaD03OT1UUkFDRV9ERUZJTkVfRU5VTShFU19SRUZFUkVOQ0VEX0IpO1xcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvZXh0NC5oLTkyLVxcdHsgRkFMTE9DX0ZMX1pFUk9fUkFOR0UsXFx0XFx0XFxcIlpFUk9fUkFOR0VcXFwifSxcXHRcXHRcXFxcXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvZXh0NC5oOjkzOlxcdHsgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FUyxcXHRcXFwiV1JJVEVfWkVST0VTXFxcIn0pXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvZXh0NC5oLTk0LVxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2ZhbGxvYy5oLTgxLS8qXFxuaW5jbHVkZS91YXBpL2xpbnV4L2ZhbGxvYy5oOjgyOiAqIEZBTExPQ19GTF9XUklURV9aRVJPRVMgemVyb2VzIGEgc3BlY2lmaWVkIGZpbGUgcmFuZ2UgaW4gc3VjaCBhIHdheSB0aGF0XFxuaW5jbHVkZS91YXBpL2xpbnV4L2ZhbGxvYy5oLTgzLSAqIHN1YnNlcXVlbnQgd3JpdGVzIHRvIHRoYXQgcmFuZ2UgZG8gbm90IHJlcXVpcmUgZnVydGhlciBjaGFuZ2VzIHRvIHRoZSBmaWxlXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvZmFsbG9jLmgtOTUtICovXFxuaW5jbHVkZS91YXBpL2xpbnV4L2ZhbGxvYy5oOjk2OiNkZWZpbmUgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FU1xcdFxcdDB4ODBcXG5pbmNsdWRlL3VhcGkvbGludXgvZmFsbG9jLmgtOTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA5OjEyOjMwLjY1MDcxMDU2MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNTgzODQyMDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYEZBTExPQ19GTF9XUklURV9aRVJPRVNgIEltcGxlbWVudGF0aW9uIGluIGV4dDQqKlxuXG5Pa2F5LCBzbyB0aGVyZSdzIGEgbmV3IGZsYWcsIGBGQUxMT0NfRkxfV1JJVEVfWkVST0VTYCAoMHg4MCksIGluIGBmYWxsb2MuaGAuIEludGVyZXN0aW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBhZGRpdGlvbiwgbm90IGp1c3QgYSByZWZhY3RvcmluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgaW1wbGVtZW50ZWQgd2l0aGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIFRoZSBwYXRjaCBtb2RpZmllcyBgZXh0NF96ZXJvX3JhbmdlYCBhbmQgYGV4dDRfYWxsb2NfZmlsZV9ibG9ja3NgIHRvIHN1cHBvcnQgdGhpcywgc28gdGhleSdyZSBkZWZpbml0ZWx5IGtleS4gSSBzaG91bGQgYWxzbyBjaGVjayBgZXh0NF96ZXJvX3BhcnRpYWxfYmxvY2tzYCBiZWNhdXNlIHRoZSBkZXNjcmlwdGlvbiBtZW50aW9ucyBpdC4gTGV0J3Mgc2VlLi4uIGFoLCBgZXh0NF96ZXJvX3BhcnRpYWxfYmxvY2tzYCBpcyBub3cgcmV0dXJuaW5nIGEgYml0bWFzayBvZiBwYXJ0aWFsIHplcm9lZCBlZGdlcy4gR290IGl0LiBBbmQgYGV4dDRfYWxsb2NfZmlsZV9ibG9ja3NgIGlzIGhhbmRsaW5nIGBhbGxvY196ZXJvYCB3aXRoIHVud3JpdHRlbiBleHRlbnRzLCBwb3RlbnRpYWxseSBhZGRpbmcgdGhlIGlub2RlIHRvIHRoZSBvcnBoYW4gbGlzdC5cblxuVGltZSB0byBwaW5wb2ludCB0aGUgY2VudHJhbCBmdW5jdGlvbnMuIENsZWFybHksIGBleHQ0X3plcm9fcmFuZ2VgLCBgZXh0NF9hbGxvY19maWxlX2Jsb2Nrc2AsIGFuZCBgZXh0NF96ZXJvX3BhcnRpYWxfYmxvY2tzYCBhcmUgY3JpdGljYWwuIEkgYWxzbyBuZWVkIHRvIGxvb2sgYXQgYGV4dDRfbG9hZF90YWlsX2JoYCBzaW5jZSBpdCdzIG1vZGlmaWVkIGFuZCBzZWVtcyByZWxhdGVkIHRvIHRoZSBpbm9kZS4gQW5kLCBqdXN0IGZvciBjb250ZXh0LCBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSBpZiBgZXh0NF9ibG9ja196ZXJvX2VvZmAgbWlnaHQgYmUgcmVsZXZhbnQsIGV2ZW4gaWYgaXQncyBub3QgY2hhbmdlZCBkaXJlY3RseS5cblxuV2FpdCwgYSBzZWNvbmQgbG9va+KApiBgZXh0NF9hbGxvY19maWxlX2Jsb2Nrc2AgYW5kIGBleHQ0X3plcm9fcmFuZ2VgIGFyZSBzdGF0aWMsIHdoaWxlIGBleHQ0X3plcm9fcGFydGlhbF9ibG9ja3NgIGlzIGV4cG9ydGVkLiBUaGF0J3MgZ29vZCB0byBrbm93LiBBbmQgYGV4dDRfbG9hZF90YWlsX2JoYCBpcyBhbHNvIHN0YXRpYy4gT2theS4gU28sIHRoZSBxdWVzdGlvbiBpcywgd2hhdCdzIHRoZSBlbnRyeSBwb2ludD9cblxuUmlnaHQsIGl0IG1ha2VzIHNlbnNlOiBgZXh0NF9mYWxsb2NhdGVgIGNhbGxzIGBleHQ0X3plcm9fcmFuZ2VgLiBTbywgYGV4dDRfZmFsbG9jYXRlYCBpcyB0aGUgcHVibGljIGZhY2luZyBpbnRlcmZhY2UuIE5vdywgSSBzaG91bGQgZm9jdXMgbXkgc2VhcmNoIHdpdGhpbiBgZnMvZXh0NC9leHRlbnRzLmNgIGZvciBgZXh0NF96ZXJvX3JhbmdlYCBhbmQgdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTMzOCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwOToxMjo0MS4yMzQ1NTQ2MjRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzEzMTE4NjQzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X3plcm9fcmFuZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9leHRlbnRzLmM9NDczMj1zdGF0aWMgaW50IGV4dDRfaW5zZXJ0X3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKTtcXG5mcy9leHQ0L2V4dGVudHMuYy00NzMzLVxcbmZzL2V4dDQvZXh0ZW50cy5jOjQ3MzQ6c3RhdGljIGxvbmcgZXh0NF96ZXJvX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LFxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ3MzUtXFx0XFx0XFx0ICAgIGxvZmZfdCBsZW4sIGludCBtb2RlKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNDc0NC1cXG5mcy9leHQ0L2V4dGVudHMuYzo0NzQ1OlxcdHRyYWNlX2V4dDRfemVyb19yYW5nZShpbm9kZSwgb2Zmc2V0LCBsZW4sIG1vZGUpO1xcbmZzL2V4dDQvZXh0ZW50cy5jLTQ3NDYtXFx0V0FSTl9PTl9PTkNFKCFpbm9kZV9pc19sb2NrZWQoaW5vZGUpKTtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTQ5MDM9bG9uZyBleHQ0X2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4pXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy00OTcxLVxcdGNhc2UgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FUzpcXG5mcy9leHQ0L2V4dGVudHMuYzo0OTcyOlxcdFxcdHJldCA9IGV4dDRfemVyb19yYW5nZShmaWxlLCBvZmZzZXQsIGxlbiwgbW9kZSk7XFxuZnMvZXh0NC9leHRlbnRzLmMtNDk3My1cXHRcXHRicmVhaztcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz00MDA0PXZvaWQgZXh0NF9zZXRfYW9wcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTQwMjUtICogSGVyZSB3ZSBjYW4ndCBza2lwIGFuIHVud3JpdHRlbiBidWZmZXIgZXZlbiB0aG91Z2ggaXQgdXN1YWxseSByZWFkcyB6ZXJvXFxuZnMvZXh0NC9pbm9kZS5jOjQwMjY6ICogYmVjYXVzZSBpdCBtaWdodCBoYXZlIGRhdGEgaW4gcGFnZWNhY2hlIChlZywgaWYgY2FsbGVkIGZyb20gZXh0NF96ZXJvX3JhbmdlLFxcbmZzL2V4dDQvaW5vZGUuYy00MDI3LSAqIGV4dDRfcHVuY2hfaG9sZSwgZXRjKSB3aGljaCBuZWVkcyB0byBiZSBwcm9wZXJseSB6ZXJvZWQgb3V0LiBPdGhlcndpc2UgYVxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvZXh0NC5oPTE0NDQ9REVGSU5FX0VWRU5UKGV4dDRfX2ZhbGxvY2F0ZV9tb2RlLCBleHQ0X3B1bmNoX2hvbGUsXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0LmgtMTQ1MC1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0Lmg6MTQ1MTpERUZJTkVfRVZFTlQoZXh0NF9fZmFsbG9jYXRlX21vZGUsIGV4dDRfemVyb19yYW5nZSxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0LmgtMTQ1Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDk6MTI6NDQuMzY1NzU3NDZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTMyNTA3OTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEV4dDQgRnV6emluZyBUYXJnZXRzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byBiZXN0IGFwcHJvYWNoIGZ1enppbmcgdGhlIGV4dDQgZmlsZXN5c3RlbS4gTXkgcHJpbWFyeSB0YXJnZXRzIHNob3VsZCBiZSBjZW50ZXJlZCBhcm91bmQgYmxvY2sgemVyb2luZy4gSSdtIGZvY3VzaW5nIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgdGhpcywgc3BlY2lmaWNhbGx5OiBgZXh0NF96ZXJvX3BhcnRpYWxfYmxvY2tzYCwgYW5kIGBleHQ0X3plcm9fcmFuZ2VgLiBXYWl0IGEgbWludXRlLCBgZXh0NF96ZXJvX3JhbmdlYCBpcyBkZWNsYXJlZCBgc3RhdGljYC4gRG9lcyBzeXprYWxsZXIgaGFuZGxlIHRob3NlPyBZZXMsIGl0IGNhbiwgaWYgdGhlIHN0YXRpYyBmdW5jdGlvbiBpcyBleHBvcnRlZCB0byB0aGUgc3ltYm9sIHRhYmxlLiBIb3dldmVyLCBpdCBpcyB1c3VhbGx5IGJldHRlciB0byBwcm92aWRlIHRoZSBnbG9iYWwgZW50cnkgcG9pbnQuIFRoZXJlZm9yZSBJIHdpbGwgYWxzbyBpbmNsdWRlIGBleHQ0X2ZhbGxvY2F0ZWAgYXMgdGhlIG1haW4gZW50cnkgcG9pbnQgdG8gemVyb2luZy4gSSBzaG91bGQgYWxzbyBpbmNsdWRlIGBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzYCwgYXMgaXQgaXMgcmVsYXRlZCB0byBibG9jayBhbGxvY2F0aW9uLiBTbywgdG8gc3VtbWFyaXNlLCBteSBrZXkgdGFyZ2V0cyB3aWxsIGJlIGBleHQ0X2ZhbGxvY2F0ZWAsIGBleHQ0X3plcm9fcmFuZ2VgLCBgZXh0NF9hbGxvY19maWxlX2Jsb2Nrc2AgYW5kIGBleHQ0X3plcm9fcGFydGlhbF9ibG9ja3NgLlxuXG5OZXh0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9ucyBlbmFibGVkLiBPYnZpb3VzbHksIGBFWFQ0X0ZTYCBpcyByZXF1aXJlZC4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBgZnMvZXh0NC9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gdGFrZSBpbnRvIGFjY291bnQuIEdvdHRhIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3JpdGljYWwgZm9yIHRoZXNlIGZ1bmN0aW9ucyB0byBiZSBlbmFibGVkIG9yIGhhdmUgdGhlIGRlc2lyZWQgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzc4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA5OjEyOjUwLjQ5ODI2ODE4OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2NTIzMDY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRVhUNF9GU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9leHQ0L0tjb25maWc6Mjpjb25maWcgRVhUNF9GU1xcbmZzL2V4dDQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVxcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZz0zNT1jb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy00NS1cXG5mcy9leHQ0L0tjb25maWc6NDY6Y29uZmlnIEVYVDRfRlNfUE9TSVhfQUNMXFxuZnMvZXh0NC9LY29uZmlnLTQ3LVxcdGJvb2wgXFxcIkV4dDQgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNTUtXFxuZnMvZXh0NC9LY29uZmlnOjU2OmNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXFxuZnMvZXh0NC9LY29uZmlnLTU3LVxcdGJvb2wgXFxcIkV4dDQgU2VjdXJpdHkgTGFiZWxzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwOToxMjo1Mi45NjM1MDM5MDlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTUxNDU2MDcxNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIEVYVDQgQmxvY2sgQWxsb2NhdGlvbioqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIHByaW1hcmlseSBkZWFsaW5nIHdpdGggYEVYVDRfRlNgIGhlcmUg4oCTIHRoYXQncyB0aGUgZmlsZXN5c3RlbSB3ZSdyZSBmb2N1c2luZyBvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgdmVyaWZ5IGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHRpZWQgdG8gYEZBTExPQ19GTF9XUklURV9aRVJPRVNgLiBJJ20gcHJldHR5IHN1cmUgaXQncyBqdXN0IGEgbmV3IGZsYWcgaW50cm9kdWNlZCB3aXRoaW4gdGhlIGBmYWxsb2NhdGVgIHN5c3RlbSBjYWxsIGl0c2VsZi4gSG93ZXZlciwgaXQncyBhbHdheXMgZ29vZCB0byBkb3VibGUtY2hlY2suXG5cbk5vdywgSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBzdXNwaWNpb24gYnkgcXVpY2tseSByZXZpZXdpbmcgYGV4dDRfYWxsb2NfZmlsZV9ibG9ja3NgLiBJIHdhbnQgdG8gc2VlIHByZWNpc2VseSBob3cgaXQncyBoYW5kbGVkIHdpdGhpbiB0aGUgYGV4dDRgIGJsb2NrIGFsbG9jYXRpb24gcm91dGluZXMuIFRoaXMnbGwgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyB0aGlzIGZsYWcgaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSBsYXJnZXIgYWxsb2NhdGlvbiBmcmFtZXdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDkyLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDk6MTM6MDguMTA5MTQ3OTI5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODc1NTI4ODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfYWxsb2NfZmlsZV9ibG9ja3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9leHRlbnRzLmM9NDU0Mz1pbnQgZXh0NF9leHRfdHJ1bmNhdGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ1NzMtXFxuZnMvZXh0NC9leHRlbnRzLmM6NDU3NDpzdGF0aWMgaW50IGV4dDRfYWxsb2NfZmlsZV9ibG9ja3Moc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4sXFxuZnMvZXh0NC9leHRlbnRzLmMtNDU3NS1cXHRcXHRcXHRcXHQgIGxvZmZfdCBuZXdfc2l6ZSwgaW50IGZsYWdzKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9NDczND1zdGF0aWMgbG9uZyBleHQ0X3plcm9fcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy00NzY1LVxcdGlmICghSVNfQUxJR05FRChvZmZzZXQgfCBlbmQsIGJsb2Nrc2l6ZSkpIHtcXG5mcy9leHQ0L2V4dGVudHMuYzo0NzY2OlxcdFxcdHJldCA9IGV4dDRfYWxsb2NfZmlsZV9ibG9ja3MoZmlsZSwgb2Zmc2V0LCBsZW4sIG5ld19zaXplLFxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ3NjctXFx0XFx0XFx0XFx0XFx0ICAgICBmbGFncyk7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy00ODA3LVxcdFxcdFxcdFxcdCAgRVhUNF9FWF9OT0NBQ0hFKTtcXG5mcy9leHQ0L2V4dGVudHMuYzo0ODA4OlxcdFxcdHJldCA9IGV4dDRfYWxsb2NfZmlsZV9ibG9ja3MoZmlsZSwgYWxpZ25fc3RhcnQsXFxuZnMvZXh0NC9leHRlbnRzLmMtNDgwOS1cXHRcXHRcXHRcXHRcXHQgICAgIGFsaWduX2VuZCAtIGFsaWduX3N0YXJ0LCBuZXdfc2l6ZSxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTQ4NTU9c3RhdGljIGxvbmcgZXh0NF9kb19mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy00ODc5LVxcbmZzL2V4dDQvZXh0ZW50cy5jOjQ4ODA6XFx0cmV0ID0gZXh0NF9hbGxvY19maWxlX2Jsb2NrcyhmaWxlLCBvZmZzZXQsIGxlbiwgbmV3X3NpemUsXFxuZnMvZXh0NC9leHRlbnRzLmMtNDg4MS1cXHRcXHRcXHRcXHQgICAgIEVYVDRfR0VUX0JMT0NLU19DUkVBVEVfVU5XUklUX0VYVCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA5OjEzOjEwLjk4NDY4Mjc2NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMjU4NDIzNzIxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBleHQ0IEZpbGVzeXN0ZW0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgZGVlcCBpbnRvIHRoZSBleHQ0IGJsb2NrIGFsbG9jYXRpb24gYW5kIHplcm9pbmcgcm91dGluZXMuIFNwZWNpZmljYWxseSwgaXQncyBhYm91dCBhZGRpbmcgc3VwcG9ydCBmb3IgYEZBTExPQ19GTF9XUklURV9aRVJPRVNgLiBJJ20gc2VlaW5nIG1vZGlmaWNhdGlvbnMgdG8gYGV4dDRfYWxsb2NfZmlsZV9ibG9ja3NgLCBgZXh0NF96ZXJvX3JhbmdlYCwgYW5kIGBleHQ0X3plcm9fcGFydGlhbF9ibG9ja3NgIOKAkyB0aGF0J3MgYSBzaWduaWZpY2FudCBjaHVuayBvZiBjb3JlIGZ1bmN0aW9uYWxpdHkuIEFuZCB0aGVyZSdzIGFsc28gYSB0d2VhayB0byBgZXh0NF9sb2FkX3RhaWxfYmhgLCB3aGljaCBtYWtlcyBtZSBpbW1lZGlhdGVseSB0aGluayBhYm91dCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggdW53cml0dGVuIGV4dGVudHMgYW5kIGhvdyB0aGUgZmlsZXN5c3RlbSBoYW5kbGVzIGhvbGVzLiBUaGUgY2hhbmdlIHRvIGBleHQ0X3plcm9fcGFydGlhbF9ibG9ja3NgIHJldHVybmluZyBhIGJpdG1hc2sgaXMgYWxzbyBpbnRlcmVzdGluZzsgdGhhdCBjb3VsZCBpbXBhY3QgZXJyb3IgaGFuZGxpbmcgb3IgaG93IHplcm9pbmcgaXMgdHJhY2tlZC5cblxuVGhpcyBpcyBhIHByZXR0eSBmdW5kYW1lbnRhbCBmdW5jdGlvbmFsIGNoYW5nZS4gSXQncyB0b3VjaGluZyBob3cgdGhlIGZpbGVzeXN0ZW0gYWxsb2NhdGVzIGJsb2NrcywgaG93IGl0IHplcm9lcyBkYXRhIChwYXJ0aWFsbHkgKmFuZCogY29tcGxldGVseSksIGFuZCBob3cgaXQgZGVhbHMgd2l0aCBwb3RlbnRpYWwgaW5jb25zaXN0ZW5jaWVzIHdpdGggdW53cml0dGVuIGRhdGEuIFNpbmNlIHRoaXMgZGlyZWN0bHkgaW1wYWN0cyB0aGUgYGZhbGxvY2F0ZWAgaW1wbGVtZW50YXRpb24sIHdoaWNoIGludGVyYWN0cyB3aXRoIGBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzYCwgSSBzaG91bGQgZGVmaW5pdGVseSBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGVzZSByb3V0aW5lcyBhbmQgbWFrZSBzdXJlIHRoZXkgYWxsIGhhbmRsZSB0aGUgbmV3IGZsYWcgY29ycmVjdGx5LiBJIGFsc28gd2FudCB0byBtYWtlIHN1cmUgdGhlIGludGVyYWN0aW9ucyB3aXRoIGBvcnBoYW5gIGxpc3RzIGRvbid0IGludHJvZHVjZSBuZXcgaW5jb25zaXN0ZW5jaWVzLCBnaXZlbiB0aGUgY2hhbmdlcyB0byBhbGxvY2F0aW9uLlxuXG5HaXZlbiB0aGUgc2NvcGUgYW5kIGltcGFjdCBvbiB0aGVzZSBjcml0aWNhbCBleHQ0IGNvbXBvbmVudHMsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyB0aG9yb3VnaGx5IGZ1enplZC4gVGhlIHByaW1hcnkgZm9jdXMgc2hvdWxkIGJlIG9uIHRob3NlIHNwZWNpZmljIHN5bWJvbHM6IGBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzYCwgYGV4dDRfemVyb19yYW5nZWAsIGBleHQ0X3plcm9fcGFydGlhbF9ibG9ja3NgLCBgZXh0NF9sb2FkX3RhaWxfYmhgLCBhbmQgb2YgY291cnNlIGBleHQ0X2ZhbGxvY2F0ZWAgaXRzZWxmLiBJIG5lZWQgdG8gZ2V0IHRoZSBgRVhUNF9GU2AgY29uZmlndXJhdGlvbiB2ZXJpZmllZCBhcyB3ZWxsLlxuXG5CZWZvcmUgSSBnbyBmdXJ0aGVyLCBsZXQncyB2ZXJpZnkgaWYgYGV4dDRfbG9hZF90YWlsX2JoYCBpcyBzdGF0aWMuIFRoYXQgd2lsbCBkZXRlcm1pbmUgaG93IGVhc3kgb3IgZGlmZmljdWx0IGl0IGlzIHRvIHRlc3QgaXQgaW4gaXNvbGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjI1NSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwOToxMzozMy41Njg5MjE2ODJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyODA5MzY5NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9sb2FkX3RhaWxfYmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9pbm9kZS5jPTQwMDQ9dm9pZCBleHQ0X3NldF9hb3BzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNDAzMy0gKi9cXG5mcy9leHQ0L2lub2RlLmM6NDAzNDpzdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICpleHQ0X2xvYWRfdGFpbF9iaChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgZnJvbSlcXG5mcy9leHQ0L2lub2RlLmMtNDAzNS17XFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9NDExMj1zdGF0aWMgaW50IGV4dDRfYmxvY2tfZG9femVyb19yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgZnJvbSxcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy00MTE4LVxcbmZzL2V4dDQvaW5vZGUuYzo0MTE5OlxcdGJoID0gZXh0NF9sb2FkX3RhaWxfYmgoaW5vZGUsIGZyb20pO1xcbmZzL2V4dDQvaW5vZGUuYy00MTIwLVxcdGlmIChJU19FUlJfT1JfTlVMTChiaCkpXFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9NDEzOD1zdGF0aWMgaW50IGV4dDRfYmxvY2tfam91cm5hbGxlZF96ZXJvX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBmcm9tLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTQxNDktXFxuZnMvZXh0NC9pbm9kZS5jOjQxNTA6XFx0YmggPSBleHQ0X2xvYWRfdGFpbF9iaChpbm9kZSwgZnJvbSk7XFxuZnMvZXh0NC9pbm9kZS5jLTQxNTEtXFx0aWYgKElTX0VSUl9PUl9OVUxMKGJoKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwOToxMzozNi44NDk4NjU5MjVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU1NzkyMDEyMjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgZm9ybWF0dGVkIGFzIHJlcXVlc3RlZDpcblxuKipNYWtpbmcgU3VyZSB0aGUgRGV0YWlscyBhcmUgU2V0KipcblxuUmlnaHQsIHNvIGBleHQ0X2xvYWRfdGFpbF9iaGAgaXMgZGVmaW5pdGVseSBhIHN0YXRpYyBmdW5jdGlvbi4gSSdsbCBtYWtlIGEgbm90ZSB0byBpbmNsdWRlIHRoYXQgaW4gdGhlIGZvY3VzIHN5bWJvbHMsIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIGF2b2lkIGFueSBjb25mdXNpb24gbGF0ZXIgb24uXG5cbk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHNvbWV0aGluZyDigJMgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FU2AgZmxhZyBpcyBkZWZpbmVkIGFzIGV4cGVjdGVkLiBMZXQgbWUgY2hlY2sgdGhlIGluY2x1ZGUgZmlsZeKApiB5ZXAsIGNvbmZpcm1lZCEgSXQncyBwcm9wZXJseSBkZWZpbmVkIGluIGBpbmNsdWRlL3VhcGkvbGludXgvZmFsbG9jLmhgIGFuZCBpcyBjb3JyZWN0bHkgYXNzaWduZWQgdGhlIHZhbHVlIGAweDgwYC5cblxuT2theSwgd2l0aCB0aG9zZSBkZXRhaWxzIG5haWxlZCBkb3duLCBJJ20gY29tZm9ydGFibGUgc2V0dGluZyB0aGUgcmVzdWx0cyBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMzc2LCJPdXRwdXRUb2tlbnMiOjIwMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA5OjE2OjEyLjY0MTg4MTE3NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzUyNjMxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfYWxsb2NfZmlsZV9ibG9ja3NcIixcbiAgICBcImV4dDRfemVyb19yYW5nZVwiLFxuICAgIFwiZXh0NF96ZXJvX3BhcnRpYWxfYmxvY2tzXCIsXG4gICAgXCJleHQ0X2xvYWRfdGFpbF9iaFwiLFxuICAgIFwiZXh0NF9mYWxsb2NhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIGEgbmV3IGZhbGxvY2F0ZSBmbGFnIGBGQUxMT0NfRkxfV1JJVEVfWkVST0VTYCBpbiBleHQ0LiBJdCBtb2RpZmllcyB0aGUgY29yZSBibG9jayBhbGxvY2F0aW9uIGFuZCB6ZXJvaW5nIGxvZ2ljLCBpbmNsdWRpbmcgYGV4dDRfemVyb19yYW5nZWAsIGBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzYCwgYW5kIGBleHQ0X3plcm9fcGFydGlhbF9ibG9ja3NgLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBob3cgZXh0NCBoYW5kbGVzIHVud3JpdHRlbiBleHRlbnRzLCBwYXJ0aWFsIGJsb2NrIHplcm9pbmcsIGFuZCBvcnBoYW4gbGlzdHMgZHVyaW5nIGZhbGxvY2F0ZSBvcGVyYXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGZpbGVzeXN0ZW0gY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIHZ1bG5lcmFiaWxpdGllcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9hbGxvY19maWxlX2Jsb2Nrc1wiLFxuICAgIFwiZXh0NF96ZXJvX3JhbmdlXCIsXG4gICAgXCJleHQ0X3plcm9fcGFydGlhbF9ibG9ja3NcIixcbiAgICBcImV4dDRfbG9hZF90YWlsX2JoXCIsXG4gICAgXCJleHQ0X2ZhbGxvY2F0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgYSBuZXcgZmFsbG9jYXRlIGZsYWcgYEZBTExPQ19GTF9XUklURV9aRVJPRVNgIGluIGV4dDQuIEl0IG1vZGlmaWVzIHRoZSBjb3JlIGJsb2NrIGFsbG9jYXRpb24gYW5kIHplcm9pbmcgbG9naWMsIGluY2x1ZGluZyBgZXh0NF96ZXJvX3JhbmdlYCwgYGV4dDRfYWxsb2NfZmlsZV9ibG9ja3NgLCBhbmQgYGV4dDRfemVyb19wYXJ0aWFsX2Jsb2Nrc2AuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGhvdyBleHQ0IGhhbmRsZXMgdW53cml0dGVuIGV4dGVudHMsIHBhcnRpYWwgYmxvY2sgemVyb2luZywgYW5kIG9ycGhhbiBsaXN0cyBkdXJpbmcgZmFsbG9jYXRlIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgZmlsZXN5c3RlbSBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow99r7q[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-07 08:51:47 +0000 UTC FinishedAt: 2026-07-07 09:16: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": "d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f", "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": "d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "2aaac962-53b6-470a-858b-d0f5507911a1" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_alloc_file_blocks", "ext4_zero_range", "ext4_zero_partial_blocks", "ext4_load_tail_bh", "ext4_fallocate" ], "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+CgkJCTx0ZD4yMDI2LzA3LzA3IDA5OjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzJiMzNDssCiAgICAmIzM0O2V4dDRfemVyb19yYW5nZSYjMzQ7LAogICAgJiMzNDtleHQ0X3plcm9fcGFydGlhbF9ibG9ja3MmIzM0OywKICAgICYjMzQ7ZXh0NF9sb2FkX3RhaWxfYmgmIzM0OywKICAgICYjMzQ7ZXh0NF9mYWxsb2NhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBhIG5ldyBmYWxsb2NhdGUgZmxhZyBgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FU2AgaW4gZXh0NC4gSXQgbW9kaWZpZXMgdGhlIGNvcmUgYmxvY2sgYWxsb2NhdGlvbiBhbmQgemVyb2luZyBsb2dpYywgaW5jbHVkaW5nIGBleHQ0X3plcm9fcmFuZ2VgLCBgZXh0NF9hbGxvY19maWxlX2Jsb2Nrc2AsIGFuZCBgZXh0NF96ZXJvX3BhcnRpYWxfYmxvY2tzYC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IGV4dDQgaGFuZGxlcyB1bndyaXR0ZW4gZXh0ZW50cywgcGFydGlhbCBibG9jayB6ZXJvaW5nLCBhbmQgb3JwaGFuIGxpc3RzIGR1cmluZyBmYWxsb2NhdGUgb3BlcmF0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBmaWxlc3lzdGVtIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDA5OjExPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZWM0OTVkMDk2Y2I0OWI1YTU1MGE4MWZiNTcyNzhiNmQ1NTg3N2YzMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDcgMDk6MTE6MDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0LmggYi9mcy9leHQ0L2V4dDQuaFxuaW5kZXggOTQyODNhOTkxZTVjNGYuLmIyZTU1ODc2ZDBlMzUyIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9leHQ0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvZXh0NC5oXG5AQCAtMzA5OSw4ICYjNDM7MzA5OSwxMSBAQCBleHRlcm4gaW50IGV4dDRfY2h1bmtfdHJhbnNfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBucmJsb2Nrcyk7XG4gZXh0ZXJuIGludCBleHQ0X21ldGFfdHJhbnNfYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBsYmxvY2tzLFxuIFx0XHRcdFx0ICBpbnQgcGV4dGVudHMpO1xuIGV4dGVybiBpbnQgZXh0NF9ibG9ja196ZXJvX2VvZihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgZnJvbSwgbG9mZl90IGVuZCk7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEVYVDRfUEFSVElBTF9aRVJPX1NUQVJUXHQweDFcbiYjNDM7I2RlZmluZSBFWFQ0X1BBUlRJQUxfWkVST19FTkRcdDB4MlxuIGV4dGVybiBpbnQgZXh0NF96ZXJvX3BhcnRpYWxfYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBsc3RhcnQsXG4tXHRcdFx0XHQgICAgbG9mZl90IGxlbmd0aCwgYm9vbCAqZGlkX3plcm8pO1xuJiM0MztcdFx0XHRcdCAgICBsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgKnBhcnRpYWxfemVyb2VkKTtcbiBleHRlcm4gdm1fZmF1bHRfdCBleHQ0X3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XG4gZXh0ZXJuIHFzaXplX3QgKmV4dDRfZ2V0X3Jlc2VydmVkX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIGV4dGVybiBpbnQgZXh0NF9nZXRfcHJvamlkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGtwcm9qaWRfdCAqcHJvamlkKTtcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dGVudHMuYyBiL2ZzL2V4dDQvZXh0ZW50cy5jXG5pbmRleCAxMjVmNjI4ZTczOGFiMS4uOGM3YTk4NDA1YTY0MmYgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2V4dGVudHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9leHRlbnRzLmNcbkBAIC00NTg1LDYgJiM0Mzs0NTg1LDcgQEAgc3RhdGljIGludCBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuLFxuIFx0bG9mZl90IGVwb3MgPSAwLCBvbGRfc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcbiBcdHVuc2lnbmVkIGludCBibGtiaXRzID0gaW5vZGUtXHUwMDNlaV9ibGtiaXRzO1xuIFx0Ym9vbCBhbGxvY196ZXJvID0gZmFsc2U7XG4mIzQzO1x0Ym9vbCBvcnBoYW4gPSBmYWxzZTtcbiBcbiBcdEJVR19PTighZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUykpO1xuIFx0bWFwLm1fbGJsayA9IG9mZnNldCBcdTAwM2VcdTAwM2UgYmxrYml0cztcbkBAIC00NjU5LDEyICYjNDM7NDY2MCwzMCBAQCBzdGF0aWMgaW50IGV4dDRfYWxsb2NfZmlsZV9ibG9ja3Moc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4sXG4gXG4gXHRcdGlmIChhbGxvY196ZXJvIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgKG1hcC5tX2ZsYWdzIFx1MDAyNiAoRVhUNF9NQVBfTUFQUEVEIHwgRVhUNF9NQVBfVU5XUklUVEVOKSkpIHtcbiYjNDM7XHRcdFx0V0FSTl9PTl9PTkNFKG1hcC5tX2xibGsgJiM0MzsgbWFwLm1fbGVuIFx1MDAzZVxuJiM0MztcdFx0XHRcdEVYVDRfQl9UT19MQkxLKGlub2RlLCBuZXdfc2l6ZSA/OiBvbGRfc2l6ZSkpO1xuJiM0MztcbiBcdFx0XHRyZXQgPSBleHQ0X2lzc3VlX3plcm9vdXQoaW5vZGUsIG1hcC5tX2xibGssIG1hcC5tX3BibGssXG4gXHRcdFx0XHRcdFx0IG1hcC5tX2xlbik7XG4tXHRcdFx0aWYgKGxpa2VseSghcmV0KSlcbi1cdFx0XHRcdHJldCA9IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhOVUxMLFxuJiM0MztcdFx0XHRpZiAodW5saWtlbHkocmV0KSlcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRcdGhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgRVhUNF9IVF9NQVBfQkxPQ0tTLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgY3JlZGl0cyk7XG4mIzQzO1x0XHRcdGlmIChJU19FUlIoaGFuZGxlKSkge1xuJiM0MztcdFx0XHRcdHJldCA9IFBUUl9FUlIoaGFuZGxlKTtcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0cmV0ID0gZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKGhhbmRsZSxcbiBcdFx0XHRcdFx0aW5vZGUsIChsb2ZmX3QpbWFwLm1fbGJsayBcdTAwM2NcdTAwM2MgYmxrYml0cyxcbiBcdFx0XHRcdFx0KGxvZmZfdCltYXAubV9sZW4gXHUwMDNjXHUwMDNjIGJsa2JpdHMpO1xuJiM0MztcdFx0XHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgbmV3X3NpemUpIHtcbiYjNDM7XHRcdFx0XHRyZXQgPSBleHQ0X29ycGhhbl9hZGQoaGFuZGxlLCBpbm9kZSk7XG4mIzQzO1x0XHRcdFx0b3JwaGFuID0gdHJ1ZTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRyZXQyID0gZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcbiYjNDM7XHRcdFx0cmV0ID0gcmV0ID8gcmV0IDogcmV0MjtcbiBcdFx0XHRpZiAocmV0KVxuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdH1cbkBAIC00Njg3LDEyICYjNDM7NDcwNiwxNyBAQCBzdGF0aWMgaW50IGV4dDRfYWxsb2NfZmlsZV9ibG9ja3Moc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4sXG4gXHRpZiAoZXBvcyBcdTAwM2UgbmV3X3NpemUpXG4gXHRcdGVwb3MgPSBuZXdfc2l6ZTtcbiBcbi1cdGhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgRVhUNF9IVF9NSVNDLCAxKTtcbi1cdGlmIChJU19FUlIoaGFuZGxlKSlcbiYjNDM7XHRoYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIEVYVDRfSFRfTUlTQywgMik7XG4mIzQzO1x0aWYgKElTX0VSUihoYW5kbGUpKSB7XG4mIzQzO1x0XHRpZiAob3JwaGFuIFx1MDAyNlx1MDAyNiBpbm9kZS1cdTAwM2VpX25saW5rKVxuJiM0MztcdFx0XHRleHQ0X29ycGhhbl9kZWwoTlVMTCwgaW5vZGUpO1xuIFx0XHRyZXR1cm4gcmV0ID8gcmV0IDogUFRSX0VSUihoYW5kbGUpO1xuJiM0MztcdH1cbiBcbiBcdGV4dDRfdXBkYXRlX2lub2RlX3NpemUoaW5vZGUsIGVwb3MpO1xuIFx0cmV0MiA9IGV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTtcbiYjNDM7XHRpZiAob3JwaGFuIFx1MDAyNlx1MDAyNiBpbm9kZS1cdTAwM2VpX25saW5rKVxuJiM0MztcdFx0ZXh0NF9vcnBoYW5fZGVsKGhhbmRsZSwgaW5vZGUpO1xuIFx0ZXh0NF91cGRhdGVfaW5vZGVfZnN5bmNfdHJhbnMoaGFuZGxlLCBpbm9kZSwgMSk7XG4gXHRyZXQzID0gZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcbiBcdHJldDIgPSByZXQzID8gcmV0MyA6IHJldDI7XG5AQCAtNDcxNSw3ICYjNDM7NDczOSw3IEBAIHN0YXRpYyBsb25nIGV4dDRfemVyb19yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCxcbiBcdGxvZmZfdCBhbGlnbl9zdGFydCwgYWxpZ25fZW5kLCBuZXdfc2l6ZSA9IDA7XG4gXHRsb2ZmX3QgZW5kID0gb2Zmc2V0ICYjNDM7IGxlbjtcbiBcdHVuc2lnbmVkIGludCBibG9ja3NpemUgPSBpX2Jsb2Nrc2l6ZShpbm9kZSk7XG4tXHRib29sIHBhcnRpYWxfemVyb2VkID0gZmFsc2U7XG4mIzQzO1x0dW5zaWduZWQgaW50IHBhcnRpYWxfemVyb2VkID0gMDtcbiBcdGludCByZXQsIGZsYWdzO1xuIFxuIFx0dHJhY2VfZXh0NF96ZXJvX3JhbmdlKGlub2RlLCBvZmZzZXQsIGxlbiwgbW9kZSk7XG5AQCAtNDczNCwxMCAmIzQzOzQ3NTgsMTYgQEAgc3RhdGljIGxvbmcgZXh0NF96ZXJvX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LFxuIFx0fVxuIFxuIFx0ZmxhZ3MgPSBFWFQ0X0dFVF9CTE9DS1NfQ1JFQVRFX1VOV1JJVF9FWFQ7XG4tXHQvKiBQcmVhbGxvY2F0ZSB0aGUgcmFuZ2UgaW5jbHVkaW5nIHRoZSB1bmFsaWduZWQgZWRnZXMgKi9cbiYjNDM7XHQvKlxuJiM0MztcdCAqIFByZWFsbG9jYXRlIHRoZSByYW5nZSBpbmNsdWRpbmcgdGhlIHVuYWxpZ25lZCBlZGdlcywgYW5kIHplcm9cbiYjNDM7XHQgKiBvdXQgcGFydGlhbCBibG9ja3MgaWYgdGhleSBhbHJlYWR5IGNvbnRhaW4gZGF0YS5cbiYjNDM7XHQgKi9cbiBcdGlmICghSVNfQUxJR05FRChvZmZzZXQgfCBlbmQsIGJsb2Nrc2l6ZSkpIHtcbiBcdFx0cmV0ID0gZXh0NF9hbGxvY19maWxlX2Jsb2NrcyhmaWxlLCBvZmZzZXQsIGxlbiwgbmV3X3NpemUsXG4gXHRcdFx0XHRcdCAgICAgZmxhZ3MpO1xuJiM0MztcdFx0aWYgKCFyZXQpXG4mIzQzO1x0XHRcdHJldCA9IGV4dDRfemVyb19wYXJ0aWFsX2Jsb2Nrcyhpbm9kZSwgb2Zmc2V0LCBsZW4sXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBcdTAwMjZwYXJ0aWFsX3plcm9lZCk7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0cmV0dXJuIHJldDtcbiBcdH1cbkBAIC00NzU0LDYgJiM0Mzs0Nzg0LDIxIEBAIHN0YXRpYyBsb25nIGV4dDRfemVyb19yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCxcbiBcdC8qIFplcm8gcmFuZ2UgZXhjbHVkaW5nIHRoZSB1bmFsaWduZWQgZWRnZXMgKi9cbiBcdGFsaWduX3N0YXJ0ID0gcm91bmRfdXAob2Zmc2V0LCBibG9ja3NpemUpO1xuIFx0YWxpZ25fZW5kID0gcm91bmRfZG93bihlbmQsIGJsb2Nrc2l6ZSk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSW4gV1JJVEVfWkVST0VTIG1vZGUsIGVkZ2VzIHRoYXQgd2VyZSBub3QgcGFydGlhbC16ZXJvZWQgKGNsZWFuXG4mIzQzO1x0ICogdW53cml0dGVuIG9yIGhvbGUpIG11c3QgYmUgYWxsb2NhdGVkIGFuZCB6ZXJvZWQgYXMgd2hvbGUgYmxvY2tzLlxuJiM0MztcdCAqIEV4cGFuZCB0aGUgYWxpZ25lZCByYW5nZSBvdXR3YXJkIHRvIGNvdmVyIHRoZW0uXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9XUklURV9aRVJPRVMpIHtcbiYjNDM7XHRcdGlmICghSVNfQUxJR05FRChvZmZzZXQsIGJsb2Nrc2l6ZSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIShwYXJ0aWFsX3plcm9lZCBcdTAwMjYgRVhUNF9QQVJUSUFMX1pFUk9fU1RBUlQpKVxuJiM0MztcdFx0XHRhbGlnbl9zdGFydCA9IHJvdW5kX2Rvd24ob2Zmc2V0LCBibG9ja3NpemUpO1xuJiM0MztcdFx0aWYgKCFJU19BTElHTkVEKGVuZCwgYmxvY2tzaXplKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhKHBhcnRpYWxfemVyb2VkIFx1MDAyNiBFWFQ0X1BBUlRJQUxfWkVST19FTkQpKVxuJiM0MztcdFx0XHRhbGlnbl9lbmQgPSByb3VuZF91cChlbmQsIGJsb2Nrc2l6ZSk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChhbGlnbl9lbmQgXHUwMDNlIGFsaWduX3N0YXJ0KSB7XG4gXHRcdGlmIChtb2RlIFx1MDAyNiBGQUxMT0NfRkxfV1JJVEVfWkVST0VTKVxuIFx0XHRcdGZsYWdzID0gRVhUNF9HRVRfQkxPQ0tTX0NSRUFURV9aRVJPIHwgRVhUNF9FWF9OT0NBQ0hFO1xuQEAgLTQ3NzAsMTEgJiM0Mzs0ODE1LDE1IEBAIHN0YXRpYyBsb25nIGV4dDRfemVyb19yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCxcbiBcdGlmIChJU19BTElHTkVEKG9mZnNldCB8IGVuZCwgYmxvY2tzaXplKSlcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdC8qIFplcm8gb3V0IHBhcnRpYWwgYmxvY2sgYXQgdGhlIGVkZ2VzIG9mIHRoZSByYW5nZSAqL1xuLVx0cmV0ID0gZXh0NF96ZXJvX3BhcnRpYWxfYmxvY2tzKGlub2RlLCBvZmZzZXQsIGxlbiwgXHUwMDI2cGFydGlhbF96ZXJvZWQpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cdGlmICgoKGZpbGUtXHUwMDNlZl9mbGFncyBcdTAwMjYgT19TWU5DKSB8fCBJU19TWU5DKGlub2RlKSkgXHUwMDI2XHUwMDI2IHBhcnRpYWxfemVyb2VkKSB7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJbiBGQUxMT0NfRkxfV1JJVEVfWkVST0VTIG1vZGUsIGVkZ2VzIHRoYXQgaGF2ZSBiZWVuIHBhcnRpYWxseVxuJiM0MztcdCAqIHplcm9lZCBtdXN0IGJlIHdyaXR0ZW4gYmFjayB0byBlbnN1cmUgdGhlIGVudGlyZSB6ZXJvZWQgcmFuZ2VcbiYjNDM7XHQgKiBpcyBjb252ZXJ0ZWQgdG8gdGhlIHdyaXR0ZW4gc3RhdGUuIEluIFNZTkMgbW9kZSwgd3JpdGViYWNrIGlzXG4mIzQzO1x0ICogYWxzbyByZXF1aXJlZCB0byBwZXJzaXN0IHRoZSB6ZXJvZWQgZGF0YSB0byBkaXNrLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChwYXJ0aWFsX3plcm9lZCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgKChtb2RlIFx1MDAyNiBGQUxMT0NfRkxfV1JJVEVfWkVST0VTKSB8fFxuJiM0MztcdCAgICAgKGZpbGUtXHUwMDNlZl9mbGFncyBcdTAwMjYgT19TWU5DKSB8fCBJU19TWU5DKGlub2RlKSkpIHtcbiBcdFx0cmV0ID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdF9yYW5nZShpbm9kZS1cdTAwM2VpX21hcHBpbmcsIG9mZnNldCxcbiBcdFx0XHRcdFx0XHQgICBlbmQgLSAxKTtcbiBcdFx0aWYgKHJldClcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmNcbmluZGV4IGMyYzJkNmFjN2YzZDEzLi5iNTIxN2Q1ZmU5NTQwYiAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9pbm9kZS5jXG5AQCAtNDAyNiw2ICYjNDM7NDAyNiwxMCBAQCB2b2lkIGV4dDRfc2V0X2FvcHMoc3RydWN0IGlub2RlICppbm9kZSlcbiAgKiBiZWNhdXNlIGl0IG1pZ2h0IGhhdmUgZGF0YSBpbiBwYWdlY2FjaGUgKGVnLCBpZiBjYWxsZWQgZnJvbSBleHQ0X3plcm9fcmFuZ2UsXG4gICogZXh0NF9wdW5jaF9ob2xlLCBldGMpIHdoaWNoIG5lZWRzIHRvIGJlIHByb3Blcmx5IHplcm9lZCBvdXQuIE90aGVyd2lzZSBhXG4gICogcmFjaW5nIHdyaXRlYmFjayBjYW4gY29tZSBsYXRlciBhbmQgZmx1c2ggdGhlIHN0YWxlIHBhZ2VjYWNoZSB0byBkaXNrLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm4gdGhlIGxvYWRlZCBiaCBpZiBpdCBhY3R1YWxseSBuZWVkcyB6ZXJvaW5nIC0gaW4gd3JpdHRlbiwgZGlydHlcbiYjNDM7ICogdW53cml0dGVuLCBvciBkZWxhbGxvYyBzdGF0ZS4gUmV0dXJuIE5VTEwgaWYgaXQmIzM5O3MgY2xlYW4gKGkuZS4sIGEgaG9sZSBvclxuJiM0MzsgKiBhIGNsZWFuIHVud3JpdHRlbiBibG9jaykuXG4gICovXG4gc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqZXh0NF9sb2FkX3RhaWxfYmgoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGZyb20pXG4ge1xuQEAgLTQwNjUsNyAmIzQzOzQwNjksMTIgQEAgc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqZXh0NF9sb2FkX3RhaWxfYmgoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGZyb20pXG4gXHRpZiAoIWJ1ZmZlcl9tYXBwZWQoYmgpKSB7XG4gXHRcdEJVRkZFUl9UUkFDRShiaCwgXCYjMzQ7dW5tYXBwZWRcJiMzNDspO1xuIFx0XHRleHQ0X2dldF9ibG9jayhpbm9kZSwgaWJsb2NrLCBiaCwgMCk7XG4tXHRcdC8qIHVubWFwcGVkPyBJdCYjMzk7cyBhIGhvbGUgLSBub3RoaW5nIHRvIGRvICovXG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogSXQmIzM5O3MgYSBob2xlIG9yIGEgY2xlYW4gdW53cml0dGVuIGJsb2NrIC0gbm90aGluZyB0byBkby5cbiYjNDM7XHRcdCAqIE5vdGUgdGhhdCBhIGxvb2t1cC1vbmx5IGdldF9ibG9jayAod2l0aG91dFxuJiM0MztcdFx0ICogRVhUNF9HRVRfQkxPQ0tTX0NSRUFURSkgbmV2ZXIgc2V0cyBCSF9NYXBwZWQgZm9yIGNsZWFuXG4mIzQzO1x0XHQgKiB1bndyaXR0ZW4gZXh0ZW50cy5cbiYjNDM7XHRcdCAqL1xuIFx0XHRpZiAoIWJ1ZmZlcl9tYXBwZWQoYmgpKSB7XG4gXHRcdFx0QlVGRkVSX1RSQUNFKGJoLCBcJiMzNDtzdGlsbCB1bm1hcHBlZFwmIzM0Oyk7XG4gXHRcdFx0Z290byB1bmxvY2s7XG5AQCAtNDI1MiwxMyAmIzQzOzQyNjEsMjYgQEAgaW50IGV4dDRfYmxvY2tfemVyb19lb2Yoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGZyb20sIGxvZmZfdCBlbmQpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFplcm8gb3V0IHRoZSB1bmFsaWduZWQgaGVhZCBhbmQgdGFpbCBvZiB0aGUgW2xzdGFydCwgbHN0YXJ0JiM0MztsZW5ndGgpXG4mIzQzOyAqIHJhbmdlLlxuJiM0MzsgKlxuJiM0MzsgKiBPbiByZXR1cm4sIEBwYXJ0aWFsX3plcm9lZCByZWNvcmRzIHdoaWNoIGVkZ2VzIGFjdHVhbGx5IGdvdFxuJiM0MzsgKiBwYXJ0aWFsLXplcm9lZC4gIFNldCBFWFQ0X1BBUlRJQUxfWkVST19TVEFSVC9FWFQ0X1BBUlRJQUxfWkVST19FTkQgaWZcbiYjNDM7ICogdGhlIGhlYWQvdGFpbCBibG9jayBnb3QgYWN0dWFsbHkgcGFydGlhbGx5IHplcm9lZCAoaW4gd3JpdHRlbiwgZGlydHlcbiYjNDM7ICogdW53cml0dGVuIG9yIGRlbGFsbG9jIHN0YXRlKS4gIENsZWFyZWQgaWYgdGhlIGhlYWQvdGFpbCBibG9jayBpcyBhXG4mIzQzOyAqIGhvbGUgb3IgYSBjbGVhbiB1bndyaXR0ZW4gYmxvY2ssIGluIHdoaWNoIGNhc2UgdGhlcmUgaXMgbm90aGluZyB0aGF0XG4mIzQzOyAqIG5lZWRzIHplcm9pbmcuICBXaGVuIHRoZSBoZWFkIGFuZCB0YWlsIGxhbmQgaW4gdGhlIHNhbWUgYmxvY2ssIGJvdGhcbiYjNDM7ICogYml0cyBhcmUgc2V0IHRvZ2V0aGVyIG9uIGEgc3VjY2Vzc2Z1bCB6ZXJvaW5nLlxuJiM0MzsgKi9cbiBpbnQgZXh0NF96ZXJvX3BhcnRpYWxfYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBsc3RhcnQsIGxvZmZfdCBsZW5ndGgsXG4tXHRcdFx0ICAgICBib29sICpkaWRfemVybylcbiYjNDM7XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgKnBhcnRpYWxfemVyb2VkKVxuIHtcbiBcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuIFx0dW5zaWduZWQgcGFydGlhbF9zdGFydCwgcGFydGlhbF9lbmQ7XG4gXHRleHQ0X2ZzYmxrX3Qgc3RhcnQsIGVuZDtcbiBcdGxvZmZfdCBieXRlX2VuZCA9IChsc3RhcnQgJiM0MzsgbGVuZ3RoIC0gMSk7XG4mIzQzO1x0Ym9vbCBkaWRfemVybyA9IGZhbHNlO1xuIFx0aW50IGVyciA9IDA7XG4gXG4gXHRwYXJ0aWFsX3N0YXJ0ID0gbHN0YXJ0IFx1MDAyNiAoc2ItXHUwMDNlc19ibG9ja3NpemUgLSAxKTtcbkBAIC00MjcwLDIxICYjNDM7NDI5MiwzMiBAQCBpbnQgZXh0NF96ZXJvX3BhcnRpYWxfYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBsc3RhcnQsIGxvZmZfdCBsZW5ndGgsXG4gXHQvKiBIYW5kbGUgcGFydGlhbCB6ZXJvIHdpdGhpbiB0aGUgc2luZ2xlIGJsb2NrICovXG4gXHRpZiAoc3RhcnQgPT0gZW5kIFx1MDAyNlx1MDAyNlxuIFx0ICAgIChwYXJ0aWFsX3N0YXJ0IHx8IChwYXJ0aWFsX2VuZCAhPSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZSAtIDEpKSkge1xuLVx0XHRlcnIgPSBleHQ0X2Jsb2NrX3plcm9fcmFuZ2UoaW5vZGUsIGxzdGFydCwgbGVuZ3RoLCBkaWRfemVybyxcbiYjNDM7XHRcdGVyciA9IGV4dDRfYmxvY2tfemVyb19yYW5nZShpbm9kZSwgbHN0YXJ0LCBsZW5ndGgsIFx1MDAyNmRpZF96ZXJvLFxuIFx0XHRcdFx0XHQgICAgTlVMTCk7XG4mIzQzO1x0XHRpZiAoZGlkX3plcm8pXG4mIzQzO1x0XHRcdCpwYXJ0aWFsX3plcm9lZCB8PSAoRVhUNF9QQVJUSUFMX1pFUk9fU1RBUlQgfFxuJiM0MztcdFx0XHRcdFx0ICAgIEVYVDRfUEFSVElBTF9aRVJPX0VORCk7XG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXHQvKiBIYW5kbGUgcGFydGlhbCB6ZXJvIG91dCBvbiB0aGUgc3RhcnQgb2YgdGhlIHJhbmdlICovXG4gXHRpZiAocGFydGlhbF9zdGFydCkge1xuIFx0XHRlcnIgPSBleHQ0X2Jsb2NrX3plcm9fcmFuZ2UoaW5vZGUsIGxzdGFydCwgc2ItXHUwMDNlc19ibG9ja3NpemUsXG4tXHRcdFx0XHRcdCAgICBkaWRfemVybywgTlVMTCk7XG4mIzQzO1x0XHRcdFx0XHQgICAgXHUwMDI2ZGlkX3plcm8sIE5VTEwpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHRpZiAoZGlkX3plcm8pXG4mIzQzO1x0XHRcdCpwYXJ0aWFsX3plcm9lZCB8PSBFWFQ0X1BBUlRJQUxfWkVST19TVEFSVDtcbiBcdH1cbiBcdC8qIEhhbmRsZSBwYXJ0aWFsIHplcm8gb3V0IG9uIHRoZSBlbmQgb2YgdGhlIHJhbmdlICovXG4tXHRpZiAocGFydGlhbF9lbmQgIT0gc2ItXHUwMDNlc19ibG9ja3NpemUgLSAxKVxuJiM0MztcdGlmIChwYXJ0aWFsX2VuZCAhPSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZSAtIDEpIHtcbiYjNDM7XHRcdGRpZF96ZXJvID0gZmFsc2U7XG4gXHRcdGVyciA9IGV4dDRfYmxvY2tfemVyb19yYW5nZShpbm9kZSwgYnl0ZV9lbmQgLSBwYXJ0aWFsX2VuZCxcbi1cdFx0XHRcdFx0ICAgIHBhcnRpYWxfZW5kICYjNDM7IDEsIGRpZF96ZXJvLCBOVUxMKTtcbiYjNDM7XHRcdFx0XHRcdCAgICBwYXJ0aWFsX2VuZCAmIzQzOyAxLCBcdTAwMjZkaWRfemVybywgTlVMTCk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0aWYgKGRpZF96ZXJvKVxuJiM0MztcdFx0XHQqcGFydGlhbF96ZXJvZWQgfD0gRVhUNF9QQVJUSUFMX1pFUk9fRU5EO1xuJiM0MztcdH1cbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuQEAgLTQ0MzMsNyAmIzQzOzQ0NjYsNyBAQCBpbnQgZXh0NF9wdW5jaF9ob2xlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoKVxuIFx0bG9mZl90IGVuZCA9IG9mZnNldCAmIzQzOyBsZW5ndGg7XG4gXHRoYW5kbGVfdCAqaGFuZGxlO1xuIFx0dW5zaWduZWQgaW50IGNyZWRpdHM7XG4tXHRib29sIHBhcnRpYWxfemVyb2VkID0gZmFsc2U7XG4mIzQzO1x0dW5zaWduZWQgaW50IHBhcnRpYWxfemVyb2VkID0gMDtcbiBcdGludCByZXQ7XG4gXG4gXHR0cmFjZV9leHQ0X3B1bmNoX2hvbGUoaW5vZGUsIG9mZnNldCwgbGVuZ3RoLCAwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwOToxMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT41bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9hbGxvY19maWxlX2Jsb2NrcyYjMzQ7LAogICAgJiMzNDtleHQ0X3plcm9fcmFuZ2UmIzM0OywKICAgICYjMzQ7ZXh0NF96ZXJvX3BhcnRpYWxfYmxvY2tzJiMzNDssCiAgICAmIzM0O2V4dDRfbG9hZF90YWlsX2JoJiMzNDssCiAgICAmIzM0O2V4dDRfZmFsbG9jYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgYSBuZXcgZmFsbG9jYXRlIGZsYWcgYEZBTExPQ19GTF9XUklURV9aRVJPRVNgIGluIGV4dDQuIEl0IG1vZGlmaWVzIHRoZSBjb3JlIGJsb2NrIGFsbG9jYXRpb24gYW5kIHplcm9pbmcgbG9naWMsIGluY2x1ZGluZyBgZXh0NF96ZXJvX3JhbmdlYCwgYGV4dDRfYWxsb2NfZmlsZV9ibG9ja3NgLCBhbmQgYGV4dDRfemVyb19wYXJ0aWFsX2Jsb2Nrc2AuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGhvdyBleHQ0IGhhbmRsZXMgdW53cml0dGVuIGV4dGVudHMsIHBhcnRpYWwgYmxvY2sgemVyb2luZywgYW5kIG9ycGhhbiBsaXN0cyBkdXJpbmcgZmFsbG9jYXRlIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgZmlsZXN5c3RlbSBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIHZ1bG5lcmFiaWxpdGllcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWM0OTVkMDk2Y2I0OWI1YTU1MGE4MWZiNTcyNzhiNmQ1NTg3N2YzMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVsIDcgMDk6MTE6MDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oCmluZGV4IDk0MjgzYTk5MWU1YzRmLi5iMmU1NTg3NmQwZTM1MiAxMDA2NDQKLS0tIGEvZnMvZXh0NC9leHQ0LmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9leHQ0LmgKQEAgLTMwOTksOCAmIzQzOzMwOTksMTEgQEAgZXh0ZXJuIGludCBleHQ0X2NodW5rX3RyYW5zX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbnJibG9ja3MpOwogZXh0ZXJuIGludCBleHQ0X21ldGFfdHJhbnNfYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBsYmxvY2tzLAogCQkJCSAgaW50IHBleHRlbnRzKTsKIGV4dGVybiBpbnQgZXh0NF9ibG9ja196ZXJvX2VvZihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgZnJvbSwgbG9mZl90IGVuZCk7CiYjNDM7CiYjNDM7I2RlZmluZSBFWFQ0X1BBUlRJQUxfWkVST19TVEFSVAkweDEKJiM0MzsjZGVmaW5lIEVYVDRfUEFSVElBTF9aRVJPX0VORAkweDIKIGV4dGVybiBpbnQgZXh0NF96ZXJvX3BhcnRpYWxfYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBsc3RhcnQsCi0JCQkJICAgIGxvZmZfdCBsZW5ndGgsIGJvb2wgKmRpZF96ZXJvKTsKJiM0MzsJCQkJICAgIGxvZmZfdCBsZW5ndGgsIHVuc2lnbmVkIGludCAqcGFydGlhbF96ZXJvZWQpOwogZXh0ZXJuIHZtX2ZhdWx0X3QgZXh0NF9wYWdlX21rd3JpdGUoc3RydWN0IHZtX2ZhdWx0ICp2bWYpOwogZXh0ZXJuIHFzaXplX3QgKmV4dDRfZ2V0X3Jlc2VydmVkX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogZXh0ZXJuIGludCBleHQ0X2dldF9wcm9qaWQoc3RydWN0IGlub2RlICppbm9kZSwga3Byb2ppZF90ICpwcm9qaWQpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHRlbnRzLmMgYi9mcy9leHQ0L2V4dGVudHMuYwppbmRleCAxMjVmNjI4ZTczOGFiMS4uOGM3YTk4NDA1YTY0MmYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0ZW50cy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvZXh0ZW50cy5jCkBAIC00NTg1LDYgJiM0Mzs0NTg1LDcgQEAgc3RhdGljIGludCBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuLAogCWxvZmZfdCBlcG9zID0gMCwgb2xkX3NpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7CiAJdW5zaWduZWQgaW50IGJsa2JpdHMgPSBpbm9kZS0mZ3Q7aV9ibGtiaXRzOwogCWJvb2wgYWxsb2NfemVybyA9IGZhbHNlOwomIzQzOwlib29sIG9ycGhhbiA9IGZhbHNlOwogCiAJQlVHX09OKCFleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKSk7CiAJbWFwLm1fbGJsayA9IG9mZnNldCAmZ3Q7Jmd0OyBibGtiaXRzOwpAQCAtNDY1OSwxMiAmIzQzOzQ2NjAsMzAgQEAgc3RhdGljIGludCBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuLAogCiAJCWlmIChhbGxvY196ZXJvICZhbXA7JmFtcDsKIAkJICAgIChtYXAubV9mbGFncyAmYW1wOyAoRVhUNF9NQVBfTUFQUEVEIHwgRVhUNF9NQVBfVU5XUklUVEVOKSkpIHsKJiM0MzsJCQlXQVJOX09OX09OQ0UobWFwLm1fbGJsayAmIzQzOyBtYXAubV9sZW4gJmd0OwomIzQzOwkJCQlFWFQ0X0JfVE9fTEJMSyhpbm9kZSwgbmV3X3NpemUgPzogb2xkX3NpemUpKTsKJiM0MzsKIAkJCXJldCA9IGV4dDRfaXNzdWVfemVyb291dChpbm9kZSwgbWFwLm1fbGJsaywgbWFwLm1fcGJsaywKIAkJCQkJCSBtYXAubV9sZW4pOwotCQkJaWYgKGxpa2VseSghcmV0KSkKLQkJCQlyZXQgPSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoTlVMTCwKJiM0MzsJCQlpZiAodW5saWtlbHkocmV0KSkKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CiYjNDM7CQkJaGFuZGxlID0gZXh0NF9qb3VybmFsX3N0YXJ0KGlub2RlLCBFWFQ0X0hUX01BUF9CTE9DS1MsCiYjNDM7CQkJCQkJICAgIGNyZWRpdHMpOwomIzQzOwkJCWlmIChJU19FUlIoaGFuZGxlKSkgewomIzQzOwkJCQlyZXQgPSBQVFJfRVJSKGhhbmRsZSk7CiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCX0KJiM0MzsKJiM0MzsJCQlyZXQgPSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoaGFuZGxlLAogCQkJCQlpbm9kZSwgKGxvZmZfdCltYXAubV9sYmxrICZsdDsmbHQ7IGJsa2JpdHMsCiAJCQkJCShsb2ZmX3QpbWFwLm1fbGVuICZsdDsmbHQ7IGJsa2JpdHMpOwomIzQzOwkJCWlmICghcmV0ICZhbXA7JmFtcDsgbmV3X3NpemUpIHsKJiM0MzsJCQkJcmV0ID0gZXh0NF9vcnBoYW5fYWRkKGhhbmRsZSwgaW5vZGUpOwomIzQzOwkJCQlvcnBoYW4gPSB0cnVlOwomIzQzOwkJCX0KJiM0MzsJCQlyZXQyID0gZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTsKJiM0MzsJCQlyZXQgPSByZXQgPyByZXQgOiByZXQyOwogCQkJaWYgKHJldCkKIAkJCQlicmVhazsKIAkJfQpAQCAtNDY4NywxMiAmIzQzOzQ3MDYsMTcgQEAgc3RhdGljIGludCBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuLAogCWlmIChlcG9zICZndDsgbmV3X3NpemUpCiAJCWVwb3MgPSBuZXdfc2l6ZTsKIAotCWhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgRVhUNF9IVF9NSVNDLCAxKTsKLQlpZiAoSVNfRVJSKGhhbmRsZSkpCiYjNDM7CWhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgRVhUNF9IVF9NSVNDLCAyKTsKJiM0MzsJaWYgKElTX0VSUihoYW5kbGUpKSB7CiYjNDM7CQlpZiAob3JwaGFuICZhbXA7JmFtcDsgaW5vZGUtJmd0O2lfbmxpbmspCiYjNDM7CQkJZXh0NF9vcnBoYW5fZGVsKE5VTEwsIGlub2RlKTsKIAkJcmV0dXJuIHJldCA/IHJldCA6IFBUUl9FUlIoaGFuZGxlKTsKJiM0MzsJfQogCiAJZXh0NF91cGRhdGVfaW5vZGVfc2l6ZShpbm9kZSwgZXBvcyk7CiAJcmV0MiA9IGV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTsKJiM0MzsJaWYgKG9ycGhhbiAmYW1wOyZhbXA7IGlub2RlLSZndDtpX25saW5rKQomIzQzOwkJZXh0NF9vcnBoYW5fZGVsKGhhbmRsZSwgaW5vZGUpOwogCWV4dDRfdXBkYXRlX2lub2RlX2ZzeW5jX3RyYW5zKGhhbmRsZSwgaW5vZGUsIDEpOwogCXJldDMgPSBleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpOwogCXJldDIgPSByZXQzID8gcmV0MyA6IHJldDI7CkBAIC00NzE1LDcgJiM0Mzs0NzM5LDcgQEAgc3RhdGljIGxvbmcgZXh0NF96ZXJvX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LAogCWxvZmZfdCBhbGlnbl9zdGFydCwgYWxpZ25fZW5kLCBuZXdfc2l6ZSA9IDA7CiAJbG9mZl90IGVuZCA9IG9mZnNldCAmIzQzOyBsZW47CiAJdW5zaWduZWQgaW50IGJsb2Nrc2l6ZSA9IGlfYmxvY2tzaXplKGlub2RlKTsKLQlib29sIHBhcnRpYWxfemVyb2VkID0gZmFsc2U7CiYjNDM7CXVuc2lnbmVkIGludCBwYXJ0aWFsX3plcm9lZCA9IDA7CiAJaW50IHJldCwgZmxhZ3M7CiAKIAl0cmFjZV9leHQ0X3plcm9fcmFuZ2UoaW5vZGUsIG9mZnNldCwgbGVuLCBtb2RlKTsKQEAgLTQ3MzQsMTAgJiM0Mzs0NzU4LDE2IEBAIHN0YXRpYyBsb25nIGV4dDRfemVyb19yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwKIAl9CiAKIAlmbGFncyA9IEVYVDRfR0VUX0JMT0NLU19DUkVBVEVfVU5XUklUX0VYVDsKLQkvKiBQcmVhbGxvY2F0ZSB0aGUgcmFuZ2UgaW5jbHVkaW5nIHRoZSB1bmFsaWduZWQgZWRnZXMgKi8KJiM0MzsJLyoKJiM0MzsJICogUHJlYWxsb2NhdGUgdGhlIHJhbmdlIGluY2x1ZGluZyB0aGUgdW5hbGlnbmVkIGVkZ2VzLCBhbmQgemVybwomIzQzOwkgKiBvdXQgcGFydGlhbCBibG9ja3MgaWYgdGhleSBhbHJlYWR5IGNvbnRhaW4gZGF0YS4KJiM0MzsJICovCiAJaWYgKCFJU19BTElHTkVEKG9mZnNldCB8IGVuZCwgYmxvY2tzaXplKSkgewogCQlyZXQgPSBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzKGZpbGUsIG9mZnNldCwgbGVuLCBuZXdfc2l6ZSwKIAkJCQkJICAgICBmbGFncyk7CiYjNDM7CQlpZiAoIXJldCkKJiM0MzsJCQlyZXQgPSBleHQ0X3plcm9fcGFydGlhbF9ibG9ja3MoaW5vZGUsIG9mZnNldCwgbGVuLAomIzQzOwkJCQkJCSAgICAgICAmYW1wO3BhcnRpYWxfemVyb2VkKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAJfQpAQCAtNDc1NCw2ICYjNDM7NDc4NCwyMSBAQCBzdGF0aWMgbG9uZyBleHQ0X3plcm9fcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsCiAJLyogWmVybyByYW5nZSBleGNsdWRpbmcgdGhlIHVuYWxpZ25lZCBlZGdlcyAqLwogCWFsaWduX3N0YXJ0ID0gcm91bmRfdXAob2Zmc2V0LCBibG9ja3NpemUpOwogCWFsaWduX2VuZCA9IHJvdW5kX2Rvd24oZW5kLCBibG9ja3NpemUpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBJbiBXUklURV9aRVJPRVMgbW9kZSwgZWRnZXMgdGhhdCB3ZXJlIG5vdCBwYXJ0aWFsLXplcm9lZCAoY2xlYW4KJiM0MzsJICogdW53cml0dGVuIG9yIGhvbGUpIG11c3QgYmUgYWxsb2NhdGVkIGFuZCB6ZXJvZWQgYXMgd2hvbGUgYmxvY2tzLgomIzQzOwkgKiBFeHBhbmQgdGhlIGFsaWduZWQgcmFuZ2Ugb3V0d2FyZCB0byBjb3ZlciB0aGVtLgomIzQzOwkgKi8KJiM0MzsJaWYgKG1vZGUgJmFtcDsgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FUykgewomIzQzOwkJaWYgKCFJU19BTElHTkVEKG9mZnNldCwgYmxvY2tzaXplKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIShwYXJ0aWFsX3plcm9lZCAmYW1wOyBFWFQ0X1BBUlRJQUxfWkVST19TVEFSVCkpCiYjNDM7CQkJYWxpZ25fc3RhcnQgPSByb3VuZF9kb3duKG9mZnNldCwgYmxvY2tzaXplKTsKJiM0MzsJCWlmICghSVNfQUxJR05FRChlbmQsIGJsb2Nrc2l6ZSkgJmFtcDsmYW1wOwomIzQzOwkJICAgICEocGFydGlhbF96ZXJvZWQgJmFtcDsgRVhUNF9QQVJUSUFMX1pFUk9fRU5EKSkKJiM0MzsJCQlhbGlnbl9lbmQgPSByb3VuZF91cChlbmQsIGJsb2Nrc2l6ZSk7CiYjNDM7CX0KJiM0MzsKIAlpZiAoYWxpZ25fZW5kICZndDsgYWxpZ25fc3RhcnQpIHsKIAkJaWYgKG1vZGUgJmFtcDsgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FUykKIAkJCWZsYWdzID0gRVhUNF9HRVRfQkxPQ0tTX0NSRUFURV9aRVJPIHwgRVhUNF9FWF9OT0NBQ0hFOwpAQCAtNDc3MCwxMSAmIzQzOzQ4MTUsMTUgQEAgc3RhdGljIGxvbmcgZXh0NF96ZXJvX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LAogCWlmIChJU19BTElHTkVEKG9mZnNldCB8IGVuZCwgYmxvY2tzaXplKSkKIAkJcmV0dXJuIHJldDsKIAotCS8qIFplcm8gb3V0IHBhcnRpYWwgYmxvY2sgYXQgdGhlIGVkZ2VzIG9mIHRoZSByYW5nZSAqLwotCXJldCA9IGV4dDRfemVyb19wYXJ0aWFsX2Jsb2Nrcyhpbm9kZSwgb2Zmc2V0LCBsZW4sICZhbXA7cGFydGlhbF96ZXJvZWQpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0JaWYgKCgoZmlsZS0mZ3Q7Zl9mbGFncyAmYW1wOyBPX1NZTkMpIHx8IElTX1NZTkMoaW5vZGUpKSAmYW1wOyZhbXA7IHBhcnRpYWxfemVyb2VkKSB7CiYjNDM7CS8qCiYjNDM7CSAqIEluIEZBTExPQ19GTF9XUklURV9aRVJPRVMgbW9kZSwgZWRnZXMgdGhhdCBoYXZlIGJlZW4gcGFydGlhbGx5CiYjNDM7CSAqIHplcm9lZCBtdXN0IGJlIHdyaXR0ZW4gYmFjayB0byBlbnN1cmUgdGhlIGVudGlyZSB6ZXJvZWQgcmFuZ2UKJiM0MzsJICogaXMgY29udmVydGVkIHRvIHRoZSB3cml0dGVuIHN0YXRlLiBJbiBTWU5DIG1vZGUsIHdyaXRlYmFjayBpcwomIzQzOwkgKiBhbHNvIHJlcXVpcmVkIHRvIHBlcnNpc3QgdGhlIHplcm9lZCBkYXRhIHRvIGRpc2suCiYjNDM7CSAqLwomIzQzOwlpZiAocGFydGlhbF96ZXJvZWQgJmFtcDsmYW1wOwomIzQzOwkgICAgKChtb2RlICZhbXA7IEZBTExPQ19GTF9XUklURV9aRVJPRVMpIHx8CiYjNDM7CSAgICAgKGZpbGUtJmd0O2ZfZmxhZ3MgJmFtcDsgT19TWU5DKSB8fCBJU19TWU5DKGlub2RlKSkpIHsKIAkJcmV0ID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdF9yYW5nZShpbm9kZS0mZ3Q7aV9tYXBwaW5nLCBvZmZzZXQsCiAJCQkJCQkgICBlbmQgLSAxKTsKIAkJaWYgKHJldCkKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuYwppbmRleCBjMmMyZDZhYzdmM2QxMy4uYjUyMTdkNWZlOTU0MGIgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2lub2RlLmMKQEAgLTQwMjYsNiAmIzQzOzQwMjYsMTAgQEAgdm9pZCBleHQ0X3NldF9hb3BzKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAgKiBiZWNhdXNlIGl0IG1pZ2h0IGhhdmUgZGF0YSBpbiBwYWdlY2FjaGUgKGVnLCBpZiBjYWxsZWQgZnJvbSBleHQ0X3plcm9fcmFuZ2UsCiAgKiBleHQ0X3B1bmNoX2hvbGUsIGV0Yykgd2hpY2ggbmVlZHMgdG8gYmUgcHJvcGVybHkgemVyb2VkIG91dC4gT3RoZXJ3aXNlIGEKICAqIHJhY2luZyB3cml0ZWJhY2sgY2FuIGNvbWUgbGF0ZXIgYW5kIGZsdXNoIHRoZSBzdGFsZSBwYWdlY2FjaGUgdG8gZGlzay4KJiM0MzsgKgomIzQzOyAqIFJldHVybiB0aGUgbG9hZGVkIGJoIGlmIGl0IGFjdHVhbGx5IG5lZWRzIHplcm9pbmcgLSBpbiB3cml0dGVuLCBkaXJ0eQomIzQzOyAqIHVud3JpdHRlbiwgb3IgZGVsYWxsb2Mgc3RhdGUuIFJldHVybiBOVUxMIGlmIGl0JiMzOTtzIGNsZWFuIChpLmUuLCBhIGhvbGUgb3IKJiM0MzsgKiBhIGNsZWFuIHVud3JpdHRlbiBibG9jaykuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmV4dDRfbG9hZF90YWlsX2JoKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBmcm9tKQogewpAQCAtNDA2NSw3ICYjNDM7NDA2OSwxMiBAQCBzdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICpleHQ0X2xvYWRfdGFpbF9iaChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgZnJvbSkKIAlpZiAoIWJ1ZmZlcl9tYXBwZWQoYmgpKSB7CiAJCUJVRkZFUl9UUkFDRShiaCwgJiMzNDt1bm1hcHBlZCYjMzQ7KTsKIAkJZXh0NF9nZXRfYmxvY2soaW5vZGUsIGlibG9jaywgYmgsIDApOwotCQkvKiB1bm1hcHBlZD8gSXQmIzM5O3MgYSBob2xlIC0gbm90aGluZyB0byBkbyAqLwomIzQzOwkJLyoKJiM0MzsJCSAqIEl0JiMzOTtzIGEgaG9sZSBvciBhIGNsZWFuIHVud3JpdHRlbiBibG9jayAtIG5vdGhpbmcgdG8gZG8uCiYjNDM7CQkgKiBOb3RlIHRoYXQgYSBsb29rdXAtb25seSBnZXRfYmxvY2sgKHdpdGhvdXQKJiM0MzsJCSAqIEVYVDRfR0VUX0JMT0NLU19DUkVBVEUpIG5ldmVyIHNldHMgQkhfTWFwcGVkIGZvciBjbGVhbgomIzQzOwkJICogdW53cml0dGVuIGV4dGVudHMuCiYjNDM7CQkgKi8KIAkJaWYgKCFidWZmZXJfbWFwcGVkKGJoKSkgewogCQkJQlVGRkVSX1RSQUNFKGJoLCAmIzM0O3N0aWxsIHVubWFwcGVkJiMzNDspOwogCQkJZ290byB1bmxvY2s7CkBAIC00MjUyLDEzICYjNDM7NDI2MSwyNiBAQCBpbnQgZXh0NF9ibG9ja196ZXJvX2VvZihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgZnJvbSwgbG9mZl90IGVuZCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qCiYjNDM7ICogWmVybyBvdXQgdGhlIHVuYWxpZ25lZCBoZWFkIGFuZCB0YWlsIG9mIHRoZSBbbHN0YXJ0LCBsc3RhcnQmIzQzO2xlbmd0aCkKJiM0MzsgKiByYW5nZS4KJiM0MzsgKgomIzQzOyAqIE9uIHJldHVybiwgQHBhcnRpYWxfemVyb2VkIHJlY29yZHMgd2hpY2ggZWRnZXMgYWN0dWFsbHkgZ290CiYjNDM7ICogcGFydGlhbC16ZXJvZWQuICBTZXQgRVhUNF9QQVJUSUFMX1pFUk9fU1RBUlQvRVhUNF9QQVJUSUFMX1pFUk9fRU5EIGlmCiYjNDM7ICogdGhlIGhlYWQvdGFpbCBibG9jayBnb3QgYWN0dWFsbHkgcGFydGlhbGx5IHplcm9lZCAoaW4gd3JpdHRlbiwgZGlydHkKJiM0MzsgKiB1bndyaXR0ZW4gb3IgZGVsYWxsb2Mgc3RhdGUpLiAgQ2xlYXJlZCBpZiB0aGUgaGVhZC90YWlsIGJsb2NrIGlzIGEKJiM0MzsgKiBob2xlIG9yIGEgY2xlYW4gdW53cml0dGVuIGJsb2NrLCBpbiB3aGljaCBjYXNlIHRoZXJlIGlzIG5vdGhpbmcgdGhhdAomIzQzOyAqIG5lZWRzIHplcm9pbmcuICBXaGVuIHRoZSBoZWFkIGFuZCB0YWlsIGxhbmQgaW4gdGhlIHNhbWUgYmxvY2ssIGJvdGgKJiM0MzsgKiBiaXRzIGFyZSBzZXQgdG9nZXRoZXIgb24gYSBzdWNjZXNzZnVsIHplcm9pbmcuCiYjNDM7ICovCiBpbnQgZXh0NF96ZXJvX3BhcnRpYWxfYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBsc3RhcnQsIGxvZmZfdCBsZW5ndGgsCi0JCQkgICAgIGJvb2wgKmRpZF96ZXJvKQomIzQzOwkJCSAgICAgdW5zaWduZWQgaW50ICpwYXJ0aWFsX3plcm9lZCkKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtJmd0O2lfc2I7CiAJdW5zaWduZWQgcGFydGlhbF9zdGFydCwgcGFydGlhbF9lbmQ7CiAJZXh0NF9mc2Jsa190IHN0YXJ0LCBlbmQ7CiAJbG9mZl90IGJ5dGVfZW5kID0gKGxzdGFydCAmIzQzOyBsZW5ndGggLSAxKTsKJiM0MzsJYm9vbCBkaWRfemVybyA9IGZhbHNlOwogCWludCBlcnIgPSAwOwogCiAJcGFydGlhbF9zdGFydCA9IGxzdGFydCAmYW1wOyAoc2ItJmd0O3NfYmxvY2tzaXplIC0gMSk7CkBAIC00MjcwLDIxICYjNDM7NDI5MiwzMiBAQCBpbnQgZXh0NF96ZXJvX3BhcnRpYWxfYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBsc3RhcnQsIGxvZmZfdCBsZW5ndGgsCiAJLyogSGFuZGxlIHBhcnRpYWwgemVybyB3aXRoaW4gdGhlIHNpbmdsZSBibG9jayAqLwogCWlmIChzdGFydCA9PSBlbmQgJmFtcDsmYW1wOwogCSAgICAocGFydGlhbF9zdGFydCB8fCAocGFydGlhbF9lbmQgIT0gc2ItJmd0O3NfYmxvY2tzaXplIC0gMSkpKSB7Ci0JCWVyciA9IGV4dDRfYmxvY2tfemVyb19yYW5nZShpbm9kZSwgbHN0YXJ0LCBsZW5ndGgsIGRpZF96ZXJvLAomIzQzOwkJZXJyID0gZXh0NF9ibG9ja196ZXJvX3JhbmdlKGlub2RlLCBsc3RhcnQsIGxlbmd0aCwgJmFtcDtkaWRfemVybywKIAkJCQkJICAgIE5VTEwpOwomIzQzOwkJaWYgKGRpZF96ZXJvKQomIzQzOwkJCSpwYXJ0aWFsX3plcm9lZCB8PSAoRVhUNF9QQVJUSUFMX1pFUk9fU1RBUlQgfAomIzQzOwkJCQkJICAgIEVYVDRfUEFSVElBTF9aRVJPX0VORCk7CiAJCXJldHVybiBlcnI7CiAJfQogCS8qIEhhbmRsZSBwYXJ0aWFsIHplcm8gb3V0IG9uIHRoZSBzdGFydCBvZiB0aGUgcmFuZ2UgKi8KIAlpZiAocGFydGlhbF9zdGFydCkgewogCQllcnIgPSBleHQ0X2Jsb2NrX3plcm9fcmFuZ2UoaW5vZGUsIGxzdGFydCwgc2ItJmd0O3NfYmxvY2tzaXplLAotCQkJCQkgICAgZGlkX3plcm8sIE5VTEwpOwomIzQzOwkJCQkJICAgICZhbXA7ZGlkX3plcm8sIE5VTEwpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKJiM0MzsJCWlmIChkaWRfemVybykKJiM0MzsJCQkqcGFydGlhbF96ZXJvZWQgfD0gRVhUNF9QQVJUSUFMX1pFUk9fU1RBUlQ7CiAJfQogCS8qIEhhbmRsZSBwYXJ0aWFsIHplcm8gb3V0IG9uIHRoZSBlbmQgb2YgdGhlIHJhbmdlICovCi0JaWYgKHBhcnRpYWxfZW5kICE9IHNiLSZndDtzX2Jsb2Nrc2l6ZSAtIDEpCiYjNDM7CWlmIChwYXJ0aWFsX2VuZCAhPSBzYi0mZ3Q7c19ibG9ja3NpemUgLSAxKSB7CiYjNDM7CQlkaWRfemVybyA9IGZhbHNlOwogCQllcnIgPSBleHQ0X2Jsb2NrX3plcm9fcmFuZ2UoaW5vZGUsIGJ5dGVfZW5kIC0gcGFydGlhbF9lbmQsCi0JCQkJCSAgICBwYXJ0aWFsX2VuZCAmIzQzOyAxLCBkaWRfemVybywgTlVMTCk7CiYjNDM7CQkJCQkgICAgcGFydGlhbF9lbmQgJiM0MzsgMSwgJmFtcDtkaWRfemVybywgTlVMTCk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CQlpZiAoZGlkX3plcm8pCiYjNDM7CQkJKnBhcnRpYWxfemVyb2VkIHw9IEVYVDRfUEFSVElBTF9aRVJPX0VORDsKJiM0MzsJfQogCXJldHVybiBlcnI7CiB9CiAKQEAgLTQ0MzMsNyAmIzQzOzQ0NjYsNyBAQCBpbnQgZXh0NF9wdW5jaF9ob2xlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoKQogCWxvZmZfdCBlbmQgPSBvZmZzZXQgJiM0MzsgbGVuZ3RoOwogCWhhbmRsZV90ICpoYW5kbGU7CiAJdW5zaWduZWQgaW50IGNyZWRpdHM7Ci0JYm9vbCBwYXJ0aWFsX3plcm9lZCA9IGZhbHNlOwomIzQzOwl1bnNpZ25lZCBpbnQgcGFydGlhbF96ZXJvZWQgPSAwOwogCWludCByZXQ7CiAKIAl0cmFjZV9leHQ0X3B1bmNoX2hvbGUoaW5vZGUsIG9mZnNldCwgbGVuZ3RoLCAwKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDk6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQyOQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDMzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGV4dDQgUGF0Y2ggZm9yIFBhcnRpYWwgWmVyb2luZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgbWFraW5nIHNvbWUgZnVuZGFtZW50YWwgY2hhbmdlcyB0byBob3cgZXh0NCBoYW5kbGVzIHBhcnRpYWwgemVyb2luZyBvZiBibG9ja3MuIFRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gaXMgaW4gYGZzL2V4dDQvZXh0ZW50cy5jYCBhbmQgYGZzL2V4dDQvaW5vZGUuY2AuIEl0IGxvb2tzIGxpa2Ugd2UgYXJlIGRlYWxpbmcgd2l0aCB0aGUgYGZhbGxvY2F0ZWAgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSB3aGVuIGl0JiMzOTtzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgYEZBTExPQ19GTF9XUklURV9aRVJPRVNgIGZsYWcuIEFjdHVhbGx5LCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQuLi4gd2FpdCBhIHNlY29uZCwgdGhlcmUgaXMgYSBgRkFMTE9DX0ZMX1pFUk9fUkFOR0VgIGZsYWcuIE1heWJlIGl0JiMzOTtzIG5vdCBgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FU2AsIHRoZXJlIGlzIG5vIHN0YW5kYXJkIGBGQUxMT0NfRkxfV1JJVEVfWkVST0VTYC4gT0ssIExldCBtZSBncmVwIGZvciB0aGUgY29kZSwganVzdCB0byBtYWtlIHN1cmUgSSBhbSB0aGlua2luZyBhYm91dCB0aGlzIGNvcnJlY3RseSwgeWVzLCBgbW9kZSAmYW1wOyBGQUxMT0NfRkxfV1JJVEVfWkVST0VTYC4gT2suCgpUaGUgcGF0Y2ggc2VlbXMgdG8gaW50cm9kdWNlIGBFWFQ0X1BBUlRJQUxfWkVST19TVEFSVGAgYW5kIGBFWFQ0X1BBUlRJQUxfWkVST19FTkRgIGZsYWdzLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSXQgYWxzbyBhcHBlYXJzIHRvIGJlIHJlZmluaW5nIGhvdyBgZXh0NF96ZXJvX3BhcnRpYWxfYmxvY2tzYCB3b3JrcyBieSByZXR1cm5pbmcgYSBiaXRtYXNrIG9mIHBhcnRpYWwgemVyb2VkIGVkZ2VzIGluc3RlYWQgb2YgYSBib29sZWFuIHZhbHVlLiBUaGlzIGlzIGEgc3VidGxlIGJ1dCBpbXBvcnRhbnQgc2hpZnQgaW4gc2lnbmFsaW5nIGFuZCBjb3VsZCBpbXBhY3QgaG93IHdlIHRyYWNrIHRob3NlIHBhcnRpYWwgYmxvY2tzLgoKQ3J1Y2lhbGx5LCB0aGUgcGF0Y2ggYWxzbyBtb2RpZmllcyBgZXh0NF9hbGxvY19maWxlX2Jsb2Nrc2AuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3Mgbm93IGhhbmRsaW5nIGBhbGxvY196ZXJvYCBjYWxscyByZWxhdGVkIHRvIHVud3JpdHRlbiBleHRlbnRzLiBJdCBhcHBlYXJzIHRoYXQgaXQgbWF5IGludm9sdmUgcG90ZW50aWFsbHkgYWRkaW5nIHRoZSBpbm9kZSB0byB0aGUgb3JwaGFuIGxpc3QuIFRoaXMgaXMgc29tZXRoaW5nIHRvIGtlZXAgYW4gZXllIG9uIGJlY2F1c2UgaXQgbWVhbnMgdGhhdCB0aGVyZSBtYXkgYmUgZmlsZSBzeXN0ZW0gY29uc2lzdGVuY3kgaW1wbGljYXRpb25zIGZvciByZWNvdmVyeSBzY2VuYXJpb3MuCgpPdmVyYWxsLCB0aGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gZXh0NCYjMzk7cyBibG9jayBhbGxvY2F0aW9uIGFuZCB6ZXJvaW5nIGxvZ2ljLCBwb3RlbnRpYWxseSBpbXBhY3RpbmcgcGVyZm9ybWFuY2UgYW5kLCBtb3JlIGltcG9ydGFudGx5LCB0aGUgcmVsaWFiaWxpdHkgb2YgZmlsZSB6ZXJvaW5nLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHRoZSBibG9jayBhbGxvY2F0b3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDk6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RkFMTE9DX0ZMXyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgODk3IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2ZzY3J5cHQucnN0PTEyMDg9YXN0dXRlIHVzZXJzIG1heSBub3RpY2Ugc29tZSBkaWZmZXJlbmNlcyBpbiBiZWhhdmlvcjpcbi0tXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2ZzY3J5cHQucnN0LTEyMjctXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2ZzY3J5cHQucnN0OjEyMjg6LSBUaGUgZmFsbG9jYXRlIG9wZXJhdGlvbnMgRkFMTE9DX0ZMX0NPTExBUFNFX1JBTkdFIGFuZFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9mc2NyeXB0LnJzdDoxMjI5OiAgRkFMTE9DX0ZMX0lOU0VSVF9SQU5HRSBhcmUgbm90IHN1cHBvcnRlZCBvbiBlbmNyeXB0ZWQgZmlsZXMgYW5kIHdpbGxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZnNjcnlwdC5yc3QtMTIzMC0gIGZhaWwgd2l0aCBFT1BOT1RTVVBQLlxuLS1cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3Q9NDQxPWZpbGVzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBob2xlIHB1bmNoaW5nIChkZWFsbG9jYXRpbmcgc3BhY2UgaW4gdGhlIG1pZGRsZSBvZiBhXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0OjQ0MjpmaWxlKSB5b3UgbXVzdCByZXR1cm4gLUVPUE5PVFNVUFAgaWYgRkFMTE9DX0ZMX1BVTkNIX0hPTEUgaXMgc2V0IGluIG1vZGUuXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0OjQ0MzpDdXJyZW50bHkgeW91IGNhbiBvbmx5IGhhdmUgRkFMTE9DX0ZMX1BVTkNIX0hPTEUgd2l0aCBGQUxMT0NfRkxfS0VFUF9TSVpFIHNldCxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3QtNDQ0LXNvIHRoZSBpX3NpemUgc2hvdWxkIG5vdCBjaGFuZ2Ugd2hlbiBob2xlIHB1bmNoaW5nLCBldmVuIHdoZW4gcHVjaGluZyB0aGUgZW5kIG9mXG4tLVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZmF0LnJzdD0yMjc9VGhlIGZhbGxvY2F0ZWQgcmVnaW9uIG9mIGZpbGUgaXMgZGlzY2FyZGVkIGF0IHVtb3VudC9ldmljdCB0aW1lXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3ZmYXQucnN0OjIyODp3aGVuIHVzaW5nIGZhbGxvY2F0ZSB3aXRoIEZBTExPQ19GTF9LRUVQX1NJWkUuXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3ZmYXQucnN0LTIyOS1TbywgVXNlciBzaG91bGQgYXNzdW1lIHRoYXQgZmFsbG9jYXRlZCByZWdpb24gY2FuIGJlIGRpc2NhcmRlZCBhdFxuLS1cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMveGZzL3hmcy1vbmxpbmUtZnNjay1kZXNpZ24ucnN0PTIyMDQ9VG8gZnJlZSBhbiB4ZmJ0cmVlIGJsb2NrLCB1c2UgYGB4ZmlsZV9kaXNjYXJkYGAgKHdoaWNoIGludGVybmFsbHkgdXNlc1xuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy94ZnMveGZzLW9ubGluZS1mc2NrLWRlc2lnbi5yc3Q6MjIwNTpgYEZBTExPQ19GTF9QVU5DSF9IT0xFYGApIHRvIHJlbW92ZSB0aGUgbWVtb3J5IHBhZ2UgZnJvbSB0aGUgeGZpbGUuXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3hmcy94ZnMtb25saW5lLWZzY2stZGVzaWduLnJzdC0yMjA2LVxuLS1cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMveGZzL3hmcy1vbmxpbmUtZnNjay1kZXNpZ24ucnN0PTUyMDY9VGhlIHNlY29uZCBwaWVjZSBpdCBuZWVkcyBpcyBhIG5ldyBmYWxsb2NhdGUgbW9kZVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy94ZnMveGZzLW9ubGluZS1mc2NrLWRlc2lnbi5yc3Q6NTIwNzooYGBGQUxMT0NfRkxfTUFQX0ZSRUVfU1BBQ0VgYCkgdGhhdCBhbGxvY2F0ZXMgdGhlIGZyZWUgc3BhY2UgaW4gYSByZWdpb24gYW5kXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3hmcy94ZnMtb25saW5lLWZzY2stZGVzaWduLnJzdC01MjA4LW1hcHMgaXQgdG8gYSBmaWxlLlxuLS1cbkRvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9sYW5kbG9jay5yc3Q9Mzk5PUF0IHRoZSBzYW1lIHRpbWUsIG9uIHNvbWUgZmlsZXN5c3RlbXMsIDptYW5wYWdlOmBmYWxsb2NhdGUoMilgIG9mZmVycyBhIHdheSB0b1xuRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBpL2xhbmRsb2NrLnJzdDo0MDA6c2hvcnRlbiBmaWxlIGNvbnRlbnRzIHdpdGggYGBGQUxMT0NfRkxfQ09MTEFQU0VfUkFOR0VgYCB3aGVuIHRoZSBmaWxlIGlzIG9wZW5lZFxuRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBpL2xhbmRsb2NrLnJzdC00MDEtZm9yIHdyaXRpbmcsIHNpZGVzdGVwcGluZyB0aGUgYGBMQU5ETE9DS19BQ0NFU1NfRlNfVFJVTkNBVEVgYCByaWdodC5cbi0tXG5hcmNoL3VtL29zLUxpbnV4L2ZpbGUuYz02MTY9aW50IG9zX2ZhbGxvY19wdW5jaChpbnQgZmQsIHVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsIGludCBsZW4pXG5hcmNoL3VtL29zLUxpbnV4L2ZpbGUuYy02MTcte1xuYXJjaC91bS9vcy1MaW51eC9maWxlLmM6NjE4Olx0aW50IG4gPSBmYWxsb2NhdGUoZmQsIEZBTExPQ19GTF9QVU5DSF9IT0xFfEZBTExPQ19GTF9LRUVQX1NJWkUsIG9mZnNldCwgbGVuKTtcbmFyY2gvdW0vb3MtTGludXgvZmlsZS5jLTYxOS1cbi0tXG5hcmNoL3VtL29zLUxpbnV4L2ZpbGUuYz02MjU9aW50IG9zX2ZhbGxvY196ZXJvZXMoaW50IGZkLCB1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0LCBpbnQgbGVuKVxuYXJjaC91bS9vcy1MaW51eC9maWxlLmMtNjI2LXtcbmFyY2gvdW0vb3MtTGludXgvZmlsZS5jOjYyNzpcdGludCBuID0gZmFsbG9jYXRlKGZkLCBGQUxMT0NfRkxfWkVST19SQU5HRXxGQUxMT0NfRkxfS0VFUF9TSVpFLCBvZmZzZXQsIGxlbik7XG5hcmNoL3VtL29zLUxpbnV4L2ZpbGUuYy02MjgtXG4tLVxuYmxvY2svZm9wcy5jPTgxMT1zdGF0aWMgc3NpemVfdCBibGtkZXZfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbi0tXG5ibG9jay9mb3BzLmMtODYzLVxuYmxvY2svZm9wcy5jOjg2NDojZGVmaW5lXHRCTEtERVZfRkFMTE9DX0ZMX1NVUFBPUlRFRFx0XHRcdFx0XHRcXFxuYmxvY2svZm9wcy5jOjg2NTpcdFx0KEZBTExPQ19GTF9LRUVQX1NJWkUgfCBGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8XHRcdFxcXG5ibG9jay9mb3BzLmM6ODY2Olx0XHQgRkFMTE9DX0ZMX1pFUk9fUkFOR0UgfCBGQUxMT0NfRkxfV1JJVEVfWkVST0VTKVxuYmxvY2svZm9wcy5jLTg2Ny1cbmJsb2NrL2ZvcHMuYz04Njg9c3RhdGljIGxvbmcgYmxrZGV2X2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBzdGFydCxcbi0tXG5ibG9jay9mb3BzLmMtODc4LVx0LyogRmFpbCBpZiB3ZSBkb24mIzM5O3QgcmVjb2duaXplIHRoZSBmbGFncy4gKi9cbmJsb2NrL2ZvcHMuYzo4Nzk6XHRpZiAobW9kZSBcdTAwMjYgfkJMS0RFVl9GQUxMT0NfRkxfU1VQUE9SVEVEKVxuYmxvY2svZm9wcy5jLTg4MC1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbmJsb2NrL2ZvcHMuYy04ODQtXHQgKi9cbmJsb2NrL2ZvcHMuYzo4ODU6XHRpZiAoKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9XUklURV9aRVJPRVMpIFx1MDAyNlx1MDAyNlxuYmxvY2svZm9wcy5jLTg4Ni1cdCAgICAhYmRldl93cml0ZV96ZXJvZXNfdW5tYXBfc2VjdG9ycyhiZGV2KSlcbi0tXG5ibG9jay9mb3BzLmMtODkzLVx0aWYgKGVuZCBcdTAwM2U9IGlzaXplKSB7XG5ibG9jay9mb3BzLmM6ODk0Olx0XHRpZiAobW9kZSBcdTAwMjYgRkFMTE9DX0ZMX0tFRVBfU0laRSkge1xuYmxvY2svZm9wcy5jLTg5NS1cdFx0XHRsZW4gPSBpc2l6ZSAtIHN0YXJ0O1xuLS1cbmJsb2NrL2ZvcHMuYy05MTAtXHRzd2l0Y2ggKG1vZGUpIHtcbmJsb2NrL2ZvcHMuYzo5MTE6XHRjYXNlIEZBTExPQ19GTF9aRVJPX1JBTkdFOlxuYmxvY2svZm9wcy5jOjkxMjpcdGNhc2UgRkFMTE9DX0ZMX1pFUk9fUkFOR0UgfCBGQUxMT0NfRkxfS0VFUF9TSVpFOlxuYmxvY2svZm9wcy5jLTkxMy1cdFx0ZmxhZ3MgPSBCTEtERVZfWkVST19OT1VOTUFQO1xuYmxvY2svZm9wcy5jLTkxNC1cdFx0YnJlYWs7XG5ibG9jay9mb3BzLmM6OTE1Olx0Y2FzZSBGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8IEZBTExPQ19GTF9LRUVQX1NJWkU6XG5ibG9jay9mb3BzLmMtOTE2LVx0XHRmbGFncyA9IEJMS0RFVl9aRVJPX05PRkFMTEJBQ0s7XG5ibG9jay9mb3BzLmMtOTE3LVx0XHRicmVhaztcbmJsb2NrL2ZvcHMuYzo5MTg6XHRjYXNlIEZBTExPQ19GTF9XUklURV9aRVJPRVM6XG5ibG9jay9mb3BzLmMtOTE5LVx0XHRmbGFncyA9IDA7XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MjI0PXN0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGludCBtb2RlKVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIyNy1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIyODpcdGlmIChtb2RlIFx1MDAyNiBGQUxMT0NfRkxfWkVST19SQU5HRSlcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIyOS1cdFx0bGltLm1heF93cml0ZV96ZXJvZXNfc2VjdG9ycyA9IDA7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMzAtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMzE6XHRpZiAobW9kZSBcdTAwMjYgRkFMTE9DX0ZMX1BVTkNIX0hPTEUpIHtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIzMi1cdFx0bGltLm1heF9od19kaXNjYXJkX3NlY3RvcnMgPSAwO1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTI0Nj1zdGF0aWMgaW50IGxvX2ZhbGxvY2F0ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIGxvZmZfdCBwb3MsXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjU1LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MjU2Olx0bW9kZSB8PSBGQUxMT0NfRkxfS0VFUF9TSVpFO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMjU3LVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTQxMz1zdGF0aWMgaW50IGRvX3JlcV9maWxlYmFja2VkKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCByZXF1ZXN0ICpycSlcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00MjctXHRcdFx0KHJxLVx1MDAzZWNtZF9mbGFncyBcdTAwMjYgUkVRX05PVU5NQVApID9cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjQyODpcdFx0XHRcdEZBTExPQ19GTF9aRVJPX1JBTkdFIDpcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjQyOTpcdFx0XHRcdEZBTExPQ19GTF9QVU5DSF9IT0xFKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTQzMC1cdGNhc2UgUkVRX09QX0RJU0NBUkQ6XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo0MzE6XHRcdHJldHVybiBsb19mYWxsb2NhdGUobG8sIHJxLCBwb3MsIEZBTExPQ19GTF9QVU5DSF9IT0xFKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTQzMi1cdGNhc2UgUkVRX09QX1dSSVRFOlxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvaW8tY21kLWZpbGUuYz0yNzI9c3RhdGljIHZvaWQgbnZtZXRfZmlsZV9leGVjdXRlX2Rpc2NhcmQoc3RydWN0IG52bWV0X3JlcSAqcmVxKVxuZHJpdmVycy9udm1lL3RhcmdldC9pby1jbWQtZmlsZS5jLTI3My17XG5kcml2ZXJzL252bWUvdGFyZ2V0L2lvLWNtZC1maWxlLmM6Mjc0Olx0aW50IG1vZGUgPSBGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8IEZBTExPQ19GTF9LRUVQX1NJWkU7XG5kcml2ZXJzL252bWUvdGFyZ2V0L2lvLWNtZC1maWxlLmMtMjc1LVx0c3RydWN0IG52bWVfZHNtX3JhbmdlIHJhbmdlO1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvaW8tY21kLWZpbGUuYz0zMzI9c3RhdGljIHZvaWQgbnZtZXRfZmlsZV93cml0ZV96ZXJvZXNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9pby1jbWQtZmlsZS5jLTMzNS1cdHN0cnVjdCBudm1lX3dyaXRlX3plcm9lc19jbWQgKndyaXRlX3plcm9lcyA9IFx1MDAyNnJlcS1cdTAwM2VjbWQtXHUwMDNld3JpdGVfemVyb2VzO1xuZHJpdmVycy9udm1lL3RhcmdldC9pby1jbWQtZmlsZS5jOjMzNjpcdGludCBtb2RlID0gRkFMTE9DX0ZMX1pFUk9fUkFOR0UgfCBGQUxMT0NfRkxfS0VFUF9TSVpFO1xuZHJpdmVycy9udm1lL3RhcmdldC9pby1jbWQtZmlsZS5jLTMzNy1cdGxvZmZfdCBvZmZzZXQ7XG4tLVxuZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfZmlsZS5jPTUzMz1mZF9leGVjdXRlX3VubWFwKHN0cnVjdCBzZV9jbWQgKmNtZCwgc2VjdG9yX3QgbGJhLCBzZWN0b3JfdCBub2xiKVxuLS1cbmRyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2ZpbGUuYy01NjctXHRcdHVuc2lnbmVkIGludCBsZW4gPSBub2xiICogc2VfZGV2LVx1MDAzZWRldl9hdHRyaWIuYmxvY2tfc2l6ZTtcbmRyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2ZpbGUuYzo1Njg6XHRcdGludCBtb2RlID0gRkFMTE9DX0ZMX1BVTkNIX0hPTEUgfCBGQUxMT0NfRkxfS0VFUF9TSVpFO1xuZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfZmlsZS5jLTU2OS1cbi0tXG5mcy9idHJmcy9maWxlLmM9Mjg1OT1zdGF0aWMgaW50IGJ0cmZzX2ZhbGxvY2F0ZV91cGRhdGVfaXNpemUoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9idHJmcy9maWxlLmMtMjg2OS1cbmZzL2J0cmZzL2ZpbGUuYzoyODcwOlx0aWYgKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9LRUVQX1NJWkUgfHwgZW5kIFx1MDAzYz0gaV9zaXplX3JlYWQoaW5vZGUpKVxuZnMvYnRyZnMvZmlsZS5jLTI4NzEtXHRcdHJldHVybiAwO1xuLS1cbmZzL2J0cmZzL2ZpbGUuYz0zMTAwPXN0YXRpYyBsb25nIGJ0cmZzX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsXG4tLVxuZnMvYnRyZnMvZmlsZS5jLTMxMzQtXHQvKiBNYWtlIHN1cmUgd2UgYXJlbiYjMzk7dCBiZWluZyBnaXZlIHNvbWUgY3JhcCBtb2RlICovXG5mcy9idHJmcy9maWxlLmM6MzEzNTpcdGlmIChtb2RlIFx1MDAyNiB+KEZBTExPQ19GTF9LRUVQX1NJWkUgfCBGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8XG5mcy9idHJmcy9maWxlLmM6MzEzNjpcdFx0ICAgICBGQUxMT0NfRkxfWkVST19SQU5HRSkpXG5mcy9idHJmcy9maWxlLmMtMzEzNy1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuZnMvYnRyZnMvZmlsZS5jLTMxMzgtXG5mcy9idHJmcy9maWxlLmM6MzEzOTpcdGlmIChtb2RlIFx1MDAyNiBGQUxMT0NfRkxfUFVOQ0hfSE9MRSlcbmZzL2J0cmZzL2ZpbGUuYy0zMTQwLVx0XHRyZXR1cm4gYnRyZnNfcHVuY2hfaG9sZShmaWxlLCBvZmZzZXQsIGxlbik7XG4tLVxuZnMvYnRyZnMvZmlsZS5jLTMxNDMtXG5mcy9idHJmcy9maWxlLmM6MzE0NDpcdGlmICghKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9LRUVQX1NJWkUpIFx1MDAyNlx1MDAyNiBvZmZzZXQgJiM0MzsgbGVuIFx1MDAzZSBpbm9kZS1cdTAwM2VpX3NpemUpIHtcbmZzL2J0cmZzL2ZpbGUuYy0zMTQ1LVx0XHRyZXQgPSBpbm9kZV9uZXdzaXplX29rKGlub2RlLCBvZmZzZXQgJiM0MzsgbGVuKTtcbi0tXG5mcy9idHJmcy9maWxlLmMtMzE5MC1cbmZzL2J0cmZzL2ZpbGUuYzozMTkxOlx0aWYgKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9aRVJPX1JBTkdFKSB7XG5mcy9idHJmcy9maWxlLmMtMzE5Mi1cdFx0cmV0ID0gYnRyZnNfemVyb19yYW5nZShpbm9kZSwgb2Zmc2V0LCBsZW4sIG1vZGUpO1xuLS1cbmZzL2J0cmZzL2lub2RlLmM9OTIxMT1zdGF0aWMgaW50IF9fYnRyZnNfcHJlYWxsb2NfZmlsZV9yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbW9kZSxcbi0tXG5mcy9idHJmcy9pbm9kZS5jLTkyOTgtXHRcdEJUUkZTX0koaW5vZGUpLVx1MDAzZWZsYWdzIHw9IEJUUkZTX0lOT0RFX1BSRUFMTE9DO1xuZnMvYnRyZnMvaW5vZGUuYzo5Mjk5Olx0XHRpZiAoIShtb2RlIFx1MDAyNiBGQUxMT0NfRkxfS0VFUF9TSVpFKSBcdTAwMjZcdTAwMjZcbmZzL2J0cmZzL2lub2RlLmMtOTMwMC1cdFx0ICAgIChhY3R1YWxfbGVuIFx1MDAzZSBpbm9kZS1cdTAwM2VpX3NpemUpIFx1MDAyNlx1MDAyNlxuLS1cbmZzL2J0cmZzL3NlbmQuYz01NDE2PXN0YXRpYyBpbnQgc2VuZF9ob2xlKHN0cnVjdCBzZW5kX2N0eCAqc2N0eCwgdTY0IGVuZClcbi0tXG5mcy9idHJmcy9zZW5kLmMtNTQyNy1cdGlmIChwcm90b19jbWRfb2soc2N0eCwgQlRSRlNfU0VORF9DX0ZBTExPQ0FURSkpXG5mcy9idHJmcy9zZW5kLmM6NTQyODpcdFx0cmV0dXJuIHNlbmRfZmFsbG9jYXRlKHNjdHgsIEZBTExPQ19GTF9QVU5DSF9IT0xFIHwgRkFMTE9DX0ZMX0tFRVBfU0laRSxcbmZzL2J0cmZzL3NlbmQuYy01NDI5LVx0XHRcdFx0ICAgICAgb2Zmc2V0LCBlbmQgLSBvZmZzZXQpO1xuLS1cbmZzL2NhY2hlZmlsZXMvaW50ZXJmYWNlLmM9MjMzPXN0YXRpYyBib29sIGNhY2hlZmlsZXNfc2hvcnRlbl9vYmplY3Qoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QsXG4tLVxuZnMvY2FjaGVmaWxlcy9pbnRlcmZhY2UuYy0yNjEtXHRcdGlmIChyZXQgPT0gMClcbmZzL2NhY2hlZmlsZXMvaW50ZXJmYWNlLmM6MjYyOlx0XHRcdHJldCA9IHZmc19mYWxsb2NhdGUoZmlsZSwgRkFMTE9DX0ZMX1pFUk9fUkFOR0UsXG5mcy9jYWNoZWZpbGVzL2ludGVyZmFjZS5jLTI2My1cdFx0XHRcdFx0ICAgIG5ld19zaXplLCBkaW9fc2l6ZSAtIG5ld19zaXplKTtcbi0tXG5mcy9jYWNoZWZpbGVzL2lvLmM9NTE5PWludCBfX2NhY2hlZmlsZXNfcHJlcGFyZV93cml0ZShzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdCxcbi0tXG5mcy9jYWNoZWZpbGVzL2lvLmMtNTg0LVx0aWYgKHJldCA9PSAwKVxuZnMvY2FjaGVmaWxlcy9pby5jOjU4NTpcdFx0cmV0ID0gdmZzX2ZhbGxvY2F0ZShmaWxlLCBGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8IEZBTExPQ19GTF9LRUVQX1NJWkUsXG5mcy9jYWNoZWZpbGVzL2lvLmMtNTg2LVx0XHRcdFx0ICAgIHN0YXJ0LCAqX2xlbik7XG4tLVxuZnMvY2VwaC9maWxlLmM9MjcyOD1zdGF0aWMgbG9uZyBjZXBoX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsXG4tLVxuZnMvY2VwaC9maWxlLmMtMjc0NC1cbmZzL2NlcGgvZmlsZS5jOjI3NDU6XHRpZiAobW9kZSAhPSAoRkFMTE9DX0ZMX0tFRVBfU0laRSB8IEZBTExPQ19GTF9QVU5DSF9IT0xFKSlcbmZzL2NlcGgvZmlsZS5jLTI3NDYtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5mcy9leGZhdC9maWxlLmM9MjE9c3RhdGljIGludCBleGZhdF9jb250X2V4cGFuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSlcbi0tXG5mcy9leGZhdC9maWxlLmMtOTgtICogcmVxdWVzdHMgbGVuIGJ5dGVzIGF0IG9mZnNldC4gSW4gY29udHJhcnkgdG8gZmF0LCB3ZSBvbmx5IHN1cHBvcnRcbmZzL2V4ZmF0L2ZpbGUuYzo5OTogKiBGQUxMT0NfRkxfQUxMT0NBVEVfUkFOR0UgYmVjYXVzZSBieSBsZWF2aW5nIHRoZSB2YWxpZCBkYXRhIGxlbmd0aChWREwpXG5mcy9leGZhdC9maWxlLmMtMTAwLSAqIGZpZWxkLCBpdCBpcyB1bm5lY2Vzc2FyeSB0byB6ZXJvIG91dCB0aGUgbmV3bHkgYWxsb2NhdGVkIGNsdXN0ZXJzLlxuLS1cbmZzL2V4ZmF0L2ZpbGUuYz0xMDI9c3RhdGljIGxvbmcgZXhmYXRfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSxcbi0tXG5mcy9leGZhdC9maWxlLmMtMTA5LVx0LyogTm8gc3VwcG9ydCBmb3Igb3RoZXIgbW9kZXMgKi9cbmZzL2V4ZmF0L2ZpbGUuYzoxMTA6XHRpZiAobW9kZSAhPSBGQUxMT0NfRkxfQUxMT0NBVEVfUkFOR0UpXG5mcy9leGZhdC9maWxlLmMtMTExLVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9MzU1Nz1leHQ0X2V4dF9jb252ZXJ0X3RvX2luaXRpYWxpemVkKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtMzU5OC1cdCAqIG1lbW1vdmUoKSBjYWxscy4gVHJhbnNmZXJyaW5nIHRvIHRoZSBsZWZ0IGlzIHRoZSBjb21tb24gY2FzZSBpblxuZnMvZXh0NC9leHRlbnRzLmM6MzU5OTpcdCAqIHN0ZWFkeSBzdGF0ZSBmb3Igd29ya2xvYWRzIGRvaW5nIGZhbGxvY2F0ZShGQUxMT0NfRkxfS0VFUF9TSVpFKVxuZnMvZXh0NC9leHRlbnRzLmMtMzYwMC1cdCAqIGZvbGxvd2VkIGJ5IGFwcGVuZCB3cml0ZXMuXG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9NDczND1zdGF0aWMgbG9uZyBleHQ0X3plcm9fcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNDc1MS1cbmZzL2V4dDQvZXh0ZW50cy5jOjQ3NTI6XHRpZiAoIShtb2RlIFx1MDAyNiBGQUxMT0NfRkxfS0VFUF9TSVpFKSBcdTAwMjZcdTAwMjZcbmZzL2V4dDQvZXh0ZW50cy5jLTQ3NTMtXHQgICAgKGVuZCBcdTAwM2UgaW5vZGUtXHUwMDNlaV9zaXplIHx8IGVuZCBcdTAwM2UgRVhUNF9JKGlub2RlKS1cdTAwM2VpX2Rpc2tzaXplKSkge1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTQ3OTItXHQgKi9cbmZzL2V4dDQvZXh0ZW50cy5jOjQ3OTM6XHRpZiAobW9kZSBcdTAwMjYgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FUykge1xuZnMvZXh0NC9leHRlbnRzLmMtNDc5NC1cdFx0aWYgKCFJU19BTElHTkVEKG9mZnNldCwgYmxvY2tzaXplKSBcdTAwMjZcdTAwMjZcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy00ODAyLVx0aWYgKGFsaWduX2VuZCBcdTAwM2UgYWxpZ25fc3RhcnQpIHtcbmZzL2V4dDQvZXh0ZW50cy5jOjQ4MDM6XHRcdGlmIChtb2RlIFx1MDAyNiBGQUxMT0NfRkxfV1JJVEVfWkVST0VTKVxuZnMvZXh0NC9leHRlbnRzLmMtNDgwNC1cdFx0XHRmbGFncyA9IEVYVDRfR0VUX0JMT0NLU19DUkVBVEVfWkVSTyB8IEVYVDRfRVhfTk9DQUNIRTtcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy00ODE4LVx0LypcbmZzL2V4dDQvZXh0ZW50cy5jOjQ4MTk6XHQgKiBJbiBGQUxMT0NfRkxfV1JJVEVfWkVST0VTIG1vZGUsIGVkZ2VzIHRoYXQgaGF2ZSBiZWVuIHBhcnRpYWxseVxuZnMvZXh0NC9leHRlbnRzLmMtNDgyMC1cdCAqIHplcm9lZCBtdXN0IGJlIHdyaXR0ZW4gYmFjayB0byBlbnN1cmUgdGhlIGVudGlyZSB6ZXJvZWQgcmFuZ2Vcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy00ODI0LVx0aWYgKHBhcnRpYWxfemVyb2VkIFx1MDAyNlx1MDAyNlxuZnMvZXh0NC9leHRlbnRzLmM6NDgyNTpcdCAgICAoKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9XUklURV9aRVJPRVMpIHx8XG5mcy9leHQ0L2V4dGVudHMuYy00ODI2LVx0ICAgICAoZmlsZS1cdTAwM2VmX2ZsYWdzIFx1MDAyNiBPX1NZTkMpIHx8IElTX1NZTkMoaW5vZGUpKSkge1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTQ4NTU9c3RhdGljIGxvbmcgZXh0NF9kb19mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNDg3MS1cbmZzL2V4dDQvZXh0ZW50cy5jOjQ4NzI6XHRpZiAoIShtb2RlIFx1MDAyNiBGQUxMT0NfRkxfS0VFUF9TSVpFKSBcdTAwMjZcdTAwMjZcbmZzL2V4dDQvZXh0ZW50cy5jLTQ4NzMtXHQgICAgKGVuZCBcdTAwM2UgaW5vZGUtXHUwMDNlaV9zaXplIHx8IGVuZCBcdTAwM2UgRVhUNF9JKGlub2RlKS1cdTAwM2VpX2Rpc2tzaXplKSkge1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTQ5MDM9bG9uZyBleHQ0X2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4pXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNDkxNS1cdGlmIChJU19FTkNSWVBURUQoaW5vZGUpIFx1MDAyNlx1MDAyNlxuZnMvZXh0NC9leHRlbnRzLmM6NDkxNjpcdCAgICAobW9kZSBcdTAwMjYgKEZBTExPQ19GTF9DT0xMQVBTRV9SQU5HRSB8IEZBTExPQ19GTF9JTlNFUlRfUkFOR0UpKSlcbmZzL2V4dDQvZXh0ZW50cy5jLTQ5MTctXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy00OTIxLVx0ICovXG5mcy9leHQ0L2V4dGVudHMuYzo0OTIyOlx0aWYgKChtb2RlIFx1MDAyNiBGQUxMT0NfRkxfV1JJVEVfWkVST0VTKSBcdTAwMjZcdTAwMjZcbmZzL2V4dDQvZXh0ZW50cy5jLTQ5MjMtXHQgICAgIWJkZXZfd3JpdGVfemVyb2VzX3VubWFwX3NlY3RvcnMoaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2JkZXYpKVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTQ5MjYtXHQvKiBSZXR1cm4gZXJyb3IgaWYgbW9kZSBpcyBub3Qgc3VwcG9ydGVkICovXG5mcy9leHQ0L2V4dGVudHMuYzo0OTI3Olx0aWYgKG1vZGUgXHUwMDI2IH4oRkFMTE9DX0ZMX0tFRVBfU0laRSB8IEZBTExPQ19GTF9QVU5DSF9IT0xFIHxcbmZzL2V4dDQvZXh0ZW50cy5jOjQ5Mjg6XHRcdCAgICAgRkFMTE9DX0ZMX1pFUk9fUkFOR0UgfCBGQUxMT0NfRkxfQ09MTEFQU0VfUkFOR0UgfFxuZnMvZXh0NC9leHRlbnRzLmM6NDkyOTpcdFx0ICAgICBGQUxMT0NfRkxfSU5TRVJUX1JBTkdFIHwgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FUykpXG5mcy9leHQ0L2V4dGVudHMuYy00OTMwLVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNDk0My1cbmZzL2V4dDQvZXh0ZW50cy5jOjQ5NDQ6XHRpZiAoKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9NT0RFX01BU0spID09IEZBTExPQ19GTF9BTExPQ0FURV9SQU5HRSkge1xuZnMvZXh0NC9leHRlbnRzLmMtNDk0NS1cdFx0cmV0ID0gZXh0NF9kb19mYWxsb2NhdGUoZmlsZSwgb2Zmc2V0LCBsZW4sIG1vZGUpO1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTQ5NTktXG5mcy9leHQ0L2V4dGVudHMuYzo0OTYwOlx0c3dpdGNoIChtb2RlIFx1MDAyNiBGQUxMT0NfRkxfTU9ERV9NQVNLKSB7XG5mcy9leHQ0L2V4dGVudHMuYzo0OTYxOlx0Y2FzZSBGQUxMT0NfRkxfUFVOQ0hfSE9MRTpcbmZzL2V4dDQvZXh0ZW50cy5jLTQ5NjItXHRcdHJldCA9IGV4dDRfcHVuY2hfaG9sZShmaWxlLCBvZmZzZXQsIGxlbik7XG5mcy9leHQ0L2V4dGVudHMuYy00OTYzLVx0XHRicmVhaztcbmZzL2V4dDQvZXh0ZW50cy5jOjQ5NjQ6XHRjYXNlIEZBTExPQ19GTF9DT0xMQVBTRV9SQU5HRTpcbmZzL2V4dDQvZXh0ZW50cy5jLTQ5NjUtXHRcdHJldCA9IGV4dDRfY29sbGFwc2VfcmFuZ2UoZmlsZSwgb2Zmc2V0LCBsZW4pO1xuZnMvZXh0NC9leHRlbnRzLmMtNDk2Ni1cdFx0YnJlYWs7XG5mcy9leHQ0L2V4dGVudHMuYzo0OTY3Olx0Y2FzZSBGQUxMT0NfRkxfSU5TRVJUX1JBTkdFOlxuZnMvZXh0NC9leHRlbnRzLmMtNDk2OC1cdFx0cmV0ID0gZXh0NF9pbnNlcnRfcmFuZ2UoZmlsZSwgb2Zmc2V0LCBsZW4pO1xuZnMvZXh0NC9leHRlbnRzLmMtNDk2OS1cdFx0YnJlYWs7XG5mcy9leHQ0L2V4dGVudHMuYzo0OTcwOlx0Y2FzZSBGQUxMT0NfRkxfWkVST19SQU5HRTpcbmZzL2V4dDQvZXh0ZW50cy5jOjQ5NzE6XHRjYXNlIEZBTExPQ19GTF9XUklURV9aRVJPRVM6XG5mcy9leHQ0L2V4dGVudHMuYy00OTcyLVx0XHRyZXQgPSBleHQ0X3plcm9fcmFuZ2UoZmlsZSwgb2Zmc2V0LCBsZW4sIG1vZGUpO1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTU1NzQ9c3RhdGljIGludCBleHQ0X2NvbGxhcHNlX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTU2NjgtICogZXh0NF9pbnNlcnRfcmFuZ2U6XG5mcy9leHQ0L2V4dGVudHMuYzo1NjY5OiAqIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyB0aGUgRkFMTE9DX0ZMX0lOU0VSVF9SQU5HRSBmbGFnIG9mIGZhbGxvY2F0ZS5cbmZzL2V4dDQvZXh0ZW50cy5jLTU2NzAtICogVGhlIGRhdGEgYmxvY2tzIHN0YXJ0aW5nIGZyb20gQG9mZnNldCB0byB0aGUgRU9GIGFyZSBzaGlmdGVkIGJ5IEBsZW5cbi0tXG5mcy9mMmZzL2ZpbGUuYz0xNjgyPXN0YXRpYyBpbnQgZjJmc196ZXJvX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4sXG4tLVxuZnMvZjJmcy9maWxlLmMtMTc4NC1cdGlmIChuZXdfc2l6ZSBcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKSB7XG5mcy9mMmZzL2ZpbGUuYzoxNzg1Olx0XHRpZiAobW9kZSBcdTAwMjYgRkFMTE9DX0ZMX0tFRVBfU0laRSlcbmZzL2YyZnMvZmlsZS5jLTE3ODYtXHRcdFx0ZmlsZV9zZXRfa2VlcF9pc2l6ZShpbm9kZSk7XG4tLVxuZnMvZjJmcy9maWxlLmM9MTg3Mz1zdGF0aWMgaW50IGYyZnNfZXhwYW5kX2lub2RlX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCxcbi0tXG5mcy9mMmZzL2ZpbGUuYy0xOTg1LVx0aWYgKG5ld19zaXplIFx1MDAzZSBpX3NpemVfcmVhZChpbm9kZSkpIHtcbmZzL2YyZnMvZmlsZS5jOjE5ODY6XHRcdGlmIChtb2RlIFx1MDAyNiBGQUxMT0NfRkxfS0VFUF9TSVpFKVxuZnMvZjJmcy9maWxlLmMtMTk4Ny1cdFx0XHRmaWxlX3NldF9rZWVwX2lzaXplKGlub2RlKTtcbi0tXG5mcy9mMmZzL2ZpbGUuYz0xOTk1PXN0YXRpYyBsb25nIGYyZnNfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSxcbi0tXG5mcy9mMmZzL2ZpbGUuYy0yMDEyLVx0aWYgKElTX0VOQ1JZUFRFRChpbm9kZSkgXHUwMDI2XHUwMDI2XG5mcy9mMmZzL2ZpbGUuYzoyMDEzOlx0XHQobW9kZSBcdTAwMjYgKEZBTExPQ19GTF9DT0xMQVBTRV9SQU5HRSB8IEZBTExPQ19GTF9JTlNFUlRfUkFOR0UpKSlcbmZzL2YyZnMvZmlsZS5jLTIwMTQtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbmZzL2YyZnMvZmlsZS5jLTIwMTUtXG5mcy9mMmZzL2ZpbGUuYzoyMDE2Olx0aWYgKG1vZGUgXHUwMDI2IH4oRkFMTE9DX0ZMX0tFRVBfU0laRSB8IEZBTExPQ19GTF9QVU5DSF9IT0xFIHxcbmZzL2YyZnMvZmlsZS5jOjIwMTc6XHRcdFx0RkFMTE9DX0ZMX0NPTExBUFNFX1JBTkdFIHwgRkFMTE9DX0ZMX1pFUk9fUkFOR0UgfFxuZnMvZjJmcy9maWxlLmM6MjAxODpcdFx0XHRGQUxMT0NfRkxfSU5TRVJUX1JBTkdFKSlcbmZzL2YyZnMvZmlsZS5jLTIwMTktXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5mcy9mMmZzL2ZpbGUuYy0yMDI3LVx0aWYgKChmMmZzX2NvbXByZXNzZWRfZmlsZShpbm9kZSkgfHwgZjJmc19pc19waW5uZWRfZmlsZShpbm9kZSkpIFx1MDAyNlx1MDAyNlxuZnMvZjJmcy9maWxlLmM6MjAyODpcdFx0KG1vZGUgXHUwMDI2IChGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8IEZBTExPQ19GTF9DT0xMQVBTRV9SQU5HRSB8XG5mcy9mMmZzL2ZpbGUuYzoyMDI5Olx0XHRcdEZBTExPQ19GTF9aRVJPX1JBTkdFIHwgRkFMTE9DX0ZMX0lOU0VSVF9SQU5HRSkpKSB7XG5mcy9mMmZzL2ZpbGUuYy0yMDMwLVx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbi0tXG5mcy9mMmZzL2ZpbGUuYy0yMDQzLVxuZnMvZjJmcy9maWxlLmM6MjA0NDpcdGlmIChtb2RlIFx1MDAyNiBGQUxMT0NfRkxfUFVOQ0hfSE9MRSkge1xuZnMvZjJmcy9maWxlLmMtMjA0NS1cdFx0aWYgKG9mZnNldCBcdTAwM2U9IGlub2RlLVx1MDAzZWlfc2l6ZSlcbi0tXG5mcy9mMmZzL2ZpbGUuYy0yMDQ4LVx0XHRyZXQgPSBmMmZzX3B1bmNoX2hvbGUoaW5vZGUsIG9mZnNldCwgbGVuKTtcbmZzL2YyZnMvZmlsZS5jOjIwNDk6XHR9IGVsc2UgaWYgKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9DT0xMQVBTRV9SQU5HRSkge1xuZnMvZjJmcy9maWxlLmMtMjA1MC1cdFx0cmV0ID0gZjJmc19jb2xsYXBzZV9yYW5nZShpbm9kZSwgb2Zmc2V0LCBsZW4pO1xuZnMvZjJmcy9maWxlLmM6MjA1MTpcdH0gZWxzZSBpZiAobW9kZSBcdTAwMjYgRkFMTE9DX0ZMX1pFUk9fUkFOR0UpIHtcbmZzL2YyZnMvZmlsZS5jLTIwNTItXHRcdHJldCA9IGYyZnNfemVyb19yYW5nZShpbm9kZSwgb2Zmc2V0LCBsZW4sIG1vZGUpO1xuZnMvZjJmcy9maWxlLmM6MjA1MzpcdH0gZWxzZSBpZiAobW9kZSBcdTAwMjYgRkFMTE9DX0ZMX0lOU0VSVF9SQU5HRSkge1xuZnMvZjJmcy9maWxlLmMtMjA1NC1cdFx0cmV0ID0gZjJmc19pbnNlcnRfcmFuZ2UoaW5vZGUsIG9mZnNldCwgbGVuKTtcbi0tXG5mcy9mYXQvZmlsZS5jPTIyMD1zdGF0aWMgaW50IGZhdF9jb250X2V4cGFuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSlcbi0tXG5mcy9mYXQvZmlsZS5jLTI1OC0gKiBvcGVyYXRpb24sIHdoaWNoIGdldHMgY2FsbGVkIGZyb20gc3lzX2ZhbGxvY2F0ZSBzeXN0ZW0gY2FsbC4gVXNlclxuZnMvZmF0L2ZpbGUuYzoyNTk6ICogc3BhY2UgcmVxdWVzdHMgbGVuIGJ5dGVzIGF0IG9mZnNldC4gSWYgRkFMTE9DX0ZMX0tFRVBfU0laRSBpcyBzZXRcbmZzL2ZhdC9maWxlLmMtMjYwLSAqIHdlIGp1c3QgYWxsb2NhdGUgY2x1c3RlcnMgd2l0aG91dCB6ZXJvaW5nIHRoZW0gb3V0LiBPdGhlcndpc2Ugd2Vcbi0tXG5mcy9mYXQvZmlsZS5jPTI2Mz1zdGF0aWMgbG9uZyBmYXRfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSxcbi0tXG5mcy9mYXQvZmlsZS5jLTI3NC1cdC8qIE5vIHN1cHBvcnQgZm9yIGhvbGUgcHVuY2ggb3Igb3RoZXIgZmFsbG9jYXRlIGZsYWdzLiAqL1xuZnMvZmF0L2ZpbGUuYzoyNzU6XHRpZiAobW9kZSBcdTAwMjYgfkZBTExPQ19GTF9LRUVQX1NJWkUpXG5mcy9mYXQvZmlsZS5jLTI3Ni1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbmZzL2ZhdC9maWxlLmMtMjgyLVx0aW5vZGVfbG9jayhpbm9kZSk7XG5mcy9mYXQvZmlsZS5jOjI4MzpcdGlmIChtb2RlIFx1MDAyNiBGQUxMT0NfRkxfS0VFUF9TSVpFKSB7XG5mcy9mYXQvZmlsZS5jLTI4NC1cdFx0b25kaXNrc2l6ZSA9IGlub2RlLVx1MDAzZWlfYmxvY2tzIFx1MDAzY1x1MDAzYyA5O1xuLS1cbmZzL2Z1c2UvZmlsZS5jPTI5MzA9c3RhdGljIGxvbmcgZnVzZV9maWxlX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXG4tLVxuZnMvZnVzZS9maWxlLmMtMjk0NS1cdGJvb2wgYmxvY2tfZmF1bHRzID0gRlVTRV9JU19EQVgoaW5vZGUpIFx1MDAyNlx1MDAyNlxuZnMvZnVzZS9maWxlLmM6Mjk0NjpcdFx0KCEobW9kZSBcdTAwMjYgRkFMTE9DX0ZMX0tFRVBfU0laRSkgfHxcbmZzL2Z1c2UvZmlsZS5jOjI5NDc6XHRcdCAobW9kZSBcdTAwMjYgKEZBTExPQ19GTF9QVU5DSF9IT0xFIHwgRkFMTE9DX0ZMX1pFUk9fUkFOR0UpKSk7XG5mcy9mdXNlL2ZpbGUuYy0yOTQ4LVxuZnMvZnVzZS9maWxlLmM6Mjk0OTpcdGlmIChtb2RlIFx1MDAyNiB+KEZBTExPQ19GTF9LRUVQX1NJWkUgfCBGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8XG5mcy9mdXNlL2ZpbGUuYzoyOTUwOlx0XHQgICAgIEZBTExPQ19GTF9aRVJPX1JBTkdFKSlcbmZzL2Z1c2UvZmlsZS5jLTI5NTEtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5mcy9mdXNlL2ZpbGUuYy0yOTYzLVxuZnMvZnVzZS9maWxlLmM6Mjk2NDpcdGlmIChtb2RlIFx1MDAyNiAoRkFMTE9DX0ZMX1BVTkNIX0hPTEUgfCBGQUxMT0NfRkxfWkVST19SQU5HRSkpIHtcbmZzL2Z1c2UvZmlsZS5jLTI5NjUtXHRcdGxvZmZfdCBlbmRieXRlID0gb2Zmc2V0ICYjNDM7IGxlbmd0aCAtIDE7XG4tLVxuZnMvZnVzZS9maWxlLmMtMjk3MS1cbmZzL2Z1c2UvZmlsZS5jOjI5NzI6XHRpZiAoIShtb2RlIFx1MDAyNiBGQUxMT0NfRkxfS0VFUF9TSVpFKSBcdTAwMjZcdTAwMjZcbmZzL2Z1c2UvZmlsZS5jLTI5NzMtXHQgICAgb2Zmc2V0ICYjNDM7IGxlbmd0aCBcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKSB7XG4tLVxuZnMvZnVzZS9maWxlLmMtMjk4Mi1cbmZzL2Z1c2UvZmlsZS5jOjI5ODM6XHRpZiAoIShtb2RlIFx1MDAyNiBGQUxMT0NfRkxfS0VFUF9TSVpFKSlcbmZzL2Z1c2UvZmlsZS5jLTI5ODQtXHRcdHNldF9iaXQoRlVTRV9JX1NJWkVfVU5TVEFCTEUsIFx1MDAyNmZpLVx1MDAzZXN0YXRlKTtcbi0tXG5mcy9mdXNlL2ZpbGUuYy0yOTk5LVx0Lyogd2UgY291bGQgaGF2ZSBleHRlbmRlZCB0aGUgZmlsZSAqL1xuZnMvZnVzZS9maWxlLmM6MzAwMDpcdGlmICghKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9LRUVQX1NJWkUpKSB7XG5mcy9mdXNlL2ZpbGUuYy0zMDAxLVx0XHRpZiAoZnVzZV93cml0ZV91cGRhdGVfYXR0cihpbm9kZSwgb2Zmc2V0ICYjNDM7IGxlbmd0aCwgbGVuZ3RoKSlcbi0tXG5mcy9mdXNlL2ZpbGUuYy0zMDA0LVxuZnMvZnVzZS9maWxlLmM6MzAwNTpcdGlmIChtb2RlIFx1MDAyNiAoRkFMTE9DX0ZMX1BVTkNIX0hPTEUgfCBGQUxMT0NfRkxfWkVST19SQU5HRSkpXG5mcy9mdXNlL2ZpbGUuYy0zMDA2LVx0XHR0cnVuY2F0ZV9wYWdlY2FjaGVfcmFuZ2UoaW5vZGUsIG9mZnNldCwgb2Zmc2V0ICYjNDM7IGxlbmd0aCAtIDEpO1xuLS1cbmZzL2Z1c2UvZmlsZS5jLTMwMTAtb3V0OlxuZnMvZnVzZS9maWxlLmM6MzAxMTpcdGlmICghKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9LRUVQX1NJWkUpKVxuZnMvZnVzZS9maWxlLmMtMzAxMi1cdFx0Y2xlYXJfYml0KEZVU0VfSV9TSVpFX1VOU1RBQkxFLCBcdTAwMjZmaS1cdTAwM2VzdGF0ZSk7XG4tLVxuZnMvZ2ZzMi9maWxlLmM9MTI1Mj1zdGF0aWMgbG9uZyBfX2dmczJfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbilcbi0tXG5mcy9nZnMyL2ZpbGUuYy0xMzUwLVxuZnMvZ2ZzMi9maWxlLmM6MTM1MTpcdGlmICghKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9LRUVQX1NJWkUpIFx1MDAyNlx1MDAyNiAocG9zICYjNDM7IGNvdW50KSBcdTAwM2UgaW5vZGUtXHUwMDNlaV9zaXplKVxuZnMvZ2ZzMi9maWxlLmMtMTM1Mi1cdFx0aV9zaXplX3dyaXRlKGlub2RlLCBwb3MgJiM0MzsgY291bnQpO1xuLS1cbmZzL2dmczIvZmlsZS5jPTEzNjg9c3RhdGljIGxvbmcgZ2ZzMl9mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKVxuLS1cbmZzL2dmczIvZmlsZS5jLTEzNzUtXG5mcy9nZnMyL2ZpbGUuYzoxMzc2Olx0aWYgKG1vZGUgXHUwMDI2IH4oRkFMTE9DX0ZMX1BVTkNIX0hPTEUgfCBGQUxMT0NfRkxfS0VFUF9TSVpFKSlcbmZzL2dmczIvZmlsZS5jLTEzNzctXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5mcy9nZnMyL2ZpbGUuYy0xMzg4LVxuZnMvZ2ZzMi9maWxlLmM6MTM4OTpcdGlmICghKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9LRUVQX1NJWkUpIFx1MDAyNlx1MDAyNlxuZnMvZ2ZzMi9maWxlLmMtMTM5MC1cdCAgICAob2Zmc2V0ICYjNDM7IGxlbikgXHUwMDNlIGlub2RlLVx1MDAzZWlfc2l6ZSkge1xuLS1cbmZzL2dmczIvZmlsZS5jLTEzOTktXG5mcy9nZnMyL2ZpbGUuYzoxNDAwOlx0aWYgKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9QVU5DSF9IT0xFKSB7XG5mcy9nZnMyL2ZpbGUuYy0xNDAxLVx0XHRyZXQgPSBfX2dmczJfcHVuY2hfaG9sZShmaWxlLCBvZmZzZXQsIGxlbik7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM9NzAwPXN0YXRpYyBsb25nIGh1Z2V0bGJmc19mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LFxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTcxNC1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjcxNTpcdGlmIChtb2RlIFx1MDAyNiB+KEZBTExPQ19GTF9LRUVQX1NJWkUgfCBGQUxMT0NfRkxfUFVOQ0hfSE9MRSkpXG5mcy9odWdldGxiZnMvaW5vZGUuYy03MTYtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTcxNy1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjcxODpcdGlmIChtb2RlIFx1MDAyNiBGQUxMT0NfRkxfUFVOQ0hfSE9MRSkge1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtNzE5LVx0XHRlcnJvciA9IGh1Z2V0bGJmc19wdW5jaF9ob2xlKGlub2RlLCBvZmZzZXQsIGxlbik7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNzMyLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NzMzOlx0LyogV2UgbmVlZCB0byBjaGVjayBybGltaXQgZXZlbiB3aGVuIEZBTExPQ19GTF9LRUVQX1NJWkUgKi9cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTczNC1cdGVycm9yID0gaW5vZGVfbmV3c2l6ZV9vayhpbm9kZSwgb2Zmc2V0ICYjNDM7IGxlbik7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODE5LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6ODIwOlx0aWYgKCEobW9kZSBcdTAwMjYgRkFMTE9DX0ZMX0tFRVBfU0laRSkgXHUwMDI2XHUwMDI2IG9mZnNldCAmIzQzOyBsZW4gXHUwMDNlIGlub2RlLVx1MDAzZWlfc2l6ZSlcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTgyMS1cdFx0aV9zaXplX3dyaXRlKGlub2RlLCBvZmZzZXQgJiM0MzsgbGVuKTtcbi0tXG5mcy9pb2N0bC5jPTI2OD1zdGF0aWMgaW50IGlvY3RsX3ByZWFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxwLCBpbnQgbW9kZSwgdm9pZCBfX3VzZXIgKmFyZ3ApXG4tLVxuZnMvaW9jdGwuYy0yODgtXG5mcy9pb2N0bC5jOjI4OTpcdHJldHVybiB2ZnNfZmFsbG9jYXRlKGZpbHAsIG1vZGUgfCBGQUxMT0NfRkxfS0VFUF9TSVpFLCBzci5sX3N0YXJ0LFxuZnMvaW9jdGwuYy0yOTAtXHRcdFx0c3IubF9sZW4pO1xuLS1cbmZzL2lvY3RsLmM9Mjk2PXN0YXRpYyBpbnQgY29tcGF0X2lvY3RsX3ByZWFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSxcbi0tXG5mcy9pb2N0bC5jLTMxNy1cbmZzL2lvY3RsLmM6MzE4Olx0cmV0dXJuIHZmc19mYWxsb2NhdGUoZmlsZSwgbW9kZSB8IEZBTExPQ19GTF9LRUVQX1NJWkUsIHNyLmxfc3RhcnQsIHNyLmxfbGVuKTtcbmZzL2lvY3RsLmMtMzE5LX1cbi0tXG5mcy9pb2N0bC5jPTMyMj1zdGF0aWMgaW50IGZpbGVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIGludCBfX3VzZXIgKnApXG4tLVxuZnMvaW9jdGwuYy0zMzEtXHRjYXNlIEZTX0lPQ19VTlJFU1ZTUDY0OlxuZnMvaW9jdGwuYzozMzI6XHRcdHJldHVybiBpb2N0bF9wcmVhbGxvY2F0ZShmaWxwLCBGQUxMT0NfRkxfUFVOQ0hfSE9MRSwgcCk7XG5mcy9pb2N0bC5jLTMzMy1cdGNhc2UgRlNfSU9DX1pFUk9fUkFOR0U6XG5mcy9pb2N0bC5jOjMzNDpcdFx0cmV0dXJuIGlvY3RsX3ByZWFsbG9jYXRlKGZpbHAsIEZBTExPQ19GTF9aRVJPX1JBTkdFLCBwKTtcbmZzL2lvY3RsLmMtMzM1LVx0fVxuLS1cbmZzL2lvY3RsLmM9NjM4PUNPTVBBVF9TWVNDQUxMX0RFRklORTMoaW9jdGwsIHVuc2lnbmVkIGludCwgZmQsIHVuc2lnbmVkIGludCwgY21kLFxuLS1cbmZzL2lvY3RsLmMtNjY0LVx0Y2FzZSBGU19JT0NfVU5SRVNWU1A2NF8zMjpcbmZzL2lvY3RsLmM6NjY1Olx0XHRlcnJvciA9IGNvbXBhdF9pb2N0bF9wcmVhbGxvY2F0ZShmZF9maWxlKGYpLCBGQUxMT0NfRkxfUFVOQ0hfSE9MRSxcbmZzL2lvY3RsLmMtNjY2LVx0XHRcdFx0Y29tcGF0X3B0cihhcmcpKTtcbi0tXG5mcy9pb2N0bC5jLTY2OC1cdGNhc2UgRlNfSU9DX1pFUk9fUkFOR0VfMzI6XG5mcy9pb2N0bC5jOjY2OTpcdFx0ZXJyb3IgPSBjb21wYXRfaW9jdGxfcHJlYWxsb2NhdGUoZmRfZmlsZShmKSwgRkFMTE9DX0ZMX1pFUk9fUkFOR0UsXG5mcy9pb2N0bC5jLTY3MC1cdFx0XHRcdGNvbXBhdF9wdHIoYXJnKSk7XG4tLVxuZnMvbmZzL25mczRmaWxlLmM9MjE5PXN0YXRpYyBsb25nIG5mczQyX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZXAsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKVxuLS1cbmZzL25mcy9uZnM0ZmlsZS5jLTIyOC1cdGNhc2UgMDpcbmZzL25mcy9uZnM0ZmlsZS5jOjIyOTpcdGNhc2UgRkFMTE9DX0ZMX1BVTkNIX0hPTEUgfCBGQUxMT0NfRkxfS0VFUF9TSVpFOlxuZnMvbmZzL25mczRmaWxlLmM6MjMwOlx0Y2FzZSBGQUxMT0NfRkxfWkVST19SQU5HRTpcbmZzL25mcy9uZnM0ZmlsZS5jLTIzMS1cdFx0YnJlYWs7XG4tLVxuZnMvbmZzL25mczRmaWxlLmMtMjM5LVxuZnMvbmZzL25mczRmaWxlLmM6MjQwOlx0aWYgKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9QVU5DSF9IT0xFKVxuZnMvbmZzL25mczRmaWxlLmMtMjQxLVx0XHRyZXR1cm4gbmZzNDJfcHJvY19kZWFsbG9jYXRlKGZpbGVwLCBvZmZzZXQsIGxlbik7XG5mcy9uZnMvbmZzNGZpbGUuYzoyNDI6XHRlbHNlIGlmIChtb2RlIFx1MDAyNiBGQUxMT0NfRkxfWkVST19SQU5HRSlcbmZzL25mcy9uZnM0ZmlsZS5jLTI0My1cdFx0cmV0dXJuIG5mczQyX3Byb2NfemVyb19yYW5nZShmaWxlcCwgb2Zmc2V0ICxsZW4pO1xuLS1cbmZzL25mc2QvbmZzNHByb2MuYz0yMzg0PW5mc2Q0X2RlYWxsb2NhdGUoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IG5mc2Q0X2NvbXBvdW5kX3N0YXRlICpjc3RhdGUsXG4tLVxuZnMvbmZzZC9uZnM0cHJvYy5jLTIzODctXHRyZXR1cm4gbmZzZDRfZmFsbG9jYXRlKHJxc3RwLCBjc3RhdGUsIFx1MDAyNnUtXHUwMDNlZGVhbGxvY2F0ZSxcbmZzL25mc2QvbmZzNHByb2MuYzoyMzg4Olx0XHRcdCAgICAgICBGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8IEZBTExPQ19GTF9LRUVQX1NJWkUpO1xuZnMvbmZzZC9uZnM0cHJvYy5jLTIzODktfVxuLS1cbmZzL250ZnMvZmlsZS5jPTgwND1zdGF0aWMgaW50IG50ZnNfYWxsb2NhdGVfcmFuZ2Uoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCxcbi0tXG5mcy9udGZzL2ZpbGUuYy04MzUtXHRlcnIgPSBudGZzX2F0dHJfZmFsbG9jYXRlKG5pLCBvZmZzZXQsIGxlbixcbmZzL250ZnMvZmlsZS5jOjgzNjpcdFx0XHRtb2RlIFx1MDAyNiBGQUxMT0NfRkxfS0VFUF9TSVpFID8gdHJ1ZSA6IGZhbHNlKTtcbmZzL250ZnMvZmlsZS5jLTgzNy1cbmZzL250ZnMvZmlsZS5jOjgzODpcdGlmICghKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9LRUVQX1NJWkUpIFx1MDAyNlx1MDAyNiBuZXdfc2l6ZSAhPSBvbGRfc2l6ZSlcbmZzL250ZnMvZmlsZS5jLTgzOS1cdFx0aV9zaXplX3dyaXRlKHZpLCBuaS1cdTAwM2VkYXRhX3NpemUpO1xuLS1cbmZzL250ZnMvZmlsZS5jPTk2NT1zdGF0aWMgaW50IG50ZnNfaW5zZXJ0X3JhbmdlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbilcbi0tXG5mcy9udGZzL2ZpbGUuYy0xMDIwLVxuZnMvbnRmcy9maWxlLmM6MTAyMTojZGVmaW5lIE5URlNfRkFMTE9DX0ZMX1NVUFBPUlRFRFx0XHRcdFx0XHRcXFxuZnMvbnRmcy9maWxlLmM6MTAyMjpcdFx0KEZBTExPQ19GTF9BTExPQ0FURV9SQU5HRSB8IEZBTExPQ19GTF9LRUVQX1NJWkUgfFx0XFxcbmZzL250ZnMvZmlsZS5jOjEwMjM6XHRcdCBGQUxMT0NfRkxfSU5TRVJUX1JBTkdFIHwgRkFMTE9DX0ZMX1BVTkNIX0hPTEUgfFx0XFxcbmZzL250ZnMvZmlsZS5jOjEwMjQ6XHRcdCBGQUxMT0NfRkxfQ09MTEFQU0VfUkFOR0UpXG5mcy9udGZzL2ZpbGUuYy0xMDI1LVxuZnMvbnRmcy9maWxlLmM9MTAyNj1zdGF0aWMgbG9uZyBudGZzX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4pXG4tLVxuZnMvbnRmcy9maWxlLmMtMTAzNC1cbmZzL250ZnMvZmlsZS5jOjEwMzU6XHRpZiAobW9kZSBcdTAwMjYgfihOVEZTX0ZBTExPQ19GTF9TVVBQT1JURUQpKVxuZnMvbnRmcy9maWxlLmMtMTAzNi1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbmZzL250ZnMvZmlsZS5jLTEwNjYtXHRpbm9kZV9kaW9fd2FpdCh2aSk7XG5mcy9udGZzL2ZpbGUuYzoxMDY3Olx0aWYgKG1vZGUgXHUwMDI2IChGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8IEZBTExPQ19GTF9DT0xMQVBTRV9SQU5HRSB8XG5mcy9udGZzL2ZpbGUuYzoxMDY4Olx0XHQgICAgRkFMTE9DX0ZMX0lOU0VSVF9SQU5HRSkpIHtcbmZzL250ZnMvZmlsZS5jLTEwNjktXHRcdGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrKHZpLVx1MDAzZWlfbWFwcGluZyk7XG4tLVxuZnMvbnRmcy9maWxlLmMtMTA3Mi1cbmZzL250ZnMvZmlsZS5jOjEwNzM6XHRzd2l0Y2ggKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9NT0RFX01BU0spIHtcbmZzL250ZnMvZmlsZS5jOjEwNzQ6XHRjYXNlIEZBTExPQ19GTF9BTExPQ0FURV9SQU5HRTpcbmZzL250ZnMvZmlsZS5jOjEwNzU6XHRjYXNlIEZBTExPQ19GTF9LRUVQX1NJWkU6XG5mcy9udGZzL2ZpbGUuYy0xMDc2LVx0XHRlcnIgPSBudGZzX2FsbG9jYXRlX3JhbmdlKG5pLCBtb2RlLCBvZmZzZXQsIGxlbik7XG5mcy9udGZzL2ZpbGUuYy0xMDc3LVx0XHRicmVhaztcbmZzL250ZnMvZmlsZS5jOjEwNzg6XHRjYXNlIEZBTExPQ19GTF9QVU5DSF9IT0xFOlxuZnMvbnRmcy9maWxlLmMtMTA3OS1cdFx0ZXJyID0gbnRmc19wdW5jaF9ob2xlKG5pLCBtb2RlLCBvZmZzZXQsIGxlbik7XG5mcy9udGZzL2ZpbGUuYy0xMDgwLVx0XHRicmVhaztcbmZzL250ZnMvZmlsZS5jOjEwODE6XHRjYXNlIEZBTExPQ19GTF9DT0xMQVBTRV9SQU5HRTpcbmZzL250ZnMvZmlsZS5jLTEwODItXHRcdGVyciA9IG50ZnNfY29sbGFwc2VfcmFuZ2UobmksIG9mZnNldCwgbGVuKTtcbmZzL250ZnMvZmlsZS5jLTEwODMtXHRcdGJyZWFrO1xuZnMvbnRmcy9maWxlLmM6MTA4NDpcdGNhc2UgRkFMTE9DX0ZMX0lOU0VSVF9SQU5HRTpcbmZzL250ZnMvZmlsZS5jLTEwODUtXHRcdGVyciA9IG50ZnNfaW5zZXJ0X3JhbmdlKG5pLCBvZmZzZXQsIGxlbik7XG4tLVxuZnMvbnRmczMvZmlsZS5jPTQwMT1zdGF0aWMgaW50IG50ZnNfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG5ld19zaXplKVxuLS1cbmZzL250ZnMzL2ZpbGUuYy00NDEtICogb3BlcmF0aW9uLCB3aGljaCBnZXRzIGNhbGxlZCBmcm9tIHN5c19mYWxsb2NhdGUgc3lzdGVtIGNhbGwuIFVzZXJcbmZzL250ZnMzL2ZpbGUuYzo0NDI6ICogc3BhY2UgcmVxdWVzdHMgJiMzOTtsZW4mIzM5OyBieXRlcyBhdCAmIzM5O3ZibyYjMzk7LiBJZiBGQUxMT0NfRkxfS0VFUF9TSVpFIGlzIHNldFxuZnMvbnRmczMvZmlsZS5jLTQ0My0gKiB3ZSBqdXN0IGFsbG9jYXRlIGNsdXN0ZXJzIHdpdGhvdXQgemVyb2luZyB0aGVtIG91dC4gT3RoZXJ3aXNlIHdlXG4tLVxuZnMvbnRmczMvZmlsZS5jPTQ0Nj1zdGF0aWMgbG9uZyBudGZzX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCB2Ym8sIGxvZmZfdCBsZW4pXG4tLVxuZnMvbnRmczMvZmlsZS5jLTQ2OC1cdCAqL1xuZnMvbnRmczMvZmlsZS5jOjQ2OTpcdGlmIChtb2RlIFx1MDAyNiBGQUxMT0NfRkxfUFVOQ0hfSE9MRSkge1xuZnMvbnRmczMvZmlsZS5jLTQ3MC1cdFx0aWYgKCFpc19zdXBwb3J0ZWRfaG9sZXMpXG5mcy9udGZzMy9maWxlLmMtNDcxLVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbmZzL250ZnMzL2ZpbGUuYzo0NzI6XHR9IGVsc2UgaWYgKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9DT0xMQVBTRV9SQU5HRSkge1xuZnMvbnRmczMvZmlsZS5jOjQ3MzpcdH0gZWxzZSBpZiAobW9kZSBcdTAwMjYgRkFMTE9DX0ZMX0lOU0VSVF9SQU5HRSkge1xuZnMvbnRmczMvZmlsZS5jLTQ3NC1cdFx0aWYgKCFpc19zdXBwb3J0ZWRfaG9sZXMpXG4tLVxuZnMvbnRmczMvZmlsZS5jLTQ3Ni1cdH0gZWxzZSBpZiAobW9kZSBcdTAwMjZcbmZzL250ZnMzL2ZpbGUuYzo0Nzc6XHRcdCAgIH4oRkFMTE9DX0ZMX0tFRVBfU0laRSB8IEZBTExPQ19GTF9QVU5DSF9IT0xFIHxcbmZzL250ZnMzL2ZpbGUuYzo0Nzg6XHRcdCAgICAgRkFMTE9DX0ZMX0NPTExBUFNFX1JBTkdFIHwgRkFMTE9DX0ZMX0lOU0VSVF9SQU5HRSkpIHtcbmZzL250ZnMzL2ZpbGUuYy00NzktXHRcdG50ZnNfaW5vZGVfd2Fybihpbm9kZSwgXCYjMzQ7ZmFsbG9jYXRlKDB4JXgpIGlzIG5vdCBzdXBwb3J0ZWRcJiMzNDssXG4tLVxuZnMvbnRmczMvZmlsZS5jLTQ5Ni1cbmZzL250ZnMzL2ZpbGUuYzo0OTc6XHRpZiAobW9kZSBcdTAwMjYgKEZBTExPQ19GTF9QVU5DSF9IT0xFIHwgRkFMTE9DX0ZMX0NPTExBUFNFX1JBTkdFIHxcbmZzL250ZnMzL2ZpbGUuYzo0OTg6XHRcdCAgICBGQUxMT0NfRkxfSU5TRVJUX1JBTkdFKSkge1xuZnMvbnRmczMvZmlsZS5jLTQ5OS1cdFx0aW5vZGVfZGlvX3dhaXQoaW5vZGUpO1xuLS1cbmZzL250ZnMzL2ZpbGUuYy01MDMtXG5mcy9udGZzMy9maWxlLmM6NTA0Olx0aWYgKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9QVU5DSF9IT0xFKSB7XG5mcy9udGZzMy9maWxlLmMtNTA1LVx0XHR1MzIgZnJhbWVfc2l6ZTtcbi0tXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwOToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzU1NQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgcHV0IG9uIG15IHRoaW5raW5nIGNhcC4gSGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgbWVudGFsIHByb2Nlc3M6CgoqKkRpdmluZyBEZWVwIGludG8gYGZhbGxvY2F0ZWAgRmxhZ3MqKgoKSG9sZCBvbiBhIHNlY29uZC4uLiBpcyBgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FU2AgYWN0dWFsbHkgYSBzdGFuZGFyZCBgZmFsbG9jYXRlYCBmbGFnPyBJIGNvdWxkIGhhdmUgc3dvcm4gaXQgd2FzLCBidXQgc29tZXRoaW5nIGZlZWxzIG9mZi4gTGV0IG1lIGRvdWJsZS1jaGVjay4gT2theSwgbGV0JiMzOTtzIHNlZS4uLiBpZiBpdCYjMzk7cyBub3QgYSBzdGFuZGFyZCwgaXQmIzM5O3MgcHJvYmFibHkgZGVmaW5lZCBpbnRlcm5hbGx5LiBBaGEhIEkgcmVtZW1iZXIgc2VlaW5nIGl0IG1lbnRpb25lZCBpbiBgYmxvY2svZm9wcy5jYC4gQnV0IHdhaXQuLi50aGF0JiMzOTtzIG5vdCByaWdodCBlaXRoZXIuIEl0ICpzaG91bGQqIGJlIGluIHRoZSBwdWJsaWMgQVBJIGhlYWRlcnMuIEkgbmVlZCB0byBiZSBzdXJlLiBMZXQmIzM5O3MgbG9vayBpbnNpZGUgYGluY2x1ZGUvdWFwaS9saW51eC9mYWxsb2MuaGAuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDA5OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0ZBTExPQ19GTF9XUklURV9aRVJPRVMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svZm9wcy5jPTgxMT1zdGF0aWMgc3NpemVfdCBibGtkZXZfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbi0tXG5ibG9jay9mb3BzLmMtODY1LVx0XHQoRkFMTE9DX0ZMX0tFRVBfU0laRSB8IEZBTExPQ19GTF9QVU5DSF9IT0xFIHxcdFx0XFxcbmJsb2NrL2ZvcHMuYzo4NjY6XHRcdCBGQUxMT0NfRkxfWkVST19SQU5HRSB8IEZBTExPQ19GTF9XUklURV9aRVJPRVMpXG5ibG9jay9mb3BzLmMtODY3LVxuYmxvY2svZm9wcy5jPTg2OD1zdGF0aWMgbG9uZyBibGtkZXZfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IHN0YXJ0LFxuLS1cbmJsb2NrL2ZvcHMuYy04ODQtXHQgKi9cbmJsb2NrL2ZvcHMuYzo4ODU6XHRpZiAoKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9XUklURV9aRVJPRVMpIFx1MDAyNlx1MDAyNlxuYmxvY2svZm9wcy5jLTg4Ni1cdCAgICAhYmRldl93cml0ZV96ZXJvZXNfdW5tYXBfc2VjdG9ycyhiZGV2KSlcbi0tXG5ibG9jay9mb3BzLmMtOTE3LVx0XHRicmVhaztcbmJsb2NrL2ZvcHMuYzo5MTg6XHRjYXNlIEZBTExPQ19GTF9XUklURV9aRVJPRVM6XG5ibG9jay9mb3BzLmMtOTE5LVx0XHRmbGFncyA9IDA7XG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9NDczND1zdGF0aWMgbG9uZyBleHQ0X3plcm9fcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNDc5Mi1cdCAqL1xuZnMvZXh0NC9leHRlbnRzLmM6NDc5MzpcdGlmIChtb2RlIFx1MDAyNiBGQUxMT0NfRkxfV1JJVEVfWkVST0VTKSB7XG5mcy9leHQ0L2V4dGVudHMuYy00Nzk0LVx0XHRpZiAoIUlTX0FMSUdORUQob2Zmc2V0LCBibG9ja3NpemUpIFx1MDAyNlx1MDAyNlxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTQ4MDItXHRpZiAoYWxpZ25fZW5kIFx1MDAzZSBhbGlnbl9zdGFydCkge1xuZnMvZXh0NC9leHRlbnRzLmM6NDgwMzpcdFx0aWYgKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9XUklURV9aRVJPRVMpXG5mcy9leHQ0L2V4dGVudHMuYy00ODA0LVx0XHRcdGZsYWdzID0gRVhUNF9HRVRfQkxPQ0tTX0NSRUFURV9aRVJPIHwgRVhUNF9FWF9OT0NBQ0hFO1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTQ4MTgtXHQvKlxuZnMvZXh0NC9leHRlbnRzLmM6NDgxOTpcdCAqIEluIEZBTExPQ19GTF9XUklURV9aRVJPRVMgbW9kZSwgZWRnZXMgdGhhdCBoYXZlIGJlZW4gcGFydGlhbGx5XG5mcy9leHQ0L2V4dGVudHMuYy00ODIwLVx0ICogemVyb2VkIG11c3QgYmUgd3JpdHRlbiBiYWNrIHRvIGVuc3VyZSB0aGUgZW50aXJlIHplcm9lZCByYW5nZVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTQ4MjQtXHRpZiAocGFydGlhbF96ZXJvZWQgXHUwMDI2XHUwMDI2XG5mcy9leHQ0L2V4dGVudHMuYzo0ODI1Olx0ICAgICgobW9kZSBcdTAwMjYgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FUykgfHxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ4MjYtXHQgICAgIChmaWxlLVx1MDAzZWZfZmxhZ3MgXHUwMDI2IE9fU1lOQykgfHwgSVNfU1lOQyhpbm9kZSkpKSB7XG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9NDkwMz1sb25nIGV4dDRfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbilcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy00OTIxLVx0ICovXG5mcy9leHQ0L2V4dGVudHMuYzo0OTIyOlx0aWYgKChtb2RlIFx1MDAyNiBGQUxMT0NfRkxfV1JJVEVfWkVST0VTKSBcdTAwMjZcdTAwMjZcbmZzL2V4dDQvZXh0ZW50cy5jLTQ5MjMtXHQgICAgIWJkZXZfd3JpdGVfemVyb2VzX3VubWFwX3NlY3RvcnMoaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2JkZXYpKVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTQ5MjgtXHRcdCAgICAgRkFMTE9DX0ZMX1pFUk9fUkFOR0UgfCBGQUxMT0NfRkxfQ09MTEFQU0VfUkFOR0UgfFxuZnMvZXh0NC9leHRlbnRzLmM6NDkyOTpcdFx0ICAgICBGQUxMT0NfRkxfSU5TRVJUX1JBTkdFIHwgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FUykpXG5mcy9leHQ0L2V4dGVudHMuYy00OTMwLVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNDk3MC1cdGNhc2UgRkFMTE9DX0ZMX1pFUk9fUkFOR0U6XG5mcy9leHQ0L2V4dGVudHMuYzo0OTcxOlx0Y2FzZSBGQUxMT0NfRkxfV1JJVEVfWkVST0VTOlxuZnMvZXh0NC9leHRlbnRzLmMtNDk3Mi1cdFx0cmV0ID0gZXh0NF96ZXJvX3JhbmdlKGZpbGUsIG9mZnNldCwgbGVuLCBtb2RlKTtcbi0tXG5mcy9vcGVuLmM9MjUwPWludCB2ZnNfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbilcbi0tXG5mcy9vcGVuLmMtMjc5LVx0Y2FzZSBGQUxMT0NfRkxfSU5TRVJUX1JBTkdFOlxuZnMvb3Blbi5jOjI4MDpcdGNhc2UgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FUzpcbmZzL29wZW4uYy0yODEtXHRcdGlmIChtb2RlIFx1MDAyNiBGQUxMT0NfRkxfS0VFUF9TSVpFKVxuLS1cbmluY2x1ZGUvbGludXgvZmFsbG9jLmg9MTI9c3RydWN0IHNwYWNlX3Jlc3Yge1xuLS1cbmluY2x1ZGUvbGludXgvZmFsbG9jLmgtMzktXHRcdFx0XHQgRkFMTE9DX0ZMX1VOU0hBUkVfUkFOR0UgfFx0XFxcbmluY2x1ZGUvbGludXgvZmFsbG9jLmg6NDA6XHRcdFx0XHQgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FUylcbmluY2x1ZGUvbGludXgvZmFsbG9jLmgtNDEtXG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvZXh0NC5oPTc5PVRSQUNFX0RFRklORV9FTlVNKEVTX1JFRkVSRU5DRURfQik7XG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvZXh0NC5oLTkyLVx0eyBGQUxMT0NfRkxfWkVST19SQU5HRSxcdFx0XCYjMzQ7WkVST19SQU5HRVwmIzM0O30sXHRcdFxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0Lmg6OTM6XHR7IEZBTExPQ19GTF9XUklURV9aRVJPRVMsXHRcJiMzNDtXUklURV9aRVJPRVNcJiMzNDt9KVxuaW5jbHVkZS90cmFjZS9ldmVudHMvZXh0NC5oLTk0LVxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9mYWxsb2MuaC04MS0vKlxuaW5jbHVkZS91YXBpL2xpbnV4L2ZhbGxvYy5oOjgyOiAqIEZBTExPQ19GTF9XUklURV9aRVJPRVMgemVyb2VzIGEgc3BlY2lmaWVkIGZpbGUgcmFuZ2UgaW4gc3VjaCBhIHdheSB0aGF0XG5pbmNsdWRlL3VhcGkvbGludXgvZmFsbG9jLmgtODMtICogc3Vic2VxdWVudCB3cml0ZXMgdG8gdGhhdCByYW5nZSBkbyBub3QgcmVxdWlyZSBmdXJ0aGVyIGNoYW5nZXMgdG8gdGhlIGZpbGVcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvZmFsbG9jLmgtOTUtICovXG5pbmNsdWRlL3VhcGkvbGludXgvZmFsbG9jLmg6OTY6I2RlZmluZSBGQUxMT0NfRkxfV1JJVEVfWkVST0VTXHRcdDB4ODBcbmluY2x1ZGUvdWFwaS9saW51eC9mYWxsb2MuaC05Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwOToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTMzOAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDM3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBGQUxMT0NfRkxfV1JJVEVfWkVST0VTYCBJbXBsZW1lbnRhdGlvbiBpbiBleHQ0KioKCk9rYXksIHNvIHRoZXJlJiMzOTtzIGEgbmV3IGZsYWcsIGBGQUxMT0NfRkxfV1JJVEVfWkVST0VTYCAoMHg4MCksIGluIGBmYWxsb2MuaGAuIEludGVyZXN0aW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBhZGRpdGlvbiwgbm90IGp1c3QgYSByZWZhY3RvcmluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgaW1wbGVtZW50ZWQgd2l0aGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIFRoZSBwYXRjaCBtb2RpZmllcyBgZXh0NF96ZXJvX3JhbmdlYCBhbmQgYGV4dDRfYWxsb2NfZmlsZV9ibG9ja3NgIHRvIHN1cHBvcnQgdGhpcywgc28gdGhleSYjMzk7cmUgZGVmaW5pdGVseSBrZXkuIEkgc2hvdWxkIGFsc28gY2hlY2sgYGV4dDRfemVyb19wYXJ0aWFsX2Jsb2Nrc2AgYmVjYXVzZSB0aGUgZGVzY3JpcHRpb24gbWVudGlvbnMgaXQuIExldCYjMzk7cyBzZWUuLi4gYWgsIGBleHQ0X3plcm9fcGFydGlhbF9ibG9ja3NgIGlzIG5vdyByZXR1cm5pbmcgYSBiaXRtYXNrIG9mIHBhcnRpYWwgemVyb2VkIGVkZ2VzLiBHb3QgaXQuIEFuZCBgZXh0NF9hbGxvY19maWxlX2Jsb2Nrc2AgaXMgaGFuZGxpbmcgYGFsbG9jX3plcm9gIHdpdGggdW53cml0dGVuIGV4dGVudHMsIHBvdGVudGlhbGx5IGFkZGluZyB0aGUgaW5vZGUgdG8gdGhlIG9ycGhhbiBsaXN0LgoKVGltZSB0byBwaW5wb2ludCB0aGUgY2VudHJhbCBmdW5jdGlvbnMuIENsZWFybHksIGBleHQ0X3plcm9fcmFuZ2VgLCBgZXh0NF9hbGxvY19maWxlX2Jsb2Nrc2AsIGFuZCBgZXh0NF96ZXJvX3BhcnRpYWxfYmxvY2tzYCBhcmUgY3JpdGljYWwuIEkgYWxzbyBuZWVkIHRvIGxvb2sgYXQgYGV4dDRfbG9hZF90YWlsX2JoYCBzaW5jZSBpdCYjMzk7cyBtb2RpZmllZCBhbmQgc2VlbXMgcmVsYXRlZCB0byB0aGUgaW5vZGUuIEFuZCwganVzdCBmb3IgY29udGV4dCwgSSBzaG91bGQgcXVpY2tseSB2ZXJpZnkgaWYgYGV4dDRfYmxvY2tfemVyb19lb2ZgIG1pZ2h0IGJlIHJlbGV2YW50LCBldmVuIGlmIGl0JiMzOTtzIG5vdCBjaGFuZ2VkIGRpcmVjdGx5LgoKV2FpdCwgYSBzZWNvbmQgbG9va+KApiBgZXh0NF9hbGxvY19maWxlX2Jsb2Nrc2AgYW5kIGBleHQ0X3plcm9fcmFuZ2VgIGFyZSBzdGF0aWMsIHdoaWxlIGBleHQ0X3plcm9fcGFydGlhbF9ibG9ja3NgIGlzIGV4cG9ydGVkLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gQW5kIGBleHQ0X2xvYWRfdGFpbF9iaGAgaXMgYWxzbyBzdGF0aWMuIE9rYXkuIFNvLCB0aGUgcXVlc3Rpb24gaXMsIHdoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50PwoKUmlnaHQsIGl0IG1ha2VzIHNlbnNlOiBgZXh0NF9mYWxsb2NhdGVgIGNhbGxzIGBleHQ0X3plcm9fcmFuZ2VgLiBTbywgYGV4dDRfZmFsbG9jYXRlYCBpcyB0aGUgcHVibGljIGZhY2luZyBpbnRlcmZhY2UuIE5vdywgSSBzaG91bGQgZm9jdXMgbXkgc2VhcmNoIHdpdGhpbiBgZnMvZXh0NC9leHRlbnRzLmNgIGZvciBgZXh0NF96ZXJvX3JhbmdlYCBhbmQgdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDA5OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfemVyb19yYW5nZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2V4dGVudHMuYz00NzMyPXN0YXRpYyBpbnQgZXh0NF9pbnNlcnRfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4pO1xuZnMvZXh0NC9leHRlbnRzLmMtNDczMy1cbmZzL2V4dDQvZXh0ZW50cy5jOjQ3MzQ6c3RhdGljIGxvbmcgZXh0NF96ZXJvX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LFxuZnMvZXh0NC9leHRlbnRzLmMtNDczNS1cdFx0XHQgICAgbG9mZl90IGxlbiwgaW50IG1vZGUpXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNDc0NC1cbmZzL2V4dDQvZXh0ZW50cy5jOjQ3NDU6XHR0cmFjZV9leHQ0X3plcm9fcmFuZ2UoaW5vZGUsIG9mZnNldCwgbGVuLCBtb2RlKTtcbmZzL2V4dDQvZXh0ZW50cy5jLTQ3NDYtXHRXQVJOX09OX09OQ0UoIWlub2RlX2lzX2xvY2tlZChpbm9kZSkpO1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTQ5MDM9bG9uZyBleHQ0X2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4pXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNDk3MS1cdGNhc2UgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FUzpcbmZzL2V4dDQvZXh0ZW50cy5jOjQ5NzI6XHRcdHJldCA9IGV4dDRfemVyb19yYW5nZShmaWxlLCBvZmZzZXQsIGxlbiwgbW9kZSk7XG5mcy9leHQ0L2V4dGVudHMuYy00OTczLVx0XHRicmVhaztcbi0tXG5mcy9leHQ0L2lub2RlLmM9NDAwND12b2lkIGV4dDRfc2V0X2FvcHMoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L2lub2RlLmMtNDAyNS0gKiBIZXJlIHdlIGNhbiYjMzk7dCBza2lwIGFuIHVud3JpdHRlbiBidWZmZXIgZXZlbiB0aG91Z2ggaXQgdXN1YWxseSByZWFkcyB6ZXJvXG5mcy9leHQ0L2lub2RlLmM6NDAyNjogKiBiZWNhdXNlIGl0IG1pZ2h0IGhhdmUgZGF0YSBpbiBwYWdlY2FjaGUgKGVnLCBpZiBjYWxsZWQgZnJvbSBleHQ0X3plcm9fcmFuZ2UsXG5mcy9leHQ0L2lub2RlLmMtNDAyNy0gKiBleHQ0X3B1bmNoX2hvbGUsIGV0Yykgd2hpY2ggbmVlZHMgdG8gYmUgcHJvcGVybHkgemVyb2VkIG91dC4gT3RoZXJ3aXNlIGFcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0Lmg9MTQ0ND1ERUZJTkVfRVZFTlQoZXh0NF9fZmFsbG9jYXRlX21vZGUsIGV4dDRfcHVuY2hfaG9sZSxcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0LmgtMTQ1MC1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2V4dDQuaDoxNDUxOkRFRklORV9FVkVOVChleHQ0X19mYWxsb2NhdGVfbW9kZSwgZXh0NF96ZXJvX3JhbmdlLFxuaW5jbHVkZS90cmFjZS9ldmVudHMvZXh0NC5oLTE0NTItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDk6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA3NzgKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgRXh0NCBGdXp6aW5nIFRhcmdldHMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdG8gYmVzdCBhcHByb2FjaCBmdXp6aW5nIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIE15IHByaW1hcnkgdGFyZ2V0cyBzaG91bGQgYmUgY2VudGVyZWQgYXJvdW5kIGJsb2NrIHplcm9pbmcuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSB0aGlzLCBzcGVjaWZpY2FsbHk6IGBleHQ0X3plcm9fcGFydGlhbF9ibG9ja3NgLCBhbmQgYGV4dDRfemVyb19yYW5nZWAuIFdhaXQgYSBtaW51dGUsIGBleHQ0X3plcm9fcmFuZ2VgIGlzIGRlY2xhcmVkIGBzdGF0aWNgLiBEb2VzIHN5emthbGxlciBoYW5kbGUgdGhvc2U/IFllcywgaXQgY2FuLCBpZiB0aGUgc3RhdGljIGZ1bmN0aW9uIGlzIGV4cG9ydGVkIHRvIHRoZSBzeW1ib2wgdGFibGUuIEhvd2V2ZXIsIGl0IGlzIHVzdWFsbHkgYmV0dGVyIHRvIHByb3ZpZGUgdGhlIGdsb2JhbCBlbnRyeSBwb2ludC4gVGhlcmVmb3JlIEkgd2lsbCBhbHNvIGluY2x1ZGUgYGV4dDRfZmFsbG9jYXRlYCBhcyB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byB6ZXJvaW5nLiBJIHNob3VsZCBhbHNvIGluY2x1ZGUgYGV4dDRfYWxsb2NfZmlsZV9ibG9ja3NgLCBhcyBpdCBpcyByZWxhdGVkIHRvIGJsb2NrIGFsbG9jYXRpb24uIFNvLCB0byBzdW1tYXJpc2UsIG15IGtleSB0YXJnZXRzIHdpbGwgYmUgYGV4dDRfZmFsbG9jYXRlYCwgYGV4dDRfemVyb19yYW5nZWAsIGBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzYCBhbmQgYGV4dDRfemVyb19wYXJ0aWFsX2Jsb2Nrc2AuCgpOZXh0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9ucyBlbmFibGVkLiBPYnZpb3VzbHksIGBFWFQ0X0ZTYCBpcyByZXF1aXJlZC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgYGZzL2V4dDQvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIHRha2UgaW50byBhY2NvdW50LiBHb3R0YSBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBjcml0aWNhbCBmb3IgdGhlc2UgZnVuY3Rpb25zIHRvIGJlIGVuYWJsZWQgb3IgaGF2ZSB0aGUgZGVzaXJlZCBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDk6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEVYVDRfRlMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9leHQ0L0tjb25maWc6Mjpjb25maWcgRVhUNF9GU1xuZnMvZXh0NC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVwmIzM0O1xuLS1cbmZzL2V4dDQvS2NvbmZpZz0zNT1jb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcbi0tXG5mcy9leHQ0L0tjb25maWctNDUtXG5mcy9leHQ0L0tjb25maWc6NDY6Y29uZmlnIEVYVDRfRlNfUE9TSVhfQUNMXG5mcy9leHQ0L0tjb25maWctNDctXHRib29sIFwmIzM0O0V4dDQgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWctNTUtXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcbmZzL2V4dDQvS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7RXh0NCBTZWN1cml0eSBMYWJlbHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDk6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0OTIKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBFWFQ0IEJsb2NrIEFsbG9jYXRpb24qKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIHByaW1hcmlseSBkZWFsaW5nIHdpdGggYEVYVDRfRlNgIGhlcmUg4oCTIHRoYXQmIzM5O3MgdGhlIGZpbGVzeXN0ZW0gd2UmIzM5O3JlIGZvY3VzaW5nIG9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSB2ZXJpZnkgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgdGllZCB0byBgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FU2AuIEkmIzM5O20gcHJldHR5IHN1cmUgaXQmIzM5O3MganVzdCBhIG5ldyBmbGFnIGludHJvZHVjZWQgd2l0aGluIHRoZSBgZmFsbG9jYXRlYCBzeXN0ZW0gY2FsbCBpdHNlbGYuIEhvd2V2ZXIsIGl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGRvdWJsZS1jaGVjay4KCk5vdywgSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgc3VzcGljaW9uIGJ5IHF1aWNrbHkgcmV2aWV3aW5nIGBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzYC4gSSB3YW50IHRvIHNlZSBwcmVjaXNlbHkgaG93IGl0JiMzOTtzIGhhbmRsZWQgd2l0aGluIHRoZSBgZXh0NGAgYmxvY2sgYWxsb2NhdGlvbiByb3V0aW5lcy4gVGhpcyYjMzk7bGwgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyB0aGlzIGZsYWcgaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSBsYXJnZXIgYWxsb2NhdGlvbiBmcmFtZXdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDA5OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfYWxsb2NfZmlsZV9ibG9ja3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHRlbnRzLmM9NDU0Mz1pbnQgZXh0NF9leHRfdHJ1bmNhdGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy00NTczLVxuZnMvZXh0NC9leHRlbnRzLmM6NDU3NDpzdGF0aWMgaW50IGV4dDRfYWxsb2NfZmlsZV9ibG9ja3Moc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4sXG5mcy9leHQ0L2V4dGVudHMuYy00NTc1LVx0XHRcdFx0ICBsb2ZmX3QgbmV3X3NpemUsIGludCBmbGFncylcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz00NzM0PXN0YXRpYyBsb25nIGV4dDRfemVyb19yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy00NzY1LVx0aWYgKCFJU19BTElHTkVEKG9mZnNldCB8IGVuZCwgYmxvY2tzaXplKSkge1xuZnMvZXh0NC9leHRlbnRzLmM6NDc2NjpcdFx0cmV0ID0gZXh0NF9hbGxvY19maWxlX2Jsb2NrcyhmaWxlLCBvZmZzZXQsIGxlbiwgbmV3X3NpemUsXG5mcy9leHQ0L2V4dGVudHMuYy00NzY3LVx0XHRcdFx0XHQgICAgIGZsYWdzKTtcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy00ODA3LVx0XHRcdFx0ICBFWFQ0X0VYX05PQ0FDSEUpO1xuZnMvZXh0NC9leHRlbnRzLmM6NDgwODpcdFx0cmV0ID0gZXh0NF9hbGxvY19maWxlX2Jsb2NrcyhmaWxlLCBhbGlnbl9zdGFydCxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ4MDktXHRcdFx0XHRcdCAgICAgYWxpZ25fZW5kIC0gYWxpZ25fc3RhcnQsIG5ld19zaXplLFxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTQ4NTU9c3RhdGljIGxvbmcgZXh0NF9kb19mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNDg3OS1cbmZzL2V4dDQvZXh0ZW50cy5jOjQ4ODA6XHRyZXQgPSBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzKGZpbGUsIG9mZnNldCwgbGVuLCBuZXdfc2l6ZSxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ4ODEtXHRcdFx0XHQgICAgIEVYVDRfR0VUX0JMT0NLU19DUkVBVEVfVU5XUklUX0VYVCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDA5OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMjU1CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGV4dDQgRmlsZXN5c3RlbSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgZGVlcCBpbnRvIHRoZSBleHQ0IGJsb2NrIGFsbG9jYXRpb24gYW5kIHplcm9pbmcgcm91dGluZXMuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWJvdXQgYWRkaW5nIHN1cHBvcnQgZm9yIGBGQUxMT0NfRkxfV1JJVEVfWkVST0VTYC4gSSYjMzk7bSBzZWVpbmcgbW9kaWZpY2F0aW9ucyB0byBgZXh0NF9hbGxvY19maWxlX2Jsb2Nrc2AsIGBleHQ0X3plcm9fcmFuZ2VgLCBhbmQgYGV4dDRfemVyb19wYXJ0aWFsX2Jsb2Nrc2Ag4oCTIHRoYXQmIzM5O3MgYSBzaWduaWZpY2FudCBjaHVuayBvZiBjb3JlIGZ1bmN0aW9uYWxpdHkuIEFuZCB0aGVyZSYjMzk7cyBhbHNvIGEgdHdlYWsgdG8gYGV4dDRfbG9hZF90YWlsX2JoYCwgd2hpY2ggbWFrZXMgbWUgaW1tZWRpYXRlbHkgdGhpbmsgYWJvdXQgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIHVud3JpdHRlbiBleHRlbnRzIGFuZCBob3cgdGhlIGZpbGVzeXN0ZW0gaGFuZGxlcyBob2xlcy4gVGhlIGNoYW5nZSB0byBgZXh0NF96ZXJvX3BhcnRpYWxfYmxvY2tzYCByZXR1cm5pbmcgYSBiaXRtYXNrIGlzIGFsc28gaW50ZXJlc3Rpbmc7IHRoYXQgY291bGQgaW1wYWN0IGVycm9yIGhhbmRsaW5nIG9yIGhvdyB6ZXJvaW5nIGlzIHRyYWNrZWQuCgpUaGlzIGlzIGEgcHJldHR5IGZ1bmRhbWVudGFsIGZ1bmN0aW9uYWwgY2hhbmdlLiBJdCYjMzk7cyB0b3VjaGluZyBob3cgdGhlIGZpbGVzeXN0ZW0gYWxsb2NhdGVzIGJsb2NrcywgaG93IGl0IHplcm9lcyBkYXRhIChwYXJ0aWFsbHkgKmFuZCogY29tcGxldGVseSksIGFuZCBob3cgaXQgZGVhbHMgd2l0aCBwb3RlbnRpYWwgaW5jb25zaXN0ZW5jaWVzIHdpdGggdW53cml0dGVuIGRhdGEuIFNpbmNlIHRoaXMgZGlyZWN0bHkgaW1wYWN0cyB0aGUgYGZhbGxvY2F0ZWAgaW1wbGVtZW50YXRpb24sIHdoaWNoIGludGVyYWN0cyB3aXRoIGBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzYCwgSSBzaG91bGQgZGVmaW5pdGVseSBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGVzZSByb3V0aW5lcyBhbmQgbWFrZSBzdXJlIHRoZXkgYWxsIGhhbmRsZSB0aGUgbmV3IGZsYWcgY29ycmVjdGx5LiBJIGFsc28gd2FudCB0byBtYWtlIHN1cmUgdGhlIGludGVyYWN0aW9ucyB3aXRoIGBvcnBoYW5gIGxpc3RzIGRvbiYjMzk7dCBpbnRyb2R1Y2UgbmV3IGluY29uc2lzdGVuY2llcywgZ2l2ZW4gdGhlIGNoYW5nZXMgdG8gYWxsb2NhdGlvbi4KCkdpdmVuIHRoZSBzY29wZSBhbmQgaW1wYWN0IG9uIHRoZXNlIGNyaXRpY2FsIGV4dDQgY29tcG9uZW50cywgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHRob3JvdWdobHkgZnV6emVkLiBUaGUgcHJpbWFyeSBmb2N1cyBzaG91bGQgYmUgb24gdGhvc2Ugc3BlY2lmaWMgc3ltYm9sczogYGV4dDRfYWxsb2NfZmlsZV9ibG9ja3NgLCBgZXh0NF96ZXJvX3JhbmdlYCwgYGV4dDRfemVyb19wYXJ0aWFsX2Jsb2Nrc2AsIGBleHQ0X2xvYWRfdGFpbF9iaGAsIGFuZCBvZiBjb3Vyc2UgYGV4dDRfZmFsbG9jYXRlYCBpdHNlbGYuIEkgbmVlZCB0byBnZXQgdGhlIGBFWFQ0X0ZTYCBjb25maWd1cmF0aW9uIHZlcmlmaWVkIGFzIHdlbGwuCgpCZWZvcmUgSSBnbyBmdXJ0aGVyLCBsZXQmIzM5O3MgdmVyaWZ5IGlmIGBleHQ0X2xvYWRfdGFpbF9iaGAgaXMgc3RhdGljLiBUaGF0IHdpbGwgZGV0ZXJtaW5lIGhvdyBlYXN5IG9yIGRpZmZpY3VsdCBpdCBpcyB0byB0ZXN0IGl0IGluIGlzb2xhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDk6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9sb2FkX3RhaWxfYmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9pbm9kZS5jPTQwMDQ9dm9pZCBleHQ0X3NldF9hb3BzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTQwMzMtICovXG5mcy9leHQ0L2lub2RlLmM6NDAzNDpzdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICpleHQ0X2xvYWRfdGFpbF9iaChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgZnJvbSlcbmZzL2V4dDQvaW5vZGUuYy00MDM1LXtcbi0tXG5mcy9leHQ0L2lub2RlLmM9NDExMj1zdGF0aWMgaW50IGV4dDRfYmxvY2tfZG9femVyb19yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgZnJvbSxcbi0tXG5mcy9leHQ0L2lub2RlLmMtNDExOC1cbmZzL2V4dDQvaW5vZGUuYzo0MTE5Olx0YmggPSBleHQ0X2xvYWRfdGFpbF9iaChpbm9kZSwgZnJvbSk7XG5mcy9leHQ0L2lub2RlLmMtNDEyMC1cdGlmIChJU19FUlJfT1JfTlVMTChiaCkpXG4tLVxuZnMvZXh0NC9pbm9kZS5jPTQxMzg9c3RhdGljIGludCBleHQ0X2Jsb2NrX2pvdXJuYWxsZWRfemVyb19yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgZnJvbSxcbi0tXG5mcy9leHQ0L2lub2RlLmMtNDE0OS1cbmZzL2V4dDQvaW5vZGUuYzo0MTUwOlx0YmggPSBleHQ0X2xvYWRfdGFpbF9iaChpbm9kZSwgZnJvbSk7XG5mcy9leHQ0L2lub2RlLmMtNDE1MS1cdGlmIChJU19FUlJfT1JfTlVMTChiaCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMDk6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMzNzYKCQkJCQkJCW91dHB1dDogMjAzCgkJCQkJCQl0aG91Z2h0czogOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgZm9ybWF0dGVkIGFzIHJlcXVlc3RlZDoKCioqTWFraW5nIFN1cmUgdGhlIERldGFpbHMgYXJlIFNldCoqCgpSaWdodCwgc28gYGV4dDRfbG9hZF90YWlsX2JoYCBpcyBkZWZpbml0ZWx5IGEgc3RhdGljIGZ1bmN0aW9uLiBJJiMzOTtsbCBtYWtlIGEgbm90ZSB0byBpbmNsdWRlIHRoYXQgaW4gdGhlIGZvY3VzIHN5bWJvbHMsIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIGF2b2lkIGFueSBjb25mdXNpb24gbGF0ZXIgb24uCgpOb3csIGxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSBzb21ldGhpbmcg4oCTIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgYEZBTExPQ19GTF9XUklURV9aRVJPRVNgIGZsYWcgaXMgZGVmaW5lZCBhcyBleHBlY3RlZC4gTGV0IG1lIGNoZWNrIHRoZSBpbmNsdWRlIGZpbGXigKYgeWVwLCBjb25maXJtZWQhIEl0JiMzOTtzIHByb3Blcmx5IGRlZmluZWQgaW4gYGluY2x1ZGUvdWFwaS9saW51eC9mYWxsb2MuaGAgYW5kIGlzIGNvcnJlY3RseSBhc3NpZ25lZCB0aGUgdmFsdWUgYDB4ODBgLgoKT2theSwgd2l0aCB0aG9zZSBkZXRhaWxzIG5haWxlZCBkb3duLCBJJiMzOTttIGNvbWZvcnRhYmxlIHNldHRpbmcgdGhlIHJlc3VsdHMgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwOToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfYWxsb2NfZmlsZV9ibG9ja3MmIzM0OywKICAgICYjMzQ7ZXh0NF96ZXJvX3JhbmdlJiMzNDssCiAgICAmIzM0O2V4dDRfemVyb19wYXJ0aWFsX2Jsb2NrcyYjMzQ7LAogICAgJiMzNDtleHQ0X2xvYWRfdGFpbF9iaCYjMzQ7LAogICAgJiMzNDtleHQ0X2ZhbGxvY2F0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIGEgbmV3IGZhbGxvY2F0ZSBmbGFnIGBGQUxMT0NfRkxfV1JJVEVfWkVST0VTYCBpbiBleHQ0LiBJdCBtb2RpZmllcyB0aGUgY29yZSBibG9jayBhbGxvY2F0aW9uIGFuZCB6ZXJvaW5nIGxvZ2ljLCBpbmNsdWRpbmcgYGV4dDRfemVyb19yYW5nZWAsIGBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzYCwgYW5kIGBleHQ0X3plcm9fcGFydGlhbF9ibG9ja3NgLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBob3cgZXh0NCBoYW5kbGVzIHVud3JpdHRlbiBleHRlbnRzLCBwYXJ0aWFsIGJsb2NrIHplcm9pbmcsIGFuZCBvcnBoYW4gbGlzdHMgZHVyaW5nIGZhbGxvY2F0ZSBvcGVyYXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGZpbGVzeXN0ZW0gY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciB2dWxuZXJhYmlsaXRpZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzJiMzNDssCiAgICAmIzM0O2V4dDRfemVyb19yYW5nZSYjMzQ7LAogICAgJiMzNDtleHQ0X3plcm9fcGFydGlhbF9ibG9ja3MmIzM0OywKICAgICYjMzQ7ZXh0NF9sb2FkX3RhaWxfYmgmIzM0OywKICAgICYjMzQ7ZXh0NF9mYWxsb2NhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBhIG5ldyBmYWxsb2NhdGUgZmxhZyBgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FU2AgaW4gZXh0NC4gSXQgbW9kaWZpZXMgdGhlIGNvcmUgYmxvY2sgYWxsb2NhdGlvbiBhbmQgemVyb2luZyBsb2dpYywgaW5jbHVkaW5nIGBleHQ0X3plcm9fcmFuZ2VgLCBgZXh0NF9hbGxvY19maWxlX2Jsb2Nrc2AsIGFuZCBgZXh0NF96ZXJvX3BhcnRpYWxfYmxvY2tzYC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IGV4dDQgaGFuZGxlcyB1bndyaXR0ZW4gZXh0ZW50cywgcGFydGlhbCBibG9jayB6ZXJvaW5nLCBhbmQgb3JwaGFuIGxpc3RzIGR1cmluZyBmYWxsb2NhdGUgb3BlcmF0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBmaWxlc3lzdGVtIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDdUMDk6MTE6MDYuMjczMzQ1NTM5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA2NTA2MDc5NDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzXCIsXG4gICAgXCJleHQ0X3plcm9fcmFuZ2VcIixcbiAgICBcImV4dDRfemVyb19wYXJ0aWFsX2Jsb2Nrc1wiLFxuICAgIFwiZXh0NF9sb2FkX3RhaWxfYmhcIixcbiAgICBcImV4dDRfZmFsbG9jYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBhIG5ldyBmYWxsb2NhdGUgZmxhZyBgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FU2AgaW4gZXh0NC4gSXQgbW9kaWZpZXMgdGhlIGNvcmUgYmxvY2sgYWxsb2NhdGlvbiBhbmQgemVyb2luZyBsb2dpYywgaW5jbHVkaW5nIGBleHQ0X3plcm9fcmFuZ2VgLCBgZXh0NF9hbGxvY19maWxlX2Jsb2Nrc2AsIGFuZCBgZXh0NF96ZXJvX3BhcnRpYWxfYmxvY2tzYC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgaG93IGV4dDQgaGFuZGxlcyB1bndyaXR0ZW4gZXh0ZW50cywgcGFydGlhbCBibG9jayB6ZXJvaW5nLCBhbmQgb3JwaGFuIGxpc3RzIGR1cmluZyBmYWxsb2NhdGUgb3BlcmF0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBmaWxlc3lzdGVtIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciB2dWxuZXJhYmlsaXRpZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA5OjExOjA2LjI3MzM1MDM1OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk5MDE3OTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZWM0OTVkMDk2Y2I0OWI1YTU1MGE4MWZiNTcyNzhiNmQ1NTg3N2YzMVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1bCA3IDA5OjExOjA0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmhcXG5pbmRleCA5NDI4M2E5OTFlNWM0Zi4uYjJlNTU4NzZkMGUzNTIgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC9leHQ0LmhcXG4rKysgYi9mcy9leHQ0L2V4dDQuaFxcbkBAIC0zMDk5LDggKzMwOTksMTEgQEAgZXh0ZXJuIGludCBleHQ0X2NodW5rX3RyYW5zX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbnJibG9ja3MpO1xcbiBleHRlcm4gaW50IGV4dDRfbWV0YV90cmFuc19ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSwgaW50IGxibG9ja3MsXFxuIFxcdFxcdFxcdFxcdCAgaW50IHBleHRlbnRzKTtcXG4gZXh0ZXJuIGludCBleHQ0X2Jsb2NrX3plcm9fZW9mKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBmcm9tLCBsb2ZmX3QgZW5kKTtcXG4rXFxuKyNkZWZpbmUgRVhUNF9QQVJUSUFMX1pFUk9fU1RBUlRcXHQweDFcXG4rI2RlZmluZSBFWFQ0X1BBUlRJQUxfWkVST19FTkRcXHQweDJcXG4gZXh0ZXJuIGludCBleHQ0X3plcm9fcGFydGlhbF9ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGxzdGFydCxcXG4tXFx0XFx0XFx0XFx0ICAgIGxvZmZfdCBsZW5ndGgsIGJvb2wgKmRpZF96ZXJvKTtcXG4rXFx0XFx0XFx0XFx0ICAgIGxvZmZfdCBsZW5ndGgsIHVuc2lnbmVkIGludCAqcGFydGlhbF96ZXJvZWQpO1xcbiBleHRlcm4gdm1fZmF1bHRfdCBleHQ0X3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XFxuIGV4dGVybiBxc2l6ZV90ICpleHQ0X2dldF9yZXNlcnZlZF9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4gZXh0ZXJuIGludCBleHQ0X2dldF9wcm9qaWQoc3RydWN0IGlub2RlICppbm9kZSwga3Byb2ppZF90ICpwcm9qaWQpO1xcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dGVudHMuYyBiL2ZzL2V4dDQvZXh0ZW50cy5jXFxuaW5kZXggMTI1ZjYyOGU3MzhhYjEuLjhjN2E5ODQwNWE2NDJmIDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvZXh0ZW50cy5jXFxuKysrIGIvZnMvZXh0NC9leHRlbnRzLmNcXG5AQCAtNDU4NSw2ICs0NTg1LDcgQEAgc3RhdGljIGludCBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuLFxcbiBcXHRsb2ZmX3QgZXBvcyA9IDAsIG9sZF9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xcbiBcXHR1bnNpZ25lZCBpbnQgYmxrYml0cyA9IGlub2RlLVxcdTAwM2VpX2Jsa2JpdHM7XFxuIFxcdGJvb2wgYWxsb2NfemVybyA9IGZhbHNlO1xcbitcXHRib29sIG9ycGhhbiA9IGZhbHNlO1xcbiBcXG4gXFx0QlVHX09OKCFleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKSk7XFxuIFxcdG1hcC5tX2xibGsgPSBvZmZzZXQgXFx1MDAzZVxcdTAwM2UgYmxrYml0cztcXG5AQCAtNDY1OSwxMiArNDY2MCwzMCBAQCBzdGF0aWMgaW50IGV4dDRfYWxsb2NfZmlsZV9ibG9ja3Moc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4sXFxuIFxcbiBcXHRcXHRpZiAoYWxsb2NfemVybyBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgKG1hcC5tX2ZsYWdzIFxcdTAwMjYgKEVYVDRfTUFQX01BUFBFRCB8IEVYVDRfTUFQX1VOV1JJVFRFTikpKSB7XFxuK1xcdFxcdFxcdFdBUk5fT05fT05DRShtYXAubV9sYmxrICsgbWFwLm1fbGVuIFxcdTAwM2VcXG4rXFx0XFx0XFx0XFx0RVhUNF9CX1RPX0xCTEsoaW5vZGUsIG5ld19zaXplID86IG9sZF9zaXplKSk7XFxuK1xcbiBcXHRcXHRcXHRyZXQgPSBleHQ0X2lzc3VlX3plcm9vdXQoaW5vZGUsIG1hcC5tX2xibGssIG1hcC5tX3BibGssXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCBtYXAubV9sZW4pO1xcbi1cXHRcXHRcXHRpZiAobGlrZWx5KCFyZXQpKVxcbi1cXHRcXHRcXHRcXHRyZXQgPSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoTlVMTCxcXG4rXFx0XFx0XFx0aWYgKHVubGlrZWx5KHJldCkpXFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0XFx0aGFuZGxlID0gZXh0NF9qb3VybmFsX3N0YXJ0KGlub2RlLCBFWFQ0X0hUX01BUF9CTE9DS1MsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBjcmVkaXRzKTtcXG4rXFx0XFx0XFx0aWYgKElTX0VSUihoYW5kbGUpKSB7XFxuK1xcdFxcdFxcdFxcdHJldCA9IFBUUl9FUlIoaGFuZGxlKTtcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdHJldCA9IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhoYW5kbGUsXFxuIFxcdFxcdFxcdFxcdFxcdGlub2RlLCAobG9mZl90KW1hcC5tX2xibGsgXFx1MDAzY1xcdTAwM2MgYmxrYml0cyxcXG4gXFx0XFx0XFx0XFx0XFx0KGxvZmZfdCltYXAubV9sZW4gXFx1MDAzY1xcdTAwM2MgYmxrYml0cyk7XFxuK1xcdFxcdFxcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2IG5ld19zaXplKSB7XFxuK1xcdFxcdFxcdFxcdHJldCA9IGV4dDRfb3JwaGFuX2FkZChoYW5kbGUsIGlub2RlKTtcXG4rXFx0XFx0XFx0XFx0b3JwaGFuID0gdHJ1ZTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRyZXQyID0gZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcXG4rXFx0XFx0XFx0cmV0ID0gcmV0ID8gcmV0IDogcmV0MjtcXG4gXFx0XFx0XFx0aWYgKHJldClcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG5AQCAtNDY4NywxMiArNDcwNiwxNyBAQCBzdGF0aWMgaW50IGV4dDRfYWxsb2NfZmlsZV9ibG9ja3Moc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4sXFxuIFxcdGlmIChlcG9zIFxcdTAwM2UgbmV3X3NpemUpXFxuIFxcdFxcdGVwb3MgPSBuZXdfc2l6ZTtcXG4gXFxuLVxcdGhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgRVhUNF9IVF9NSVNDLCAxKTtcXG4tXFx0aWYgKElTX0VSUihoYW5kbGUpKVxcbitcXHRoYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIEVYVDRfSFRfTUlTQywgMik7XFxuK1xcdGlmIChJU19FUlIoaGFuZGxlKSkge1xcbitcXHRcXHRpZiAob3JwaGFuIFxcdTAwMjZcXHUwMDI2IGlub2RlLVxcdTAwM2VpX25saW5rKVxcbitcXHRcXHRcXHRleHQ0X29ycGhhbl9kZWwoTlVMTCwgaW5vZGUpO1xcbiBcXHRcXHRyZXR1cm4gcmV0ID8gcmV0IDogUFRSX0VSUihoYW5kbGUpO1xcbitcXHR9XFxuIFxcbiBcXHRleHQ0X3VwZGF0ZV9pbm9kZV9zaXplKGlub2RlLCBlcG9zKTtcXG4gXFx0cmV0MiA9IGV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTtcXG4rXFx0aWYgKG9ycGhhbiBcXHUwMDI2XFx1MDAyNiBpbm9kZS1cXHUwMDNlaV9ubGluaylcXG4rXFx0XFx0ZXh0NF9vcnBoYW5fZGVsKGhhbmRsZSwgaW5vZGUpO1xcbiBcXHRleHQ0X3VwZGF0ZV9pbm9kZV9mc3luY190cmFucyhoYW5kbGUsIGlub2RlLCAxKTtcXG4gXFx0cmV0MyA9IGV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7XFxuIFxcdHJldDIgPSByZXQzID8gcmV0MyA6IHJldDI7XFxuQEAgLTQ3MTUsNyArNDczOSw3IEBAIHN0YXRpYyBsb25nIGV4dDRfemVyb19yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCxcXG4gXFx0bG9mZl90IGFsaWduX3N0YXJ0LCBhbGlnbl9lbmQsIG5ld19zaXplID0gMDtcXG4gXFx0bG9mZl90IGVuZCA9IG9mZnNldCArIGxlbjtcXG4gXFx0dW5zaWduZWQgaW50IGJsb2Nrc2l6ZSA9IGlfYmxvY2tzaXplKGlub2RlKTtcXG4tXFx0Ym9vbCBwYXJ0aWFsX3plcm9lZCA9IGZhbHNlO1xcbitcXHR1bnNpZ25lZCBpbnQgcGFydGlhbF96ZXJvZWQgPSAwO1xcbiBcXHRpbnQgcmV0LCBmbGFncztcXG4gXFxuIFxcdHRyYWNlX2V4dDRfemVyb19yYW5nZShpbm9kZSwgb2Zmc2V0LCBsZW4sIG1vZGUpO1xcbkBAIC00NzM0LDEwICs0NzU4LDE2IEBAIHN0YXRpYyBsb25nIGV4dDRfemVyb19yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCxcXG4gXFx0fVxcbiBcXG4gXFx0ZmxhZ3MgPSBFWFQ0X0dFVF9CTE9DS1NfQ1JFQVRFX1VOV1JJVF9FWFQ7XFxuLVxcdC8qIFByZWFsbG9jYXRlIHRoZSByYW5nZSBpbmNsdWRpbmcgdGhlIHVuYWxpZ25lZCBlZGdlcyAqL1xcbitcXHQvKlxcbitcXHQgKiBQcmVhbGxvY2F0ZSB0aGUgcmFuZ2UgaW5jbHVkaW5nIHRoZSB1bmFsaWduZWQgZWRnZXMsIGFuZCB6ZXJvXFxuK1xcdCAqIG91dCBwYXJ0aWFsIGJsb2NrcyBpZiB0aGV5IGFscmVhZHkgY29udGFpbiBkYXRhLlxcbitcXHQgKi9cXG4gXFx0aWYgKCFJU19BTElHTkVEKG9mZnNldCB8IGVuZCwgYmxvY2tzaXplKSkge1xcbiBcXHRcXHRyZXQgPSBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzKGZpbGUsIG9mZnNldCwgbGVuLCBuZXdfc2l6ZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBmbGFncyk7XFxuK1xcdFxcdGlmICghcmV0KVxcbitcXHRcXHRcXHRyZXQgPSBleHQ0X3plcm9fcGFydGlhbF9ibG9ja3MoaW5vZGUsIG9mZnNldCwgbGVuLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNnBhcnRpYWxfemVyb2VkKTtcXG4gXFx0XFx0aWYgKHJldClcXG4gXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbkBAIC00NzU0LDYgKzQ3ODQsMjEgQEAgc3RhdGljIGxvbmcgZXh0NF96ZXJvX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LFxcbiBcXHQvKiBaZXJvIHJhbmdlIGV4Y2x1ZGluZyB0aGUgdW5hbGlnbmVkIGVkZ2VzICovXFxuIFxcdGFsaWduX3N0YXJ0ID0gcm91bmRfdXAob2Zmc2V0LCBibG9ja3NpemUpO1xcbiBcXHRhbGlnbl9lbmQgPSByb3VuZF9kb3duKGVuZCwgYmxvY2tzaXplKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEluIFdSSVRFX1pFUk9FUyBtb2RlLCBlZGdlcyB0aGF0IHdlcmUgbm90IHBhcnRpYWwtemVyb2VkIChjbGVhblxcbitcXHQgKiB1bndyaXR0ZW4gb3IgaG9sZSkgbXVzdCBiZSBhbGxvY2F0ZWQgYW5kIHplcm9lZCBhcyB3aG9sZSBibG9ja3MuXFxuK1xcdCAqIEV4cGFuZCB0aGUgYWxpZ25lZCByYW5nZSBvdXR3YXJkIHRvIGNvdmVyIHRoZW0uXFxuK1xcdCAqL1xcbitcXHRpZiAobW9kZSBcXHUwMDI2IEZBTExPQ19GTF9XUklURV9aRVJPRVMpIHtcXG4rXFx0XFx0aWYgKCFJU19BTElHTkVEKG9mZnNldCwgYmxvY2tzaXplKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIShwYXJ0aWFsX3plcm9lZCBcXHUwMDI2IEVYVDRfUEFSVElBTF9aRVJPX1NUQVJUKSlcXG4rXFx0XFx0XFx0YWxpZ25fc3RhcnQgPSByb3VuZF9kb3duKG9mZnNldCwgYmxvY2tzaXplKTtcXG4rXFx0XFx0aWYgKCFJU19BTElHTkVEKGVuZCwgYmxvY2tzaXplKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIShwYXJ0aWFsX3plcm9lZCBcXHUwMDI2IEVYVDRfUEFSVElBTF9aRVJPX0VORCkpXFxuK1xcdFxcdFxcdGFsaWduX2VuZCA9IHJvdW5kX3VwKGVuZCwgYmxvY2tzaXplKTtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKGFsaWduX2VuZCBcXHUwMDNlIGFsaWduX3N0YXJ0KSB7XFxuIFxcdFxcdGlmIChtb2RlIFxcdTAwMjYgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FUylcXG4gXFx0XFx0XFx0ZmxhZ3MgPSBFWFQ0X0dFVF9CTE9DS1NfQ1JFQVRFX1pFUk8gfCBFWFQ0X0VYX05PQ0FDSEU7XFxuQEAgLTQ3NzAsMTEgKzQ4MTUsMTUgQEAgc3RhdGljIGxvbmcgZXh0NF96ZXJvX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LFxcbiBcXHRpZiAoSVNfQUxJR05FRChvZmZzZXQgfCBlbmQsIGJsb2Nrc2l6ZSkpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHQvKiBaZXJvIG91dCBwYXJ0aWFsIGJsb2NrIGF0IHRoZSBlZGdlcyBvZiB0aGUgcmFuZ2UgKi9cXG4tXFx0cmV0ID0gZXh0NF96ZXJvX3BhcnRpYWxfYmxvY2tzKGlub2RlLCBvZmZzZXQsIGxlbiwgXFx1MDAyNnBhcnRpYWxfemVyb2VkKTtcXG4tXFx0aWYgKHJldClcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4tXFx0aWYgKCgoZmlsZS1cXHUwMDNlZl9mbGFncyBcXHUwMDI2IE9fU1lOQykgfHwgSVNfU1lOQyhpbm9kZSkpIFxcdTAwMjZcXHUwMDI2IHBhcnRpYWxfemVyb2VkKSB7XFxuK1xcdC8qXFxuK1xcdCAqIEluIEZBTExPQ19GTF9XUklURV9aRVJPRVMgbW9kZSwgZWRnZXMgdGhhdCBoYXZlIGJlZW4gcGFydGlhbGx5XFxuK1xcdCAqIHplcm9lZCBtdXN0IGJlIHdyaXR0ZW4gYmFjayB0byBlbnN1cmUgdGhlIGVudGlyZSB6ZXJvZWQgcmFuZ2VcXG4rXFx0ICogaXMgY29udmVydGVkIHRvIHRoZSB3cml0dGVuIHN0YXRlLiBJbiBTWU5DIG1vZGUsIHdyaXRlYmFjayBpc1xcbitcXHQgKiBhbHNvIHJlcXVpcmVkIHRvIHBlcnNpc3QgdGhlIHplcm9lZCBkYXRhIHRvIGRpc2suXFxuK1xcdCAqL1xcbitcXHRpZiAocGFydGlhbF96ZXJvZWQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICgobW9kZSBcXHUwMDI2IEZBTExPQ19GTF9XUklURV9aRVJPRVMpIHx8XFxuK1xcdCAgICAgKGZpbGUtXFx1MDAzZWZfZmxhZ3MgXFx1MDAyNiBPX1NZTkMpIHx8IElTX1NZTkMoaW5vZGUpKSkge1xcbiBcXHRcXHRyZXQgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKGlub2RlLVxcdTAwM2VpX21hcHBpbmcsIG9mZnNldCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgZW5kIC0gMSk7XFxuIFxcdFxcdGlmIChyZXQpXFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuY1xcbmluZGV4IGMyYzJkNmFjN2YzZDEzLi5iNTIxN2Q1ZmU5NTQwYiAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L2lub2RlLmNcXG4rKysgYi9mcy9leHQ0L2lub2RlLmNcXG5AQCAtNDAyNiw2ICs0MDI2LDEwIEBAIHZvaWQgZXh0NF9zZXRfYW9wcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiAgKiBiZWNhdXNlIGl0IG1pZ2h0IGhhdmUgZGF0YSBpbiBwYWdlY2FjaGUgKGVnLCBpZiBjYWxsZWQgZnJvbSBleHQ0X3plcm9fcmFuZ2UsXFxuICAqIGV4dDRfcHVuY2hfaG9sZSwgZXRjKSB3aGljaCBuZWVkcyB0byBiZSBwcm9wZXJseSB6ZXJvZWQgb3V0LiBPdGhlcndpc2UgYVxcbiAgKiByYWNpbmcgd3JpdGViYWNrIGNhbiBjb21lIGxhdGVyIGFuZCBmbHVzaCB0aGUgc3RhbGUgcGFnZWNhY2hlIHRvIGRpc2suXFxuKyAqXFxuKyAqIFJldHVybiB0aGUgbG9hZGVkIGJoIGlmIGl0IGFjdHVhbGx5IG5lZWRzIHplcm9pbmcgLSBpbiB3cml0dGVuLCBkaXJ0eVxcbisgKiB1bndyaXR0ZW4sIG9yIGRlbGFsbG9jIHN0YXRlLiBSZXR1cm4gTlVMTCBpZiBpdCdzIGNsZWFuIChpLmUuLCBhIGhvbGUgb3JcXG4rICogYSBjbGVhbiB1bndyaXR0ZW4gYmxvY2spLlxcbiAgKi9cXG4gc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqZXh0NF9sb2FkX3RhaWxfYmgoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGZyb20pXFxuIHtcXG5AQCAtNDA2NSw3ICs0MDY5LDEyIEBAIHN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmV4dDRfbG9hZF90YWlsX2JoKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBmcm9tKVxcbiBcXHRpZiAoIWJ1ZmZlcl9tYXBwZWQoYmgpKSB7XFxuIFxcdFxcdEJVRkZFUl9UUkFDRShiaCwgXFxcInVubWFwcGVkXFxcIik7XFxuIFxcdFxcdGV4dDRfZ2V0X2Jsb2NrKGlub2RlLCBpYmxvY2ssIGJoLCAwKTtcXG4tXFx0XFx0LyogdW5tYXBwZWQ/IEl0J3MgYSBob2xlIC0gbm90aGluZyB0byBkbyAqL1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBJdCdzIGEgaG9sZSBvciBhIGNsZWFuIHVud3JpdHRlbiBibG9jayAtIG5vdGhpbmcgdG8gZG8uXFxuK1xcdFxcdCAqIE5vdGUgdGhhdCBhIGxvb2t1cC1vbmx5IGdldF9ibG9jayAod2l0aG91dFxcbitcXHRcXHQgKiBFWFQ0X0dFVF9CTE9DS1NfQ1JFQVRFKSBuZXZlciBzZXRzIEJIX01hcHBlZCBmb3IgY2xlYW5cXG4rXFx0XFx0ICogdW53cml0dGVuIGV4dGVudHMuXFxuK1xcdFxcdCAqL1xcbiBcXHRcXHRpZiAoIWJ1ZmZlcl9tYXBwZWQoYmgpKSB7XFxuIFxcdFxcdFxcdEJVRkZFUl9UUkFDRShiaCwgXFxcInN0aWxsIHVubWFwcGVkXFxcIik7XFxuIFxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbkBAIC00MjUyLDEzICs0MjYxLDI2IEBAIGludCBleHQ0X2Jsb2NrX3plcm9fZW9mKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBmcm9tLCBsb2ZmX3QgZW5kKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rLypcXG4rICogWmVybyBvdXQgdGhlIHVuYWxpZ25lZCBoZWFkIGFuZCB0YWlsIG9mIHRoZSBbbHN0YXJ0LCBsc3RhcnQrbGVuZ3RoKVxcbisgKiByYW5nZS5cXG4rICpcXG4rICogT24gcmV0dXJuLCBAcGFydGlhbF96ZXJvZWQgcmVjb3JkcyB3aGljaCBlZGdlcyBhY3R1YWxseSBnb3RcXG4rICogcGFydGlhbC16ZXJvZWQuICBTZXQgRVhUNF9QQVJUSUFMX1pFUk9fU1RBUlQvRVhUNF9QQVJUSUFMX1pFUk9fRU5EIGlmXFxuKyAqIHRoZSBoZWFkL3RhaWwgYmxvY2sgZ290IGFjdHVhbGx5IHBhcnRpYWxseSB6ZXJvZWQgKGluIHdyaXR0ZW4sIGRpcnR5XFxuKyAqIHVud3JpdHRlbiBvciBkZWxhbGxvYyBzdGF0ZSkuICBDbGVhcmVkIGlmIHRoZSBoZWFkL3RhaWwgYmxvY2sgaXMgYVxcbisgKiBob2xlIG9yIGEgY2xlYW4gdW53cml0dGVuIGJsb2NrLCBpbiB3aGljaCBjYXNlIHRoZXJlIGlzIG5vdGhpbmcgdGhhdFxcbisgKiBuZWVkcyB6ZXJvaW5nLiAgV2hlbiB0aGUgaGVhZCBhbmQgdGFpbCBsYW5kIGluIHRoZSBzYW1lIGJsb2NrLCBib3RoXFxuKyAqIGJpdHMgYXJlIHNldCB0b2dldGhlciBvbiBhIHN1Y2Nlc3NmdWwgemVyb2luZy5cXG4rICovXFxuIGludCBleHQ0X3plcm9fcGFydGlhbF9ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGxzdGFydCwgbG9mZl90IGxlbmd0aCxcXG4tXFx0XFx0XFx0ICAgICBib29sICpkaWRfemVybylcXG4rXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgKnBhcnRpYWxfemVyb2VkKVxcbiB7XFxuIFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cXHUwMDNlaV9zYjtcXG4gXFx0dW5zaWduZWQgcGFydGlhbF9zdGFydCwgcGFydGlhbF9lbmQ7XFxuIFxcdGV4dDRfZnNibGtfdCBzdGFydCwgZW5kO1xcbiBcXHRsb2ZmX3QgYnl0ZV9lbmQgPSAobHN0YXJ0ICsgbGVuZ3RoIC0gMSk7XFxuK1xcdGJvb2wgZGlkX3plcm8gPSBmYWxzZTtcXG4gXFx0aW50IGVyciA9IDA7XFxuIFxcbiBcXHRwYXJ0aWFsX3N0YXJ0ID0gbHN0YXJ0IFxcdTAwMjYgKHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSAtIDEpO1xcbkBAIC00MjcwLDIxICs0MjkyLDMyIEBAIGludCBleHQ0X3plcm9fcGFydGlhbF9ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGxzdGFydCwgbG9mZl90IGxlbmd0aCxcXG4gXFx0LyogSGFuZGxlIHBhcnRpYWwgemVybyB3aXRoaW4gdGhlIHNpbmdsZSBibG9jayAqL1xcbiBcXHRpZiAoc3RhcnQgPT0gZW5kIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICAocGFydGlhbF9zdGFydCB8fCAocGFydGlhbF9lbmQgIT0gc2ItXFx1MDAzZXNfYmxvY2tzaXplIC0gMSkpKSB7XFxuLVxcdFxcdGVyciA9IGV4dDRfYmxvY2tfemVyb19yYW5nZShpbm9kZSwgbHN0YXJ0LCBsZW5ndGgsIGRpZF96ZXJvLFxcbitcXHRcXHRlcnIgPSBleHQ0X2Jsb2NrX3plcm9fcmFuZ2UoaW5vZGUsIGxzdGFydCwgbGVuZ3RoLCBcXHUwMDI2ZGlkX3plcm8sXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBOVUxMKTtcXG4rXFx0XFx0aWYgKGRpZF96ZXJvKVxcbitcXHRcXHRcXHQqcGFydGlhbF96ZXJvZWQgfD0gKEVYVDRfUEFSVElBTF9aRVJPX1NUQVJUIHxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIEVYVDRfUEFSVElBTF9aRVJPX0VORCk7XFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdH1cXG4gXFx0LyogSGFuZGxlIHBhcnRpYWwgemVybyBvdXQgb24gdGhlIHN0YXJ0IG9mIHRoZSByYW5nZSAqL1xcbiBcXHRpZiAocGFydGlhbF9zdGFydCkge1xcbiBcXHRcXHRlcnIgPSBleHQ0X2Jsb2NrX3plcm9fcmFuZ2UoaW5vZGUsIGxzdGFydCwgc2ItXFx1MDAzZXNfYmxvY2tzaXplLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgZGlkX3plcm8sIE5VTEwpO1xcbitcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmRpZF96ZXJvLCBOVUxMKTtcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0aWYgKGRpZF96ZXJvKVxcbitcXHRcXHRcXHQqcGFydGlhbF96ZXJvZWQgfD0gRVhUNF9QQVJUSUFMX1pFUk9fU1RBUlQ7XFxuIFxcdH1cXG4gXFx0LyogSGFuZGxlIHBhcnRpYWwgemVybyBvdXQgb24gdGhlIGVuZCBvZiB0aGUgcmFuZ2UgKi9cXG4tXFx0aWYgKHBhcnRpYWxfZW5kICE9IHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSAtIDEpXFxuK1xcdGlmIChwYXJ0aWFsX2VuZCAhPSBzYi1cXHUwMDNlc19ibG9ja3NpemUgLSAxKSB7XFxuK1xcdFxcdGRpZF96ZXJvID0gZmFsc2U7XFxuIFxcdFxcdGVyciA9IGV4dDRfYmxvY2tfemVyb19yYW5nZShpbm9kZSwgYnl0ZV9lbmQgLSBwYXJ0aWFsX2VuZCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIHBhcnRpYWxfZW5kICsgMSwgZGlkX3plcm8sIE5VTEwpO1xcbitcXHRcXHRcXHRcXHRcXHQgICAgcGFydGlhbF9lbmQgKyAxLCBcXHUwMDI2ZGlkX3plcm8sIE5VTEwpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHRpZiAoZGlkX3plcm8pXFxuK1xcdFxcdFxcdCpwYXJ0aWFsX3plcm9lZCB8PSBFWFQ0X1BBUlRJQUxfWkVST19FTkQ7XFxuK1xcdH1cXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG5AQCAtNDQzMyw3ICs0NDY2LDcgQEAgaW50IGV4dDRfcHVuY2hfaG9sZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbmd0aClcXG4gXFx0bG9mZl90IGVuZCA9IG9mZnNldCArIGxlbmd0aDtcXG4gXFx0aGFuZGxlX3QgKmhhbmRsZTtcXG4gXFx0dW5zaWduZWQgaW50IGNyZWRpdHM7XFxuLVxcdGJvb2wgcGFydGlhbF96ZXJvZWQgPSBmYWxzZTtcXG4rXFx0dW5zaWduZWQgaW50IHBhcnRpYWxfemVyb2VkID0gMDtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdHRyYWNlX2V4dDRfcHVuY2hfaG9sZShpbm9kZSwgb2Zmc2V0LCBsZW5ndGgsIDApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwOToxMTowNy4wNzMwODc2NTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNTcwNjMyNTUyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9hbGxvY19maWxlX2Jsb2Nrc1wiLFxuICAgIFwiZXh0NF96ZXJvX3JhbmdlXCIsXG4gICAgXCJleHQ0X3plcm9fcGFydGlhbF9ibG9ja3NcIixcbiAgICBcImV4dDRfbG9hZF90YWlsX2JoXCIsXG4gICAgXCJleHQ0X2ZhbGxvY2F0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgYSBuZXcgZmFsbG9jYXRlIGZsYWcgYEZBTExPQ19GTF9XUklURV9aRVJPRVNgIGluIGV4dDQuIEl0IG1vZGlmaWVzIHRoZSBjb3JlIGJsb2NrIGFsbG9jYXRpb24gYW5kIHplcm9pbmcgbG9naWMsIGluY2x1ZGluZyBgZXh0NF96ZXJvX3JhbmdlYCwgYGV4dDRfYWxsb2NfZmlsZV9ibG9ja3NgLCBhbmQgYGV4dDRfemVyb19wYXJ0aWFsX2Jsb2Nrc2AuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGhvdyBleHQ0IGhhbmRsZXMgdW53cml0dGVuIGV4dGVudHMsIHBhcnRpYWwgYmxvY2sgemVyb2luZywgYW5kIG9ycGhhbiBsaXN0cyBkdXJpbmcgZmFsbG9jYXRlIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgZmlsZXN5c3RlbSBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGVjNDk1ZDA5NmNiNDliNWE1NTBhODFmYjU3Mjc4YjZkNTU4NzdmMzFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCA3IDA5OjExOjA0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0LmggYi9mcy9leHQ0L2V4dDQuaFxuaW5kZXggOTQyODNhOTkxZTVjNGYuLmIyZTU1ODc2ZDBlMzUyIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9leHQ0LmhcbisrKyBiL2ZzL2V4dDQvZXh0NC5oXG5AQCAtMzA5OSw4ICszMDk5LDExIEBAIGV4dGVybiBpbnQgZXh0NF9jaHVua190cmFuc19leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5yYmxvY2tzKTtcbiBleHRlcm4gaW50IGV4dDRfbWV0YV90cmFuc19ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSwgaW50IGxibG9ja3MsXG4gXHRcdFx0XHQgIGludCBwZXh0ZW50cyk7XG4gZXh0ZXJuIGludCBleHQ0X2Jsb2NrX3plcm9fZW9mKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBmcm9tLCBsb2ZmX3QgZW5kKTtcbitcbisjZGVmaW5lIEVYVDRfUEFSVElBTF9aRVJPX1NUQVJUXHQweDFcbisjZGVmaW5lIEVYVDRfUEFSVElBTF9aRVJPX0VORFx0MHgyXG4gZXh0ZXJuIGludCBleHQ0X3plcm9fcGFydGlhbF9ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGxzdGFydCxcbi1cdFx0XHRcdCAgICBsb2ZmX3QgbGVuZ3RoLCBib29sICpkaWRfemVybyk7XG4rXHRcdFx0XHQgICAgbG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50ICpwYXJ0aWFsX3plcm9lZCk7XG4gZXh0ZXJuIHZtX2ZhdWx0X3QgZXh0NF9wYWdlX21rd3JpdGUoc3RydWN0IHZtX2ZhdWx0ICp2bWYpO1xuIGV4dGVybiBxc2l6ZV90ICpleHQ0X2dldF9yZXNlcnZlZF9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBleHRlcm4gaW50IGV4dDRfZ2V0X3Byb2ppZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBrcHJvamlkX3QgKnByb2ppZCk7XG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHRlbnRzLmMgYi9mcy9leHQ0L2V4dGVudHMuY1xuaW5kZXggMTI1ZjYyOGU3MzhhYjEuLjhjN2E5ODQwNWE2NDJmIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9leHRlbnRzLmNcbisrKyBiL2ZzL2V4dDQvZXh0ZW50cy5jXG5AQCAtNDU4NSw2ICs0NTg1LDcgQEAgc3RhdGljIGludCBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuLFxuIFx0bG9mZl90IGVwb3MgPSAwLCBvbGRfc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcbiBcdHVuc2lnbmVkIGludCBibGtiaXRzID0gaW5vZGUtXHUwMDNlaV9ibGtiaXRzO1xuIFx0Ym9vbCBhbGxvY196ZXJvID0gZmFsc2U7XG4rXHRib29sIG9ycGhhbiA9IGZhbHNlO1xuIFxuIFx0QlVHX09OKCFleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKSk7XG4gXHRtYXAubV9sYmxrID0gb2Zmc2V0IFx1MDAzZVx1MDAzZSBibGtiaXRzO1xuQEAgLTQ2NTksMTIgKzQ2NjAsMzAgQEAgc3RhdGljIGludCBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuLFxuIFxuIFx0XHRpZiAoYWxsb2NfemVybyBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIChtYXAubV9mbGFncyBcdTAwMjYgKEVYVDRfTUFQX01BUFBFRCB8IEVYVDRfTUFQX1VOV1JJVFRFTikpKSB7XG4rXHRcdFx0V0FSTl9PTl9PTkNFKG1hcC5tX2xibGsgKyBtYXAubV9sZW4gXHUwMDNlXG4rXHRcdFx0XHRFWFQ0X0JfVE9fTEJMSyhpbm9kZSwgbmV3X3NpemUgPzogb2xkX3NpemUpKTtcbitcbiBcdFx0XHRyZXQgPSBleHQ0X2lzc3VlX3plcm9vdXQoaW5vZGUsIG1hcC5tX2xibGssIG1hcC5tX3BibGssXG4gXHRcdFx0XHRcdFx0IG1hcC5tX2xlbik7XG4tXHRcdFx0aWYgKGxpa2VseSghcmV0KSlcbi1cdFx0XHRcdHJldCA9IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhOVUxMLFxuK1x0XHRcdGlmICh1bmxpa2VseShyZXQpKVxuK1x0XHRcdFx0YnJlYWs7XG4rXG4rXHRcdFx0aGFuZGxlID0gZXh0NF9qb3VybmFsX3N0YXJ0KGlub2RlLCBFWFQ0X0hUX01BUF9CTE9DS1MsXG4rXHRcdFx0XHRcdFx0ICAgIGNyZWRpdHMpO1xuK1x0XHRcdGlmIChJU19FUlIoaGFuZGxlKSkge1xuK1x0XHRcdFx0cmV0ID0gUFRSX0VSUihoYW5kbGUpO1xuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0fVxuK1xuK1x0XHRcdHJldCA9IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhoYW5kbGUsXG4gXHRcdFx0XHRcdGlub2RlLCAobG9mZl90KW1hcC5tX2xibGsgXHUwMDNjXHUwMDNjIGJsa2JpdHMsXG4gXHRcdFx0XHRcdChsb2ZmX3QpbWFwLm1fbGVuIFx1MDAzY1x1MDAzYyBibGtiaXRzKTtcbitcdFx0XHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgbmV3X3NpemUpIHtcbitcdFx0XHRcdHJldCA9IGV4dDRfb3JwaGFuX2FkZChoYW5kbGUsIGlub2RlKTtcbitcdFx0XHRcdG9ycGhhbiA9IHRydWU7XG4rXHRcdFx0fVxuK1x0XHRcdHJldDIgPSBleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpO1xuK1x0XHRcdHJldCA9IHJldCA/IHJldCA6IHJldDI7XG4gXHRcdFx0aWYgKHJldClcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5AQCAtNDY4NywxMiArNDcwNiwxNyBAQCBzdGF0aWMgaW50IGV4dDRfYWxsb2NfZmlsZV9ibG9ja3Moc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4sXG4gXHRpZiAoZXBvcyBcdTAwM2UgbmV3X3NpemUpXG4gXHRcdGVwb3MgPSBuZXdfc2l6ZTtcbiBcbi1cdGhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgRVhUNF9IVF9NSVNDLCAxKTtcbi1cdGlmIChJU19FUlIoaGFuZGxlKSlcbitcdGhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgRVhUNF9IVF9NSVNDLCAyKTtcbitcdGlmIChJU19FUlIoaGFuZGxlKSkge1xuK1x0XHRpZiAob3JwaGFuIFx1MDAyNlx1MDAyNiBpbm9kZS1cdTAwM2VpX25saW5rKVxuK1x0XHRcdGV4dDRfb3JwaGFuX2RlbChOVUxMLCBpbm9kZSk7XG4gXHRcdHJldHVybiByZXQgPyByZXQgOiBQVFJfRVJSKGhhbmRsZSk7XG4rXHR9XG4gXG4gXHRleHQ0X3VwZGF0ZV9pbm9kZV9zaXplKGlub2RlLCBlcG9zKTtcbiBcdHJldDIgPSBleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7XG4rXHRpZiAob3JwaGFuIFx1MDAyNlx1MDAyNiBpbm9kZS1cdTAwM2VpX25saW5rKVxuK1x0XHRleHQ0X29ycGhhbl9kZWwoaGFuZGxlLCBpbm9kZSk7XG4gXHRleHQ0X3VwZGF0ZV9pbm9kZV9mc3luY190cmFucyhoYW5kbGUsIGlub2RlLCAxKTtcbiBcdHJldDMgPSBleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpO1xuIFx0cmV0MiA9IHJldDMgPyByZXQzIDogcmV0MjtcbkBAIC00NzE1LDcgKzQ3MzksNyBAQCBzdGF0aWMgbG9uZyBleHQ0X3plcm9fcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsXG4gXHRsb2ZmX3QgYWxpZ25fc3RhcnQsIGFsaWduX2VuZCwgbmV3X3NpemUgPSAwO1xuIFx0bG9mZl90IGVuZCA9IG9mZnNldCArIGxlbjtcbiBcdHVuc2lnbmVkIGludCBibG9ja3NpemUgPSBpX2Jsb2Nrc2l6ZShpbm9kZSk7XG4tXHRib29sIHBhcnRpYWxfemVyb2VkID0gZmFsc2U7XG4rXHR1bnNpZ25lZCBpbnQgcGFydGlhbF96ZXJvZWQgPSAwO1xuIFx0aW50IHJldCwgZmxhZ3M7XG4gXG4gXHR0cmFjZV9leHQ0X3plcm9fcmFuZ2UoaW5vZGUsIG9mZnNldCwgbGVuLCBtb2RlKTtcbkBAIC00NzM0LDEwICs0NzU4LDE2IEBAIHN0YXRpYyBsb25nIGV4dDRfemVyb19yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCxcbiBcdH1cbiBcbiBcdGZsYWdzID0gRVhUNF9HRVRfQkxPQ0tTX0NSRUFURV9VTldSSVRfRVhUO1xuLVx0LyogUHJlYWxsb2NhdGUgdGhlIHJhbmdlIGluY2x1ZGluZyB0aGUgdW5hbGlnbmVkIGVkZ2VzICovXG4rXHQvKlxuK1x0ICogUHJlYWxsb2NhdGUgdGhlIHJhbmdlIGluY2x1ZGluZyB0aGUgdW5hbGlnbmVkIGVkZ2VzLCBhbmQgemVyb1xuK1x0ICogb3V0IHBhcnRpYWwgYmxvY2tzIGlmIHRoZXkgYWxyZWFkeSBjb250YWluIGRhdGEuXG4rXHQgKi9cbiBcdGlmICghSVNfQUxJR05FRChvZmZzZXQgfCBlbmQsIGJsb2Nrc2l6ZSkpIHtcbiBcdFx0cmV0ID0gZXh0NF9hbGxvY19maWxlX2Jsb2NrcyhmaWxlLCBvZmZzZXQsIGxlbiwgbmV3X3NpemUsXG4gXHRcdFx0XHRcdCAgICAgZmxhZ3MpO1xuK1x0XHRpZiAoIXJldClcbitcdFx0XHRyZXQgPSBleHQ0X3plcm9fcGFydGlhbF9ibG9ja3MoaW5vZGUsIG9mZnNldCwgbGVuLFxuK1x0XHRcdFx0XHRcdCAgICAgICBcdTAwMjZwYXJ0aWFsX3plcm9lZCk7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0cmV0dXJuIHJldDtcbiBcdH1cbkBAIC00NzU0LDYgKzQ3ODQsMjEgQEAgc3RhdGljIGxvbmcgZXh0NF96ZXJvX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LFxuIFx0LyogWmVybyByYW5nZSBleGNsdWRpbmcgdGhlIHVuYWxpZ25lZCBlZGdlcyAqL1xuIFx0YWxpZ25fc3RhcnQgPSByb3VuZF91cChvZmZzZXQsIGJsb2Nrc2l6ZSk7XG4gXHRhbGlnbl9lbmQgPSByb3VuZF9kb3duKGVuZCwgYmxvY2tzaXplKTtcbitcbitcdC8qXG4rXHQgKiBJbiBXUklURV9aRVJPRVMgbW9kZSwgZWRnZXMgdGhhdCB3ZXJlIG5vdCBwYXJ0aWFsLXplcm9lZCAoY2xlYW5cbitcdCAqIHVud3JpdHRlbiBvciBob2xlKSBtdXN0IGJlIGFsbG9jYXRlZCBhbmQgemVyb2VkIGFzIHdob2xlIGJsb2Nrcy5cbitcdCAqIEV4cGFuZCB0aGUgYWxpZ25lZCByYW5nZSBvdXR3YXJkIHRvIGNvdmVyIHRoZW0uXG4rXHQgKi9cbitcdGlmIChtb2RlIFx1MDAyNiBGQUxMT0NfRkxfV1JJVEVfWkVST0VTKSB7XG4rXHRcdGlmICghSVNfQUxJR05FRChvZmZzZXQsIGJsb2Nrc2l6ZSkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhKHBhcnRpYWxfemVyb2VkIFx1MDAyNiBFWFQ0X1BBUlRJQUxfWkVST19TVEFSVCkpXG4rXHRcdFx0YWxpZ25fc3RhcnQgPSByb3VuZF9kb3duKG9mZnNldCwgYmxvY2tzaXplKTtcbitcdFx0aWYgKCFJU19BTElHTkVEKGVuZCwgYmxvY2tzaXplKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICEocGFydGlhbF96ZXJvZWQgXHUwMDI2IEVYVDRfUEFSVElBTF9aRVJPX0VORCkpXG4rXHRcdFx0YWxpZ25fZW5kID0gcm91bmRfdXAoZW5kLCBibG9ja3NpemUpO1xuK1x0fVxuK1xuIFx0aWYgKGFsaWduX2VuZCBcdTAwM2UgYWxpZ25fc3RhcnQpIHtcbiBcdFx0aWYgKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9XUklURV9aRVJPRVMpXG4gXHRcdFx0ZmxhZ3MgPSBFWFQ0X0dFVF9CTE9DS1NfQ1JFQVRFX1pFUk8gfCBFWFQ0X0VYX05PQ0FDSEU7XG5AQCAtNDc3MCwxMSArNDgxNSwxNSBAQCBzdGF0aWMgbG9uZyBleHQ0X3plcm9fcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsXG4gXHRpZiAoSVNfQUxJR05FRChvZmZzZXQgfCBlbmQsIGJsb2Nrc2l6ZSkpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHQvKiBaZXJvIG91dCBwYXJ0aWFsIGJsb2NrIGF0IHRoZSBlZGdlcyBvZiB0aGUgcmFuZ2UgKi9cbi1cdHJldCA9IGV4dDRfemVyb19wYXJ0aWFsX2Jsb2Nrcyhpbm9kZSwgb2Zmc2V0LCBsZW4sIFx1MDAyNnBhcnRpYWxfemVyb2VkKTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4tXHRpZiAoKChmaWxlLVx1MDAzZWZfZmxhZ3MgXHUwMDI2IE9fU1lOQykgfHwgSVNfU1lOQyhpbm9kZSkpIFx1MDAyNlx1MDAyNiBwYXJ0aWFsX3plcm9lZCkge1xuK1x0LypcbitcdCAqIEluIEZBTExPQ19GTF9XUklURV9aRVJPRVMgbW9kZSwgZWRnZXMgdGhhdCBoYXZlIGJlZW4gcGFydGlhbGx5XG4rXHQgKiB6ZXJvZWQgbXVzdCBiZSB3cml0dGVuIGJhY2sgdG8gZW5zdXJlIHRoZSBlbnRpcmUgemVyb2VkIHJhbmdlXG4rXHQgKiBpcyBjb252ZXJ0ZWQgdG8gdGhlIHdyaXR0ZW4gc3RhdGUuIEluIFNZTkMgbW9kZSwgd3JpdGViYWNrIGlzXG4rXHQgKiBhbHNvIHJlcXVpcmVkIHRvIHBlcnNpc3QgdGhlIHplcm9lZCBkYXRhIHRvIGRpc2suXG4rXHQgKi9cbitcdGlmIChwYXJ0aWFsX3plcm9lZCBcdTAwMjZcdTAwMjZcbitcdCAgICAoKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9XUklURV9aRVJPRVMpIHx8XG4rXHQgICAgIChmaWxlLVx1MDAzZWZfZmxhZ3MgXHUwMDI2IE9fU1lOQykgfHwgSVNfU1lOQyhpbm9kZSkpKSB7XG4gXHRcdHJldCA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBvZmZzZXQsXG4gXHRcdFx0XHRcdFx0ICAgZW5kIC0gMSk7XG4gXHRcdGlmIChyZXQpXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jXG5pbmRleCBjMmMyZDZhYzdmM2QxMy4uYjUyMTdkNWZlOTU0MGIgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2lub2RlLmNcbisrKyBiL2ZzL2V4dDQvaW5vZGUuY1xuQEAgLTQwMjYsNiArNDAyNiwxMCBAQCB2b2lkIGV4dDRfc2V0X2FvcHMoc3RydWN0IGlub2RlICppbm9kZSlcbiAgKiBiZWNhdXNlIGl0IG1pZ2h0IGhhdmUgZGF0YSBpbiBwYWdlY2FjaGUgKGVnLCBpZiBjYWxsZWQgZnJvbSBleHQ0X3plcm9fcmFuZ2UsXG4gICogZXh0NF9wdW5jaF9ob2xlLCBldGMpIHdoaWNoIG5lZWRzIHRvIGJlIHByb3Blcmx5IHplcm9lZCBvdXQuIE90aGVyd2lzZSBhXG4gICogcmFjaW5nIHdyaXRlYmFjayBjYW4gY29tZSBsYXRlciBhbmQgZmx1c2ggdGhlIHN0YWxlIHBhZ2VjYWNoZSB0byBkaXNrLlxuKyAqXG4rICogUmV0dXJuIHRoZSBsb2FkZWQgYmggaWYgaXQgYWN0dWFsbHkgbmVlZHMgemVyb2luZyAtIGluIHdyaXR0ZW4sIGRpcnR5XG4rICogdW53cml0dGVuLCBvciBkZWxhbGxvYyBzdGF0ZS4gUmV0dXJuIE5VTEwgaWYgaXQncyBjbGVhbiAoaS5lLiwgYSBob2xlIG9yXG4rICogYSBjbGVhbiB1bndyaXR0ZW4gYmxvY2spLlxuICAqL1xuIHN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmV4dDRfbG9hZF90YWlsX2JoKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBmcm9tKVxuIHtcbkBAIC00MDY1LDcgKzQwNjksMTIgQEAgc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqZXh0NF9sb2FkX3RhaWxfYmgoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGZyb20pXG4gXHRpZiAoIWJ1ZmZlcl9tYXBwZWQoYmgpKSB7XG4gXHRcdEJVRkZFUl9UUkFDRShiaCwgXCJ1bm1hcHBlZFwiKTtcbiBcdFx0ZXh0NF9nZXRfYmxvY2soaW5vZGUsIGlibG9jaywgYmgsIDApO1xuLVx0XHQvKiB1bm1hcHBlZD8gSXQncyBhIGhvbGUgLSBub3RoaW5nIHRvIGRvICovXG4rXHRcdC8qXG4rXHRcdCAqIEl0J3MgYSBob2xlIG9yIGEgY2xlYW4gdW53cml0dGVuIGJsb2NrIC0gbm90aGluZyB0byBkby5cbitcdFx0ICogTm90ZSB0aGF0IGEgbG9va3VwLW9ubHkgZ2V0X2Jsb2NrICh3aXRob3V0XG4rXHRcdCAqIEVYVDRfR0VUX0JMT0NLU19DUkVBVEUpIG5ldmVyIHNldHMgQkhfTWFwcGVkIGZvciBjbGVhblxuK1x0XHQgKiB1bndyaXR0ZW4gZXh0ZW50cy5cbitcdFx0ICovXG4gXHRcdGlmICghYnVmZmVyX21hcHBlZChiaCkpIHtcbiBcdFx0XHRCVUZGRVJfVFJBQ0UoYmgsIFwic3RpbGwgdW5tYXBwZWRcIik7XG4gXHRcdFx0Z290byB1bmxvY2s7XG5AQCAtNDI1MiwxMyArNDI2MSwyNiBAQCBpbnQgZXh0NF9ibG9ja196ZXJvX2VvZihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgZnJvbSwgbG9mZl90IGVuZClcbiBcdHJldHVybiAwO1xuIH1cbiBcbisvKlxuKyAqIFplcm8gb3V0IHRoZSB1bmFsaWduZWQgaGVhZCBhbmQgdGFpbCBvZiB0aGUgW2xzdGFydCwgbHN0YXJ0K2xlbmd0aClcbisgKiByYW5nZS5cbisgKlxuKyAqIE9uIHJldHVybiwgQHBhcnRpYWxfemVyb2VkIHJlY29yZHMgd2hpY2ggZWRnZXMgYWN0dWFsbHkgZ290XG4rICogcGFydGlhbC16ZXJvZWQuICBTZXQgRVhUNF9QQVJUSUFMX1pFUk9fU1RBUlQvRVhUNF9QQVJUSUFMX1pFUk9fRU5EIGlmXG4rICogdGhlIGhlYWQvdGFpbCBibG9jayBnb3QgYWN0dWFsbHkgcGFydGlhbGx5IHplcm9lZCAoaW4gd3JpdHRlbiwgZGlydHlcbisgKiB1bndyaXR0ZW4gb3IgZGVsYWxsb2Mgc3RhdGUpLiAgQ2xlYXJlZCBpZiB0aGUgaGVhZC90YWlsIGJsb2NrIGlzIGFcbisgKiBob2xlIG9yIGEgY2xlYW4gdW53cml0dGVuIGJsb2NrLCBpbiB3aGljaCBjYXNlIHRoZXJlIGlzIG5vdGhpbmcgdGhhdFxuKyAqIG5lZWRzIHplcm9pbmcuICBXaGVuIHRoZSBoZWFkIGFuZCB0YWlsIGxhbmQgaW4gdGhlIHNhbWUgYmxvY2ssIGJvdGhcbisgKiBiaXRzIGFyZSBzZXQgdG9nZXRoZXIgb24gYSBzdWNjZXNzZnVsIHplcm9pbmcuXG4rICovXG4gaW50IGV4dDRfemVyb19wYXJ0aWFsX2Jsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgbHN0YXJ0LCBsb2ZmX3QgbGVuZ3RoLFxuLVx0XHRcdCAgICAgYm9vbCAqZGlkX3plcm8pXG4rXHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgKnBhcnRpYWxfemVyb2VkKVxuIHtcbiBcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuIFx0dW5zaWduZWQgcGFydGlhbF9zdGFydCwgcGFydGlhbF9lbmQ7XG4gXHRleHQ0X2ZzYmxrX3Qgc3RhcnQsIGVuZDtcbiBcdGxvZmZfdCBieXRlX2VuZCA9IChsc3RhcnQgKyBsZW5ndGggLSAxKTtcbitcdGJvb2wgZGlkX3plcm8gPSBmYWxzZTtcbiBcdGludCBlcnIgPSAwO1xuIFxuIFx0cGFydGlhbF9zdGFydCA9IGxzdGFydCBcdTAwMjYgKHNiLVx1MDAzZXNfYmxvY2tzaXplIC0gMSk7XG5AQCAtNDI3MCwyMSArNDI5MiwzMiBAQCBpbnQgZXh0NF96ZXJvX3BhcnRpYWxfYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBsc3RhcnQsIGxvZmZfdCBsZW5ndGgsXG4gXHQvKiBIYW5kbGUgcGFydGlhbCB6ZXJvIHdpdGhpbiB0aGUgc2luZ2xlIGJsb2NrICovXG4gXHRpZiAoc3RhcnQgPT0gZW5kIFx1MDAyNlx1MDAyNlxuIFx0ICAgIChwYXJ0aWFsX3N0YXJ0IHx8IChwYXJ0aWFsX2VuZCAhPSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZSAtIDEpKSkge1xuLVx0XHRlcnIgPSBleHQ0X2Jsb2NrX3plcm9fcmFuZ2UoaW5vZGUsIGxzdGFydCwgbGVuZ3RoLCBkaWRfemVybyxcbitcdFx0ZXJyID0gZXh0NF9ibG9ja196ZXJvX3JhbmdlKGlub2RlLCBsc3RhcnQsIGxlbmd0aCwgXHUwMDI2ZGlkX3plcm8sXG4gXHRcdFx0XHRcdCAgICBOVUxMKTtcbitcdFx0aWYgKGRpZF96ZXJvKVxuK1x0XHRcdCpwYXJ0aWFsX3plcm9lZCB8PSAoRVhUNF9QQVJUSUFMX1pFUk9fU1RBUlQgfFxuK1x0XHRcdFx0XHQgICAgRVhUNF9QQVJUSUFMX1pFUk9fRU5EKTtcbiBcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcdC8qIEhhbmRsZSBwYXJ0aWFsIHplcm8gb3V0IG9uIHRoZSBzdGFydCBvZiB0aGUgcmFuZ2UgKi9cbiBcdGlmIChwYXJ0aWFsX3N0YXJ0KSB7XG4gXHRcdGVyciA9IGV4dDRfYmxvY2tfemVyb19yYW5nZShpbm9kZSwgbHN0YXJ0LCBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZSxcbi1cdFx0XHRcdFx0ICAgIGRpZF96ZXJvLCBOVUxMKTtcbitcdFx0XHRcdFx0ICAgIFx1MDAyNmRpZF96ZXJvLCBOVUxMKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHRpZiAoZGlkX3plcm8pXG4rXHRcdFx0KnBhcnRpYWxfemVyb2VkIHw9IEVYVDRfUEFSVElBTF9aRVJPX1NUQVJUO1xuIFx0fVxuIFx0LyogSGFuZGxlIHBhcnRpYWwgemVybyBvdXQgb24gdGhlIGVuZCBvZiB0aGUgcmFuZ2UgKi9cbi1cdGlmIChwYXJ0aWFsX2VuZCAhPSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZSAtIDEpXG4rXHRpZiAocGFydGlhbF9lbmQgIT0gc2ItXHUwMDNlc19ibG9ja3NpemUgLSAxKSB7XG4rXHRcdGRpZF96ZXJvID0gZmFsc2U7XG4gXHRcdGVyciA9IGV4dDRfYmxvY2tfemVyb19yYW5nZShpbm9kZSwgYnl0ZV9lbmQgLSBwYXJ0aWFsX2VuZCxcbi1cdFx0XHRcdFx0ICAgIHBhcnRpYWxfZW5kICsgMSwgZGlkX3plcm8sIE5VTEwpO1xuK1x0XHRcdFx0XHQgICAgcGFydGlhbF9lbmQgKyAxLCBcdTAwMjZkaWRfemVybywgTlVMTCk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0aWYgKGRpZF96ZXJvKVxuK1x0XHRcdCpwYXJ0aWFsX3plcm9lZCB8PSBFWFQ0X1BBUlRJQUxfWkVST19FTkQ7XG4rXHR9XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC00NDMzLDcgKzQ0NjYsNyBAQCBpbnQgZXh0NF9wdW5jaF9ob2xlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoKVxuIFx0bG9mZl90IGVuZCA9IG9mZnNldCArIGxlbmd0aDtcbiBcdGhhbmRsZV90ICpoYW5kbGU7XG4gXHR1bnNpZ25lZCBpbnQgY3JlZGl0cztcbi1cdGJvb2wgcGFydGlhbF96ZXJvZWQgPSBmYWxzZTtcbitcdHVuc2lnbmVkIGludCBwYXJ0aWFsX3plcm9lZCA9IDA7XG4gXHRpbnQgcmV0O1xuIFxuIFx0dHJhY2VfZXh0NF9wdW5jaF9ob2xlKGlub2RlLCBvZmZzZXQsIGxlbmd0aCwgMCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwOToxMTowNy4wNzMwODk1NjNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTMyNjM1NDQ2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGV4dDQgUGF0Y2ggZm9yIFBhcnRpYWwgWmVyb2luZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgbWFraW5nIHNvbWUgZnVuZGFtZW50YWwgY2hhbmdlcyB0byBob3cgZXh0NCBoYW5kbGVzIHBhcnRpYWwgemVyb2luZyBvZiBibG9ja3MuIFRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gaXMgaW4gYGZzL2V4dDQvZXh0ZW50cy5jYCBhbmQgYGZzL2V4dDQvaW5vZGUuY2AuIEl0IGxvb2tzIGxpa2Ugd2UgYXJlIGRlYWxpbmcgd2l0aCB0aGUgYGZhbGxvY2F0ZWAgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSB3aGVuIGl0J3MgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FU2AgZmxhZy4gQWN0dWFsbHksIGxldCBtZSBkb3VibGUtY2hlY2sgdGhhdC4uLiB3YWl0IGEgc2Vjb25kLCB0aGVyZSBpcyBhIGBGQUxMT0NfRkxfWkVST19SQU5HRWAgZmxhZy4gTWF5YmUgaXQncyBub3QgYEZBTExPQ19GTF9XUklURV9aRVJPRVNgLCB0aGVyZSBpcyBubyBzdGFuZGFyZCBgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FU2AuIE9LLCBMZXQgbWUgZ3JlcCBmb3IgdGhlIGNvZGUsIGp1c3QgdG8gbWFrZSBzdXJlIEkgYW0gdGhpbmtpbmcgYWJvdXQgdGhpcyBjb3JyZWN0bHksIHllcywgYG1vZGUgXHUwMDI2IEZBTExPQ19GTF9XUklURV9aRVJPRVNgLiBPay5cblxuVGhlIHBhdGNoIHNlZW1zIHRvIGludHJvZHVjZSBgRVhUNF9QQVJUSUFMX1pFUk9fU1RBUlRgIGFuZCBgRVhUNF9QQVJUSUFMX1pFUk9fRU5EYCBmbGFncywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0IGFsc28gYXBwZWFycyB0byBiZSByZWZpbmluZyBob3cgYGV4dDRfemVyb19wYXJ0aWFsX2Jsb2Nrc2Agd29ya3MgYnkgcmV0dXJuaW5nIGEgYml0bWFzayBvZiBwYXJ0aWFsIHplcm9lZCBlZGdlcyBpbnN0ZWFkIG9mIGEgYm9vbGVhbiB2YWx1ZS4gVGhpcyBpcyBhIHN1YnRsZSBidXQgaW1wb3J0YW50IHNoaWZ0IGluIHNpZ25hbGluZyBhbmQgY291bGQgaW1wYWN0IGhvdyB3ZSB0cmFjayB0aG9zZSBwYXJ0aWFsIGJsb2Nrcy5cblxuQ3J1Y2lhbGx5LCB0aGUgcGF0Y2ggYWxzbyBtb2RpZmllcyBgZXh0NF9hbGxvY19maWxlX2Jsb2Nrc2AuIEl0IGxvb2tzIGxpa2UgaXQncyBub3cgaGFuZGxpbmcgYGFsbG9jX3plcm9gIGNhbGxzIHJlbGF0ZWQgdG8gdW53cml0dGVuIGV4dGVudHMuIEl0IGFwcGVhcnMgdGhhdCBpdCBtYXkgaW52b2x2ZSBwb3RlbnRpYWxseSBhZGRpbmcgdGhlIGlub2RlIHRvIHRoZSBvcnBoYW4gbGlzdC4gVGhpcyBpcyBzb21ldGhpbmcgdG8ga2VlcCBhbiBleWUgb24gYmVjYXVzZSBpdCBtZWFucyB0aGF0IHRoZXJlIG1heSBiZSBmaWxlIHN5c3RlbSBjb25zaXN0ZW5jeSBpbXBsaWNhdGlvbnMgZm9yIHJlY292ZXJ5IHNjZW5hcmlvcy5cblxuT3ZlcmFsbCwgdGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGV4dDQncyBibG9jayBhbGxvY2F0aW9uIGFuZCB6ZXJvaW5nIGxvZ2ljLCBwb3RlbnRpYWxseSBpbXBhY3RpbmcgcGVyZm9ybWFuY2UgYW5kLCBtb3JlIGltcG9ydGFudGx5LCB0aGUgcmVsaWFiaWxpdHkgb2YgZmlsZSB6ZXJvaW5nLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHRoZSBibG9jayBhbGxvY2F0b3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MjksIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwOToxMTozOC4zOTk0NDYzNTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQwNDc2MjU5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJGQUxMT0NfRkxfXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgODk3IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2ZzY3J5cHQucnN0PTEyMDg9YXN0dXRlIHVzZXJzIG1heSBub3RpY2Ugc29tZSBkaWZmZXJlbmNlcyBpbiBiZWhhdmlvcjpcXG4tLVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZnNjcnlwdC5yc3QtMTIyNy1cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2ZzY3J5cHQucnN0OjEyMjg6LSBUaGUgZmFsbG9jYXRlIG9wZXJhdGlvbnMgRkFMTE9DX0ZMX0NPTExBUFNFX1JBTkdFIGFuZFxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZnNjcnlwdC5yc3Q6MTIyOTogIEZBTExPQ19GTF9JTlNFUlRfUkFOR0UgYXJlIG5vdCBzdXBwb3J0ZWQgb24gZW5jcnlwdGVkIGZpbGVzIGFuZCB3aWxsXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9mc2NyeXB0LnJzdC0xMjMwLSAgZmFpbCB3aXRoIEVPUE5PVFNVUFAuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0PTQ0MT1maWxlc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgaG9sZSBwdW5jaGluZyAoZGVhbGxvY2F0aW5nIHNwYWNlIGluIHRoZSBtaWRkbGUgb2YgYVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3Q6NDQyOmZpbGUpIHlvdSBtdXN0IHJldHVybiAtRU9QTk9UU1VQUCBpZiBGQUxMT0NfRkxfUFVOQ0hfSE9MRSBpcyBzZXQgaW4gbW9kZS5cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0OjQ0MzpDdXJyZW50bHkgeW91IGNhbiBvbmx5IGhhdmUgRkFMTE9DX0ZMX1BVTkNIX0hPTEUgd2l0aCBGQUxMT0NfRkxfS0VFUF9TSVpFIHNldCxcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0LTQ0NC1zbyB0aGUgaV9zaXplIHNob3VsZCBub3QgY2hhbmdlIHdoZW4gaG9sZSBwdW5jaGluZywgZXZlbiB3aGVuIHB1Y2hpbmcgdGhlIGVuZCBvZlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZmF0LnJzdD0yMjc9VGhlIGZhbGxvY2F0ZWQgcmVnaW9uIG9mIGZpbGUgaXMgZGlzY2FyZGVkIGF0IHVtb3VudC9ldmljdCB0aW1lXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZmF0LnJzdDoyMjg6d2hlbiB1c2luZyBmYWxsb2NhdGUgd2l0aCBGQUxMT0NfRkxfS0VFUF9TSVpFLlxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZhdC5yc3QtMjI5LVNvLCBVc2VyIHNob3VsZCBhc3N1bWUgdGhhdCBmYWxsb2NhdGVkIHJlZ2lvbiBjYW4gYmUgZGlzY2FyZGVkIGF0XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3hmcy94ZnMtb25saW5lLWZzY2stZGVzaWduLnJzdD0yMjA0PVRvIGZyZWUgYW4geGZidHJlZSBibG9jaywgdXNlIGBgeGZpbGVfZGlzY2FyZGBgICh3aGljaCBpbnRlcm5hbGx5IHVzZXNcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3hmcy94ZnMtb25saW5lLWZzY2stZGVzaWduLnJzdDoyMjA1OmBgRkFMTE9DX0ZMX1BVTkNIX0hPTEVgYCkgdG8gcmVtb3ZlIHRoZSBtZW1vcnkgcGFnZSBmcm9tIHRoZSB4ZmlsZS5cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3hmcy94ZnMtb25saW5lLWZzY2stZGVzaWduLnJzdC0yMjA2LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy94ZnMveGZzLW9ubGluZS1mc2NrLWRlc2lnbi5yc3Q9NTIwNj1UaGUgc2Vjb25kIHBpZWNlIGl0IG5lZWRzIGlzIGEgbmV3IGZhbGxvY2F0ZSBtb2RlXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy94ZnMveGZzLW9ubGluZS1mc2NrLWRlc2lnbi5yc3Q6NTIwNzooYGBGQUxMT0NfRkxfTUFQX0ZSRUVfU1BBQ0VgYCkgdGhhdCBhbGxvY2F0ZXMgdGhlIGZyZWUgc3BhY2UgaW4gYSByZWdpb24gYW5kXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy94ZnMveGZzLW9ubGluZS1mc2NrLWRlc2lnbi5yc3QtNTIwOC1tYXBzIGl0IHRvIGEgZmlsZS5cXG4tLVxcbkRvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9sYW5kbG9jay5yc3Q9Mzk5PUF0IHRoZSBzYW1lIHRpbWUsIG9uIHNvbWUgZmlsZXN5c3RlbXMsIDptYW5wYWdlOmBmYWxsb2NhdGUoMilgIG9mZmVycyBhIHdheSB0b1xcbkRvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9sYW5kbG9jay5yc3Q6NDAwOnNob3J0ZW4gZmlsZSBjb250ZW50cyB3aXRoIGBgRkFMTE9DX0ZMX0NPTExBUFNFX1JBTkdFYGAgd2hlbiB0aGUgZmlsZSBpcyBvcGVuZWRcXG5Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvbGFuZGxvY2sucnN0LTQwMS1mb3Igd3JpdGluZywgc2lkZXN0ZXBwaW5nIHRoZSBgYExBTkRMT0NLX0FDQ0VTU19GU19UUlVOQ0FURWBgIHJpZ2h0Llxcbi0tXFxuYXJjaC91bS9vcy1MaW51eC9maWxlLmM9NjE2PWludCBvc19mYWxsb2NfcHVuY2goaW50IGZkLCB1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0LCBpbnQgbGVuKVxcbmFyY2gvdW0vb3MtTGludXgvZmlsZS5jLTYxNy17XFxuYXJjaC91bS9vcy1MaW51eC9maWxlLmM6NjE4OlxcdGludCBuID0gZmFsbG9jYXRlKGZkLCBGQUxMT0NfRkxfUFVOQ0hfSE9MRXxGQUxMT0NfRkxfS0VFUF9TSVpFLCBvZmZzZXQsIGxlbik7XFxuYXJjaC91bS9vcy1MaW51eC9maWxlLmMtNjE5LVxcbi0tXFxuYXJjaC91bS9vcy1MaW51eC9maWxlLmM9NjI1PWludCBvc19mYWxsb2NfemVyb2VzKGludCBmZCwgdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldCwgaW50IGxlbilcXG5hcmNoL3VtL29zLUxpbnV4L2ZpbGUuYy02MjYte1xcbmFyY2gvdW0vb3MtTGludXgvZmlsZS5jOjYyNzpcXHRpbnQgbiA9IGZhbGxvY2F0ZShmZCwgRkFMTE9DX0ZMX1pFUk9fUkFOR0V8RkFMTE9DX0ZMX0tFRVBfU0laRSwgb2Zmc2V0LCBsZW4pO1xcbmFyY2gvdW0vb3MtTGludXgvZmlsZS5jLTYyOC1cXG4tLVxcbmJsb2NrL2ZvcHMuYz04MTE9c3RhdGljIHNzaXplX3QgYmxrZGV2X3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuLS1cXG5ibG9jay9mb3BzLmMtODYzLVxcbmJsb2NrL2ZvcHMuYzo4NjQ6I2RlZmluZVxcdEJMS0RFVl9GQUxMT0NfRkxfU1VQUE9SVEVEXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmJsb2NrL2ZvcHMuYzo4NjU6XFx0XFx0KEZBTExPQ19GTF9LRUVQX1NJWkUgfCBGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8XFx0XFx0XFxcXFxcbmJsb2NrL2ZvcHMuYzo4NjY6XFx0XFx0IEZBTExPQ19GTF9aRVJPX1JBTkdFIHwgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FUylcXG5ibG9jay9mb3BzLmMtODY3LVxcbmJsb2NrL2ZvcHMuYz04Njg9c3RhdGljIGxvbmcgYmxrZGV2X2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBzdGFydCxcXG4tLVxcbmJsb2NrL2ZvcHMuYy04NzgtXFx0LyogRmFpbCBpZiB3ZSBkb24ndCByZWNvZ25pemUgdGhlIGZsYWdzLiAqL1xcbmJsb2NrL2ZvcHMuYzo4Nzk6XFx0aWYgKG1vZGUgXFx1MDAyNiB+QkxLREVWX0ZBTExPQ19GTF9TVVBQT1JURUQpXFxuYmxvY2svZm9wcy5jLTg4MC1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5ibG9jay9mb3BzLmMtODg0LVxcdCAqL1xcbmJsb2NrL2ZvcHMuYzo4ODU6XFx0aWYgKChtb2RlIFxcdTAwMjYgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FUykgXFx1MDAyNlxcdTAwMjZcXG5ibG9jay9mb3BzLmMtODg2LVxcdCAgICAhYmRldl93cml0ZV96ZXJvZXNfdW5tYXBfc2VjdG9ycyhiZGV2KSlcXG4tLVxcbmJsb2NrL2ZvcHMuYy04OTMtXFx0aWYgKGVuZCBcXHUwMDNlPSBpc2l6ZSkge1xcbmJsb2NrL2ZvcHMuYzo4OTQ6XFx0XFx0aWYgKG1vZGUgXFx1MDAyNiBGQUxMT0NfRkxfS0VFUF9TSVpFKSB7XFxuYmxvY2svZm9wcy5jLTg5NS1cXHRcXHRcXHRsZW4gPSBpc2l6ZSAtIHN0YXJ0O1xcbi0tXFxuYmxvY2svZm9wcy5jLTkxMC1cXHRzd2l0Y2ggKG1vZGUpIHtcXG5ibG9jay9mb3BzLmM6OTExOlxcdGNhc2UgRkFMTE9DX0ZMX1pFUk9fUkFOR0U6XFxuYmxvY2svZm9wcy5jOjkxMjpcXHRjYXNlIEZBTExPQ19GTF9aRVJPX1JBTkdFIHwgRkFMTE9DX0ZMX0tFRVBfU0laRTpcXG5ibG9jay9mb3BzLmMtOTEzLVxcdFxcdGZsYWdzID0gQkxLREVWX1pFUk9fTk9VTk1BUDtcXG5ibG9jay9mb3BzLmMtOTE0LVxcdFxcdGJyZWFrO1xcbmJsb2NrL2ZvcHMuYzo5MTU6XFx0Y2FzZSBGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8IEZBTExPQ19GTF9LRUVQX1NJWkU6XFxuYmxvY2svZm9wcy5jLTkxNi1cXHRcXHRmbGFncyA9IEJMS0RFVl9aRVJPX05PRkFMTEJBQ0s7XFxuYmxvY2svZm9wcy5jLTkxNy1cXHRcXHRicmVhaztcXG5ibG9jay9mb3BzLmM6OTE4OlxcdGNhc2UgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FUzpcXG5ibG9jay9mb3BzLmMtOTE5LVxcdFxcdGZsYWdzID0gMDtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTIyND1zdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBpbnQgbW9kZSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIyNy1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMjg6XFx0aWYgKG1vZGUgXFx1MDAyNiBGQUxMT0NfRkxfWkVST19SQU5HRSlcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjktXFx0XFx0bGltLm1heF93cml0ZV96ZXJvZXNfc2VjdG9ycyA9IDA7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjMwLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIzMTpcXHRpZiAobW9kZSBcXHUwMDI2IEZBTExPQ19GTF9QVU5DSF9IT0xFKSB7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjMyLVxcdFxcdGxpbS5tYXhfaHdfZGlzY2FyZF9zZWN0b3JzID0gMDtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTI0Nj1zdGF0aWMgaW50IGxvX2ZhbGxvY2F0ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIGxvZmZfdCBwb3MsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yNTUtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MjU2OlxcdG1vZGUgfD0gRkFMTE9DX0ZMX0tFRVBfU0laRTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yNTctXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz00MTM9c3RhdGljIGludCBkb19yZXFfZmlsZWJhY2tlZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00MjctXFx0XFx0XFx0KHJxLVxcdTAwM2VjbWRfZmxhZ3MgXFx1MDAyNiBSRVFfTk9VTk1BUCkgP1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjQyODpcXHRcXHRcXHRcXHRGQUxMT0NfRkxfWkVST19SQU5HRSA6XFxuZHJpdmVycy9ibG9jay9sb29wLmM6NDI5OlxcdFxcdFxcdFxcdEZBTExPQ19GTF9QVU5DSF9IT0xFKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy00MzAtXFx0Y2FzZSBSRVFfT1BfRElTQ0FSRDpcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo0MzE6XFx0XFx0cmV0dXJuIGxvX2ZhbGxvY2F0ZShsbywgcnEsIHBvcywgRkFMTE9DX0ZMX1BVTkNIX0hPTEUpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTQzMi1cXHRjYXNlIFJFUV9PUF9XUklURTpcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvaW8tY21kLWZpbGUuYz0yNzI9c3RhdGljIHZvaWQgbnZtZXRfZmlsZV9leGVjdXRlX2Rpc2NhcmQoc3RydWN0IG52bWV0X3JlcSAqcmVxKVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvaW8tY21kLWZpbGUuYy0yNzMte1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvaW8tY21kLWZpbGUuYzoyNzQ6XFx0aW50IG1vZGUgPSBGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8IEZBTExPQ19GTF9LRUVQX1NJWkU7XFxuZHJpdmVycy9udm1lL3RhcmdldC9pby1jbWQtZmlsZS5jLTI3NS1cXHRzdHJ1Y3QgbnZtZV9kc21fcmFuZ2UgcmFuZ2U7XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L2lvLWNtZC1maWxlLmM9MzMyPXN0YXRpYyB2b2lkIG52bWV0X2ZpbGVfd3JpdGVfemVyb2VzX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9pby1jbWQtZmlsZS5jLTMzNS1cXHRzdHJ1Y3QgbnZtZV93cml0ZV96ZXJvZXNfY21kICp3cml0ZV96ZXJvZXMgPSBcXHUwMDI2cmVxLVxcdTAwM2VjbWQtXFx1MDAzZXdyaXRlX3plcm9lcztcXG5kcml2ZXJzL252bWUvdGFyZ2V0L2lvLWNtZC1maWxlLmM6MzM2OlxcdGludCBtb2RlID0gRkFMTE9DX0ZMX1pFUk9fUkFOR0UgfCBGQUxMT0NfRkxfS0VFUF9TSVpFO1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvaW8tY21kLWZpbGUuYy0zMzctXFx0bG9mZl90IG9mZnNldDtcXG4tLVxcbmRyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2ZpbGUuYz01MzM9ZmRfZXhlY3V0ZV91bm1hcChzdHJ1Y3Qgc2VfY21kICpjbWQsIHNlY3Rvcl90IGxiYSwgc2VjdG9yX3Qgbm9sYilcXG4tLVxcbmRyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2ZpbGUuYy01NjctXFx0XFx0dW5zaWduZWQgaW50IGxlbiA9IG5vbGIgKiBzZV9kZXYtXFx1MDAzZWRldl9hdHRyaWIuYmxvY2tfc2l6ZTtcXG5kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9maWxlLmM6NTY4OlxcdFxcdGludCBtb2RlID0gRkFMTE9DX0ZMX1BVTkNIX0hPTEUgfCBGQUxMT0NfRkxfS0VFUF9TSVpFO1xcbmRyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2ZpbGUuYy01NjktXFxuLS1cXG5mcy9idHJmcy9maWxlLmM9Mjg1OT1zdGF0aWMgaW50IGJ0cmZzX2ZhbGxvY2F0ZV91cGRhdGVfaXNpemUoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2J0cmZzL2ZpbGUuYy0yODY5LVxcbmZzL2J0cmZzL2ZpbGUuYzoyODcwOlxcdGlmIChtb2RlIFxcdTAwMjYgRkFMTE9DX0ZMX0tFRVBfU0laRSB8fCBlbmQgXFx1MDAzYz0gaV9zaXplX3JlYWQoaW5vZGUpKVxcbmZzL2J0cmZzL2ZpbGUuYy0yODcxLVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZnMvYnRyZnMvZmlsZS5jPTMxMDA9c3RhdGljIGxvbmcgYnRyZnNfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSxcXG4tLVxcbmZzL2J0cmZzL2ZpbGUuYy0zMTM0LVxcdC8qIE1ha2Ugc3VyZSB3ZSBhcmVuJ3QgYmVpbmcgZ2l2ZSBzb21lIGNyYXAgbW9kZSAqL1xcbmZzL2J0cmZzL2ZpbGUuYzozMTM1OlxcdGlmIChtb2RlIFxcdTAwMjYgfihGQUxMT0NfRkxfS0VFUF9TSVpFIHwgRkFMTE9DX0ZMX1BVTkNIX0hPTEUgfFxcbmZzL2J0cmZzL2ZpbGUuYzozMTM2OlxcdFxcdCAgICAgRkFMTE9DX0ZMX1pFUk9fUkFOR0UpKVxcbmZzL2J0cmZzL2ZpbGUuYy0zMTM3LVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5mcy9idHJmcy9maWxlLmMtMzEzOC1cXG5mcy9idHJmcy9maWxlLmM6MzEzOTpcXHRpZiAobW9kZSBcXHUwMDI2IEZBTExPQ19GTF9QVU5DSF9IT0xFKVxcbmZzL2J0cmZzL2ZpbGUuYy0zMTQwLVxcdFxcdHJldHVybiBidHJmc19wdW5jaF9ob2xlKGZpbGUsIG9mZnNldCwgbGVuKTtcXG4tLVxcbmZzL2J0cmZzL2ZpbGUuYy0zMTQzLVxcbmZzL2J0cmZzL2ZpbGUuYzozMTQ0OlxcdGlmICghKG1vZGUgXFx1MDAyNiBGQUxMT0NfRkxfS0VFUF9TSVpFKSBcXHUwMDI2XFx1MDAyNiBvZmZzZXQgKyBsZW4gXFx1MDAzZSBpbm9kZS1cXHUwMDNlaV9zaXplKSB7XFxuZnMvYnRyZnMvZmlsZS5jLTMxNDUtXFx0XFx0cmV0ID0gaW5vZGVfbmV3c2l6ZV9vayhpbm9kZSwgb2Zmc2V0ICsgbGVuKTtcXG4tLVxcbmZzL2J0cmZzL2ZpbGUuYy0zMTkwLVxcbmZzL2J0cmZzL2ZpbGUuYzozMTkxOlxcdGlmIChtb2RlIFxcdTAwMjYgRkFMTE9DX0ZMX1pFUk9fUkFOR0UpIHtcXG5mcy9idHJmcy9maWxlLmMtMzE5Mi1cXHRcXHRyZXQgPSBidHJmc196ZXJvX3JhbmdlKGlub2RlLCBvZmZzZXQsIGxlbiwgbW9kZSk7XFxuLS1cXG5mcy9idHJmcy9pbm9kZS5jPTkyMTE9c3RhdGljIGludCBfX2J0cmZzX3ByZWFsbG9jX2ZpbGVfcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1vZGUsXFxuLS1cXG5mcy9idHJmcy9pbm9kZS5jLTkyOTgtXFx0XFx0QlRSRlNfSShpbm9kZSktXFx1MDAzZWZsYWdzIHw9IEJUUkZTX0lOT0RFX1BSRUFMTE9DO1xcbmZzL2J0cmZzL2lub2RlLmM6OTI5OTpcXHRcXHRpZiAoIShtb2RlIFxcdTAwMjYgRkFMTE9DX0ZMX0tFRVBfU0laRSkgXFx1MDAyNlxcdTAwMjZcXG5mcy9idHJmcy9pbm9kZS5jLTkzMDAtXFx0XFx0ICAgIChhY3R1YWxfbGVuIFxcdTAwM2UgaW5vZGUtXFx1MDAzZWlfc2l6ZSkgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmZzL2J0cmZzL3NlbmQuYz01NDE2PXN0YXRpYyBpbnQgc2VuZF9ob2xlKHN0cnVjdCBzZW5kX2N0eCAqc2N0eCwgdTY0IGVuZClcXG4tLVxcbmZzL2J0cmZzL3NlbmQuYy01NDI3LVxcdGlmIChwcm90b19jbWRfb2soc2N0eCwgQlRSRlNfU0VORF9DX0ZBTExPQ0FURSkpXFxuZnMvYnRyZnMvc2VuZC5jOjU0Mjg6XFx0XFx0cmV0dXJuIHNlbmRfZmFsbG9jYXRlKHNjdHgsIEZBTExPQ19GTF9QVU5DSF9IT0xFIHwgRkFMTE9DX0ZMX0tFRVBfU0laRSxcXG5mcy9idHJmcy9zZW5kLmMtNTQyOS1cXHRcXHRcXHRcXHQgICAgICBvZmZzZXQsIGVuZCAtIG9mZnNldCk7XFxuLS1cXG5mcy9jYWNoZWZpbGVzL2ludGVyZmFjZS5jPTIzMz1zdGF0aWMgYm9vbCBjYWNoZWZpbGVzX3Nob3J0ZW5fb2JqZWN0KHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0LFxcbi0tXFxuZnMvY2FjaGVmaWxlcy9pbnRlcmZhY2UuYy0yNjEtXFx0XFx0aWYgKHJldCA9PSAwKVxcbmZzL2NhY2hlZmlsZXMvaW50ZXJmYWNlLmM6MjYyOlxcdFxcdFxcdHJldCA9IHZmc19mYWxsb2NhdGUoZmlsZSwgRkFMTE9DX0ZMX1pFUk9fUkFOR0UsXFxuZnMvY2FjaGVmaWxlcy9pbnRlcmZhY2UuYy0yNjMtXFx0XFx0XFx0XFx0XFx0ICAgIG5ld19zaXplLCBkaW9fc2l6ZSAtIG5ld19zaXplKTtcXG4tLVxcbmZzL2NhY2hlZmlsZXMvaW8uYz01MTk9aW50IF9fY2FjaGVmaWxlc19wcmVwYXJlX3dyaXRlKHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0LFxcbi0tXFxuZnMvY2FjaGVmaWxlcy9pby5jLTU4NC1cXHRpZiAocmV0ID09IDApXFxuZnMvY2FjaGVmaWxlcy9pby5jOjU4NTpcXHRcXHRyZXQgPSB2ZnNfZmFsbG9jYXRlKGZpbGUsIEZBTExPQ19GTF9QVU5DSF9IT0xFIHwgRkFMTE9DX0ZMX0tFRVBfU0laRSxcXG5mcy9jYWNoZWZpbGVzL2lvLmMtNTg2LVxcdFxcdFxcdFxcdCAgICBzdGFydCwgKl9sZW4pO1xcbi0tXFxuZnMvY2VwaC9maWxlLmM9MjcyOD1zdGF0aWMgbG9uZyBjZXBoX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsXFxuLS1cXG5mcy9jZXBoL2ZpbGUuYy0yNzQ0LVxcbmZzL2NlcGgvZmlsZS5jOjI3NDU6XFx0aWYgKG1vZGUgIT0gKEZBTExPQ19GTF9LRUVQX1NJWkUgfCBGQUxMT0NfRkxfUFVOQ0hfSE9MRSkpXFxuZnMvY2VwaC9maWxlLmMtMjc0Ni1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5mcy9leGZhdC9maWxlLmM9MjE9c3RhdGljIGludCBleGZhdF9jb250X2V4cGFuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSlcXG4tLVxcbmZzL2V4ZmF0L2ZpbGUuYy05OC0gKiByZXF1ZXN0cyBsZW4gYnl0ZXMgYXQgb2Zmc2V0LiBJbiBjb250cmFyeSB0byBmYXQsIHdlIG9ubHkgc3VwcG9ydFxcbmZzL2V4ZmF0L2ZpbGUuYzo5OTogKiBGQUxMT0NfRkxfQUxMT0NBVEVfUkFOR0UgYmVjYXVzZSBieSBsZWF2aW5nIHRoZSB2YWxpZCBkYXRhIGxlbmd0aChWREwpXFxuZnMvZXhmYXQvZmlsZS5jLTEwMC0gKiBmaWVsZCwgaXQgaXMgdW5uZWNlc3NhcnkgdG8gemVybyBvdXQgdGhlIG5ld2x5IGFsbG9jYXRlZCBjbHVzdGVycy5cXG4tLVxcbmZzL2V4ZmF0L2ZpbGUuYz0xMDI9c3RhdGljIGxvbmcgZXhmYXRfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSxcXG4tLVxcbmZzL2V4ZmF0L2ZpbGUuYy0xMDktXFx0LyogTm8gc3VwcG9ydCBmb3Igb3RoZXIgbW9kZXMgKi9cXG5mcy9leGZhdC9maWxlLmM6MTEwOlxcdGlmIChtb2RlICE9IEZBTExPQ19GTF9BTExPQ0FURV9SQU5HRSlcXG5mcy9leGZhdC9maWxlLmMtMTExLVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTM1NTc9ZXh0NF9leHRfY29udmVydF90b19pbml0aWFsaXplZChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtMzU5OC1cXHQgKiBtZW1tb3ZlKCkgY2FsbHMuIFRyYW5zZmVycmluZyB0byB0aGUgbGVmdCBpcyB0aGUgY29tbW9uIGNhc2UgaW5cXG5mcy9leHQ0L2V4dGVudHMuYzozNTk5OlxcdCAqIHN0ZWFkeSBzdGF0ZSBmb3Igd29ya2xvYWRzIGRvaW5nIGZhbGxvY2F0ZShGQUxMT0NfRkxfS0VFUF9TSVpFKVxcbmZzL2V4dDQvZXh0ZW50cy5jLTM2MDAtXFx0ICogZm9sbG93ZWQgYnkgYXBwZW5kIHdyaXRlcy5cXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTQ3MzQ9c3RhdGljIGxvbmcgZXh0NF96ZXJvX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNDc1MS1cXG5mcy9leHQ0L2V4dGVudHMuYzo0NzUyOlxcdGlmICghKG1vZGUgXFx1MDAyNiBGQUxMT0NfRkxfS0VFUF9TSVpFKSBcXHUwMDI2XFx1MDAyNlxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ3NTMtXFx0ICAgIChlbmQgXFx1MDAzZSBpbm9kZS1cXHUwMDNlaV9zaXplIHx8IGVuZCBcXHUwMDNlIEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZGlza3NpemUpKSB7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy00NzkyLVxcdCAqL1xcbmZzL2V4dDQvZXh0ZW50cy5jOjQ3OTM6XFx0aWYgKG1vZGUgXFx1MDAyNiBGQUxMT0NfRkxfV1JJVEVfWkVST0VTKSB7XFxuZnMvZXh0NC9leHRlbnRzLmMtNDc5NC1cXHRcXHRpZiAoIUlTX0FMSUdORUQob2Zmc2V0LCBibG9ja3NpemUpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy00ODAyLVxcdGlmIChhbGlnbl9lbmQgXFx1MDAzZSBhbGlnbl9zdGFydCkge1xcbmZzL2V4dDQvZXh0ZW50cy5jOjQ4MDM6XFx0XFx0aWYgKG1vZGUgXFx1MDAyNiBGQUxMT0NfRkxfV1JJVEVfWkVST0VTKVxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ4MDQtXFx0XFx0XFx0ZmxhZ3MgPSBFWFQ0X0dFVF9CTE9DS1NfQ1JFQVRFX1pFUk8gfCBFWFQ0X0VYX05PQ0FDSEU7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy00ODE4LVxcdC8qXFxuZnMvZXh0NC9leHRlbnRzLmM6NDgxOTpcXHQgKiBJbiBGQUxMT0NfRkxfV1JJVEVfWkVST0VTIG1vZGUsIGVkZ2VzIHRoYXQgaGF2ZSBiZWVuIHBhcnRpYWxseVxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ4MjAtXFx0ICogemVyb2VkIG11c3QgYmUgd3JpdHRlbiBiYWNrIHRvIGVuc3VyZSB0aGUgZW50aXJlIHplcm9lZCByYW5nZVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNDgyNC1cXHRpZiAocGFydGlhbF96ZXJvZWQgXFx1MDAyNlxcdTAwMjZcXG5mcy9leHQ0L2V4dGVudHMuYzo0ODI1OlxcdCAgICAoKG1vZGUgXFx1MDAyNiBGQUxMT0NfRkxfV1JJVEVfWkVST0VTKSB8fFxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ4MjYtXFx0ICAgICAoZmlsZS1cXHUwMDNlZl9mbGFncyBcXHUwMDI2IE9fU1lOQykgfHwgSVNfU1lOQyhpbm9kZSkpKSB7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz00ODU1PXN0YXRpYyBsb25nIGV4dDRfZG9fZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNDg3MS1cXG5mcy9leHQ0L2V4dGVudHMuYzo0ODcyOlxcdGlmICghKG1vZGUgXFx1MDAyNiBGQUxMT0NfRkxfS0VFUF9TSVpFKSBcXHUwMDI2XFx1MDAyNlxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ4NzMtXFx0ICAgIChlbmQgXFx1MDAzZSBpbm9kZS1cXHUwMDNlaV9zaXplIHx8IGVuZCBcXHUwMDNlIEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZGlza3NpemUpKSB7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz00OTAzPWxvbmcgZXh0NF9mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNDkxNS1cXHRpZiAoSVNfRU5DUllQVEVEKGlub2RlKSBcXHUwMDI2XFx1MDAyNlxcbmZzL2V4dDQvZXh0ZW50cy5jOjQ5MTY6XFx0ICAgIChtb2RlIFxcdTAwMjYgKEZBTExPQ19GTF9DT0xMQVBTRV9SQU5HRSB8IEZBTExPQ19GTF9JTlNFUlRfUkFOR0UpKSlcXG5mcy9leHQ0L2V4dGVudHMuYy00OTE3LVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ5MjEtXFx0ICovXFxuZnMvZXh0NC9leHRlbnRzLmM6NDkyMjpcXHRpZiAoKG1vZGUgXFx1MDAyNiBGQUxMT0NfRkxfV1JJVEVfWkVST0VTKSBcXHUwMDI2XFx1MDAyNlxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ5MjMtXFx0ICAgICFiZGV2X3dyaXRlX3plcm9lc191bm1hcF9zZWN0b3JzKGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2JkZXYpKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNDkyNi1cXHQvKiBSZXR1cm4gZXJyb3IgaWYgbW9kZSBpcyBub3Qgc3VwcG9ydGVkICovXFxuZnMvZXh0NC9leHRlbnRzLmM6NDkyNzpcXHRpZiAobW9kZSBcXHUwMDI2IH4oRkFMTE9DX0ZMX0tFRVBfU0laRSB8IEZBTExPQ19GTF9QVU5DSF9IT0xFIHxcXG5mcy9leHQ0L2V4dGVudHMuYzo0OTI4OlxcdFxcdCAgICAgRkFMTE9DX0ZMX1pFUk9fUkFOR0UgfCBGQUxMT0NfRkxfQ09MTEFQU0VfUkFOR0UgfFxcbmZzL2V4dDQvZXh0ZW50cy5jOjQ5Mjk6XFx0XFx0ICAgICBGQUxMT0NfRkxfSU5TRVJUX1JBTkdFIHwgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FUykpXFxuZnMvZXh0NC9leHRlbnRzLmMtNDkzMC1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy00OTQzLVxcbmZzL2V4dDQvZXh0ZW50cy5jOjQ5NDQ6XFx0aWYgKChtb2RlIFxcdTAwMjYgRkFMTE9DX0ZMX01PREVfTUFTSykgPT0gRkFMTE9DX0ZMX0FMTE9DQVRFX1JBTkdFKSB7XFxuZnMvZXh0NC9leHRlbnRzLmMtNDk0NS1cXHRcXHRyZXQgPSBleHQ0X2RvX2ZhbGxvY2F0ZShmaWxlLCBvZmZzZXQsIGxlbiwgbW9kZSk7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy00OTU5LVxcbmZzL2V4dDQvZXh0ZW50cy5jOjQ5NjA6XFx0c3dpdGNoIChtb2RlIFxcdTAwMjYgRkFMTE9DX0ZMX01PREVfTUFTSykge1xcbmZzL2V4dDQvZXh0ZW50cy5jOjQ5NjE6XFx0Y2FzZSBGQUxMT0NfRkxfUFVOQ0hfSE9MRTpcXG5mcy9leHQ0L2V4dGVudHMuYy00OTYyLVxcdFxcdHJldCA9IGV4dDRfcHVuY2hfaG9sZShmaWxlLCBvZmZzZXQsIGxlbik7XFxuZnMvZXh0NC9leHRlbnRzLmMtNDk2My1cXHRcXHRicmVhaztcXG5mcy9leHQ0L2V4dGVudHMuYzo0OTY0OlxcdGNhc2UgRkFMTE9DX0ZMX0NPTExBUFNFX1JBTkdFOlxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ5NjUtXFx0XFx0cmV0ID0gZXh0NF9jb2xsYXBzZV9yYW5nZShmaWxlLCBvZmZzZXQsIGxlbik7XFxuZnMvZXh0NC9leHRlbnRzLmMtNDk2Ni1cXHRcXHRicmVhaztcXG5mcy9leHQ0L2V4dGVudHMuYzo0OTY3OlxcdGNhc2UgRkFMTE9DX0ZMX0lOU0VSVF9SQU5HRTpcXG5mcy9leHQ0L2V4dGVudHMuYy00OTY4LVxcdFxcdHJldCA9IGV4dDRfaW5zZXJ0X3JhbmdlKGZpbGUsIG9mZnNldCwgbGVuKTtcXG5mcy9leHQ0L2V4dGVudHMuYy00OTY5LVxcdFxcdGJyZWFrO1xcbmZzL2V4dDQvZXh0ZW50cy5jOjQ5NzA6XFx0Y2FzZSBGQUxMT0NfRkxfWkVST19SQU5HRTpcXG5mcy9leHQ0L2V4dGVudHMuYzo0OTcxOlxcdGNhc2UgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FUzpcXG5mcy9leHQ0L2V4dGVudHMuYy00OTcyLVxcdFxcdHJldCA9IGV4dDRfemVyb19yYW5nZShmaWxlLCBvZmZzZXQsIGxlbiwgbW9kZSk7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz01NTc0PXN0YXRpYyBpbnQgZXh0NF9jb2xsYXBzZV9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbilcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTU2NjgtICogZXh0NF9pbnNlcnRfcmFuZ2U6XFxuZnMvZXh0NC9leHRlbnRzLmM6NTY2OTogKiBUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgdGhlIEZBTExPQ19GTF9JTlNFUlRfUkFOR0UgZmxhZyBvZiBmYWxsb2NhdGUuXFxuZnMvZXh0NC9leHRlbnRzLmMtNTY3MC0gKiBUaGUgZGF0YSBibG9ja3Mgc3RhcnRpbmcgZnJvbSBAb2Zmc2V0IHRvIHRoZSBFT0YgYXJlIHNoaWZ0ZWQgYnkgQGxlblxcbi0tXFxuZnMvZjJmcy9maWxlLmM9MTY4Mj1zdGF0aWMgaW50IGYyZnNfemVyb19yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuLFxcbi0tXFxuZnMvZjJmcy9maWxlLmMtMTc4NC1cXHRpZiAobmV3X3NpemUgXFx1MDAzZSBpX3NpemVfcmVhZChpbm9kZSkpIHtcXG5mcy9mMmZzL2ZpbGUuYzoxNzg1OlxcdFxcdGlmIChtb2RlIFxcdTAwMjYgRkFMTE9DX0ZMX0tFRVBfU0laRSlcXG5mcy9mMmZzL2ZpbGUuYy0xNzg2LVxcdFxcdFxcdGZpbGVfc2V0X2tlZXBfaXNpemUoaW5vZGUpO1xcbi0tXFxuZnMvZjJmcy9maWxlLmM9MTg3Mz1zdGF0aWMgaW50IGYyZnNfZXhwYW5kX2lub2RlX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCxcXG4tLVxcbmZzL2YyZnMvZmlsZS5jLTE5ODUtXFx0aWYgKG5ld19zaXplIFxcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKSB7XFxuZnMvZjJmcy9maWxlLmM6MTk4NjpcXHRcXHRpZiAobW9kZSBcXHUwMDI2IEZBTExPQ19GTF9LRUVQX1NJWkUpXFxuZnMvZjJmcy9maWxlLmMtMTk4Ny1cXHRcXHRcXHRmaWxlX3NldF9rZWVwX2lzaXplKGlub2RlKTtcXG4tLVxcbmZzL2YyZnMvZmlsZS5jPTE5OTU9c3RhdGljIGxvbmcgZjJmc19mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLFxcbi0tXFxuZnMvZjJmcy9maWxlLmMtMjAxMi1cXHRpZiAoSVNfRU5DUllQVEVEKGlub2RlKSBcXHUwMDI2XFx1MDAyNlxcbmZzL2YyZnMvZmlsZS5jOjIwMTM6XFx0XFx0KG1vZGUgXFx1MDAyNiAoRkFMTE9DX0ZMX0NPTExBUFNFX1JBTkdFIHwgRkFMTE9DX0ZMX0lOU0VSVF9SQU5HRSkpKVxcbmZzL2YyZnMvZmlsZS5jLTIwMTQtXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbmZzL2YyZnMvZmlsZS5jLTIwMTUtXFxuZnMvZjJmcy9maWxlLmM6MjAxNjpcXHRpZiAobW9kZSBcXHUwMDI2IH4oRkFMTE9DX0ZMX0tFRVBfU0laRSB8IEZBTExPQ19GTF9QVU5DSF9IT0xFIHxcXG5mcy9mMmZzL2ZpbGUuYzoyMDE3OlxcdFxcdFxcdEZBTExPQ19GTF9DT0xMQVBTRV9SQU5HRSB8IEZBTExPQ19GTF9aRVJPX1JBTkdFIHxcXG5mcy9mMmZzL2ZpbGUuYzoyMDE4OlxcdFxcdFxcdEZBTExPQ19GTF9JTlNFUlRfUkFOR0UpKVxcbmZzL2YyZnMvZmlsZS5jLTIwMTktXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxuZnMvZjJmcy9maWxlLmMtMjAyNy1cXHRpZiAoKGYyZnNfY29tcHJlc3NlZF9maWxlKGlub2RlKSB8fCBmMmZzX2lzX3Bpbm5lZF9maWxlKGlub2RlKSkgXFx1MDAyNlxcdTAwMjZcXG5mcy9mMmZzL2ZpbGUuYzoyMDI4OlxcdFxcdChtb2RlIFxcdTAwMjYgKEZBTExPQ19GTF9QVU5DSF9IT0xFIHwgRkFMTE9DX0ZMX0NPTExBUFNFX1JBTkdFIHxcXG5mcy9mMmZzL2ZpbGUuYzoyMDI5OlxcdFxcdFxcdEZBTExPQ19GTF9aRVJPX1JBTkdFIHwgRkFMTE9DX0ZMX0lOU0VSVF9SQU5HRSkpKSB7XFxuZnMvZjJmcy9maWxlLmMtMjAzMC1cXHRcXHRyZXQgPSAtRU9QTk9UU1VQUDtcXG4tLVxcbmZzL2YyZnMvZmlsZS5jLTIwNDMtXFxuZnMvZjJmcy9maWxlLmM6MjA0NDpcXHRpZiAobW9kZSBcXHUwMDI2IEZBTExPQ19GTF9QVU5DSF9IT0xFKSB7XFxuZnMvZjJmcy9maWxlLmMtMjA0NS1cXHRcXHRpZiAob2Zmc2V0IFxcdTAwM2U9IGlub2RlLVxcdTAwM2VpX3NpemUpXFxuLS1cXG5mcy9mMmZzL2ZpbGUuYy0yMDQ4LVxcdFxcdHJldCA9IGYyZnNfcHVuY2hfaG9sZShpbm9kZSwgb2Zmc2V0LCBsZW4pO1xcbmZzL2YyZnMvZmlsZS5jOjIwNDk6XFx0fSBlbHNlIGlmIChtb2RlIFxcdTAwMjYgRkFMTE9DX0ZMX0NPTExBUFNFX1JBTkdFKSB7XFxuZnMvZjJmcy9maWxlLmMtMjA1MC1cXHRcXHRyZXQgPSBmMmZzX2NvbGxhcHNlX3JhbmdlKGlub2RlLCBvZmZzZXQsIGxlbik7XFxuZnMvZjJmcy9maWxlLmM6MjA1MTpcXHR9IGVsc2UgaWYgKG1vZGUgXFx1MDAyNiBGQUxMT0NfRkxfWkVST19SQU5HRSkge1xcbmZzL2YyZnMvZmlsZS5jLTIwNTItXFx0XFx0cmV0ID0gZjJmc196ZXJvX3JhbmdlKGlub2RlLCBvZmZzZXQsIGxlbiwgbW9kZSk7XFxuZnMvZjJmcy9maWxlLmM6MjA1MzpcXHR9IGVsc2UgaWYgKG1vZGUgXFx1MDAyNiBGQUxMT0NfRkxfSU5TRVJUX1JBTkdFKSB7XFxuZnMvZjJmcy9maWxlLmMtMjA1NC1cXHRcXHRyZXQgPSBmMmZzX2luc2VydF9yYW5nZShpbm9kZSwgb2Zmc2V0LCBsZW4pO1xcbi0tXFxuZnMvZmF0L2ZpbGUuYz0yMjA9c3RhdGljIGludCBmYXRfY29udF9leHBhbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHNpemUpXFxuLS1cXG5mcy9mYXQvZmlsZS5jLTI1OC0gKiBvcGVyYXRpb24sIHdoaWNoIGdldHMgY2FsbGVkIGZyb20gc3lzX2ZhbGxvY2F0ZSBzeXN0ZW0gY2FsbC4gVXNlclxcbmZzL2ZhdC9maWxlLmM6MjU5OiAqIHNwYWNlIHJlcXVlc3RzIGxlbiBieXRlcyBhdCBvZmZzZXQuIElmIEZBTExPQ19GTF9LRUVQX1NJWkUgaXMgc2V0XFxuZnMvZmF0L2ZpbGUuYy0yNjAtICogd2UganVzdCBhbGxvY2F0ZSBjbHVzdGVycyB3aXRob3V0IHplcm9pbmcgdGhlbSBvdXQuIE90aGVyd2lzZSB3ZVxcbi0tXFxuZnMvZmF0L2ZpbGUuYz0yNjM9c3RhdGljIGxvbmcgZmF0X2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsXFxuLS1cXG5mcy9mYXQvZmlsZS5jLTI3NC1cXHQvKiBObyBzdXBwb3J0IGZvciBob2xlIHB1bmNoIG9yIG90aGVyIGZhbGxvY2F0ZSBmbGFncy4gKi9cXG5mcy9mYXQvZmlsZS5jOjI3NTpcXHRpZiAobW9kZSBcXHUwMDI2IH5GQUxMT0NfRkxfS0VFUF9TSVpFKVxcbmZzL2ZhdC9maWxlLmMtMjc2LVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbmZzL2ZhdC9maWxlLmMtMjgyLVxcdGlub2RlX2xvY2soaW5vZGUpO1xcbmZzL2ZhdC9maWxlLmM6MjgzOlxcdGlmIChtb2RlIFxcdTAwMjYgRkFMTE9DX0ZMX0tFRVBfU0laRSkge1xcbmZzL2ZhdC9maWxlLmMtMjg0LVxcdFxcdG9uZGlza3NpemUgPSBpbm9kZS1cXHUwMDNlaV9ibG9ja3MgXFx1MDAzY1xcdTAwM2MgOTtcXG4tLVxcbmZzL2Z1c2UvZmlsZS5jPTI5MzA9c3RhdGljIGxvbmcgZnVzZV9maWxlX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXFxuLS1cXG5mcy9mdXNlL2ZpbGUuYy0yOTQ1LVxcdGJvb2wgYmxvY2tfZmF1bHRzID0gRlVTRV9JU19EQVgoaW5vZGUpIFxcdTAwMjZcXHUwMDI2XFxuZnMvZnVzZS9maWxlLmM6Mjk0NjpcXHRcXHQoIShtb2RlIFxcdTAwMjYgRkFMTE9DX0ZMX0tFRVBfU0laRSkgfHxcXG5mcy9mdXNlL2ZpbGUuYzoyOTQ3OlxcdFxcdCAobW9kZSBcXHUwMDI2IChGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8IEZBTExPQ19GTF9aRVJPX1JBTkdFKSkpO1xcbmZzL2Z1c2UvZmlsZS5jLTI5NDgtXFxuZnMvZnVzZS9maWxlLmM6Mjk0OTpcXHRpZiAobW9kZSBcXHUwMDI2IH4oRkFMTE9DX0ZMX0tFRVBfU0laRSB8IEZBTExPQ19GTF9QVU5DSF9IT0xFIHxcXG5mcy9mdXNlL2ZpbGUuYzoyOTUwOlxcdFxcdCAgICAgRkFMTE9DX0ZMX1pFUk9fUkFOR0UpKVxcbmZzL2Z1c2UvZmlsZS5jLTI5NTEtXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxuZnMvZnVzZS9maWxlLmMtMjk2My1cXG5mcy9mdXNlL2ZpbGUuYzoyOTY0OlxcdGlmIChtb2RlIFxcdTAwMjYgKEZBTExPQ19GTF9QVU5DSF9IT0xFIHwgRkFMTE9DX0ZMX1pFUk9fUkFOR0UpKSB7XFxuZnMvZnVzZS9maWxlLmMtMjk2NS1cXHRcXHRsb2ZmX3QgZW5kYnl0ZSA9IG9mZnNldCArIGxlbmd0aCAtIDE7XFxuLS1cXG5mcy9mdXNlL2ZpbGUuYy0yOTcxLVxcbmZzL2Z1c2UvZmlsZS5jOjI5NzI6XFx0aWYgKCEobW9kZSBcXHUwMDI2IEZBTExPQ19GTF9LRUVQX1NJWkUpIFxcdTAwMjZcXHUwMDI2XFxuZnMvZnVzZS9maWxlLmMtMjk3My1cXHQgICAgb2Zmc2V0ICsgbGVuZ3RoIFxcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKSB7XFxuLS1cXG5mcy9mdXNlL2ZpbGUuYy0yOTgyLVxcbmZzL2Z1c2UvZmlsZS5jOjI5ODM6XFx0aWYgKCEobW9kZSBcXHUwMDI2IEZBTExPQ19GTF9LRUVQX1NJWkUpKVxcbmZzL2Z1c2UvZmlsZS5jLTI5ODQtXFx0XFx0c2V0X2JpdChGVVNFX0lfU0laRV9VTlNUQUJMRSwgXFx1MDAyNmZpLVxcdTAwM2VzdGF0ZSk7XFxuLS1cXG5mcy9mdXNlL2ZpbGUuYy0yOTk5LVxcdC8qIHdlIGNvdWxkIGhhdmUgZXh0ZW5kZWQgdGhlIGZpbGUgKi9cXG5mcy9mdXNlL2ZpbGUuYzozMDAwOlxcdGlmICghKG1vZGUgXFx1MDAyNiBGQUxMT0NfRkxfS0VFUF9TSVpFKSkge1xcbmZzL2Z1c2UvZmlsZS5jLTMwMDEtXFx0XFx0aWYgKGZ1c2Vfd3JpdGVfdXBkYXRlX2F0dHIoaW5vZGUsIG9mZnNldCArIGxlbmd0aCwgbGVuZ3RoKSlcXG4tLVxcbmZzL2Z1c2UvZmlsZS5jLTMwMDQtXFxuZnMvZnVzZS9maWxlLmM6MzAwNTpcXHRpZiAobW9kZSBcXHUwMDI2IChGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8IEZBTExPQ19GTF9aRVJPX1JBTkdFKSlcXG5mcy9mdXNlL2ZpbGUuYy0zMDA2LVxcdFxcdHRydW5jYXRlX3BhZ2VjYWNoZV9yYW5nZShpbm9kZSwgb2Zmc2V0LCBvZmZzZXQgKyBsZW5ndGggLSAxKTtcXG4tLVxcbmZzL2Z1c2UvZmlsZS5jLTMwMTAtb3V0OlxcbmZzL2Z1c2UvZmlsZS5jOjMwMTE6XFx0aWYgKCEobW9kZSBcXHUwMDI2IEZBTExPQ19GTF9LRUVQX1NJWkUpKVxcbmZzL2Z1c2UvZmlsZS5jLTMwMTItXFx0XFx0Y2xlYXJfYml0KEZVU0VfSV9TSVpFX1VOU1RBQkxFLCBcXHUwMDI2ZmktXFx1MDAzZXN0YXRlKTtcXG4tLVxcbmZzL2dmczIvZmlsZS5jPTEyNTI9c3RhdGljIGxvbmcgX19nZnMyX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4pXFxuLS1cXG5mcy9nZnMyL2ZpbGUuYy0xMzUwLVxcbmZzL2dmczIvZmlsZS5jOjEzNTE6XFx0aWYgKCEobW9kZSBcXHUwMDI2IEZBTExPQ19GTF9LRUVQX1NJWkUpIFxcdTAwMjZcXHUwMDI2IChwb3MgKyBjb3VudCkgXFx1MDAzZSBpbm9kZS1cXHUwMDNlaV9zaXplKVxcbmZzL2dmczIvZmlsZS5jLTEzNTItXFx0XFx0aV9zaXplX3dyaXRlKGlub2RlLCBwb3MgKyBjb3VudCk7XFxuLS1cXG5mcy9nZnMyL2ZpbGUuYz0xMzY4PXN0YXRpYyBsb25nIGdmczJfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbilcXG4tLVxcbmZzL2dmczIvZmlsZS5jLTEzNzUtXFxuZnMvZ2ZzMi9maWxlLmM6MTM3NjpcXHRpZiAobW9kZSBcXHUwMDI2IH4oRkFMTE9DX0ZMX1BVTkNIX0hPTEUgfCBGQUxMT0NfRkxfS0VFUF9TSVpFKSlcXG5mcy9nZnMyL2ZpbGUuYy0xMzc3LVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbmZzL2dmczIvZmlsZS5jLTEzODgtXFxuZnMvZ2ZzMi9maWxlLmM6MTM4OTpcXHRpZiAoIShtb2RlIFxcdTAwMjYgRkFMTE9DX0ZMX0tFRVBfU0laRSkgXFx1MDAyNlxcdTAwMjZcXG5mcy9nZnMyL2ZpbGUuYy0xMzkwLVxcdCAgICAob2Zmc2V0ICsgbGVuKSBcXHUwMDNlIGlub2RlLVxcdTAwM2VpX3NpemUpIHtcXG4tLVxcbmZzL2dmczIvZmlsZS5jLTEzOTktXFxuZnMvZ2ZzMi9maWxlLmM6MTQwMDpcXHRpZiAobW9kZSBcXHUwMDI2IEZBTExPQ19GTF9QVU5DSF9IT0xFKSB7XFxuZnMvZ2ZzMi9maWxlLmMtMTQwMS1cXHRcXHRyZXQgPSBfX2dmczJfcHVuY2hfaG9sZShmaWxlLCBvZmZzZXQsIGxlbik7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYz03MDA9c3RhdGljIGxvbmcgaHVnZXRsYmZzX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy03MTQtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NzE1OlxcdGlmIChtb2RlIFxcdTAwMjYgfihGQUxMT0NfRkxfS0VFUF9TSVpFIHwgRkFMTE9DX0ZMX1BVTkNIX0hPTEUpKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTcxNi1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNzE3LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjcxODpcXHRpZiAobW9kZSBcXHUwMDI2IEZBTExPQ19GTF9QVU5DSF9IT0xFKSB7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNzE5LVxcdFxcdGVycm9yID0gaHVnZXRsYmZzX3B1bmNoX2hvbGUoaW5vZGUsIG9mZnNldCwgbGVuKTtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTczMi1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzo3MzM6XFx0LyogV2UgbmVlZCB0byBjaGVjayBybGltaXQgZXZlbiB3aGVuIEZBTExPQ19GTF9LRUVQX1NJWkUgKi9cXG5mcy9odWdldGxiZnMvaW5vZGUuYy03MzQtXFx0ZXJyb3IgPSBpbm9kZV9uZXdzaXplX29rKGlub2RlLCBvZmZzZXQgKyBsZW4pO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODE5LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjgyMDpcXHRpZiAoIShtb2RlIFxcdTAwMjYgRkFMTE9DX0ZMX0tFRVBfU0laRSkgXFx1MDAyNlxcdTAwMjYgb2Zmc2V0ICsgbGVuIFxcdTAwM2UgaW5vZGUtXFx1MDAzZWlfc2l6ZSlcXG5mcy9odWdldGxiZnMvaW5vZGUuYy04MjEtXFx0XFx0aV9zaXplX3dyaXRlKGlub2RlLCBvZmZzZXQgKyBsZW4pO1xcbi0tXFxuZnMvaW9jdGwuYz0yNjg9c3RhdGljIGludCBpb2N0bF9wcmVhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgaW50IG1vZGUsIHZvaWQgX191c2VyICphcmdwKVxcbi0tXFxuZnMvaW9jdGwuYy0yODgtXFxuZnMvaW9jdGwuYzoyODk6XFx0cmV0dXJuIHZmc19mYWxsb2NhdGUoZmlscCwgbW9kZSB8IEZBTExPQ19GTF9LRUVQX1NJWkUsIHNyLmxfc3RhcnQsXFxuZnMvaW9jdGwuYy0yOTAtXFx0XFx0XFx0c3IubF9sZW4pO1xcbi0tXFxuZnMvaW9jdGwuYz0yOTY9c3RhdGljIGludCBjb21wYXRfaW9jdGxfcHJlYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLFxcbi0tXFxuZnMvaW9jdGwuYy0zMTctXFxuZnMvaW9jdGwuYzozMTg6XFx0cmV0dXJuIHZmc19mYWxsb2NhdGUoZmlsZSwgbW9kZSB8IEZBTExPQ19GTF9LRUVQX1NJWkUsIHNyLmxfc3RhcnQsIHNyLmxfbGVuKTtcXG5mcy9pb2N0bC5jLTMxOS19XFxuLS1cXG5mcy9pb2N0bC5jPTMyMj1zdGF0aWMgaW50IGZpbGVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIGludCBfX3VzZXIgKnApXFxuLS1cXG5mcy9pb2N0bC5jLTMzMS1cXHRjYXNlIEZTX0lPQ19VTlJFU1ZTUDY0OlxcbmZzL2lvY3RsLmM6MzMyOlxcdFxcdHJldHVybiBpb2N0bF9wcmVhbGxvY2F0ZShmaWxwLCBGQUxMT0NfRkxfUFVOQ0hfSE9MRSwgcCk7XFxuZnMvaW9jdGwuYy0zMzMtXFx0Y2FzZSBGU19JT0NfWkVST19SQU5HRTpcXG5mcy9pb2N0bC5jOjMzNDpcXHRcXHRyZXR1cm4gaW9jdGxfcHJlYWxsb2NhdGUoZmlscCwgRkFMTE9DX0ZMX1pFUk9fUkFOR0UsIHApO1xcbmZzL2lvY3RsLmMtMzM1LVxcdH1cXG4tLVxcbmZzL2lvY3RsLmM9NjM4PUNPTVBBVF9TWVNDQUxMX0RFRklORTMoaW9jdGwsIHVuc2lnbmVkIGludCwgZmQsIHVuc2lnbmVkIGludCwgY21kLFxcbi0tXFxuZnMvaW9jdGwuYy02NjQtXFx0Y2FzZSBGU19JT0NfVU5SRVNWU1A2NF8zMjpcXG5mcy9pb2N0bC5jOjY2NTpcXHRcXHRlcnJvciA9IGNvbXBhdF9pb2N0bF9wcmVhbGxvY2F0ZShmZF9maWxlKGYpLCBGQUxMT0NfRkxfUFVOQ0hfSE9MRSxcXG5mcy9pb2N0bC5jLTY2Ni1cXHRcXHRcXHRcXHRjb21wYXRfcHRyKGFyZykpO1xcbi0tXFxuZnMvaW9jdGwuYy02NjgtXFx0Y2FzZSBGU19JT0NfWkVST19SQU5HRV8zMjpcXG5mcy9pb2N0bC5jOjY2OTpcXHRcXHRlcnJvciA9IGNvbXBhdF9pb2N0bF9wcmVhbGxvY2F0ZShmZF9maWxlKGYpLCBGQUxMT0NfRkxfWkVST19SQU5HRSxcXG5mcy9pb2N0bC5jLTY3MC1cXHRcXHRcXHRcXHRjb21wYXRfcHRyKGFyZykpO1xcbi0tXFxuZnMvbmZzL25mczRmaWxlLmM9MjE5PXN0YXRpYyBsb25nIG5mczQyX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZXAsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKVxcbi0tXFxuZnMvbmZzL25mczRmaWxlLmMtMjI4LVxcdGNhc2UgMDpcXG5mcy9uZnMvbmZzNGZpbGUuYzoyMjk6XFx0Y2FzZSBGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8IEZBTExPQ19GTF9LRUVQX1NJWkU6XFxuZnMvbmZzL25mczRmaWxlLmM6MjMwOlxcdGNhc2UgRkFMTE9DX0ZMX1pFUk9fUkFOR0U6XFxuZnMvbmZzL25mczRmaWxlLmMtMjMxLVxcdFxcdGJyZWFrO1xcbi0tXFxuZnMvbmZzL25mczRmaWxlLmMtMjM5LVxcbmZzL25mcy9uZnM0ZmlsZS5jOjI0MDpcXHRpZiAobW9kZSBcXHUwMDI2IEZBTExPQ19GTF9QVU5DSF9IT0xFKVxcbmZzL25mcy9uZnM0ZmlsZS5jLTI0MS1cXHRcXHRyZXR1cm4gbmZzNDJfcHJvY19kZWFsbG9jYXRlKGZpbGVwLCBvZmZzZXQsIGxlbik7XFxuZnMvbmZzL25mczRmaWxlLmM6MjQyOlxcdGVsc2UgaWYgKG1vZGUgXFx1MDAyNiBGQUxMT0NfRkxfWkVST19SQU5HRSlcXG5mcy9uZnMvbmZzNGZpbGUuYy0yNDMtXFx0XFx0cmV0dXJuIG5mczQyX3Byb2NfemVyb19yYW5nZShmaWxlcCwgb2Zmc2V0ICxsZW4pO1xcbi0tXFxuZnMvbmZzZC9uZnM0cHJvYy5jPTIzODQ9bmZzZDRfZGVhbGxvY2F0ZShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3QgbmZzZDRfY29tcG91bmRfc3RhdGUgKmNzdGF0ZSxcXG4tLVxcbmZzL25mc2QvbmZzNHByb2MuYy0yMzg3LVxcdHJldHVybiBuZnNkNF9mYWxsb2NhdGUocnFzdHAsIGNzdGF0ZSwgXFx1MDAyNnUtXFx1MDAzZWRlYWxsb2NhdGUsXFxuZnMvbmZzZC9uZnM0cHJvYy5jOjIzODg6XFx0XFx0XFx0ICAgICAgIEZBTExPQ19GTF9QVU5DSF9IT0xFIHwgRkFMTE9DX0ZMX0tFRVBfU0laRSk7XFxuZnMvbmZzZC9uZnM0cHJvYy5jLTIzODktfVxcbi0tXFxuZnMvbnRmcy9maWxlLmM9ODA0PXN0YXRpYyBpbnQgbnRmc19hbGxvY2F0ZV9yYW5nZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LFxcbi0tXFxuZnMvbnRmcy9maWxlLmMtODM1LVxcdGVyciA9IG50ZnNfYXR0cl9mYWxsb2NhdGUobmksIG9mZnNldCwgbGVuLFxcbmZzL250ZnMvZmlsZS5jOjgzNjpcXHRcXHRcXHRtb2RlIFxcdTAwMjYgRkFMTE9DX0ZMX0tFRVBfU0laRSA/IHRydWUgOiBmYWxzZSk7XFxuZnMvbnRmcy9maWxlLmMtODM3LVxcbmZzL250ZnMvZmlsZS5jOjgzODpcXHRpZiAoIShtb2RlIFxcdTAwMjYgRkFMTE9DX0ZMX0tFRVBfU0laRSkgXFx1MDAyNlxcdTAwMjYgbmV3X3NpemUgIT0gb2xkX3NpemUpXFxuZnMvbnRmcy9maWxlLmMtODM5LVxcdFxcdGlfc2l6ZV93cml0ZSh2aSwgbmktXFx1MDAzZWRhdGFfc2l6ZSk7XFxuLS1cXG5mcy9udGZzL2ZpbGUuYz05NjU9c3RhdGljIGludCBudGZzX2luc2VydF9yYW5nZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4pXFxuLS1cXG5mcy9udGZzL2ZpbGUuYy0xMDIwLVxcbmZzL250ZnMvZmlsZS5jOjEwMjE6I2RlZmluZSBOVEZTX0ZBTExPQ19GTF9TVVBQT1JURURcXHRcXHRcXHRcXHRcXHRcXFxcXFxuZnMvbnRmcy9maWxlLmM6MTAyMjpcXHRcXHQoRkFMTE9DX0ZMX0FMTE9DQVRFX1JBTkdFIHwgRkFMTE9DX0ZMX0tFRVBfU0laRSB8XFx0XFxcXFxcbmZzL250ZnMvZmlsZS5jOjEwMjM6XFx0XFx0IEZBTExPQ19GTF9JTlNFUlRfUkFOR0UgfCBGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8XFx0XFxcXFxcbmZzL250ZnMvZmlsZS5jOjEwMjQ6XFx0XFx0IEZBTExPQ19GTF9DT0xMQVBTRV9SQU5HRSlcXG5mcy9udGZzL2ZpbGUuYy0xMDI1LVxcbmZzL250ZnMvZmlsZS5jPTEwMjY9c3RhdGljIGxvbmcgbnRmc19mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKVxcbi0tXFxuZnMvbnRmcy9maWxlLmMtMTAzNC1cXG5mcy9udGZzL2ZpbGUuYzoxMDM1OlxcdGlmIChtb2RlIFxcdTAwMjYgfihOVEZTX0ZBTExPQ19GTF9TVVBQT1JURUQpKVxcbmZzL250ZnMvZmlsZS5jLTEwMzYtXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxuZnMvbnRmcy9maWxlLmMtMTA2Ni1cXHRpbm9kZV9kaW9fd2FpdCh2aSk7XFxuZnMvbnRmcy9maWxlLmM6MTA2NzpcXHRpZiAobW9kZSBcXHUwMDI2IChGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8IEZBTExPQ19GTF9DT0xMQVBTRV9SQU5HRSB8XFxuZnMvbnRmcy9maWxlLmM6MTA2ODpcXHRcXHQgICAgRkFMTE9DX0ZMX0lOU0VSVF9SQU5HRSkpIHtcXG5mcy9udGZzL2ZpbGUuYy0xMDY5LVxcdFxcdGZpbGVtYXBfaW52YWxpZGF0ZV9sb2NrKHZpLVxcdTAwM2VpX21hcHBpbmcpO1xcbi0tXFxuZnMvbnRmcy9maWxlLmMtMTA3Mi1cXG5mcy9udGZzL2ZpbGUuYzoxMDczOlxcdHN3aXRjaCAobW9kZSBcXHUwMDI2IEZBTExPQ19GTF9NT0RFX01BU0spIHtcXG5mcy9udGZzL2ZpbGUuYzoxMDc0OlxcdGNhc2UgRkFMTE9DX0ZMX0FMTE9DQVRFX1JBTkdFOlxcbmZzL250ZnMvZmlsZS5jOjEwNzU6XFx0Y2FzZSBGQUxMT0NfRkxfS0VFUF9TSVpFOlxcbmZzL250ZnMvZmlsZS5jLTEwNzYtXFx0XFx0ZXJyID0gbnRmc19hbGxvY2F0ZV9yYW5nZShuaSwgbW9kZSwgb2Zmc2V0LCBsZW4pO1xcbmZzL250ZnMvZmlsZS5jLTEwNzctXFx0XFx0YnJlYWs7XFxuZnMvbnRmcy9maWxlLmM6MTA3ODpcXHRjYXNlIEZBTExPQ19GTF9QVU5DSF9IT0xFOlxcbmZzL250ZnMvZmlsZS5jLTEwNzktXFx0XFx0ZXJyID0gbnRmc19wdW5jaF9ob2xlKG5pLCBtb2RlLCBvZmZzZXQsIGxlbik7XFxuZnMvbnRmcy9maWxlLmMtMTA4MC1cXHRcXHRicmVhaztcXG5mcy9udGZzL2ZpbGUuYzoxMDgxOlxcdGNhc2UgRkFMTE9DX0ZMX0NPTExBUFNFX1JBTkdFOlxcbmZzL250ZnMvZmlsZS5jLTEwODItXFx0XFx0ZXJyID0gbnRmc19jb2xsYXBzZV9yYW5nZShuaSwgb2Zmc2V0LCBsZW4pO1xcbmZzL250ZnMvZmlsZS5jLTEwODMtXFx0XFx0YnJlYWs7XFxuZnMvbnRmcy9maWxlLmM6MTA4NDpcXHRjYXNlIEZBTExPQ19GTF9JTlNFUlRfUkFOR0U6XFxuZnMvbnRmcy9maWxlLmMtMTA4NS1cXHRcXHRlcnIgPSBudGZzX2luc2VydF9yYW5nZShuaSwgb2Zmc2V0LCBsZW4pO1xcbi0tXFxuZnMvbnRmczMvZmlsZS5jPTQwMT1zdGF0aWMgaW50IG50ZnNfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG5ld19zaXplKVxcbi0tXFxuZnMvbnRmczMvZmlsZS5jLTQ0MS0gKiBvcGVyYXRpb24sIHdoaWNoIGdldHMgY2FsbGVkIGZyb20gc3lzX2ZhbGxvY2F0ZSBzeXN0ZW0gY2FsbC4gVXNlclxcbmZzL250ZnMzL2ZpbGUuYzo0NDI6ICogc3BhY2UgcmVxdWVzdHMgJ2xlbicgYnl0ZXMgYXQgJ3ZibycuIElmIEZBTExPQ19GTF9LRUVQX1NJWkUgaXMgc2V0XFxuZnMvbnRmczMvZmlsZS5jLTQ0My0gKiB3ZSBqdXN0IGFsbG9jYXRlIGNsdXN0ZXJzIHdpdGhvdXQgemVyb2luZyB0aGVtIG91dC4gT3RoZXJ3aXNlIHdlXFxuLS1cXG5mcy9udGZzMy9maWxlLmM9NDQ2PXN0YXRpYyBsb25nIG50ZnNfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IHZibywgbG9mZl90IGxlbilcXG4tLVxcbmZzL250ZnMzL2ZpbGUuYy00NjgtXFx0ICovXFxuZnMvbnRmczMvZmlsZS5jOjQ2OTpcXHRpZiAobW9kZSBcXHUwMDI2IEZBTExPQ19GTF9QVU5DSF9IT0xFKSB7XFxuZnMvbnRmczMvZmlsZS5jLTQ3MC1cXHRcXHRpZiAoIWlzX3N1cHBvcnRlZF9ob2xlcylcXG5mcy9udGZzMy9maWxlLmMtNDcxLVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5mcy9udGZzMy9maWxlLmM6NDcyOlxcdH0gZWxzZSBpZiAobW9kZSBcXHUwMDI2IEZBTExPQ19GTF9DT0xMQVBTRV9SQU5HRSkge1xcbmZzL250ZnMzL2ZpbGUuYzo0NzM6XFx0fSBlbHNlIGlmIChtb2RlIFxcdTAwMjYgRkFMTE9DX0ZMX0lOU0VSVF9SQU5HRSkge1xcbmZzL250ZnMzL2ZpbGUuYy00NzQtXFx0XFx0aWYgKCFpc19zdXBwb3J0ZWRfaG9sZXMpXFxuLS1cXG5mcy9udGZzMy9maWxlLmMtNDc2LVxcdH0gZWxzZSBpZiAobW9kZSBcXHUwMDI2XFxuZnMvbnRmczMvZmlsZS5jOjQ3NzpcXHRcXHQgICB+KEZBTExPQ19GTF9LRUVQX1NJWkUgfCBGQUxMT0NfRkxfUFVOQ0hfSE9MRSB8XFxuZnMvbnRmczMvZmlsZS5jOjQ3ODpcXHRcXHQgICAgIEZBTExPQ19GTF9DT0xMQVBTRV9SQU5HRSB8IEZBTExPQ19GTF9JTlNFUlRfUkFOR0UpKSB7XFxuZnMvbnRmczMvZmlsZS5jLTQ3OS1cXHRcXHRudGZzX2lub2RlX3dhcm4oaW5vZGUsIFxcXCJmYWxsb2NhdGUoMHgleCkgaXMgbm90IHN1cHBvcnRlZFxcXCIsXFxuLS1cXG5mcy9udGZzMy9maWxlLmMtNDk2LVxcbmZzL250ZnMzL2ZpbGUuYzo0OTc6XFx0aWYgKG1vZGUgXFx1MDAyNiAoRkFMTE9DX0ZMX1BVTkNIX0hPTEUgfCBGQUxMT0NfRkxfQ09MTEFQU0VfUkFOR0UgfFxcbmZzL250ZnMzL2ZpbGUuYzo0OTg6XFx0XFx0ICAgIEZBTExPQ19GTF9JTlNFUlRfUkFOR0UpKSB7XFxuZnMvbnRmczMvZmlsZS5jLTQ5OS1cXHRcXHRpbm9kZV9kaW9fd2FpdChpbm9kZSk7XFxuLS1cXG5mcy9udGZzMy9maWxlLmMtNTAzLVxcbmZzL250ZnMzL2ZpbGUuYzo1MDQ6XFx0aWYgKG1vZGUgXFx1MDAyNiBGQUxMT0NfRkxfUFVOQ0hfSE9MRSkge1xcbmZzL250ZnMzL2ZpbGUuYy01MDUtXFx0XFx0dTMyIGZyYW1lX3NpemU7XFxuLS1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDk6MTE6NDEuODA0MjE1NjI2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQyMzI4MDc1MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSBwdXQgb24gbXkgdGhpbmtpbmcgY2FwLiBIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IG1lbnRhbCBwcm9jZXNzOlxuXG4qKkRpdmluZyBEZWVwIGludG8gYGZhbGxvY2F0ZWAgRmxhZ3MqKlxuXG5Ib2xkIG9uIGEgc2Vjb25kLi4uIGlzIGBGQUxMT0NfRkxfV1JJVEVfWkVST0VTYCBhY3R1YWxseSBhIHN0YW5kYXJkIGBmYWxsb2NhdGVgIGZsYWc/IEkgY291bGQgaGF2ZSBzd29ybiBpdCB3YXMsIGJ1dCBzb21ldGhpbmcgZmVlbHMgb2ZmLiBMZXQgbWUgZG91YmxlLWNoZWNrLiBPa2F5LCBsZXQncyBzZWUuLi4gaWYgaXQncyBub3QgYSBzdGFuZGFyZCwgaXQncyBwcm9iYWJseSBkZWZpbmVkIGludGVybmFsbHkuIEFoYSEgSSByZW1lbWJlciBzZWVpbmcgaXQgbWVudGlvbmVkIGluIGBibG9jay9mb3BzLmNgLiBCdXQgd2FpdC4uLnRoYXQncyBub3QgcmlnaHQgZWl0aGVyLiBJdCAqc2hvdWxkKiBiZSBpbiB0aGUgcHVibGljIEFQSSBoZWFkZXJzLiBJIG5lZWQgdG8gYmUgc3VyZS4gTGV0J3MgbG9vayBpbnNpZGUgYGluY2x1ZGUvdWFwaS9saW51eC9mYWxsb2MuaGAuIExldCdzIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc1NTUsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwOToxMjoyNi4wMzcwMjUzOTNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxMzY3OTc5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJGQUxMT0NfRkxfV1JJVEVfWkVST0VTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2ZvcHMuYz04MTE9c3RhdGljIHNzaXplX3QgYmxrZGV2X3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuLS1cXG5ibG9jay9mb3BzLmMtODY1LVxcdFxcdChGQUxMT0NfRkxfS0VFUF9TSVpFIHwgRkFMTE9DX0ZMX1BVTkNIX0hPTEUgfFxcdFxcdFxcXFxcXG5ibG9jay9mb3BzLmM6ODY2OlxcdFxcdCBGQUxMT0NfRkxfWkVST19SQU5HRSB8IEZBTExPQ19GTF9XUklURV9aRVJPRVMpXFxuYmxvY2svZm9wcy5jLTg2Ny1cXG5ibG9jay9mb3BzLmM9ODY4PXN0YXRpYyBsb25nIGJsa2Rldl9mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgc3RhcnQsXFxuLS1cXG5ibG9jay9mb3BzLmMtODg0LVxcdCAqL1xcbmJsb2NrL2ZvcHMuYzo4ODU6XFx0aWYgKChtb2RlIFxcdTAwMjYgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FUykgXFx1MDAyNlxcdTAwMjZcXG5ibG9jay9mb3BzLmMtODg2LVxcdCAgICAhYmRldl93cml0ZV96ZXJvZXNfdW5tYXBfc2VjdG9ycyhiZGV2KSlcXG4tLVxcbmJsb2NrL2ZvcHMuYy05MTctXFx0XFx0YnJlYWs7XFxuYmxvY2svZm9wcy5jOjkxODpcXHRjYXNlIEZBTExPQ19GTF9XUklURV9aRVJPRVM6XFxuYmxvY2svZm9wcy5jLTkxOS1cXHRcXHRmbGFncyA9IDA7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz00NzM0PXN0YXRpYyBsb25nIGV4dDRfemVyb19yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ3OTItXFx0ICovXFxuZnMvZXh0NC9leHRlbnRzLmM6NDc5MzpcXHRpZiAobW9kZSBcXHUwMDI2IEZBTExPQ19GTF9XUklURV9aRVJPRVMpIHtcXG5mcy9leHQ0L2V4dGVudHMuYy00Nzk0LVxcdFxcdGlmICghSVNfQUxJR05FRChvZmZzZXQsIGJsb2Nrc2l6ZSkgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ4MDItXFx0aWYgKGFsaWduX2VuZCBcXHUwMDNlIGFsaWduX3N0YXJ0KSB7XFxuZnMvZXh0NC9leHRlbnRzLmM6NDgwMzpcXHRcXHRpZiAobW9kZSBcXHUwMDI2IEZBTExPQ19GTF9XUklURV9aRVJPRVMpXFxuZnMvZXh0NC9leHRlbnRzLmMtNDgwNC1cXHRcXHRcXHRmbGFncyA9IEVYVDRfR0VUX0JMT0NLU19DUkVBVEVfWkVSTyB8IEVYVDRfRVhfTk9DQUNIRTtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ4MTgtXFx0LypcXG5mcy9leHQ0L2V4dGVudHMuYzo0ODE5OlxcdCAqIEluIEZBTExPQ19GTF9XUklURV9aRVJPRVMgbW9kZSwgZWRnZXMgdGhhdCBoYXZlIGJlZW4gcGFydGlhbGx5XFxuZnMvZXh0NC9leHRlbnRzLmMtNDgyMC1cXHQgKiB6ZXJvZWQgbXVzdCBiZSB3cml0dGVuIGJhY2sgdG8gZW5zdXJlIHRoZSBlbnRpcmUgemVyb2VkIHJhbmdlXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy00ODI0LVxcdGlmIChwYXJ0aWFsX3plcm9lZCBcXHUwMDI2XFx1MDAyNlxcbmZzL2V4dDQvZXh0ZW50cy5jOjQ4MjU6XFx0ICAgICgobW9kZSBcXHUwMDI2IEZBTExPQ19GTF9XUklURV9aRVJPRVMpIHx8XFxuZnMvZXh0NC9leHRlbnRzLmMtNDgyNi1cXHQgICAgIChmaWxlLVxcdTAwM2VmX2ZsYWdzIFxcdTAwMjYgT19TWU5DKSB8fCBJU19TWU5DKGlub2RlKSkpIHtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTQ5MDM9bG9uZyBleHQ0X2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4pXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy00OTIxLVxcdCAqL1xcbmZzL2V4dDQvZXh0ZW50cy5jOjQ5MjI6XFx0aWYgKChtb2RlIFxcdTAwMjYgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FUykgXFx1MDAyNlxcdTAwMjZcXG5mcy9leHQ0L2V4dGVudHMuYy00OTIzLVxcdCAgICAhYmRldl93cml0ZV96ZXJvZXNfdW5tYXBfc2VjdG9ycyhpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19iZGV2KSlcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ5MjgtXFx0XFx0ICAgICBGQUxMT0NfRkxfWkVST19SQU5HRSB8IEZBTExPQ19GTF9DT0xMQVBTRV9SQU5HRSB8XFxuZnMvZXh0NC9leHRlbnRzLmM6NDkyOTpcXHRcXHQgICAgIEZBTExPQ19GTF9JTlNFUlRfUkFOR0UgfCBGQUxMT0NfRkxfV1JJVEVfWkVST0VTKSlcXG5mcy9leHQ0L2V4dGVudHMuYy00OTMwLVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ5NzAtXFx0Y2FzZSBGQUxMT0NfRkxfWkVST19SQU5HRTpcXG5mcy9leHQ0L2V4dGVudHMuYzo0OTcxOlxcdGNhc2UgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FUzpcXG5mcy9leHQ0L2V4dGVudHMuYy00OTcyLVxcdFxcdHJldCA9IGV4dDRfemVyb19yYW5nZShmaWxlLCBvZmZzZXQsIGxlbiwgbW9kZSk7XFxuLS1cXG5mcy9vcGVuLmM9MjUwPWludCB2ZnNfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbilcXG4tLVxcbmZzL29wZW4uYy0yNzktXFx0Y2FzZSBGQUxMT0NfRkxfSU5TRVJUX1JBTkdFOlxcbmZzL29wZW4uYzoyODA6XFx0Y2FzZSBGQUxMT0NfRkxfV1JJVEVfWkVST0VTOlxcbmZzL29wZW4uYy0yODEtXFx0XFx0aWYgKG1vZGUgXFx1MDAyNiBGQUxMT0NfRkxfS0VFUF9TSVpFKVxcbi0tXFxuaW5jbHVkZS9saW51eC9mYWxsb2MuaD0xMj1zdHJ1Y3Qgc3BhY2VfcmVzdiB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZhbGxvYy5oLTM5LVxcdFxcdFxcdFxcdCBGQUxMT0NfRkxfVU5TSEFSRV9SQU5HRSB8XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZmFsbG9jLmg6NDA6XFx0XFx0XFx0XFx0IEZBTExPQ19GTF9XUklURV9aRVJPRVMpXFxuaW5jbHVkZS9saW51eC9mYWxsb2MuaC00MS1cXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2V4dDQuaD03OT1UUkFDRV9ERUZJTkVfRU5VTShFU19SRUZFUkVOQ0VEX0IpO1xcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvZXh0NC5oLTkyLVxcdHsgRkFMTE9DX0ZMX1pFUk9fUkFOR0UsXFx0XFx0XFxcIlpFUk9fUkFOR0VcXFwifSxcXHRcXHRcXFxcXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvZXh0NC5oOjkzOlxcdHsgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FUyxcXHRcXFwiV1JJVEVfWkVST0VTXFxcIn0pXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvZXh0NC5oLTk0LVxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2ZhbGxvYy5oLTgxLS8qXFxuaW5jbHVkZS91YXBpL2xpbnV4L2ZhbGxvYy5oOjgyOiAqIEZBTExPQ19GTF9XUklURV9aRVJPRVMgemVyb2VzIGEgc3BlY2lmaWVkIGZpbGUgcmFuZ2UgaW4gc3VjaCBhIHdheSB0aGF0XFxuaW5jbHVkZS91YXBpL2xpbnV4L2ZhbGxvYy5oLTgzLSAqIHN1YnNlcXVlbnQgd3JpdGVzIHRvIHRoYXQgcmFuZ2UgZG8gbm90IHJlcXVpcmUgZnVydGhlciBjaGFuZ2VzIHRvIHRoZSBmaWxlXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvZmFsbG9jLmgtOTUtICovXFxuaW5jbHVkZS91YXBpL2xpbnV4L2ZhbGxvYy5oOjk2OiNkZWZpbmUgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FU1xcdFxcdDB4ODBcXG5pbmNsdWRlL3VhcGkvbGludXgvZmFsbG9jLmgtOTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA5OjEyOjMwLjY1MDcxMDU2MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNTgzODQyMDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYEZBTExPQ19GTF9XUklURV9aRVJPRVNgIEltcGxlbWVudGF0aW9uIGluIGV4dDQqKlxuXG5Pa2F5LCBzbyB0aGVyZSdzIGEgbmV3IGZsYWcsIGBGQUxMT0NfRkxfV1JJVEVfWkVST0VTYCAoMHg4MCksIGluIGBmYWxsb2MuaGAuIEludGVyZXN0aW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBhZGRpdGlvbiwgbm90IGp1c3QgYSByZWZhY3RvcmluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgaW1wbGVtZW50ZWQgd2l0aGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIFRoZSBwYXRjaCBtb2RpZmllcyBgZXh0NF96ZXJvX3JhbmdlYCBhbmQgYGV4dDRfYWxsb2NfZmlsZV9ibG9ja3NgIHRvIHN1cHBvcnQgdGhpcywgc28gdGhleSdyZSBkZWZpbml0ZWx5IGtleS4gSSBzaG91bGQgYWxzbyBjaGVjayBgZXh0NF96ZXJvX3BhcnRpYWxfYmxvY2tzYCBiZWNhdXNlIHRoZSBkZXNjcmlwdGlvbiBtZW50aW9ucyBpdC4gTGV0J3Mgc2VlLi4uIGFoLCBgZXh0NF96ZXJvX3BhcnRpYWxfYmxvY2tzYCBpcyBub3cgcmV0dXJuaW5nIGEgYml0bWFzayBvZiBwYXJ0aWFsIHplcm9lZCBlZGdlcy4gR290IGl0LiBBbmQgYGV4dDRfYWxsb2NfZmlsZV9ibG9ja3NgIGlzIGhhbmRsaW5nIGBhbGxvY196ZXJvYCB3aXRoIHVud3JpdHRlbiBleHRlbnRzLCBwb3RlbnRpYWxseSBhZGRpbmcgdGhlIGlub2RlIHRvIHRoZSBvcnBoYW4gbGlzdC5cblxuVGltZSB0byBwaW5wb2ludCB0aGUgY2VudHJhbCBmdW5jdGlvbnMuIENsZWFybHksIGBleHQ0X3plcm9fcmFuZ2VgLCBgZXh0NF9hbGxvY19maWxlX2Jsb2Nrc2AsIGFuZCBgZXh0NF96ZXJvX3BhcnRpYWxfYmxvY2tzYCBhcmUgY3JpdGljYWwuIEkgYWxzbyBuZWVkIHRvIGxvb2sgYXQgYGV4dDRfbG9hZF90YWlsX2JoYCBzaW5jZSBpdCdzIG1vZGlmaWVkIGFuZCBzZWVtcyByZWxhdGVkIHRvIHRoZSBpbm9kZS4gQW5kLCBqdXN0IGZvciBjb250ZXh0LCBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSBpZiBgZXh0NF9ibG9ja196ZXJvX2VvZmAgbWlnaHQgYmUgcmVsZXZhbnQsIGV2ZW4gaWYgaXQncyBub3QgY2hhbmdlZCBkaXJlY3RseS5cblxuV2FpdCwgYSBzZWNvbmQgbG9va+KApiBgZXh0NF9hbGxvY19maWxlX2Jsb2Nrc2AgYW5kIGBleHQ0X3plcm9fcmFuZ2VgIGFyZSBzdGF0aWMsIHdoaWxlIGBleHQ0X3plcm9fcGFydGlhbF9ibG9ja3NgIGlzIGV4cG9ydGVkLiBUaGF0J3MgZ29vZCB0byBrbm93LiBBbmQgYGV4dDRfbG9hZF90YWlsX2JoYCBpcyBhbHNvIHN0YXRpYy4gT2theS4gU28sIHRoZSBxdWVzdGlvbiBpcywgd2hhdCdzIHRoZSBlbnRyeSBwb2ludD9cblxuUmlnaHQsIGl0IG1ha2VzIHNlbnNlOiBgZXh0NF9mYWxsb2NhdGVgIGNhbGxzIGBleHQ0X3plcm9fcmFuZ2VgLiBTbywgYGV4dDRfZmFsbG9jYXRlYCBpcyB0aGUgcHVibGljIGZhY2luZyBpbnRlcmZhY2UuIE5vdywgSSBzaG91bGQgZm9jdXMgbXkgc2VhcmNoIHdpdGhpbiBgZnMvZXh0NC9leHRlbnRzLmNgIGZvciBgZXh0NF96ZXJvX3JhbmdlYCBhbmQgdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTMzOCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwOToxMjo0MS4yMzQ1NTQ2MjRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzEzMTE4NjQzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X3plcm9fcmFuZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9leHRlbnRzLmM9NDczMj1zdGF0aWMgaW50IGV4dDRfaW5zZXJ0X3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKTtcXG5mcy9leHQ0L2V4dGVudHMuYy00NzMzLVxcbmZzL2V4dDQvZXh0ZW50cy5jOjQ3MzQ6c3RhdGljIGxvbmcgZXh0NF96ZXJvX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LFxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ3MzUtXFx0XFx0XFx0ICAgIGxvZmZfdCBsZW4sIGludCBtb2RlKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNDc0NC1cXG5mcy9leHQ0L2V4dGVudHMuYzo0NzQ1OlxcdHRyYWNlX2V4dDRfemVyb19yYW5nZShpbm9kZSwgb2Zmc2V0LCBsZW4sIG1vZGUpO1xcbmZzL2V4dDQvZXh0ZW50cy5jLTQ3NDYtXFx0V0FSTl9PTl9PTkNFKCFpbm9kZV9pc19sb2NrZWQoaW5vZGUpKTtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTQ5MDM9bG9uZyBleHQ0X2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4pXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy00OTcxLVxcdGNhc2UgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FUzpcXG5mcy9leHQ0L2V4dGVudHMuYzo0OTcyOlxcdFxcdHJldCA9IGV4dDRfemVyb19yYW5nZShmaWxlLCBvZmZzZXQsIGxlbiwgbW9kZSk7XFxuZnMvZXh0NC9leHRlbnRzLmMtNDk3My1cXHRcXHRicmVhaztcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz00MDA0PXZvaWQgZXh0NF9zZXRfYW9wcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTQwMjUtICogSGVyZSB3ZSBjYW4ndCBza2lwIGFuIHVud3JpdHRlbiBidWZmZXIgZXZlbiB0aG91Z2ggaXQgdXN1YWxseSByZWFkcyB6ZXJvXFxuZnMvZXh0NC9pbm9kZS5jOjQwMjY6ICogYmVjYXVzZSBpdCBtaWdodCBoYXZlIGRhdGEgaW4gcGFnZWNhY2hlIChlZywgaWYgY2FsbGVkIGZyb20gZXh0NF96ZXJvX3JhbmdlLFxcbmZzL2V4dDQvaW5vZGUuYy00MDI3LSAqIGV4dDRfcHVuY2hfaG9sZSwgZXRjKSB3aGljaCBuZWVkcyB0byBiZSBwcm9wZXJseSB6ZXJvZWQgb3V0LiBPdGhlcndpc2UgYVxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvZXh0NC5oPTE0NDQ9REVGSU5FX0VWRU5UKGV4dDRfX2ZhbGxvY2F0ZV9tb2RlLCBleHQ0X3B1bmNoX2hvbGUsXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0LmgtMTQ1MC1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0Lmg6MTQ1MTpERUZJTkVfRVZFTlQoZXh0NF9fZmFsbG9jYXRlX21vZGUsIGV4dDRfemVyb19yYW5nZSxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0LmgtMTQ1Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDk6MTI6NDQuMzY1NzU3NDZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTMyNTA3OTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEV4dDQgRnV6emluZyBUYXJnZXRzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byBiZXN0IGFwcHJvYWNoIGZ1enppbmcgdGhlIGV4dDQgZmlsZXN5c3RlbS4gTXkgcHJpbWFyeSB0YXJnZXRzIHNob3VsZCBiZSBjZW50ZXJlZCBhcm91bmQgYmxvY2sgemVyb2luZy4gSSdtIGZvY3VzaW5nIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgdGhpcywgc3BlY2lmaWNhbGx5OiBgZXh0NF96ZXJvX3BhcnRpYWxfYmxvY2tzYCwgYW5kIGBleHQ0X3plcm9fcmFuZ2VgLiBXYWl0IGEgbWludXRlLCBgZXh0NF96ZXJvX3JhbmdlYCBpcyBkZWNsYXJlZCBgc3RhdGljYC4gRG9lcyBzeXprYWxsZXIgaGFuZGxlIHRob3NlPyBZZXMsIGl0IGNhbiwgaWYgdGhlIHN0YXRpYyBmdW5jdGlvbiBpcyBleHBvcnRlZCB0byB0aGUgc3ltYm9sIHRhYmxlLiBIb3dldmVyLCBpdCBpcyB1c3VhbGx5IGJldHRlciB0byBwcm92aWRlIHRoZSBnbG9iYWwgZW50cnkgcG9pbnQuIFRoZXJlZm9yZSBJIHdpbGwgYWxzbyBpbmNsdWRlIGBleHQ0X2ZhbGxvY2F0ZWAgYXMgdGhlIG1haW4gZW50cnkgcG9pbnQgdG8gemVyb2luZy4gSSBzaG91bGQgYWxzbyBpbmNsdWRlIGBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzYCwgYXMgaXQgaXMgcmVsYXRlZCB0byBibG9jayBhbGxvY2F0aW9uLiBTbywgdG8gc3VtbWFyaXNlLCBteSBrZXkgdGFyZ2V0cyB3aWxsIGJlIGBleHQ0X2ZhbGxvY2F0ZWAsIGBleHQ0X3plcm9fcmFuZ2VgLCBgZXh0NF9hbGxvY19maWxlX2Jsb2Nrc2AgYW5kIGBleHQ0X3plcm9fcGFydGlhbF9ibG9ja3NgLlxuXG5OZXh0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9ucyBlbmFibGVkLiBPYnZpb3VzbHksIGBFWFQ0X0ZTYCBpcyByZXF1aXJlZC4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBgZnMvZXh0NC9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gdGFrZSBpbnRvIGFjY291bnQuIEdvdHRhIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3JpdGljYWwgZm9yIHRoZXNlIGZ1bmN0aW9ucyB0byBiZSBlbmFibGVkIG9yIGhhdmUgdGhlIGRlc2lyZWQgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzc4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA5OjEyOjUwLjQ5ODI2ODE4OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2NTIzMDY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRVhUNF9GU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9leHQ0L0tjb25maWc6Mjpjb25maWcgRVhUNF9GU1xcbmZzL2V4dDQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVxcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZz0zNT1jb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy00NS1cXG5mcy9leHQ0L0tjb25maWc6NDY6Y29uZmlnIEVYVDRfRlNfUE9TSVhfQUNMXFxuZnMvZXh0NC9LY29uZmlnLTQ3LVxcdGJvb2wgXFxcIkV4dDQgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNTUtXFxuZnMvZXh0NC9LY29uZmlnOjU2OmNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXFxuZnMvZXh0NC9LY29uZmlnLTU3LVxcdGJvb2wgXFxcIkV4dDQgU2VjdXJpdHkgTGFiZWxzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwOToxMjo1Mi45NjM1MDM5MDlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTUxNDU2MDcxNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIEVYVDQgQmxvY2sgQWxsb2NhdGlvbioqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIHByaW1hcmlseSBkZWFsaW5nIHdpdGggYEVYVDRfRlNgIGhlcmUg4oCTIHRoYXQncyB0aGUgZmlsZXN5c3RlbSB3ZSdyZSBmb2N1c2luZyBvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgdmVyaWZ5IGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHRpZWQgdG8gYEZBTExPQ19GTF9XUklURV9aRVJPRVNgLiBJJ20gcHJldHR5IHN1cmUgaXQncyBqdXN0IGEgbmV3IGZsYWcgaW50cm9kdWNlZCB3aXRoaW4gdGhlIGBmYWxsb2NhdGVgIHN5c3RlbSBjYWxsIGl0c2VsZi4gSG93ZXZlciwgaXQncyBhbHdheXMgZ29vZCB0byBkb3VibGUtY2hlY2suXG5cbk5vdywgSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBzdXNwaWNpb24gYnkgcXVpY2tseSByZXZpZXdpbmcgYGV4dDRfYWxsb2NfZmlsZV9ibG9ja3NgLiBJIHdhbnQgdG8gc2VlIHByZWNpc2VseSBob3cgaXQncyBoYW5kbGVkIHdpdGhpbiB0aGUgYGV4dDRgIGJsb2NrIGFsbG9jYXRpb24gcm91dGluZXMuIFRoaXMnbGwgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyB0aGlzIGZsYWcgaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSBsYXJnZXIgYWxsb2NhdGlvbiBmcmFtZXdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDkyLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDk6MTM6MDguMTA5MTQ3OTI5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODc1NTI4ODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfYWxsb2NfZmlsZV9ibG9ja3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9leHRlbnRzLmM9NDU0Mz1pbnQgZXh0NF9leHRfdHJ1bmNhdGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ1NzMtXFxuZnMvZXh0NC9leHRlbnRzLmM6NDU3NDpzdGF0aWMgaW50IGV4dDRfYWxsb2NfZmlsZV9ibG9ja3Moc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4sXFxuZnMvZXh0NC9leHRlbnRzLmMtNDU3NS1cXHRcXHRcXHRcXHQgIGxvZmZfdCBuZXdfc2l6ZSwgaW50IGZsYWdzKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9NDczND1zdGF0aWMgbG9uZyBleHQ0X3plcm9fcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy00NzY1LVxcdGlmICghSVNfQUxJR05FRChvZmZzZXQgfCBlbmQsIGJsb2Nrc2l6ZSkpIHtcXG5mcy9leHQ0L2V4dGVudHMuYzo0NzY2OlxcdFxcdHJldCA9IGV4dDRfYWxsb2NfZmlsZV9ibG9ja3MoZmlsZSwgb2Zmc2V0LCBsZW4sIG5ld19zaXplLFxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ3NjctXFx0XFx0XFx0XFx0XFx0ICAgICBmbGFncyk7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy00ODA3LVxcdFxcdFxcdFxcdCAgRVhUNF9FWF9OT0NBQ0hFKTtcXG5mcy9leHQ0L2V4dGVudHMuYzo0ODA4OlxcdFxcdHJldCA9IGV4dDRfYWxsb2NfZmlsZV9ibG9ja3MoZmlsZSwgYWxpZ25fc3RhcnQsXFxuZnMvZXh0NC9leHRlbnRzLmMtNDgwOS1cXHRcXHRcXHRcXHRcXHQgICAgIGFsaWduX2VuZCAtIGFsaWduX3N0YXJ0LCBuZXdfc2l6ZSxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTQ4NTU9c3RhdGljIGxvbmcgZXh0NF9kb19mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy00ODc5LVxcbmZzL2V4dDQvZXh0ZW50cy5jOjQ4ODA6XFx0cmV0ID0gZXh0NF9hbGxvY19maWxlX2Jsb2NrcyhmaWxlLCBvZmZzZXQsIGxlbiwgbmV3X3NpemUsXFxuZnMvZXh0NC9leHRlbnRzLmMtNDg4MS1cXHRcXHRcXHRcXHQgICAgIEVYVDRfR0VUX0JMT0NLU19DUkVBVEVfVU5XUklUX0VYVCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA5OjEzOjEwLjk4NDY4Mjc2NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMjU4NDIzNzIxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBleHQ0IEZpbGVzeXN0ZW0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgZGVlcCBpbnRvIHRoZSBleHQ0IGJsb2NrIGFsbG9jYXRpb24gYW5kIHplcm9pbmcgcm91dGluZXMuIFNwZWNpZmljYWxseSwgaXQncyBhYm91dCBhZGRpbmcgc3VwcG9ydCBmb3IgYEZBTExPQ19GTF9XUklURV9aRVJPRVNgLiBJJ20gc2VlaW5nIG1vZGlmaWNhdGlvbnMgdG8gYGV4dDRfYWxsb2NfZmlsZV9ibG9ja3NgLCBgZXh0NF96ZXJvX3JhbmdlYCwgYW5kIGBleHQ0X3plcm9fcGFydGlhbF9ibG9ja3NgIOKAkyB0aGF0J3MgYSBzaWduaWZpY2FudCBjaHVuayBvZiBjb3JlIGZ1bmN0aW9uYWxpdHkuIEFuZCB0aGVyZSdzIGFsc28gYSB0d2VhayB0byBgZXh0NF9sb2FkX3RhaWxfYmhgLCB3aGljaCBtYWtlcyBtZSBpbW1lZGlhdGVseSB0aGluayBhYm91dCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggdW53cml0dGVuIGV4dGVudHMgYW5kIGhvdyB0aGUgZmlsZXN5c3RlbSBoYW5kbGVzIGhvbGVzLiBUaGUgY2hhbmdlIHRvIGBleHQ0X3plcm9fcGFydGlhbF9ibG9ja3NgIHJldHVybmluZyBhIGJpdG1hc2sgaXMgYWxzbyBpbnRlcmVzdGluZzsgdGhhdCBjb3VsZCBpbXBhY3QgZXJyb3IgaGFuZGxpbmcgb3IgaG93IHplcm9pbmcgaXMgdHJhY2tlZC5cblxuVGhpcyBpcyBhIHByZXR0eSBmdW5kYW1lbnRhbCBmdW5jdGlvbmFsIGNoYW5nZS4gSXQncyB0b3VjaGluZyBob3cgdGhlIGZpbGVzeXN0ZW0gYWxsb2NhdGVzIGJsb2NrcywgaG93IGl0IHplcm9lcyBkYXRhIChwYXJ0aWFsbHkgKmFuZCogY29tcGxldGVseSksIGFuZCBob3cgaXQgZGVhbHMgd2l0aCBwb3RlbnRpYWwgaW5jb25zaXN0ZW5jaWVzIHdpdGggdW53cml0dGVuIGRhdGEuIFNpbmNlIHRoaXMgZGlyZWN0bHkgaW1wYWN0cyB0aGUgYGZhbGxvY2F0ZWAgaW1wbGVtZW50YXRpb24sIHdoaWNoIGludGVyYWN0cyB3aXRoIGBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzYCwgSSBzaG91bGQgZGVmaW5pdGVseSBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGVzZSByb3V0aW5lcyBhbmQgbWFrZSBzdXJlIHRoZXkgYWxsIGhhbmRsZSB0aGUgbmV3IGZsYWcgY29ycmVjdGx5LiBJIGFsc28gd2FudCB0byBtYWtlIHN1cmUgdGhlIGludGVyYWN0aW9ucyB3aXRoIGBvcnBoYW5gIGxpc3RzIGRvbid0IGludHJvZHVjZSBuZXcgaW5jb25zaXN0ZW5jaWVzLCBnaXZlbiB0aGUgY2hhbmdlcyB0byBhbGxvY2F0aW9uLlxuXG5HaXZlbiB0aGUgc2NvcGUgYW5kIGltcGFjdCBvbiB0aGVzZSBjcml0aWNhbCBleHQ0IGNvbXBvbmVudHMsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyB0aG9yb3VnaGx5IGZ1enplZC4gVGhlIHByaW1hcnkgZm9jdXMgc2hvdWxkIGJlIG9uIHRob3NlIHNwZWNpZmljIHN5bWJvbHM6IGBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzYCwgYGV4dDRfemVyb19yYW5nZWAsIGBleHQ0X3plcm9fcGFydGlhbF9ibG9ja3NgLCBgZXh0NF9sb2FkX3RhaWxfYmhgLCBhbmQgb2YgY291cnNlIGBleHQ0X2ZhbGxvY2F0ZWAgaXRzZWxmLiBJIG5lZWQgdG8gZ2V0IHRoZSBgRVhUNF9GU2AgY29uZmlndXJhdGlvbiB2ZXJpZmllZCBhcyB3ZWxsLlxuXG5CZWZvcmUgSSBnbyBmdXJ0aGVyLCBsZXQncyB2ZXJpZnkgaWYgYGV4dDRfbG9hZF90YWlsX2JoYCBpcyBzdGF0aWMuIFRoYXQgd2lsbCBkZXRlcm1pbmUgaG93IGVhc3kgb3IgZGlmZmljdWx0IGl0IGlzIHRvIHRlc3QgaXQgaW4gaXNvbGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjI1NSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwOToxMzozMy41Njg5MjE2ODJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyODA5MzY5NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9sb2FkX3RhaWxfYmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9pbm9kZS5jPTQwMDQ9dm9pZCBleHQ0X3NldF9hb3BzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNDAzMy0gKi9cXG5mcy9leHQ0L2lub2RlLmM6NDAzNDpzdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICpleHQ0X2xvYWRfdGFpbF9iaChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgZnJvbSlcXG5mcy9leHQ0L2lub2RlLmMtNDAzNS17XFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9NDExMj1zdGF0aWMgaW50IGV4dDRfYmxvY2tfZG9femVyb19yYW5nZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgZnJvbSxcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy00MTE4LVxcbmZzL2V4dDQvaW5vZGUuYzo0MTE5OlxcdGJoID0gZXh0NF9sb2FkX3RhaWxfYmgoaW5vZGUsIGZyb20pO1xcbmZzL2V4dDQvaW5vZGUuYy00MTIwLVxcdGlmIChJU19FUlJfT1JfTlVMTChiaCkpXFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9NDEzOD1zdGF0aWMgaW50IGV4dDRfYmxvY2tfam91cm5hbGxlZF96ZXJvX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBmcm9tLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTQxNDktXFxuZnMvZXh0NC9pbm9kZS5jOjQxNTA6XFx0YmggPSBleHQ0X2xvYWRfdGFpbF9iaChpbm9kZSwgZnJvbSk7XFxuZnMvZXh0NC9pbm9kZS5jLTQxNTEtXFx0aWYgKElTX0VSUl9PUl9OVUxMKGJoKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwOToxMzozNi44NDk4NjU5MjVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU1NzkyMDEyMjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgZm9ybWF0dGVkIGFzIHJlcXVlc3RlZDpcblxuKipNYWtpbmcgU3VyZSB0aGUgRGV0YWlscyBhcmUgU2V0KipcblxuUmlnaHQsIHNvIGBleHQ0X2xvYWRfdGFpbF9iaGAgaXMgZGVmaW5pdGVseSBhIHN0YXRpYyBmdW5jdGlvbi4gSSdsbCBtYWtlIGEgbm90ZSB0byBpbmNsdWRlIHRoYXQgaW4gdGhlIGZvY3VzIHN5bWJvbHMsIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIGF2b2lkIGFueSBjb25mdXNpb24gbGF0ZXIgb24uXG5cbk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHNvbWV0aGluZyDigJMgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FU2AgZmxhZyBpcyBkZWZpbmVkIGFzIGV4cGVjdGVkLiBMZXQgbWUgY2hlY2sgdGhlIGluY2x1ZGUgZmlsZeKApiB5ZXAsIGNvbmZpcm1lZCEgSXQncyBwcm9wZXJseSBkZWZpbmVkIGluIGBpbmNsdWRlL3VhcGkvbGludXgvZmFsbG9jLmhgIGFuZCBpcyBjb3JyZWN0bHkgYXNzaWduZWQgdGhlIHZhbHVlIGAweDgwYC5cblxuT2theSwgd2l0aCB0aG9zZSBkZXRhaWxzIG5haWxlZCBkb3duLCBJJ20gY29tZm9ydGFibGUgc2V0dGluZyB0aGUgcmVzdWx0cyBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMzc2LCJPdXRwdXRUb2tlbnMiOjIwMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDA5OjE2OjEyLjY0MTg4MTE3NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzUyNjMxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfYWxsb2NfZmlsZV9ibG9ja3NcIixcbiAgICBcImV4dDRfemVyb19yYW5nZVwiLFxuICAgIFwiZXh0NF96ZXJvX3BhcnRpYWxfYmxvY2tzXCIsXG4gICAgXCJleHQ0X2xvYWRfdGFpbF9iaFwiLFxuICAgIFwiZXh0NF9mYWxsb2NhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIGEgbmV3IGZhbGxvY2F0ZSBmbGFnIGBGQUxMT0NfRkxfV1JJVEVfWkVST0VTYCBpbiBleHQ0LiBJdCBtb2RpZmllcyB0aGUgY29yZSBibG9jayBhbGxvY2F0aW9uIGFuZCB6ZXJvaW5nIGxvZ2ljLCBpbmNsdWRpbmcgYGV4dDRfemVyb19yYW5nZWAsIGBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzYCwgYW5kIGBleHQ0X3plcm9fcGFydGlhbF9ibG9ja3NgLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBob3cgZXh0NCBoYW5kbGVzIHVud3JpdHRlbiBleHRlbnRzLCBwYXJ0aWFsIGJsb2NrIHplcm9pbmcsIGFuZCBvcnBoYW4gbGlzdHMgZHVyaW5nIGZhbGxvY2F0ZSBvcGVyYXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGZpbGVzeXN0ZW0gY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGRvZXNuJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIHZ1bG5lcmFiaWxpdGllcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9hbGxvY19maWxlX2Jsb2Nrc1wiLFxuICAgIFwiZXh0NF96ZXJvX3JhbmdlXCIsXG4gICAgXCJleHQ0X3plcm9fcGFydGlhbF9ibG9ja3NcIixcbiAgICBcImV4dDRfbG9hZF90YWlsX2JoXCIsXG4gICAgXCJleHQ0X2ZhbGxvY2F0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgYSBuZXcgZmFsbG9jYXRlIGZsYWcgYEZBTExPQ19GTF9XUklURV9aRVJPRVNgIGluIGV4dDQuIEl0IG1vZGlmaWVzIHRoZSBjb3JlIGJsb2NrIGFsbG9jYXRpb24gYW5kIHplcm9pbmcgbG9naWMsIGluY2x1ZGluZyBgZXh0NF96ZXJvX3JhbmdlYCwgYGV4dDRfYWxsb2NfZmlsZV9ibG9ja3NgLCBhbmQgYGV4dDRfemVyb19wYXJ0aWFsX2Jsb2Nrc2AuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGhvdyBleHQ0IGhhbmRsZXMgdW53cml0dGVuIGV4dGVudHMsIHBhcnRpYWwgYmxvY2sgemVyb2luZywgYW5kIG9ycGhhbiBsaXN0cyBkdXJpbmcgZmFsbG9jYXRlIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgZmlsZXN5c3RlbSBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow99r7q[1] Phase: Succeeded StartedAt: 2026-07-07 09:16:24 +0000 UTC FinishedAt: 2026-07-07 09:16:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99r7q[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-07 09:16:24 +0000 UTC FinishedAt: 2026-07-07 09:16:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99r7q[2] Phase: Succeeded StartedAt: 2026-07-07 09:16:24 +0000 UTC FinishedAt: 2026-07-07 13:37:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99r7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","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_alloc_file_blocks","ext4_zero_range","ext4_zero_partial_blocks","ext4_load_tail_bh","ext4_fallocate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2aaac962-53b6-470a-858b-d0f5507911a1","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-07 09:16:24 +0000 UTC FinishedAt: 2026-07-07 13:37:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","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_alloc_file_blocks","ext4_zero_range","ext4_zero_partial_blocks","ext4_load_tail_bh","ext4_fallocate"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2aaac962-53b6-470a-858b-d0f5507911a1","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-workflow99r7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","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_alloc_file_blocks","ext4_zero_range","ext4_zero_partial_blocks","ext4_load_tail_bh","ext4_fallocate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2aaac962-53b6-470a-858b-d0f5507911a1","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-07-07 09:16:24 +0000 UTC FinishedAt: 2026-07-07 09:16:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99r7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","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_alloc_file_blocks","ext4_zero_range","ext4_zero_partial_blocks","ext4_load_tail_bh","ext4_fallocate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2aaac962-53b6-470a-858b-d0f5507911a1","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-07-07 09:16:24 +0000 UTC FinishedAt: 2026-07-07 09:16:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","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-workflow99r7q/series-workflow99r7q-convert-artifact-3123453727/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow99r7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","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_alloc_file_blocks","ext4_zero_range","ext4_zero_partial_blocks","ext4_load_tail_bh","ext4_fallocate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2aaac962-53b6-470a-858b-d0f5507911a1","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-07-07 09:16:46 +0000 UTC FinishedAt: 2026-07-07 09:48:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99r7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","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_alloc_file_blocks","ext4_zero_range","ext4_zero_partial_blocks","ext4_load_tail_bh","ext4_fallocate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2aaac962-53b6-470a-858b-d0f5507911a1","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-07-07 09:16:46 +0000 UTC FinishedAt: 2026-07-07 09:48:50 +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:*8e7f9432-0007-4eed-b92c-ee171c027e45,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-workflow99r7q/series-workflow99r7q-convert-artifact-3123453727/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": "f2ebc541-98ff-49dd-8ddc-ed89ea3c7eb1", "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-workflow99r7q/series-workflow99r7q-build-action-2071236901/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow99r7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","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_alloc_file_blocks","ext4_zero_range","ext4_zero_partial_blocks","ext4_load_tail_bh","ext4_fallocate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2aaac962-53b6-470a-858b-d0f5507911a1","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-07-07 09:16:46 +0000 UTC FinishedAt: 2026-07-07 09:48:40 +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:*8e7f9432-0007-4eed-b92c-ee171c027e45,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-workflow99r7q/series-workflow99r7q-convert-artifact-3123453727/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": "f2ebc541-98ff-49dd-8ddc-ed89ea3c7eb1", "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-workflow99r7q/series-workflow99r7q-build-action-2071236901/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow99r7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","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_alloc_file_blocks","ext4_zero_range","ext4_zero_partial_blocks","ext4_load_tail_bh","ext4_fallocate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2aaac962-53b6-470a-858b-d0f5507911a1","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-07-07 09:48:50 +0000 UTC FinishedAt: 2026-07-07 09:48:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99r7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","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_alloc_file_blocks","ext4_zero_range","ext4_zero_partial_blocks","ext4_load_tail_bh","ext4_fallocate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2aaac962-53b6-470a-858b-d0f5507911a1","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-07-07 09:48:50 +0000 UTC FinishedAt: 2026-07-07 09:48:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99r7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","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_alloc_file_blocks","ext4_zero_range","ext4_zero_partial_blocks","ext4_load_tail_bh","ext4_fallocate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2aaac962-53b6-470a-858b-d0f5507911a1","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-07-07 09:48:50 +0000 UTC FinishedAt: 2026-07-07 09:49:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99r7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","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_alloc_file_blocks","ext4_zero_range","ext4_zero_partial_blocks","ext4_load_tail_bh","ext4_fallocate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2aaac962-53b6-470a-858b-d0f5507911a1","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-07-07 09:48:50 +0000 UTC FinishedAt: 2026-07-07 09:48:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2aaac962-53b6-470a-858b-d0f5507911a1","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-workflow99r7q/series-workflow99r7q-convert-artifact-3521806766/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow99r7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","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_alloc_file_blocks","ext4_zero_range","ext4_zero_partial_blocks","ext4_load_tail_bh","ext4_fallocate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2aaac962-53b6-470a-858b-d0f5507911a1","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-07-07 09:49:00 +0000 UTC FinishedAt: 2026-07-07 09:51:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99r7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","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_alloc_file_blocks","ext4_zero_range","ext4_zero_partial_blocks","ext4_load_tail_bh","ext4_fallocate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2aaac962-53b6-470a-858b-d0f5507911a1","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-07-07 09:49:00 +0000 UTC FinishedAt: 2026-07-07 09:51:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f2ebc541-98ff-49dd-8ddc-ed89ea3c7eb1,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-workflow99r7q/series-workflow99r7q-build-action-2071236901/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-workflow99r7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","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_alloc_file_blocks","ext4_zero_range","ext4_zero_partial_blocks","ext4_load_tail_bh","ext4_fallocate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2aaac962-53b6-470a-858b-d0f5507911a1","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-07-07 09:51:12 +0000 UTC FinishedAt: 2026-07-07 09:51:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99r7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","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_alloc_file_blocks","ext4_zero_range","ext4_zero_partial_blocks","ext4_load_tail_bh","ext4_fallocate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2aaac962-53b6-470a-858b-d0f5507911a1","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-07-07 09:51:12 +0000 UTC FinishedAt: 2026-07-07 09:51:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99r7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","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_alloc_file_blocks","ext4_zero_range","ext4_zero_partial_blocks","ext4_load_tail_bh","ext4_fallocate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2aaac962-53b6-470a-858b-d0f5507911a1","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-07-07 09:51:12 +0000 UTC FinishedAt: 2026-07-07 10:33:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99r7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","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_alloc_file_blocks","ext4_zero_range","ext4_zero_partial_blocks","ext4_load_tail_bh","ext4_fallocate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2aaac962-53b6-470a-858b-d0f5507911a1","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-07-07 09:51:12 +0000 UTC FinishedAt: 2026-07-07 10:33:34 +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:*8e7f9432-0007-4eed-b92c-ee171c027e45,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-workflow99r7q/series-workflow99r7q-convert-artifact-3521806766/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": "0c039ac7-2b66-44fc-8905-f8f0d122a3aa", "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-workflow99r7q/series-workflow99r7q-build-action-4062394562/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow99r7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","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_alloc_file_blocks","ext4_zero_range","ext4_zero_partial_blocks","ext4_load_tail_bh","ext4_fallocate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2aaac962-53b6-470a-858b-d0f5507911a1","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-07-07 09:51:12 +0000 UTC FinishedAt: 2026-07-07 10:32:46 +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:*8e7f9432-0007-4eed-b92c-ee171c027e45,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-workflow99r7q/series-workflow99r7q-convert-artifact-3521806766/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": "0c039ac7-2b66-44fc-8905-f8f0d122a3aa", "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-workflow99r7q/series-workflow99r7q-build-action-4062394562/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow99r7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","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_alloc_file_blocks","ext4_zero_range","ext4_zero_partial_blocks","ext4_load_tail_bh","ext4_fallocate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2aaac962-53b6-470a-858b-d0f5507911a1","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-07-07 10:33:34 +0000 UTC FinishedAt: 2026-07-07 10:33:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99r7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","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_alloc_file_blocks","ext4_zero_range","ext4_zero_partial_blocks","ext4_load_tail_bh","ext4_fallocate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2aaac962-53b6-470a-858b-d0f5507911a1","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-07-07 10:33:34 +0000 UTC FinishedAt: 2026-07-07 10:33:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99r7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","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_alloc_file_blocks","ext4_zero_range","ext4_zero_partial_blocks","ext4_load_tail_bh","ext4_fallocate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2aaac962-53b6-470a-858b-d0f5507911a1","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-07-07 10:33:34 +0000 UTC FinishedAt: 2026-07-07 10:35:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99r7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","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_alloc_file_blocks","ext4_zero_range","ext4_zero_partial_blocks","ext4_load_tail_bh","ext4_fallocate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2aaac962-53b6-470a-858b-d0f5507911a1","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-07-07 10:33:34 +0000 UTC FinishedAt: 2026-07-07 10:35:22 +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:*0c039ac7-2b66-44fc-8905-f8f0d122a3aa,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-workflow99r7q/series-workflow99r7q-build-action-4062394562/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-workflow99r7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","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_alloc_file_blocks","ext4_zero_range","ext4_zero_partial_blocks","ext4_load_tail_bh","ext4_fallocate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2aaac962-53b6-470a-858b-d0f5507911a1","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-07-07 10:35:32 +0000 UTC FinishedAt: 2026-07-07 13:37:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99r7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","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_alloc_file_blocks","ext4_zero_range","ext4_zero_partial_blocks","ext4_load_tail_bh","ext4_fallocate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2aaac962-53b6-470a-858b-d0f5507911a1","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-07-07 10:35:32 +0000 UTC FinishedAt: 2026-07-07 13:37:26 +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_alloc_file_blocks","ext4_zero_range","ext4_zero_partial_blocks","ext4_load_tail_bh","ext4_fallocate"],"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:*f2ebc541-98ff-49dd-8ddc-ed89ea3c7eb1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0c039ac7-2b66-44fc-8905-f8f0d122a3aa,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-workflow99r7q/series-workflow99r7q-build-action-2071236901/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-workflow99r7q/series-workflow99r7q-build-action-4062394562/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow99r7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","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_alloc_file_blocks","ext4_zero_range","ext4_zero_partial_blocks","ext4_load_tail_bh","ext4_fallocate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2aaac962-53b6-470a-858b-d0f5507911a1","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-07-07 10:35:32 +0000 UTC FinishedAt: 2026-07-07 10:35:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99r7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","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_alloc_file_blocks","ext4_zero_range","ext4_zero_partial_blocks","ext4_load_tail_bh","ext4_fallocate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2aaac962-53b6-470a-858b-d0f5507911a1","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-07-07 10:35:32 +0000 UTC FinishedAt: 2026-07-07 10:35:40 +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_alloc_file_blocks","ext4_zero_range","ext4_zero_partial_blocks","ext4_load_tail_bh","ext4_fallocate"],"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-workflow99r7q/series-workflow99r7q-convert-artifact-2802646611/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow99r7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","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_alloc_file_blocks","ext4_zero_range","ext4_zero_partial_blocks","ext4_load_tail_bh","ext4_fallocate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2aaac962-53b6-470a-858b-d0f5507911a1","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-07-07 10:35:32 +0000 UTC FinishedAt: 2026-07-07 10:35:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99r7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","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_alloc_file_blocks","ext4_zero_range","ext4_zero_partial_blocks","ext4_load_tail_bh","ext4_fallocate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2aaac962-53b6-470a-858b-d0f5507911a1","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-07-07 10:35:32 +0000 UTC FinishedAt: 2026-07-07 10:35:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99r7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","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_alloc_file_blocks","ext4_zero_range","ext4_zero_partial_blocks","ext4_load_tail_bh","ext4_fallocate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2aaac962-53b6-470a-858b-d0f5507911a1","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-07-07 10:35:32 +0000 UTC FinishedAt: 2026-07-07 10:35:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99r7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","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_alloc_file_blocks","ext4_zero_range","ext4_zero_partial_blocks","ext4_load_tail_bh","ext4_fallocate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2aaac962-53b6-470a-858b-d0f5507911a1","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-07-07 10:35:42 +0000 UTC FinishedAt: 2026-07-07 13:37:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow99r7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","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_alloc_file_blocks","ext4_zero_range","ext4_zero_partial_blocks","ext4_load_tail_bh","ext4_fallocate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d86d4f8cbb5a55a3b9b86f7b5ab8c4cdda600a3f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2aaac962-53b6-470a-858b-d0f5507911a1","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-07-07 10:35:42 +0000 UTC FinishedAt: 2026-07-07 13:37:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f2ebc541-98ff-49dd-8ddc-ed89ea3c7eb1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0c039ac7-2b66-44fc-8905-f8f0d122a3aa,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-workflow99r7q/series-workflow99r7q-build-action-2071236901/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-workflow99r7q/series-workflow99r7q-build-action-4062394562/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-workflow99r7q/series-workflow99r7q-convert-artifact-2802646611/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,}